diff --git a/.nvmrc b/.nvmrc index 48b14e6b2b5..2a393af592b 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -20.14.0 +20.18.0 diff --git a/.vscode/launch.json b/.vscode/launch.json index 959db830720..23c13b65016 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -14,7 +14,7 @@ ], "type": "node", "envFile": "${workspaceFolder}/.env", - "runtimeVersion": "18.16.1" + "runtimeVersion": "20.18.0" }, { "name": "Debug Main Process", @@ -30,7 +30,7 @@ "DEBUG": "*" }, "sourceMaps": true, - "runtimeVersion": "18.16.1" + "runtimeVersion": "20.18.0" } ] } diff --git a/package-lock.json b/package-lock.json index 15fa2033ef6..347eb2f6954 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,73 +1,76 @@ { "name": "uhk-agent", - "version": "4.2.0", + "version": "4.2.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "uhk-agent", - "version": "4.2.0", + "version": "4.2.1", "hasInstallScript": true, "license": "See in LICENSE", "devDependencies": { - "@lerna/legacy-package-management": "8.1.3", - "@types/command-line-args": "5.2.0", - "@types/command-line-usage": "5.0.2", - "@types/decompress": "4.2.4", + "@lerna/legacy-package-management": "8.1.9", + "@types/command-line-args": "5.2.3", + "@types/command-line-usage": "5.0.4", + "@types/decompress": "4.2.7", "@types/electron-devtools-installer": "2.0.2", - "@types/file-saver": "2.0.5", - "@types/jasmine": "4.3.1", - "@types/lodash": "4.14.168", - "@types/node": "18.16.19", - "@types/tmp": "0.2.0", - "@types/yargs": "17.0.32", + "@types/file-saver": "2.0.7", + "@types/jasmine": "5.1.4", + "@types/lodash": "4.17.10", + "@types/node": "20.16.10", + "@types/tmp": "0.2.6", + "@types/yargs": "17.0.33", "@typescript-eslint/eslint-plugin": "7.11.0", "@typescript-eslint/parser": "7.11.0", "check-node-version": "4.2.1", - "copy-webpack-plugin": "11.0.0", + "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", "decompress": "4.2.1", "decompress-targz": "^4.1.1", "desm": "1.3.0", - "electron": "31.0.2", - "electron-builder": "24.13.3", + "electron": "33.2.0", + "electron-builder": "25.1.8", "electron-debug": "1.5.0", "electron-devtools-installer": "2.2.3", "electron-log": "4.4.8", "electron-settings": "4.0.4", - "electron-updater": "6.0.4", + "electron-updater": "6.3.9", "eslint": "8.57.0", "fs-extra": "11.2.0", - "jasmine": "4.6.0", - "lerna": "8.1.3", + "jasmine": "5.3.1", + "lerna": "8.1.9", "lodash": "4.17.21", - "node-hid": "3.1.0", + "node-hid": "3.1.2", "npm-run-all": "4.1.5", "nrf-intel-hex": "1.3.0", "postcss-scss": "4.0.9", - "rimraf": "5.0.5", + "rimraf": "6.0.1", + "serialport": "12.0.0", "source-map-support": "0.5.21", "stylelint": "15.11.0", - "svg-sprite": "2.0.2", + "svg-sprite": "2.0.4", "ts-loader": "9.5.1", "ts-node": "10.9.2", "tsx": "4.9.1", "typescript": "5.3.3", - "webpack": "5.90.3", + "webpack": "5.96.1", "webpack-cli": "5.1.4" }, "engines": { - "node": ">=20.14.0 <21.0.0", - "npm": ">=10.7.0 <11.0.0" + "node": ">=20.18.0 <21.0.0", + "npm": ">=10.8.2 <11.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", - "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", "dev": true, + "license": "MIT", "dependencies": { - "@babel/highlight": "^7.24.7", + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", "picocolors": "^1.0.0" }, "engines": { @@ -75,105 +78,21 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", - "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.24.7", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", - "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.24.7", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0", - "picocolors": "^1.0.0" - }, + "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@colors/colors": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz", "integrity": "sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.1.90" } @@ -183,6 +102,7 @@ "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -191,9 +111,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz", - "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -205,17 +125,18 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz", - "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -227,14 +148,15 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.11", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz", - "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -246,12 +168,13 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT", "engines": { "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.6.3", - "@csstools/css-tokenizer": "^2.3.1" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { @@ -269,6 +192,7 @@ "url": "https://opencollective.com/csstools" } ], + "license": "MIT-0", "engines": { "node": "^14 || ^16 || >=18" }, @@ -281,6 +205,7 @@ "resolved": "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz", "integrity": "sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==", "dev": true, + "license": "MIT", "dependencies": { "colorspace": "1.1.x", "enabled": "2.0.x", @@ -292,6 +217,7 @@ "resolved": "https://registry.npmjs.org/@develar/schema-utils/-/schema-utils-2.6.5.tgz", "integrity": "sha512-0cp4PsWQ/9avqTVMCtZ+GirikIA36ikvjtHweU4/j8yLtgObI0+JUPhYFScgwlteveGB1rt3Cm8UhN04XayDig==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^6.12.0", "ajv-keywords": "^3.4.1" @@ -309,15 +235,17 @@ "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@electron/asar": { - "version": "3.2.10", - "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.10.tgz", - "integrity": "sha512-mvBSwIBUeiRscrCeJE1LwctAriBj65eUDm0Pc11iE5gRwzkmsdbS7FnZ1XUWjpSeQWL1L5g12Fc/SchPM9DUOw==", + "version": "3.2.17", + "resolved": "https://registry.npmjs.org/@electron/asar/-/asar-3.2.17.tgz", + "integrity": "sha512-OcWImUI686w8LkghQj9R2ynZ2ME693Ek6L1SiaAgqGKzBaTIZw3fHDqN82Rcl+EU1Gm9EgkJ5KLIY/q5DCRbbA==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^5.0.0", "glob": "^7.1.6", @@ -336,6 +264,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -356,6 +285,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -368,6 +298,7 @@ "resolved": "https://registry.npmjs.org/@electron/get/-/get-2.0.3.tgz", "integrity": "sha512-Qkzpg2s9GnVV2I2BjRksUi43U5e6+zaQMcjoJy0C+C5oxaKl+fmckGDQFtRpZpZV0NQekuZZ+tGz7EA9TVnQtQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "env-paths": "^2.2.0", @@ -389,6 +320,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^4.0.0", @@ -403,6 +335,7 @@ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", "dev": true, + "license": "MIT", "optionalDependencies": { "graceful-fs": "^4.1.6" } @@ -412,6 +345,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -421,15 +355,17 @@ "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.0.0" } }, "node_modules/@electron/notarize": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.2.1.tgz", - "integrity": "sha512-aL+bFMIkpR0cmmj5Zgy0LMKEpgy43/hw5zadEArgmAMWWlKc5buwFvFT9G/o/YJkvXAJm5q3iuTuLaiaXW39sg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@electron/notarize/-/notarize-2.5.0.tgz", + "integrity": "sha512-jNT8nwH1f9X5GEITXaQ8IF/KdskvIkOFfB2CvwumsveVidzpSc+mvhhTMdAGSYF3O+Nq49lJ7y+ssODRXu06+A==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.1.1", "fs-extra": "^9.0.1", @@ -444,6 +380,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -455,10 +392,11 @@ } }, "node_modules/@electron/osx-sign": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.0.5.tgz", - "integrity": "sha512-k9ZzUQtamSoweGQDV2jILiRIHUu7lYlJ3c6IEmjv1hC17rclE+eb9U+f6UFlOOETo0JzY1HNlXy4YOlCvl+Lww==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@electron/osx-sign/-/osx-sign-1.3.1.tgz", + "integrity": "sha512-BAfviURMHpmb1Yb50YbCxnOY0wfwaLXH5KJ4+80zS0gUkzDX3ec23naTlEqKsN+PwYn+a1cCzM7BJ4Wcd3sGzw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "compare-version": "^0.1.2", "debug": "^4.3.4", @@ -480,6 +418,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -494,6 +433,7 @@ "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8.0.0" }, @@ -501,1229 +441,1378 @@ "url": "https://github.com/sponsors/gjtorikian/" } }, - "node_modules/@electron/universal": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-1.5.1.tgz", - "integrity": "sha512-kbgXxyEauPJiQQUNG2VgUeyfQNFk6hBF11ISN2PNI6agUgPl55pv4eQmaqHzTAzchBvqZ2tQuRVaPStGf0mxGw==", + "node_modules/@electron/rebuild": { + "version": "3.6.1", + "resolved": "https://registry.npmjs.org/@electron/rebuild/-/rebuild-3.6.1.tgz", + "integrity": "sha512-f6596ZHpEq/YskUd8emYvOUne89ij8mQgjYFA5ru25QwbrRO+t1SImofdDv7kKOuWCmVOuU5tvfkbgGxIl3E/w==", "dev": true, + "license": "MIT", "dependencies": { - "@electron/asar": "^3.2.1", - "@malept/cross-spawn-promise": "^1.1.0", - "debug": "^4.3.1", - "dir-compare": "^3.0.0", - "fs-extra": "^9.0.1", - "minimatch": "^3.0.4", - "plist": "^3.0.4" + "@malept/cross-spawn-promise": "^2.0.0", + "chalk": "^4.0.0", + "debug": "^4.1.1", + "detect-libc": "^2.0.1", + "fs-extra": "^10.0.0", + "got": "^11.7.0", + "node-abi": "^3.45.0", + "node-api-version": "^0.2.0", + "node-gyp": "^9.0.0", + "ora": "^5.1.0", + "read-binary-file-arch": "^1.0.6", + "semver": "^7.3.5", + "tar": "^6.0.5", + "yargs": "^17.0.1" + }, + "bin": { + "electron-rebuild": "lib/cli.js" }, "engines": { - "node": ">=8.6" + "node": ">=12.13.0" } }, - "node_modules/@electron/universal/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@electron/rebuild/node_modules/@npmcli/fs": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", + "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", "dev": true, + "license": "ISC", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], + "node_modules/@electron/rebuild/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==", "dev": true, - "optional": true, - "os": [ - "aix" - ], + "license": "ISC" + }, + "node_modules/@electron/rebuild/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "4" + }, "engines": { - "node": ">=12" + "node": ">= 6.0.0" } }, - "node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], + "node_modules/@electron/rebuild/node_modules/cacache": { + "version": "16.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", + "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "ISC", + "dependencies": { + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], + "node_modules/@electron/rebuild/node_modules/cacache/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==", "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/node_modules/cacache/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, - "optional": true, - "os": [ - "android" - ], + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], + "node_modules/@electron/rebuild/node_modules/cacache/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, "engines": { "node": ">=12" } }, - "node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], + "node_modules/@electron/rebuild/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==", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/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", "dev": true, - "optional": true, - "os": [ - "freebsd" - ], + "license": "ISC", + "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": ">=12" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], + "node_modules/@electron/rebuild/node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], + "node_modules/@electron/rebuild/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==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": ">=12" + "node": ">= 6" } }, - "node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], + "node_modules/@electron/rebuild/node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } + "license": "ISC" }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], + "node_modules/@electron/rebuild/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", "engines": { "node": ">=12" } }, - "node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], + "node_modules/@electron/rebuild/node_modules/make-fetch-happen": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", + "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], + "node_modules/@electron/rebuild/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], + "node_modules/@electron/rebuild/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], + "node_modules/@electron/rebuild/node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, "engines": { - "node": ">=12" + "node": ">= 8" } }, - "node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/node_modules/minipass-fetch": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", + "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", "dev": true, - "optional": true, - "os": [ - "linux" - ], + "license": "MIT", + "dependencies": { + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/node_modules/node-gyp": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.1.tgz", + "integrity": "sha512-OQkWKbjQKbGkMf/xqI1jjy3oCTgMKJac58G2+bjZb3fza6gW2YrCSdMQYaoTb70crvE//Gngr4f0AgVHmqHvBQ==", "dev": true, - "optional": true, - "os": [ - "netbsd" - ], + "license": "MIT", + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, "engines": { - "node": ">=12" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", "dev": true, - "optional": true, - "os": [ - "openbsd" - ], + "license": "ISC", + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/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", "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], + "node_modules/@electron/rebuild/node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "MIT", + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], + "node_modules/@electron/rebuild/node_modules/ssri": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", + "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, - "optional": true, - "os": [ - "win32" - ], + "license": "ISC", + "dependencies": { + "minipass": "^3.1.1" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "node_modules/@electron/rebuild/node_modules/unique-filename": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", + "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", "dev": true, + "license": "ISC", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "unique-slug": "^3.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.10.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.1.tgz", - "integrity": "sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==", + "node_modules/@electron/rebuild/node_modules/unique-slug": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", + "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@electron/rebuild/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", "dev": true, + "license": "ISC", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "isexe": "^2.0.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "bin": { + "node-which": "bin/node-which" }, - "funding": { - "url": "https://opencollective.com/eslint" + "engines": { + "node": ">= 8" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@electron/universal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@electron/universal/-/universal-2.0.1.tgz", + "integrity": "sha512-fKpv9kg4SPmt+hY7SVBnIYULE9QJl8L3sCfcBsnqbJwwBwAeTLokJ9TRt9y7bK0JAzIW2y78TVVjvnQEms/yyA==", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "@electron/asar": "^3.2.7", + "@malept/cross-spawn-promise": "^2.0.0", + "debug": "^4.3.1", + "dir-compare": "^4.2.0", + "fs-extra": "^11.1.1", + "minimatch": "^9.0.3", + "plist": "^3.1.0" }, "engines": { - "node": "*" + "node": ">=16.4" } }, - "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "node_modules/@electron/universal/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==", "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@electron/universal/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", - "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", - "dev": true, - "engines": { - "node": ">=12.22" + "node": ">=16 || 14 >=14.17" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true + "node_modules/@emnapi/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", - "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", "dev": true, - "engines": { - "node": ">=6.9.0" + "license": "MIT", + "dependencies": { + "tslib": "^2.4.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==", + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", "dev": true, + "license": "MIT", "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" + "tslib": "^2.4.0" } }, - "node_modules/@isaacs/cliui/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==", + "node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@isaacs/cliui/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==", + "node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@isaacs/cliui/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==", - "dev": true - }, - "node_modules/@isaacs/cliui/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==", + "node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@isaacs/cliui/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==", + "node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "ansi-regex": "^6.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@isaacs/cliui/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==", + "node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@isaacs/string-locale-compare": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", - "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", - "dev": true + "node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", - "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@sinclair/typebox": "^0.27.8" - }, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.2.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.24" - }, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", - "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.25" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.25", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", - "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/@lerna/create": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.3.tgz", - "integrity": "sha512-JFvIYrlvR8Txa8h7VZx8VIQDltukEKOKaZL/muGO7Q/5aE2vjOKHsD/jkWYe/2uFy1xv37ubdx17O1UXQNadPg==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 20", - "@octokit/plugin-enterprise-rest": "6.0.1", - "@octokit/rest": "19.0.11", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.1", - "columnify": "1.6.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", - "dedent": "0.7.0", - "execa": "5.0.0", - "fs-extra": "^11.1.1", - "get-stream": "6.0.0", - "git-url-parse": "13.1.0", - "glob-parent": "5.1.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "ini": "^1.3.8", - "init-package-json": "5.0.0", - "inquirer": "^8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "js-yaml": "4.1.0", - "libnpmpublish": "7.3.0", - "load-json-file": "6.2.0", - "lodash": "^4.17.21", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "8.1.1", - "npm-packlist": "5.1.1", - "npm-registry-fetch": "^14.0.5", - "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 20", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-queue": "6.6.2", - "p-reduce": "^2.1.0", - "pacote": "^17.0.5", - "pify": "5.0.0", - "read-cmd-shim": "4.0.0", - "read-package-json": "6.0.4", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "^7.3.4", - "signal-exit": "3.0.7", - "slash": "^3.0.0", - "ssri": "^9.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.2.1", - "temp-dir": "1.0.0", - "upath": "2.0.1", - "uuid": "^9.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "5.0.0", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2", - "yargs-parser": "21.1.1" + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": ">=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@lerna/create/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==", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@lerna/create/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", "dev": true, + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://opencollective.com/eslint" } }, - "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": "*" } }, - "node_modules/@lerna/create/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "node_modules/@eslint/js": { + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, - "node_modules/@lerna/create/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, + "license": "Apache-2.0", "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": ">=14" + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@lerna/legacy-package-management": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/@lerna/legacy-package-management/-/legacy-package-management-8.1.3.tgz", - "integrity": "sha512-YEu/5I8vSUdxJFC0yunjMOa0uBAd48gph3ct+mbbrOjKTdqJt8HU3/fRl4ptSUY/JzFiE+73B58Dy+48ytqNQA==", + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true, - "dependencies": { - "@npmcli/arborist": "7.2.2", - "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 20", - "@octokit/rest": "19.0.11", - "byte-size": "8.1.1", - "chalk": "4.1.0", - "clone-deep": "4.0.1", - "cmd-shim": "6.0.1", - "columnify": "1.6.0", - "conventional-changelog-core": "5.0.1", - "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", - "dedent": "0.7.0", - "execa": "5.0.0", - "file-url": "3.0.0", - "find-up": "5.0.0", - "fs-extra": "^11.1.1", - "get-port": "5.1.1", - "get-stream": "6.0.0", - "git-url-parse": "13.1.0", - "glob-parent": "5.1.2", - "globby": "11.1.0", - "graceful-fs": "4.2.11", - "has-unicode": "2.0.1", - "ini": "^1.3.8", - "inquirer": "8.2.4", - "is-ci": "3.0.1", - "is-stream": "2.0.0", - "libnpmpublish": "7.3.0", - "load-json-file": "6.2.0", - "make-dir": "4.0.0", - "minimatch": "3.0.5", - "multimatch": "5.0.0", - "node-fetch": "2.6.7", - "npm-package-arg": "8.1.1", - "npm-packlist": "5.1.1", - "npm-registry-fetch": "^14.0.5", - "npmlog": "^6.0.2", - "p-map": "4.0.0", - "p-map-series": "2.1.0", - "p-queue": "6.6.2", - "p-waterfall": "2.1.1", - "pacote": "^17.0.5", - "pify": "5.0.0", - "pretty-format": "29.4.3", - "read-cmd-shim": "4.0.0", - "read-package-json": "6.0.4", - "resolve-from": "5.0.0", - "rimraf": "^4.4.1", - "semver": "7.5.2", - "signal-exit": "3.0.7", - "slash": "3.0.0", - "ssri": "^9.0.1", - "strong-log-transformer": "2.1.0", - "tar": "6.2.1", - "temp-dir": "1.0.0", - "tempy": "1.0.0", - "upath": "2.0.1", - "uuid": "^9.0.0", - "write-file-atomic": "5.0.1", - "write-pkg": "4.0.0", - "yargs": "17.7.2" - }, + "license": "BSD-3-Clause" + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=18.0.0" + "node": ">=6.9.0" } }, - "node_modules/@lerna/legacy-package-management/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==", + "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==", "dev": true, + "license": "ISC", "dependencies": { - "balanced-match": "^1.0.0" + "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/@lerna/legacy-package-management/node_modules/glob": { - "version": "9.3.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", - "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "minimatch": "^8.0.2", - "minipass": "^4.2.4", - "path-scurry": "^1.6.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/@lerna/legacy-package-management/node_modules/glob/node_modules/minimatch": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", - "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", + "node_modules/@isaacs/cliui/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==", "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@lerna/legacy-package-management/node_modules/minipass": { - "version": "4.2.8", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", - "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", + "node_modules/@isaacs/cliui/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==", "dev": true, - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/@lerna/legacy-package-management/node_modules/rimraf": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", - "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", + "node_modules/@isaacs/cliui/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==", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^9.2.0" - }, - "bin": { - "rimraf": "dist/cjs/src/bin.js" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@malept/cross-spawn-promise": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-1.1.1.tgz", - "integrity": "sha512-RTBGWL5FWQcg9orDOCcp4LvItNzUPcyEU9bwaeJX0rJ1IQxzucC48Y0/sQLp/g6t99IQgAlGIaesJS+gTn7tVQ==", + "node_modules/@isaacs/cliui/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==", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/malept" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" - } - ], + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.1" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">= 10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/@malept/flatpak-bundler": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", - "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", + "node_modules/@isaacs/cliui/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==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.1.1", - "fs-extra": "^9.0.0", - "lodash": "^4.17.15", - "tmp-promise": "^3.0.2" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">= 10.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", - "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", "dev": true, + "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "@sinclair/typebox": "^0.27.8" }, "engines": { - "node": ">=10" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dev": true, + "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">= 8" + "node": ">=6.0.0" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@jridgewell/gen-mapping/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, - "engines": { - "node": ">= 8" + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=6.0.0" } }, - "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==", + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "dev": 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" - }, + "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=6.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==", + "node_modules/@jridgewell/source-map": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", + "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" } }, - "node_modules/@npmcli/agent/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==", + "node_modules/@jridgewell/source-map/node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/@npmcli/agent/node_modules/https-proxy-agent": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz", - "integrity": "sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg==", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", "dev": true, - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } + "license": "MIT" }, - "node_modules/@npmcli/arborist": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.2.2.tgz", - "integrity": "sha512-dIIzyhy1zS2dYPS8bdM/8qA8W2evQE9KENBxVOhFthm/2RKqf2ninRWQc8xfc5f1gsiTxTP20Y9flIfziHfSKA==", + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/fs": "^3.1.0", - "@npmcli/installed-package-contents": "^2.0.2", - "@npmcli/map-workspaces": "^3.0.2", - "@npmcli/metavuln-calculator": "^7.0.0", - "@npmcli/name-from-folder": "^2.0.0", - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/query": "^3.0.1", - "@npmcli/run-script": "^7.0.2", - "bin-links": "^4.0.1", - "cacache": "^18.0.0", - "common-ancestor-path": "^1.0.1", - "hosted-git-info": "^7.0.1", - "json-parse-even-better-errors": "^3.0.0", - "json-stringify-nice": "^1.1.4", - "minimatch": "^9.0.0", - "nopt": "^7.0.0", - "npm-install-checks": "^6.2.0", - "npm-package-arg": "^11.0.1", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "npmlog": "^7.0.1", - "pacote": "^17.0.4", - "parse-conflict-json": "^3.0.0", - "proc-log": "^3.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", - "read-package-json-fast": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^10.0.5", - "treeverse": "^3.0.0", - "walk-up-path": "^3.0.1" - }, - "bin": { - "arborist": "bin/index.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@npmcli/arborist/node_modules/are-we-there-yet": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-4.0.2.tgz", - "integrity": "sha512-ncSWAawFhKMJDTdoAeOV+jyW1VCMj5QIAwULIBV0SSR7B/RLPPEQiknKcg/RIIZlUQrxELpsxMiTUoAQ4sIUyg==", - "deprecated": "This package is no longer supported.", + "node_modules/@lerna/create": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-8.1.9.tgz", + "integrity": "sha512-DPnl5lPX4v49eVxEbJnAizrpMdMTBz1qykZrAbBul9rfgk531v8oAt+Pm6O/rpAleRombNM7FJb5rYGzBJatOQ==", "dev": true, + "license": "MIT", + "dependencies": { + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "19.0.11", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "init-package-json": "6.0.3", + "inquirer": "^8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.0", + "libnpmpublish": "9.0.9", + "load-json-file": "6.2.0", + "lodash": "^4.17.21", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "nx": ">=17.1.2 < 21", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-reduce": "^2.1.0", + "pacote": "^18.0.6", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "^7.3.4", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "^3.0.0", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.2.1", + "temp-dir": "1.0.0", + "upath": "2.0.1", + "uuid": "^10.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "5.0.1", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/brace-expansion": { + "node_modules/@lerna/create/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==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/@npmcli/arborist/node_modules/gauge": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-5.0.2.tgz", - "integrity": "sha512-pMaFftXPtiGIHCJHdcUUx9Rby/rFT/Kkt3fIIGCs+9PMDIljSyRiqraTlxNtBReJRDfUefpa263RQ3vnp5G/LQ==", - "deprecated": "This package is no longer supported.", + "node_modules/@lerna/create/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "license": "ISC", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^4.0.1", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/arborist/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1734,79 +1823,28 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/npm-package-arg/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==", + "node_modules/@lerna/create/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, + "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@npmcli/arborist/node_modules/npm-registry-fetch": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", - "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", + "node_modules/@lerna/create/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/redact": "^1.1.0", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "glob": "^9.2.0" }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/npm-registry-fetch/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==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/npmlog": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-7.0.1.tgz", - "integrity": "sha512-uJ0YFk/mCQpLBt+bxN88AKd+gyqZvZDbtiNxk6Waqcj2aPRyfVx8ITawkyQynxUagInjdYT1+qj4NfA5KJJUxg==", - "deprecated": "This package is no longer supported.", - "dev": true, - "dependencies": { - "are-we-there-yet": "^4.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^5.0.0", - "set-blocking": "^2.0.0" + "bin": { + "rimraf": "dist/cjs/src/bin.js" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/arborist/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==", - "dev": true, "engines": { "node": ">=14" }, @@ -1814,391 +1852,543 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/arborist/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/@lerna/legacy-package-management": { + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/@lerna/legacy-package-management/-/legacy-package-management-8.1.9.tgz", + "integrity": "sha512-m7AGDnCeL760RdPDCUvmYJGs1iXszaS/JMzM6U/YjEYxPa/UtexazIS0Us3j7JjL4B3yc90y+DmAZHyCSUNk0g==", "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^7.0.3" + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", + "@octokit/rest": "19.0.11", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "clone-deep": "4.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "execa": "5.0.0", + "file-url": "3.0.0", + "find-up": "5.0.0", + "fs-extra": "^11.2.0", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "globby": "11.1.0", + "graceful-fs": "4.2.11", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "inquirer": "8.2.4", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "libnpmpublish": "9.0.9", + "load-json-file": "6.2.0", + "make-dir": "4.0.0", + "minimatch": "3.0.5", + "multimatch": "5.0.0", + "node-fetch": "2.6.7", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-waterfall": "2.1.1", + "pacote": "^18.0.6", + "pify": "5.0.0", + "pretty-format": "29.4.3", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^4.4.1", + "semver": "7.5.2", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "strong-log-transformer": "2.1.0", + "tar": "6.2.1", + "temp-dir": "1.0.0", + "tempy": "1.0.0", + "upath": "2.0.1", + "uuid": "^10.0.0", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=18.0.0" } }, - "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==", + "node_modules/@lerna/legacy-package-management/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==", "dev": true, + "license": "MIT", "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@npmcli/git": { - "version": "5.0.7", - "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.7.tgz", - "integrity": "sha512-WaOVvto604d5IpdCRV2KjQu8PzkfE96d50CQGKgywXh2GxXmDeUO5EWcBC4V57uFyrNqx83+MewuJh3WTR3xPA==", + "node_modules/@lerna/legacy-package-management/node_modules/glob": { + "version": "9.3.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", + "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/promise-spawn": "^7.0.0", - "lru-cache": "^10.0.1", - "npm-pick-manifest": "^9.0.0", - "proc-log": "^4.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^4.0.0" + "fs.realpath": "^1.0.0", + "minimatch": "^8.0.2", + "minipass": "^4.2.4", + "path-scurry": "^1.6.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/git/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==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", - "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", - "dev": true, - "dependencies": { - "npm-bundled": "^3.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "bin": { - "installed-package-contents": "bin/index.js" + "node": ">=16 || 14 >=14.17" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/map-workspaces": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", - "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", + "node_modules/@lerna/legacy-package-management/node_modules/glob/node_modules/minimatch": { + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", + "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/name-from-folder": "^2.0.0", - "glob": "^10.2.2", - "minimatch": "^9.0.0", - "read-package-json-fast": "^3.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/map-workspaces/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==", + "node_modules/@lerna/legacy-package-management/node_modules/minipass": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", + "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" + "license": "ISC", + "engines": { + "node": ">=8" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@lerna/legacy-package-management/node_modules/rimraf": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", + "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "glob": "^9.2.0" + }, + "bin": { + "rimraf": "dist/cjs/src/bin.js" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": ">=14" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", - "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", + "node_modules/@malept/cross-spawn-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@malept/cross-spawn-promise/-/cross-spawn-promise-2.0.0.tgz", + "integrity": "sha512-1DpKU0Z5ThltBwjNySMC14g0CkbyhCaz9FkhxqNsZI6uAPJXFS8cMXlBKo26FJ8ZuW6S9GCMcR9IO5k2X5/9Fg==", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/malept" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/subscription/pkg/npm-.malept-cross-spawn-promise?utm_medium=referral&utm_source=npm_fund" + } + ], + "license": "Apache-2.0", "dependencies": { - "cacache": "^18.0.0", - "json-parse-even-better-errors": "^3.0.0", - "pacote": "^18.0.0", - "proc-log": "^4.1.0", - "semver": "^7.3.5" + "cross-spawn": "^7.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 12.13.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/@npmcli/redact": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", - "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", + "node_modules/@malept/flatpak-bundler": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@malept/flatpak-bundler/-/flatpak-bundler-0.4.0.tgz", + "integrity": "sha512-9QOtNffcOF/c1seMCDnjckb3R9WHcG34tky+FHpNKKCW0wc/scYLwMtO+ptyGUfMW0/b/n4qRiALlaFHc9Oj7Q==", "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "fs-extra": "^9.0.0", + "lodash": "^4.17.15", + "tmp-promise": "^3.0.2" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 10.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/@npmcli/run-script": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", - "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", + "node_modules/@malept/flatpak-bundler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dev": true, + "license": "MIT", "dependencies": { - "@npmcli/node-gyp": "^3.0.0", - "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "node-gyp": "^10.0.0", - "proc-log": "^4.0.0", - "which": "^4.0.0" + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", "dev": true, + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, + "license": "MIT", "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">= 8" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "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==", "dev": true, + "license": "ISC", + "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/metavuln-calculator/node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", + "node_modules/@npmcli/arborist": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-7.5.4.tgz", + "integrity": "sha512-nWtIc6QwwoUORCRNzKx4ypHqCk3drI+5aeYdMTQQiRCcn4lOOgfQh7WyZobGYTxXPSq1VwV53lkpN/BRlRk08g==", "dev": true, + "license": "ISC", "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^3.1.1", + "@npmcli/installed-package-contents": "^2.1.0", + "@npmcli/map-workspaces": "^3.0.2", + "@npmcli/metavuln-calculator": "^7.1.1", + "@npmcli/name-from-folder": "^2.0.0", + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.1.0", + "@npmcli/query": "^3.1.0", + "@npmcli/redact": "^2.0.0", + "@npmcli/run-script": "^8.1.0", + "bin-links": "^4.0.4", + "cacache": "^18.0.3", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^7.0.2", + "json-parse-even-better-errors": "^3.0.2", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^10.2.2", + "minimatch": "^9.0.4", + "nopt": "^7.2.1", + "npm-install-checks": "^6.2.0", + "npm-package-arg": "^11.0.2", + "npm-pick-manifest": "^9.0.1", + "npm-registry-fetch": "^17.0.1", + "pacote": "^18.0.6", + "parse-conflict-json": "^3.0.0", + "proc-log": "^4.2.0", + "proggy": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "read-package-json-fast": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^10.0.6", + "treeverse": "^3.0.0", + "walk-up-path": "^3.0.1" + }, + "bin": { + "arborist": "bin/index.js" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/brace-expansion": { + "node_modules/@npmcli/arborist/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==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", + "node_modules/@npmcli/arborist/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "minimatch": "^9.0.0" + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "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==", + "dev": true, + "license": "ISC", + "dependencies": { + "semver": "^7.3.5" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/@npmcli/git": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-5.0.8.tgz", + "integrity": "sha512-liASfw5cqhjNW9UFd+ruwwdEf/lbOAQjLL2XY2dFW/bkJheXDYZgOyul/4gVvEV4BWkTXjYGmDqMw9uegdbJNQ==", "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "@npmcli/promise-spawn": "^7.0.0", + "ini": "^4.1.3", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^9.0.0", + "proc-log": "^4.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^4.0.0" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/ini": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.3.tgz", + "integrity": "sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.1.0.tgz", + "integrity": "sha512-c8UuGLeZpm69BryRykLuKRyKFZYJsZSCT4aVY5ds4omyZqJ172ApzgfKJ5eV/r3HgLdUYgFVe54KSFVjKoe27w==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "bin": { + "installed-package-contents": "bin/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", + "node_modules/@npmcli/map-workspaces": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-3.0.6.tgz", + "integrity": "sha512-tkYs0OYnzQm6iIRdfy+LcLBjcKuQCeE5YLb8KnrIlutJfheNaPvPpgoFEyEFgbjzl5PLZ3IA/BWAwRU0eHuQDA==", "dev": true, + "license": "ISC", "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "@npmcli/name-from-folder": "^2.0.0", + "glob": "^10.2.2", + "minimatch": "^9.0.0", + "read-package-json-fast": "^3.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", + "node_modules/@npmcli/map-workspaces/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==", "dev": true, + "license": "MIT", "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/npm-registry-fetch": { - "version": "17.1.0", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", - "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/redact": "^2.0.0", - "jsonparse": "^1.3.1", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/pacote": { - "version": "18.0.6", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", - "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", + "node_modules/@npmcli/metavuln-calculator": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-7.1.1.tgz", + "integrity": "sha512-Nkxf96V0lAx3HCpVda7Vw4P23RILgdi/5K1fmj2tZkWIYLpXAN8k2UVVOsW16TsS5F8Ws2I7Cm+PU1/rsVF47g==", "dev": true, + "license": "ISC", "dependencies": { - "@npmcli/git": "^5.0.0", - "@npmcli/installed-package-contents": "^2.0.1", - "@npmcli/package-json": "^5.1.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", - "fs-minipass": "^3.0.0", - "minipass": "^7.0.2", - "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^17.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "bin/index.js" + "json-parse-even-better-errors": "^3.0.0", + "pacote": "^18.0.0", + "proc-log": "^4.1.0", + "semver": "^7.3.5" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/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==", + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", + "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", + "deprecated": "This functionality has been moved to @npmcli/fs", "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", + "node_modules/@npmcli/move-file/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", "dev": true, + "license": "ISC", "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" + "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": "^16.14.0 || >=18.0.0" + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/@npmcli/move-file/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@npmcli/metavuln-calculator/node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", + "node_modules/@npmcli/move-file/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", "dev": true, + "license": "ISC", "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "glob": "^7.1.3" }, - "engines": { - "node": "^16.14.0 || >=18.0.0" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/@npmcli/name-from-folder": { @@ -2206,6 +2396,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-2.0.0.tgz", "integrity": "sha512-pwK+BfEBZJbKdNYpHHRTNBwBoqrN/iIMO0AiGvYsp3Hoaq0WbgGSWQR6SCldZovoDpY3yje5lkFUe6gsDgJ2vg==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -2215,6 +2406,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -2224,6 +2416,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-5.2.0.tgz", "integrity": "sha512-qe/kiqqkW0AGtvBjL8TJKZk/eBBSpnJkUWvHdQ9jM2lKHXRYYJuyNpJPlJw3c8QjC2ow6NZYiLExhUaeJelbxQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "glob": "^10.2.2", @@ -2237,20 +2430,12 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@npmcli/package-json/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==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/@npmcli/package-json/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2263,6 +2448,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-7.0.2.tgz", "integrity": "sha512-xhfYPXoV5Dy4UkY0D+v2KkwvnDfiA/8Mt3sWCGI/hM03NsYIH8ZaG6QzS9x7pje5vHZBZJ2v6VRFVTWACnqcmQ==", "dev": true, + "license": "ISC", "dependencies": { "which": "^4.0.0" }, @@ -2275,6 +2461,7 @@ "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-3.1.0.tgz", "integrity": "sha512-C/iR0tk7KSKGldibYIB9x8GtO/0Bd0I2mhOaDb8ucQL/bQVTmGoeREaFj64Z5+iCBRf3dQfed0CjJL7I8iTkiQ==", "dev": true, + "license": "ISC", "dependencies": { "postcss-selector-parser": "^6.0.10" }, @@ -2283,59 +2470,40 @@ } }, "node_modules/@npmcli/redact": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-1.1.0.tgz", - "integrity": "sha512-PfnWuOkQgu7gCbnSsAisaX7hKOdZ4wSAhAzH3/ph5dSGau52kCRrMMGbiSQLwyTZpgldkZ49b0brkOr1AzGBHQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-2.0.1.tgz", + "integrity": "sha512-YgsR5jCQZhVmTJvjduTOIHph0L73pK8xwMVaDY0PatySqVM9AZj93jpoXYSJqfHFxFkN9dmqTw6OiqExsS3LPw==", "dev": true, + "license": "ISC", "engines": { "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@npmcli/run-script": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-7.0.2.tgz", - "integrity": "sha512-Omu0rpA8WXvcGeY6DDzyRoY1i5DkCBkzyJ+m2u7PD6quzb0TvSqdIPOkTn8ZBOj7LbbcbMfZ3c5skwSu6m8y2w==", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-8.1.0.tgz", + "integrity": "sha512-y7efHHwghQfk28G2z3tlZ67pLG0XdfYbcVG26r7YIXALRsrVQcTq4/tdenSmdOrEsNahIYA/eh8aEVROWGFUDg==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", - "read-package-json-fast": "^3.0.0", + "proc-log": "^4.0.0", "which": "^4.0.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@nrwl/devkit": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nrwl/devkit/-/devkit-19.3.0.tgz", - "integrity": "sha512-WRcph/7U37HkTLIRzQ2oburZVfEFkPHJUn7vmo46gCq+N2cAKy3qwONO0RbthhjFIsG94YPXqFWFlV6k4nXpxA==", - "dev": true, - "dependencies": { - "@nx/devkit": "19.3.0" - } - }, - "node_modules/@nrwl/tao": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nrwl/tao/-/tao-19.3.0.tgz", - "integrity": "sha512-MyGYeHbh9O4Tv9xmz3Du+/leY5sKUHaPy4ancfNyShHgYi21hemX0/YYjzzoYHi44D8GzSc1XG2rAuwba7Kilw==", - "dev": true, - "dependencies": { - "nx": "19.3.0", - "tslib": "^2.3.0" - }, - "bin": { - "tao": "index.js" - } - }, "node_modules/@nx/devkit": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-19.3.0.tgz", - "integrity": "sha512-Natya5nzvHH0qTOIL1w/EZtwMgDx87Dgz0LgeY7te2fULaNFcj5fVrP+mUKEJZR+NccO7GPumT2RPhuEl9rPnQ==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-20.1.3.tgz", + "integrity": "sha512-+bNCRNSHKS7SS4Q2xI/p4hhd4mIibIbeF+hpF3TLO5wxyXbrYGSdhCVK5SwclwWUN/KhcKQjOrVGW5CKAm7HAw==", "dev": true, + "license": "MIT", "dependencies": { - "@nrwl/devkit": "19.3.0", "ejs": "^3.1.7", "enquirer": "~2.3.6", "ignore": "^5.0.4", @@ -2346,7 +2514,7 @@ "yargs-parser": "21.1.1" }, "peerDependencies": { - "nx": ">= 17 <= 20" + "nx": ">= 19 <= 21" } }, "node_modules/@nx/devkit/node_modules/brace-expansion": { @@ -2354,6 +2522,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -2363,6 +2532,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -2374,10 +2544,11 @@ } }, "node_modules/@nx/devkit/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -2386,13 +2557,14 @@ } }, "node_modules/@nx/nx-darwin-arm64": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-19.3.0.tgz", - "integrity": "sha512-TMTxjrN7Y/UsKFjmz0YfhVItLTGWqvud8cmQchw5NEjdNakfjXk0mREufO5/5PwoiRIsen6MbThoTprLpjOUiQ==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.1.3.tgz", + "integrity": "sha512-m0Rwawht7Jwq6u2QPmAtsv+khFsTUIZUfiO1kXGcKOX3nQdJ7i82zLRd5yGbrDTAyRbAsgWO3v8zWQyhC1oGjw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2402,13 +2574,14 @@ } }, "node_modules/@nx/nx-darwin-x64": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-19.3.0.tgz", - "integrity": "sha512-GH2L6ftnzdIs7JEdv7ZPCdbpAdB5sW6NijK07riYZSONzq5fEruD1yDWDkyZbYBb8RTxsparUWJnq8q1qxEPHQ==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-20.1.3.tgz", + "integrity": "sha512-WsQK1sxOJFzD0vOtFqSHpLzWuFO4vG7G1PUyJ1Y5mPo4vbRslqoAUTqF7n42bBRPY/lE2aT7BqAAj8hm4PgcnQ==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -2418,13 +2591,14 @@ } }, "node_modules/@nx/nx-freebsd-x64": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-19.3.0.tgz", - "integrity": "sha512-1ow7Xku1yyjHviCKsWiuHCAnTd3fD+5O5c+e4DXHVthT8wnadKSotvBIWf38DMbMthl7na82e72OzxcdSbrVqQ==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.1.3.tgz", + "integrity": "sha512-HV57XMtCVPy/0LZtifcEHbOpVNKLTOBFUoUXkmGYBmAKfw7lccfF600/tunTCZ4aijsD6+opEeGHzlDUK0Ir1w==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "freebsd" @@ -2434,13 +2608,14 @@ } }, "node_modules/@nx/nx-linux-arm-gnueabihf": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-19.3.0.tgz", - "integrity": "sha512-mYQMIUvNr2gww8vbg766uk/C1RxoC1fwioeP87bmV5NRUKSzJ8WEJVxAsqc9RGhAOUaNXOgEuKYrMcVhKyIKJQ==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.1.3.tgz", + "integrity": "sha512-RzP0vc4yhXktKxz7iiwVYFkgpyb5TN/lLGcKLMM4kjuyYJ0IUX58Kk5FDoqCy+HMKiMfGyTOT4fP+/UEsgW6qQ==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2450,13 +2625,14 @@ } }, "node_modules/@nx/nx-linux-arm64-gnu": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-19.3.0.tgz", - "integrity": "sha512-rHL3eQ0RHkeAXnhHHu/NIyouN/ykiXvgyNU3TuCd50+2MZcAbjB+Xq3mwL0MwiP+BQuptiE+snTuxFUJp4ZH6A==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.1.3.tgz", + "integrity": "sha512-WCaU5AiGx21C3t3v4+d7nrA1r5Xc5Wk7yVxZFWh+mKHdcqk1JebDIr1qj/7yoKHD2R9k2Vp5x5Kd0pzAGS8AyA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2466,13 +2642,14 @@ } }, "node_modules/@nx/nx-linux-arm64-musl": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-19.3.0.tgz", - "integrity": "sha512-im0+OgOD6ShpTkI9ZRz7BjzxhQ/Lk3xjYmmCu+PFGmaybEnkNNDFwsgS0iEVKMdWZ/EQoQvJrqOYsX125iIBuQ==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.1.3.tgz", + "integrity": "sha512-lKAvR9jNyx/qvk3UZGYNJAoK5mkZc+rDD4gA23tOGYPjNrWHJEgbWycCk5A9tQ4QX4CskCNmkgQx0lOMdLeXsw==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2482,13 +2659,14 @@ } }, "node_modules/@nx/nx-linux-x64-gnu": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-19.3.0.tgz", - "integrity": "sha512-k8q/d6WBSXOeUpBq6Mw69yMKL4n9LaX3o4LBNwBkVCEZ8p6s0njwKefLtjwnKlai0g/k5f0NcilU2zTwP/Ex8g==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.1.3.tgz", + "integrity": "sha512-RKNm7RnTgCSl2HstDb/qMKO9r8o81EUe+UZB5fgjNR89PB757iHUX30kM0xbkiRZui1vIkMAvWcNsidxBnGGfg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2498,13 +2676,14 @@ } }, "node_modules/@nx/nx-linux-x64-musl": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-19.3.0.tgz", - "integrity": "sha512-sahEV99glBlpGKG1TIQ5PkJ0QvpHp69wWsBFK2DKtCETxOtsWqwvIjemxTCXRirTqeHiP7BiR6VWsf2YqqqBdw==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.1.3.tgz", + "integrity": "sha512-aCXEWt1WQDPLzgp5I+NfqaP0y4ZKi2aauZMnSO6KE54MnZmvB+B4HQMZvqHM3dfU0jluvLRBmVIPLeTHiCccrw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" @@ -2514,13 +2693,14 @@ } }, "node_modules/@nx/nx-win32-arm64-msvc": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-19.3.0.tgz", - "integrity": "sha512-w03gFwLijStmhUji70QJHYo/U16ovybNczxGO7+5TT330X8/y+ihw9FCGHiIcujAjTAE88h0DKGn05WlNqRmfg==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.1.3.tgz", + "integrity": "sha512-625rRYFfoCTu73bjDZ+jOLU0lvEN2heiiUGlErc6GchfcWuIcZy16oyYQzZX69UQqryGkkZVTaoyMXhGS5p7Tg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2530,13 +2710,14 @@ } }, "node_modules/@nx/nx-win32-x64-msvc": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-19.3.0.tgz", - "integrity": "sha512-M7e2zXGfTjH8NLiwqKLdWC9VlfMSQDYlI4/SM4OSpPqhUTfPlRPa+wNKNTG7perKfDXxE9ei8yjocujknXJk/A==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.1.3.tgz", + "integrity": "sha512-XUbxSB6vUWoixNyCXkaXGkeUy/syqFOBXVh5Wbi6bqwTJ5o6EFUxCnzK/JsK55dfOz+I/jMXJzDWYEDAsikTSA==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" @@ -2550,6 +2731,7 @@ "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.4.tgz", "integrity": "sha512-TWFX7cZF2LXoCvdmJWY7XVPi74aSY0+FfBZNSXEXFkMpjcqsQwDSYVv5FhRFaI0V1ECnwbz4j59T/G+rXNWaIQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14" } @@ -2559,6 +2741,7 @@ "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.2.4.tgz", "integrity": "sha512-rYKilwgzQ7/imScn3M9/pFfUf4I1AZEH3KhyJmtPdE2zfaXAn2mFfUy4FbKewzc2We5y/LlKLj36fWJLKC2SIQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/auth-token": "^3.0.0", "@octokit/graphql": "^5.0.0", @@ -2577,6 +2760,7 @@ "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.6.tgz", "integrity": "sha512-5L4fseVRUsDFGR00tMWD/Trdeeihn999rTMGRMC1G/Ldi1uWlWJzI98H4Iak5DB/RVvQuyMYKqSK/R6mbSOQyg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^9.0.0", "is-plain-object": "^5.0.0", @@ -2591,6 +2775,7 @@ "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-5.0.6.tgz", "integrity": "sha512-Fxyxdy/JH0MnIB5h+UQ3yCoh1FG4kWXfFKkpWqjZHw/p+Kc8Y44Hu/kCgNBT6nU1shNumEchmW/sUO1JuQnPcw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request": "^6.0.0", "@octokit/types": "^9.0.0", @@ -2604,19 +2789,22 @@ "version": "18.1.1", "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@octokit/plugin-enterprise-rest": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "6.1.2", "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-6.1.2.tgz", "integrity": "sha512-qhrmtQeHU/IivxucOV1bbI/xZyC/iOBhclokv7Sut5vnejAIAEXVcGQeRpQlU39E0WwK9lNvJHphHri/DB6lbQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/tsconfig": "^1.0.2", "@octokit/types": "^9.2.3" @@ -2633,6 +2821,7 @@ "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, + "license": "MIT", "peerDependencies": { "@octokit/core": ">=3" } @@ -2642,6 +2831,7 @@ "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-7.2.3.tgz", "integrity": "sha512-I5Gml6kTAkzVlN7KCtjOM+Ruwe/rQppp0QU372K1GP7kNOYEKe8Xn5BW4sE62JAHdwpq95OQK/qGNyKQMUzVgA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^10.0.0" }, @@ -2657,6 +2847,7 @@ "resolved": "https://registry.npmjs.org/@octokit/types/-/types-10.0.0.tgz", "integrity": "sha512-Vm8IddVmhCgU1fxC1eyinpwqzXPEYu0NrYzD3YZjlGjyftdLBTeqNblRC0jmJmgxbJIsQlyogVeGnrNaaMVzIg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^18.0.0" } @@ -2666,6 +2857,7 @@ "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.2.8.tgz", "integrity": "sha512-ow4+pkVQ+6XVVsekSYBzJC0VTVvh/FCTUUgTsboGq+DTeWdyIFV8WSCdo0RIxk6wSkBTHqIK1mYuY7nOBXOchw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/endpoint": "^7.0.0", "@octokit/request-error": "^3.0.0", @@ -2683,6 +2875,7 @@ "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-3.0.3.tgz", "integrity": "sha512-crqw3V5Iy2uOU5Np+8M/YexTlT8zxCfI+qu+LxUB7SZpje4Qmx3mub5DfEKSO8Ylyk0aogi6TYdf6kxzh2BguQ==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^9.0.0", "deprecation": "^2.0.0", @@ -2697,6 +2890,7 @@ "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.11.tgz", "integrity": "sha512-m2a9VhaP5/tUw8FwfnW2ICXlXpLPIqxtg3XcAiGMLj/Xhw3RSBfZ8le/466ktO1Gcjr8oXudGnHhxV1TXJgFxw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/core": "^4.2.1", "@octokit/plugin-paginate-rest": "^6.1.2", @@ -2711,13 +2905,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@octokit/tsconfig/-/tsconfig-1.0.2.tgz", "integrity": "sha512-I0vDR0rdtP8p2lGMzvsJzbhdOWy405HcGovrspJ8RRibHnyRgggUSNO5AIox5LmqiwmatHKYsvj6VGFHkqS7lA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@octokit/types": { "version": "9.3.2", "resolved": "https://registry.npmjs.org/@octokit/types/-/types-9.3.2.tgz", "integrity": "sha512-D4iHGTdAnEEVsB8fl95m1hiz7D5YiRdQ9b/OEb3BYRVwbLsGHcRVPz+u+BgRLNk0Q0/4iZCBqDN96j2XNxfXrA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^18.0.0" } @@ -2727,6 +2923,7 @@ "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=14" @@ -2737,6 +2934,7 @@ "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz", "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==", "dev": true, + "license": "MPL-2.0", "engines": { "node": ">= 10" }, @@ -2763,6 +2961,7 @@ "arm" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "android" @@ -2779,6 +2978,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "android" @@ -2795,6 +2995,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -2811,6 +3012,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "darwin" @@ -2827,6 +3029,7 @@ "arm" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -2843,6 +3046,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -2859,6 +3063,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -2875,6 +3080,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -2891,6 +3097,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "linux" @@ -2907,6 +3114,7 @@ "arm64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -2923,6 +3131,7 @@ "ia32" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -2939,6 +3148,7 @@ "x64" ], "dev": true, + "license": "MPL-2.0", "optional": true, "os": [ "win32" @@ -2947,211 +3157,360 @@ "node": ">= 10" } }, - "node_modules/@sigstore/bundle": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.1.0.tgz", - "integrity": "sha512-PFutXEy0SmQxYI4texPw3dd2KewuNqv7OuK1ZFtY2fM754yhvG2KdgwIhRnoEE2uHdtdGNQ8s0lb94dW9sELog==", + "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==", "dev": true, + "license": "MIT", "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0" + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12.0.0" } }, - "node_modules/@sigstore/core": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", - "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", + "node_modules/@serialport/bindings-cpp": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-12.0.1.tgz", + "integrity": "sha512-r2XOwY2dDvbW7dKqSPIk2gzsr6M6Qpe9+/Ngs94fNaNlcTRCV02PfaoDmRgcubpNVVcLATlxSxPTIDw12dbKOg==", "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "@serialport/parser-readline": "11.0.0", + "debug": "4.3.4", + "node-addon-api": "7.0.0", + "node-gyp-build": "4.6.0" + }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, - "node_modules/@sigstore/protobuf-specs": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.1.tgz", - "integrity": "sha512-XTWVxnWJu+c1oCshMLwnKvz8ZQJJDVOlciMfgpJBQbThVjKTCG8dwyhgLngBD2KN0ap9F/gOV8rFDEx8uh7R2A==", + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-delimiter": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz", + "integrity": "sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-readline": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-11.0.0.tgz", + "integrity": "sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@serialport/parser-delimiter": "11.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@serialport/bindings-cpp/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "dev": true, + "license": "MIT" + }, + "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==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-12.0.0.tgz", + "integrity": "sha512-0ei0txFAj+s6FTiCJFBJ1T2hpKkX8Md0Pu6dqMrYoirjPskDLJRgZGLqoy3/lnU1bkvHpnJO+9oJ3PB9v8rNlg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-12.0.0.tgz", + "integrity": "sha512-0PfLzO9t2X5ufKuBO34DQKLXrCCqS9xz2D0pfuaLNeTkyGUBv426zxoMf3rsMRodDOZNbFblu3Ae84MOQXjnZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-12.0.0.tgz", + "integrity": "sha512-gu26tVt5lQoybhorLTPsH2j2LnX3AOP2x/34+DUSTNaUTzu2fBXw+isVjQJpUBFWu6aeQRZw5bJol5X9Gxjblw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-12.0.0.tgz", + "integrity": "sha512-GnCh8K0NAESfhCuXAt+FfBRz1Cf9CzIgXfp7SdMgXwrtuUnCC/yuRTUFWRvuzhYKoAo1TL0hhUo77SFHUH1T/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-12.0.0.tgz", + "integrity": "sha512-p1hiCRqvGHHLCN/8ZiPUY/G0zrxd7gtZs251n+cfNTn+87rwcdUeu9Dps3Aadx30/sOGGFL6brIRGK4l/t7MuQ==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8.6.0" } }, - "node_modules/@sigstore/sign": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-1.0.0.tgz", - "integrity": "sha512-INxFVNQteLtcfGmcoldzV6Je0sbbfh9I16DM4yJPw3j5+TFP8X6uIiA18mvpEa9yyeycAKgPmOA3X9hVdVTPUA==", + "node_modules/@serialport/parser-readline": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-12.0.0.tgz", + "integrity": "sha512-O7cywCWC8PiOMvo/gglEBfAkLjp/SENEML46BXDykfKP5mTPM46XMaX1L0waWU6DXJpBgjaL7+yX6VriVPbN4w==", "dev": true, + "license": "MIT", "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "make-fetch-happen": "^11.0.1" + "@serialport/parser-delimiter": "12.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, - "node_modules/@sigstore/sign/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", + "node_modules/@serialport/parser-ready": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-12.0.0.tgz", + "integrity": "sha512-ygDwj3O4SDpZlbrRUraoXIoIqb8sM7aMKryGjYTIF0JRnKeB1ys8+wIp0RFMdFbO62YriUDextHB5Um5cKFSWg==", "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "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" - }, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, - "node_modules/@sigstore/sign/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "node_modules/@serialport/parser-regex": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-12.0.0.tgz", + "integrity": "sha512-dCAVh4P/pZrLcPv9NJ2mvPRBg64L5jXuiRxIlyxxdZGH4WubwXVXY/kBTihQmiAMPxbT3yshSX8f2+feqWsxqA==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "node_modules/@serialport/parser-slip-encoder": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-12.0.0.tgz", + "integrity": "sha512-0APxDGR9YvJXTRfY+uRGhzOhTpU5akSH183RUcwzN7QXh8/1jwFsFLCu0grmAUfi+fItCkR+Xr1TcNJLR13VNA==", "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, - "node_modules/@sigstore/sign/node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "node_modules/@serialport/parser-spacepacket": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-12.0.0.tgz", + "integrity": "sha512-dozONxhPC/78pntuxpz/NOtVps8qIc/UZzdc/LuPvVsqCoJXiRxOg6ZtCP/W58iibJDKPZPAWPGYeZt9DJxI+Q==", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, - "node_modules/@sigstore/sign/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "node_modules/@serialport/stream": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-12.0.0.tgz", + "integrity": "sha512-9On64rhzuqKdOQyiYLYv2lQOh3TZU/D3+IWCR5gk0alPel2nwpp4YwDEGiUBfrQZEdQ6xww0PWkzqth4wqwX3Q==", "dev": true, + "license": "MIT", "dependencies": { - "minipass": "^3.0.0" + "@serialport/bindings-interface": "1.2.2", + "debug": "4.3.4" }, "engines": { - "node": ">= 8" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, - "node_modules/@sigstore/sign/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/@serialport/stream/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=8" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/@sigstore/sign/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/@serialport/stream/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==", + "dev": true, + "license": "MIT" + }, + "node_modules/@sigstore/bundle": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", + "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "@sigstore/protobuf-specs": "^0.3.2" }, "engines": { - "node": ">= 10" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/sign/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/@sigstore/core": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-1.1.0.tgz", + "integrity": "sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==", "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, + "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/tuf": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", - "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "node_modules/@sigstore/protobuf-specs": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", + "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.2.0", - "tuf-js": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/verify": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", - "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", + "node_modules/@sigstore/sign": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", + "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.1.0", - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "make-fetch-happen": "^13.0.1", + "proc-log": "^4.2.0", + "promise-retry": "^2.0.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/verify/node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", + "node_modules/@sigstore/tuf": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", + "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" + "@sigstore/protobuf-specs": "^0.3.2", + "tuf-js": "^2.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/@sigstore/verify/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", + "node_modules/@sigstore/verify": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-1.2.1.tgz", + "integrity": "sha512-8iKx79/F73DKbGfRf7+t4dqrc0bRr0thdPrxAtCKWRm/F0tG71i6O1rvlnScncJLLBZHn3h8M3c1BSUAb9yu8g==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.1.0", + "@sigstore/protobuf-specs": "^0.3.2" + }, "engines": { "node": "^16.14.0 || >=18.0.0" } @@ -3160,13 +3519,15 @@ "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@sindresorhus/is": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -3174,11 +3535,25 @@ "url": "https://github.com/sindresorhus/is?sponsor=1" } }, + "node_modules/@sindresorhus/merge-streams": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-2.3.0.tgz", + "integrity": "sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@szmarczak/http-timer": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", "dev": true, + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.0" }, @@ -3191,6 +3566,7 @@ "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -3200,6 +3576,7 @@ "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10.13.0" } @@ -3208,46 +3585,52 @@ "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", "integrity": "sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tufjs/canonical-json": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", - "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", "dev": true, + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", - "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", + "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", "dev": true, + "license": "MIT", "dependencies": { - "@tufjs/canonical-json": "1.0.0", - "minimatch": "^9.0.0" + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^9.0.4" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/@tufjs/models/node_modules/brace-expansion": { @@ -3255,15 +3638,17 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@tufjs/models/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3274,11 +3659,22 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/cacheable-request": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", "dev": true, + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "*", "@types/keyv": "^3.1.4", @@ -3287,31 +3683,35 @@ } }, "node_modules/@types/command-line-args": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.0.tgz", - "integrity": "sha512-UuKzKpJJ/Ief6ufIaIzr3A/0XnluX7RvFgwkV89Yzvm77wCh1kFaFmqN8XEnGcN62EuHdedQjEMb8mYxFLGPyA==", - "dev": true + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/@types/command-line-args/-/command-line-args-5.2.3.tgz", + "integrity": "sha512-uv0aG6R0Y8WHZLTamZwtfsDLVRnOa+n+n5rEvFWL5Na5gZ8V2Teab/duDPFzIIIhs9qizDpcavCusCLJZu62Kw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/command-line-usage": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.2.tgz", - "integrity": "sha512-n7RlEEJ+4x4TS7ZQddTmNSxP+zziEG0TNsMfiRIxcIVXt71ENJ9ojeXmGO3wPoTdn7pJcU2xc3CJYMktNT6DPg==", - "dev": true + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/command-line-usage/-/command-line-usage-5.0.4.tgz", + "integrity": "sha512-BwR5KP3Es/CSht0xqBcUXS3qCAUVXwpRKsV2+arxeb65atasuXG9LykC9Ab10Cw3s2raH92ZqOeILaQbsB2ACg==", + "dev": true, + "license": "MIT" }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/ms": "*" } }, "node_modules/@types/decompress": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.4.tgz", - "integrity": "sha512-/C8kTMRTNiNuWGl5nEyKbPiMv6HA+0RbEXzFhFBEzASM6+oa4tJro9b8nj7eRlOFfuLdzUU+DS/GPDlvvzMOhA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@types/decompress/-/decompress-4.2.7.tgz", + "integrity": "sha512-9z+8yjKr5Wn73Pt17/ldnmQToaFHZxK0N1GHysuk/JIPT8RIdQeoInM01wWPgypRcvb6VH1drjuFpQ4zmY437g==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3320,13 +3720,15 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@types/electron-devtools-installer/-/electron-devtools-installer-2.0.2.tgz", "integrity": "sha512-DQdr2xx2qtS3OYLICYlHXEatV75233bimYFo2ronZ2O5dO3CRZEGg6+PH2Uzi04NMmVPt81xkLNwjr+cjWg7HA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/eslint": { - "version": "8.56.10", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", - "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", + "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -3337,28 +3739,32 @@ "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", "dev": true, + "license": "MIT", "dependencies": { "@types/eslint": "*", "@types/estree": "*" } }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", - "dev": true + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" }, "node_modules/@types/file-saver": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.5.tgz", - "integrity": "sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==", - "dev": true + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@types/file-saver/-/file-saver-2.0.7.tgz", + "integrity": "sha512-dNKVfHd/jk0SkR/exKGj2ggkB45MAkzvWCaqLUUgkyjITkGNzH8H+yUwr+BLJUBjZOe9w8X3wgmXhZDRg1ED6A==", + "dev": true, + "license": "MIT" }, "node_modules/@types/fs-extra": { "version": "9.0.13", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } @@ -3367,70 +3773,84 @@ "version": "4.0.4", "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/jasmine": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-4.3.1.tgz", - "integrity": "sha512-Vu8l+UGcshYmV1VWwULgnV/2RDbBaO6i2Ptx7nd//oJPIZGhoI1YLST4VKagD2Pq/Bc2/7zvtvhM7F3p4SN7kQ==", - "dev": true + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.4.tgz", + "integrity": "sha512-px7OMFO/ncXxixDe1zR13V1iycqWae0MxTaw62RpFlksUi5QuNWgQJFkTQjIOvrmutJbI7Fp2Y2N1F6D2R4G6w==", + "dev": true, + "license": "MIT" }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/keyv": { "version": "3.1.4", "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/lodash": { - "version": "4.14.168", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.168.tgz", - "integrity": "sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q==", - "dev": true + "version": "4.17.10", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.10.tgz", + "integrity": "sha512-YpS0zzoduEhuOWjAotS6A5AVCva7X4lVlYLF0FYHAY9sdraBfnatttHItlWeZdGhuEkf+OzMNg2ZYAx8t+52uQ==", + "dev": true, + "license": "MIT" }, "node_modules/@types/minimatch": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/minimist": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ms": { "version": "0.7.34", "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "18.16.19", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.16.19.tgz", - "integrity": "sha512-IXl7o+R9iti9eBW4Wg2hx1xQDig183jj7YLn8F7udNceyfkbn1ZxmzZXuak20gR40D7pIkIY1kYGx5VIGbaHKA==", - "dev": true + "version": "20.16.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.16.10.tgz", + "integrity": "sha512-vQUKgWTjEIRFCvK6CyriPH3MZYiYlNy0fKiEYHWbcoWLEgs4opurGGKlebrTLqdSMIbXImH6XExNiIyNUv3WpA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/plist": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/plist/-/plist-3.0.5.tgz", "integrity": "sha512-E6OCaRmAe4WDmWNsL/9RMqdkkzDCY1etutkflWk4c+AcjDU07Pcz1fQwTX0TQz+Pxqn9i4L1TU3UFpjnrcDgxA==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*", @@ -3442,34 +3862,39 @@ "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*" } }, "node_modules/@types/tmp": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.0.tgz", - "integrity": "sha512-flgpHJjntpBAdJD43ShRosQvNC0ME97DCfGvZEDlAThQmnerRXrLbX6YgzRBQCZTthET9eAWFAMaYP0m0Y4HzQ==", - "dev": true + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@types/tmp/-/tmp-0.2.6.tgz", + "integrity": "sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==", + "dev": true, + "license": "MIT" }, "node_modules/@types/triple-beam": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz", "integrity": "sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/verror": { "version": "1.10.10", "resolved": "https://registry.npmjs.org/@types/verror/-/verror-1.10.10.tgz", "integrity": "sha512-l4MM0Jppn18hb9xmM6wwD1uTdShpf9Pn80aXTStnK1C94gtPvJcV2FrDmbOQUAQfJ1cKZHktkQUDwEqaAKXMMg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/@types/yargs": { - "version": "17.0.32", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.32.tgz", - "integrity": "sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==", + "version": "17.0.33", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.33.tgz", + "integrity": "sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==", "dev": true, + "license": "MIT", "dependencies": { "@types/yargs-parser": "*" } @@ -3478,13 +3903,15 @@ "version": "21.0.3", "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/yauzl": { "version": "2.10.3", "resolved": "https://registry.npmjs.org/@types/yauzl/-/yauzl-2.10.3.tgz", "integrity": "sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "@types/node": "*" @@ -3495,6 +3922,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.11.0.tgz", "integrity": "sha512-P+qEahbgeHW4JQ/87FuItjBj8O3MYv5gELDzr8QaQ7fsll1gSMTYb6j87MYyxwf3DtD7uGFB9ShwgmCJB5KmaQ==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", "@typescript-eslint/scope-manager": "7.11.0", @@ -3528,6 +3956,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-7.11.0.tgz", "integrity": "sha512-yimw99teuaXVWsBcPO1Ais02kwJ1jmNA1KxE7ng0aT7ndr1pT1wqj0OJnsYVGKKlc4QJai86l/025L6z8CljOg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/scope-manager": "7.11.0", "@typescript-eslint/types": "7.11.0", @@ -3556,6 +3985,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.11.0.tgz", "integrity": "sha512-27tGdVEiutD4POirLZX4YzT180vevUURJl4wJGmm6TrQoiYwuxTIY98PBp6L2oN+JQxzE0URvYlzJaBHIekXAw==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.11.0", "@typescript-eslint/visitor-keys": "7.11.0" @@ -3573,6 +4003,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.11.0.tgz", "integrity": "sha512-WmppUEgYy+y1NTseNMJ6mCFxt03/7jTOy08bcg7bxJJdsM4nuhnchyBbE8vryveaJUf62noH7LodPSo5Z0WUCg==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/typescript-estree": "7.11.0", "@typescript-eslint/utils": "7.11.0", @@ -3600,6 +4031,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.11.0.tgz", "integrity": "sha512-MPEsDRZTyCiXkD4vd3zywDCifi7tatc4K37KqTprCvaXptP7Xlpdw0NR2hRJTetG5TxbWDB79Ys4kLmHliEo/w==", "dev": true, + "license": "MIT", "engines": { "node": "^18.18.0 || >=20.0.0" }, @@ -3613,6 +4045,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.11.0.tgz", "integrity": "sha512-cxkhZ2C/iyi3/6U9EPc5y+a6csqHItndvN/CzbNXTNrsC3/ASoYQZEt9uMaEp+xFNjasqQyszp5TumAVKKvJeQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@typescript-eslint/types": "7.11.0", "@typescript-eslint/visitor-keys": "7.11.0", @@ -3641,15 +4074,17 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -3661,10 +4096,11 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -3677,6 +4113,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.11.0.tgz", "integrity": "sha512-xlAWwPleNRHwF37AhrZurOxA1wyXowW4PqVXZVUNCLjB48CqdPJoJWkrpH2nij9Q3Lb7rtWindtoXwxjxlKKCA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@typescript-eslint/scope-manager": "7.11.0", @@ -3699,6 +4136,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.11.0.tgz", "integrity": "sha512-7syYk4MzjxTEk0g/w3iqtgxnFQspDJfn6QKD36xMuuhTzjcxY7F8EmBLnALjVyaOF1/bVocu3bS/2/F7rXrveQ==", "dev": true, + "license": "MIT", "dependencies": { "@typescript-eslint/types": "7.11.0", "eslint-visitor-keys": "^3.4.3" @@ -3715,151 +4153,167 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.12.1.tgz", - "integrity": "sha512-EKfMUOPRRUTy5UII4qJDGPpqfwjOmZ5jeGFwid9mnoqIFK+e0vqoi1qH56JpmZSzEL53jKnNzScdmftJyG5xWg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", + "integrity": "sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.6.tgz", - "integrity": "sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.13.2.tgz", + "integrity": "sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.6.tgz", - "integrity": "sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.13.2.tgz", + "integrity": "sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.12.1.tgz", - "integrity": "sha512-nzJwQw99DNDKr9BVCOZcLuJJUlqkJh+kVzVl6Fmq/tI5ZtEyWT1KZMyOXltXLZJmDtvLCDgwsyrkohEtopTXCw==", - "dev": true + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.14.1.tgz", + "integrity": "sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.6.tgz", - "integrity": "sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.13.2.tgz", + "integrity": "sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.6.tgz", - "integrity": "sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.13.2.tgz", + "integrity": "sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.12.1.tgz", - "integrity": "sha512-Jif4vfB6FJlUlSbgEMHUyk1j234GTNG9dBJ4XJdOySoj518Xj0oGsNi59cUQF4RRMS9ouBUxDDdyBVfPTypa5g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.14.1.tgz", + "integrity": "sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.6.tgz", - "integrity": "sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.13.2.tgz", + "integrity": "sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==", "dev": true, + "license": "MIT", "dependencies": { "@xtuc/ieee754": "^1.2.0" } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.6.tgz", - "integrity": "sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==", + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.13.2.tgz", + "integrity": "sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.6.tgz", - "integrity": "sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==", - "dev": true + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.13.2.tgz", + "integrity": "sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==", + "dev": true, + "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.12.1.tgz", - "integrity": "sha512-1DuwbVvADvS5mGnXbE+c9NfA8QRcZ6iKquqjjmR10k6o+zzsRVesil54DKexiowcFCPdr/Q0qaMgB01+SQ1u6g==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.14.1.tgz", + "integrity": "sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.12.1.tgz", - "integrity": "sha512-TDq4Ojh9fcohAw6OIMXqiIcTq5KUXTGRkVxbSo1hQnSy6lAM5GSdfwWeSxpAo0YzgsgF182E/U0mDNhuA0tW7w==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.14.1.tgz", + "integrity": "sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.12.1.tgz", - "integrity": "sha512-Jg99j/2gG2iaz3hijw857AVYekZe2SAskcqlWIZXjji5WStnOpVoat3gQfT/Q5tb2djnCjBtMocY/Su1GfxPBg==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.14.1.tgz", + "integrity": "sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.12.1.tgz", - "integrity": "sha512-xikIi7c2FHXysxXe3COrVUPSheuBtpcfhbpFj4gmu7KRLYOzANztwUU0IbsqvMqzuNK2+glRGWCEqZo1WCLyAQ==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.14.1.tgz", + "integrity": "sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.12.1.tgz", - "integrity": "sha512-+X4WAlOisVWQMikjbcvY2e0rwPsKQ9F688lksZhBcPycBBuii3O7m8FACbDMWDojpAqvjIncrG8J0XHKyQfVeA==", + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.14.1.tgz", + "integrity": "sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==", "dev": true, + "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, @@ -3868,6 +4322,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/configtest/-/configtest-2.1.1.tgz", "integrity": "sha512-wy0mglZpDSiSS0XHrVR+BAdId2+yxPSoJW8fsna3ZpYSlufjvxnP4YbKTCBZnNIcGN4r6ZPXV55X4mYExOfLmw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -3881,6 +4336,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/info/-/info-2.0.2.tgz", "integrity": "sha512-zLHQdI/Qs1UyT5UBdWNqsARasIA+AaF8t+4u2aS2nEpBQh2mWIVb8qAklq0eUENnC5mOItrIB4LiS9xMtph18A==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -3894,6 +4350,7 @@ "resolved": "https://registry.npmjs.org/@webpack-cli/serve/-/serve-2.0.5.tgz", "integrity": "sha512-lqaoKnRYBdo1UgDX8uF24AfGMifWK19TxPmM5FHc2vAGxrJ/qtyUyFBWoY1tISZdelsQ5fBcOusifo5o5wSJxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.15.0" }, @@ -3912,6 +4369,7 @@ "resolved": "https://registry.npmjs.org/@xmldom/xmldom/-/xmldom-0.8.10.tgz", "integrity": "sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.0.0" } @@ -3920,31 +4378,35 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@xtuc/long": { "version": "4.2.2", "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/@yarnpkg/parsers": { - "version": "3.0.0-rc.46", - "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz", - "integrity": "sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", + "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "js-yaml": "^3.10.0", "tslib": "^2.4.0" }, "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" } }, "node_modules/@yarnpkg/parsers/node_modules/argparse": { @@ -3952,6 +4414,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -3961,6 +4424,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -3973,13 +4437,15 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/@zkochan/js-yaml": { "version": "0.0.7", "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -3992,6 +4458,7 @@ "resolved": "https://registry.npmjs.org/7zip/-/7zip-0.0.6.tgz", "integrity": "sha512-ns8vKbKhIQm338AeWo/YdDSWil3pldwCMoyR2npoM2qDAzF8Vuko8BtDxpNt/wE15SXOh5K5WbjSLR4kTOAHLA==", "dev": true, + "license": "GNU LGPL", "bin": { "7z": "7zip-lite/7z.exe" } @@ -4000,22 +4467,25 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/7zip-bin/-/7zip-bin-5.2.0.tgz", "integrity": "sha512-ukTPVhqG4jNzMro2qA9HSCSSVJN3aN7tlb+hfqYCt3ER0yWroeA2VR38MNrOHLQ/cVj+DaIMad0kFCtWWowh/A==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/acorn": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.0.tgz", - "integrity": "sha512-RTvkC4w+KNXrM39/lWCUaG0IbRkWdCv7W/IOW9oU6SawyxulvkQy5HQPVTKxEjczcUvapcrw3cFx/60VN/NRNw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, + "license": "MIT", "bin": { "acorn": "bin/acorn" }, @@ -4023,29 +4493,22 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", - "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", - "dev": true, - "peerDependencies": { - "acorn": "^8" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -4057,18 +4520,20 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", "dev": true, + "license": "MIT", "dependencies": { - "debug": "4" + "debug": "^4.3.4" }, "engines": { - "node": ">= 6.0.0" + "node": ">= 14" } }, "node_modules/agentkeepalive": { @@ -4076,6 +4541,7 @@ "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", "dev": true, + "license": "MIT", "dependencies": { "humanize-ms": "^1.2.1" }, @@ -4088,6 +4554,7 @@ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, + "license": "MIT", "dependencies": { "clean-stack": "^2.0.0", "indent-string": "^4.0.0" @@ -4101,6 +4568,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -4117,6 +4585,7 @@ "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -4130,15 +4599,16 @@ } }, "node_modules/ajv-formats/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4149,13 +4619,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", "dev": true, + "license": "MIT", "peerDependencies": { "ajv": "^6.9.1" } @@ -4165,6 +4637,7 @@ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -4174,6 +4647,7 @@ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.21.3" }, @@ -4189,6 +4663,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -4201,6 +4676,7 @@ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4210,6 +4686,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -4221,40 +4698,47 @@ } }, "node_modules/app-builder-bin": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-4.0.0.tgz", - "integrity": "sha512-xwdG0FJPQMe0M0UA4Tz0zEB8rBJTRA5a476ZawAqiBkMv16GRK5xpXThOjMaEOFnZ6zabejjG4J3da0SXG63KA==", - "dev": true + "version": "5.0.0-alpha.10", + "resolved": "https://registry.npmjs.org/app-builder-bin/-/app-builder-bin-5.0.0-alpha.10.tgz", + "integrity": "sha512-Ev4jj3D7Bo+O0GPD2NMvJl+PGiBAfS7pUGawntBNpCbxtpncfUixqFj9z9Jme7V7s3LBGqsWZZP54fxBX3JKJw==", + "dev": true, + "license": "MIT" }, "node_modules/app-builder-lib": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-24.13.3.tgz", - "integrity": "sha512-FAzX6IBit2POXYGnTCT8YHFO/lr5AapAII6zzhQO3Rw4cEDOgK+t1xhLc5tNcKlicTHlo9zxIwnYCX9X2DLkig==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/app-builder-lib/-/app-builder-lib-25.1.8.tgz", + "integrity": "sha512-pCqe7dfsQFBABC1jeKZXQWhGcCPF3rPCXDdfqVKjIeWBcXzyC1iOWZdfFhGl+S9MyE/k//DFmC6FzuGAUudNDg==", "dev": true, + "license": "MIT", "dependencies": { "@develar/schema-utils": "~2.6.5", - "@electron/notarize": "2.2.1", - "@electron/osx-sign": "1.0.5", - "@electron/universal": "1.5.1", + "@electron/notarize": "2.5.0", + "@electron/osx-sign": "1.3.1", + "@electron/rebuild": "3.6.1", + "@electron/universal": "2.0.1", "@malept/flatpak-bundler": "^0.4.0", "@types/fs-extra": "9.0.13", "async-exit-hook": "^2.0.1", "bluebird-lst": "^1.0.9", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "chromium-pickle-js": "^0.2.0", + "config-file-ts": "0.2.8-rc1", "debug": "^4.3.4", + "dotenv": "^16.4.5", + "dotenv-expand": "^11.0.6", "ejs": "^3.1.8", - "electron-publish": "24.13.1", + "electron-publish": "25.1.7", "form-data": "^4.0.0", "fs-extra": "^10.1.0", "hosted-git-info": "^4.1.0", "is-ci": "^3.0.0", "isbinaryfile": "^5.0.0", "js-yaml": "^4.1.0", + "json5": "^2.2.3", "lazy-val": "^1.0.5", - "minimatch": "^5.1.1", - "read-config-file": "6.3.2", + "minimatch": "^10.0.0", + "resedit": "^1.7.0", "sanitize-filename": "^1.6.3", "semver": "^7.3.8", "tar": "^6.1.12", @@ -4264,8 +4748,8 @@ "node": ">=14.0.0" }, "peerDependencies": { - "dmg-builder": "24.13.3", - "electron-builder-squirrel-windows": "24.13.3" + "dmg-builder": "25.1.8", + "electron-builder-squirrel-windows": "25.1.8" } }, "node_modules/app-builder-lib/node_modules/brace-expansion": { @@ -4273,6 +4757,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -4282,6 +4767,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -4296,6 +4782,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -4308,6 +4795,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -4316,28 +4804,34 @@ } }, "node_modules/app-builder-lib/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "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==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/archiver": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "archiver-utils": "^2.1.0", @@ -4357,6 +4851,7 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "glob": "^7.1.4", @@ -4380,6 +4875,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -4401,6 +4897,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/archiver-utils/node_modules/minimatch": { @@ -4408,6 +4905,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" @@ -4421,6 +4919,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "core-util-is": "~1.0.0", @@ -4437,6 +4936,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/archiver-utils/node_modules/string_decoder": { @@ -4444,6 +4944,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "safe-buffer": "~5.1.0" @@ -4454,6 +4955,7 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "bl": "^4.0.3", @@ -4472,6 +4974,7 @@ "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "delegates": "^1.0.0", "readable-stream": "^3.6.0" @@ -4484,19 +4987,22 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/array-buffer-byte-length": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "is-array-buffer": "^3.0.4" @@ -4513,6 +5019,7 @@ "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4521,13 +5028,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-union": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -4537,6 +5046,7 @@ "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "call-bind": "^1.0.5", @@ -4559,6 +5069,7 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4568,6 +5079,7 @@ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", "dev": true, + "license": "MIT", "optional": true, "engines": { "node": ">=0.8" @@ -4578,21 +5090,24 @@ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" }, "node_modules/async-exit-hook": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/async-exit-hook/-/async-exit-hook-2.0.1.tgz", "integrity": "sha512-NW2cX8m1Q7KPA7a5M2ULQeZ2wR5qI5PAbw5L0UOMxdioVk9PMZ0h1TmyZEkPYrCvYjDlFICusOu1dlEKAAeXBw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -4601,13 +5116,15 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/at-least-node": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", "dev": true, + "license": "ISC", "engines": { "node": ">= 4.0.0" } @@ -4617,6 +5134,7 @@ "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -4628,10 +5146,11 @@ } }, "node_modules/axios": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.2.tgz", - "integrity": "sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw==", + "version": "1.7.8", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.8.tgz", + "integrity": "sha512-Uu0wb7KNqK2t5K+YQyVCLM76prD5sRFjKHbJYCP1J7JFGEQ6nN7HWn9+04LAeiJ3ji54lgS/gZCH1oxyrf1SPw==", "dev": true, + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -4642,7 +5161,8 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -4662,19 +5182,22 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/before-after-hook": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/bin-links": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-4.0.4.tgz", "integrity": "sha512-cMtq4W5ZsEwcutJrVId+a/tjt8GSbS+h0oNkdl6+6rBuEv8Ot33Bevj5KPm40t309zuhVic8NjpuL42QCiJWWA==", "dev": true, + "license": "ISC", "dependencies": { "cmd-shim": "^6.0.0", "npm-normalize-package-bin": "^3.0.0", @@ -4690,6 +5213,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.5.0", "inherits": "^2.0.4", @@ -4700,13 +5224,15 @@ "version": "3.7.2", "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/bluebird-lst": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/bluebird-lst/-/bluebird-lst-1.0.9.tgz", "integrity": "sha512-7B1Rtx82hjnSD4PGLAjVWeYH3tHAcVUmChh85a3lltKQm6FresXh9ErQo6oAv6CqxttczC3/kEg8SY5NluPuUw==", "dev": true, + "license": "MIT", "dependencies": { "bluebird": "^3.5.5" } @@ -4715,13 +5241,16 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/boolean": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/boolean/-/boolean-3.2.0.tgz", "integrity": "sha512-d0II/GO9uf9lfUHH2BQsjxzRJZBdsjgsBiW4BvhWk/3qoKwQFjIDVN19PfX8F2D/r9PCMTtLWjYVCFrpeYUzsw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info.", "dev": true, + "license": "MIT", "optional": true }, "node_modules/brace-expansion": { @@ -4729,6 +5258,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -4739,6 +5269,7 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, + "license": "MIT", "dependencies": { "fill-range": "^7.1.1" }, @@ -4747,9 +5278,9 @@ } }, "node_modules/browserslist": { - "version": "4.23.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.1.tgz", - "integrity": "sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw==", + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", "dev": true, "funding": [ { @@ -4765,11 +5296,12 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001629", - "electron-to-chromium": "^1.4.796", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.16" + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" }, "bin": { "browserslist": "cli.js" @@ -4797,6 +5329,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.1.13" @@ -4807,6 +5340,7 @@ "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", "dev": true, + "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -4816,58 +5350,51 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, - "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==", - "dev": true, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/builder-util": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-24.13.1.tgz", - "integrity": "sha512-NhbCSIntruNDTOVI9fdXz0dihaqX2YuE1D6zZMrwiErzH4ELZHE6mdiB40wEgZNprDia+FghRFgKoAqMZRRjSA==", + "version": "25.1.7", + "resolved": "https://registry.npmjs.org/builder-util/-/builder-util-25.1.7.tgz", + "integrity": "sha512-7jPjzBwEGRbwNcep0gGNpLXG9P94VA3CPAZQCzxkFXiV2GMQKlziMbY//rXPI7WKfhsvGgFXjTcXdBEwgXw9ww==", "dev": true, + "license": "MIT", "dependencies": { "@types/debug": "^4.1.6", "7zip-bin": "~5.2.0", - "app-builder-bin": "4.0.0", + "app-builder-bin": "5.0.0-alpha.10", "bluebird-lst": "^1.0.9", - "builder-util-runtime": "9.2.4", + "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", "cross-spawn": "^7.0.3", "debug": "^4.3.4", "fs-extra": "^10.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.0", "is-ci": "^3.0.0", "js-yaml": "^4.1.0", "source-map-support": "^0.5.19", @@ -4876,10 +5403,11 @@ } }, "node_modules/builder-util-runtime": { - "version": "9.2.4", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.4.tgz", - "integrity": "sha512-upp+biKpN/XZMLim7aguUyW8s0FUpDvOtK6sbanMFDAMBzpHDqdhgVYm6zc9HJ6nWo7u2Lxk60i2M6Jd3aiNrA==", + "version": "9.2.10", + "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.10.tgz", + "integrity": "sha512-6p/gfG1RJSQeIbz8TK5aPNkoztgY1q5TgmGFMAXcY8itsGW6Y2ld1ALsZ5UJn8rog7hKF3zHx5iQbNQ8uLcRlw==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.3.4", "sax": "^1.2.4" @@ -4893,6 +5421,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -4909,6 +5438,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -4918,29 +5448,22 @@ "node": ">=12" } }, - "node_modules/builtins": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.1.0.tgz", - "integrity": "sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/byte-size": { "version": "8.1.1", "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.17" } }, "node_modules/cacache": { - "version": "18.0.3", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.3.tgz", - "integrity": "sha512-qXCd4rh6I07cnDqh8V48/94Tc/WSfj+o3Gn6NZ0aZovS255bUx8O13uKxRFd2eWG0xgsco7+YItQNPaa5E85hg==", + "version": "18.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-18.0.4.tgz", + "integrity": "sha512-B+L5iIa9mgcjLbliir2th36yEwPftrzteHYujzsx3dFP/31GCHcIeS8f5MGd80odLOjaOvSpU3EEAmRQptkxLQ==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/fs": "^3.1.0", "fs-minipass": "^3.0.0", @@ -4959,23 +5482,12 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/cacache/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/cacheable-lookup": { "version": "5.0.4", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.6.0" } @@ -4985,6 +5497,7 @@ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", "dev": true, + "license": "MIT", "dependencies": { "clone-response": "^1.0.2", "get-stream": "^5.1.0", @@ -5003,6 +5516,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5018,6 +5532,7 @@ "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5037,6 +5552,7 @@ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5046,6 +5562,7 @@ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5055,6 +5572,7 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -5072,14 +5590,15 @@ "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/caniuse-lite": { - "version": "1.0.30001636", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001636.tgz", - "integrity": "sha512-bMg2vmr8XBsbL6Lr0UHXy/21m84FTxDLWn2FSqMd5PrlbMxwJlQnC2YWYxVgp66PZE+BBNF2jYQUBKCo1FDeZg==", + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", "dev": true, "funding": [ { @@ -5094,13 +5613,15 @@ "type": "github", "url": "https://github.com/sponsors/ai" } - ] + ], + "license": "CC-BY-4.0" }, "node_modules/chalk": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5116,13 +5637,15 @@ "version": "0.7.0", "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/check-node-version": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/check-node-version/-/check-node-version-4.2.1.tgz", "integrity": "sha512-YYmFYHV/X7kSJhuN/QYHUu998n/TRuDe8UenM3+m5NrkiH670lb9ILqHIvBencvJc4SDh+XcbXMR4b+TtubJiw==", "dev": true, + "license": "Unlicense", "dependencies": { "chalk": "^3.0.0", "map-values": "^1.0.1", @@ -5143,6 +5666,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5156,6 +5680,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } @@ -5165,6 +5690,7 @@ "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -5174,6 +5700,7 @@ "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.0" } @@ -5182,7 +5709,8 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/chromium-pickle-js/-/chromium-pickle-js-0.2.0.tgz", "integrity": "sha512-1R5Fho+jBq0DDydt+/vHWj5KJNJCKdARKOCwZUen84I5BreWoLqRLANH1U87eJy1tiASPtMnGqJJq0ZsLoRPOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ci-info": { "version": "3.9.0", @@ -5195,6 +5723,7 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } @@ -5204,6 +5733,7 @@ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -5213,6 +5743,7 @@ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, + "license": "MIT", "dependencies": { "restore-cursor": "^3.1.0" }, @@ -5225,6 +5756,7 @@ "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" }, @@ -5237,6 +5769,7 @@ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "slice-ansi": "^3.0.0", @@ -5254,6 +5787,7 @@ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", "dev": true, + "license": "ISC", "engines": { "node": ">= 10" } @@ -5263,6 +5797,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -5277,6 +5812,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -5286,6 +5822,7 @@ "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", "integrity": "sha512-KLLTJWrvwIP+OPfMn0x2PheDEP20RPUcGXj/ERegTgdmPEZylALQldygiqrPPu8P45uNuPs7ckmReLY6v/iA5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -5295,6 +5832,7 @@ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-object": "^2.0.4", "kind-of": "^6.0.2", @@ -5309,6 +5847,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, + "license": "MIT", "dependencies": { "isobject": "^3.0.1" }, @@ -5321,6 +5860,7 @@ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^1.0.0" }, @@ -5332,13 +5872,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", "integrity": "sha512-au6ydSpg6nsrigcZ4m8Bc9hxjeW+GJ8xh5G3BJCMt4WXe1H10UNaVOamqQTmrx1kjVuxAHIQSNU6hY4Nsn9/ag==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "process-nextick-args": "^2.0.0", @@ -5349,13 +5891,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cloneable-readable/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==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -5370,22 +5914,25 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cloneable-readable/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==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/cmd-shim": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.1.tgz", - "integrity": "sha512-S9iI9y0nKR4hwEQsVWpyxld/6kRfGepGfzff83FcaiEBpmvlbA2nnGe7Cylgrx2f/p1P5S5wpRm9oL8z1PbS3Q==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", + "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -5395,6 +5942,7 @@ "resolved": "https://registry.npmjs.org/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -5405,6 +5953,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -5416,13 +5965,15 @@ "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -5433,6 +5984,7 @@ "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", "dev": true, + "license": "ISC", "bin": { "color-support": "bin.js" } @@ -5442,6 +5994,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -5450,25 +6003,29 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz", "integrity": "sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorette": { "version": "2.0.20", "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/colorspace": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz", "integrity": "sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==", "dev": true, + "license": "MIT", "dependencies": { "color": "^3.1.3", "text-hex": "1.0.x" @@ -5479,6 +6036,7 @@ "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, + "license": "MIT", "dependencies": { "strip-ansi": "^6.0.1", "wcwidth": "^1.0.0" @@ -5492,6 +6050,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, + "license": "MIT", "dependencies": { "delayed-stream": "~1.0.0" }, @@ -5504,6 +6063,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -5512,13 +6072,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/compare-func": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -5529,6 +6091,7 @@ "resolved": "https://registry.npmjs.org/compare-version/-/compare-version-0.1.2.tgz", "integrity": "sha512-pJDh5/4wrEnXX/VWRZvruAGHkzKdr46z11OlTPN+VrATlWWhSKewNCJ1futCO5C7eJB3nPMFZA1LeYtcFboZ2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5538,6 +6101,7 @@ "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "buffer-crc32": "^0.2.13", @@ -5553,7 +6117,8 @@ "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/concat-stream": { "version": "2.0.0", @@ -5563,6 +6128,7 @@ "engines": [ "node >= 6.0" ], + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "inherits": "^2.0.3", @@ -5571,26 +6137,43 @@ } }, "node_modules/config-file-ts": { - "version": "0.2.6", - "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.6.tgz", - "integrity": "sha512-6boGVaglwblBgJqGyxm4+xCmEGcWgnWHSWHY5jad58awQhB6gftq0G8HbzU39YqCIYHMLAiL1yjwiZ36m/CL8w==", + "version": "0.2.8-rc1", + "resolved": "https://registry.npmjs.org/config-file-ts/-/config-file-ts-0.2.8-rc1.tgz", + "integrity": "sha512-GtNECbVI82bT4RiDIzBSVuTKoSHufnU7Ce7/42bkWZJZFLjmDF2WBpVsvRkhKCfKBnTBb3qZrBwPpFBU/Myvhg==", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^10.3.10", - "typescript": "^5.3.3" + "glob": "^10.3.12", + "typescript": "^5.4.3" + } + }, + "node_modules/config-file-ts/node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, "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==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/conventional-changelog-angular": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0" }, @@ -5603,6 +6186,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", "dev": true, + "license": "MIT", "dependencies": { "add-stream": "^1.0.0", "conventional-changelog-writer": "^6.0.0", @@ -5625,6 +6209,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -5637,6 +6222,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -5649,6 +6235,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -5664,6 +6251,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -5673,6 +6261,7 @@ "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, + "license": "MIT", "dependencies": { "conventional-commits-filter": "^3.0.0", "dateformat": "^3.0.3", @@ -5694,6 +6283,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", "dev": true, + "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.1" @@ -5707,6 +6297,7 @@ "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.3.5", @@ -5725,6 +6316,7 @@ "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", "dev": true, + "license": "MIT", "dependencies": { "concat-stream": "^2.0.0", "conventional-changelog-preset-loader": "^3.0.0", @@ -5742,20 +6334,21 @@ } }, "node_modules/copy-webpack-plugin": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", - "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-12.0.2.tgz", + "integrity": "sha512-SNwdBeHyII+rWvee/bTnAYyO8vfVdcSTud4EIb6jcZ8inLeWucJE0DnxXQBjlQ5zlteuuvooGQy3LIyGxhvlOA==", "dev": true, + "license": "MIT", "dependencies": { - "fast-glob": "^3.2.11", + "fast-glob": "^3.3.2", "glob-parent": "^6.0.1", - "globby": "^13.1.1", + "globby": "^14.0.0", "normalize-path": "^3.0.0", - "schema-utils": "^4.0.0", - "serialize-javascript": "^6.0.0" + "schema-utils": "^4.2.0", + "serialize-javascript": "^6.0.2" }, "engines": { - "node": ">= 14.15.0" + "node": ">= 18.12.0" }, "funding": { "type": "opencollective", @@ -5765,44 +6358,48 @@ "webpack": "^5.1.0" } }, - "node_modules/copy-webpack-plugin/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==", + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "14.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-14.0.2.tgz", + "integrity": "sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==", "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.3" + "@sindresorhus/merge-streams": "^2.1.0", + "fast-glob": "^3.3.2", + "ignore": "^5.2.4", + "path-type": "^5.0.0", + "slash": "^5.1.0", + "unicorn-magic": "^0.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copy-webpack-plugin/node_modules/globby": { - "version": "13.2.2", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.2.2.tgz", - "integrity": "sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==", + "node_modules/copy-webpack-plugin/node_modules/path-type": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", + "integrity": "sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==", "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/copy-webpack-plugin/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz", + "integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==", "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5812,18 +6409,20 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, + "license": "MIT", "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -5845,6 +6444,7 @@ "resolved": "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz", "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "buffer": "^5.1.0" @@ -5855,6 +6455,7 @@ "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", "dev": true, + "license": "Apache-2.0", "peer": true, "bin": { "crc32": "bin/crc32.njs" @@ -5868,6 +6469,7 @@ "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "crc-32": "^1.2.0", @@ -5881,13 +6483,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/cross-env": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.1" }, @@ -5902,10 +6506,11 @@ } }, "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==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -5919,13 +6524,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -5940,22 +6547,25 @@ "version": "0.0.2", "resolved": "https://registry.npmjs.org/cross-unzip/-/cross-unzip-0.0.2.tgz", "integrity": "sha512-nRJ5c+aqHz0OJVU4V1bqoaDggydfauK/Gha/H/ScBvuIjhZvl8YIpdWVzSR3vUhzCloqB1tvBdQ4V7J8qK7HzQ==", - "dev": true + "dev": true, + "license": "GNU LGPL" }, "node_modules/crypto-random-string": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/css-functions-list": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", - "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz", + "integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==", "dev": true, + "license": "MIT", "engines": { "node": ">=12 || >=16" } @@ -5965,6 +6575,7 @@ "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -5980,13 +6591,15 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/css-selector-parser/-/css-selector-parser-1.4.1.tgz", "integrity": "sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/css-tree": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" @@ -6000,6 +6613,7 @@ "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -6012,6 +6626,7 @@ "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true, + "license": "MIT", "bin": { "cssesc": "bin/cssesc" }, @@ -6024,6 +6639,7 @@ "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, + "license": "MIT", "dependencies": { "css-tree": "^1.1.2" }, @@ -6036,6 +6652,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -6048,19 +6665,22 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/cssom": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/dargs": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6070,6 +6690,7 @@ "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -6087,6 +6708,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -6104,6 +6726,7 @@ "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -6121,17 +6744,19 @@ "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } }, "node_modules/debug": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", - "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", "dev": true, + "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -6147,6 +6772,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6156,6 +6782,7 @@ "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -6172,6 +6799,7 @@ "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6181,6 +6809,7 @@ "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", "dev": true, + "license": "MIT", "dependencies": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -6200,6 +6829,7 @@ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "dev": true, + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -6215,6 +6845,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -6227,6 +6858,7 @@ "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", "dev": true, + "license": "MIT", "dependencies": { "file-type": "^5.2.0", "is-stream": "^1.1.0", @@ -6241,6 +6873,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6250,6 +6883,7 @@ "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", "dev": true, + "license": "MIT", "dependencies": { "decompress-tar": "^4.1.0", "file-type": "^6.1.0", @@ -6266,6 +6900,7 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6275,6 +6910,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6284,6 +6920,7 @@ "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", "dev": true, + "license": "MIT", "dependencies": { "decompress-tar": "^4.1.1", "file-type": "^5.2.0", @@ -6298,6 +6935,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6307,6 +6945,7 @@ "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", "dev": true, + "license": "MIT", "dependencies": { "file-type": "^3.8.0", "get-stream": "^2.2.0", @@ -6322,6 +6961,7 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6331,6 +6971,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", "dev": true, + "license": "MIT", "dependencies": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" @@ -6344,6 +6985,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -6353,6 +6995,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -6365,6 +7008,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -6374,27 +7018,39 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/dedent": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz", - "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", - "dev": true + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } }, "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/defaults": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^1.0.2" }, @@ -6407,6 +7063,7 @@ "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8" } @@ -6416,6 +7073,7 @@ "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -6425,6 +7083,7 @@ "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -6442,6 +7101,7 @@ "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6451,6 +7111,7 @@ "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -6468,6 +7129,7 @@ "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", "integrity": "sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==", "dev": true, + "license": "MIT", "dependencies": { "globby": "^11.0.1", "graceful-fs": "^4.2.4", @@ -6491,6 +7153,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6511,6 +7174,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6524,6 +7188,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6539,6 +7204,7 @@ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -6547,34 +7213,49 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/deprecation": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/desm": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/desm/-/desm-1.3.0.tgz", "integrity": "sha512-RvlHN2gfYA0BpCfjpWzCdQeR6p5U+84f5DzcirLow86UA/OcpwuOqXRC4Oz0bG9rzcJPVtMT6ZgNtjp4qh+uqA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/detect-indent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, + "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==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-node": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/diff": { @@ -6582,6 +7263,7 @@ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" } @@ -6591,18 +7273,20 @@ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, "node_modules/dir-compare": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-3.3.0.tgz", - "integrity": "sha512-J7/et3WlGUCxjdnD3HAAzQ6nsnc0WL6DD7WcwJb7c39iH1+AWfg+9OqzJNaI6PkBwBvm1mhZNL9iY/nRiZXlPg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/dir-compare/-/dir-compare-4.2.0.tgz", + "integrity": "sha512-2xMCmOoMrdQIPHdsTawECdNPwlVFB9zGcz3kuhmBO6U3oU+UQjsue0i8ayLKpgBcm+hcXPMVSGUN9d+pvJ6+VQ==", "dev": true, + "license": "MIT", "dependencies": { - "buffer-equal": "^1.0.0", - "minimatch": "^3.0.4" + "minimatch": "^3.0.5", + "p-limit": "^3.1.0 " } }, "node_modules/dir-glob": { @@ -6610,6 +7294,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -6618,14 +7303,15 @@ } }, "node_modules/dmg-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-24.13.3.tgz", - "integrity": "sha512-rcJUkMfnJpfCboZoOOPf4L29TRtEieHNOeAbYPWPxlaBw/Z1RKrRA86dOI9rwaI4tQSc/RD82zTNHprfUHXsoQ==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/dmg-builder/-/dmg-builder-25.1.8.tgz", + "integrity": "sha512-NoXo6Liy2heSklTI5OIZbCgXC1RzrDQsZkeEwXhdOro3FT1VBOvbubvscdPnjVuQ4AMwwv61oaH96AbiYg9EnQ==", "dev": true, + "license": "MIT", "dependencies": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "app-builder-lib": "25.1.8", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "fs-extra": "^10.1.0", "iconv-lite": "^0.6.2", "js-yaml": "^4.1.0" @@ -6639,6 +7325,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6653,6 +7340,7 @@ "resolved": "https://registry.npmjs.org/dmg-license/-/dmg-license-1.0.11.tgz", "integrity": "sha512-ZdzmqwKmECOWJpqefloC5OJy1+WZBBse5+MR88z9g9Zn4VY+WYUkAyojmhzJckH5YbbZGcYIuGAkY5/Ys5OM2Q==", "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -6679,6 +7367,7 @@ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, @@ -6691,6 +7380,7 @@ "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -6710,13 +7400,15 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -6732,6 +7424,7 @@ "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -6746,6 +7439,7 @@ "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -6754,43 +7448,54 @@ } }, "node_modules/dotenv": { - "version": "16.3.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.3.2.tgz", - "integrity": "sha512-HTlk5nmhkm8F6JcdXvHIzaorzCoziNQT9mGxLPVXW8wJF1TiGSL60ZGB4gHWabHOaMmWmhvk2/lPHfnBiT78AQ==", + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/motdotla/dotenv?sponsor=1" + "url": "https://dotenvx.com" } }, "node_modules/dotenv-expand": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", - "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" } }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -6802,11 +7507,12 @@ } }, "node_modules/electron": { - "version": "31.0.2", - "resolved": "https://registry.npmjs.org/electron/-/electron-31.0.2.tgz", - "integrity": "sha512-55efQ5yfLN+AQHcFC00AXQqtxC3iAGaxX2GQ3EDbFJ0ca9GHNOdSXkcrdBElLleiDrR2hpXNkQxN1bDn0oxe6w==", + "version": "33.2.0", + "resolved": "https://registry.npmjs.org/electron/-/electron-33.2.0.tgz", + "integrity": "sha512-PVw1ICAQDPsnnsmpNFX/b1i/49h67pbSPxuIENd9K9WpGO1tsRaQt+K2bmXqTuoMJsbzIc75Ce8zqtuwBPqawA==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { "@electron/get": "^2.0.0", "@types/node": "^20.9.0", @@ -6820,20 +7526,20 @@ } }, "node_modules/electron-builder": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-24.13.3.tgz", - "integrity": "sha512-yZSgVHft5dNVlo31qmJAe4BVKQfFdwpRw7sFp1iQglDRCDD6r22zfRJuZlhtB5gp9FHUxCMEoWGq10SkCnMAIg==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/electron-builder/-/electron-builder-25.1.8.tgz", + "integrity": "sha512-poRgAtUHHOnlzZnc9PK4nzG53xh74wj2Jy7jkTrqZ0MWPoHGh1M2+C//hGeYdA+4K8w4yiVCNYoLXF7ySj2Wig==", "dev": true, + "license": "MIT", "dependencies": { - "app-builder-lib": "24.13.3", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "app-builder-lib": "25.1.8", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", - "dmg-builder": "24.13.3", + "dmg-builder": "25.1.8", "fs-extra": "^10.1.0", "is-ci": "^3.0.0", "lazy-val": "^1.0.5", - "read-config-file": "6.3.2", "simple-update-notifier": "2.0.0", "yargs": "^17.6.2" }, @@ -6846,15 +7552,16 @@ } }, "node_modules/electron-builder-squirrel-windows": { - "version": "24.13.3", - "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-24.13.3.tgz", - "integrity": "sha512-oHkV0iogWfyK+ah9ZIvMDpei1m9ZRpdXcvde1wTpra2U8AFDNNpqJdnin5z+PM1GbQ5BoaKCWas2HSjtR0HwMg==", + "version": "25.1.8", + "resolved": "https://registry.npmjs.org/electron-builder-squirrel-windows/-/electron-builder-squirrel-windows-25.1.8.tgz", + "integrity": "sha512-2ntkJ+9+0GFP6nAISiMabKt6eqBB0kX1QqHNWFWAXgi0VULKGisM46luRFpIBiU3u/TDmhZMM8tzvo2Abn3ayg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { - "app-builder-lib": "24.13.3", + "app-builder-lib": "25.1.8", "archiver": "^5.3.1", - "builder-util": "24.13.1", + "builder-util": "25.1.7", "fs-extra": "^10.1.0" } }, @@ -6863,6 +7570,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "graceful-fs": "^4.2.0", @@ -6878,6 +7586,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -6894,6 +7603,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -6908,6 +7618,7 @@ "resolved": "https://registry.npmjs.org/electron-debug/-/electron-debug-1.5.0.tgz", "integrity": "sha512-23CLHQXW+gMgdlJbeW1EinPX7DpwuLtfdzSuFL0OnsqEhKGJVJufAZTyq2hc3sr+R53rr3P+mJiYoR5VzAHKJQ==", "dev": true, + "license": "MIT", "dependencies": { "electron-is-dev": "^0.3.0", "electron-localshortcut": "^3.0.0" @@ -6918,6 +7629,7 @@ "resolved": "https://registry.npmjs.org/electron-devtools-installer/-/electron-devtools-installer-2.2.3.tgz", "integrity": "sha512-KFVP2lt3guvhXsUKE3YxbddMOJtpdvTsWfloV/8395Df5Td9Z+YvNl8LFW864mVqdDJsiy2qQ8y95NT5C+avSA==", "dev": true, + "license": "MIT", "dependencies": { "7zip": "0.0.6", "cross-unzip": "0.0.2", @@ -6931,6 +7643,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -6951,6 +7664,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6964,6 +7678,7 @@ "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -6976,6 +7691,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -6984,19 +7700,22 @@ "version": "0.1.2", "resolved": "https://registry.npmjs.org/electron-is-accelerator/-/electron-is-accelerator-0.1.2.tgz", "integrity": "sha512-fLGSAjXZtdn1sbtZxx52+krefmtNuVwnJCV2gNiVt735/ARUboMl8jnNC9fZEqQdlAv2ZrETfmBUsoQci5evJA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-is-dev": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-0.3.0.tgz", "integrity": "sha512-jLttuuq8QK67n3mXmIe9pkrO7IH3LGIk12xJkhTmc852U2sCJaRAOpRGPSh+1Xnzck5v9escd9YXzuze9nGejg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-localshortcut": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/electron-localshortcut/-/electron-localshortcut-3.2.1.tgz", "integrity": "sha512-DWvhKv36GsdXKnaFFhEiK8kZZA+24/yFLgtTwJJHc7AFgDjNRIBJZ/jq62Y/dWv9E4ypYwrVWN2bVrCYw1uv7Q==", "dev": true, + "license": "MIT", "dependencies": { "debug": "^4.0.1", "electron-is-accelerator": "^0.1.0", @@ -7008,17 +7727,19 @@ "version": "4.4.8", "resolved": "https://registry.npmjs.org/electron-log/-/electron-log-4.4.8.tgz", "integrity": "sha512-QQ4GvrXO+HkgqqEOYbi+DHL7hj5JM+nHi/j+qrN9zeeXVKy8ZABgbu4CnG+BBqDZ2+tbeq9tUC4DZfIWFU5AZA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/electron-publish": { - "version": "24.13.1", - "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-24.13.1.tgz", - "integrity": "sha512-2ZgdEqJ8e9D17Hwp5LEq5mLQPjqU3lv/IALvgp+4W8VeNhryfGhYEQC/PgDPMrnWUp+l60Ou5SJLsu+k4mhQ8A==", + "version": "25.1.7", + "resolved": "https://registry.npmjs.org/electron-publish/-/electron-publish-25.1.7.tgz", + "integrity": "sha512-+jbTkR9m39eDBMP4gfbqglDd6UvBC7RLh5Y0MhFSsc6UkGHj9Vj9TWobxevHYMMqmoujL11ZLjfPpMX+Pt6YEg==", "dev": true, + "license": "MIT", "dependencies": { "@types/fs-extra": "^9.0.11", - "builder-util": "24.13.1", - "builder-util-runtime": "9.2.4", + "builder-util": "25.1.7", + "builder-util-runtime": "9.2.10", "chalk": "^4.1.2", "fs-extra": "^10.1.0", "lazy-val": "^1.0.5", @@ -7030,6 +7751,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7046,6 +7768,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -7060,6 +7783,7 @@ "resolved": "https://registry.npmjs.org/electron-settings/-/electron-settings-4.0.4.tgz", "integrity": "sha512-yR6ByH3hHqDgbcQ9y5foA2Pr2fSMIggFDMsHe71z1Og6myw7vxMlrkIzenmmrmZHeFLlvQyt7+gTZCH8BywHBw==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21", "mkdirp": "^1.0.4", @@ -7074,6 +7798,7 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -7082,38 +7807,27 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.807", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.807.tgz", - "integrity": "sha512-kSmJl2ZwhNf/bcIuCH/imtNOKlpkLDn2jqT5FJ+/0CXjhnFaOa9cOe9gHKKy71eM49izwuQjZhKk+lWQ1JxB7A==", - "dev": true + "version": "1.5.65", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.65.tgz", + "integrity": "sha512-PWVzBjghx7/wop6n22vS2MLU8tKGd4Q91aCEGhG/TYmW6PP5OcSXcdnxTe1NNt0T66N8D6jxh4kC8UsdzOGaIw==", + "dev": true, + "license": "ISC" }, "node_modules/electron-updater": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.0.4.tgz", - "integrity": "sha512-7T+2UE9xSXeZfmC1Gr+v5AvlNGfmwTB1qWjg2/ZU2lvPH4gyAxfjFX51mwuat+B/iPKzLsvh9huUCnNR5nOnWQ==", + "version": "6.3.9", + "resolved": "https://registry.npmjs.org/electron-updater/-/electron-updater-6.3.9.tgz", + "integrity": "sha512-2PJNONi+iBidkoC5D1nzT9XqsE8Q1X28Fn6xRQhO3YX8qRRyJ3mkV4F1aQsuRnYPqq6Hw+E51y27W75WgDoofw==", "dev": true, + "license": "MIT", "dependencies": { - "builder-util-runtime": "9.2.0", + "builder-util-runtime": "9.2.10", "fs-extra": "^10.1.0", "js-yaml": "^4.1.0", "lazy-val": "^1.0.5", "lodash.escaperegexp": "^4.1.2", "lodash.isequal": "^4.5.0", - "semver": "^7.3.8", - "typed-emitter": "^2.1.0" - } - }, - "node_modules/electron-updater/node_modules/builder-util-runtime": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/builder-util-runtime/-/builder-util-runtime-9.2.0.tgz", - "integrity": "sha512-6S0FLP5n57MgSVEypgjq5veUMd8C8NKt/IgRRXyYXYnhRG9AxxAB4/uULQhDG4JbAoeb5ahOTPC1jAxT0l2ylQ==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "sax": "^1.2.4" - }, - "engines": { - "node": ">=12.0.0" + "semver": "^7.6.3", + "tiny-typed-emitter": "^2.1.0" } }, "node_modules/electron-updater/node_modules/fs-extra": { @@ -7121,6 +7835,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -7130,32 +7845,39 @@ "node": ">=12" } }, - "node_modules/electron/node_modules/@types/node": { - "version": "20.14.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.7.tgz", - "integrity": "sha512-uTr2m2IbJJucF3KUxgnGOZvYbN0QgkGyWxG6973HCpMYFy2KfcgYuIwkJQMQkt1VbBMlvWRbpshFTLxnxCZjKQ==", + "node_modules/electron-updater/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "undici-types": "~5.26.4" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/enabled": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz", "integrity": "sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/encoding": { "version": "0.1.13", "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "iconv-lite": "^0.6.2" @@ -7166,15 +7888,17 @@ "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/enhanced-resolve": { - "version": "5.17.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.0.tgz", - "integrity": "sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==", + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -7188,6 +7912,7 @@ "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-colors": "^4.1.1" }, @@ -7200,6 +7925,7 @@ "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "dev": true, + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -7209,15 +7935,17 @@ "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/envinfo": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.8.1.tgz", - "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", "dev": true, + "license": "MIT", "bin": { "envinfo": "dist/cli.js" }, @@ -7229,22 +7957,25 @@ "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", "arraybuffer.prototype.slice": "^1.0.3", @@ -7261,7 +7992,7 @@ "function.prototype.name": "^1.1.6", "get-intrinsic": "^1.2.4", "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", + "globalthis": "^1.0.4", "gopd": "^1.0.1", "has-property-descriptors": "^1.0.2", "has-proto": "^1.0.3", @@ -7277,10 +8008,10 @@ "is-string": "^1.0.7", "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", + "regexp.prototype.flags": "^1.5.3", "safe-array-concat": "^1.1.2", "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.9", @@ -7305,6 +8036,7 @@ "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4" }, @@ -7317,21 +8049,24 @@ "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.3.tgz", - "integrity": "sha512-i1gCgmR9dCl6Vil6UKPI/trA69s08g/syhiDK9TG0Nf1RJjjFI+AzoWW7sPufzkgYAn861skuCwJa0pIIHYxvg==", - "dev": true + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" }, "node_modules/es-object-atoms": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -7344,6 +8079,7 @@ "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.2.4", "has-tostringtag": "^1.0.2", @@ -7354,14 +8090,15 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, + "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -7375,6 +8112,7 @@ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/esbuild": { @@ -7383,6 +8121,7 @@ "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", "dev": true, "hasInstallScript": true, + "license": "MIT", "bin": { "esbuild": "bin/esbuild" }, @@ -7416,10 +8155,11 @@ } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -7429,6 +8169,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -7440,7 +8181,9 @@ "version": "8.57.0", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", @@ -7496,6 +8239,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" @@ -7512,6 +8256,7 @@ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -7519,23 +8264,12 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/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==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7548,6 +8282,7 @@ "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "acorn": "^8.9.0", "acorn-jsx": "^5.3.2", @@ -7565,6 +8300,7 @@ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", "dev": true, + "license": "BSD-2-Clause", "bin": { "esparse": "bin/esparse.js", "esvalidate": "bin/esvalidate.js" @@ -7574,10 +8310,11 @@ } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "estraverse": "^5.1.0" }, @@ -7590,6 +8327,7 @@ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -7602,6 +8340,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -7611,6 +8350,7 @@ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" } @@ -7619,13 +8359,15 @@ "version": "4.0.7", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/events": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -7635,6 +8377,7 @@ "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -7657,13 +8400,15 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, + "license": "MIT", "dependencies": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -7678,6 +8423,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -7690,6 +8436,7 @@ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, + "license": "MIT", "dependencies": { "os-tmpdir": "~1.0.2" }, @@ -7702,6 +8449,7 @@ "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-2.0.1.tgz", "integrity": "sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "debug": "^4.1.1", "get-stream": "^5.1.0", @@ -7722,6 +8470,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -7740,19 +8489,22 @@ "engines": [ "node >=0.6.0" ], + "license": "MIT", "optional": true }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, + "license": "MIT", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -7764,23 +8516,46 @@ "node": ">=8.6.0" } }, + "node_modules/fast-glob/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==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4.9.1" } @@ -7790,6 +8565,7 @@ "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -7799,6 +8575,7 @@ "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", "dev": true, + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -7807,13 +8584,15 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz", "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/figures": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -7829,6 +8608,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -7838,6 +8618,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.0.4" }, @@ -7850,6 +8631,7 @@ "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -7859,6 +8641,7 @@ "resolved": "https://registry.npmjs.org/file-url/-/file-url-3.0.0.tgz", "integrity": "sha512-g872QGsHexznxkIAdK8UiZRe7SkE6kvylShU4Nsj8NvfvZag7S0QuQ4IgvPDkk75HxgjIVDwycFTDAgIiO4nDA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7868,6 +8651,7 @@ "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "minimatch": "^5.0.1" } @@ -7877,6 +8661,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -7886,6 +8671,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -7898,6 +8684,7 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -7910,6 +8697,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^6.0.0", "path-exists": "^4.0.0" @@ -7926,6 +8714,7 @@ "resolved": "https://registry.npmjs.org/flat/-/flat-5.0.2.tgz", "integrity": "sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==", "dev": true, + "license": "BSD-3-Clause", "bin": { "flat": "cli.js" } @@ -7935,6 +8724,7 @@ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", "keyv": "^4.5.3", @@ -7950,6 +8740,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7970,6 +8761,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -7983,6 +8775,7 @@ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", "deprecated": "Rimraf versions prior to v4 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "glob": "^7.1.3" }, @@ -7994,21 +8787,23 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", - "dev": true + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" }, "node_modules/fn.name": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz", "integrity": "sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -8016,6 +8811,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -8030,15 +8826,17 @@ "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, + "license": "MIT", "dependencies": { "is-callable": "^1.1.3" } }, "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==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", "dev": true, + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -8055,6 +8853,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -8063,10 +8862,11 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "dev": true, + "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", @@ -8081,6 +8881,7 @@ "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", "dev": true, + "license": "MIT", "dependencies": { "js-yaml": "^3.13.1" } @@ -8090,6 +8891,7 @@ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -8099,6 +8901,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -8111,19 +8914,22 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", - "dev": true + "dev": true, + "license": "BSD-3-Clause" }, "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -8138,6 +8944,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -8149,7 +8956,8 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/fsevents": { "version": "2.3.3", @@ -8157,6 +8965,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -8170,6 +8979,7 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8179,6 +8989,7 @@ "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "define-properties": "^1.2.0", @@ -8197,6 +9008,7 @@ "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8207,6 +9019,7 @@ "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "aproba": "^1.0.3 || ^2.0.0", "color-support": "^1.1.3", @@ -8226,6 +9039,7 @@ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true, + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -8235,6 +9049,7 @@ "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "function-bind": "^1.1.2", @@ -8254,6 +9069,7 @@ "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, + "license": "MIT", "dependencies": { "@hutson/parse-repository-url": "^3.0.0", "hosted-git-info": "^4.0.0", @@ -8272,6 +9088,7 @@ "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -8283,6 +9100,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -8295,6 +9113,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -8307,6 +9126,7 @@ "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -8325,6 +9145,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -8334,6 +9155,7 @@ "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -8346,6 +9168,7 @@ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8358,6 +9181,7 @@ "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "es-errors": "^1.3.0", @@ -8371,10 +9195,11 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz", - "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-pkg-maps": "^1.0.0" }, @@ -8387,6 +9212,7 @@ "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, + "license": "MIT", "dependencies": { "dargs": "^7.0.0", "meow": "^8.1.2", @@ -8404,6 +9230,7 @@ "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, + "license": "MIT", "dependencies": { "gitconfiglocal": "^1.0.0", "pify": "^2.3.0" @@ -8417,6 +9244,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -8426,6 +9254,7 @@ "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", "dev": true, + "license": "MIT", "dependencies": { "meow": "^8.1.2", "semver": "^7.0.0" @@ -8442,16 +9271,18 @@ "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, + "license": "MIT", "dependencies": { "is-ssh": "^1.4.0", "parse-url": "^8.1.0" } }, "node_modules/git-url-parse": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-13.1.0.tgz", - "integrity": "sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", + "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", "dev": true, + "license": "MIT", "dependencies": { "git-up": "^7.0.0" } @@ -8461,15 +9292,17 @@ "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, + "license": "BSD", "dependencies": { "ini": "^1.3.2" } }, "node_modules/glob": { - "version": "10.4.2", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz", - "integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==", + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", "dev": true, + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", @@ -8481,45 +9314,46 @@ "bin": { "glob": "dist/esm/bin.mjs" }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "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==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "is-glob": "^4.0.3" }, "engines": { - "node": ">= 6" + "node": ">=10.13.0" } }, "node_modules/glob-to-regexp": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/glob/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==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/glob/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -8535,6 +9369,7 @@ "resolved": "https://registry.npmjs.org/global-agent/-/global-agent-3.0.0.tgz", "integrity": "sha512-PT6XReJ+D07JvGoxQMkT6qji/jVNfX/h364XHZOWeRzy64sSFr+xJ5OX7LI3b4MPQzdL4H8Y8M0xzPpsVMwA8Q==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -8553,6 +9388,7 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, + "license": "MIT", "dependencies": { "global-prefix": "^3.0.0" }, @@ -8565,6 +9401,7 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, + "license": "MIT", "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -8578,13 +9415,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -8597,6 +9436,7 @@ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.20.2" }, @@ -8612,6 +9452,7 @@ "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", "dev": true, + "license": "MIT", "dependencies": { "define-properties": "^1.2.1", "gopd": "^1.0.1" @@ -8628,6 +9469,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -8647,13 +9489,15 @@ "version": "0.1.4", "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, + "license": "MIT", "dependencies": { "get-intrinsic": "^1.1.3" }, @@ -8666,6 +9510,7 @@ "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", "dev": true, + "license": "MIT", "dependencies": { "@sindresorhus/is": "^4.0.0", "@szmarczak/http-timer": "^4.0.5", @@ -8690,19 +9535,22 @@ "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==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.2", @@ -8724,6 +9572,7 @@ "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -8733,6 +9582,7 @@ "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -8742,6 +9592,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -8751,6 +9602,7 @@ "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -8763,6 +9615,7 @@ "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8775,6 +9628,7 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -8787,6 +9641,7 @@ "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -8801,13 +9656,15 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/hasown": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -8820,6 +9677,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-7.0.2.tgz", "integrity": "sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^10.0.1" }, @@ -8832,6 +9690,7 @@ "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -8843,20 +9702,21 @@ "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==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "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==", "dev": true, + "license": "MIT", "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/http2-wrapper": { @@ -8864,6 +9724,7 @@ "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", "dev": true, + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.0.0" @@ -8873,16 +9734,17 @@ } }, "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==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", "dev": true, + "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.0.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -8890,6 +9752,7 @@ "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } @@ -8899,6 +9762,7 @@ "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.0.0" } @@ -8908,6 +9772,7 @@ "resolved": "https://registry.npmjs.org/iconv-corefoundation/-/iconv-corefoundation-1.1.7.tgz", "integrity": "sha512-T10qvkw0zz4wnm560lOEg0PovVqUXuOFhhHAkixw8/sycy7TJt7v/RrkEKEQnAw2viPSJu6iAkErxnzR0g8PpQ==", "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -8925,6 +9790,7 @@ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" }, @@ -8950,27 +9816,30 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/ignore": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", - "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } }, "node_modules/ignore-walk": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-5.0.1.tgz", - "integrity": "sha512-yemi4pMf51WKT7khInJqAvsIGzoqYXblnsz0ql8tM+yi1EKYTY1evX4NAbJrLL/Aanr2HyZeluqU+Oi7MGHokw==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", + "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", "dev": true, + "license": "ISC", "dependencies": { - "minimatch": "^5.0.1" + "minimatch": "^9.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/ignore-walk/node_modules/brace-expansion": { @@ -8978,20 +9847,25 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/import-fresh": { @@ -8999,6 +9873,7 @@ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -9015,6 +9890,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -9024,6 +9900,7 @@ "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9033,6 +9910,7 @@ "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, + "license": "MIT", "dependencies": { "pkg-dir": "^4.2.0", "resolve-cwd": "^3.0.0" @@ -9052,6 +9930,7 @@ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -9061,16 +9940,25 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true, + "license": "ISC" + }, "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.", "dev": true, + "license": "ISC", "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -9080,66 +9968,33 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/init-package-json": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-5.0.0.tgz", - "integrity": "sha512-kBhlSheBfYmq3e0L1ii+VKe3zBTLL5lDCDWR+f9dLmEGSB3MqLlMlsolubSsyI88Bg6EA+BIMlomAnQ1SwgQBw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-6.0.3.tgz", + "integrity": "sha512-Zfeb5ol+H+eqJWHTaGca9BovufyGeIfr4zaaBorPmJBMrJ+KBnN+kQx2ZtXdsotUTgldHmHQV44xvUWOUA7E2w==", "dev": true, + "license": "ISC", "dependencies": { - "npm-package-arg": "^10.0.0", + "@npmcli/package-json": "^5.0.0", + "npm-package-arg": "^11.0.0", "promzard": "^1.0.0", - "read": "^2.0.0", - "read-package-json": "^6.0.0", + "read": "^3.0.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/init-package-json/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/inquirer": { @@ -9147,6 +10002,7 @@ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.1", @@ -9173,6 +10029,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -9189,6 +10046,7 @@ "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", "hasown": "^2.0.0", @@ -9203,6 +10061,7 @@ "resolved": "https://registry.npmjs.org/interpret/-/interpret-3.1.1.tgz", "integrity": "sha512-6xwYfHbajpoF0xLW+iwLkhwgvLoZDfjYfoFNu8ftMoXINzwuymNLd9u/KmwtdT2GbR+/Cz66otEGEVVUHX9QLQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -9212,6 +10071,7 @@ "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz", "integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==", "dev": true, + "license": "MIT", "dependencies": { "jsbn": "1.1.0", "sprintf-js": "^1.1.3" @@ -9225,6 +10085,7 @@ "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "get-intrinsic": "^1.2.1" @@ -9240,13 +10101,31 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", "dev": true, + "license": "MIT", "dependencies": { "has-bigints": "^1.0.1" }, @@ -9259,6 +10138,7 @@ "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9275,6 +10155,7 @@ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9287,6 +10168,7 @@ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, + "license": "MIT", "dependencies": { "ci-info": "^3.2.0" }, @@ -9295,10 +10177,11 @@ } }, "node_modules/is-core-module": { - "version": "2.14.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.14.0.tgz", - "integrity": "sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==", + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -9314,6 +10197,7 @@ "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", "dev": true, + "license": "MIT", "dependencies": { "is-typed-array": "^1.1.13" }, @@ -9329,6 +10213,7 @@ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9344,6 +10229,7 @@ "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", "dev": true, + "license": "MIT", "bin": { "is-docker": "cli.js" }, @@ -9359,24 +10245,59 @@ "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "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==", "dev": true, + "license": "MIT", "dependencies": { "is-extglob": "^2.1.1" }, @@ -9389,6 +10310,7 @@ "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9397,19 +10319,35 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-negative-zero": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -9422,6 +10360,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -9431,6 +10370,7 @@ "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9446,6 +10386,7 @@ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9455,6 +10396,7 @@ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.2.0.tgz", "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -9464,6 +10406,7 @@ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9473,6 +10416,7 @@ "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9482,6 +10426,7 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -9491,6 +10436,7 @@ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-tostringtag": "^1.0.0" @@ -9502,11 +10448,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-shared-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7" }, @@ -9522,6 +10482,7 @@ "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.0.tgz", "integrity": "sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==", "dev": true, + "license": "MIT", "dependencies": { "protocols": "^2.0.1" } @@ -9531,6 +10492,7 @@ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -9540,6 +10502,7 @@ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, + "license": "MIT", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -9555,6 +10518,7 @@ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.2" }, @@ -9570,6 +10534,7 @@ "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -9582,6 +10547,7 @@ "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, + "license": "MIT", "dependencies": { "which-typed-array": "^1.1.14" }, @@ -9596,13 +10562,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-unicode-supported": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9610,11 +10578,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-weakref": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2" }, @@ -9622,11 +10604,29 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/is-wsl": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", "dev": true, + "license": "MIT", "dependencies": { "is-docker": "^2.0.0" }, @@ -9638,13 +10638,15 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/isbinaryfile": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.2.tgz", - "integrity": "sha512-GvcjojwonMjWbTkfMpnVHVqXW/wKMYDfEpY94/8zy8HFMOqb/VL6oeONq9v87q4ttVlaTLnGXnJD4B5B1OTGIg==", + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-5.0.4.tgz", + "integrity": "sha512-YKBKVkKhty7s8rxddb40oOkuP0NbaeXrQvLin6QMHL7Ypiy2RW9LwOVrVgZRyOrhQlayMd9t+D8yDy8MKFTSDQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 18.0.0" }, @@ -9657,6 +10659,7 @@ "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.1.tgz", "integrity": "sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=16" } @@ -9666,21 +10669,20 @@ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/jackspeak": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", - "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, - "engines": { - "node": ">=14" - }, "funding": { "url": "https://github.com/sponsors/isaacs" }, @@ -9689,10 +10691,11 @@ } }, "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.2.tgz", + "integrity": "sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "async": "^3.2.3", "chalk": "^4.0.2", @@ -9711,6 +10714,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -9719,62 +10723,32 @@ } }, "node_modules/jasmine": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-4.6.0.tgz", - "integrity": "sha512-iq7HQ5M8ydNUspjd9vbFW9Lu+6lQ1QLDIqjl0WysEllF5EJZy8XaUyNlhCJVwOx2YFzqTtARWbS56F/f0PzRFw==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/jasmine/-/jasmine-5.3.1.tgz", + "integrity": "sha512-3zeUCfr3d1iga3s+NgDpggCP+ex5sdbNgqNn+Tq4yw/QfnwGrWC/ZvXX1IRm5deSIZ1LnvoeGY55F/ztbVOXPQ==", "dev": true, + "license": "MIT", "dependencies": { - "glob": "^7.1.6", - "jasmine-core": "^4.6.0" + "glob": "^10.2.2", + "jasmine-core": "~5.3.0" }, "bin": { "jasmine": "bin/jasmine.js" } }, "node_modules/jasmine-core": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.1.tgz", - "integrity": "sha512-VYz/BjjmC3klLJlLwA4Kw8ytk0zDSmbbDLNs794VnWmkcCB7I9aAL/D48VNQtmITyPvea2C3jdUMfc3kAoy0PQ==", - "dev": true - }, - "node_modules/jasmine/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", - "dev": 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/jasmine/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-5.3.0.tgz", + "integrity": "sha512-zsOmeBKESky4toybvWEikRiZ0jHoBEu79wNArLfMdSnlLMZx3Xcp6CSm2sUcYyoJC+Uyj8LBJap/MUbVSfJ27g==", "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } + "license": "MIT" }, "node_modules/jest-diff": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.7.0.tgz", "integrity": "sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.0.0", "diff-sequences": "^29.6.3", @@ -9790,6 +10764,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -9802,6 +10777,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.6.3", "ansi-styles": "^5.0.0", @@ -9816,6 +10792,7 @@ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", "dev": true, + "license": "MIT", "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } @@ -9825,6 +10802,7 @@ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -9839,6 +10817,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -9853,13 +10832,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -9871,25 +10852,29 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz", "integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.2.tgz", "integrity": "sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==", "dev": true, + "license": "MIT", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -9898,19 +10883,22 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-nice": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", "dev": true, + "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -9919,13 +10907,15 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/json5": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, + "license": "MIT", "bin": { "json5": "lib/cli.js" }, @@ -9937,13 +10927,15 @@ "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -9958,13 +10950,15 @@ "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -9980,31 +10974,36 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/just-diff-apply": { "version": "5.5.0", "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyboardevent-from-electron-accelerator": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/keyboardevent-from-electron-accelerator/-/keyboardevent-from-electron-accelerator-2.0.0.tgz", "integrity": "sha512-iQcmNA0M4ETMNi0kG/q0h/43wZk7rMeKYrXP7sqKIJbHkTU8Koowgzv+ieR/vWJbOwxx5nDC3UnudZ0aLSu4VA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyboardevents-areequal": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/keyboardevents-areequal/-/keyboardevents-areequal-0.2.2.tgz", "integrity": "sha512-Nv+Kr33T0mEjxR500q+I6IWisOQ0lK1GGOncV0kWE6n4KFmpcu7RUX5/2B0EUtX51Cb0HjZ9VJsSY3u4cBa0kw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -10014,6 +11013,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -10022,25 +11022,29 @@ "version": "0.29.0", "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/kuler": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz", "integrity": "sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lazy-val": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/lazy-val/-/lazy-val-1.0.5.tgz", "integrity": "sha512-0/BnGCCfyUMkBpeDgWihanIAF9JmZhHBgUhEqzvf+adhNGLoP6TaiI5oF8oyb3I45P+PcnrqihSf01M0l0G5+Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lazystream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz", "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "readable-stream": "^2.0.5" @@ -10054,6 +11058,7 @@ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lazystream/node_modules/readable-stream": { @@ -10061,6 +11066,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "core-util-is": "~1.0.0", @@ -10077,6 +11083,7 @@ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lazystream/node_modules/string_decoder": { @@ -10084,87 +11091,96 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "safe-buffer": "~5.1.0" } }, "node_modules/lerna": { - "version": "8.1.3", - "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.3.tgz", - "integrity": "sha512-Dg/r1dGnRCXKsOUC3lol7o6ggYTA6WWiPQzZJNKqyygn4fzYGuA3Dro2d5677pajaqFnFA72mdCjzSyF16Vi2Q==", + "version": "8.1.9", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-8.1.9.tgz", + "integrity": "sha512-ZRFlRUBB2obm+GkbTR7EbgTMuAdni6iwtTQTMy7LIrQ4UInG44LyfRepljtgUxh4HA0ltzsvWfPkd5J1DKGCeQ==", "dev": true, + "license": "MIT", "dependencies": { - "@lerna/create": "8.1.3", - "@npmcli/run-script": "7.0.2", - "@nx/devkit": ">=17.1.2 < 20", + "@lerna/create": "8.1.9", + "@npmcli/arborist": "7.5.4", + "@npmcli/package-json": "5.2.0", + "@npmcli/run-script": "8.1.0", + "@nx/devkit": ">=17.1.2 < 21", "@octokit/plugin-enterprise-rest": "6.0.1", "@octokit/rest": "19.0.11", + "aproba": "2.0.0", "byte-size": "8.1.1", "chalk": "4.1.0", "clone-deep": "4.0.1", - "cmd-shim": "6.0.1", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", "columnify": "1.6.0", + "console-control-strings": "^1.1.0", "conventional-changelog-angular": "7.0.0", "conventional-changelog-core": "5.0.1", "conventional-recommended-bump": "7.0.1", - "cosmiconfig": "^8.2.0", - "dedent": "0.7.0", - "envinfo": "7.8.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "envinfo": "7.13.0", "execa": "5.0.0", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "get-port": "5.1.1", "get-stream": "6.0.0", - "git-url-parse": "13.1.0", - "glob-parent": "5.1.2", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", "globby": "11.1.0", "graceful-fs": "4.2.11", "has-unicode": "2.0.1", "import-local": "3.1.0", "ini": "^1.3.8", - "init-package-json": "5.0.0", + "init-package-json": "6.0.3", "inquirer": "^8.2.4", "is-ci": "3.0.1", "is-stream": "2.0.0", "jest-diff": ">=29.4.3 < 30", "js-yaml": "4.1.0", - "libnpmaccess": "7.0.2", - "libnpmpublish": "7.3.0", + "libnpmaccess": "8.0.6", + "libnpmpublish": "9.0.9", "load-json-file": "6.2.0", "lodash": "^4.17.21", "make-dir": "4.0.0", "minimatch": "3.0.5", "multimatch": "5.0.0", "node-fetch": "2.6.7", - "npm-package-arg": "8.1.1", - "npm-packlist": "5.1.1", - "npm-registry-fetch": "^14.0.5", - "npmlog": "^6.0.2", - "nx": ">=17.1.2 < 20", + "npm-package-arg": "11.0.2", + "npm-packlist": "8.0.2", + "npm-registry-fetch": "^17.1.0", + "nx": ">=17.1.2 < 21", "p-map": "4.0.0", "p-map-series": "2.1.0", "p-pipe": "3.1.0", "p-queue": "6.6.2", "p-reduce": "2.1.0", "p-waterfall": "2.1.1", - "pacote": "^17.0.5", + "pacote": "^18.0.6", "pify": "5.0.0", "read-cmd-shim": "4.0.0", - "read-package-json": "6.0.4", "resolve-from": "5.0.0", "rimraf": "^4.4.1", "semver": "^7.3.8", + "set-blocking": "^2.0.0", "signal-exit": "3.0.7", "slash": "3.0.0", - "ssri": "^9.0.1", + "ssri": "^10.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", "strong-log-transformer": "2.1.0", "tar": "6.2.1", "temp-dir": "1.0.0", "typescript": ">=3 < 6", "upath": "2.0.1", - "uuid": "^9.0.0", + "uuid": "^10.0.0", "validate-npm-package-license": "3.0.4", - "validate-npm-package-name": "5.0.0", + "validate-npm-package-name": "5.0.1", + "wide-align": "1.1.5", "write-file-atomic": "5.0.1", "write-pkg": "4.0.0", "yargs": "17.7.2", @@ -10182,6 +11198,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -10191,6 +11208,7 @@ "resolved": "https://registry.npmjs.org/glob/-/glob-9.3.5.tgz", "integrity": "sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "minimatch": "^8.0.2", @@ -10209,6 +11227,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-8.0.4.tgz", "integrity": "sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -10224,6 +11243,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.2.8.tgz", "integrity": "sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } @@ -10233,6 +11253,7 @@ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-4.4.1.tgz", "integrity": "sha512-Gk8NlF062+T9CqNGn6h4tls3k6T1+/nXdOcSZVikNVtlRdYpA7wRJJMoXmuvOnLW844rPjdQ7JgXCYM6PPC/og==", "dev": true, + "license": "ISC", "dependencies": { "glob": "^9.2.0" }, @@ -10251,6 +11272,7 @@ "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1", "type-check": "~0.4.0" @@ -10260,141 +11282,61 @@ } }, "node_modules/libnpmaccess": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-7.0.2.tgz", - "integrity": "sha512-vHBVMw1JFMTgEk15zRsJuSAg7QtGGHpUSEfnbcRL1/gTBag9iEfJbyjpDmdJmwMhvpoLoNBtdAUCdGnaP32hhw==", - "dev": true, - "dependencies": { - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmaccess/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmaccess/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/libnpmaccess/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-8.0.6.tgz", + "integrity": "sha512-uM8DHDEfYG6G5gVivVl+yQd4pH3uRclHC59lzIbSvy7b5FEwR+mU49Zq1jEyRtRFv7+M99mUW9S0wL/4laT4lw==", "dev": true, + "license": "ISC", "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/libnpmpublish": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-7.3.0.tgz", - "integrity": "sha512-fHUxw5VJhZCNSls0KLNEG0mCD2PN1i14gH5elGOgiVnU3VgTcRahagYP2LKI1m0tFCJ+XrAm0zVYyF5RCbXzcg==", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-9.0.9.tgz", + "integrity": "sha512-26zzwoBNAvX9AWOPiqqF6FG4HrSCPsHFkQm7nT+xU1ggAujL/eae81RnCv4CJ2In9q9fh10B88sYSzKCUh/Ghg==", "dev": true, + "license": "ISC", "dependencies": { - "ci-info": "^3.6.1", - "normalize-package-data": "^5.0.0", - "npm-package-arg": "^10.1.0", - "npm-registry-fetch": "^14.0.3", - "proc-log": "^3.0.0", + "ci-info": "^4.0.0", + "normalize-package-data": "^6.0.1", + "npm-package-arg": "^11.0.2", + "npm-registry-fetch": "^17.0.1", + "proc-log": "^4.2.0", "semver": "^7.3.7", - "sigstore": "^1.4.0", - "ssri": "^10.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/libnpmpublish/node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/libnpmpublish/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" + "sigstore": "^2.2.0", + "ssri": "^10.0.6" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/libnpmpublish/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/libnpmpublish/node_modules/ci-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": ">=8" } }, "node_modules/lines-and-columns": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.4.tgz", - "integrity": "sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -10404,6 +11346,7 @@ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.15", "parse-json": "^5.0.0", @@ -10419,6 +11362,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -10428,6 +11372,7 @@ "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6.11.5" } @@ -10437,6 +11382,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^5.0.0" }, @@ -10451,13 +11397,15 @@ "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.defaults": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.difference": { @@ -10465,75 +11413,73 @@ "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.escape": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.flatten": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", - "dev": true - }, - "node_modules/lodash.trim": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.trim/-/lodash.trim-4.5.1.tgz", - "integrity": "sha512-nJAlRl/K+eiOehWKDzoBVrSMhK0K3A3YQsUNXHQa5yIrKBAhsZgSu3KoAFoFT+mEgiyBHddZ0pRk1ITpIp90Wg==", - "dev": true - }, - "node_modules/lodash.trimstart": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/lodash.trimstart/-/lodash.trimstart-4.5.1.tgz", - "integrity": "sha512-b/+D6La8tU76L/61/aN0jULWHkT0EeJCmVstPBn/K9MtD2qBW83AsBNrr63dKuWYwVMO7ucv13QNO/Ek/2RKaQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.truncate": { "version": "4.4.2", "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.union": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", "dev": true, + "license": "MIT", "peer": true }, "node_modules/log-symbols": { @@ -10541,6 +11487,7 @@ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "is-unicode-supported": "^0.1.0" @@ -10553,10 +11500,11 @@ } }, "node_modules/logform": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz", - "integrity": "sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/logform/-/logform-2.7.0.tgz", + "integrity": "sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "1.6.0", "@types/triple-beam": "^1.3.2", @@ -10574,24 +11522,24 @@ "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/lru-cache": { - "version": "10.2.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", - "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "dev": true, - "engines": { - "node": "14 || >=16.14" - } + "license": "ISC" }, "node_modules/make-dir": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -10603,10 +11551,11 @@ } }, "node_modules/make-dir/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -10618,13 +11567,15 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/agent": "^2.0.0", "cacache": "^18.0.0", @@ -10643,32 +11594,12 @@ "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/make-fetch-happen/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==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/make-fetch-happen/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/map-obj": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -10680,13 +11611,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/map-values/-/map-values-1.0.1.tgz", "integrity": "sha512-BbShUnr5OartXJe1GeccAWtfro11hhgNJg6G9/UtWKjVGvV5U4C09cg5nk8JUevhXODaXY+hQ3xxMUKSs62ONQ==", - "dev": true + "dev": true, + "license": "Public Domain" }, "node_modules/matcher": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/matcher/-/matcher-3.0.0.tgz", "integrity": "sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "escape-string-regexp": "^4.0.0" @@ -10700,6 +11633,7 @@ "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", "dev": true, + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -10709,7 +11643,8 @@ "version": "2.0.30", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/memorystream": { "version": "0.3.1", @@ -10725,6 +11660,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -10750,6 +11686,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -10763,6 +11700,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -10775,6 +11713,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -10787,6 +11726,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -10799,6 +11739,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -10814,6 +11755,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -10829,6 +11771,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -10841,6 +11784,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -10856,6 +11800,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -10873,6 +11818,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -10881,13 +11827,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -10900,6 +11848,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -10909,6 +11858,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } @@ -10918,6 +11868,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -10930,6 +11881,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -10938,22 +11890,25 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 8" } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, + "license": "MIT", "dependencies": { "braces": "^3.0.3", "picomatch": "^2.3.1" @@ -10967,6 +11922,7 @@ "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -10979,6 +11935,7 @@ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -10988,6 +11945,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "dev": true, + "license": "MIT", "dependencies": { "mime-db": "1.52.0" }, @@ -11000,6 +11958,7 @@ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -11009,6 +11968,7 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11018,6 +11978,7 @@ "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11027,6 +11988,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.5.tgz", "integrity": "sha512-tUpxzX0VAzJHjLu0xUfFv1gwVp9ba3IOuRAVH2EGuRW8a5emA2FlACLqiT/lDVtS1W+TGNwqz3sWaNyLgDJWuw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -11039,6 +12001,7 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11048,6 +12011,7 @@ "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -11062,6 +12026,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", "dev": true, + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } @@ -11071,6 +12036,7 @@ "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^7.0.3" }, @@ -11083,6 +12049,7 @@ "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.5.tgz", "integrity": "sha512-2N8elDQAtSnFV0Dk7gt15KHsS0Fyz6CbYZ360h0WTYV1Ty46li3rAXVOQj1THMNLdmrD9Vt5pBPtWtVkpwGBqg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^7.0.3", "minipass-sized": "^1.0.3", @@ -11100,6 +12067,7 @@ "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11112,28 +12080,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", - "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", - "dev": true, - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" - } - }, - "node_modules/minipass-json-stream/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11146,6 +12093,7 @@ "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11158,6 +12106,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11170,6 +12119,7 @@ "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -11182,6 +12132,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11194,6 +12145,7 @@ "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", "dev": true, + "license": "MIT", "dependencies": { "minipass": "^3.0.0", "yallist": "^4.0.0" @@ -11207,6 +12159,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -11219,6 +12172,7 @@ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", "dev": true, + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -11231,21 +12185,24 @@ "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "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==", - "dev": true + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" }, "node_modules/multimatch": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimatch": "^3.0.3", "array-differ": "^3.0.0", @@ -11265,6 +12222,7 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -11274,6 +12232,7 @@ "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.2.0.tgz", "integrity": "sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==", "dev": true, + "license": "MIT", "bin": { "mustache": "bin/mustache" } @@ -11282,12 +12241,13 @@ "version": "0.0.8", "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -11295,6 +12255,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11306,13 +12267,15 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", + "version": "0.6.4", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.4.tgz", + "integrity": "sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -11321,26 +12284,53 @@ "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/node-abi": { + "version": "3.71.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.71.0.tgz", + "integrity": "sha512-SZ40vRiy/+wRTf21hxkkEjPJZpARzUMVcJoQse2EF8qkUWbbO2z7vd5oA/H6bVH6SZQ5STGcu0KRDS7biNRfxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } }, "node_modules/node-addon-api": { "version": "1.7.2", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", "dev": true, + "license": "MIT", "optional": true }, + "node_modules/node-api-version": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/node-api-version/-/node-api-version-0.2.0.tgz", + "integrity": "sha512-fthTTsi8CxaBXMaBAD7ST2uylwvsnYxh2PfaScwpMhos6KlSFajXQPcM4ogNE1q2s3Lbz9GCGqeIHC+C6OZnKg==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + } + }, "node_modules/node-fetch": { "version": "2.6.7", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -11357,10 +12347,11 @@ } }, "node_modules/node-gyp": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.1.0.tgz", - "integrity": "sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-10.2.0.tgz", + "integrity": "sha512-sp3FonBAaFe4aYTcFdZUn2NYkbP7xroPGYvQmP4Nl5PxamznItBnNCgjrVTKrEfQynInMsJvZrdmqUnysCJ8rw==", "dev": true, + "license": "MIT", "dependencies": { "env-paths": "^2.2.0", "exponential-backoff": "^3.1.1", @@ -11368,9 +12359,9 @@ "graceful-fs": "^4.2.6", "make-fetch-happen": "^13.0.0", "nopt": "^7.0.0", - "proc-log": "^3.0.0", + "proc-log": "^4.1.0", "semver": "^7.3.5", - "tar": "^6.1.2", + "tar": "^6.2.1", "which": "^4.0.0" }, "bin": { @@ -11380,12 +12371,25 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-hid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.0.tgz", - "integrity": "sha512-YCTD1Ad3PHavx2+hY0QA468pn/gKa44U+fWB1KkRswisWtTROtBzdbmY+Xrm+QZSBCGTkdkgke7Ce606WcGxiQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.2.tgz", + "integrity": "sha512-5uBl8V4mmBWbeqsVfRvbsrlDBBxwzsC5k6gMVF5wOM2ZVyXUHG2zrfotIC6i+QM5ZCsDShaWsiJZOSdzPvsP+g==", "dev": true, "hasInstallScript": true, + "license": "(MIT OR X11)", "dependencies": { "node-addon-api": "^3.2.1", "pkg-prebuilds": "^1.0.0" @@ -11401,25 +12405,29 @@ "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-machine-id": { "version": "1.1.12", "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.14", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", - "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", - "dev": true + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "ISC", "dependencies": { "abbrev": "^2.0.0" }, @@ -11431,13 +12439,13 @@ } }, "node_modules/normalize-package-data": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.1.tgz", - "integrity": "sha512-6rvCfeRW+OEZagAB4lMLSNuTNYZWLVtKccK79VSTf//yTY5VOCgcpH80O+bZK8Neps7pUnd5G+QlMg1yV/2iZQ==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.2.tgz", + "integrity": "sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^7.0.0", - "is-core-module": "^2.8.1", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4" }, @@ -11450,6 +12458,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11459,6 +12468,7 @@ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -11471,6 +12481,7 @@ "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.1.tgz", "integrity": "sha512-+AvaheE/ww1JEwRHOrn4WHNzOxGtVp+adrg2AeZS/7KuxGUYFuBta98wYpfHBbJp6Tg6j1NKSEVHNcfZzJHQwQ==", "dev": true, + "license": "ISC", "dependencies": { "npm-normalize-package-bin": "^3.0.0" }, @@ -11483,6 +12494,7 @@ "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.3.0.tgz", "integrity": "sha512-W29RiK/xtpCGqn6f3ixfRYGk+zRyr+Ew9F2E20BfXxT5/euLdA/Nm7fO7OeTGuAmTs30cpgInyJ0cYe708YTZw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, @@ -11495,157 +12507,17 @@ "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/npm-package-arg": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-8.1.1.tgz", - "integrity": "sha512-CsP95FhWQDwNqiYS+Q0mZ7FAEDytDZAkNxQqea6IaAFJTAY9Lhhqyl0irU/6PMc7BGfUmnsbHcqxJD7XuVM/rg==", - "dev": true, - "dependencies": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/builtins": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", - "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", - "dev": true - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-3.0.8.tgz", - "integrity": "sha512-aXpmwoOhRBrw6X3j0h5RloK4x1OzsxMPyxqIHyNfSe2pypkVTZFpEiRoSipPEPlMrh0HW/XsjkJ5WgnCirpNUw==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", - "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", - "dev": true, - "dependencies": { - "builtins": "^1.0.3" - } - }, - "node_modules/npm-packlist": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-5.1.1.tgz", - "integrity": "sha512-UfpSvQ5YKwctmodvPPkK6Fwk603aoVsf8AEbmVKAEECrfvL8SSe1A2YIwrJ6xmTHAITKPwwZsWo7WwEbNk0kxw==", - "dev": true, - "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^1.1.2", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-packlist/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==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/npm-packlist/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", - "deprecated": "Glob versions prior to v9 are no longer supported", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm-packlist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", - "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", - "dev": true, - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" - } - }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", - "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", - "dev": true - }, - "node_modules/npm-pick-manifest": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.0.1.tgz", - "integrity": "sha512-Udm1f0l2nXb3wxDpKjfohwgdFUSV50UVwzEIpDXVsbDMXVIEF81a/i0UhuQbhrPMMmdiq3+YMFLFIRVLs3hxQw==", - "dev": true, - "dependencies": { - "npm-install-checks": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0", - "npm-package-arg": "^11.0.0", - "semver": "^7.3.5" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { "version": "11.0.2", "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", "dev": true, + "license": "ISC", "dependencies": { "hosted-git-info": "^7.0.0", "proc-log": "^4.0.0", @@ -11653,196 +12525,56 @@ "validate-npm-package-name": "^5.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/npm-pick-manifest/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==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch": { - "version": "14.0.5", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", - "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", - "dev": true, - "dependencies": { - "make-fetch-happen": "^11.0.0", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^10.0.0", - "proc-log": "^3.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "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": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/cacache/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "dev": true, - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/npm-registry-fetch/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/npm-registry-fetch/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", - "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "proc-log": "^3.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "node_modules/npm-packlist": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", + "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", "dev": true, + "license": "ISC", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "ignore-walk": "^6.0.4" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/npm-pick-manifest": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-9.1.0.tgz", + "integrity": "sha512-nkc+3pIIhqHVQr085X9d2JzPzLyjzQS96zbruppqC9aZRm/x8xx6xhI98gHtsfELP2bE+loHq8ZaHFHhe+NauA==", "dev": true, + "license": "ISC", "dependencies": { - "minipass": "^7.0.3" + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^11.0.0", + "semver": "^7.3.5" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, - "node_modules/npm-registry-fetch/node_modules/ssri/node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "node_modules/npm-registry-fetch": { + "version": "17.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-17.1.0.tgz", + "integrity": "sha512-5+bKQRH0J1xG1uZ1zMNvxW0VEyoNWgJpY9UDuluPFLKDfJ9u2JmmjmTJV1srBGQOROfdBMiVvnH2Zvpbm+xkVA==", "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^2.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^13.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^3.0.0", + "minizlib": "^2.1.2", + "npm-package-arg": "^11.0.0", + "proc-log": "^4.0.0" + }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/npm-run-all": { @@ -11850,6 +12582,7 @@ "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "chalk": "^2.4.1", @@ -11875,6 +12608,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -11887,6 +12621,7 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -11901,6 +12636,7 @@ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", "dev": true, + "license": "MIT", "dependencies": { "color-name": "1.1.3" } @@ -11909,13 +12645,15 @@ "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", - "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.6.tgz", + "integrity": "sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==", "dev": true, + "license": "MIT", "dependencies": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -11932,6 +12670,7 @@ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } @@ -11941,6 +12680,7 @@ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11949,13 +12689,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/npm-run-all/node_modules/path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -11965,6 +12707,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -11974,6 +12717,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^1.0.0" }, @@ -11986,6 +12730,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11995,6 +12740,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -12007,6 +12753,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -12019,6 +12766,7 @@ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", "dev": true, + "license": "MIT", "dependencies": { "path-key": "^3.0.0" }, @@ -12032,6 +12780,7 @@ "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", "deprecated": "This package is no longer supported.", "dev": true, + "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", @@ -12047,6 +12796,7 @@ "resolved": "https://registry.npmjs.org/nrf-intel-hex/-/nrf-intel-hex-1.3.0.tgz", "integrity": "sha512-oXwBJxX/0Jc4fe2Jxjv3Mw9/qw9JdToDLvJuozfVx+twpkc2oSUm8W/OODX6W4kmWOaYA11ORpGLfQ8BP7mndw==", "dev": true, + "license": "BSD", "engines": { "node": ">=6.0.0" } @@ -12056,6 +12806,7 @@ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -12064,32 +12815,32 @@ } }, "node_modules/nx": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/nx/-/nx-19.3.0.tgz", - "integrity": "sha512-WILWiROUkZWwuPJ12tP24Z0NULPEhxFN9i55/fECuVXYaFtkg6FvEne9C4d4bRqhZPcbrz6WhHnzE3NhdjH7XQ==", + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-20.1.3.tgz", + "integrity": "sha512-mipsacEpn0gLd/4NSlOgyHW6Ozl++8ZIfuv42RtZEnS3BaGnnW+L2dkt85h4zffq+zBILoudd/VDFzaLY7Yrfw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@nrwl/tao": "19.3.0", + "@napi-rs/wasm-runtime": "0.2.4", "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "3.0.0-rc.46", + "@yarnpkg/parsers": "3.0.2", "@zkochan/js-yaml": "0.0.7", - "axios": "^1.6.0", + "axios": "^1.7.4", "chalk": "^4.1.0", "cli-cursor": "3.1.0", "cli-spinners": "2.6.1", "cliui": "^8.0.1", - "dotenv": "~16.3.1", - "dotenv-expand": "~10.0.0", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", "enquirer": "~2.3.6", "figures": "3.2.0", "flat": "^5.0.2", "front-matter": "^4.0.2", - "fs-extra": "^11.1.0", "ignore": "^5.0.4", "jest-diff": "^29.4.1", "jsonc-parser": "3.2.0", - "lines-and-columns": "~2.0.3", + "lines-and-columns": "2.0.3", "minimatch": "9.0.3", "node-machine-id": "1.1.12", "npm-run-path": "^4.0.1", @@ -12097,7 +12848,6 @@ "ora": "5.3.0", "semver": "^7.5.3", "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", "tar-stream": "~2.2.0", "tmp": "~0.2.1", "tsconfig-paths": "^4.1.2", @@ -12110,16 +12860,16 @@ "nx-cloud": "bin/nx-cloud.js" }, "optionalDependencies": { - "@nx/nx-darwin-arm64": "19.3.0", - "@nx/nx-darwin-x64": "19.3.0", - "@nx/nx-freebsd-x64": "19.3.0", - "@nx/nx-linux-arm-gnueabihf": "19.3.0", - "@nx/nx-linux-arm64-gnu": "19.3.0", - "@nx/nx-linux-arm64-musl": "19.3.0", - "@nx/nx-linux-x64-gnu": "19.3.0", - "@nx/nx-linux-x64-musl": "19.3.0", - "@nx/nx-win32-arm64-msvc": "19.3.0", - "@nx/nx-win32-x64-msvc": "19.3.0" + "@nx/nx-darwin-arm64": "20.1.3", + "@nx/nx-darwin-x64": "20.1.3", + "@nx/nx-freebsd-x64": "20.1.3", + "@nx/nx-linux-arm-gnueabihf": "20.1.3", + "@nx/nx-linux-arm64-gnu": "20.1.3", + "@nx/nx-linux-arm64-musl": "20.1.3", + "@nx/nx-linux-x64-gnu": "20.1.3", + "@nx/nx-linux-x64-musl": "20.1.3", + "@nx/nx-win32-arm64-msvc": "20.1.3", + "@nx/nx-win32-x64-msvc": "20.1.3" }, "peerDependencies": { "@swc-node/register": "^1.8.0", @@ -12139,6 +12889,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -12148,6 +12899,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -12163,6 +12915,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "chalk": "^4.1.0", @@ -12181,10 +12934,11 @@ } }, "node_modules/nx/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -12197,6 +12951,7 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.0.3", "end-of-stream": "^1.4.1", @@ -12213,6 +12968,7 @@ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12221,13 +12977,18 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/object-filter/-/object-filter-1.0.2.tgz", "integrity": "sha512-NahvP2vZcy1ZiiYah30CEPw0FpDcSkSePJBMpzl5EQgCmISijiGuJm3SPYp7U+Lf2TljyaIw3E5EgkEx/TNEVA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12237,6 +12998,7 @@ "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } @@ -12246,6 +13008,7 @@ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.5", "define-properties": "^1.2.1", @@ -12264,6 +13027,7 @@ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", "dev": true, + "license": "ISC", "dependencies": { "wrappy": "1" } @@ -12273,6 +13037,7 @@ "resolved": "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz", "integrity": "sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==", "dev": true, + "license": "MIT", "dependencies": { "fn.name": "1.x.x" } @@ -12282,6 +13047,7 @@ "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, + "license": "MIT", "dependencies": { "mimic-fn": "^2.1.0" }, @@ -12297,6 +13063,7 @@ "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", "dependencies": { "define-lazy-prop": "^2.0.0", "is-docker": "^2.1.1", @@ -12314,6 +13081,7 @@ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, + "license": "MIT", "dependencies": { "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", @@ -12331,6 +13099,7 @@ "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", @@ -12354,6 +13123,7 @@ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12363,6 +13133,7 @@ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12372,6 +13143,7 @@ "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -12381,6 +13153,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, + "license": "MIT", "dependencies": { "yocto-queue": "^0.1.0" }, @@ -12396,6 +13169,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^3.0.2" }, @@ -12411,6 +13185,7 @@ "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, + "license": "MIT", "dependencies": { "aggregate-error": "^3.0.0" }, @@ -12426,6 +13201,7 @@ "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12435,6 +13211,7 @@ "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -12447,6 +13224,7 @@ "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, + "license": "MIT", "dependencies": { "eventemitter3": "^4.0.4", "p-timeout": "^3.2.0" @@ -12463,6 +13241,7 @@ "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12472,6 +13251,7 @@ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, + "license": "MIT", "dependencies": { "p-finally": "^1.0.0" }, @@ -12484,6 +13264,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -12493,6 +13274,7 @@ "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, + "license": "MIT", "dependencies": { "p-reduce": "^2.0.0" }, @@ -12504,261 +13286,39 @@ } }, "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==", - "dev": true + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" }, "node_modules/pacote": { - "version": "17.0.7", - "resolved": "https://registry.npmjs.org/pacote/-/pacote-17.0.7.tgz", - "integrity": "sha512-sgvnoUMlkv9xHwDUKjKQFXVyUi8dtJGKp3vg6sYy+TxbDic5RjZCHF3ygv0EJgNRZ2GfRONjlKPUfokJ9lDpwQ==", + "version": "18.0.6", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-18.0.6.tgz", + "integrity": "sha512-+eK3G27SMwsB8kLIuj4h1FUhHtwiEUo21Tw8wNjmvdlpOEr613edv+8FUsTj/4F/VN5ywGE19X18N7CC2EJk6A==", "dev": true, + "license": "ISC", "dependencies": { "@npmcli/git": "^5.0.0", "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/package-json": "^5.1.0", "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.0", + "@npmcli/run-script": "^8.0.0", "cacache": "^18.0.0", "fs-minipass": "^3.0.0", "minipass": "^7.0.2", "npm-package-arg": "^11.0.0", - "npm-packlist": "^8.0.0", - "npm-pick-manifest": "^9.0.0", - "npm-registry-fetch": "^16.0.0", - "proc-log": "^4.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^7.0.0", - "read-package-json-fast": "^3.0.0", - "sigstore": "^2.2.0", - "ssri": "^10.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@sigstore/bundle": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-2.3.2.tgz", - "integrity": "sha512-wueKWDk70QixNLB363yHc2D2ItTgYiMTdPwK8D9dKQMR3ZQ0c35IxP5xnwQ8cNLoCgCRcHf14kE+CLIvNX1zmA==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@sigstore/protobuf-specs": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.3.2.tgz", - "integrity": "sha512-c6B0ehIWxMI8wiS/bj6rHMPqeFvngFV7cDU/MY+B16P9Z3Mp9k8L93eYZ7BYzSickzuqAQqAq0V956b3Ju6mLw==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@sigstore/sign": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-2.3.2.tgz", - "integrity": "sha512-5Vz5dPVuunIIvC5vBb0APwo7qKA4G9yM48kPWJT+OEERs40md5GoUR1yedwpekWZ4m0Hhw44m6zU+ObsON+iDA==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "make-fetch-happen": "^13.0.1", - "proc-log": "^4.2.0", - "promise-retry": "^2.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@sigstore/tuf": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-2.3.4.tgz", - "integrity": "sha512-44vtsveTPUpqhm9NCrbU8CWLe3Vck2HO1PNLw7RIajbB7xhtn5RBPm1VNSCMwqGYHhDsBJG8gDF0q4lgydsJvw==", - "dev": true, - "dependencies": { - "@sigstore/protobuf-specs": "^0.3.2", - "tuf-js": "^2.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@tufjs/canonical-json": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", - "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", - "dev": true, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/@tufjs/models": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-2.0.1.tgz", - "integrity": "sha512-92F7/SFyufn4DXsha9+QfKnN03JGqtMFMXgSHbZOo8JG59WkTni7UzAouNQDf7AuP9OAMxVOPQcqG3sB7w+kkg==", - "dev": true, - "dependencies": { - "@tufjs/canonical-json": "2.0.0", - "minimatch": "^9.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/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==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/pacote/node_modules/ignore-walk": { - "version": "6.0.5", - "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.5.tgz", - "integrity": "sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==", - "dev": true, - "dependencies": { - "minimatch": "^9.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-11.0.2.tgz", - "integrity": "sha512-IGN0IAwmhDJwy13Wc8k+4PEbTPhpJnMtfR53ZbOyjkvmEcLS4nCwp6mvMWjS5sUjeiW3mpx6cHmuhKEu9XmcQw==", - "dev": true, - "dependencies": { - "hosted-git-info": "^7.0.0", - "proc-log": "^4.0.0", - "semver": "^7.3.5", - "validate-npm-package-name": "^5.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/npm-packlist": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-8.0.2.tgz", - "integrity": "sha512-shYrPFIS/JLP4oQmAwDyk5HcyysKW8/JLTEA32S0Z5TzvpaeeX2yMFfoK1fjEBnCBvVyIB/Jj/GBFdm0wsgzbA==", - "dev": true, - "dependencies": { - "ignore-walk": "^6.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "16.2.1", - "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-16.2.1.tgz", - "integrity": "sha512-8l+7jxhim55S85fjiDGJ1rZXBWGtRLi1OSb4Z3BPLObPuIaeKRlPRiYMSHU4/81ck3t71Z+UwDDl47gcpmfQQA==", - "dev": true, - "dependencies": { - "@npmcli/redact": "^1.1.0", - "make-fetch-happen": "^13.0.0", - "minipass": "^7.0.2", - "minipass-fetch": "^3.0.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^11.0.0", - "proc-log": "^4.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/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==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/read-package-json": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-7.0.1.tgz", - "integrity": "sha512-8PcDiZ8DXUjLf687Ol4BR8Bpm2umR7vhoZOzNRt+uxD9GpBh/K+CAAALVIiYFknmvlmyg7hM7BSNUXPaCCqd0Q==", - "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", - "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^6.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/sigstore": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", - "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^2.3.2", - "@sigstore/core": "^1.0.0", - "@sigstore/protobuf-specs": "^0.3.2", - "@sigstore/sign": "^2.3.2", - "@sigstore/tuf": "^2.3.4", - "@sigstore/verify": "^1.2.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" + "npm-packlist": "^8.0.0", + "npm-pick-manifest": "^9.0.0", + "npm-registry-fetch": "^17.0.0", + "proc-log": "^4.0.0", + "promise-retry": "^2.0.1", + "sigstore": "^2.2.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/pacote/node_modules/tuf-js": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", - "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", - "dev": true, - "dependencies": { - "@tufjs/models": "2.0.1", - "debug": "^4.3.4", - "make-fetch-happen": "^13.0.1" + "bin": { + "pacote": "bin/index.js" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -12769,6 +13329,7 @@ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -12781,6 +13342,7 @@ "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-3.0.1.tgz", "integrity": "sha512-01TvEktc68vwbJOtWZluyWeVGWjP+bZwXtPDMQVbBKzbJ/vZBif0L69KH1+cHv1SZ6e0FKLvjyHe8mqsIqYOmw==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^3.0.0", "just-diff": "^6.0.0", @@ -12795,6 +13357,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -12812,19 +13375,22 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parse-json/node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/parse-path": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.0.0.tgz", "integrity": "sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==", "dev": true, + "license": "MIT", "dependencies": { "protocols": "^2.0.0" } @@ -12834,6 +13400,7 @@ "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, + "license": "MIT", "dependencies": { "parse-path": "^7.0.0" } @@ -12843,6 +13410,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12852,6 +13420,7 @@ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12861,6 +13430,7 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12869,13 +13439,15 @@ "version": "1.0.7", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^10.2.0", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" @@ -12892,27 +13464,46 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/pe-library": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pe-library/-/pe-library-0.4.1.tgz", + "integrity": "sha512-eRWB5LBz7PpDu4PUlwT0PhnQfTQJlDDdPa35urV4Osrm0t0AqQFGn+UIkU3klZvwJ8KPO3VbBFsXquA6p6kqZw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/picocolors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", - "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/picomatch": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -12925,6 +13516,7 @@ "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", "dev": true, + "license": "MIT", "bin": { "pidtree": "bin/pidtree.js" }, @@ -12937,6 +13529,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -12949,6 +13542,7 @@ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -12958,6 +13552,7 @@ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", "dev": true, + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -12970,6 +13565,7 @@ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.0.0" }, @@ -12982,6 +13578,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -12995,6 +13592,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^4.1.0" }, @@ -13007,6 +13605,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^2.0.0" }, @@ -13022,6 +13621,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^2.2.0" }, @@ -13034,6 +13634,7 @@ "resolved": "https://registry.npmjs.org/pkg-prebuilds/-/pkg-prebuilds-1.0.0.tgz", "integrity": "sha512-D9wlkXZCmjxj2kBHTw3fGSyjoahr33breGBoJcoezpi7ouYS59DJVOHMZ+dgqacSrZiJo4qtkXxLQTE+BqXJmQ==", "dev": true, + "license": "MIT", "dependencies": { "yargs": "^17.7.2" }, @@ -13050,6 +13651,7 @@ "resolved": "https://registry.npmjs.org/plist/-/plist-3.1.0.tgz", "integrity": "sha512-uysumyrvkUX0rX/dEVqt8gC3sTBzd4zoWfLeS29nb53imdaXVvLINYXTI2GNqzaMuvacNx4uJQ8+b3zXR0pkgQ==", "dev": true, + "license": "MIT", "dependencies": { "@xmldom/xmldom": "^0.8.8", "base64-js": "^1.5.1", @@ -13064,14 +13666,15 @@ "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/postcss": { - "version": "8.4.38", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", - "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", "dev": true, "funding": [ { @@ -13087,26 +13690,29 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.2.0" + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-resolve-nested-selector": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", - "integrity": "sha512-HvExULSwLqHLgUy1rl3ANIqCsvMS0WHss2UOsXhXnQaZ9VCc2oBvIpXrl00IUFT5ZDITME0o6oiXeiHr2SAIfw==", - "dev": true + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz", + "integrity": "sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==", + "dev": true, + "license": "MIT" }, "node_modules/postcss-safe-parser": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -13137,6 +13743,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -13145,10 +13752,11 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", - "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -13161,13 +13769,15 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8.0" } @@ -13177,6 +13787,7 @@ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.3.tgz", "integrity": "sha512-cvpcHTc42lcsvOOAzd3XuNWTcvk1Jmnzqeu+WsOuiPmxUJTnkbAcFNsRKvEpBEUFVUgy/GTZLulZDcDEi+CIlA==", "dev": true, + "license": "MIT", "dependencies": { "@jest/schemas": "^29.4.3", "ansi-styles": "^5.0.0", @@ -13191,6 +13802,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13205,10 +13817,11 @@ "dev": true }, "node_modules/proc-log": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", - "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "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==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -13217,13 +13830,25 @@ "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==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/proggy": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-2.0.0.tgz", + "integrity": "sha512-69agxLtnI8xBs9gUGqEnK26UfiexpHy+KUpBQWabiytQjnn5wFY8rklAi7GRfABIuPNnQ/ik48+LGLkYYJcy4A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } }, "node_modules/progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4.0" } @@ -13233,15 +13858,17 @@ "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, + "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/promise-call-limit": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-1.0.2.tgz", - "integrity": "sha512-1vTUnfI2hzui8AEIixbdAJlFY4LFDXqQswy/2eOlThAscXCY4It8FdVuI0fMJGAB2aWGbdQf/gv0skKYXmdrHA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", "dev": true, + "license": "ISC", "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -13250,13 +13877,15 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "err-code": "^2.0.2", "retry": "^0.12.0" @@ -13270,6 +13899,7 @@ "resolved": "https://registry.npmjs.org/promzard/-/promzard-1.0.2.tgz", "integrity": "sha512-2FPputGL+mP3jJ3UZg/Dl9YOkovB7DX0oOr+ck5QbZ5MtORtds8k/BZdn+02peDLI8/YWbmzx34k5fA+fHvCVQ==", "dev": true, + "license": "ISC", "dependencies": { "read": "^3.0.1" }, @@ -13277,44 +13907,26 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/promzard/node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/promzard/node_modules/read": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", - "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", - "dev": true, - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/protocols": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.1.tgz", "integrity": "sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -13325,6 +13937,7 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -13347,13 +13960,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -13366,6 +13981,7 @@ "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -13374,73 +13990,41 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/read": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/read/-/read-2.1.0.tgz", - "integrity": "sha512-bvxi1QLJHcaywCAEsAk4DG3nVoqiY2Csps3qzWalhj5hFqRn1d/OixkFXtLO1PrgHUcAP0FNaSY/5GYNfENFFQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/read/-/read-3.0.1.tgz", + "integrity": "sha512-SLBrDU/Srs/9EoWhU5GdbAoxG1GzpQHo/6qiGItaoLJ1thmYpcNIM1qISEUvyHBzfGlWIyd6p2DNi1oV1VmAuw==", "dev": true, + "license": "ISC", "dependencies": { - "mute-stream": "~1.0.0" + "mute-stream": "^1.0.0" }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-cmd-shim": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", - "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", - "dev": true, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-config-file": { - "version": "6.3.2", - "resolved": "https://registry.npmjs.org/read-config-file/-/read-config-file-6.3.2.tgz", - "integrity": "sha512-M80lpCjnE6Wt6zb98DoW8WHR09nzMSpu8XHtPkiTHrJ5Az9CybfeQhTJ8D7saeBHpGhLPIVyA8lcL6ZmdKwY6Q==", + "node_modules/read-binary-file-arch": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/read-binary-file-arch/-/read-binary-file-arch-1.0.6.tgz", + "integrity": "sha512-BNg9EN3DD3GsDXX7Aa8O4p92sryjkmzYYgmgTAc6CA4uGLEDzFfxOxugu21akOxpcXHiEgsYkC6nPsQvLLLmEg==", "dev": true, + "license": "MIT", "dependencies": { - "config-file-ts": "^0.2.4", - "dotenv": "^9.0.2", - "dotenv-expand": "^5.1.0", - "js-yaml": "^4.1.0", - "json5": "^2.2.0", - "lazy-val": "^1.0.4" + "debug": "^4.3.4" }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/read-config-file/node_modules/dotenv": { - "version": "9.0.2", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-9.0.2.tgz", - "integrity": "sha512-I9OvvrHp4pIARv4+x9iuewrWycX6CcZtoAu1XrzPxc5UygMJXJZYmBsynku8IkrJwgypE5DGNjDPmPRhDCptUg==", - "dev": true, - "engines": { - "node": ">=10" + "bin": { + "read-binary-file-arch": "cli.js" } }, - "node_modules/read-config-file/node_modules/dotenv-expand": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-5.1.0.tgz", - "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", - "dev": true - }, - "node_modules/read-package-json": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", - "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", - "deprecated": "This package is no longer supported. Please use @npmcli/package-json instead.", + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, - "dependencies": { - "glob": "^10.2.2", - "json-parse-even-better-errors": "^3.0.0", - "normalize-package-data": "^5.0.0", - "npm-normalize-package-bin": "^3.0.0" - }, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -13450,6 +14034,7 @@ "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", "dev": true, + "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^3.0.0", "npm-normalize-package-bin": "^3.0.0" @@ -13458,47 +14043,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", - "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", - "dev": true, - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/read-package-json/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/read-package-json/node_modules/normalize-package-data": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", - "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", - "dev": true, - "dependencies": { - "hosted-git-info": "^6.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/read-pkg": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", "dev": true, + "license": "MIT", "dependencies": { "load-json-file": "^4.0.0", "normalize-package-data": "^2.3.2", @@ -13513,6 +14063,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "read-pkg": "^3.0.0" @@ -13526,6 +14077,7 @@ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -13538,6 +14090,7 @@ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -13551,6 +14104,7 @@ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -13563,6 +14117,7 @@ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -13575,6 +14130,7 @@ "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13584,6 +14140,7 @@ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13592,13 +14149,15 @@ "version": "2.8.9", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/read-pkg/node_modules/load-json-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -13614,6 +14173,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -13626,6 +14186,7 @@ "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -13639,6 +14200,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -13651,6 +14213,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13660,6 +14223,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -13669,6 +14233,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -13678,6 +14243,7 @@ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -13687,6 +14253,7 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -13701,6 +14268,7 @@ "resolved": "https://registry.npmjs.org/readdir-glob/-/readdir-glob-1.1.3.tgz", "integrity": "sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==", "dev": true, + "license": "Apache-2.0", "peer": true, "dependencies": { "minimatch": "^5.1.0" @@ -13711,6 +14279,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "balanced-match": "^1.0.0" @@ -13721,6 +14290,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^2.0.1" @@ -13734,6 +14304,7 @@ "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.8.0.tgz", "integrity": "sha512-/vxpCXddiX8NGfGO/mTafwjq4aFa/71pvamip0++IQk3zG8cbCj0fifNPrjjF1XMXUne91jL9OoxmdykoEtifQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve": "^1.20.0" }, @@ -13746,6 +14317,7 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -13754,16 +14326,39 @@ "node": ">=8" } }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -13776,13 +14371,15 @@ "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==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -13792,6 +14389,7 @@ "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -13801,15 +14399,35 @@ "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, + "node_modules/resedit": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/resedit/-/resedit-1.7.2.tgz", + "integrity": "sha512-vHjcY2MlAITJhC0eRD/Vv8Vlgmu9Sd3LX9zZvtGzU5ZImdTN3+d6e/4mnTyV8vEbyf1sgNIrWxhWlrys52OkEA==", + "dev": true, + "license": "MIT", + "dependencies": { + "pe-library": "^0.4.1" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jet2jet" + } + }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.13.0", "path-parse": "^1.0.7", @@ -13826,13 +14444,15 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/resolve-cwd": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -13845,6 +14465,7 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -13854,6 +14475,7 @@ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" } @@ -13863,6 +14485,7 @@ "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "dev": true, + "license": "MIT", "dependencies": { "lowercase-keys": "^2.0.0" }, @@ -13875,46 +14498,144 @@ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "license": "MIT", + "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==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/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==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/jackspeak": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "@isaacs/cliui": "^8.0.2" }, "engines": { - "node": ">=8" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "node_modules/rimraf/node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", "dev": true, + "license": "ISC", "engines": { - "node": ">= 4" + "node": "20 || >=22" } }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "node_modules/rimraf/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/rimraf": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", - "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", + "node_modules/rimraf/node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", "dev": true, + "license": "BlueOak-1.0.0", "dependencies": { - "glob": "^10.3.7" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=14" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -13925,6 +14646,7 @@ "resolved": "https://registry.npmjs.org/roarr/-/roarr-2.15.4.tgz", "integrity": "sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A==", "dev": true, + "license": "BSD-3-Clause", "optional": true, "dependencies": { "boolean": "^3.0.1", @@ -13943,6 +14665,7 @@ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -13966,6 +14689,7 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "queue-microtask": "^1.2.2" } @@ -13975,6 +14699,7 @@ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "tslib": "^2.1.0" } @@ -13984,6 +14709,7 @@ "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "get-intrinsic": "^1.2.4", @@ -14015,13 +14741,15 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex-test": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.6", "es-errors": "^1.3.0", @@ -14035,10 +14763,11 @@ } }, "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" } @@ -14047,13 +14776,15 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/sanitize-filename": { "version": "1.6.3", "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.3.tgz", "integrity": "sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg==", "dev": true, + "license": "WTFPL OR ISC", "dependencies": { "truncate-utf8-bytes": "^1.0.0" } @@ -14062,13 +14793,15 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/schema-utils": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.2.0.tgz", "integrity": "sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", "ajv": "^8.9.0", @@ -14084,15 +14817,16 @@ } }, "node_modules/schema-utils/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -14104,6 +14838,7 @@ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -14115,13 +14850,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", "dev": true, + "license": "MIT", "dependencies": { "commander": "^2.8.1" }, @@ -14134,13 +14871,15 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/semver": { "version": "7.5.2", "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.2.tgz", "integrity": "sha512-SoftuTROv/cRjCze/scjGyiDtcUyxw1rgYQSZY7XTmtR5hX+dm76iDbTH8TkLPHCQmlbQVSSbNZCPM2hb0knnQ==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -14156,6 +14895,7 @@ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz", "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", "dev": true, + "license": "MIT", "optional": true }, "node_modules/semver/node_modules/lru-cache": { @@ -14163,6 +14903,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -14175,6 +14916,7 @@ "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "type-fest": "^0.13.1" @@ -14191,6 +14933,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "optional": true, "engines": { "node": ">=10" @@ -14204,21 +14947,78 @@ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, + "node_modules/serialport": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-12.0.0.tgz", + "integrity": "sha512-AmH3D9hHPFmnF/oq/rvigfiAouAKyK/TjnrkwZRYSFZxNggJxwvbAbfYrLeuvq7ktUdhuHdVdSjj852Z55R+uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "12.0.1", + "@serialport/parser-byte-length": "12.0.0", + "@serialport/parser-cctalk": "12.0.0", + "@serialport/parser-delimiter": "12.0.0", + "@serialport/parser-inter-byte-timeout": "12.0.0", + "@serialport/parser-packet-length": "12.0.0", + "@serialport/parser-readline": "12.0.0", + "@serialport/parser-ready": "12.0.0", + "@serialport/parser-regex": "12.0.0", + "@serialport/parser-slip-encoder": "12.0.0", + "@serialport/parser-spacepacket": "12.0.0", + "@serialport/stream": "12.0.0", + "debug": "4.3.4" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/serialport/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/serialport/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==", + "dev": true, + "license": "MIT" + }, "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==", - "dev": true + "dev": true, + "license": "ISC" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -14236,6 +15036,7 @@ "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -14251,6 +15052,7 @@ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, + "license": "MIT", "dependencies": { "kind-of": "^6.0.2" }, @@ -14263,6 +15065,7 @@ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", "dev": true, + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -14275,6 +15078,7 @@ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14284,6 +15088,7 @@ "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -14293,6 +15098,7 @@ "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -14310,142 +15116,25 @@ "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true - }, - "node_modules/sigstore": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.9.0.tgz", - "integrity": "sha512-0Zjz0oe37d08VeOtBIuB6cRriqXse2e8w+7yIy2XSXjshRKxbc2KkhXjL229jXSxEm7UbcjS76wcJDGQddVI9A==", - "dev": true, - "dependencies": { - "@sigstore/bundle": "^1.1.0", - "@sigstore/protobuf-specs": "^0.2.0", - "@sigstore/sign": "^1.0.0", - "@sigstore/tuf": "^1.0.3", - "make-fetch-happen": "^11.0.1" - }, - "bin": { - "sigstore": "bin/sigstore.js" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "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": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/sigstore/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/sigstore/node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/sigstore/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/sigstore/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/sigstore/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } + "license": "ISC" }, - "node_modules/sigstore/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", + "node_modules/sigstore": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-2.3.1.tgz", + "integrity": "sha512-8G+/XDU8wNsJOQS5ysDVO0Etg9/2uA5gR9l4ZwijjlwxBcrU6RPfwi2+jJmbP+Ap1Hlp/nVAaEO4Fj22/SL2gQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "minipass": "^7.0.3" + "@sigstore/bundle": "^2.3.2", + "@sigstore/core": "^1.0.0", + "@sigstore/protobuf-specs": "^0.3.2", + "@sigstore/sign": "^2.3.2", + "@sigstore/tuf": "^2.3.4", + "@sigstore/verify": "^1.2.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/simple-swizzle": { @@ -14453,6 +15142,7 @@ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.3.1" } @@ -14461,13 +15151,15 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/simple-update-notifier": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", "integrity": "sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.3" }, @@ -14476,10 +15168,11 @@ } }, "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", - "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -14492,6 +15185,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14501,6 +15195,7 @@ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "ansi-styles": "^4.0.0", @@ -14516,6 +15211,7 @@ "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6.0.0", "npm": ">= 3.0.0" @@ -14526,6 +15222,7 @@ "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz", "integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==", "dev": true, + "license": "MIT", "dependencies": { "ip-address": "^9.0.5", "smart-buffer": "^4.2.0" @@ -14536,26 +15233,15 @@ } }, "node_modules/socks-proxy-agent": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.3.tgz", - "integrity": "sha512-VNegTZKhuGq5vSD6XNKlbqWhyt/40CgoEw8XxD6dhnm8Jq9IEa3nIa4HwnM8XOqU0CdB0BwWVXusqiFXfHB3+A==", + "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==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "^7.1.1", "debug": "^4.3.4", - "socks": "^2.7.1" - }, - "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==", - "dev": true, - "dependencies": { - "debug": "^4.3.4" + "socks": "^2.8.3" }, "engines": { "node": ">= 14" @@ -14566,6 +15252,7 @@ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, + "license": "MIT", "dependencies": { "is-plain-obj": "^1.0.0" }, @@ -14578,15 +15265,17 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/source-map-js": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", - "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -14596,6 +15285,7 @@ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -14606,6 +15296,7 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -14615,29 +15306,33 @@ "version": "2.5.0", "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" } }, "node_modules/spdx-license-ids": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", - "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", - "dev": true + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -14650,6 +15345,7 @@ "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } @@ -14658,30 +15354,20 @@ "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==", - "dev": true - }, - "node_modules/ssri": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", - "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", "dev": true, - "dependencies": { - "minipass": "^3.1.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "license": "BSD-3-Clause" }, - "node_modules/ssri/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "node_modules/ssri": { + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", + "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", "dev": true, + "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">=8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/stable": { @@ -14689,13 +15375,15 @@ "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stack-trace": { "version": "0.0.10", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "integrity": "sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -14705,6 +15393,7 @@ "resolved": "https://registry.npmjs.org/stat-mode/-/stat-mode-1.0.0.tgz", "integrity": "sha512-jH9EhtKIjuXZ2cWxmXS8ZP80XyC3iasQxMDV8jzhNJpfDb7VbQLVW4Wvsxz9QZvzV+G4YoSfBUVKDOyxLzi/sg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } @@ -14714,6 +15403,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.2.0" } @@ -14723,6 +15413,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14738,6 +15429,7 @@ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14752,6 +15444,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.6.tgz", "integrity": "sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14770,6 +15463,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14788,6 +15482,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14802,6 +15497,7 @@ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -14819,6 +15515,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14832,6 +15529,7 @@ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -14844,6 +15542,7 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz", "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -14853,6 +15552,7 @@ "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", "dev": true, + "license": "MIT", "dependencies": { "is-natural-number": "^4.0.1" } @@ -14862,6 +15562,7 @@ "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -14871,6 +15572,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -14883,6 +15585,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -14895,6 +15598,7 @@ "resolved": "https://registry.npmjs.org/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "duplexer": "^0.1.1", "minimist": "^1.2.0", @@ -14911,13 +15615,15 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", "integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/stylelint": { "version": "15.11.0", "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", "dev": true, + "license": "MIT", "dependencies": { "@csstools/css-parser-algorithms": "^2.3.1", "@csstools/css-tokenizer": "^2.2.0", @@ -14975,13 +15681,15 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/stylelint/node_modules/camelcase": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -14994,17 +15702,45 @@ "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/stylelint/node_modules/cosmiconfig": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", + "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "dev": true, + "license": "MIT", "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/stylelint/node_modules/decamelize": { @@ -15012,6 +15748,7 @@ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -15024,6 +15761,7 @@ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", "dev": true, + "license": "MIT", "dependencies": { "flat-cache": "^3.2.0" }, @@ -15036,6 +15774,7 @@ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -15048,6 +15787,7 @@ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -15060,6 +15800,7 @@ "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -15072,6 +15813,7 @@ "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.2", "camelcase-keys": "^7.0.0", @@ -15098,6 +15840,7 @@ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -15113,6 +15856,7 @@ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^3.0.2", @@ -15131,6 +15875,7 @@ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^5.0.0", "read-pkg": "^6.0.0", @@ -15148,6 +15893,7 @@ "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^5.0.0", "strip-indent": "^4.0.0" @@ -15164,6 +15910,7 @@ "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.1" }, @@ -15179,6 +15926,7 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -15191,6 +15939,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -15203,6 +15952,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -15212,6 +15962,7 @@ "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-3.0.1.tgz", "integrity": "sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "debug": "^4.1.0" }, @@ -15224,6 +15975,7 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -15232,16 +15984,20 @@ } }, "node_modules/supports-hyperlinks": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.0.0.tgz", - "integrity": "sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-3.1.0.tgz", + "integrity": "sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "engines": { "node": ">=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/supports-preserve-symlinks-flag": { @@ -15249,6 +16005,7 @@ "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -15257,14 +16014,15 @@ } }, "node_modules/svg-sprite": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/svg-sprite/-/svg-sprite-2.0.2.tgz", - "integrity": "sha512-vLFP/t4YCu62mvOzUt6g9bqpKrPjYsLuzegw5WsIsv3DkulAI/fRC+k7Atk//rIkUDbvKo572nJ6o4YT+FbKig==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/svg-sprite/-/svg-sprite-2.0.4.tgz", + "integrity": "sha512-kjDoATgr4k6tdtfQczpkbuFW6RE7tPUPe/rbRd1n2NV92kdwaXEZMIxJqAZfMGOMfU/Kp1u89SUYsfHCbAvVHg==", "dev": true, + "license": "MIT", "dependencies": { - "@resvg/resvg-js": "^2.1.0", - "@xmldom/xmldom": "^0.8.3", - "async": "^3.2.4", + "@resvg/resvg-js": "^2.6.0", + "@xmldom/xmldom": "^0.8.10", + "async": "^3.2.5", "css-selector-parser": "^1.4.1", "csso": "^4.2.0", "cssom": "^0.5.0", @@ -15272,15 +16030,13 @@ "js-yaml": "^4.1.0", "lodash.escape": "^4.0.1", "lodash.merge": "^4.6.2", - "lodash.trim": "^4.5.1", - "lodash.trimstart": "^4.5.1", "mustache": "^4.2.0", "prettysize": "^2.0.0", "svgo": "^2.8.0", "vinyl": "^2.2.1", - "winston": "^3.8.2", - "xpath": "^0.0.32", - "yargs": "^17.5.1" + "winston": "^3.11.0", + "xpath": "^0.0.34", + "yargs": "^17.7.2" }, "bin": { "svg-sprite": "bin/svg-sprite.js" @@ -15295,6 +16051,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -15315,6 +16072,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -15333,6 +16091,7 @@ "resolved": "https://registry.npmjs.org/svgo/-/svgo-2.8.0.tgz", "integrity": "sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==", "dev": true, + "license": "MIT", "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", @@ -15354,6 +16113,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } @@ -15363,6 +16123,7 @@ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, + "license": "MIT", "dependencies": { "mdn-data": "2.0.14", "source-map": "^0.6.1" @@ -15375,13 +16136,15 @@ "version": "2.0.14", "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/table": { "version": "6.8.2", "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "ajv": "^8.0.1", "lodash.truncate": "^4.4.2", @@ -15394,15 +16157,16 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.16.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.16.0.tgz", - "integrity": "sha512-F0twR8U1ZU67JIEtekUcLkXkoO5mMMmgGD8sK/xUFzJ805jxHQl92hImFAqqXMyMYjSPOyUPAwHYhB72g5sTXw==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.4.1" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -15413,13 +16177,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/table/node_modules/slice-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "astral-regex": "^2.0.0", @@ -15437,6 +16203,7 @@ "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -15446,6 +16213,7 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-6.2.1.tgz", "integrity": "sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==", "dev": true, + "license": "ISC", "dependencies": { "chownr": "^2.0.0", "fs-minipass": "^2.0.0", @@ -15463,6 +16231,7 @@ "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", "dev": true, + "license": "MIT", "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -15481,6 +16250,7 @@ "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" @@ -15490,13 +16260,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tar-stream/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==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15511,13 +16283,15 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/tar-stream/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==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } @@ -15527,6 +16301,7 @@ "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", "dev": true, + "license": "ISC", "dependencies": { "minipass": "^3.0.0" }, @@ -15539,6 +16314,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, + "license": "ISC", "dependencies": { "yallist": "^4.0.0" }, @@ -15551,6 +16327,7 @@ "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", "dev": true, + "license": "ISC", "engines": { "node": ">=8" } @@ -15560,6 +16337,7 @@ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -15569,6 +16347,7 @@ "resolved": "https://registry.npmjs.org/temp-file/-/temp-file-3.4.0.tgz", "integrity": "sha512-C5tjlC/HCtVUOi3KWVokd4vHVViOmGjtLwIh4MuzPo/nMYTV/p1urt3RnMz2IWXDdKEGJH3k5+KPxtqRsUYGtg==", "dev": true, + "license": "MIT", "dependencies": { "async-exit-hook": "^2.0.1", "fs-extra": "^10.0.0" @@ -15579,6 +16358,7 @@ "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -15593,6 +16373,7 @@ "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.0.tgz", "integrity": "sha512-eLXG5B1G0mRPHmgH2WydPl5v4jH35qEn3y/rA/aahKhIa91Pn119SsU7n7v/433gtT9ONzC8ISvNHIh2JSTm0w==", "dev": true, + "license": "MIT", "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", @@ -15612,6 +16393,7 @@ "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15621,6 +16403,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -15629,10 +16412,11 @@ } }, "node_modules/terser": { - "version": "5.31.1", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.1.tgz", - "integrity": "sha512-37upzU1+viGvuFtBo9NPufCb9dwM0+l9hMxYyWfBA+fbwrPqNJAhbZ6W47bBFnZHKHTUBnMvi87434qq+qnxOg==", + "version": "5.36.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.36.0.tgz", + "integrity": "sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -15651,6 +16435,7 @@ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.10.tgz", "integrity": "sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.20", "jest-worker": "^27.4.5", @@ -15685,6 +16470,7 @@ "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", "dev": true, + "license": "MIT", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -15695,6 +16481,7 @@ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -15712,13 +16499,15 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/text-extensions": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -15727,25 +16516,29 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz", "integrity": "sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -15755,13 +16548,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2/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==", "dev": true, + "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -15776,22 +16571,32 @@ "version": "5.1.2", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/through2/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==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, + "node_modules/tiny-typed-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-typed-emitter/-/tiny-typed-emitter-2.1.0.tgz", + "integrity": "sha512-qVtvMxeXbVej0cQWKqVSSAHmKZEHAvxdF8HEUBFWts8h+xEo5m/lEiPakuyZ3BnCBjOD8i24kzNOiOLLgsSxhA==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.14" } @@ -15801,6 +16606,7 @@ "resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz", "integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==", "dev": true, + "license": "MIT", "dependencies": { "tmp": "^0.2.0" } @@ -15809,13 +16615,15 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -15827,13 +16635,15 @@ "version": "0.0.3", "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/treeverse": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", "dev": true, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -15843,6 +16653,7 @@ "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -15852,6 +16663,7 @@ "resolved": "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz", "integrity": "sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 14.0.0" } @@ -15861,15 +16673,17 @@ "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", "dev": true, + "license": "WTFPL", "dependencies": { "utf8-byte-length": "^1.0.1" } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz", + "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -15882,6 +16696,7 @@ "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.1.tgz", "integrity": "sha512-rNH3sK9kGZcH9dYzC7CewQm4NtxJTjSEVRJ2DyBZR7f8/wcta+iV44UPCXc5+nzDzivKtlzV6c9P4e+oFhDLYg==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^4.1.0", "enhanced-resolve": "^5.0.0", @@ -15902,6 +16717,7 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">= 8" } @@ -15911,6 +16727,7 @@ "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", "dev": true, + "license": "MIT", "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -15954,6 +16771,7 @@ "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, + "license": "MIT", "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -15968,21 +16786,24 @@ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==", - "dev": true + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" }, "node_modules/tsx": { "version": "4.9.1", "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.9.1.tgz", "integrity": "sha512-CqSJaYyZ6GEqnGtPuMPQHvUwRGU6VHSVF+RDxoOmRg/XD4aF0pD973tKhoUYGQtdcoCHcSOGk34ioFaP+vYcMQ==", "dev": true, + "license": "MIT", "dependencies": { "esbuild": "~0.20.2", "get-tsconfig": "^4.7.3" @@ -15998,134 +16819,18 @@ } }, "node_modules/tuf-js": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", - "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-2.2.1.tgz", + "integrity": "sha512-GwIJau9XaA8nLVbUXsN3IlFi7WmQ48gBUrl3FTkkL/XLu/POhBzfmX9hd33FNMX1qAsfl6ozO1iMmW9NC8YniA==", "dev": true, + "license": "MIT", "dependencies": { - "@tufjs/models": "1.0.4", + "@tufjs/models": "2.0.1", "debug": "^4.3.4", - "make-fetch-happen": "^11.1.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/cacache": { - "version": "17.1.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.4.tgz", - "integrity": "sha512-/aJwG2l3ZMJ1xNAnqbMpA40of9dj/pIH3QfiuQSqjfPJF747VR0J/bHn+/KdNnHKc6XQcWt/AfRSBft82W1d2A==", - "dev": true, - "dependencies": { - "@npmcli/fs": "^3.1.0", - "fs-minipass": "^3.0.0", - "glob": "^10.2.2", - "lru-cache": "^7.7.1", - "minipass": "^7.0.3", - "minipass-collect": "^1.0.2", - "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": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/tuf-js/node_modules/make-fetch-happen": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", - "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", - "dev": true, - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^17.0.0", - "http-cache-semantics": "^4.1.1", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^5.0.0", - "minipass-fetch": "^3.0.0", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^10.0.0" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/tuf-js/node_modules/make-fetch-happen/node_modules/minipass": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", - "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/tuf-js/node_modules/minipass-collect": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", - "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", - "dev": true, - "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/tuf-js/node_modules/minipass-collect/node_modules/minipass": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", - "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/tuf-js/node_modules/socks-proxy-agent": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", - "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", - "dev": true, - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/tuf-js/node_modules/ssri": { - "version": "10.0.6", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.6.tgz", - "integrity": "sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==", - "dev": true, - "dependencies": { - "minipass": "^7.0.3" + "make-fetch-happen": "^13.0.1" }, "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^16.14.0 || >=18.0.0" } }, "node_modules/type-check": { @@ -16133,6 +16838,7 @@ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", "dev": true, + "license": "MIT", "dependencies": { "prelude-ls": "^1.2.1" }, @@ -16145,6 +16851,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -16157,6 +16864,7 @@ "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "es-errors": "^1.3.0", @@ -16171,6 +16879,7 @@ "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", @@ -16186,17 +16895,19 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -16206,17 +16917,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -16225,26 +16937,19 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-emitter": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/typed-emitter/-/typed-emitter-2.1.0.tgz", - "integrity": "sha512-g/KzbYKbH5C2vPkaXGu8DJlHrGKHLsM25Zg9WuC9pMGfuvT+X25tZQWo5fK1BjBm8+UrVE9LDCvaY0CQk+fXDA==", - "dev": true, - "optionalDependencies": { - "rxjs": "*" - } - }, "node_modules/typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } @@ -16254,6 +16959,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -16263,10 +16969,11 @@ } }, "node_modules/uglify-js": { - "version": "3.18.0", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.18.0.tgz", - "integrity": "sha512-SyVVbcNBCk0dzr9XL/R/ySrmYf0s372K6/hFklzgcp2lBFyXtw4I7BOdDjlLhE1aVqaI/SHWXWmYdlZxuyF38A==", + "version": "3.19.3", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", + "integrity": "sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -16280,6 +16987,7 @@ "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.2", "has-bigints": "^1.0.2", @@ -16295,22 +17003,38 @@ "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", "dev": true, + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "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==", "dev": true, + "license": "ISC", "dependencies": { "unique-slug": "^4.0.0" }, @@ -16323,6 +17047,7 @@ "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" }, @@ -16335,6 +17060,7 @@ "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -16346,13 +17072,15 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -16362,15 +17090,16 @@ "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, + "license": "MIT", "engines": { "node": ">=4", "yarn": "*" } }, "node_modules/update-browserslist-db": { - "version": "1.0.16", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.16.tgz", - "integrity": "sha512-KVbTxlBYlckhF5wgfyZXTWnMn7MMZjMu9XG8bPlliUOP9ThaF4QnhP8qrjrH7DRzHfSk0oQv1wToW+iA5GajEQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", "dev": true, "funding": [ { @@ -16386,9 +17115,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "escalade": "^3.1.2", - "picocolors": "^1.0.1" + "escalade": "^3.2.0", + "picocolors": "^1.1.0" }, "bin": { "update-browserslist-db": "cli.js" @@ -16402,6 +17132,7 @@ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "punycode": "^2.1.0" } @@ -16410,23 +17141,26 @@ "version": "1.0.5", "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", - "dev": true + "dev": true, + "license": "(WTFPL OR MIT)" }, "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==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-10.0.0.tgz", + "integrity": "sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==", "dev": true, "funding": [ "https://github.com/sponsors/broofa", "https://github.com/sponsors/ctavan" ], + "license": "MIT", "bin": { "uuid": "dist/bin/uuid" } @@ -16435,26 +17169,26 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/validate-npm-package-license": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" } }, "node_modules/validate-npm-package-name": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", - "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz", + "integrity": "sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ==", "dev": true, - "dependencies": { - "builtins": "^5.0.0" - }, + "license": "ISC", "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -16464,6 +17198,7 @@ "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.1.tgz", "integrity": "sha512-veufcmxri4e3XSrT0xwfUR7kguIkaxBeosDg00yDWhk49wdwkSUrvvsm7nc75e1PUyvIeZj6nS8VQRYz2/S4Xg==", "dev": true, + "license": "MIT", "optional": true, "dependencies": { "assert-plus": "^1.0.0", @@ -16479,6 +17214,7 @@ "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", "dev": true, + "license": "MIT", "dependencies": { "clone": "^2.1.1", "clone-buffer": "^1.0.0", @@ -16495,13 +17231,15 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-3.0.1.tgz", "integrity": "sha512-9YlCL/ynK3CTlrSRrDxZvUauLzAswPCrsaCgilqFevUYpeEW0/3ScEjaa3kbW/T0ghhkEr7mv+fpjqn1Y1YuTA==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/watchpack": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.1.tgz", - "integrity": "sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==", + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", + "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", "dev": true, + "license": "MIT", "dependencies": { "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" @@ -16515,6 +17253,7 @@ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, + "license": "MIT", "dependencies": { "defaults": "^1.0.3" } @@ -16523,29 +17262,30 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/webpack": { - "version": "5.90.3", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.90.3.tgz", - "integrity": "sha512-h6uDYlWCctQRuXBs1oYpVe6sFcWedl0dpcVaTf/YF67J9bKvwJajFulMVSYKHrksMB3I/pIagRzDxwxkebuzKA==", - "dev": true, - "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.21.10", + "version": "5.96.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.96.1.tgz", + "integrity": "sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.6", + "@webassemblyjs/ast": "^1.12.1", + "@webassemblyjs/wasm-edit": "^1.12.1", + "@webassemblyjs/wasm-parser": "^1.12.1", + "acorn": "^8.14.0", + "browserslist": "^4.24.0", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", + "enhanced-resolve": "^5.17.1", "es-module-lexer": "^1.2.1", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", + "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", "loader-runner": "^4.2.0", "mime-types": "^2.1.27", @@ -16553,7 +17293,7 @@ "schema-utils": "^3.2.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.0", + "watchpack": "^2.4.1", "webpack-sources": "^3.2.3" }, "bin": { @@ -16577,6 +17317,7 @@ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-5.1.4.tgz", "integrity": "sha512-pIDJHIEI9LR0yxHXQ+Qh95k2EvXpWzZ5l+d+jIo+RdSm9MiHfzazIxwwni/p7+x4eJZuvG1AJwgC4TNQ7NRgsg==", "dev": true, + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "^0.5.0", "@webpack-cli/configtest": "^2.1.1", @@ -16622,6 +17363,7 @@ "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", "dev": true, + "license": "MIT", "engines": { "node": ">=14" } @@ -16631,6 +17373,7 @@ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.10.0.tgz", "integrity": "sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==", "dev": true, + "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", "flat": "^5.0.2", @@ -16645,6 +17388,7 @@ "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", "dev": true, + "license": "MIT", "engines": { "node": ">=10.13.0" } @@ -16654,6 +17398,7 @@ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -16667,6 +17412,7 @@ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -16675,13 +17421,15 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/webpack/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", "integrity": "sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==", "dev": true, + "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.8", "ajv": "^6.12.5", @@ -16700,6 +17448,7 @@ "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -16710,6 +17459,7 @@ "resolved": "https://registry.npmjs.org/which/-/which-4.0.0.tgz", "integrity": "sha512-GlaYyEb07DPxYCKhKzplCWBJtvxZcZMrL+4UkrTSJHHPyZU4mYYTv3qaOe77H7EODLSSopAUFAc6W8U4yqvscg==", "dev": true, + "license": "ISC", "dependencies": { "isexe": "^3.1.1" }, @@ -16725,6 +17475,7 @@ "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", "dev": true, + "license": "MIT", "dependencies": { "is-bigint": "^1.0.1", "is-boolean-object": "^1.1.0", @@ -16736,11 +17487,59 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/which-typed-array": { "version": "1.1.15", "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", "call-bind": "^1.0.7", @@ -16760,6 +17559,7 @@ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, + "license": "ISC", "dependencies": { "string-width": "^1.0.2 || 2 || 3 || 4" } @@ -16768,38 +17568,41 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/winston": { - "version": "3.13.0", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.13.0.tgz", - "integrity": "sha512-rwidmA1w3SE4j0E5MuIufFhyJPBDG7Nu71RkZor1p2+qHvJSZ9GYDA81AyleQcZbh/+V6HjeBdfnTZJm9rSeQQ==", + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.17.0.tgz", + "integrity": "sha512-DLiFIXYC5fMPxaRg832S6F5mJYvePtmO5G9v9IgUFPhXm9/GkXarH/TUrBAVzhTCzAj9anE/+GjrgXp/54nOgw==", "dev": true, + "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", "@dabh/diagnostics": "^2.0.2", "async": "^3.2.3", "is-stream": "^2.0.0", - "logform": "^2.4.0", + "logform": "^2.7.0", "one-time": "^1.0.0", "readable-stream": "^3.4.0", "safe-stable-stringify": "^2.3.1", "stack-trace": "0.0.x", "triple-beam": "^1.3.0", - "winston-transport": "^4.7.0" + "winston-transport": "^4.9.0" }, "engines": { "node": ">= 12.0.0" } }, "node_modules/winston-transport": { - "version": "4.7.0", - "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz", - "integrity": "sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==", + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/winston-transport/-/winston-transport-4.9.0.tgz", + "integrity": "sha512-8drMJ4rkgaPo1Me4zD/3WLfI/zPdA9o2IipKODunnGDcuqbHwjsbB79ylv04LCGGzU0xQ6vTznOMpQGaLhhm6A==", "dev": true, + "license": "MIT", "dependencies": { - "logform": "^2.3.2", - "readable-stream": "^3.6.0", + "logform": "^2.7.0", + "readable-stream": "^3.6.2", "triple-beam": "^1.3.0" }, "engines": { @@ -16811,6 +17614,7 @@ "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -16819,13 +17623,15 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", - "dev": true + "dev": true, + "license": "MIT" }, "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==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16844,6 +17650,7 @@ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -16860,13 +17667,15 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/write-file-atomic": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^4.0.1" @@ -16880,6 +17689,7 @@ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, + "license": "ISC", "engines": { "node": ">=14" }, @@ -16892,6 +17702,7 @@ "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, + "license": "MIT", "dependencies": { "detect-indent": "^5.0.0", "graceful-fs": "^4.1.15", @@ -16909,6 +17720,7 @@ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, + "license": "MIT", "dependencies": { "pify": "^4.0.1", "semver": "^5.6.0" @@ -16922,6 +17734,7 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -16931,6 +17744,7 @@ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } @@ -16940,6 +17754,7 @@ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, + "license": "ISC", "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", @@ -16951,6 +17766,7 @@ "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, + "license": "MIT", "dependencies": { "sort-keys": "^2.0.0", "type-fest": "^0.4.1", @@ -16965,6 +17781,7 @@ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=6" } @@ -16974,15 +17791,17 @@ "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-15.1.1.tgz", "integrity": "sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0" } }, "node_modules/xpath": { - "version": "0.0.32", - "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.32.tgz", - "integrity": "sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==", + "version": "0.0.34", + "resolved": "https://registry.npmjs.org/xpath/-/xpath-0.0.34.tgz", + "integrity": "sha512-FxF6+rkr1rNSQrhUNYrAFJpRXNzlDoMxeXN5qI84939ylEv3qqPFKa85Oxr6tDaJKqwW6KKyo2v26TSv3k6LeA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0" } @@ -16992,6 +17811,7 @@ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } @@ -17001,6 +17821,7 @@ "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true, + "license": "ISC", "engines": { "node": ">=10" } @@ -17009,13 +17830,15 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -17034,6 +17857,7 @@ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, + "license": "ISC", "engines": { "node": ">=12" } @@ -17043,6 +17867,7 @@ "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", "dev": true, + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" @@ -17053,6 +17878,7 @@ "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -17062,6 +17888,7 @@ "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -17074,6 +17901,7 @@ "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "archiver-utils": "^3.0.4", @@ -17089,6 +17917,7 @@ "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "glob": "^7.2.3", @@ -17112,6 +17941,7 @@ "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "deprecated": "Glob versions prior to v9 are no longer supported", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "fs.realpath": "^1.0.0", @@ -17133,6 +17963,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "peer": true, "dependencies": { "brace-expansion": "^1.1.7" diff --git a/package.json b/package.json index 2290081bc14..1f482be07c4 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,7 @@ "version": "4.2.1", "firmwareVersion": "11.2.0", "deviceProtocolVersion": "4.10.0", - "userConfigVersion": "7.1.0", + "userConfigVersion": "8.3.0", "hardwareConfigVersion": "1.0.0", "description": "Agent is the configuration application of the Ultimate Hacking Keyboard.", "repository": { @@ -15,54 +15,55 @@ }, "license": "See in LICENSE", "engines": { - "node": ">=20.14.0 <21.0.0", - "npm": ">=10.7.0 <11.0.0" + "node": ">=20.18.0 <21.0.0", + "npm": ">=10.8.2 <11.0.0" }, "devDependencies": { - "@lerna/legacy-package-management": "8.1.3", - "@types/command-line-args": "5.2.0", - "@types/command-line-usage": "5.0.2", - "@types/decompress": "4.2.4", + "@lerna/legacy-package-management": "8.1.9", + "@types/command-line-args": "5.2.3", + "@types/command-line-usage": "5.0.4", + "@types/decompress": "4.2.7", "@types/electron-devtools-installer": "2.0.2", - "@types/file-saver": "2.0.5", - "@types/jasmine": "4.3.1", - "@types/lodash": "4.14.168", - "@types/node": "18.16.19", - "@types/tmp": "0.2.0", - "@types/yargs": "17.0.32", + "@types/file-saver": "2.0.7", + "@types/jasmine": "5.1.4", + "@types/lodash": "4.17.10", + "@types/node": "20.16.10", + "@types/tmp": "0.2.6", + "@types/yargs": "17.0.33", "@typescript-eslint/eslint-plugin": "7.11.0", "@typescript-eslint/parser": "7.11.0", "check-node-version": "4.2.1", - "copy-webpack-plugin": "11.0.0", + "copy-webpack-plugin": "12.0.2", "cross-env": "7.0.3", "decompress": "4.2.1", "decompress-targz": "^4.1.1", "desm": "1.3.0", - "electron": "31.0.2", - "electron-builder": "24.13.3", + "electron": "33.2.0", + "electron-builder": "25.1.8", "electron-debug": "1.5.0", "electron-devtools-installer": "2.2.3", "electron-log": "4.4.8", "electron-settings": "4.0.4", - "electron-updater": "6.0.4", + "electron-updater": "6.3.9", "eslint": "8.57.0", "fs-extra": "11.2.0", - "jasmine": "4.6.0", - "lerna": "8.1.3", + "jasmine": "5.3.1", + "lerna": "8.1.9", "lodash": "4.17.21", - "node-hid": "3.1.0", + "node-hid": "3.1.2", "npm-run-all": "4.1.5", "nrf-intel-hex": "1.3.0", "postcss-scss": "4.0.9", - "rimraf": "5.0.5", + "rimraf": "6.0.1", + "serialport": "12.0.0", "source-map-support": "0.5.21", "stylelint": "15.11.0", - "svg-sprite": "2.0.2", + "svg-sprite": "2.0.4", "ts-loader": "9.5.1", "ts-node": "10.9.2", "tsx": "4.9.1", "typescript": "5.3.3", - "webpack": "5.90.3", + "webpack": "5.96.1", "webpack-cli": "5.1.4" }, "scripts": { diff --git a/packages/kboot/package-lock.json b/packages/kboot/package-lock.json index 3b06bb0c7e6..07700e1f716 100644 --- a/packages/kboot/package-lock.json +++ b/packages/kboot/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "byte-data": "^19.0.1", "debug": "^4.3.4", - "tslib": "^2.6.3" + "tslib": "^2.8.1" } }, "node_modules/byte-data": { @@ -44,9 +44,10 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" } }, "dependencies": { @@ -69,9 +70,9 @@ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" } } } diff --git a/packages/kboot/package.json b/packages/kboot/package.json index 4cc3406395b..df4c0c8361e 100644 --- a/packages/kboot/package.json +++ b/packages/kboot/package.json @@ -14,10 +14,10 @@ "dependencies": { "debug": "^4.3.4", "byte-data": "^19.0.1", - "tslib": "^2.6.3" + "tslib": "^2.8.1" }, "peer-dependencies": { - "node-hid": ">= 3.1.0" + "node-hid": ">= 3.1.2" }, "scripts": { "build": "tsc --project ./src/tsconfig.json", diff --git a/packages/mcumgr/index.ts b/packages/mcumgr/index.ts new file mode 100644 index 00000000000..8420b1093fd --- /dev/null +++ b/packages/mcumgr/index.ts @@ -0,0 +1 @@ +export * from './src'; diff --git a/packages/mcumgr/jasmine.json b/packages/mcumgr/jasmine.json new file mode 100644 index 00000000000..41ed3fadefb --- /dev/null +++ b/packages/mcumgr/jasmine.json @@ -0,0 +1,8 @@ +{ + "spec_dir": "test", + "spec_files": [ + "**/*[sS]pec.ts" + ], + "stopSpecOnExpectationFailure": true, + "random": false +} diff --git a/packages/mcumgr/package-lock.json b/packages/mcumgr/package-lock.json new file mode 100644 index 00000000000..6b5e579be3d --- /dev/null +++ b/packages/mcumgr/package-lock.json @@ -0,0 +1,341 @@ +{ + "name": "@uhk/mcumgr", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@uhk/mcumgr", + "version": "0.0.0", + "license": "See in LICENSE", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "serialport": ">= 12.0.0" + } + }, + "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==", + "peer": true, + "dependencies": { + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@serialport/bindings-cpp": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-12.0.1.tgz", + "integrity": "sha512-r2XOwY2dDvbW7dKqSPIk2gzsr6M6Qpe9+/Ngs94fNaNlcTRCV02PfaoDmRgcubpNVVcLATlxSxPTIDw12dbKOg==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "@serialport/parser-readline": "11.0.0", + "debug": "4.3.4", + "node-addon-api": "7.0.0", + "node-gyp-build": "4.6.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-delimiter": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz", + "integrity": "sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-readline": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-11.0.0.tgz", + "integrity": "sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA==", + "peer": true, + "dependencies": { + "@serialport/parser-delimiter": "11.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "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==", + "peer": true, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-12.0.0.tgz", + "integrity": "sha512-0ei0txFAj+s6FTiCJFBJ1T2hpKkX8Md0Pu6dqMrYoirjPskDLJRgZGLqoy3/lnU1bkvHpnJO+9oJ3PB9v8rNlg==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-12.0.0.tgz", + "integrity": "sha512-0PfLzO9t2X5ufKuBO34DQKLXrCCqS9xz2D0pfuaLNeTkyGUBv426zxoMf3rsMRodDOZNbFblu3Ae84MOQXjnZw==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-12.0.0.tgz", + "integrity": "sha512-gu26tVt5lQoybhorLTPsH2j2LnX3AOP2x/34+DUSTNaUTzu2fBXw+isVjQJpUBFWu6aeQRZw5bJol5X9Gxjblw==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-12.0.0.tgz", + "integrity": "sha512-GnCh8K0NAESfhCuXAt+FfBRz1Cf9CzIgXfp7SdMgXwrtuUnCC/yuRTUFWRvuzhYKoAo1TL0hhUo77SFHUH1T/w==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-12.0.0.tgz", + "integrity": "sha512-p1hiCRqvGHHLCN/8ZiPUY/G0zrxd7gtZs251n+cfNTn+87rwcdUeu9Dps3Aadx30/sOGGFL6brIRGK4l/t7MuQ==", + "peer": true, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-12.0.0.tgz", + "integrity": "sha512-O7cywCWC8PiOMvo/gglEBfAkLjp/SENEML46BXDykfKP5mTPM46XMaX1L0waWU6DXJpBgjaL7+yX6VriVPbN4w==", + "peer": true, + "dependencies": { + "@serialport/parser-delimiter": "12.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-12.0.0.tgz", + "integrity": "sha512-ygDwj3O4SDpZlbrRUraoXIoIqb8sM7aMKryGjYTIF0JRnKeB1ys8+wIp0RFMdFbO62YriUDextHB5Um5cKFSWg==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-12.0.0.tgz", + "integrity": "sha512-dCAVh4P/pZrLcPv9NJ2mvPRBg64L5jXuiRxIlyxxdZGH4WubwXVXY/kBTihQmiAMPxbT3yshSX8f2+feqWsxqA==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-slip-encoder": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-12.0.0.tgz", + "integrity": "sha512-0APxDGR9YvJXTRfY+uRGhzOhTpU5akSH183RUcwzN7QXh8/1jwFsFLCu0grmAUfi+fItCkR+Xr1TcNJLR13VNA==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-spacepacket": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-12.0.0.tgz", + "integrity": "sha512-dozONxhPC/78pntuxpz/NOtVps8qIc/UZzdc/LuPvVsqCoJXiRxOg6ZtCP/W58iibJDKPZPAWPGYeZt9DJxI+Q==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-12.0.0.tgz", + "integrity": "sha512-9On64rhzuqKdOQyiYLYv2lQOh3TZU/D3+IWCR5gk0alPel2nwpp4YwDEGiUBfrQZEdQ6xww0PWkzqth4wqwX3Q==", + "peer": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "debug": "4.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/debug": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", + "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "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==" + }, + "node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "peer": true + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/serialport": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-12.0.0.tgz", + "integrity": "sha512-AmH3D9hHPFmnF/oq/rvigfiAouAKyK/TjnrkwZRYSFZxNggJxwvbAbfYrLeuvq7ktUdhuHdVdSjj852Z55R+uA==", + "peer": true, + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "12.0.1", + "@serialport/parser-byte-length": "12.0.0", + "@serialport/parser-cctalk": "12.0.0", + "@serialport/parser-delimiter": "12.0.0", + "@serialport/parser-inter-byte-timeout": "12.0.0", + "@serialport/parser-packet-length": "12.0.0", + "@serialport/parser-readline": "12.0.0", + "@serialport/parser-ready": "12.0.0", + "@serialport/parser-regex": "12.0.0", + "@serialport/parser-slip-encoder": "12.0.0", + "@serialport/parser-spacepacket": "12.0.0", + "@serialport/stream": "12.0.0", + "debug": "4.3.4" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/serialport/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + } + } +} diff --git a/packages/mcumgr/package.json b/packages/mcumgr/package.json new file mode 100644 index 00000000000..acc4ddb6c9b --- /dev/null +++ b/packages/mcumgr/package.json @@ -0,0 +1,27 @@ +{ + "name": "@uhk/mcumgr", + "private": true, + "version": "0.0.0", + "main": "dist/index.js", + "type": "module", + "scripts": { + "build": "tsc --project ./src/tsconfig.json", + "clean": "rimraf ./node_modules ./dist", + "lint": "eslint --ext .ts .", + "test": "cross-env NODE_OPTIONS=--loader=ts-node/esm jasmine --config=jasmine.json" + }, + "keywords": [ + "mcu", + "mcuboot", + "mcumgr" + ], + "author": "Robert Kiss ", + "license": "See in LICENSE", + "description": "Micro controller manager utility", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "serialport": ">= 12.0.0" + } +} diff --git a/packages/mcumgr/readme.md b/packages/mcumgr/readme.md new file mode 100644 index 00000000000..d4a2ce5920a --- /dev/null +++ b/packages/mcumgr/readme.md @@ -0,0 +1,10 @@ +Javascript implementation of the MCUboot +======================================== + +Based on https://github.com/mcu-tools/mcuboot + +Useful sources +- https://interrupt.memfault.com/blog/mcuboot-overview#mcuboot-image-binaries +- https://github.com/boogie/mcumgr-web/blob/main/js/mcumgr.js#L165 +- https://github.com/adafruit/Adafruit_Mynewt/blob/master/docs/16_NewtmgrProtocol.md +- https://github.com/mcu-tools/mcuboot/tree/main/boot/boot_serial diff --git a/packages/mcumgr/src/constants.ts b/packages/mcumgr/src/constants.ts new file mode 100644 index 00000000000..9aeffede31b --- /dev/null +++ b/packages/mcumgr/src/constants.ts @@ -0,0 +1,75 @@ +/** + * MCU management operations + * + * @readonly + * @enum {number} + */ +export const MGMT_OP = Object.freeze({ + READ: 0, + READ_RSP: 1, + WRITE: 2, + WRITE_RSP: 3, +}); + +export type MGMT_OP_KEYS_TYPE = keyof typeof MGMT_OP; +export type MGMT_OP_TYPE = typeof MGMT_OP[MGMT_OP_KEYS_TYPE]; + +/** + * Target of the MCU management operation + * + * @readonly + * @enum {number} + */ +export const MGMT_GROUP = Object.freeze({ + OS: 0, + IMAGE: 1, + STAT: 2, + CONFIG: 3, + LOG: 4, + CRASH: 5, + SPLIT: 6, + RUN: 7, + FS: 8, + SHELL: 9, +}); + +export type MGMT_GROUP_KEYS_TYPE = keyof typeof MGMT_GROUP; +export type MGMT_GROUP_TYPE = typeof MGMT_GROUP[MGMT_GROUP_KEYS_TYPE]; + +/** + * Operation of the OS group. Referenced as default operations too. + * + * @readonly + * @enum {number} + */ +export const OS_OPERATION = Object.freeze({ + ECHO: 0, + CONS_ECHO_CTRL: 1, + TASK_STAT: 2, + MP_STAT: 3, + DATETIME_STR: 4, + RESET: 5, +}); + +export type OS_OPERATION_KEYS_TYPE = keyof typeof OS_OPERATION; +export type OS_OPERATION_TYPE = typeof OS_OPERATION[OS_OPERATION_KEYS_TYPE]; + +/** + * Operation of the IMAGE group + * + * @readonly + * @enum + */ +export const IMAGE_OPERATION = Object.freeze({ + STATE: 0, + UPLOAD: 1, + FILE: 2, + CORE_LIST: 3, + CORE_LOAD: 4, + ERASE: 5, +}); + +export type IMAGE_OPERATION_KEYS_TYPE = keyof typeof IMAGE_OPERATION; +export type IMAGE_OPERATION_TYPE = typeof IMAGE_OPERATION[IMAGE_OPERATION_KEYS_TYPE]; + +export type MGMT_OPERATION_TYPE = OS_OPERATION_TYPE | IMAGE_OPERATION_TYPE; diff --git a/packages/mcumgr/src/index.ts b/packages/mcumgr/src/index.ts new file mode 100644 index 00000000000..1c028da7fc8 --- /dev/null +++ b/packages/mcumgr/src/index.ts @@ -0,0 +1,3 @@ +export * from './constants.js'; +export * from './mcumgr.js'; +export * from './serial-peripheral.js'; diff --git a/packages/mcumgr/src/mcumgr.ts b/packages/mcumgr/src/mcumgr.ts new file mode 100644 index 00000000000..b3af39275e2 --- /dev/null +++ b/packages/mcumgr/src/mcumgr.ts @@ -0,0 +1,203 @@ +import { BinaryLike } from 'crypto'; +import debug from 'debug'; +import {createHash} from 'node:crypto'; + +import { + IMAGE_OPERATION, + MGMT_GROUP, + MGMT_OP, + MGMT_GROUP_TYPE, + MGMT_OP_TYPE, + MGMT_OPERATION_TYPE, + OS_OPERATION, +} from './constants.js'; +import { ImageUploadRequest } from './models/image-upload-request.js'; +import { ImageUploadResponseData } from './models/image-upload-response-data.js'; +import { NmpResponse } from './models/nmp.js'; +import { Peripheral } from './peripheral.js'; +import * as cbor from './util/cbor.js'; +import convertToHex from './util/convert-to-hex.js'; +import toUint16 from './util/to-uint16.js'; +import fromUint16 from './util/from-uint16.js'; + +const NMP_HEADER_SIZE = 8; +// Message transfer unit. TODO: maybe it should be exposed by peripheral. +const MTU = 1020; + +const logger = debug('mcumgr'); + +export class McuManager { + #peripheral: Peripheral; + #seq: number; + + constructor(peripheral: Peripheral) { + this.#peripheral = peripheral; + } + + /** + * Close the underlying peripheral + */ + async close(): Promise { + logger('Close peripheral'); + return this.#peripheral.close(); + } + + /** + * Send a message to the device that send it back. + * UHK not implemented this command! + * TODO: define response type + */ + async echo(message: string): Promise { + logger('Start send echo command: "%s"', message); + await this.sendCommand(MGMT_OP.WRITE, MGMT_GROUP.OS, OS_OPERATION.ECHO, {d: message}); + } + + /** + * Erase the firmware image. + * UHK not implemented this command! + */ + async imageErase(): Promise { + logger('Start send image erase command'); + await this.sendCommand(MGMT_OP.WRITE, MGMT_GROUP.IMAGE, IMAGE_OPERATION.ERASE, {}); + } + + /** + * Query images from the device + * TODO: Implement response structure + * @returns {Promise<*>} + */ + async imageReadState():Promise { + logger('Start send image read state command'); + return this.sendCommand(MGMT_OP.READ, MGMT_GROUP.IMAGE, IMAGE_OPERATION.STATE); + } + + /** + * Upload a firmware/bootloader image to the device + */ + async imageUpload(buffer: Buffer): Promise { + logger('Start send image upload command: %o', { bufferLength: buffer.byteLength }); + let written = 0; + + while (written < buffer.length) { + const message: ImageUploadRequest = { + data: new Uint8Array(), + off: written + }; + + // set the image length and sha only in the first message packet + if (written === 0) { + message.len = buffer.length; + message.sha = new Uint8Array(this.#sha256(buffer)); + } + + const cborEncoded = cbor.encode(message); + const length = MTU - NMP_HEADER_SIZE - cborEncoded.byteLength; + message.data = new Uint8Array(buffer.subarray(written, written + length)); + + const response = await this.sendCommand(MGMT_OP.WRITE, MGMT_GROUP.IMAGE, IMAGE_OPERATION.UPLOAD, message); + + written += length; + + // Overwrite the written length with response off that represent how many byte processed by the mcu + if ((response.data?.rc === 0 || response.data?.rc === undefined) && response.data?.off) { + written = response.data?.off; + } + + logger('Image uploaded: %d', written / buffer.length * 100); + } + } + + /** + * Reset/restart the device + */ + async reset(): Promise { + logger('Start send reset command'); + await this.sendCommand(MGMT_OP.WRITE, MGMT_GROUP.OS, OS_OPERATION.RESET); + } + + /** + * Send command to the microcontroller + */ + async sendCommand(op: MGMT_OP_TYPE, group: MGMT_GROUP_TYPE, id: MGMT_OPERATION_TYPE, data?: any): Promise> { + logger('Start send command: %o', {op, group, id, data}); + + let encodedData = []; + if (typeof data !== 'undefined') { + // the command data is cbor encoded + const buffer = cbor.encode(data); + const a = new Uint8Array(buffer); + encodedData = [...a]; + logger('Cbor data: %s', convertToHex(encodedData)); + } + + // The firs 8 byte is the header + const message = [ + op, + 0, // it is the flags field we don't use it + ...toUint16(encodedData.length), + ...toUint16(group), + this.#Seq(), // technically it is a random number that makes the testing complicated + id, + ...encodedData, + ]; + + logger('NMP message: %s', convertToHex(message)); + + await this.#peripheral.write(message); + const response = await this.#peripheral.read(15000); + logger('Nmp raw response %o', response); + const parsedResponse = this.#parseNmpMessage(response); + logger("Nmp parsed response %o", parsedResponse); + + return parsedResponse; + } + + // TODO: maybe move to external function for testability + #parseNmpMessage(buffer: Buffer): NmpResponse { + const [op, flags, length_hi, length_lo, group_hi, group_lo, seq, id] = buffer; + + let data: any; + + // the buffer contains data + // TODO: Maybe worth validate the length of the data section = header.length + if (buffer.length > NMP_HEADER_SIZE) { + const dataSlice = buffer.subarray(8); + data = cbor.decode(dataSlice.buffer.slice(dataSlice.byteOffset, dataSlice.byteOffset + dataSlice.byteLength)); + } + + return { + op, + flags, + length: fromUint16([length_hi, length_lo]), + group: fromUint16([group_hi, group_lo]), + seq, + id, + data, + } as any; + } + + /** + * Generates the sequence number of the MCU datagram. + * If the sequence number is undefined then generate a random seed value. + * With random seed we just try to prevent the conflict with the previous operation + * The sequence number is an UInt8 data so if the value is greater than 255 then set it to 0 + */ + #Seq(): number { + if (this.#seq === undefined) { + this.#seq = Math.floor(Math.random() * 255); + } else { + this.#seq++; + if (this.#seq > 255) + this.#seq = 0; + } + + return this.#seq; + } + + /** + * Create SHA256 has of the input + */ + #sha256(data: BinaryLike): Buffer { + return createHash('sha256').update(data).digest(); + } +} diff --git a/packages/mcumgr/src/models/image-upload-request.ts b/packages/mcumgr/src/models/image-upload-request.ts new file mode 100644 index 00000000000..ae10ec4b57c --- /dev/null +++ b/packages/mcumgr/src/models/image-upload-request.ts @@ -0,0 +1,6 @@ +export interface ImageUploadRequest { + data: Uint8Array; + off: number; + len?: number; + sha?: Uint8Array; +} diff --git a/packages/mcumgr/src/models/image-upload-response-data.ts b/packages/mcumgr/src/models/image-upload-response-data.ts new file mode 100644 index 00000000000..8ba98de6e37 --- /dev/null +++ b/packages/mcumgr/src/models/image-upload-response-data.ts @@ -0,0 +1,5 @@ +import { NmpResponseData } from './nmp.js'; + +export interface ImageUploadResponseData extends NmpResponseData{ + off?: number +} diff --git a/packages/mcumgr/src/models/index.ts b/packages/mcumgr/src/models/index.ts new file mode 100644 index 00000000000..773c7fdedbb --- /dev/null +++ b/packages/mcumgr/src/models/index.ts @@ -0,0 +1,2 @@ +export * from './image-upload-request.js'; +export * from './nmp.js'; diff --git a/packages/mcumgr/src/models/nmp.ts b/packages/mcumgr/src/models/nmp.ts new file mode 100644 index 00000000000..c50435d1566 --- /dev/null +++ b/packages/mcumgr/src/models/nmp.ts @@ -0,0 +1,41 @@ +import { MGMT_GROUP_TYPE, MGMT_OP_TYPE, MGMT_OPERATION_TYPE } from '../constants.js'; + +/** + * MCU message protocol header. + * The order of the field follows the binary serialisation order. Please don't reorder. + */ +export interface NmpHeader { + op: MGMT_OP_TYPE; + /** + * 1 byte, not used + */ + flag: number; + /** + * `data` length represented in 2 bytes + */ + length: number; + /** + * Represented in 2 bytes + */ + group: MGMT_GROUP_TYPE; + /** + * Sequence number of the message + */ + seq: number; + /** + * Represented in 1 byte + */ + id: MGMT_OPERATION_TYPE; +} + +export interface NmpResponseData { + rc?: number; +} + +/** + * MCU message message + */ +export interface NmpResponse extends NmpHeader { + data?: T; +} + diff --git a/packages/mcumgr/src/peripheral.ts b/packages/mcumgr/src/peripheral.ts new file mode 100644 index 00000000000..5081e2d65e9 --- /dev/null +++ b/packages/mcumgr/src/peripheral.ts @@ -0,0 +1,12 @@ +export interface Peripheral { + close(): Promise; + + open(): Promise; + + /** + * @param timeout - timeout in millisecond + */ + read(timeout: number): Promise; + + write(message: Array): Promise; +} diff --git a/packages/mcumgr/src/serial-peripheral.ts b/packages/mcumgr/src/serial-peripheral.ts new file mode 100644 index 00000000000..663b4e303c4 --- /dev/null +++ b/packages/mcumgr/src/serial-peripheral.ts @@ -0,0 +1,208 @@ +import debug from 'debug'; +import {setTimeout} from 'node:timers/promises'; +import {SerialPort} from 'serialport'; + +import { Peripheral } from './peripheral.js'; +import crc16 from './util/crc16.js'; +import toUint16 from './util/to-uint16.js'; +import convertToHex from './util/convert-to-hex.js'; +import fromUint16 from "./util/from-uint16.js"; + +// The 1st byte of the first message packet of the message +const FIRST_MSG_PACKET_1 = 6; +// The 2nd byte of the first message packet of the message +const FIRST_MSG_PACKET_2 = 9; +// The 1st byte of the non first message packet of the message +const OTHER_MSG_PACKET_1 = 4; +// The 2nd byte of the non first message packet of the message +const OTHER_MSG_PACKET_2 = 20; + +const logger = debug('mcumgr:serial'); + +export class SerialPeripheral implements Peripheral { + #serialPort: SerialPort; + + constructor(devicePath: string) { + logger('constructor options: %o', { devicePath }); + this.#serialPort = new SerialPort({ + path: devicePath, + baudRate: 115200, + autoOpen: false, + }); + } + + async close(): Promise { + logger('Start closing port'); + if(!this.#serialPort.isOpen) { + logger('Port already closed'); + return; + } + + return new Promise((resolve, reject) => { + logger('Closing port'); + this.#serialPort.close(err => { + if (err) { + logger('Port closing error: %s', err.message); + return reject(err); + } + + logger('Port closed'); + resolve(); + }); + }); + } + + async open(): Promise { + logger('Start opening port'); + if (this.#serialPort.isOpen) { + logger('Port already open'); + return; + } + + return new Promise((resolve, reject) => { + logger('Opening port'); + this.#serialPort.open(err => { + if (err) { + logger('Error opening port: %s', err.message); + return reject(err); + } + + logger('Port opened'); + resolve(); + }); + }); + } + + async read(timeout: number): Promise { + logger('Start reading'); + let raw = Buffer.alloc(0); + const startTime = new Date().getTime(); + + while (true) { + const response = this.#serialPort.read(); + logger('Read response: %o', response); + let exit = false; + + if (response) { + for (let i = 0; i < response.length; i++) { + const b = response[i]; + + // skip the carriage return + if (b === 13) + continue; + + // if the byte is line feed then the full response arrived + if (b === 10) { + exit = true; + break; + } + + raw = Buffer.concat([raw, Buffer.from([b])]); + } + } + + if (exit) { + break; + } + + logger('Read wait'); + await setTimeout(2); + + if (new Date().getTime() - startTime > timeout) { + logger('Read timeout'); + throw new Error('Read SerialPort timeout'); + } + } + + logger("raw response: %s", convertToHex([...raw])); + + // The message packet does not start with the proper header bytes throw an error + if ((raw[0] !== FIRST_MSG_PACKET_1 || raw[1] !== FIRST_MSG_PACKET_2) + && (raw[0] !== OTHER_MSG_PACKET_1 || raw[1] !== OTHER_MSG_PACKET_2)) + throw new Error('Invalid serial packet response header'); // TODO: custom error + + const data = raw.subarray(2); + const bytes = Buffer.from(data.toString(), "base64"); + const messageLength = fromUint16(bytes.subarray(0, 2)); + const crc = fromUint16(bytes.subarray(bytes.length - 2)); + // TODO: validate message length + const nmpData = bytes.subarray(2, bytes.length - 2); + const calculatedCrc = crc16(nmpData); + + if (calculatedCrc !== crc) { + logger('Invalid serial packet CRC. Expected: %d Actual: %d', crc, calculatedCrc); + throw new Error('Invalid serial packet CRC'); // TODO: custom error + } + + return nmpData; + } + + async write(message: Array): Promise { + logger('Start writing'); + const crc = crc16(message); + // The length is a 2 byte CRC + length of the message + const dataLength = 2 + message.length; + const data = [ + ...toUint16(dataLength), + ...message, + ...toUint16(crc), + ] as Array; + + const base64Encoded = Buffer.from(data).toString('base64'); + logger('Base64 encoded message: ', base64Encoded); + const totalLength = base64Encoded.length; + let written = 0; + + while (written < totalLength) { + // Write the packet stat designators. + // They are different whether we are starting a new packet or continuing one + if (written === 0) { + await this.#_write([FIRST_MSG_PACKET_1, FIRST_MSG_PACKET_2]); + } else { + // Slower platforms take some time to process each segment and have very small receive buffers. + // Give them a bit of time here + await setTimeout(2); + await this.#_write([OTHER_MSG_PACKET_1, OTHER_MSG_PACKET_2]); + } + + // Ensure that the total frame fits into 128 bytes. + // Base 64 is 3 ascii to 4 base 64 byte encoding, so the number below should be a multiple of 4. + // We need to save room for the header (2 byte) and carriage return (and possibly LF 2 bytes). + const writeLen = Math.min(1020, totalLength - written); + await this.#_write(base64Encoded.slice(written, written + writeLen)); + await this.#_write('\n'); + + written += writeLen; + } + } + + /** + * Drain or flush the message from the serial buffer + */ + async #drain(): Promise { + logger('Start draining'); + return new Promise((resolve, reject) => { + this.#serialPort.drain(err => { + if (err) { + logger('Error draining: %s', err.message); + return reject(err); + } + + logger('Drained'); + resolve(); + }); + }); + } + + async #_write(data: any): Promise { + await this.open(); + + logger('Write packet %o', data); + const drained = this.#serialPort.write(data); + + if (drained) + return; + + return this.#drain(); + } +} diff --git a/packages/mcumgr/src/tsconfig.json b/packages/mcumgr/src/tsconfig.json new file mode 100644 index 00000000000..1ac46647800 --- /dev/null +++ b/packages/mcumgr/src/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../tsconfig.json", + "compilerOptions": { + "baseUrl": "./", + "outDir": "../dist" + } +} diff --git a/packages/mcumgr/src/util/cbor.ts b/packages/mcumgr/src/util/cbor.ts new file mode 100644 index 00000000000..7ec38d54731 --- /dev/null +++ b/packages/mcumgr/src/util/cbor.ts @@ -0,0 +1,381 @@ +/** + * Original implementation https://github.com/boogie/mcumgr-web/blob/main/js/cbor.js + * Used it because it generates same cbor that the go mcumgr and was easier to reverse engineering the go code. + * I modified minimally + * - add typescript types + * - use `let` instead of `var` + * - remove none node module info + * + * TODO: review it and optimise or just use other npm lib. + */ + +const POW_2_24 = 5.960464477539063e-8, + POW_2_32 = 4294967296, + POW_2_53 = 9007199254740992; + +export function encode(value: any) { + let data = new ArrayBuffer(256); + let dataView = new DataView(data); + let lastLength: number; + let offset = 0; + + function prepareWrite(length: number) { + let newByteLength = data.byteLength; + let requiredLength = offset + length; + while (newByteLength < requiredLength) + newByteLength <<= 1; + if (newByteLength !== data.byteLength) { + let oldDataView = dataView; + data = new ArrayBuffer(newByteLength); + dataView = new DataView(data); + let uint32count = (offset + 3) >> 2; + for (let i = 0; i < uint32count; ++i) + dataView.setUint32(i << 2, oldDataView.getUint32(i << 2)); + } + + lastLength = length; + return dataView; + } + function commitWrite(x?: any) { + offset += lastLength; + } + function writeFloat64(value) { + commitWrite(prepareWrite(8).setFloat64(offset, value)); + } + function writeUint8(value) { + commitWrite(prepareWrite(1).setUint8(offset, value)); + } + function writeUint8Array(value) { + let dataView = prepareWrite(value.length); + for (let i = 0; i < value.length; ++i) + dataView.setUint8(offset + i, value[i]); + commitWrite(); + } + function writeUint16(value) { + commitWrite(prepareWrite(2).setUint16(offset, value)); + } + function writeUint32(value) { + commitWrite(prepareWrite(4).setUint32(offset, value)); + } + function writeUint64(value) { + let low = value % POW_2_32; + let high = (value - low) / POW_2_32; + let dataView = prepareWrite(8); + dataView.setUint32(offset, high); + dataView.setUint32(offset + 4, low); + commitWrite(); + } + function writeTypeAndLength(type, length) { + if (length < 24) { + writeUint8(type << 5 | length); + } else if (length < 0x100) { + writeUint8(type << 5 | 24); + writeUint8(length); + } else if (length < 0x10000) { + writeUint8(type << 5 | 25); + writeUint16(length); + } else if (length < 0x100000000) { + writeUint8(type << 5 | 26); + writeUint32(length); + } else { + writeUint8(type << 5 | 27); + writeUint64(length); + } + } + + function encodeItem(value) { + let i; + + if (value === false) + return writeUint8(0xf4); + if (value === true) + return writeUint8(0xf5); + if (value === null) + return writeUint8(0xf6); + if (value === undefined) + return writeUint8(0xf7); + + switch (typeof value) { + case "number": + if (Math.floor(value) === value) { + if (0 <= value && value <= POW_2_53) + return writeTypeAndLength(0, value); + if (-POW_2_53 <= value && value < 0) + return writeTypeAndLength(1, -(value + 1)); + } + writeUint8(0xfb); + return writeFloat64(value); + + case "string": + let utf8data = []; + for (i = 0; i < value.length; ++i) { + let charCode = value.charCodeAt(i); + if (charCode < 0x80) { + utf8data.push(charCode); + } else if (charCode < 0x800) { + utf8data.push(0xc0 | charCode >> 6); + utf8data.push(0x80 | charCode & 0x3f); + } else if (charCode < 0xd800) { + utf8data.push(0xe0 | charCode >> 12); + utf8data.push(0x80 | (charCode >> 6) & 0x3f); + utf8data.push(0x80 | charCode & 0x3f); + } else { + charCode = (charCode & 0x3ff) << 10; + charCode |= value.charCodeAt(++i) & 0x3ff; + charCode += 0x10000; + + utf8data.push(0xf0 | charCode >> 18); + utf8data.push(0x80 | (charCode >> 12) & 0x3f); + utf8data.push(0x80 | (charCode >> 6) & 0x3f); + utf8data.push(0x80 | charCode & 0x3f); + } + } + + writeTypeAndLength(3, utf8data.length); + return writeUint8Array(utf8data); + + default: + let length; + if (Array.isArray(value)) { + length = value.length; + writeTypeAndLength(4, length); + for (i = 0; i < length; ++i) + encodeItem(value[i]); + } else if (value instanceof Uint8Array) { + writeTypeAndLength(2, value.length); + writeUint8Array(value); + } else { + let keys = Object.keys(value); + length = keys.length; + writeTypeAndLength(5, length); + for (i = 0; i < length; ++i) { + let key = keys[i]; + encodeItem(key); + encodeItem(value[key]); + } + } + } + } + + encodeItem(value); + + if ("slice" in data) + return data.slice(0, offset); + + let ret = new ArrayBuffer(offset); + let retView = new DataView(ret); + for (let i = 0; i < offset; ++i) + retView.setUint8(i, dataView.getUint8(i)); + return ret; +} + +export function decode(data: any, tagger?: Function, simpleValue?: Function) { + let dataView = new DataView(data); + let offset = 0; + + if (typeof tagger !== "function") + tagger = function(value) { return value; }; + if (typeof simpleValue !== "function") + simpleValue = function() { return undefined; }; + + function commitRead(length, value) { + offset += length; + return value; + } + function readArrayBuffer(length) { + return commitRead(length, new Uint8Array(data, offset, length)); + } + function readFloat16() { + let tempArrayBuffer = new ArrayBuffer(4); + let tempDataView = new DataView(tempArrayBuffer); + let value = readUint16(); + + let sign = value & 0x8000; + let exponent = value & 0x7c00; + let fraction = value & 0x03ff; + + if (exponent === 0x7c00) + exponent = 0xff << 10; + else if (exponent !== 0) + exponent += (127 - 15) << 10; + else if (fraction !== 0) + return (sign ? -1 : 1) * fraction * POW_2_24; + + tempDataView.setUint32(0, sign << 16 | exponent << 13 | fraction << 13); + return tempDataView.getFloat32(0); + } + function readFloat32() { + return commitRead(4, dataView.getFloat32(offset)); + } + function readFloat64() { + return commitRead(8, dataView.getFloat64(offset)); + } + function readUint8() { + return commitRead(1, dataView.getUint8(offset)); + } + function readUint16() { + return commitRead(2, dataView.getUint16(offset)); + } + function readUint32() { + return commitRead(4, dataView.getUint32(offset)); + } + function readUint64() { + return readUint32() * POW_2_32 + readUint32(); + } + function readBreak() { + if (dataView.getUint8(offset) !== 0xff) + return false; + offset += 1; + return true; + } + function readLength(additionalInformation) { + if (additionalInformation < 24) + return additionalInformation; + if (additionalInformation === 24) + return readUint8(); + if (additionalInformation === 25) + return readUint16(); + if (additionalInformation === 26) + return readUint32(); + if (additionalInformation === 27) + return readUint64(); + if (additionalInformation === 31) + return -1; + throw "Invalid length encoding"; + } + function readIndefiniteStringLength(majorType) { + let initialByte = readUint8(); + if (initialByte === 0xff) + return -1; + let length = readLength(initialByte & 0x1f); + if (length < 0 || (initialByte >> 5) !== majorType) + throw "Invalid indefinite length element"; + return length; + } + + function appendUtf16Data(utf16data, length) { + for (let i = 0; i < length; ++i) { + let value = readUint8(); + if (value & 0x80) { + if (value < 0xe0) { + value = (value & 0x1f) << 6 + | (readUint8() & 0x3f); + length -= 1; + } else if (value < 0xf0) { + value = (value & 0x0f) << 12 + | (readUint8() & 0x3f) << 6 + | (readUint8() & 0x3f); + length -= 2; + } else { + value = (value & 0x0f) << 18 + | (readUint8() & 0x3f) << 12 + | (readUint8() & 0x3f) << 6 + | (readUint8() & 0x3f); + length -= 3; + } + } + + if (value < 0x10000) { + utf16data.push(value); + } else { + value -= 0x10000; + utf16data.push(0xd800 | (value >> 10)); + utf16data.push(0xdc00 | (value & 0x3ff)); + } + } + } + + function decodeItem() { + let initialByte = readUint8(); + let majorType = initialByte >> 5; + let additionalInformation = initialByte & 0x1f; + let i; + let length; + + if (majorType === 7) { + switch (additionalInformation) { + case 25: + return readFloat16(); + case 26: + return readFloat32(); + case 27: + return readFloat64(); + } + } + + length = readLength(additionalInformation); + if (length < 0 && (majorType < 2 || 6 < majorType)) + throw "Invalid length"; + + switch (majorType) { + case 0: + return length; + case 1: + return -1 - length; + case 2: + if (length < 0) { + let elements = []; + let fullArrayLength = 0; + while ((length = readIndefiniteStringLength(majorType)) >= 0) { + fullArrayLength += length; + elements.push(readArrayBuffer(length)); + } + let fullArray = new Uint8Array(fullArrayLength); + let fullArrayOffset = 0; + for (i = 0; i < elements.length; ++i) { + fullArray.set(elements[i], fullArrayOffset); + fullArrayOffset += elements[i].length; + } + return fullArray; + } + return readArrayBuffer(length); + case 3: + let utf16data = []; + if (length < 0) { + while ((length = readIndefiniteStringLength(majorType)) >= 0) + appendUtf16Data(utf16data, length); + } else + appendUtf16Data(utf16data, length); + return String.fromCharCode.apply(null, utf16data); + case 4: + let retArray; + if (length < 0) { + retArray = []; + while (!readBreak()) + retArray.push(decodeItem()); + } else { + retArray = new Array(length); + for (i = 0; i < length; ++i) + retArray[i] = decodeItem(); + } + return retArray; + case 5: + let retObject = {}; + for (i = 0; i < length || length < 0 && !readBreak(); ++i) { + let key = decodeItem(); + retObject[key] = decodeItem(); + } + return retObject; + case 6: + return tagger(decodeItem(), length); + case 7: + switch (length) { + case 20: + return false; + case 21: + return true; + case 22: + return null; + case 23: + return undefined; + default: + return simpleValue(length); + } + } + } + + let ret = decodeItem(); + if (offset !== data.byteLength) + throw "Remaining bytes"; + return ret; +} diff --git a/packages/mcumgr/src/util/convert-to-hex.ts b/packages/mcumgr/src/util/convert-to-hex.ts new file mode 100644 index 00000000000..7aa76e307f3 --- /dev/null +++ b/packages/mcumgr/src/util/convert-to-hex.ts @@ -0,0 +1,6 @@ +/** + * Convert the byte array to hexadecimal string + */ +export default function convertToHex(arr: Array): String { + return arr.map(x => x.toString(16).padStart(2, '0')).join(' '); +} diff --git a/packages/mcumgr/src/util/crc16.ts b/packages/mcumgr/src/util/crc16.ts new file mode 100644 index 00000000000..285e9ea4516 --- /dev/null +++ b/packages/mcumgr/src/util/crc16.ts @@ -0,0 +1,45 @@ +const CRC16TABLE = new Uint16Array([ + 0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50a5, 0x60c6, 0x70e7, + 0x8108, 0x9129, 0xa14a, 0xb16b, 0xc18c, 0xd1ad, 0xe1ce, 0xf1ef, + 0x1231, 0x0210, 0x3273, 0x2252, 0x52b5, 0x4294, 0x72f7, 0x62d6, + 0x9339, 0x8318, 0xb37b, 0xa35a, 0xd3bd, 0xc39c, 0xf3ff, 0xe3de, + 0x2462, 0x3443, 0x0420, 0x1401, 0x64e6, 0x74c7, 0x44a4, 0x5485, + 0xa56a, 0xb54b, 0x8528, 0x9509, 0xe5ee, 0xf5cf, 0xc5ac, 0xd58d, + 0x3653, 0x2672, 0x1611, 0x0630, 0x76d7, 0x66f6, 0x5695, 0x46b4, + 0xb75b, 0xa77a, 0x9719, 0x8738, 0xf7df, 0xe7fe, 0xd79d, 0xc7bc, + 0x48c4, 0x58e5, 0x6886, 0x78a7, 0x0840, 0x1861, 0x2802, 0x3823, + 0xc9cc, 0xd9ed, 0xe98e, 0xf9af, 0x8948, 0x9969, 0xa90a, 0xb92b, + 0x5af5, 0x4ad4, 0x7ab7, 0x6a96, 0x1a71, 0x0a50, 0x3a33, 0x2a12, + 0xdbfd, 0xcbdc, 0xfbbf, 0xeb9e, 0x9b79, 0x8b58, 0xbb3b, 0xab1a, + 0x6ca6, 0x7c87, 0x4ce4, 0x5cc5, 0x2c22, 0x3c03, 0x0c60, 0x1c41, + 0xedae, 0xfd8f, 0xcdec, 0xddcd, 0xad2a, 0xbd0b, 0x8d68, 0x9d49, + 0x7e97, 0x6eb6, 0x5ed5, 0x4ef4, 0x3e13, 0x2e32, 0x1e51, 0x0e70, + 0xff9f, 0xefbe, 0xdfdd, 0xcffc, 0xbf1b, 0xaf3a, 0x9f59, 0x8f78, + 0x9188, 0x81a9, 0xb1ca, 0xa1eb, 0xd10c, 0xc12d, 0xf14e, 0xe16f, + 0x1080, 0x00a1, 0x30c2, 0x20e3, 0x5004, 0x4025, 0x7046, 0x6067, + 0x83b9, 0x9398, 0xa3fb, 0xb3da, 0xc33d, 0xd31c, 0xe37f, 0xf35e, + 0x02b1, 0x1290, 0x22f3, 0x32d2, 0x4235, 0x5214, 0x6277, 0x7256, + 0xb5ea, 0xa5cb, 0x95a8, 0x8589, 0xf56e, 0xe54f, 0xd52c, 0xc50d, + 0x34e2, 0x24c3, 0x14a0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405, + 0xa7db, 0xb7fa, 0x8799, 0x97b8, 0xe75f, 0xf77e, 0xc71d, 0xd73c, + 0x26d3, 0x36f2, 0x0691, 0x16b0, 0x6657, 0x7676, 0x4615, 0x5634, + 0xd94c, 0xc96d, 0xf90e, 0xe92f, 0x99c8, 0x89e9, 0xb98a, 0xa9ab, + 0x5844, 0x4865, 0x7806, 0x6827, 0x18c0, 0x08e1, 0x3882, 0x28a3, + 0xcb7d, 0xdb5c, 0xeb3f, 0xfb1e, 0x8bf9, 0x9bd8, 0xabbb, 0xbb9a, + 0x4a75, 0x5a54, 0x6a37, 0x7a16, 0x0af1, 0x1ad0, 0x2ab3, 0x3a92, + 0xfd2e, 0xed0f, 0xdd6c, 0xcd4d, 0xbdaa, 0xad8b, 0x9de8, 0x8dc9, + 0x7c26, 0x6c07, 0x5c64, 0x4c45, 0x3ca2, 0x2c83, 0x1ce0, 0x0cc1, + 0xef1f, 0xff3e, 0xcf5d, 0xdf7c, 0xaf9b, 0xbfba, 0x8fd9, 0x9ff8, + 0x6e17, 0x7e36, 0x4e55, 0x5e74, 0x2e93, 0x3eb2, 0x0ed1, 0x1ef0 +]); + +export default function crc16(data: ArrayLike): number { + let crc = 0; + const l = data.length; + for (let i = 0; i < l; i++) { + crc = ((crc << 8) & 0xff00) ^ CRC16TABLE[((crc >> 8) & 0xff) ^ data[i]]; + } + + return crc; +} + diff --git a/packages/mcumgr/src/util/from-uint16.ts b/packages/mcumgr/src/util/from-uint16.ts new file mode 100644 index 00000000000..ae66fda9f22 --- /dev/null +++ b/packages/mcumgr/src/util/from-uint16.ts @@ -0,0 +1,6 @@ +/** + * Create a number from the first 2 bytes of the Array. It uses big edian encoding + */ +export default function fromUint16(arr: ArrayLike | Buffer): number { + return (arr[0] * 256) + arr[1]; +} diff --git a/packages/mcumgr/src/util/to-uint16.ts b/packages/mcumgr/src/util/to-uint16.ts new file mode 100644 index 00000000000..8fabdeb2b3e --- /dev/null +++ b/packages/mcumgr/src/util/to-uint16.ts @@ -0,0 +1,9 @@ +/** + * Convert a number to UInt16 big edian encoded array + */ +export default function toUint16(data: number): number[] { + return [ + data >> 8, + data & 255, + ]; +} diff --git a/packages/mcumgr/test/util/crc16.spec.ts b/packages/mcumgr/test/util/crc16.spec.ts new file mode 100644 index 00000000000..252b011aa10 --- /dev/null +++ b/packages/mcumgr/test/util/crc16.spec.ts @@ -0,0 +1,15 @@ +import * as assert from 'node:assert/strict'; + +import crc16 from '../../src/util/crc16.js'; + +describe('crc16', () => { + it('should work', () => { + const crc = crc16([ + 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x09, 0x00, + 0xA1, 0x61, 0x64, 0x65, 0x68, 0x65, 0x6C, 0x6C, + 0x6F, + ]); + + assert.equal(crc, 24488); + }); +}); diff --git a/packages/mcumgr/tsconfig.json b/packages/mcumgr/tsconfig.json new file mode 100644 index 00000000000..bcab5431aac --- /dev/null +++ b/packages/mcumgr/tsconfig.json @@ -0,0 +1,6 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "baseUrl": "./" + } +} diff --git a/packages/test-serializer/spec/test-convert-user-config-npm-script.spec.ts b/packages/test-serializer/spec/test-convert-user-config-npm-script.spec.ts index 48ea33ac772..c66be013637 100644 --- a/packages/test-serializer/spec/test-convert-user-config-npm-script.spec.ts +++ b/packages/test-serializer/spec/test-convert-user-config-npm-script.spec.ts @@ -20,10 +20,21 @@ describe('convert-user-config-to-bin npm script', () => { await remove(tmpDirPath); }); - it('should work', async () => { + it('should work with uhk60', async () => { const response = spawnSync( 'npm', - ['run', 'convert-user-config-to-bin', '--', tmpConfigPath], + ['run', 'convert-user-config-to-bin', '--', 'uhk60', tmpConfigPath], + { shell: true, cwd: rootDirPath} + ); + + expect(response.error).toEqual(undefined); + expect(await pathExists(tmpConfigPath)).toEqual(true); + }); + + it('should work with uhk80', async () => { + const response = spawnSync( + 'npm', + ['run', 'convert-user-config-to-bin', '--', 'uhk80', tmpConfigPath], { shell: true, cwd: rootDirPath} ); diff --git a/packages/test-serializer/spec/test-serializer.spec.ts b/packages/test-serializer/spec/test-serializer.spec.ts index 5e7f6043c1d..5a92571709b 100644 --- a/packages/test-serializer/spec/test-serializer.spec.ts +++ b/packages/test-serializer/spec/test-serializer.spec.ts @@ -2,7 +2,7 @@ import { UhkBuffer, UserConfiguration } from '../../uhk-common/src/index.js'; import fs from 'fs'; -const userConfig = JSON.parse(fs.readFileSync('../uhk-web/src/app/services/user-config.json', { encoding: 'utf8' })); +const userConfig = JSON.parse(fs.readFileSync('../uhk-web/src/app/services/user-config-80.json', { encoding: 'utf8' })); describe('Test Serializer', () => { it('full config match', () => { diff --git a/packages/uhk-agent/package-lock.json b/packages/uhk-agent/package-lock.json index 7f54d3326fa..a55e6cdd50a 100644 --- a/packages/uhk-agent/package-lock.json +++ b/packages/uhk-agent/package-lock.json @@ -9,102 +9,96 @@ "version": "0.0.0", "license": "See in LICENSE", "dependencies": { - "@fastify/static": "7.0.4", - "command-line-args": "6.0.0", + "@fastify/static": "8.0.2", + "command-line-args": "6.0.1", "command-line-usage": "7.0.3", "decompress": "4.2.1", "decompress-bzip2": "4.0.0", "decompress-targz": "4.1.1", "electron-is-dev": "3.0.1", - "fastify": "4.28.1", + "fastify": "5.1.0", "fs-extra": "11.2.0", "get-port": "7.1.0", - "node-hid": "3.1.0", + "node-hid": "3.1.2", + "serialport": "12.0.0", "sudo-prompt": "9.2.1", "tmp": "0.2.3", - "tslib": "2.6.3" - } - }, - "node_modules/@75lb/deep-merge": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@75lb/deep-merge/-/deep-merge-1.1.1.tgz", - "integrity": "sha512-xvgv6pkMGBA6GwdyJbNAnDmfAIR/DfWhrj9jgWh3TY7gRm3KO46x/GPjRg6wJ0nOepwqrNxFfojebh0Df4h4Tw==", - "dependencies": { - "lodash.assignwith": "^4.2.0", - "typical": "^7.1.1" - }, - "engines": { - "node": ">=12.17" + "tslib": "2.8.1" } }, "node_modules/@fastify/accept-negotiator": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-1.1.0.tgz", - "integrity": "sha512-OIHZrb2ImZ7XG85HXOONLcJWGosv7sIvM2ifAPQVhg9Lv7qdmMBNVaai4QTdyuaqbKM5eO6sLSQOYI7wEQeCJQ==", - "engines": { - "node": ">=14" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.0.0.tgz", + "integrity": "sha512-/Sce/kBzuTxIq5tJh85nVNOq9wKD8s+viIgX0fFMDBdw95gnpf53qmF1oBgJym3cPFliWUuSloVg/1w/rH0FcQ==", + "license": "MIT" }, "node_modules/@fastify/ajv-compiler": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-3.6.0.tgz", - "integrity": "sha512-LwdXQJjmMD+GwLOkP7TVC68qa+pSSogeWWmznRJ/coyTcfe9qA05AHFSe1eZFwK6q+xVRpChnvFUkf1iYaSZsQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.1.tgz", + "integrity": "sha512-DxrBdgsjNLP0YM6W5Hd6/Fmj43S8zMKiFJYgi+Ri3htTGAowPVG/tG1wpnWLMjufEnehRivUCKZ1pLDIoZdTuw==", + "license": "MIT", "dependencies": { - "ajv": "^8.11.0", - "ajv-formats": "^2.1.1", - "fast-uri": "^2.0.0" + "ajv": "^8.12.0", + "ajv-formats": "^3.0.1", + "fast-uri": "^3.0.0" } }, "node_modules/@fastify/error": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/@fastify/error/-/error-3.4.1.tgz", - "integrity": "sha512-wWSvph+29GR783IhmvdwWnN4bUxTD01Vm5Xad4i7i1VuAOItLvbPAb69sb0IQ2N57yprvhNIwAP5B6xfKTmjmQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.0.0.tgz", + "integrity": "sha512-OO/SA8As24JtT1usTUTKgGH7uLvhfwZPwlptRi2Dp5P4KKmJI3gvsZ8MIHnNwDs4sLf/aai5LzTyl66xr7qMxA==", + "license": "MIT" }, "node_modules/@fastify/fast-json-stringify-compiler": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-4.3.0.tgz", - "integrity": "sha512-aZAXGYo6m22Fk1zZzEUKBvut/CIIQe/BapEORnxiD5Qr0kPHqqI69NtEMCme74h+at72sPhbkb4ZrLd1W3KRLA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.0.1.tgz", + "integrity": "sha512-f2d3JExJgFE3UbdFcpPwqNUEoHWmt8pAKf8f+9YuLESdefA0WgqxeT6DrGL4Yrf/9ihXNSKOqpjEmurV405meA==", + "license": "MIT", "dependencies": { - "fast-json-stringify": "^5.7.0" + "fast-json-stringify": "^6.0.0" } }, "node_modules/@fastify/merge-json-schemas": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.1.1.tgz", "integrity": "sha512-fERDVz7topgNjtXsJTTW1JKLy0rhuLRcquYqNR9rF7OcVpCa2OVW49ZPDIhaRRCaUuvVxI+N416xUoF76HNSXA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" } }, "node_modules/@fastify/send": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@fastify/send/-/send-2.1.0.tgz", - "integrity": "sha512-yNYiY6sDkexoJR0D8IDy3aRP3+L4wdqCpvx5WP+VtEU58sn7USmKynBzDQex5X42Zzvw2gNzzYgP90UfWShLFA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-3.1.1.tgz", + "integrity": "sha512-LdiV2mle/2tH8vh6GwGl0ubfUAgvY+9yF9oGI1iiwVyNUVOQamvw5n+OFu6iCNNoyuCY80FFURBn4TZCbTe8LA==", + "license": "MIT", "dependencies": { - "@lukeed/ms": "^2.0.1", + "@lukeed/ms": "^2.0.2", "escape-html": "~1.0.3", "fast-decode-uri-component": "^1.0.1", - "http-errors": "2.0.0", - "mime": "^3.0.0" + "http-errors": "^2.0.0", + "mime": "^3" } }, "node_modules/@fastify/static": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/@fastify/static/-/static-7.0.4.tgz", - "integrity": "sha512-p2uKtaf8BMOZWLs6wu+Ihg7bWNBdjNgCwDza4MJtTqg+5ovKmcbgbR9Xs5/smZ1YISfzKOCNYmZV8LaCj+eJ1Q==", + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-8.0.2.tgz", + "integrity": "sha512-xJ+XaZVl4Y+lKztx8jGi+BE73aByhOmjMgaTx98E4XtVZxUpiaYQIMBlwACsJz+xohm0kvzV34BZoiZ+bsJtBQ==", + "license": "MIT", "dependencies": { - "@fastify/accept-negotiator": "^1.0.0", - "@fastify/send": "^2.0.0", - "content-disposition": "^0.5.3", - "fastify-plugin": "^4.0.0", - "fastq": "^1.17.0", - "glob": "^10.3.4" + "@fastify/accept-negotiator": "^2.0.0", + "@fastify/send": "^3.1.0", + "content-disposition": "^0.5.4", + "fastify-plugin": "^5.0.0", + "fastq": "^1.17.1", + "glob": "^11.0.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==", + "license": "ISC", "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", @@ -121,39 +115,233 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz", "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==", + "license": "MIT", "engines": { "node": ">=8" } }, - "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, + "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==", + "license": "MIT", + "dependencies": { + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" + }, "engines": { - "node": ">=14" + "node": ">=12.0.0" } }, - "node_modules/abort-controller": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", - "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "node_modules/@serialport/bindings-cpp": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-12.0.1.tgz", + "integrity": "sha512-r2XOwY2dDvbW7dKqSPIk2gzsr6M6Qpe9+/Ngs94fNaNlcTRCV02PfaoDmRgcubpNVVcLATlxSxPTIDw12dbKOg==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "@serialport/parser-readline": "11.0.0", + "debug": "4.3.4", + "node-addon-api": "7.0.0", + "node-gyp-build": "4.6.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-delimiter": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz", + "integrity": "sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-readline": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-11.0.0.tgz", + "integrity": "sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA==", + "license": "MIT", "dependencies": { - "event-target-shim": "^5.0.0" + "@serialport/parser-delimiter": "11.0.0" }, "engines": { - "node": ">=6.5" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-12.0.0.tgz", + "integrity": "sha512-0ei0txFAj+s6FTiCJFBJ1T2hpKkX8Md0Pu6dqMrYoirjPskDLJRgZGLqoy3/lnU1bkvHpnJO+9oJ3PB9v8rNlg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-12.0.0.tgz", + "integrity": "sha512-0PfLzO9t2X5ufKuBO34DQKLXrCCqS9xz2D0pfuaLNeTkyGUBv426zxoMf3rsMRodDOZNbFblu3Ae84MOQXjnZw==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-12.0.0.tgz", + "integrity": "sha512-gu26tVt5lQoybhorLTPsH2j2LnX3AOP2x/34+DUSTNaUTzu2fBXw+isVjQJpUBFWu6aeQRZw5bJol5X9Gxjblw==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-12.0.0.tgz", + "integrity": "sha512-GnCh8K0NAESfhCuXAt+FfBRz1Cf9CzIgXfp7SdMgXwrtuUnCC/yuRTUFWRvuzhYKoAo1TL0hhUo77SFHUH1T/w==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-12.0.0.tgz", + "integrity": "sha512-p1hiCRqvGHHLCN/8ZiPUY/G0zrxd7gtZs251n+cfNTn+87rwcdUeu9Dps3Aadx30/sOGGFL6brIRGK4l/t7MuQ==", + "license": "MIT", + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-12.0.0.tgz", + "integrity": "sha512-O7cywCWC8PiOMvo/gglEBfAkLjp/SENEML46BXDykfKP5mTPM46XMaX1L0waWU6DXJpBgjaL7+yX6VriVPbN4w==", + "license": "MIT", + "dependencies": { + "@serialport/parser-delimiter": "12.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-12.0.0.tgz", + "integrity": "sha512-ygDwj3O4SDpZlbrRUraoXIoIqb8sM7aMKryGjYTIF0JRnKeB1ys8+wIp0RFMdFbO62YriUDextHB5Um5cKFSWg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-12.0.0.tgz", + "integrity": "sha512-dCAVh4P/pZrLcPv9NJ2mvPRBg64L5jXuiRxIlyxxdZGH4WubwXVXY/kBTihQmiAMPxbT3yshSX8f2+feqWsxqA==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-slip-encoder": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-12.0.0.tgz", + "integrity": "sha512-0APxDGR9YvJXTRfY+uRGhzOhTpU5akSH183RUcwzN7QXh8/1jwFsFLCu0grmAUfi+fItCkR+Xr1TcNJLR13VNA==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-spacepacket": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-12.0.0.tgz", + "integrity": "sha512-dozONxhPC/78pntuxpz/NOtVps8qIc/UZzdc/LuPvVsqCoJXiRxOg6ZtCP/W58iibJDKPZPAWPGYeZt9DJxI+Q==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-12.0.0.tgz", + "integrity": "sha512-9On64rhzuqKdOQyiYLYv2lQOh3TZU/D3+IWCR5gk0alPel2nwpp4YwDEGiUBfrQZEdQ6xww0PWkzqth4wqwX3Q==", + "license": "MIT", + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "debug": "4.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, "node_modules/abstract-logging": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz", - "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==" + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==", + "license": "MIT" }, "node_modules/ajv": { "version": "8.17.1", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -166,9 +354,10 @@ } }, "node_modules/ajv-formats": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", - "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -181,15 +370,11 @@ } } }, - "node_modules/ajv/node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" - }, "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==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -201,6 +386,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -215,6 +401,7 @@ "version": "6.2.2", "resolved": "https://registry.npmjs.org/array-back/-/array-back-6.2.2.tgz", "integrity": "sha512-gUAZ7HPyb4SJczXAMUXMGAvI976JoK3qEx9v1FTmeYuJj0IBiaKttG1ydtGKdkfqWkIkouke7nG8ufGy77+Cvw==", + "license": "MIT", "engines": { "node": ">=12.17" } @@ -223,23 +410,26 @@ "version": "1.0.0", "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==", + "license": "MIT", "engines": { "node": ">=8.0.0" } }, "node_modules/avvio": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/avvio/-/avvio-8.3.2.tgz", - "integrity": "sha512-st8e519GWHa/azv8S87mcJvZs4WsgTBjOw/Ih1CP6u+8SZvcOeAYNG6JbsIrAUUJJ7JfmrnOkR8ipDS+u9SIRQ==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.1.0.tgz", + "integrity": "sha512-fYASnYi600CsH/j9EQov7lECAniYiBFiiAtBNuZYLA2leLe9qOvZzqYHFjtIj6gD2VMoMLP14834LFWvr4IfDw==", + "license": "MIT", "dependencies": { - "@fastify/error": "^3.3.0", + "@fastify/error": "^4.0.0", "fastq": "^1.17.1" } }, "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -258,56 +448,32 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/bl": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "license": "MIT", "dependencies": { "readable-stream": "^2.3.5", "safe-buffer": "^5.1.1" } }, - "node_modules/bl/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/bl/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/bl/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/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "funding": [ { "type": "github", @@ -322,15 +488,17 @@ "url": "https://feross.org/support" } ], + "license": "MIT", "dependencies": { "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "ieee754": "^1.1.13" } }, "node_modules/buffer-alloc": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/buffer-alloc/-/buffer-alloc-1.2.0.tgz", "integrity": "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow==", + "license": "MIT", "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" @@ -339,12 +507,14 @@ "node_modules/buffer-alloc-unsafe": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/buffer-alloc-unsafe/-/buffer-alloc-unsafe-1.1.0.tgz", - "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==" + "integrity": "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg==", + "license": "MIT" }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", "engines": { "node": "*" } @@ -352,12 +522,14 @@ "node_modules/buffer-fill": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/buffer-fill/-/buffer-fill-1.0.0.tgz", - "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==" + "integrity": "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ==", + "license": "MIT" }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -373,6 +545,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/chalk-template/-/chalk-template-0.4.0.tgz", "integrity": "sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==", + "license": "MIT", "dependencies": { "chalk": "^4.1.2" }, @@ -387,6 +560,7 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -400,6 +574,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -407,12 +582,14 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -426,6 +603,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -437,6 +615,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -453,6 +632,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -463,26 +643,37 @@ "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==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/command-line-args": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.0.tgz", - "integrity": "sha512-zDdHxHzlCp/gA1gy0VtPK3YL0Aob3ijJdwZ7H3HSl55hh8EziLtRlyj/od8EGRJfX8IjussC/mQkScl2Ms5Suw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-6.0.1.tgz", + "integrity": "sha512-Jr3eByUjqyK0qd8W0SGFW1nZwqCaNCtbXjRo2cRJC1OYxWl3MZ5t1US3jq+cO4sPavqgw4l9BMGX0CBe+trepg==", + "license": "MIT", "dependencies": { "array-back": "^6.2.2", - "find-replace": "^5.0.1", + "find-replace": "^5.0.2", "lodash.camelcase": "^4.3.0", - "typical": "^7.1.1" + "typical": "^7.2.0" }, "engines": { "node": ">=12.20" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } } }, "node_modules/command-line-usage": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-7.0.3.tgz", "integrity": "sha512-PqMLy5+YGwhMh1wS04mVG44oqDsgyLRSKJBdOo1bnYhMKBW65gZF1dRp2OZRhiTjgUHljy99qkO7bsctLaw35Q==", + "license": "MIT", "dependencies": { "array-back": "^6.2.2", "chalk-template": "^0.4.0", @@ -496,12 +687,14 @@ "node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "license": "MIT", "dependencies": { "safe-buffer": "5.2.1" }, @@ -510,22 +703,25 @@ } }, "node_modules/cookie": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", - "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.0.1.tgz", + "integrity": "sha512-Xd8lFX4LM9QEEwxQpF9J9NTUh8pmdJO0cyRJhFiDoLTk2eH8FXlRv2IFGYVadZpqI3j8fhNrSdKCeYPxiAhLXw==", + "license": "MIT", "engines": { - "node": ">= 0.6" + "node": ">=18" } }, "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==" + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "license": "MIT" }, "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==", + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", + "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "license": "MIT", "dependencies": { "path-key": "^3.1.0", "shebang-command": "^2.0.0", @@ -535,10 +731,28 @@ "node": ">= 8" } }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/decompress": { "version": "4.2.1", "resolved": "https://registry.npmjs.org/decompress/-/decompress-4.2.1.tgz", "integrity": "sha512-e48kc2IjU+2Zw8cTb6VZcJQ3lgVbS4uuB1TfCHbiZIP/haNXm+SVyhu+87jts5/3ROpd82GSVCoNs/z8l4ZOaQ==", + "license": "MIT", "dependencies": { "decompress-tar": "^4.0.0", "decompress-tarbz2": "^4.0.0", @@ -557,6 +771,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/decompress-bzip2/-/decompress-bzip2-4.0.0.tgz", "integrity": "sha512-RwEcbZWaM7F5EiYfsAXUmZ/KLEVAPjYXfGbb5bztXZQ3d5PMpXYxa/1j04QL/gjotRdmzpHh++/cxz+rNZ4AZg==", + "license": "MIT", "dependencies": { "file-type": "^4.3.0", "seek-bzip": "^1.0.5" @@ -569,6 +784,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-4.1.1.tgz", "integrity": "sha512-JdJMaCrGpB5fESVyxwpCx4Jdj2AagLmv3y58Qy4GE6HMVjWz1FeVQk1Ct4Kye7PftcdOo/7U7UKzYBJgqnGeUQ==", + "license": "MIT", "dependencies": { "file-type": "^5.2.0", "is-stream": "^1.1.0", @@ -582,6 +798,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -590,6 +807,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-tarbz2/-/decompress-tarbz2-4.1.1.tgz", "integrity": "sha512-s88xLzf1r81ICXLAVQVzaN6ZmX4A6U4z2nMbOwobxkLoIIfjVMBg7TeguTUXkKeXni795B6y5rnvDw7rxhAq9A==", + "license": "MIT", "dependencies": { "decompress-tar": "^4.1.0", "file-type": "^6.1.0", @@ -605,6 +823,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-6.2.0.tgz", "integrity": "sha512-YPcTBDV+2Tm0VqjybVd32MHdlEGAtuxS3VAYsumFokDSMG+ROT5wawGlnHDoz7bfMcMDt9hxuXvXwoKUx2fkOg==", + "license": "MIT", "engines": { "node": ">=4" } @@ -613,6 +832,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/decompress-targz/-/decompress-targz-4.1.1.tgz", "integrity": "sha512-4z81Znfr6chWnRDNfFNqLwPvm4db3WuZkqV+UgXQzSngG3CEKdBkw5jrv3axjjL96glyiiKjsxJG3X6WBZwX3w==", + "license": "MIT", "dependencies": { "decompress-tar": "^4.1.1", "file-type": "^5.2.0", @@ -626,6 +846,7 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-5.2.0.tgz", "integrity": "sha512-Iq1nJ6D2+yIO4c8HHg4fyVb8mAJieo1Oloy1mLLaB2PvezNedhBVm+QU7g0qM42aiMbRXTxKKwGD17rjKNJYVQ==", + "license": "MIT", "engines": { "node": ">=4" } @@ -634,6 +855,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/decompress-unzip/-/decompress-unzip-4.0.1.tgz", "integrity": "sha512-1fqeluvxgnn86MOh66u8FjbtJpAFv5wgCT9Iw8rcBqQcCo5tO8eiJw7NNTrvt9n4CRBVq7CstiS922oPgyGLrw==", + "license": "MIT", "dependencies": { "file-type": "^3.8.0", "get-stream": "^2.2.0", @@ -648,6 +870,7 @@ "version": "3.9.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-3.9.0.tgz", "integrity": "sha512-RLoqTXE8/vPmMuTI88DAzhMYC99I8BWv7zYP4A1puo5HIjEJ5EX48ighy4ZyKMG9EDXxBgW6e++cn7d1xuFghA==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -656,6 +879,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", "engines": { "node": ">= 0.8" } @@ -663,12 +887,14 @@ "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/electron-is-dev": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/electron-is-dev/-/electron-is-dev-3.0.1.tgz", "integrity": "sha512-8TjjAh8Ec51hUi3o4TaU0mD3GMTOESi866oRNavj9A3IQJ7pmv+MJVmdZBFGw4GFT36X7bkqnuDNYvkQgvyI8Q==", + "license": "MIT", "engines": { "node": ">=18" }, @@ -679,20 +905,23 @@ "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==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/escalade": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", - "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -700,73 +929,47 @@ "node_modules/escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" - }, - "node_modules/event-target-shim": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", - "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", - "engines": { - "node": ">=6" - } - }, - "node_modules/events": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", - "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", - "engines": { - "node": ">=0.8.x" - } - }, - "node_modules/fast-content-type-parse": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-1.1.0.tgz", - "integrity": "sha512-fBHHqSTFLVnR61C+gltJuE5GkVQMV0S2nqUO8TJ+5Z3qAKG8vAx4FKai1s5jq/inV1+sREynIWSuQ6HgoSXpDQ==" + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT" }, "node_modules/fast-decode-uri-component": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz", - "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==" + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==", + "license": "MIT" }, "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-json-stringify": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-5.16.1.tgz", - "integrity": "sha512-KAdnLvy1yu/XrRtP+LJnxbBGrhN+xXu+gt3EUvZhYGKCr3lFHq/7UFJHHFgmJKoqlh6B40bZLEv7w46B0mqn1g==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-6.0.0.tgz", + "integrity": "sha512-FGMKZwniMTgZh7zQp9b6XnBVxUmKVahQLQeRQHqwYmPDqDhcEKZ3BaQsxelFFI5PY7nN71OEeiL47/zUWcYe1A==", + "license": "MIT", "dependencies": { - "@fastify/merge-json-schemas": "^0.1.0", - "ajv": "^8.10.0", + "@fastify/merge-json-schemas": "^0.1.1", + "ajv": "^8.12.0", "ajv-formats": "^3.0.1", "fast-deep-equal": "^3.1.3", - "fast-uri": "^2.1.0", + "fast-uri": "^2.3.0", "json-schema-ref-resolver": "^1.0.1", "rfdc": "^1.2.0" } }, - "node_modules/fast-json-stringify/node_modules/ajv-formats": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz", - "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } + "node_modules/fast-json-stringify/node_modules/fast-uri": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", + "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==", + "license": "MIT" }, "node_modules/fast-querystring": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz", "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==", + "license": "MIT", "dependencies": { "fast-decode-uri-component": "^1.0.1" } @@ -775,19 +978,21 @@ "version": "3.5.0", "resolved": "https://registry.npmjs.org/fast-redact/-/fast-redact-3.5.0.tgz", "integrity": "sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==", + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/fast-uri": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-2.4.0.tgz", - "integrity": "sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==" + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "license": "BSD-3-Clause" }, "node_modules/fastify": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/fastify/-/fastify-4.28.1.tgz", - "integrity": "sha512-kFWUtpNr4i7t5vY2EJPCN2KgMVpuqfU4NjnJNCgiNB900oiDeYqaNDRcAfeBbOF5hGixixxcKnOU4KN9z6QncQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.1.0.tgz", + "integrity": "sha512-0SdUC5AoiSgMSc2Vxwv3WyKzyGMDJRAW/PgNsK1kZrnkO6MeqUIW9ovVg9F2UGIqtIcclYMyeJa4rK6OZc7Jxg==", "funding": [ { "type": "github", @@ -798,34 +1003,36 @@ "url": "https://opencollective.com/fastify" } ], + "license": "MIT", "dependencies": { - "@fastify/ajv-compiler": "^3.5.0", - "@fastify/error": "^3.4.0", - "@fastify/fast-json-stringify-compiler": "^4.3.0", + "@fastify/ajv-compiler": "^4.0.0", + "@fastify/error": "^4.0.0", + "@fastify/fast-json-stringify-compiler": "^5.0.0", "abstract-logging": "^2.0.1", - "avvio": "^8.3.0", - "fast-content-type-parse": "^1.1.0", - "fast-json-stringify": "^5.8.0", - "find-my-way": "^8.0.0", - "light-my-request": "^5.11.0", + "avvio": "^9.0.0", + "fast-json-stringify": "^6.0.0", + "find-my-way": "^9.0.0", + "light-my-request": "^6.0.0", "pino": "^9.0.0", - "process-warning": "^3.0.0", + "process-warning": "^4.0.0", "proxy-addr": "^2.0.7", - "rfdc": "^1.3.0", + "rfdc": "^1.3.1", "secure-json-parse": "^2.7.0", - "semver": "^7.5.4", - "toad-cache": "^3.3.0" + "semver": "^7.6.0", + "toad-cache": "^3.7.0" } }, "node_modules/fastify-plugin": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-4.5.1.tgz", - "integrity": "sha512-stRHYGeuqpEZTL1Ef0Ovr2ltazUT9g844X5z/zEBFLG8RYlpDiOCIG+ATvYEp+/zmc7sN29mcIMp8gvYplYPIQ==" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.0.1.tgz", + "integrity": "sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==", + "license": "MIT" }, "node_modules/fastq": { "version": "1.17.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", "dependencies": { "reusify": "^1.0.4" } @@ -834,6 +1041,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", "dependencies": { "pend": "~1.2.0" } @@ -842,38 +1050,47 @@ "version": "4.4.0", "resolved": "https://registry.npmjs.org/file-type/-/file-type-4.4.0.tgz", "integrity": "sha512-f2UbFQEk7LXgWpi5ntcO86OeA/cC80fuDDDaX/fZ2ZGel+AF7leRQqBBW1eJNiiQkrZlAoM6P+VYP5P6bOlDEQ==", + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/find-my-way": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-8.2.0.tgz", - "integrity": "sha512-HdWXgFYc6b1BJcOBDBwjqWuHJj1WYiqrxSh25qtU4DabpMFdj/gSunNBQb83t+8Zt67D7CXEzJWTkxaShMTMOA==", + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.1.0.tgz", + "integrity": "sha512-Y5jIsuYR4BwWDYYQ2A/RWWE6gD8a0FMgtU+HOq1WKku+Cwdz8M1v8wcAmRXXM1/iqtoqg06v+LjAxMYbCjViMw==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-querystring": "^1.0.0", - "safe-regex2": "^3.1.0" + "safe-regex2": "^4.0.0" }, "engines": { "node": ">=14" } }, "node_modules/find-replace": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.1.tgz", - "integrity": "sha512-o5/Y8HrCNRuFF5rdNTkX8Vhv6kTFTV0t1zIoigwlCdbkA9qaapRzxvWPND2VvlFa9LBI05Q1i8ml/saMqkOJUQ==", - "dependencies": { - "array-back": "^6.2.2" - }, + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-5.0.2.tgz", + "integrity": "sha512-Y45BAiE3mz2QsrN2fb5QEtO4qb44NcS7en/0y9PEVsg351HsLeVclP8QPMH79Le9sH3rs5RSwJu99W0WPZO43Q==", + "license": "MIT", "engines": { "node": ">=14" + }, + "peerDependencies": { + "@75lb/nature": "latest" + }, + "peerDependenciesMeta": { + "@75lb/nature": { + "optional": true + } } }, "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==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", "dependencies": { "cross-spawn": "^7.0.0", "signal-exit": "^4.0.1" @@ -889,6 +1106,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -896,12 +1114,14 @@ "node_modules/fs-constants": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==" + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" }, "node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -915,6 +1135,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -923,6 +1144,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", + "license": "MIT", "engines": { "node": ">=16" }, @@ -934,6 +1156,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-2.3.1.tgz", "integrity": "sha512-AUGhbbemXxrZJRD5cDvKtQxLuYaIbNtDTK8YqupCI393Q2KSTreEsLUN3ZxAWFGiKTzL6nKuzfcIvieflUX9qA==", + "license": "MIT", "dependencies": { "object-assign": "^4.0.1", "pinkie-promise": "^2.0.0" @@ -943,20 +1166,24 @@ } }, "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==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", + "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" + "path-scurry": "^2.0.0" }, "bin": { "glob": "dist/esm/bin.mjs" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } @@ -964,12 +1191,14 @@ "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==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "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==", + "license": "MIT", "engines": { "node": ">=8" } @@ -978,6 +1207,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -1006,17 +1236,20 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "BSD-3-Clause" }, "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ipaddr.js": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -1025,6 +1258,7 @@ "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==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1032,12 +1266,14 @@ "node_modules/is-natural-number": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/is-natural-number/-/is-natural-number-4.0.1.tgz", - "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==" + "integrity": "sha512-Y4LTamMe0DDQIIAlaer9eKebAlDSV6huy+TWhJVPlzZh2o4tRP5SQWFlLn5N0To4mDD22/qdOq+veo1cSISLgQ==", + "license": "MIT" }, "node_modules/is-stream": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1045,31 +1281,35 @@ "node_modules/isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" }, "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==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "license": "BlueOak-1.0.0", "dependencies": { "@isaacs/cliui": "^8.0.2" }, + "engines": { + "node": "20 || >=22" + }, "funding": { "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" } }, "node_modules/json-schema-ref-resolver": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-1.0.1.tgz", "integrity": "sha512-EJAj1pgHc1hxF6vo2Z3s69fMjO1INq6eGHXZ8Z6wCQeldCuwxGK9Sxf4/cScGn3FZubCVUehfWtcDM/PLteCQw==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" } @@ -1077,12 +1317,14 @@ "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -1091,34 +1333,36 @@ } }, "node_modules/light-my-request": { - "version": "5.13.0", - "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-5.13.0.tgz", - "integrity": "sha512-9IjUN9ZyCS9pTG+KqTDEQo68Sui2lHsYBrfMyVUTTZ3XhH8PMZq7xO94Kr+eP9dhi/kcKsx4N41p2IXEBil1pQ==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.3.0.tgz", + "integrity": "sha512-bWTAPJmeWQH5suJNYwG0f5cs0p6ho9e6f1Ppoxv5qMosY+s9Ir2+ZLvvHcgA7VTDop4zl/NCHhOVVqU+kd++Ow==", + "license": "BSD-3-Clause", "dependencies": { - "cookie": "^0.6.0", - "process-warning": "^3.0.0", - "set-cookie-parser": "^2.4.1" + "cookie": "^1.0.1", + "process-warning": "^4.0.0", + "set-cookie-parser": "^2.6.0" } }, - "node_modules/lodash.assignwith": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/lodash.assignwith/-/lodash.assignwith-4.2.0.tgz", - "integrity": "sha512-ZznplvbvtjK2gMvnQ1BR/zqPFZmS6jbK4p+6Up4xcRYA7yMIwxHCfbTcrYxXKzzqLsQ05eJPVznEW3tuwV7k1g==" - }, "node_modules/lodash.camelcase": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", - "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==", + "license": "MIT" }, "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==" + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "license": "ISC", + "engines": { + "node": "20 || >=22" + } }, "node_modules/make-dir": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "license": "MIT", "dependencies": { "pify": "^3.0.0" }, @@ -1130,6 +1374,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "license": "MIT", "engines": { "node": ">=4" } @@ -1138,6 +1383,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -1146,14 +1392,15 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1163,20 +1410,40 @@ "version": "7.1.2", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", "engines": { "node": ">=16 || 14 >=14.17" } }, + "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==", + "license": "MIT" + }, "node_modules/node-addon-api": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", - "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "license": "MIT" + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } }, "node_modules/node-hid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.0.tgz", - "integrity": "sha512-YCTD1Ad3PHavx2+hY0QA468pn/gKa44U+fWB1KkRswisWtTROtBzdbmY+Xrm+QZSBCGTkdkgke7Ce606WcGxiQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.2.tgz", + "integrity": "sha512-5uBl8V4mmBWbeqsVfRvbsrlDBBxwzsC5k6gMVF5wOM2ZVyXUHG2zrfotIC6i+QM5ZCsDShaWsiJZOSdzPvsP+g==", "hasInstallScript": true, + "license": "(MIT OR X11)", "dependencies": { "node-addon-api": "^3.2.1", "pkg-prebuilds": "^1.0.0" @@ -1192,6 +1459,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1200,6 +1468,7 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz", "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==", + "license": "MIT", "engines": { "node": ">=14.0.0" } @@ -1208,33 +1477,37 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", "dependencies": { "wrappy": "1" } }, "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==" + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.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==", + "license": "MIT", "engines": { "node": ">=8" } }, "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==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "license": "BlueOak-1.0.0", "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" }, "engines": { - "node": ">=16 || 14 >=14.18" + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -1243,12 +1516,14 @@ "node_modules/pend": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", - "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==" + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" }, "node_modules/pify": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1257,6 +1532,7 @@ "version": "2.0.4", "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1265,6 +1541,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "license": "MIT", "dependencies": { "pinkie": "^2.0.0" }, @@ -1273,14 +1550,15 @@ } }, "node_modules/pino": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/pino/-/pino-9.3.2.tgz", - "integrity": "sha512-WtARBjgZ7LNEkrGWxMBN/jvlFiE17LTbBoH0konmBU684Kd0uIiDwBXlcTCW7iJnA6HfIKwUssS/2AC6cDEanw==", + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/pino/-/pino-9.5.0.tgz", + "integrity": "sha512-xSEmD4pLnV54t0NOUN16yCl7RIB1c5UUOse5HSyEXtBp+FgFQyPeDutc+Q2ZO7/22vImV7VfEjH/1zV2QuqvYw==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0", "fast-redact": "^3.1.1", "on-exit-leak-free": "^2.1.0", - "pino-abstract-transport": "^1.2.0", + "pino-abstract-transport": "^2.0.0", "pino-std-serializers": "^7.0.0", "process-warning": "^4.0.0", "quick-format-unescaped": "^4.0.3", @@ -1294,28 +1572,25 @@ } }, "node_modules/pino-abstract-transport": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-1.2.0.tgz", - "integrity": "sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-2.0.0.tgz", + "integrity": "sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==", + "license": "MIT", "dependencies": { - "readable-stream": "^4.0.0", "split2": "^4.0.0" } }, "node_modules/pino-std-serializers": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.0.0.tgz", - "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==" - }, - "node_modules/pino/node_modules/process-warning": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", - "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==" + "integrity": "sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==", + "license": "MIT" }, "node_modules/pkg-prebuilds": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/pkg-prebuilds/-/pkg-prebuilds-1.0.0.tgz", "integrity": "sha512-D9wlkXZCmjxj2kBHTw3fGSyjoahr33breGBoJcoezpi7ouYS59DJVOHMZ+dgqacSrZiJo4qtkXxLQTE+BqXJmQ==", + "license": "MIT", "dependencies": { "yargs": "^17.7.2" }, @@ -1327,28 +1602,23 @@ "node": ">= 14.15.0" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "engines": { - "node": ">= 0.6.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==" + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" }, "node_modules/process-warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-3.0.0.tgz", - "integrity": "sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ==" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.0.tgz", + "integrity": "sha512-/MyYDxttz7DfGMMHiysAsFE4qF+pQYAA8ziO/3NcRVrQ5fSk+Mns4QZA/oRPFzvcqNoVJXQNWNAsdwBXLUkQKw==", + "license": "MIT" }, "node_modules/proxy-addr": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "license": "MIT", "dependencies": { "forwarded": "0.2.0", "ipaddr.js": "1.9.1" @@ -1360,27 +1630,35 @@ "node_modules/quick-format-unescaped": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz", - "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==" + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==", + "license": "MIT" }, "node_modules/readable-stream": { - "version": "4.5.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", - "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "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/readable-stream/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==", + "license": "MIT" + }, "node_modules/real-require": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz", "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==", + "license": "MIT", "engines": { "node": ">= 12.13.0" } @@ -1389,6 +1667,7 @@ "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==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -1397,14 +1676,16 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/ret": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.4.3.tgz", - "integrity": "sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz", + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==", + "license": "MIT", "engines": { "node": ">=10" } @@ -1413,6 +1694,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", "engines": { "iojs": ">=1.0.0", "node": ">=0.10.0" @@ -1421,7 +1703,8 @@ "node_modules/rfdc": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", - "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==" + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "license": "MIT" }, "node_modules/safe-buffer": { "version": "5.2.1", @@ -1440,20 +1723,23 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safe-regex2": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-3.1.0.tgz", - "integrity": "sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-4.0.0.tgz", + "integrity": "sha512-Hvjfv25jPDVr3U+4LDzBuZPPOymELG3PYcSk5hcevooo1yxxamQL/bHs/GrEPGmMoMEwRrHVGiCA1pXi97B8Ew==", + "license": "MIT", "dependencies": { - "ret": "~0.4.0" + "ret": "~0.5.0" } }, "node_modules/safe-stable-stringify": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz", - "integrity": "sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz", + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==", + "license": "MIT", "engines": { "node": ">=10" } @@ -1461,12 +1747,14 @@ "node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" }, "node_modules/seek-bzip": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/seek-bzip/-/seek-bzip-1.0.6.tgz", "integrity": "sha512-e1QtP3YL5tWww8uKaOCQ18UxIT2laNBXHjV/S2WYCiK4udiv8lkG89KRIoCjUagnAmCBurjF4zEVX2ByBbnCjQ==", + "license": "MIT", "dependencies": { "commander": "^2.8.1" }, @@ -1479,6 +1767,7 @@ "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -1486,20 +1775,51 @@ "node": ">=10" } }, + "node_modules/serialport": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-12.0.0.tgz", + "integrity": "sha512-AmH3D9hHPFmnF/oq/rvigfiAouAKyK/TjnrkwZRYSFZxNggJxwvbAbfYrLeuvq7ktUdhuHdVdSjj852Z55R+uA==", + "license": "MIT", + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "12.0.1", + "@serialport/parser-byte-length": "12.0.0", + "@serialport/parser-cctalk": "12.0.0", + "@serialport/parser-delimiter": "12.0.0", + "@serialport/parser-inter-byte-timeout": "12.0.0", + "@serialport/parser-packet-length": "12.0.0", + "@serialport/parser-readline": "12.0.0", + "@serialport/parser-ready": "12.0.0", + "@serialport/parser-regex": "12.0.0", + "@serialport/parser-slip-encoder": "12.0.0", + "@serialport/parser-spacepacket": "12.0.0", + "@serialport/stream": "12.0.0", + "debug": "4.3.4" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, "node_modules/set-cookie-parser": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", - "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.1.tgz", + "integrity": "sha512-IOc8uWeOZgnb3ptbCURJWNjWUPcO3ZnTTdzsurqERrP6nPyv+paC55vJM0LpOlT2ne+Ix+9+CRG1MNLlyZ4GjQ==", + "license": "MIT" }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC" }, "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==", + "license": "MIT", "dependencies": { "shebang-regex": "^3.0.0" }, @@ -1511,6 +1831,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1519,6 +1840,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", "engines": { "node": ">=14" }, @@ -1527,9 +1849,10 @@ } }, "node_modules/sonic-boom": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.0.1.tgz", - "integrity": "sha512-hTSD/6JMLyT4r9zeof6UtuBDpjJ9sO08/nmS5djaA9eozT9oOlNdpXSnzcgj4FTqpk3nkLrs61l4gip9r1HCrQ==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.0.tgz", + "integrity": "sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==", + "license": "MIT", "dependencies": { "atomic-sleep": "^1.0.0" } @@ -1538,6 +1861,7 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz", "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==", + "license": "ISC", "engines": { "node": ">= 10.x" } @@ -1546,22 +1870,31 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/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==", + "license": "MIT" + }, "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==", + "license": "MIT", "dependencies": { "eastasianwidth": "^0.2.0", "emoji-regex": "^9.2.2", @@ -1579,6 +1912,7 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1592,6 +1926,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1599,12 +1934,14 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1616,6 +1953,7 @@ "version": "7.1.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", "dependencies": { "ansi-regex": "^6.0.1" }, @@ -1631,6 +1969,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1642,6 +1981,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1650,6 +1990,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/strip-dirs/-/strip-dirs-2.1.0.tgz", "integrity": "sha512-JOCxOeKLm2CAS73y/U4ZeZPTkE+gNVCzKt7Eox84Iej1LT/2pTWYpZKJuxwQpvX1LiZb1xokNR7RLfuBAa7T3g==", + "license": "MIT", "dependencies": { "is-natural-number": "^4.0.1" } @@ -1657,12 +1998,14 @@ "node_modules/sudo-prompt": { "version": "9.2.1", "resolved": "https://registry.npmjs.org/sudo-prompt/-/sudo-prompt-9.2.1.tgz", - "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==" + "integrity": "sha512-Mu7R0g4ig9TUuGSxJavny5Rv0egCEtpZRNMrZaYS1vxkiIxGiGUwoezU3LazIQ+KE04hTrTfNPgxU5gzi7F5Pw==", + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -1671,11 +2014,11 @@ } }, "node_modules/table-layout": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.0.tgz", - "integrity": "sha512-AfbFMOsAZDoaQq2sDF/F7PSTxnTBexr4cuArFW1bMl07tFbB+HBwKpnw99To3ffcjRFe12dEoyckiNz1+qCSng==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-4.1.1.tgz", + "integrity": "sha512-iK5/YhZxq5GO5z8wb0bY1317uDF3Zjpha0QFFLA8/trAoiLbQD0HUbMesEaxyzUgDxi2QlcbM8IvqOlEjgoXBA==", + "license": "MIT", "dependencies": { - "@75lb/deep-merge": "^1.1.1", "array-back": "^6.2.2", "wordwrapjs": "^5.1.0" }, @@ -1687,6 +2030,7 @@ "version": "1.6.2", "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-1.6.2.tgz", "integrity": "sha512-rzS0heiNf8Xn7/mpdSVVSMAWAoy9bfb1WOTYC78Z0UQKeKa/CWS8FOq0lKGNa8DWKAn9gxjCvMLYc5PGXYlK2A==", + "license": "MIT", "dependencies": { "bl": "^1.0.0", "buffer-alloc": "^1.2.0", @@ -1700,37 +2044,11 @@ "node": ">= 0.8.0" } }, - "node_modules/tar-stream/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/tar-stream/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/tar-stream/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/thread-stream": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-3.1.0.tgz", "integrity": "sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==", + "license": "MIT", "dependencies": { "real-require": "^0.2.0" } @@ -1738,12 +2056,14 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "license": "MIT" }, "node_modules/tmp": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz", "integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==", + "license": "MIT", "engines": { "node": ">=14.14" } @@ -1751,12 +2071,14 @@ "node_modules/to-buffer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/to-buffer/-/to-buffer-1.1.1.tgz", - "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==" + "integrity": "sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg==", + "license": "MIT" }, "node_modules/toad-cache": { "version": "3.7.0", "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", + "license": "MIT", "engines": { "node": ">=12" } @@ -1765,19 +2087,22 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/typical": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/typical/-/typical-7.1.1.tgz", - "integrity": "sha512-T+tKVNs6Wu7IWiAce5BgMd7OZfNYUndHwc5MknN+UHOudi7sGZzuHdCadllRuqJ3fPtgFtIH9+lt9qRv6lmpfA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-7.2.0.tgz", + "integrity": "sha512-W1+HdVRUl8fS3MZ9ogD51GOb46xMmhAZzR0WPw5jcgIZQJVvkddYzAl4YTU6g5w33Y1iRQLdIi2/1jhi2RNL0g==", + "license": "MIT", "engines": { "node": ">=12.17" } @@ -1786,38 +2111,17 @@ "version": "1.4.3", "resolved": "https://registry.npmjs.org/unbzip2-stream/-/unbzip2-stream-1.4.3.tgz", "integrity": "sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==", + "license": "MIT", "dependencies": { "buffer": "^5.2.1", "through": "^2.3.8" } }, - "node_modules/unbzip2-stream/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "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.1.13" - } - }, "node_modules/universalify": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -1825,12 +2129,14 @@ "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==" + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", "dependencies": { "isexe": "^2.0.0" }, @@ -1845,6 +2151,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-5.1.0.tgz", "integrity": "sha512-JNjcULU2e4KJwUNv6CHgI46UvDGitb6dGryHajXTDiLgg1/RiGoPSDw4kZfYnwGtEXf2ZMeIewDQgFGzkCB2Sg==", + "license": "MIT", "engines": { "node": ">=12.17" } @@ -1853,6 +2160,7 @@ "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", "dependencies": { "ansi-styles": "^6.1.0", "string-width": "^5.0.1", @@ -1870,6 +2178,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -1886,6 +2195,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1893,12 +2203,14 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -1912,6 +2224,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -1923,6 +2236,7 @@ "version": "6.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -1933,12 +2247,14 @@ "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==" + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "license": "MIT", "engines": { "node": ">=0.4" } @@ -1947,6 +2263,7 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", "engines": { "node": ">=10" } @@ -1955,6 +2272,7 @@ "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -1972,6 +2290,7 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", "engines": { "node": ">=12" } @@ -1980,6 +2299,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -1987,12 +2307,14 @@ "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==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "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==", + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2006,6 +2328,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2017,6 +2340,7 @@ "version": "2.10.0", "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", "dependencies": { "buffer-crc32": "~0.2.3", "fd-slicer": "~1.1.0" diff --git a/packages/uhk-agent/package.json b/packages/uhk-agent/package.json index 858464d5f71..be9b6e06382 100644 --- a/packages/uhk-agent/package.json +++ b/packages/uhk-agent/package.json @@ -11,20 +11,21 @@ }, "license": "See in LICENSE", "dependencies": { - "@fastify/static": "7.0.4", - "command-line-args": "6.0.0", + "@fastify/static": "8.0.2", + "command-line-args": "6.0.1", "command-line-usage": "7.0.3", "electron-is-dev": "3.0.1", "decompress": "4.2.1", "decompress-bzip2": "4.0.0", "decompress-targz": "4.1.1", - "fastify": "4.28.1", + "fastify": "5.1.0", "fs-extra": "11.2.0", "get-port": "7.1.0", - "node-hid": "3.1.0", + "node-hid": "3.1.2", + "serialport": "12.0.0", "sudo-prompt": "9.2.1", "tmp": "0.2.3", - "tslib": "2.6.3", + "tslib": "2.8.1", "uhk-common": "^1.0.0", "uhk-smart-macro": "^1.0.0", "uhk-usb": "^1.0.0" @@ -32,7 +33,7 @@ "devDependencies": { }, "scripts": { - "start": "cross-env DEBUG=kboot* electron ./dist/electron-main.js", + "start": "cross-env DEBUG=kboot*,mcumgr* electron ./dist/electron-main.js", "electron:spe": "electron ./dist/electron-main.js --spe", "build": "webpack && npm run install:build-deps && npm run download-firmware && npm run copy-to-tmp-folder", "clean": "rimraf ./node_modules ./dist", diff --git a/packages/uhk-agent/src/custom_types/electron-is-dev.d.ts b/packages/uhk-agent/src/custom_types/electron-is-dev.d.ts deleted file mode 100644 index df6a02c18f9..00000000000 --- a/packages/uhk-agent/src/custom_types/electron-is-dev.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'electron-is-dev'; diff --git a/packages/uhk-agent/src/dev-extension.ts b/packages/uhk-agent/src/dev-extension.ts index ac240feff73..fdab310b0be 100644 --- a/packages/uhk-agent/src/dev-extension.ts +++ b/packages/uhk-agent/src/dev-extension.ts @@ -1,5 +1,3 @@ -/// - /* * Install DevTool extensions when Electron is in development mode */ diff --git a/packages/uhk-agent/src/electron-main.ts b/packages/uhk-agent/src/electron-main.ts index c7a5d50463a..32992039f31 100644 --- a/packages/uhk-agent/src/electron-main.ts +++ b/packages/uhk-agent/src/electron-main.ts @@ -1,5 +1,3 @@ -/// - import { app, BrowserWindow, systemPreferences } from 'electron'; import * as process from 'process'; import setElectronSettingsConfig from './set-electron-settings-config'; @@ -134,7 +132,12 @@ async function createWindow() { // when you should delete the corresponding element. logger.misc('[Electron Main] win closed'); win = null; - await deviceService.close(); + try { + await deviceService.close(); + } catch (error) { + // TODO: Investigate it deeper. It happens on MacOs 15+ sometimes + logger.error('[Electron Main] Error while closing DeviceService when electron has been closed', error); + } deviceService = null; appUpdateService = null; appService = null; diff --git a/packages/uhk-agent/src/package.json b/packages/uhk-agent/src/package.json index d38cece2cee..4155d729b46 100644 --- a/packages/uhk-agent/src/package.json +++ b/packages/uhk-agent/src/package.json @@ -11,6 +11,7 @@ "license": "GPL-3.0", "dependencies": { "electron-settings": "3.1.4", - "node-hid": "3.1.0" + "node-hid": "3.1.2", + "serialport": "12.0.0" } } diff --git a/packages/uhk-agent/src/services/device.service.ts b/packages/uhk-agent/src/services/device.service.ts index 6c90249ebb5..49f2fb1964f 100644 --- a/packages/uhk-agent/src/services/device.service.ts +++ b/packages/uhk-agent/src/services/device.service.ts @@ -1,17 +1,24 @@ import { ipcMain } from 'electron'; +import { emptyDir } from 'fs-extra'; import { cloneDeep, isEqual } from 'lodash'; +import os from 'os'; import { + ALL_UHK_DEVICES, BackupUserConfigurationInfo, ChangeKeyboardLayoutIpcResponse, CommandLineArgs, ConfigurationReply, + convertBleAddressArrayToString, + convertBleStringToNumberArray, DeviceConnectionState, disableAgentUpgradeProtection, findUhkModuleById, + FIRMWARE_UPGRADE_METHODS, FirmwareUpgradeFailReason, FirmwareUpgradeIpcResponse, getHardwareConfigFromDeviceResponse, getUserConfigFromDeviceResponse, + HardwareConfiguration, HardwareModules, IpcEvents, IpcResponse, @@ -32,6 +39,9 @@ import { shouldUpgradeAgent, shouldUpgradeFirmware, simulateInvalidUserConfigError, + UHK_80_DEVICE_LEFT, + UHK_DEVICE_IDS, + UHK_DONGLE, UHK_MODULES, UpdateFirmwareData, UploadFileData, @@ -42,24 +52,26 @@ import { ConfigBufferId, convertBufferToIntArray, DevicePropertyIds, + EnumerationModes, getCurrentUhkDeviceProduct, - getCurrentUhkDeviceProductByBootloaderId, + getCurrentUhkDongleHID, + getCurrenUhk80LeftHID, getDeviceFirmwarePath, getFirmwarePackageJson, getModuleFirmwarePath, + isUhkDeviceConnected, + isUkhKeyboardConnected, readUhkResponseAs0EndString, snooze, TmpFirmware, UhkHidDevice, UhkOperations, - UsbVariables, usbDeviceJsonFormatter, - waitForDevice + UsbVariables, + waitForDevices, + waitForUhkDeviceConnected, + waitUntil, } from 'uhk-usb'; -import { emptyDir } from 'fs-extra'; -import os from 'os'; - -import { QueueManager } from './queue-manager'; import { backupUserConfiguration, copySmartMacroDocToWebserver, @@ -73,6 +85,8 @@ import { saveUserConfigHistoryAsync } from '../util'; +import { QueueManager } from './queue-manager'; + /** * IpcMain pair of the UHK Communication * Functionality: @@ -87,6 +101,8 @@ export class DeviceService { private wasCalledSaveUserConfiguration = false; private isI2cDebuggingEnabled = false; private i2cWatchdogRecoveryCounter = -1; + private savedState: DeviceConnectionState; + constructor(private logService: LogService, private win: Electron.BrowserWindow, @@ -117,6 +133,15 @@ export class DeviceService { }); }); + ipcMain.on(IpcEvents.device.deleteHostConnection, (...args: any[]) => { + this.queueManager.add({ + method: this.deleteHostConnection, + bind: this, + params: args, + asynchronous: true + }); + }); + ipcMain.on(IpcEvents.device.toggleI2cDebugging, this.toggleI2cDebugging.bind(this)); ipcMain.on(IpcEvents.device.saveUserConfiguration, (...args: any[]) => { @@ -148,6 +173,25 @@ export class DeviceService { ipcMain.on(IpcEvents.device.startConnectionPoller, this.startPollUhkDevice.bind(this)); + ipcMain.on(IpcEvents.device.startDonglePairing, (...args: any[]) => { + this.queueManager.add({ + method: this.startDonglePairing, + bind: this, + params: args, + asynchronous: true + }); + }); + + ipcMain.on(IpcEvents.device.startLeftHalfPairing, (...args: any[]) => { + this.queueManager.add({ + method: this.startLeftHalfPairing, + bind: this, + params: args, + asynchronous: true + }); + }); + + ipcMain.on(IpcEvents.device.recoveryDevice, (...args: any[]) => { this.queueManager.add({ method: this.recoveryDevice, @@ -248,9 +292,14 @@ export class DeviceService { try { await this.operations.waitUntilKeyboardBusy(); + const deviceVersionInformation = await this.operations.getDeviceVersionInfo(); + const hardwareModules: HardwareModules = { moduleInfos: [], - rightModuleInfo: await this.operations.getRightModuleVersionInfo() + rightModuleInfo: { + ...deviceVersionInformation, + modules: {}, + } }; const isGitInfoSupported = isDeviceProtocolSupportGitInfo(hardwareModules.rightModuleInfo.deviceProtocolVersion); @@ -321,13 +370,18 @@ export class DeviceService { } public async updateFirmware(event: Electron.IpcMainEvent, args?: Array): Promise { - const response = new FirmwareUpgradeIpcResponse(); + const response: FirmwareUpgradeIpcResponse = { + success: false, + }; + response.userConfigSaved = false; response.firmwareDowngraded = false; const data: UpdateFirmwareData = JSON.parse(args[0]); let firmwarePathData: TmpFirmware; try { + await this.stopPollUhkDevice(); + firmwarePathData = data.uploadFile ? await saveTmpFirmware(data.uploadFile) : getDefaultFirmwarePath(this.rootDir); @@ -340,7 +394,7 @@ export class DeviceService { event.sender.send(IpcEvents.device.updateFirmwareJson, packageJson); - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(this.options); checkFirmwareAndDeviceCompatibility(packageJson, uhkDeviceProduct); const disableAgentUpgrade = disableAgentUpgradeProtection(this.options); if (shouldUpgradeAgent(packageJson.userConfigVersion, disableAgentUpgrade, data.versionInformation?.userConfigVersion)) { @@ -349,7 +403,47 @@ export class DeviceService { return event.sender.send(IpcEvents.device.updateFirmwareReply, response); } - await this.stopPollUhkDevice(); + + let dongleHid = await getCurrentUhkDongleHID(); + if (dongleHid) { + this.logService.misc('[DeviceService] UHK Dongle firmware upgrade starts:', + JSON.stringify(UHK_DONGLE, usbDeviceJsonFormatter)); + const dongleFirmwarePath = getDeviceFirmwarePath(UHK_DONGLE, packageJson); + let dongleUhkDevice: UhkHidDevice; + + try { + dongleUhkDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, dongleHid); + let dongleOperations = new UhkOperations(this.logService, dongleUhkDevice); + let versionInfo = await dongleOperations.getDeviceVersionInfo(); + this.logService.misc('[DeviceService] Dongle firmware version:', + versionInfo.firmwareVersion); + + if (data.forceUpgrade || versionInfo.firmwareVersion !== packageJson.firmwareVersion) { + event.sender.send(IpcEvents.device.moduleFirmwareUpgrading, UHK_DONGLE.name); + await dongleOperations.updateDeviceFirmware(dongleFirmwarePath, UHK_DONGLE); + this.logService.misc('[DeviceService] Waiting for keyboard'); + await waitForDevices(UHK_DONGLE.keyboard); + dongleUhkDevice.close(); + + dongleHid = await getCurrentUhkDongleHID(); + if (dongleHid) { + dongleUhkDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, dongleHid); + dongleOperations = new UhkOperations(this.logService, dongleUhkDevice); + versionInfo = await dongleOperations.getDeviceVersionInfo(); + event.sender.send(IpcEvents.device.dongleVersionInfoLoaded, versionInfo); + } + } + else { + this.logService.misc('Skip dongle firmware upgrade.'); + } + } + finally { + dongleUhkDevice?.close(); + this.device.close(); + } + + await snooze(1000); + } let hardwareModules = await this.getHardwareModules(false); @@ -361,9 +455,9 @@ export class DeviceService { hardwareModules.rightModuleInfo.firmwareVersion); if (data.forceUpgrade || hardwareModules.rightModuleInfo.firmwareVersion !== packageJson.firmwareVersion) { event.sender.send(IpcEvents.device.moduleFirmwareUpgrading, RIGHT_HALF_FIRMWARE_UPGRADE_MODULE_NAME); - await this.operations.updateRightFirmwareWithKboot(deviceFirmwarePath, uhkDeviceProduct); + await this.operations.updateDeviceFirmware(deviceFirmwarePath, uhkDeviceProduct); this.logService.misc('[DeviceService] Waiting for keyboard'); - await waitForDevice(uhkDeviceProduct.vendorId, uhkDeviceProduct.keyboardPid); + await waitForDevices(uhkDeviceProduct.keyboard); hardwareModules = await this.getHardwareModules(false); event.sender.send(IpcEvents.device.hardwareModulesLoaded, hardwareModules); @@ -384,7 +478,7 @@ export class DeviceService { const leftModuleInfo: ModuleInfo = hardwareModules.moduleInfos .find(moduleInfo => moduleInfo.module.slotId === ModuleSlotToId.leftHalf); - const leftModuleFirmwareInfo = hardwareModules.rightModuleInfo.modules[leftModuleInfo.module.id]; + const leftModuleFirmwareInfo = hardwareModules.rightModuleInfo.modules[leftModuleInfo.module.id]; this.logService.misc('[DeviceService] Left module firmware version: ', leftModuleInfo.info.firmwareVersion); this.logService.misc('[DeviceService] Current left module firmware checksum: ', leftModuleInfo.info.firmwareChecksum); @@ -402,57 +496,77 @@ export class DeviceService { if (data.forceUpgrade || !isLeftModuleFirmwareSame) { event.sender.send(IpcEvents.device.moduleFirmwareUpgrading, leftModuleInfo.module.name); - await this.operations - .updateModuleWithKboot( - getModuleFirmwarePath(leftModuleInfo.module, packageJson), - uhkDeviceProduct, - leftModuleInfo.module - ); + + if(uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT) { + if (!(await isUhkDeviceConnected(UHK_80_DEVICE_LEFT))) { + this.logService.misc('[DeviceService] To continue the firmware upgrade, now connect the left half via USB. (You can disconnect the right half or use a second USB cable.)'); + } + + await waitForUhkDeviceConnected(UHK_80_DEVICE_LEFT); + await snooze(1000); + const firmwarePath = getDeviceFirmwarePath(UHK_80_DEVICE_LEFT, packageJson); + await this.operations.updateFirmwareWithMcuManager(firmwarePath, UHK_80_DEVICE_LEFT); + + if (!(await isUhkDeviceConnected(uhkDeviceProduct))) { + this.logService.misc('[DeviceService] To finish the firmware upgrade, now connect the right half via USB. (You can disconnect the left half or use a second USB cable.)'); + } + + await waitForUhkDeviceConnected(uhkDeviceProduct); + } + else { + await this.operations + .updateModuleWithKboot( + getModuleFirmwarePath(leftModuleInfo.module, packageJson), + uhkDeviceProduct, + leftModuleInfo.module + ); + } } else { event.sender.send(IpcEvents.device.moduleFirmwareUpgradeSkip, leftModuleInfo.module.name); this.logService.misc('[DeviceService] Skip left firmware upgrade.'); } - for (const moduleInfo of hardwareModules.moduleInfos) { - if (moduleInfo.module.slotId === ModuleSlotToId.leftHalf) { - // Left half upgrade mandatory, it is running before the other modules upgrade. - } - else if (moduleInfo.module.firmwareUpgradeSupported) { - this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" firmware version:`, moduleInfo.info.firmwareVersion); - this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" current firmware checksum:`, moduleInfo.info.firmwareChecksum); - - const moduleFirmwareInfo = hardwareModules.rightModuleInfo.modules[moduleInfo.module.id]; - if (moduleFirmwareInfo) { - this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" new firmware checksum:`, moduleFirmwareInfo.md5); - } + // TODO: implement MCUBOOT version + if (uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.KBOOT) { + for (const moduleInfo of hardwareModules.moduleInfos) { + if (moduleInfo.module.slotId === ModuleSlotToId.leftHalf) { + // Left half upgrade mandatory, it is running before the other modules upgrade. + } else if (moduleInfo.module.firmwareUpgradeSupported) { + this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" firmware version:`, moduleInfo.info.firmwareVersion); + this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" current firmware checksum:`, moduleInfo.info.firmwareChecksum); + + const moduleFirmwareInfo = hardwareModules.rightModuleInfo.modules[moduleInfo.module.id]; + if (moduleFirmwareInfo) { + this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" new firmware checksum:`, moduleFirmwareInfo.md5); + } - const isModuleFirmwareSame = isSameFirmware( - moduleInfo.info, - { - firmwareChecksum: moduleFirmwareInfo?.md5, - firmwareVersion: packageJson.firmwareVersion + const isModuleFirmwareSame = isSameFirmware( + moduleInfo.info, + { + firmwareChecksum: moduleFirmwareInfo?.md5, + firmwareVersion: packageJson.firmwareVersion + } + ); + + if (data.forceUpgrade || !isModuleFirmwareSame) { + event.sender.send(IpcEvents.device.moduleFirmwareUpgrading, moduleInfo.module.name); + await this.operations + .updateModuleWithKboot( + getModuleFirmwarePath(moduleInfo.module, packageJson), + uhkDeviceProduct, + moduleInfo.module + ); + this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" firmware update done.`); + } else { + event.sender.send(IpcEvents.device.moduleFirmwareUpgradeSkip, moduleInfo.module.name); + this.logService.misc(`[DeviceService] Skip "${moduleInfo.module.name}" firmware upgrade.`); } - ); - - if (data.forceUpgrade || !isModuleFirmwareSame) { - event.sender.send(IpcEvents.device.moduleFirmwareUpgrading, moduleInfo.module.name); - await this.operations - .updateModuleWithKboot( - getModuleFirmwarePath(moduleInfo.module, packageJson), - uhkDeviceProduct, - moduleInfo.module - ); - this.logService.misc(`[DeviceService] "${moduleInfo.module.name}" firmware update done.`); } else { - event.sender.send(IpcEvents.device.moduleFirmwareUpgradeSkip, moduleInfo.module.name); - this.logService.misc(`[DeviceService] Skip "${moduleInfo.module.name}" firmware upgrade.`); + this.logService.misc(`[DeviceService] Skip "${moduleInfo.module.name}" firmware upgrade. Currently not supported`); } - } else { - this.logService.misc(`[DeviceService] Skip "${moduleInfo.module.name}" firmware upgrade. Currently not supported`); } } - response.modules = await this.getHardwareModules(false); await copySmartMacroDocToWebserver(firmwarePathData, this.logService); await makeFolderWriteableToUserOnLinux(getSmartMacroDocRootPath()); response.success = true; @@ -460,7 +574,6 @@ export class DeviceService { const err = { message: error.message, stack: error.stack }; this.logService.error('[DeviceService] updateFirmware error', err); - response.modules = await this.getHardwareModules(true); response.error = err; } @@ -470,21 +583,26 @@ export class DeviceService { await snooze(500); + this.savedState = undefined; this.startPollUhkDevice(); event.sender.send(IpcEvents.device.updateFirmwareReply, response); } public async recoveryDevice(event: Electron.IpcMainEvent, args: Array): Promise { - const response = new FirmwareUpgradeIpcResponse(); + const response: FirmwareUpgradeIpcResponse = { + success: false, + }; try { - const userConfig = args[0]; + await this.stopPollUhkDevice(); + const arg = args[0]; + const userConfig = arg.userConfig; + const deviceId = arg.deviceId; const firmwarePathData: TmpFirmware = getDefaultFirmwarePath(this.rootDir); const packageJson = await getFirmwarePackageJson(firmwarePathData); - await this.stopPollUhkDevice(); - const uhkDeviceProduct = await getCurrentUhkDeviceProductByBootloaderId(); + const uhkDeviceProduct = ALL_UHK_DEVICES.find(uhkProduct => uhkProduct.id === deviceId); checkFirmwareAndDeviceCompatibility(packageJson, uhkDeviceProduct); this.logService.misc( @@ -492,52 +610,54 @@ export class DeviceService { JSON.stringify(uhkDeviceProduct, usbDeviceJsonFormatter)); const deviceFirmwarePath = getDeviceFirmwarePath(uhkDeviceProduct, packageJson); - await this.operations.updateRightFirmwareWithKboot(deviceFirmwarePath, uhkDeviceProduct); + await this.operations.updateDeviceFirmware(deviceFirmwarePath, uhkDeviceProduct); this.logService.misc('[DeviceService] Waiting for keyboard'); - await waitForDevice(uhkDeviceProduct.vendorId, uhkDeviceProduct.keyboardPid); + await waitForDevices(uhkDeviceProduct.keyboard); - this.logService.config( - '[DeviceService] User configuration will be saved after right module recovery', - userConfig); - const buffer = mapObjectToUserConfigBinaryBuffer(userConfig); - await this.operations.saveUserConfiguration(buffer); - this._checkStatusBuffer = true; - - response.modules = await this.getHardwareModules(false); - await copySmartMacroDocToWebserver(firmwarePathData, this.logService); - await makeFolderWriteableToUserOnLinux(getSmartMacroDocRootPath()); + if (deviceId === UHK_DEVICE_IDS.UHK_DONGLE || deviceId === UHK_DEVICE_IDS.UHK80_LEFT) { + this.logService.misc('[DeviceService] skip save user configuration'); + } + else { + this.logService.config( + '[DeviceService] User configuration will be saved after right module recovery', + userConfig); + const buffer = mapObjectToUserConfigBinaryBuffer(userConfig); + await this.operations.saveUserConfiguration(buffer); + this._checkStatusBuffer = true; + response.userConfigSaved = true; + + await copySmartMacroDocToWebserver(firmwarePathData, this.logService); + await makeFolderWriteableToUserOnLinux(getSmartMacroDocRootPath()); + } response.success = true; - response.userConfigSaved = true; response.firmwareDowngraded = false; } catch (error) { const err = { message: error.message, stack: error.stack }; this.logService.error('[DeviceService] updateFirmware error', err); - - response.modules = { - moduleInfos: [], - rightModuleInfo: { - modules: {}, - } - }; response.error = err; } - this.startPollUhkDevice(); - await snooze(500); event.sender.send(IpcEvents.device.recoveryDeviceReply, response); + await snooze(500); + + this.savedState = undefined; + this.startPollUhkDevice(); } public async recoveryModule(event: Electron.IpcMainEvent, args: Array): Promise { - const response = new FirmwareUpgradeIpcResponse(); + const response: FirmwareUpgradeIpcResponse = { + success: false, + }; const moduleId: number = args[0]; try { + await this.stopPollUhkDevice(); + const firmwarePathData: TmpFirmware = getDefaultFirmwarePath(this.rootDir); const packageJson = await getFirmwarePackageJson(firmwarePathData); - await this.stopPollUhkDevice(); - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(this.options); checkFirmwareAndDeviceCompatibility(packageJson, uhkDeviceProduct); this.logService.misc( @@ -554,16 +674,15 @@ export class DeviceService { uhkModule ); - response.modules = await this.getHardwareModules(false); response.success = true; } catch (error) { const err = { message: error.message, stack: error.stack }; this.logService.error('[DeviceService] Module recovery error', err); - response.modules = await this.getHardwareModules(true); response.error = err; } + this.savedState = undefined; this.startPollUhkDevice(); await snooze(500); event.sender.send(IpcEvents.device.recoveryModuleReply, response); @@ -588,6 +707,127 @@ export class DeviceService { } } + public async deleteHostConnection(event: Electron.IpcMainEvent, args: Array): Promise { + const {isConnectedDongleAddress, index, address} = args[0]; + this.logService.misc('[DeviceService] delete host connection', { isConnectedDongleAddress, index, address }); + + try { + await this.stopPollUhkDevice(); + let dongleUhkDevice: UhkHidDevice; + try { + if (isConnectedDongleAddress) { + const dongleHid = await getCurrentUhkDongleHID(); + if (dongleHid) { + dongleUhkDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, dongleHid); + await dongleUhkDevice.deleteAllBonds(); + } + } + + await this.device.deleteBond(convertBleStringToNumberArray(address)); + this.logService.misc('[DeviceService] delete host connection success', { address }); + await snooze(1000); + event.sender.send(IpcEvents.device.deleteHostConnectionSuccess, {index, address}); + } + finally { + if (dongleUhkDevice) { + dongleUhkDevice.close(); + } + } + } catch (error) { + if (isConnectedDongleAddress) { + await this.forceReenumerateDongle(); + } + await this.forceReenumerateDevice(); + this.logService.misc('[DeviceService] delete host connection failed', { address, error }); + event.sender.send(IpcEvents.device.deleteHostConnectionFailed, error.message); + } + finally { + this.savedState = undefined; + this.startPollUhkDevice(); + } + } + + public async startDonglePairing(event: Electron.IpcMainEvent): Promise { + this.logService.misc('[DeviceService] start Dongle pairing'); + try { + await this.stopPollUhkDevice(); + const dongleHid = await getCurrentUhkDongleHID(); + if (!dongleHid) { + throw new Error('Cannot find dongle!'); + } + + let dongleUhkDevice: UhkHidDevice; + try { + dongleUhkDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, dongleHid); + const result = await this.operations.pairToDongle(dongleUhkDevice); + this.logService.misc('[DeviceService] Dongle pairing success'); + await snooze(1000); + event.sender.send(IpcEvents.device.donglePairingSuccess, result.pairAddress); + } + finally { + if(dongleUhkDevice) { + dongleUhkDevice.close(); + } + } + } + catch(error) { + this.logService.error('[DeviceService] Dongle pairing failed', error); + await this.forceReenumerateDongle(); + await this.forceReenumerateDevice(); + event.sender.send(IpcEvents.device.donglePairingFailed, error.message); + } + finally { + this.savedState = undefined; + this.startPollUhkDevice(); + } + } + + public async startLeftHalfPairing(event: Electron.IpcMainEvent): Promise { + this.logService.misc('[DeviceService] start Left half pairing'); + + try { + await this.stopPollUhkDevice(); + if (!(await isUkhKeyboardConnected(UHK_80_DEVICE_LEFT))) { + this.logService.misc('[DeviceService] Both keyboard halves must be connected via USB.'); + this.logService.misc('[DeviceService] Please connect them and retry pairing the halves.'); + event.sender.send(IpcEvents.device.leftHalfPairingFailed, ''); + + return; + } + + await waitUntil({ + shouldWait: async () => !(await isUkhKeyboardConnected(UHK_80_DEVICE_LEFT)), + wait: 250, + }); + + await snooze(1000); + const leftHalfHid = await getCurrenUhk80LeftHID(); + let leftHalfDevice: UhkHidDevice; + try { + leftHalfDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, leftHalfHid); + const result = await this.operations.pairToLeftHalf(leftHalfDevice); + this.logService.misc('[DeviceService] Pairing the keyboard halves succeeded.'); + await snooze(1000); + event.sender.send(IpcEvents.device.leftHalfPairingSuccess, result.pairAddress); + } + finally { + if (leftHalfDevice) { + leftHalfDevice.close(); + } + } + + } catch(error) { + this.logService.error('[DeviceService] Left half pairing failed', error); + await this.forceReenumerateDevice(); + await this.forceReenumerateLeftHalf(); + event.sender.send(IpcEvents.device.leftHalfPairingFailed, error.message); + } + finally { + this.savedState = undefined; + this.startPollUhkDevice(); + } + } + public startPollUhkDevice(): void { this.logService.misc('[DeviceService] start poll UHK Device'); this._pollerAllowed = true; @@ -609,7 +849,9 @@ export class DeviceService { }); } - private async changeKeyboardLayout(event: Electron.IpcMainEvent, [layout, deviceId]): Promise { + private async changeKeyboardLayout(event: Electron.IpcMainEvent, args): Promise { + const layout: KeyboardLayout = args[0]; + const hardwareConfiguration: HardwareConfiguration = new HardwareConfiguration().fromJsonObject(args[1]); const layoutName = layout === KeyboardLayout.ISO ? 'iso': 'ansi'; this.logService.misc(`[DeviceService] Change keyboard layout to ${layoutName}`); @@ -618,7 +860,7 @@ export class DeviceService { try { await this.stopPollUhkDevice(); - await this.operations.saveHardwareConfiguration(layout === KeyboardLayout.ISO, deviceId); + await this.operations.saveHardwareConfiguration(layout === KeyboardLayout.ISO, hardwareConfiguration.deviceId, hardwareConfiguration.uniqueId); const hardwareInfo = await this.operations.loadConfiguration(ConfigBufferId.hardwareConfig); response.hardwareConfig = JSON.stringify(convertBufferToIntArray(hardwareInfo)); @@ -660,7 +902,6 @@ export class DeviceService { * @private */ private async uhkDevicePoller(): Promise { - let savedState: DeviceConnectionState; let deviceProtocolVersion: string; let iterationCount = 0; @@ -671,12 +912,46 @@ export class DeviceService { try { const state = await this.device.getDeviceConnectionStateAsync(); - if (!isEqual(state, savedState)) { + if (!isEqual(state, this.savedState)) { const newState = cloneDeep(state); if (state.hasPermission && state.communicationInterfaceAvailable) { state.hardwareModules = await this.getHardwareModules(false); deviceProtocolVersion = state.hardwareModules.rightModuleInfo.deviceProtocolVersion; + const isDeviceSupportWirelessUSBCommands = await this.device.isDeviceSupportWirelessUSBCommands(); + let deviceBleAddress: number[]; + if (isDeviceSupportWirelessUSBCommands) { + deviceBleAddress = await this.device.getBleAddress(); + state.bleAddress = convertBleAddressArrayToString(deviceBleAddress); + } + + if (isDeviceSupportWirelessUSBCommands + && !state.dongle.multiDevice + && !state.dongle.bootloaderActive + && state.dongle.serialNumber + && state.dongle.serialNumber !== this.savedState?.dongle?.serialNumber) { + + const dongle = await getCurrentUhkDongleHID(); + let dongleUhkDevice: UhkHidDevice; + try { + dongleUhkDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, dongle); + const dongleBleAddress = await dongleUhkDevice.getBleAddress(); + state.dongle.bleAddress = convertBleAddressArrayToString(dongleBleAddress); + state.dongle.isPairedWithKeyboard = await dongleUhkDevice.isPairedWith(deviceBleAddress); + state.isPairedWithDongle = await this.device.isPairedWith(dongleBleAddress); + const dongleOperations = new UhkOperations(this.logService, dongleUhkDevice); + state.dongle.versionInfo = await dongleOperations.getDeviceVersionInfo(); + } + catch (err) { + this.logService.error("Can't query Dongle BLE Addresses", err); + } + finally { + if (dongleUhkDevice) { + dongleUhkDevice.close(); + } + } + } + this._checkStatusBuffer = true; } else { deviceProtocolVersion = undefined; @@ -689,9 +964,9 @@ export class DeviceService { } this.win.webContents.send(IpcEvents.device.deviceConnectionStateChanged, state); - savedState = newState; + this.savedState = newState; - this.logService.misc('[DeviceService] Device connection state changed to:', state); + this.logService.misc('[DeviceService] Device connection state changed to:', JSON.stringify(state, null, 2)); } if (state.isMacroStatusDirty) { @@ -784,4 +1059,85 @@ export class DeviceService { event.sender.send(IpcEvents.device.loadUserConfigHistoryReply, files); } + + private async forceReenumerateDongle(): Promise { + this.logService.misc('[DeviceService] Dongle force reenumerate'); + + let uhkHidDevice: UhkHidDevice; + try { + await snooze(1000); + const uhkDeviceProduct = await getCurrentUhkDongleHID(); + + if (uhkDeviceProduct) { + this.logService.misc('[DeviceService] Dongle not found, skip reenumeration'); + return; + } + + uhkHidDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, uhkDeviceProduct); + await uhkHidDevice.reenumerate({ + device: UHK_DONGLE, + enumerationMode: EnumerationModes.NormalKeyboard, + force: true, + }); + this.logService.misc('[DeviceService] Dongle force reenumerate done'); + } + catch(reenumerationError) { + this.logService.error("[DeviceService] Can't force reenumerate dongle", reenumerationError); + } + finally { + if (uhkHidDevice) { + uhkHidDevice.close(); + } + await snooze(1000); + } + } + + private async forceReenumerateLeftHalf(): Promise { + this.logService.misc('[DeviceService] Left half force reenumerate'); + + let uhkHidDevice: UhkHidDevice; + try { + await snooze(1000); + const uhkDeviceProduct = await getCurrenUhk80LeftHID(); + uhkHidDevice = new UhkHidDevice(this.logService, this.options, this.rootDir, uhkDeviceProduct); + await uhkHidDevice.reenumerate({ + device: UHK_80_DEVICE_LEFT, + enumerationMode: EnumerationModes.NormalKeyboard, + force: true, + }); + this.logService.misc('[DeviceService] Left half force reenumerate done'); + } + catch(reenumerationError) { + this.logService.error("[DeviceService] Can't force reenumerate left half", reenumerationError); + } + finally { + if (uhkHidDevice) { + uhkHidDevice.close(); + } + await snooze(1000); + } + } + + private async forceReenumerateDevice(): Promise { + this.logService.misc('[DeviceService] Device force reenumerate'); + + try { + this.device.close(); + await snooze(1000); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(this.options); + await this.device.reenumerate({ + device: uhkDeviceProduct, + enumerationMode: EnumerationModes.NormalKeyboard, + force: true, + }); + this.logService.misc('[DeviceService] Device force reenumerate done'); + } + catch(reenumerationError) { + this.logService.error("[DeviceService] Can't reenumerate force reenumerate device", reenumerationError); + } + finally { + this.device.close(); + await snooze(1000); + } + } } diff --git a/packages/uhk-agent/src/services/logger.service.ts b/packages/uhk-agent/src/services/logger.service.ts index b575cd6568f..3df775e5cf9 100644 --- a/packages/uhk-agent/src/services/logger.service.ts +++ b/packages/uhk-agent/src/services/logger.service.ts @@ -39,7 +39,15 @@ export class ElectronLogService extends LogService { if (LogRegExps.writeRegExp.test(args[0])) { this.log('%c' + args.join(' '), 'color:blue'); } else if (LogRegExps.readRegExp.test(args[0])) { - if (args[1] && args[1].substr(0, 2) === '00') { + let errorCodeStartIndex = 0; + let errorCodeEndIndex = 2; + + if (this._usbReportId) { + errorCodeStartIndex = 3; + errorCodeEndIndex = 5; + } + + if (args[1] && args[1].substring(errorCodeStartIndex, errorCodeEndIndex) === '00') { this.log('%c' + args.join(' '), 'color:green'); } else { this.log('%c' + args.join(' '), 'color:red'); diff --git a/packages/uhk-agent/src/util/command-line.ts b/packages/uhk-agent/src/util/command-line.ts index 026a45508a6..4d926ac403f 100644 --- a/packages/uhk-agent/src/util/command-line.ts +++ b/packages/uhk-agent/src/util/command-line.ts @@ -10,9 +10,12 @@ const optionDefinitions: commandLineArgs.OptionDefinition[] = [ { name: 'log', type: String }, { name: 'help', type: Boolean }, { name: 'pid', type: Number }, + { name: 'no-report-id', type: Boolean }, { name: 'preserve-udev-rules', type: Boolean }, { name: 'print-usb-devices', type: Boolean }, { name: 'reenumerate-and-exit', type: String }, + { name: 'report-id', type: Number }, + { name: 'serial-number', type: String }, { name: 'spe', type: Boolean }, // simulate privilege escalation error { name: 'usb-interface', type: Number }, { name: 'usb-non-blocking', type: Boolean }, @@ -50,6 +53,11 @@ const sections: commandLineUsage.Section[] = [ description: 'Set logging categories. --log=misc,usb. Default is "misc"', typeLabel: 'config | misc | usb | all' }, + { + name: 'no-report-id', + description: "Don't use report id for USB communication. The default value depends on the UHK device. You can not set --report-id and --no-report-id at the same time.", + type: Boolean, + }, { name: 'pid', description: 'Use the specified USB product id. If you set it you have to set the vid and usb-interface too.', @@ -72,6 +80,15 @@ const sections: commandLineUsage.Section[] = [ 'Please provide the timeout in milliseconds.', typeLabel: '(bootloader|buspal),timeout' }, + { + name: 'report-id', + description: 'Report Id that used for USB communication. If the value is -1 then does not use report id. The default value depends from the UHK device. For UHK 60 is 0. For UHK 80 is 4', + }, + { + name: 'serial-number', + description: 'Use the specified USB device that serial-number is matching.', + type: String + }, { name: 'spe', description: 'Simulate privilege escalation error', diff --git a/packages/uhk-agent/src/util/load-user-config-history-async.ts b/packages/uhk-agent/src/util/load-user-config-history-async.ts index 5334ba69b03..c15987972c1 100644 --- a/packages/uhk-agent/src/util/load-user-config-history-async.ts +++ b/packages/uhk-agent/src/util/load-user-config-history-async.ts @@ -1,11 +1,12 @@ import { readdir, stat } from 'node:fs/promises'; import path from 'node:path'; -import { convertHistoryFilenameToDisplayText } from 'uhk-common'; -import { getMd5HashFromFilename } from 'uhk-common'; import { + convertHistoryFilenameToDisplayText, DeviceUserConfigHistory, + getMd5HashFromFilename, sortStringDesc, UHK_DEVICES, + UNKNOWN_DEVICE, UserConfigHistory, } from 'uhk-common'; @@ -47,17 +48,9 @@ export async function loadUserConfigHistoryAsync(): Promise { } const deviceHistoryDir = path.join(userConfigHistoryDir, entry); - const device = UHK_DEVICES.find(device => device.id === deviceId); - - if (!device) { - // The device is not supported by this version of Agent. - // Or someone manually modified the user-config history folder and set invalid device id. - continue; - } - const deviceHistory: DeviceUserConfigHistory = { uniqueId: Number.parseInt(entrySplit[0], 10), - device, + device: UHK_DEVICES.find(device => device.id === deviceId) || UNKNOWN_DEVICE, deviceName: '', files: (await readdir(deviceHistoryDir)) .filter(file => path.extname(file) === '.bin') diff --git a/packages/uhk-agent/src/util/reenumerate-and-exit.ts b/packages/uhk-agent/src/util/reenumerate-and-exit.ts index a3d0c558a93..535469baf7c 100644 --- a/packages/uhk-agent/src/util/reenumerate-and-exit.ts +++ b/packages/uhk-agent/src/util/reenumerate-and-exit.ts @@ -1,7 +1,6 @@ import { UhkHidDevice, EnumerationModes, - getDeviceEnumerateProductId, getCurrentUhkDeviceProduct, getUhkDevices } from 'uhk-usb'; @@ -24,12 +23,10 @@ export async function reenumerateAndExit(options: ReenumerateAndExitOptions): Pr const startTime = new Date(); const reenumerationOption = parseReenumerateAndExitArg(arg); - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); - const enumerationProduct = getDeviceEnumerateProductId(uhkDeviceProduct, reenumerationOption.mode); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(options.commandLineArgs); await options.uhkHidDevice.reenumerate({ + device: uhkDeviceProduct, enumerationMode: reenumerationOption.mode, - vendorId: uhkDeviceProduct.vendorId, - productId: enumerationProduct, timeout: reenumerationOption.timeout }); diff --git a/packages/uhk-agent/src/vendor.ts b/packages/uhk-agent/src/vendor.ts deleted file mode 100644 index 29d879f32ab..00000000000 --- a/packages/uhk-agent/src/vendor.ts +++ /dev/null @@ -1 +0,0 @@ -import 'sudo-prompt'; diff --git a/packages/uhk-agent/webpack.config.js b/packages/uhk-agent/webpack.config.js index f76f1d3a4da..c9d82b5e536 100644 --- a/packages/uhk-agent/webpack.config.js +++ b/packages/uhk-agent/webpack.config.js @@ -15,7 +15,8 @@ module.exports = { }, target: 'electron-main', externals: { - "node-hid": "require('node-hid')" + "node-hid": "require('node-hid')", + "serialport": "require('serialport')", }, devtool: 'source-map', resolve: { diff --git a/packages/uhk-common/package-lock.json b/packages/uhk-common/package-lock.json index 94b55c8881a..355d39dfe57 100644 --- a/packages/uhk-common/package-lock.json +++ b/packages/uhk-common/package-lock.json @@ -13,8 +13,8 @@ "lodash.isequal": "4.5.0", "md5": "2.3.0", "moment": "2.29.4", - "semver": "7.5.4", - "tslib": "2.6.3" + "semver": "7.6.3", + "tslib": "2.8.1" } }, "node_modules/base64-js": { @@ -104,17 +104,6 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -134,12 +123,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -148,14 +135,10 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" } }, "dependencies": { @@ -198,14 +181,6 @@ "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", "integrity": "sha1-QVxEePK8wwEgwizhDtMib30+GOA=" }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "requires": { - "yallist": "^4.0.0" - } - }, "md5": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/md5/-/md5-2.3.0.tgz", @@ -222,22 +197,14 @@ "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==" }, "tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==" } } } diff --git a/packages/uhk-common/package.json b/packages/uhk-common/package.json index 7b4618c1fc3..c5641343a60 100644 --- a/packages/uhk-common/package.json +++ b/packages/uhk-common/package.json @@ -23,8 +23,8 @@ "lodash.isequal": "4.5.0", "md5": "2.3.0", "moment": "2.29.4", - "semver": "7.5.4", - "tslib": "2.6.3" + "semver": "7.6.3", + "tslib": "2.8.1" }, "license": "GPL-3.0", "nyc": { diff --git a/packages/uhk-common/src/config-serializer/README.md b/packages/uhk-common/src/config-serializer/README.md index 46f0b40f9ff..ac25f1a1fe1 100644 --- a/packages/uhk-common/src/config-serializer/README.md +++ b/packages/uhk-common/src/config-serializer/README.md @@ -12,7 +12,7 @@ Given that the development dependencies are installed on your system you should There are 3 different representations of the configuration, each filling a specific purpose. -The **JavaScript representation** is optimally suited to be serialized as JSON, and saved to the file system, or transmitted over the network. As a plaintext format, it's human-readable and easily editable. See [user-config.json](../../../uhk-web/src/app/services/user-config.json) for an example configuration. +The **JavaScript representation** is optimally suited to be serialized as JSON, and saved to the file system, or transmitted over the network. As a plaintext format, it's human-readable and easily editable. See [user-config.json](../../../uhk-web/src/app/services/user-config-80.json) for an example configuration. The **TypeScript representation** is structurally similar to the JavaScript representation, but it features strongly typed TypeScript objects instead of typeless JavaScript objects. This representation is meant to be used by Agent. Extensive, per-property [assertion](assert.ts) takes place upon initializing the TypeScript objects to ensure the integrity of the configuration. @@ -75,7 +75,7 @@ KeyActions.toJsObject: ## Testing the serializer -[test-serializer.ts](test-serializer.ts) is designed to test the serializer by taking [user-config.json](../../../uhk-web/src/app/services/user-config.json), and transforming it to TypeScript representation, then to binary representation, then finally back to JavaScript representation. This should exercise every major code path. +[test-serializer.ts](test-serializer.ts) is designed to test the serializer by taking [user-config.json](../../../uhk-web/src/app/services/user-config.-80json), and transforming it to TypeScript representation, then to binary representation, then finally back to JavaScript representation. This should exercise every major code path. If the testing is successful the following should be displayed: diff --git a/packages/uhk-common/src/config-serializer/config-items/host-connection.ts b/packages/uhk-common/src/config-serializer/config-items/host-connection.ts new file mode 100644 index 00000000000..0b0a522e4f0 --- /dev/null +++ b/packages/uhk-common/src/config-serializer/config-items/host-connection.ts @@ -0,0 +1,184 @@ +import { assertEnum } from '../assert.js'; +import { UhkBuffer } from '../uhk-buffer.js'; +import { SerialisationInfo } from './serialisation-info.js'; + +export enum HostConnections { + Empty = 0, + UsbRight = 1, + UsbLeft = 2, + BLE = 3, + Dongle = 4, +} + +export const HOST_CONNECTION_LABELS: Readonly> = Object.freeze({ + [HostConnections.Empty]: 'Empty', + [HostConnections.UsbRight]: 'USB Right', + [HostConnections.UsbLeft]: 'USB Left', + [HostConnections.BLE]: 'BLE', + [HostConnections.Dongle]: 'Dongle', +}); + +export const HOST_CONNECTION_COUNT_MAX = 22; +export const BLE_ADDRESS_LENGTH = 6; +const BLE_ADDRESS_SEPARATOR = ':'; + +export function convertBleAddressArrayToString(address: number[]): string { + return address.map(x => x.toString(16)).join(BLE_ADDRESS_SEPARATOR); +} + +export function convertBleStringToNumberArray(address: string): number[] { + const split = address.split(BLE_ADDRESS_SEPARATOR); + const result: number[] = []; + + for(let i = 0; i < BLE_ADDRESS_LENGTH; i++) { + const segment = Number.parseInt(split[i], 16) || 0; + result.push(segment); + } + + return result; +} + +export class HostConnection { + @assertEnum(HostConnections) type: HostConnections; + + address: string; + name: string; + switchover: boolean; + + constructor(other?: HostConnection) { + this.switchover = false; + + if (other) { + this.type = other.type; + this.address = other.address; + this.name = other.name; + this.switchover = other.switchover; + } + } + + fromJsonObject(jsonObject: any, serialisationInfo: SerialisationInfo): HostConnection { + switch (serialisationInfo.userConfigMajorVersion) { + case 8: + return this.fromJsonObjectV8(jsonObject, serialisationInfo); + + default: + throw new Error(`HostConnection configuration does not support version: ${serialisationInfo.userConfigMajorVersion}`); + } + } + + fromBinary(buffer: UhkBuffer, serialisationInfo: SerialisationInfo): HostConnection { + switch (serialisationInfo.userConfigMajorVersion) { + case 8: + return this.fromJsonBinaryV8(buffer, serialisationInfo); + + default: + throw new Error(`HostConnection configuration does not support version: ${serialisationInfo.userConfigMajorVersion}`); + } + } + + toJsonObject(): any { + const json: any = { + type: HostConnections[this.type], + }; + + if(this.hasAddress()) { + json.address = this.address; + } + + if (this.type !== HostConnections.Empty) { + json.switchover = this.switchover; + json.name = this.name; + } + + return json; + } + + toBinary(buffer: UhkBuffer): void { + buffer.writeUInt8(this.type); + + if (this.hasAddress()) { + const address = this.address.split(BLE_ADDRESS_SEPARATOR); + + for(let i = 0; i < BLE_ADDRESS_LENGTH; i++) { + const segment = Number.parseInt(address[i], 16) || 0; + buffer.writeUInt8(segment); + } + } + + if (this.type !== HostConnections.Empty) { + buffer.writeBoolean(this.switchover); + buffer.writeString(this.name); + } + } + + public hasAddress(): boolean { + return this.type === HostConnections.BLE || this.type === HostConnections.Dongle; + } + + private fromJsonBinaryV8(buffer: UhkBuffer, serialisationInfo: SerialisationInfo): HostConnection { + this.type = buffer.readUInt8(); + + if (this.hasAddress()) { + const address = []; + + for(let i = 0; i < BLE_ADDRESS_LENGTH; i++) { + address.push(buffer.readUInt8()); + } + + this.address = convertBleAddressArrayToString(address); + } + + if (this.type !== HostConnections.Empty) { + this.switchover = false; + if (serialisationInfo.userConfigMinorVersion >= 3) { + this.switchover = buffer.readBoolean(); + } + + this.name = buffer.readString(); + } + + return this; + } + + private fromJsonObjectV8(jsonObject: any, serialisationInfo: SerialisationInfo): HostConnection { + this.type = HostConnections[jsonObject.type]; + if (this.hasAddress()) { + this.address = jsonObject.address; + } + + if (this.type === HostConnections.Empty) { + this.name = ''; + this.switchover = false; + } + else { + this.name = jsonObject.name; + this.switchover = jsonObject.switchover ?? false; + } + + return this; + } +} + +export function emptyHostConnection(): HostConnection { + const hostConnection = new HostConnection(); + hostConnection.type = HostConnections.Empty; + hostConnection.name = ''; + + return hostConnection; +} + +export function defaultHostConnections(): HostConnection[] { + const usbHostConnection = new HostConnection(); + usbHostConnection.type = HostConnections.UsbRight; + usbHostConnection.name = 'My PC'; + + const hostConnections: HostConnection[] = [ + usbHostConnection + ]; + + for (let i = hostConnections.length; i < HOST_CONNECTION_COUNT_MAX; i++) { + hostConnections.push(emptyHostConnection()); + } + + return hostConnections; +} diff --git a/packages/uhk-common/src/config-serializer/config-items/index.ts b/packages/uhk-common/src/config-serializer/config-items/index.ts index c836b41f0cc..87f1316f7b4 100644 --- a/packages/uhk-common/src/config-serializer/config-items/index.ts +++ b/packages/uhk-common/src/config-serializer/config-items/index.ts @@ -5,6 +5,7 @@ export * from './key-action/index.js'; export * from './macro-action/index.js'; export * from './modules-default-configs.js'; export * from './hardware-configuration.js'; +export * from './host-connection.js'; export * from './key-modifiers.js'; export * from './keymap.js'; export * from './layer.js'; diff --git a/packages/uhk-common/src/config-serializer/config-items/key-action/helper.ts b/packages/uhk-common/src/config-serializer/config-items/key-action/helper.ts index 1f579f3b635..dcfcab18b42 100644 --- a/packages/uhk-common/src/config-serializer/config-items/key-action/helper.ts +++ b/packages/uhk-common/src/config-serializer/config-items/key-action/helper.ts @@ -32,6 +32,7 @@ export class Helper { case 5: case 6: case 7: + case 8: return this.fromUhkBufferV1(buffer, macros, serialisationInfo); default: @@ -96,6 +97,7 @@ export class Helper { case 5: case 6: case 7: + case 8: return this.fromJSONObjectV1(keyAction, macros, serialisationInfo); default: diff --git a/packages/uhk-common/src/config-serializer/config-items/key-action/keystroke-action.ts b/packages/uhk-common/src/config-serializer/config-items/key-action/keystroke-action.ts index c7b621dab58..3be654ff999 100644 --- a/packages/uhk-common/src/config-serializer/config-items/key-action/keystroke-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/key-action/keystroke-action.ts @@ -81,6 +81,7 @@ export class KeystrokeAction extends KeyAction { case 6: case 7: + case 8: this.fromJsonObjectV6(jsonObject, serialisationInfo); break; @@ -103,6 +104,7 @@ export class KeystrokeAction extends KeyAction { case 6: case 7: + case 8: this.fromBinaryV6(buffer, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/key-action/mouse-action.ts b/packages/uhk-common/src/config-serializer/config-items/key-action/mouse-action.ts index cfe448d4450..2eec40899de 100644 --- a/packages/uhk-common/src/config-serializer/config-items/key-action/mouse-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/key-action/mouse-action.ts @@ -60,6 +60,7 @@ export class MouseAction extends KeyAction { case 6: case 7: + case 8: this.fromJsonObjectV6(jsonObject, serialisationInfo); break; @@ -82,6 +83,7 @@ export class MouseAction extends KeyAction { case 6: case 7: + case 8: this.fromBinaryV6(buffer, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/key-action/play-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/key-action/play-macro-action.ts index c7b781db3fd..81496fbf13d 100644 --- a/packages/uhk-common/src/config-serializer/config-items/key-action/play-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/key-action/play-macro-action.ts @@ -35,6 +35,7 @@ export class PlayMacroAction extends KeyAction { case 6: case 7: + case 8: this.fromJsonObjectV6(jsonObject, macros, serialisationInfo); break; @@ -57,6 +58,7 @@ export class PlayMacroAction extends KeyAction { case 6: case 7: + case 8: this.fromBinaryV6(buffer, macros, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/key-action/switch-keymap-action.ts b/packages/uhk-common/src/config-serializer/config-items/key-action/switch-keymap-action.ts index 0d2db242588..0737971304b 100644 --- a/packages/uhk-common/src/config-serializer/config-items/key-action/switch-keymap-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/key-action/switch-keymap-action.ts @@ -39,6 +39,7 @@ export class SwitchKeymapAction extends KeyAction { case 6: case 7: + case 8: this.fromJsonObjectV6(jsonObject, serialisationInfo); break; @@ -111,6 +112,7 @@ export class UnresolvedSwitchKeymapAction extends KeyAction { case 6: case 7: + case 8: this.fromBinaryV6(buffer, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/key-action/switch-layer-action.ts b/packages/uhk-common/src/config-serializer/config-items/key-action/switch-layer-action.ts index e589c5e7a10..999d554f587 100644 --- a/packages/uhk-common/src/config-serializer/config-items/key-action/switch-layer-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/key-action/switch-layer-action.ts @@ -69,6 +69,7 @@ export class SwitchLayerAction extends KeyAction { case 6: case 7: + case 8: this.fromJsonObjectV6(jsonObject, serialisationInfo); break; @@ -91,6 +92,7 @@ export class SwitchLayerAction extends KeyAction { case 6: case 7: + case 8: this.fromBinaryV6(buffer, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/keymap.ts b/packages/uhk-common/src/config-serializer/config-items/keymap.ts index f82669ad44f..5e07a3ed3d2 100644 --- a/packages/uhk-common/src/config-serializer/config-items/keymap.ts +++ b/packages/uhk-common/src/config-serializer/config-items/keymap.ts @@ -38,6 +38,7 @@ export class Keymap { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject, macros, serialisationInfo); break; @@ -59,6 +60,7 @@ export class Keymap { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer, macros, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/layer.ts b/packages/uhk-common/src/config-serializer/config-items/layer.ts index 9f66fa71f28..ca522505f7f 100644 --- a/packages/uhk-common/src/config-serializer/config-items/layer.ts +++ b/packages/uhk-common/src/config-serializer/config-items/layer.ts @@ -37,6 +37,7 @@ export class Layer { case 5: case 6: case 7: + case 8: this.fromJsonObjectV5(jsonObject, macros, serialisationInfo); break; @@ -59,6 +60,7 @@ export class Layer { case 5: case 6: case 7: + case 8: this.fromBinaryV5(buffer, macros, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/command-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/command-macro-action.ts index 70f1f5609af..fee4f2a02a8 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/command-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/command-macro-action.ts @@ -23,6 +23,7 @@ export class CommandMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject); break; @@ -42,6 +43,7 @@ export class CommandMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/delay-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/delay-macro-action.ts index e9d63408f8c..9ec9a058c98 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/delay-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/delay-macro-action.ts @@ -24,6 +24,7 @@ export class DelayMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject); break; @@ -43,6 +44,7 @@ export class DelayMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/key-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/key-macro-action.ts index 4d12b67dd82..b100663faeb 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/key-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/key-macro-action.ts @@ -56,6 +56,7 @@ export class KeyMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject); break; @@ -75,6 +76,7 @@ export class KeyMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/keymap.spec.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/keymap.spec.ts index 530f0d14047..87fcc6a5350 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/keymap.spec.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/keymap.spec.ts @@ -1,6 +1,6 @@ import { UserConfiguration } from '../user-configuration.js'; -describe('keymap', () => { +xdescribe('keymap', () => { it('should normalize SwitchLayerAction if non base layer action is not SwitchLayerAction', () => { const inputJsonConfig = { userConfigMajorVersion: 3, @@ -79,15 +79,11 @@ describe('keymap', () => { ] }; const expectedJsonConfig = { - userConfigMajorVersion: 7, + userConfigMajorVersion: 8, userConfigMinorVersion: 1, userConfigPatchVersion: 0, deviceName: 'My UHK', doubleTapSwitchLayerTimeout: 250, - iconsAndLayerTextsBrightness: 255, - alphanumericSegmentsBrightness: 255, - keyBacklightBrightness: 255, - ledsFadeTimeout: 0, perKeyRgbPresent: false, backlightingMode: 'FunctionalBacklighting', backlightingNoneActionColor: {r:0, g:0, b:0}, @@ -120,6 +116,83 @@ describe('keymap', () => { diagonalSpeedCompensation: false, doubletapTimeout: 400, keystrokeDelay: 0, + displayBrightness: 255, + displayBrightnessBattery: 255, + keyBacklightBrightness: 255, + keyBacklightBrightnessBattery: 255, + displayFadeOutTimeout: 0, + displayFadeOutBatteryTimeout: 0, + keyBacklightFadeOutTimeout: 0, + keyBacklightFadeOutBatteryTimeout: 0, + hostConnections: [ + { + type: 'UsbRight', + name: 'My PC', + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + ], moduleConfigurations: [ { id: 'KeyClusterLeft', @@ -360,15 +433,11 @@ describe('keymap', () => { ] }; const expectedJsonConfig = { - userConfigMajorVersion: 7, + userConfigMajorVersion: 8, userConfigMinorVersion: 1, userConfigPatchVersion: 0, deviceName: 'My UHK', doubleTapSwitchLayerTimeout: 250, - iconsAndLayerTextsBrightness: 255, - alphanumericSegmentsBrightness: 255, - keyBacklightBrightness: 255, - ledsFadeTimeout: 0, perKeyRgbPresent: false, backlightingMode: 'FunctionalBacklighting', backlightingNoneActionColor: {r:0, g:0, b:0}, @@ -401,6 +470,83 @@ describe('keymap', () => { diagonalSpeedCompensation: false, doubletapTimeout: 400, keystrokeDelay: 0, + displayBrightness: 255, + displayBrightnessBattery: 255, + keyBacklightBrightness: 255, + keyBacklightBrightnessBattery: 255, + displayFadeOutTimeout: 0, + displayFadeOutBatteryTimeout: 0, + keyBacklightFadeOutTimeout: 0, + keyBacklightFadeOutBatteryTimeout: 0, + hostConnections: [ + { + type: 'UsbRight', + name: 'My PC', + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + ], moduleConfigurations: [ { id: 'KeyClusterLeft', diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/mouse-button-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/mouse-button-macro-action.ts index ffed0b76740..09d6fb5d98f 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/mouse-button-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/mouse-button-macro-action.ts @@ -38,6 +38,7 @@ export class MouseButtonMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject); break; @@ -57,6 +58,7 @@ export class MouseButtonMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/move-mouse-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/move-mouse-macro-action.ts index 818139cb673..c800d663f2d 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/move-mouse-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/move-mouse-macro-action.ts @@ -27,6 +27,7 @@ export class MoveMouseMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject); break; @@ -46,6 +47,7 @@ export class MoveMouseMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/scroll-mouse-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/scroll-mouse-macro-action.ts index 90b35018097..f9dc1951835 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/scroll-mouse-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/scroll-mouse-macro-action.ts @@ -27,6 +27,7 @@ export class ScrollMouseMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject); break; @@ -46,6 +47,7 @@ export class ScrollMouseMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro-action/text-macro-action.ts b/packages/uhk-common/src/config-serializer/config-items/macro-action/text-macro-action.ts index a6ecc23f910..7d08dcd3233 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro-action/text-macro-action.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro-action/text-macro-action.ts @@ -23,6 +23,7 @@ export class TextMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject); break; @@ -42,6 +43,7 @@ export class TextMacroAction extends MacroAction { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/macro.ts b/packages/uhk-common/src/config-serializer/config-items/macro.ts index 3f6861d14d4..1fcef845942 100644 --- a/packages/uhk-common/src/config-serializer/config-items/macro.ts +++ b/packages/uhk-common/src/config-serializer/config-items/macro.ts @@ -36,6 +36,7 @@ export class Macro { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject, serialisationInfo); break; @@ -55,6 +56,7 @@ export class Macro { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer, serialisationInfo); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/module-configuration.ts b/packages/uhk-common/src/config-serializer/config-items/module-configuration.ts index 3f23f95b56d..ad94db65dba 100644 --- a/packages/uhk-common/src/config-serializer/config-items/module-configuration.ts +++ b/packages/uhk-common/src/config-serializer/config-items/module-configuration.ts @@ -91,6 +91,7 @@ export class ModuleConfiguration { break; case 7: + case 8: this.fromJsonObjectV7(jsonObject); break; @@ -112,6 +113,7 @@ export class ModuleConfiguration { break; case 7: + case 8: this.fromBinaryV7(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/module.ts b/packages/uhk-common/src/config-serializer/config-items/module.ts index d242a9c182f..ecacb22be13 100644 --- a/packages/uhk-common/src/config-serializer/config-items/module.ts +++ b/packages/uhk-common/src/config-serializer/config-items/module.ts @@ -5,6 +5,9 @@ import { Macro } from './macro.js'; import { SerialisationInfo } from './serialisation-info.js'; import { UserConfiguration } from './user-configuration.js'; +export const UHK_60_LEFT_MAX_KEY_ACTION_COUNT = 32; +export const UHK_60_RIGHT_MAX_KEY_ACTION_COUNT = 34; + export class Module { @assertUInt8 id: number; @@ -28,6 +31,7 @@ export class Module { case 5: case 6: case 7: + case 8: this.fromJsonObjectV1(jsonObject, macros, serialisationInfo); break; @@ -47,6 +51,7 @@ export class Module { case 5: case 6: case 7: + case 8: this.fromBinaryV1(buffer, macros, serialisationInfo); break; @@ -64,7 +69,8 @@ export class Module { if (keyAction && (macros || !(keyAction instanceof PlayMacroAction || keyAction instanceof SwitchKeymapAction))) { return keyAction.toJsonObject(serialisationInfo, macros); } - return new NoneAction(); + + return new NoneAction().toJsonObject(serialisationInfo); }) }; } diff --git a/packages/uhk-common/src/config-serializer/config-items/rgb-color.ts b/packages/uhk-common/src/config-serializer/config-items/rgb-color.ts index 08ba1bbe18d..edac938a9f6 100644 --- a/packages/uhk-common/src/config-serializer/config-items/rgb-color.ts +++ b/packages/uhk-common/src/config-serializer/config-items/rgb-color.ts @@ -33,6 +33,7 @@ export class RgbColor { case 6: case 7: + case 8: this.fromJsonV6(jsonObject); break; @@ -54,6 +55,7 @@ export class RgbColor { case 6: case 7: + case 8: this.fromBinaryV6(buffer); break; diff --git a/packages/uhk-common/src/config-serializer/config-items/scancodes.ts b/packages/uhk-common/src/config-serializer/config-items/scancodes.ts index 476541d6498..c9fc6a3edf6 100644 --- a/packages/uhk-common/src/config-serializer/config-items/scancodes.ts +++ b/packages/uhk-common/src/config-serializer/config-items/scancodes.ts @@ -211,9 +211,6 @@ const SCANCODES = [ "children": [ { "id": "40", - "additional": { - "explanation": "Return" - }, "text": "Enter" }, { diff --git a/packages/uhk-common/src/config-serializer/config-items/serialisation-info.ts b/packages/uhk-common/src/config-serializer/config-items/serialisation-info.ts index 7831a512655..af6059952df 100644 --- a/packages/uhk-common/src/config-serializer/config-items/serialisation-info.ts +++ b/packages/uhk-common/src/config-serializer/config-items/serialisation-info.ts @@ -5,9 +5,11 @@ export interface SerialisationInfo { isUserConfigContainsRgbColors: boolean; userConfigMajorVersion: number; + userConfigMinorVersion: number; } export const DEFAULT_SERIALISATION_INFO: SerialisationInfo = { isUserConfigContainsRgbColors: false, - userConfigMajorVersion: 6 + userConfigMajorVersion: 6, + userConfigMinorVersion: 0, }; diff --git a/packages/uhk-common/src/config-serializer/config-items/user-configuration.spec.ts b/packages/uhk-common/src/config-serializer/config-items/user-configuration.spec.ts index e65a8d8cb2b..cd3d3108023 100644 --- a/packages/uhk-common/src/config-serializer/config-items/user-configuration.spec.ts +++ b/packages/uhk-common/src/config-serializer/config-items/user-configuration.spec.ts @@ -8,15 +8,11 @@ describe('user-configuration', () => { it('should transform an empty config', () => { jsonTester({ - userConfigMajorVersion: 7, - userConfigMinorVersion: 1, + userConfigMajorVersion: 8, + userConfigMinorVersion: 3, userConfigPatchVersion: 0, deviceName: 'My UHK', doubleTapSwitchLayerTimeout: 250, - iconsAndLayerTextsBrightness: 255, - alphanumericSegmentsBrightness: 255, - keyBacklightBrightness: 255, - ledsFadeTimeout: 0, perKeyRgbPresent: false, backlightingMode: 'FunctionalBacklighting', backlightingNoneActionColor: {r:0, g:0, b:0}, @@ -49,6 +45,84 @@ describe('user-configuration', () => { diagonalSpeedCompensation: false, doubletapTimeout: 400, keystrokeDelay: 0, + displayBrightness: 255, + displayBrightnessBattery: 255, + keyBacklightBrightness: 255, + keyBacklightBrightnessBattery: 255, + displayFadeOutTimeout: 0, + displayFadeOutBatteryTimeout: 0, + keyBacklightFadeOutTimeout: 0, + keyBacklightFadeOutBatteryTimeout: 0, + hostConnections: [ + { + type: 'UsbRight', + name: 'My PC', + switchover: false, + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + { + type: 'Empty' + }, + ], moduleConfigurations: [ { id: 'KeyClusterLeft', diff --git a/packages/uhk-common/src/config-serializer/config-items/user-configuration.ts b/packages/uhk-common/src/config-serializer/config-items/user-configuration.ts index fb98c3011b4..bf424597578 100644 --- a/packages/uhk-common/src/config-serializer/config-items/user-configuration.ts +++ b/packages/uhk-common/src/config-serializer/config-items/user-configuration.ts @@ -4,10 +4,16 @@ import { assertEnum, assertUInt16, assertUInt32, assertUInt8 } from '../assert.j import { ConfigSerializer } from '../config-serializer.js'; import { UhkBuffer } from '../uhk-buffer.js'; import { BacklightingMode } from './backlighting-mode.js'; -import { KeystrokeAction, NoneAction } from './key-action/index.js'; +import { + defaultHostConnections, + HOST_CONNECTION_COUNT_MAX, + HostConnection, +} from './host-connection.js'; +import { KeyActionHelper, KeystrokeAction, NoneAction } from './key-action/index.js'; import { Keymap } from './keymap.js'; import { LayerName } from './layer-name.js'; import { Macro } from './macro.js'; +import { Module } from './module.js'; import { ModuleConfiguration } from './module-configuration.js'; import { defaultKeyClusterLeftModuleConfig } from './module-configuration/default-key-cluster-left-module-config.js'; import { defaultTouchpadRightModuleConfig } from './module-configuration/default-touchpad-right-module-config.js'; @@ -35,14 +41,45 @@ export class UserConfiguration implements MouseSpeedConfiguration { @assertUInt16 doubleTapSwitchLayerTimeout: number; + /** + * Deprecated in version 8. + */ @assertUInt8 iconsAndLayerTextsBrightness: number; + /** + * Deprecated in version 8. + * Use + * - `displayBrightness` + * - `displayBrightnessBattery` + */ @assertUInt8 alphanumericSegmentsBrightness: number; + @assertUInt8 displayBrightness: number; + + @assertUInt8 displayBrightnessBattery: number; + @assertUInt8 keyBacklightBrightness: number; + /** + * Deprecated in version 8. + * Use + * - `displayFadeOutTimeout` + * - `displayFadeOutBatteryTimeout` + * - `keyBacklightFadeOutTimeout` + * - `keyBacklightFadeOutBatteryTimeout` + */ @assertUInt16 ledsFadeTimeout: number; + @assertUInt8 keyBacklightBrightnessBattery: number; + + @assertUInt16 displayFadeOutTimeout: number; + + @assertUInt16 displayFadeOutBatteryTimeout: number; + + @assertUInt16 keyBacklightFadeOutTimeout: number; + + @assertUInt16 keyBacklightFadeOutBatteryTimeout: number; + perKeyRgbPresent: boolean; @assertEnum(BacklightingMode) backlightingMode: BacklightingMode; @@ -107,6 +144,8 @@ export class UserConfiguration implements MouseSpeedConfiguration { @assertUInt16 keystrokeDelay: number; + hostConnections: HostConnection[] = []; + moduleConfigurations: ModuleConfiguration[] = []; keymaps: Keymap[] = []; @@ -119,8 +158,10 @@ export class UserConfiguration implements MouseSpeedConfiguration { clone(): UserConfiguration { const userConfig = Object.assign(new UserConfiguration(), this); + userConfig.hostConnections = userConfig.hostConnections.map(hostConnection => new HostConnection(hostConnection)); userConfig.keymaps = userConfig.keymaps.map(keymap => new Keymap(keymap)); userConfig.macros = userConfig.macros.map(macro => new Macro(macro)); + userConfig.moduleConfigurations = userConfig.moduleConfigurations.map(module => new ModuleConfiguration(module)); return userConfig; } @@ -147,6 +188,10 @@ export class UserConfiguration implements MouseSpeedConfiguration { this.fromJsonObjectV7(jsonObject); break; + case 8: + this.fromJsonObjectV8(jsonObject); + break; + default: throw new Error(`User configuration does not support version: ${this.userConfigMajorVersion}`); } @@ -156,6 +201,11 @@ export class UserConfiguration implements MouseSpeedConfiguration { this.migrateToV6(); this.migrateToV7(); this.migrateToV7_1(); + this.migrateToV8(); + this.migrateToV8_1(); + this.migrateToV8_2(); + this.migrateToV8_3(); + this.recalculateConfigurationLength(); return this; @@ -183,6 +233,10 @@ export class UserConfiguration implements MouseSpeedConfiguration { this.fromBinaryV7(buffer); break; + case 8: + this.fromBinaryV8(buffer); + break; + default: throw new Error(`User configuration does not support version: ${this.userConfigMajorVersion}`); } @@ -204,6 +258,22 @@ export class UserConfiguration implements MouseSpeedConfiguration { this.userConfigurationLength = 0; } + if (this.migrateToV8()) { + this.userConfigurationLength = 0; + } + + if (this.migrateToV8_1()) { + this.userConfigurationLength = 0; + } + + if (this.migrateToV8_2()) { + this.userConfigurationLength = 0; + } + + if (this.migrateToV8_3()) { + this.userConfigurationLength = 0; + } + if (this.userConfigurationLength === 0) { this.recalculateConfigurationLength(); } @@ -218,10 +288,6 @@ export class UserConfiguration implements MouseSpeedConfiguration { userConfigPatchVersion: this.userConfigPatchVersion, deviceName: this.deviceName, doubleTapSwitchLayerTimeout: this.doubleTapSwitchLayerTimeout, - iconsAndLayerTextsBrightness: this.iconsAndLayerTextsBrightness, - alphanumericSegmentsBrightness: this.alphanumericSegmentsBrightness, - keyBacklightBrightness: this.keyBacklightBrightness, - ledsFadeTimeout: this.ledsFadeTimeout, perKeyRgbPresent: this.perKeyRgbPresent, backlightingMode: BacklightingMode[this.backlightingMode], backlightingNoneActionColor: this.backlightingNoneActionColor.toJsonObject(), @@ -254,6 +320,17 @@ export class UserConfiguration implements MouseSpeedConfiguration { diagonalSpeedCompensation: this.diagonalSpeedCompensation, doubletapTimeout: this.doubletapTimeout, keystrokeDelay: this.keystrokeDelay, + + displayBrightness: this.displayBrightness, + displayBrightnessBattery: this.displayBrightnessBattery, + keyBacklightBrightness: this.keyBacklightBrightness, + keyBacklightBrightnessBattery: this.keyBacklightBrightnessBattery, + displayFadeOutTimeout: this.displayFadeOutTimeout, + displayFadeOutBatteryTimeout: this.displayFadeOutBatteryTimeout, + keyBacklightFadeOutTimeout: this.keyBacklightFadeOutTimeout, + keyBacklightFadeOutBatteryTimeout: this.keyBacklightFadeOutBatteryTimeout, + + hostConnections: this.hostConnections.map(hostConnection => hostConnection.toJsonObject()), moduleConfigurations: this.moduleConfigurations.map(moduleConfiguration => moduleConfiguration.toJsonObject()), keymaps: this.keymaps.map(keymap => keymap.toJsonObject(this.getSerialisationInfo(), this.macros)), macros: this.macros.map(macro => macro.toJsonObject()) @@ -267,10 +344,6 @@ export class UserConfiguration implements MouseSpeedConfiguration { buffer.writeUInt32(this.userConfigurationLength); buffer.writeString(this.deviceName); buffer.writeUInt16(this.doubleTapSwitchLayerTimeout); - buffer.writeUInt8(this.iconsAndLayerTextsBrightness); - buffer.writeUInt8(this.alphanumericSegmentsBrightness); - buffer.writeUInt8(this.keyBacklightBrightness); - buffer.writeUInt16(this.ledsFadeTimeout); buffer.writeBoolean(this.perKeyRgbPresent); buffer.writeUInt8(this.backlightingMode); this.backlightingNoneActionColor.toBinary(buffer); @@ -305,6 +378,19 @@ export class UserConfiguration implements MouseSpeedConfiguration { buffer.writeUInt16(this.doubletapTimeout); buffer.writeUInt16(this.keystrokeDelay); + buffer.writeUInt8(this.displayBrightness); + buffer.writeUInt8(this.displayBrightnessBattery); + buffer.writeUInt8(this.keyBacklightBrightness); + buffer.writeUInt8(this.keyBacklightBrightnessBattery); + buffer.writeUInt16(this.displayFadeOutTimeout); + buffer.writeUInt16(this.displayFadeOutBatteryTimeout); + buffer.writeUInt16(this.keyBacklightFadeOutTimeout); + buffer.writeUInt16(this.keyBacklightFadeOutBatteryTimeout); + + for(let i = 0; i < HOST_CONNECTION_COUNT_MAX; i++) { + const hostConnection = this.hostConnections[i]; + hostConnection.toBinary(buffer); + } buffer.writeArray(this.moduleConfigurations); buffer.writeArray(this.macros); buffer.writeArray(this.keymaps, (uhkBuffer: UhkBuffer, keymap: Keymap) => { @@ -503,6 +589,76 @@ export class UserConfiguration implements MouseSpeedConfiguration { } + private fromBinaryV8(buffer: UhkBuffer): void { + this.userConfigurationLength = buffer.readUInt32(); + this.deviceName = buffer.readString(); + this.setDefaultDeviceName(); + this.doubleTapSwitchLayerTimeout = buffer.readUInt16(); + this.perKeyRgbPresent = buffer.readBoolean(); + this.backlightingMode = buffer.readUInt8(); + this.backlightingNoneActionColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.backlightingScancodeColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.backlightingModifierColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.backlightingShortcutColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.backlightingSwitchLayerColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.backlightingSwitchKeymapColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.backlightingMouseColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.backlightingMacroColor = new RgbColor().fromBinary(buffer, this.userConfigMajorVersion); + this.mouseMoveInitialSpeed = buffer.readUInt8(); + this.mouseMoveAcceleration = buffer.readUInt8(); + this.mouseMoveDeceleratedSpeed = buffer.readUInt8(); + this.mouseMoveBaseSpeed = buffer.readUInt8(); + this.mouseMoveAcceleratedSpeed = buffer.readUInt8(); + this.mouseScrollInitialSpeed = buffer.readUInt8(); + this.mouseScrollAcceleration = buffer.readUInt8(); + this.mouseScrollDeceleratedSpeed = buffer.readUInt8(); + this.mouseScrollBaseSpeed = buffer.readUInt8(); + this.mouseScrollAcceleratedSpeed = buffer.readUInt8(); + + this.secondaryRoleStrategy = buffer.readUInt8(); + this.secondaryRoleAdvancedStrategyDoubletapTimeout = buffer.readUInt16(); + this.secondaryRoleAdvancedStrategyTimeout = buffer.readUInt16(); + this.secondaryRoleAdvancedStrategySafetyMargin = buffer.readInt16(); + this.secondaryRoleAdvancedStrategyTriggerByRelease = buffer.readBoolean(); + this.secondaryRoleAdvancedStrategyDoubletapToPrimary = buffer.readBoolean(); + this.secondaryRoleAdvancedStrategyTimeoutAction = buffer.readUInt8(); + this.mouseScrollAxisSkew = buffer.readFloat(); + this.mouseMoveAxisSkew = buffer.readFloat(); + this.diagonalSpeedCompensation = buffer.readBoolean(); + this.doubletapTimeout = buffer.readUInt16(); + this.keystrokeDelay = buffer.readUInt16(); + + this.displayBrightness = buffer.readUInt8(); + this.displayBrightnessBattery = buffer.readUInt8(); + this.keyBacklightBrightness = buffer.readUInt8(); + this.keyBacklightBrightnessBattery = buffer.readUInt8(); + this.displayFadeOutTimeout = buffer.readUInt16(); + this.displayFadeOutBatteryTimeout = buffer.readUInt16(); + this.keyBacklightFadeOutTimeout = buffer.readUInt16(); + this.keyBacklightFadeOutBatteryTimeout = buffer.readUInt16(); + + const serialisationInfo = this.getSerialisationInfo(); + + if (this.userConfigMinorVersion >= 1) { + this.hostConnections = []; + for(let i = 0; i < HOST_CONNECTION_COUNT_MAX; i++) { + this.hostConnections.push(new HostConnection().fromBinary(buffer, serialisationInfo)); + } + } + + this.moduleConfigurations = buffer.readArray(uhkBuffer => { + return new ModuleConfiguration().fromBinary(uhkBuffer, serialisationInfo); + }); + this.macros = buffer.readArray((uhkBuffer, index) => { + const macro = new Macro().fromBinary(uhkBuffer, serialisationInfo); + macro.id = index; + return macro; + }); + this.keymaps = buffer.readArray(uhkBuffer => new Keymap().fromBinary(uhkBuffer, this.macros, serialisationInfo)); + ConfigSerializer.resolveSwitchKeymapActions(this.keymaps); + + } + private fromJsonObjectV1(jsonObject: any): void { this.deviceName = jsonObject.deviceName; this.setDefaultDeviceName(); @@ -632,6 +788,74 @@ export class UserConfiguration implements MouseSpeedConfiguration { }); } + private fromJsonObjectV8(jsonObject: any): void { + this.deviceName = jsonObject.deviceName; + this.setDefaultDeviceName(); + this.doubleTapSwitchLayerTimeout = jsonObject.doubleTapSwitchLayerTimeout; + this.perKeyRgbPresent = jsonObject.perKeyRgbPresent; + this.backlightingMode = BacklightingMode[jsonObject.backlightingMode as string]; + this.backlightingNoneActionColor = new RgbColor().fromJsonObject(jsonObject.backlightingNoneActionColor, this.userConfigMajorVersion); + this.backlightingScancodeColor = new RgbColor().fromJsonObject(jsonObject.backlightingScancodeColor, this.userConfigMajorVersion); + this.backlightingModifierColor = new RgbColor().fromJsonObject(jsonObject.backlightingModifierColor, this.userConfigMajorVersion); + this.backlightingShortcutColor = new RgbColor().fromJsonObject(jsonObject.backlightingShortcutColor, this.userConfigMajorVersion); + this.backlightingSwitchLayerColor = new RgbColor().fromJsonObject(jsonObject.backlightingSwitchLayerColor, this.userConfigMajorVersion); + this.backlightingSwitchKeymapColor = new RgbColor().fromJsonObject(jsonObject.backlightingSwitchKeymapColor, this.userConfigMajorVersion); + this.backlightingMouseColor = new RgbColor().fromJsonObject(jsonObject.backlightingMouseColor, this.userConfigMajorVersion); + this.backlightingMacroColor = new RgbColor().fromJsonObject(jsonObject.backlightingMacroColor, this.userConfigMajorVersion); + this.mouseMoveInitialSpeed = jsonObject.mouseMoveInitialSpeed; + this.mouseMoveAcceleration = jsonObject.mouseMoveAcceleration; + this.mouseMoveDeceleratedSpeed = jsonObject.mouseMoveDeceleratedSpeed; + this.mouseMoveBaseSpeed = jsonObject.mouseMoveBaseSpeed; + this.mouseMoveAcceleratedSpeed = jsonObject.mouseMoveAcceleratedSpeed; + this.mouseScrollInitialSpeed = jsonObject.mouseScrollInitialSpeed; + this.mouseScrollAcceleration = jsonObject.mouseScrollAcceleration; + this.mouseScrollDeceleratedSpeed = jsonObject.mouseScrollDeceleratedSpeed; + this.mouseScrollBaseSpeed = jsonObject.mouseScrollBaseSpeed; + this.mouseScrollAcceleratedSpeed = jsonObject.mouseScrollAcceleratedSpeed; + + this.secondaryRoleStrategy = SecondaryRoleStrategy[jsonObject.secondaryRoleStrategy as string]; + this.secondaryRoleAdvancedStrategyDoubletapTimeout = jsonObject.secondaryRoleAdvancedStrategyDoubletapTimeout; + this.secondaryRoleAdvancedStrategyTimeout = jsonObject.secondaryRoleAdvancedStrategyTimeout; + this.secondaryRoleAdvancedStrategySafetyMargin = jsonObject.secondaryRoleAdvancedStrategySafetyMargin; + this.secondaryRoleAdvancedStrategyTriggerByRelease = jsonObject.secondaryRoleAdvancedStrategyTriggerByRelease; + this.secondaryRoleAdvancedStrategyDoubletapToPrimary = jsonObject.secondaryRoleAdvancedStrategyDoubletapToPrimary; + this.secondaryRoleAdvancedStrategyTimeoutAction = SecondaryRoleAdvancedStrategyTimeoutAction[jsonObject.secondaryRoleAdvancedStrategyTimeoutAction as string]; + this.mouseScrollAxisSkew = jsonObject.mouseScrollAxisSkew; + this.mouseMoveAxisSkew = jsonObject.mouseMoveAxisSkew; + this.diagonalSpeedCompensation = jsonObject.diagonalSpeedCompensation; + this.doubletapTimeout = jsonObject.doubletapTimeout; + this.keystrokeDelay = jsonObject.keystrokeDelay; + + this.displayBrightness = jsonObject.displayBrightness; + this.displayBrightnessBattery = jsonObject.displayBrightnessBattery; + this.keyBacklightBrightness = jsonObject.keyBacklightBrightness; + this.keyBacklightBrightnessBattery = jsonObject.keyBacklightBrightnessBattery; + this.displayFadeOutTimeout = jsonObject.displayFadeOutTimeout; + this.displayFadeOutBatteryTimeout = jsonObject.displayFadeOutBatteryTimeout; + this.keyBacklightFadeOutTimeout = jsonObject.keyBacklightFadeOutTimeout; + this.keyBacklightFadeOutBatteryTimeout = jsonObject.keyBacklightFadeOutBatteryTimeout; + + const serialisationInfo = this.getSerialisationInfo(); + + if (this.userConfigMinorVersion >= 1) { + this.hostConnections = jsonObject.hostConnections.map((hostConnection: any) => { + return new HostConnection().fromJsonObject(hostConnection, serialisationInfo); + }); + } + + this.moduleConfigurations = jsonObject.moduleConfigurations.map((moduleConfiguration: any) => { + return new ModuleConfiguration().fromJsonObject(moduleConfiguration, serialisationInfo); + }); + this.macros = jsonObject.macros.map((macroJsonObject: any, index: number) => { + const macro = new Macro().fromJsonObject(macroJsonObject, serialisationInfo); + macro.id = index; + return macro; + }); + this.keymaps = jsonObject.keymaps.map((keymap: any) => { + return new Keymap().fromJsonObject(keymap, this.macros, serialisationInfo); + }); + } + private migrateToV5(): boolean { if (this.userConfigMajorVersion > 4) { return false; @@ -702,7 +926,7 @@ export class UserConfiguration implements MouseSpeedConfiguration { return false; } - if (this.userConfigMinorVersion > 1) { + if (this.userConfigMinorVersion >= 1) { return false; } @@ -711,11 +935,164 @@ export class UserConfiguration implements MouseSpeedConfiguration { return true; } + private migrateToV8(): boolean { + if (this.userConfigMajorVersion > 7) { + return false; + } + + this.userConfigMajorVersion = 8; + this.userConfigMinorVersion = 0; + this.userConfigPatchVersion = 0; + this.displayBrightness = this.alphanumericSegmentsBrightness; + this.displayBrightnessBattery = this.alphanumericSegmentsBrightness; + this.keyBacklightBrightnessBattery = this.keyBacklightBrightness; + this.displayFadeOutTimeout = this.ledsFadeTimeout; + this.displayFadeOutBatteryTimeout = this.ledsFadeTimeout; + this.keyBacklightFadeOutTimeout = this.ledsFadeTimeout; + this.keyBacklightFadeOutBatteryTimeout = this.ledsFadeTimeout; + + return true; + } + + private migrateToV8_1(): boolean { + if (this.userConfigMajorVersion > 8) { + return false; + } + + if (this.userConfigMinorVersion >= 1) { + return false; + } + + this.userConfigMinorVersion = 1; + this.hostConnections = defaultHostConnections(); + + return true; + } + + private migrateToV8_2(): boolean { + if (this.userConfigMajorVersion > 8) { + return false; + } + + if (this.userConfigMinorVersion >= 2) { + return false; + } + + this.userConfigMinorVersion = 2; + + for (const keymap of this.keymaps) { + for (const layer of keymap.layers) { + layer.modules = layer.modules.map(originalModule => { + // right half + if (originalModule.id === 0) { + const module = new Module(); + module.id = originalModule.id; + + module.keyActions[0] = KeyActionHelper.fromKeyAction(originalModule.keyActions[0]); + module.keyActions[1] = KeyActionHelper.fromKeyAction(originalModule.keyActions[1]); + module.keyActions[2] = KeyActionHelper.fromKeyAction(originalModule.keyActions[2]); + module.keyActions[3] = KeyActionHelper.fromKeyAction(originalModule.keyActions[3]); + module.keyActions[4] = KeyActionHelper.fromKeyAction(originalModule.keyActions[4]); + module.keyActions[5] = KeyActionHelper.fromKeyAction(originalModule.keyActions[5]); + module.keyActions[6] = KeyActionHelper.fromKeyAction(originalModule.keyActions[6]); + module.keyActions[7] = KeyActionHelper.fromKeyAction(originalModule.keyActions[14]); + module.keyActions[8] = KeyActionHelper.fromKeyAction(originalModule.keyActions[7]); + module.keyActions[9] = KeyActionHelper.fromKeyAction(originalModule.keyActions[8]); + module.keyActions[10] = KeyActionHelper.fromKeyAction(originalModule.keyActions[9]); + module.keyActions[11] = KeyActionHelper.fromKeyAction(originalModule.keyActions[10]); + module.keyActions[12] = KeyActionHelper.fromKeyAction(originalModule.keyActions[11]); + module.keyActions[13] = KeyActionHelper.fromKeyAction(originalModule.keyActions[12]); + module.keyActions[14] = KeyActionHelper.fromKeyAction(originalModule.keyActions[13]); + module.keyActions[15] = KeyActionHelper.fromKeyAction(originalModule.keyActions[21]); + module.keyActions[16] = KeyActionHelper.fromKeyAction(originalModule.keyActions[15]); + module.keyActions[17] = KeyActionHelper.fromKeyAction(originalModule.keyActions[16]); + module.keyActions[18] = KeyActionHelper.fromKeyAction(originalModule.keyActions[17]); + module.keyActions[19] = KeyActionHelper.fromKeyAction(originalModule.keyActions[18]); + module.keyActions[20] = KeyActionHelper.fromKeyAction(originalModule.keyActions[19]); + module.keyActions[21] = KeyActionHelper.fromKeyAction(originalModule.keyActions[20]); + module.keyActions[22] = KeyActionHelper.fromKeyAction(originalModule.keyActions[22]); + module.keyActions[23] = KeyActionHelper.fromKeyAction(originalModule.keyActions[23]); + module.keyActions[24] = KeyActionHelper.fromKeyAction(originalModule.keyActions[24]); + module.keyActions[25] = KeyActionHelper.fromKeyAction(originalModule.keyActions[25]); + module.keyActions[26] = KeyActionHelper.fromKeyAction(originalModule.keyActions[26]); + module.keyActions[27] = KeyActionHelper.fromKeyAction(originalModule.keyActions[27]); + module.keyActions[28] = KeyActionHelper.fromKeyAction(originalModule.keyActions[29]); + module.keyActions[29] = KeyActionHelper.fromKeyAction(originalModule.keyActions[31]); + module.keyActions[30] = KeyActionHelper.fromKeyAction(originalModule.keyActions[32]); + module.keyActions[31] = KeyActionHelper.fromKeyAction(originalModule.keyActions[33]); + module.keyActions[32] = KeyActionHelper.fromKeyAction(originalModule.keyActions[34]); + module.keyActions[33] = KeyActionHelper.fromKeyAction(originalModule.keyActions[30]); + + return module; + } + // left half + else if (originalModule.id === 1) { + const module = new Module(); + module.id = originalModule.id; + + module.keyActions[0] = KeyActionHelper.fromKeyAction(originalModule.keyActions[0]); + module.keyActions[1] = KeyActionHelper.fromKeyAction(originalModule.keyActions[1]); + module.keyActions[2] = KeyActionHelper.fromKeyAction(originalModule.keyActions[2]); + module.keyActions[3] = KeyActionHelper.fromKeyAction(originalModule.keyActions[3]); + module.keyActions[4] = KeyActionHelper.fromKeyAction(originalModule.keyActions[4]); + module.keyActions[5] = KeyActionHelper.fromKeyAction(originalModule.keyActions[5]); + module.keyActions[6] = KeyActionHelper.fromKeyAction(originalModule.keyActions[6]); + module.keyActions[7] = KeyActionHelper.fromKeyAction(originalModule.keyActions[7]); + module.keyActions[8] = KeyActionHelper.fromKeyAction(originalModule.keyActions[8]); + module.keyActions[9] = KeyActionHelper.fromKeyAction(originalModule.keyActions[9]); + module.keyActions[10] = KeyActionHelper.fromKeyAction(originalModule.keyActions[10]); + module.keyActions[11] = KeyActionHelper.fromKeyAction(originalModule.keyActions[11]); + module.keyActions[12] = KeyActionHelper.fromKeyAction(originalModule.keyActions[13]); + module.keyActions[13] = KeyActionHelper.fromKeyAction(originalModule.keyActions[14]); + module.keyActions[14] = KeyActionHelper.fromKeyAction(originalModule.keyActions[15]); + module.keyActions[15] = KeyActionHelper.fromKeyAction(originalModule.keyActions[16]); + module.keyActions[16] = KeyActionHelper.fromKeyAction(originalModule.keyActions[17]); + module.keyActions[17] = KeyActionHelper.fromKeyAction(originalModule.keyActions[18]); + module.keyActions[18] = KeyActionHelper.fromKeyAction(originalModule.keyActions[20]); + module.keyActions[19] = KeyActionHelper.fromKeyAction(originalModule.keyActions[21]); + module.keyActions[20] = KeyActionHelper.fromKeyAction(originalModule.keyActions[22]); + module.keyActions[21] = KeyActionHelper.fromKeyAction(originalModule.keyActions[23]); + module.keyActions[22] = KeyActionHelper.fromKeyAction(originalModule.keyActions[24]); + module.keyActions[23] = KeyActionHelper.fromKeyAction(originalModule.keyActions[25]); + module.keyActions[24] = KeyActionHelper.fromKeyAction(originalModule.keyActions[26]); + module.keyActions[25] = KeyActionHelper.fromKeyAction(originalModule.keyActions[27]); + module.keyActions[26] = KeyActionHelper.fromKeyAction(originalModule.keyActions[28]); + module.keyActions[27] = KeyActionHelper.fromKeyAction(originalModule.keyActions[29]); + module.keyActions[28] = KeyActionHelper.fromKeyAction(originalModule.keyActions[30]); + module.keyActions[29] = KeyActionHelper.fromKeyAction(originalModule.keyActions[31]); + module.keyActions[30] = KeyActionHelper.fromKeyAction(originalModule.keyActions[33]); + module.keyActions[31] = KeyActionHelper.fromKeyAction(originalModule.keyActions[32]); + + return module; + } + + return originalModule; + }); + } + } + + return true; + } + + private migrateToV8_3(): boolean { + if (this.userConfigMajorVersion > 8) { + return false; + } + + if (this.userConfigMinorVersion >= 3) { + return false; + } + + this.userConfigMinorVersion = 3; + + return true; + } private getSerialisationInfo(): SerialisationInfo { return { isUserConfigContainsRgbColors: this.perKeyRgbPresent, - userConfigMajorVersion: this.userConfigMajorVersion + userConfigMajorVersion: this.userConfigMajorVersion, + userConfigMinorVersion: this.userConfigMinorVersion, }; } } diff --git a/packages/uhk-common/src/log/logger.service.ts b/packages/uhk-common/src/log/logger.service.ts index a39f071eb85..713914b4435 100644 --- a/packages/uhk-common/src/log/logger.service.ts +++ b/packages/uhk-common/src/log/logger.service.ts @@ -6,11 +6,16 @@ import { DEFAULT_LOG_OPTIONS } from './default-log-options.js'; export class LogService { protected _options = DEFAULT_LOG_OPTIONS; + protected _usbReportId: number = 0; setLogOptions(options: LogOptions): void { this._options = options; } + setUsbReportId(reportId: number): void { + this._usbReportId = reportId; + } + config(message: string, config: UserConfiguration | string): void { if (!this._options.config) { return; diff --git a/packages/uhk-common/src/models/ble-address-pair.ts b/packages/uhk-common/src/models/ble-address-pair.ts new file mode 100644 index 00000000000..9562b4c96e7 --- /dev/null +++ b/packages/uhk-common/src/models/ble-address-pair.ts @@ -0,0 +1,4 @@ +export interface BleAddressPair { + address: string; + pairAddress: string; +} diff --git a/packages/uhk-common/src/models/command-line-args.ts b/packages/uhk-common/src/models/command-line-args.ts index 93b74c0da4b..0bd688b539b 100644 --- a/packages/uhk-common/src/models/command-line-args.ts +++ b/packages/uhk-common/src/models/command-line-args.ts @@ -1,4 +1,26 @@ -export interface CommandLineArgs { +export interface DeviceIdentifier { + /** + * USB product id + */ + pid?: number; + + /** + * USB interface id + */ + 'usb-interface'?: number; + + /** + * Serial number + */ + 'serial-number'?: string; + + /** + * USB vendor id + */ + vid?: number; +} + +export interface CommandLineArgs extends DeviceIdentifier { /** * Allow Developer Tools menu */ @@ -23,9 +45,9 @@ export interface CommandLineArgs { */ help?: boolean; /** - * USB product id + * Don't use report id for USB communication */ - pid?: number; + 'no-report-id'?: boolean; /** * Agent not force the udev rule update */ @@ -40,19 +62,15 @@ export interface CommandLineArgs { */ 'reenumerate-and-exit'?: string; /** - * simulate privilege escalation error + * Report Id that used for USB communication */ - spe?: boolean; + 'report-id'?: number; /** - * USB interface id + * simulate privilege escalation error */ - 'usb-interface'?: number; + spe?: boolean; /** * Use USB non-blocking communication */ 'usb-non-blocking'?: boolean; - /** - * USB vendor id - */ - vid?: number; } diff --git a/packages/uhk-common/src/models/device-connection-state.ts b/packages/uhk-common/src/models/device-connection-state.ts index 9384e7d79ef..a366ef560ba 100644 --- a/packages/uhk-common/src/models/device-connection-state.ts +++ b/packages/uhk-common/src/models/device-connection-state.ts @@ -1,17 +1,27 @@ +import { Dongle } from './dongle.js'; import { HalvesInfo } from './halves-info.js'; import { HardwareModules } from './hardware-modules.js'; +import { UdevRulesInfo } from './udev-rules-info.js'; import { UhkDeviceProduct } from './uhk-products.js'; export interface DeviceConnectionState { + bleAddress?: string; + // UHK80 connected via bluetooth + bleDeviceConnected: boolean; + isPairedWithDongle?: boolean; connectedDevice?: UhkDeviceProduct; + dongle: Dongle; + leftHalfBootloaderActive: boolean; hasPermission: boolean; bootloaderActive: boolean; isMacroStatusDirty: boolean; + leftHalfDetected: boolean; /** - * True if more then 1 UHK device connected. + * True if more than 1 UHK device connected. */ multiDevice: boolean; communicationInterfaceAvailable: boolean; halvesInfo: HalvesInfo; hardwareModules?: HardwareModules; + udevRulesInfo: UdevRulesInfo; } diff --git a/packages/uhk-common/src/models/device-version-information.ts b/packages/uhk-common/src/models/device-version-information.ts new file mode 100644 index 00000000000..ecdd6c8ee29 --- /dev/null +++ b/packages/uhk-common/src/models/device-version-information.ts @@ -0,0 +1,6 @@ +import { FirmwareRepoInfo } from './firmware-repo-info.js'; +import { FirmwareVersionInfo } from './firmware-version-info.js'; +import { ProtocolVersions } from './protocol-versions.js'; + +export interface DeviceVersionInformation extends FirmwareRepoInfo, FirmwareVersionInfo, ProtocolVersions { +} diff --git a/packages/uhk-common/src/models/dongle.ts b/packages/uhk-common/src/models/dongle.ts new file mode 100644 index 00000000000..ca9904deae2 --- /dev/null +++ b/packages/uhk-common/src/models/dongle.ts @@ -0,0 +1,17 @@ +import { DeviceVersionInformation } from './device-version-information.js'; + +export interface Dongle { + bleAddress?: string; + + bootloaderActive: boolean; + + isPairedWithKeyboard?: boolean; + /** + * True if more than 1 UHK dongle connected. + */ + multiDevice: boolean; + + serialNumber: string; + + versionInfo?: DeviceVersionInformation; +} diff --git a/packages/uhk-common/src/models/firmware-upgrade-method.ts b/packages/uhk-common/src/models/firmware-upgrade-method.ts new file mode 100644 index 00000000000..209d3f6d5eb --- /dev/null +++ b/packages/uhk-common/src/models/firmware-upgrade-method.ts @@ -0,0 +1,7 @@ +export const FIRMWARE_UPGRADE_METHODS = Object.freeze({ + KBOOT: 'kboot', + MCUBOOT: 'mcuboot', +}); + +export type FIRMWARE_UPGRADE_METHODS_KEY_TYPE = keyof typeof FIRMWARE_UPGRADE_METHODS; +export type FIRMWARE_UPGRADE_METHODS_TYPE = typeof FIRMWARE_UPGRADE_METHODS[FIRMWARE_UPGRADE_METHODS_KEY_TYPE]; diff --git a/packages/uhk-common/src/models/firmware-version-info.ts b/packages/uhk-common/src/models/firmware-version-info.ts index 7e3cd742ed2..671dcd98389 100644 --- a/packages/uhk-common/src/models/firmware-version-info.ts +++ b/packages/uhk-common/src/models/firmware-version-info.ts @@ -1,4 +1,5 @@ -export interface FirmwareVersionInfo { +import { FirmwareVersion } from './firmware-version.js'; + +export interface FirmwareVersionInfo extends FirmwareVersion { firmwareChecksum?: string; - firmwareVersion?: string; } diff --git a/packages/uhk-common/src/models/firmware-version.ts b/packages/uhk-common/src/models/firmware-version.ts new file mode 100644 index 00000000000..ebcca8640ab --- /dev/null +++ b/packages/uhk-common/src/models/firmware-version.ts @@ -0,0 +1,3 @@ +export interface FirmwareVersion { + firmwareVersion?: string; +} diff --git a/packages/uhk-common/src/models/index.ts b/packages/uhk-common/src/models/index.ts index db6109c2842..dfd878522b6 100644 --- a/packages/uhk-common/src/models/index.ts +++ b/packages/uhk-common/src/models/index.ts @@ -1,13 +1,19 @@ export * from './application-settings.js'; export * from './backup-user-configuration.js'; export * from './backup-user-configuration-info.js'; +export * from './ble-address-pair.js'; export * from './command-line-args.js'; export * from './config-sizes-info.js'; export * from './device-module-record.js'; +export * from './device-version-information.js'; +export * from './dongle.js'; export * from './firmware-json.js'; export * from './firmware-repo-info.js'; +export * from './firmware-upgrade-method.js'; +export * from './firmware-version.js'; export * from './firmware-version-info.js'; export * from './notification.js'; +export * from './protocol-versions.js'; export * from './init-backlighting-color-palette.js'; export * from './ipc-response.js'; export * from './keyboard-layout.enum.js'; @@ -26,6 +32,8 @@ export * from './right-module-info.js'; export * from './right-slot-modules.js'; export * from './save-user-configuration-data.js'; export * from './udev-rules-info.js'; +export * from './uhk-device-ids.js'; +export * from './uhk-module-ids.js'; export * from './uhk-products.js'; export * from './update-firmware-data.js'; export * from './upload-file-data.js'; diff --git a/packages/uhk-common/src/models/ipc-response.ts b/packages/uhk-common/src/models/ipc-response.ts index 4ce516ca751..9e615d1bafe 100644 --- a/packages/uhk-common/src/models/ipc-response.ts +++ b/packages/uhk-common/src/models/ipc-response.ts @@ -1,5 +1,3 @@ -import { HardwareModules } from './hardware-modules.js'; - export class IpcResponse { success: boolean; error?: { message: string }; @@ -14,7 +12,6 @@ export enum FirmwareUpgradeFailReason { } export class FirmwareUpgradeIpcResponse extends IpcResponse { - modules?: HardwareModules; failReason?: FirmwareUpgradeFailReason; userConfigSaved?: boolean; firmwareDowngraded?: boolean; diff --git a/packages/uhk-common/src/models/protocol-versions.ts b/packages/uhk-common/src/models/protocol-versions.ts new file mode 100644 index 00000000000..ab3788f457e --- /dev/null +++ b/packages/uhk-common/src/models/protocol-versions.ts @@ -0,0 +1,9 @@ +import { FirmwareVersion } from './firmware-version.js'; + +export interface ProtocolVersions extends FirmwareVersion { + deviceProtocolVersion?: string; + hardwareConfigVersion?: string; + moduleProtocolVersion?: string; + userConfigVersion?: string; + smartMacrosVersion?: string; +} diff --git a/packages/uhk-common/src/models/right-module-info.ts b/packages/uhk-common/src/models/right-module-info.ts index f2d69eb3e6b..e4171d5eca0 100644 --- a/packages/uhk-common/src/models/right-module-info.ts +++ b/packages/uhk-common/src/models/right-module-info.ts @@ -1,12 +1,6 @@ import { DeviceModuleRecord } from './device-module-record.js'; -import { FirmwareRepoInfo } from './firmware-repo-info.js'; -import { FirmwareVersionInfo } from './firmware-version-info.js'; +import { DeviceVersionInformation } from './device-version-information.js'; -export interface RightModuleInfo extends FirmwareRepoInfo, FirmwareVersionInfo { - deviceProtocolVersion?: string; - hardwareConfigVersion?: string; - moduleProtocolVersion?: string; +export interface RightModuleInfo extends DeviceVersionInformation { modules: DeviceModuleRecord; - userConfigVersion?: string; - smartMacrosVersion?: string; } diff --git a/packages/uhk-common/src/models/uhk-device-ids.ts b/packages/uhk-common/src/models/uhk-device-ids.ts new file mode 100644 index 00000000000..dba03ff6661 --- /dev/null +++ b/packages/uhk-common/src/models/uhk-device-ids.ts @@ -0,0 +1,10 @@ +export const UHK_DEVICE_IDS = Object.freeze({ + UHK60V1_RIGHT: 1, + UHK60V2_RIGHT: 2, + UHK80_LEFT: 3, + UHK80_RIGHT: 4, + UHK_DONGLE: 5, +}); + +export type UHK_DEVICE_IDS_KEY_TYPE = keyof typeof UHK_DEVICE_IDS; +export type UHK_DEVICE_IDS_TYPE = typeof UHK_DEVICE_IDS[UHK_DEVICE_IDS_KEY_TYPE]; diff --git a/packages/uhk-common/src/models/uhk-module-ids.ts b/packages/uhk-common/src/models/uhk-module-ids.ts new file mode 100644 index 00000000000..3a1222f2cdb --- /dev/null +++ b/packages/uhk-common/src/models/uhk-module-ids.ts @@ -0,0 +1,10 @@ +export const UHK_MODULE_IDS = Object.freeze({ + LEFT_HALF: 1, + LEFT_KEY_CLUSTER: 2, + RIGHT_TRACKBALL: 3, + RIGHT_TRACKPOINT: 4, + RIGHT_TOUCHPAD: 5, +}); + +export type UHK_MODULE_IDS_KEY_TYPE = keyof typeof UHK_MODULE_IDS; +export type UHK_MODULE_IDS_TYPE = typeof UHK_MODULE_IDS[UHK_MODULE_IDS_KEY_TYPE]; diff --git a/packages/uhk-common/src/models/uhk-products.ts b/packages/uhk-common/src/models/uhk-products.ts index 1fd90e92fdc..11fcb745796 100644 --- a/packages/uhk-common/src/models/uhk-products.ts +++ b/packages/uhk-common/src/models/uhk-products.ts @@ -1,46 +1,196 @@ +import { FIRMWARE_UPGRADE_METHODS, FIRMWARE_UPGRADE_METHODS_TYPE } from './firmware-upgrade-method.js'; import { ModuleSlotToI2cAddress } from './module-slot-to-i2c-adress.js'; import { ModuleSlotToId } from './module-slot-id.js'; +import { UHK_DEVICE_IDS, UHK_DEVICE_IDS_TYPE } from './uhk-device-ids.js'; +import { UHK_MODULE_IDS, UHK_MODULE_IDS_TYPE } from './uhk-module-ids.js'; -export const UHK_VENDOR_ID = 0x1D50; +export const UHK_VENDOR_ID_OLD = 0x1D50; // decimal 7504 +export const UHK_VENDOR_ID = 0x37A8; // decimal 14248 +export const UHK_BLE_MIN_PRODUCT_iD = 0x8000; // decimal 32768 + +export interface VidPidPair { + vid: number; + pid: number; +} export interface UhkDeviceProduct { - id: number; - // TODO: Maybe it is not necessary + id: UHK_DEVICE_IDS_TYPE; + // The reference of the device when provided as CLI argument + asCliArg: string; + firmwareUpgradeMethod: FIRMWARE_UPGRADE_METHODS_TYPE, + // Use it in logs instead of the name because UHK 80 left and right have the same name. + // But we have to differentiate them in the logs + logName: string; name: string; - // USB vendor ID - vendorId: number; - // USB product ID - keyboardPid: number; - // USB bootloader product ID - bootloaderPid: number; - buspalPid: number; + keyboard: VidPidPair[]; + bootloader: VidPidPair[]; + buspal: VidPidPair[]; + reportId: number; } +export const UNKNOWN_DEVICE: UhkDeviceProduct = { + id: 0 as UHK_DEVICE_IDS_TYPE, + asCliArg: '', + firmwareUpgradeMethod: FIRMWARE_UPGRADE_METHODS.KBOOT, + logName: 'Unknown', + name: 'Unknown', + keyboard: [], + bootloader: [], + buspal: [], + reportId: 0 +}; + export const UHK_60_DEVICE: UhkDeviceProduct = { - id: 1, + id: UHK_DEVICE_IDS.UHK60V1_RIGHT, + asCliArg: 'uhk60v1', + firmwareUpgradeMethod: FIRMWARE_UPGRADE_METHODS.KBOOT, + logName: 'UHK 60 v1', name: 'UHK 60 v1', - vendorId: UHK_VENDOR_ID, - keyboardPid: 0x6122, - bootloaderPid: 0x6120, - buspalPid: 0x6121 + keyboard: [ + { + vid: UHK_VENDOR_ID_OLD, + pid: 0x6122, // decimal 24866 + }, + { + vid: UHK_VENDOR_ID, + pid: 0x0001 // decimal 1 + }, + ], + bootloader: [ + { + vid: UHK_VENDOR_ID_OLD, + pid: 0x6120, // decimal 24864 + }, + ], + buspal: [ + { + vid: UHK_VENDOR_ID_OLD, + pid: 0x6121 // decimal 24865 + }, + { + vid: UHK_VENDOR_ID, + pid: 0x0000 // decimal 0 + }, + ], + reportId: 0, }; export const UHK_60_V2_DEVICE: UhkDeviceProduct = { - id: 2, + id: UHK_DEVICE_IDS.UHK60V2_RIGHT, + asCliArg: 'uhk60v2', + firmwareUpgradeMethod: FIRMWARE_UPGRADE_METHODS.KBOOT, + logName: 'UHK 60 v2', name: 'UHK 60 v2', - vendorId: UHK_VENDOR_ID, - keyboardPid: 0x6124, - bootloaderPid: 0x6123, - buspalPid: 0x6121 + keyboard: [ + { + vid: UHK_VENDOR_ID_OLD, + pid: 0x6124, // decimal 24868 + }, + { + vid: UHK_VENDOR_ID, + pid: 0x0003 // decimal 3 + }, + ], + bootloader: [ + { + vid: UHK_VENDOR_ID_OLD, + pid: 0x6123, // decimal 24867 + }, + ], + buspal: [ + { + vid: UHK_VENDOR_ID_OLD, + pid: 0x6121 // decimal 24865 + }, + { + vid: UHK_VENDOR_ID, + pid: 0x0002 // decimal 2 + }, + ], + reportId: 0, +}; + +export const UHK_80_DEVICE_LEFT: UhkDeviceProduct = { + id: UHK_DEVICE_IDS.UHK80_LEFT, + asCliArg: 'uhk80left', + firmwareUpgradeMethod: FIRMWARE_UPGRADE_METHODS.MCUBOOT, + logName: 'UHK 80 left', + name: 'UHK 80', + keyboard: [ + { + vid: UHK_VENDOR_ID, + pid: 0x0007, // decimal 7 + }, + ], + bootloader: [ + { + vid: UHK_VENDOR_ID, + pid: 0x0006, // decimal 6 + }, + ], + buspal: [], + reportId: 4, +}; + +export const UHK_80_DEVICE: UhkDeviceProduct = { + id: UHK_DEVICE_IDS.UHK80_RIGHT, + asCliArg: 'uhk80', + firmwareUpgradeMethod: FIRMWARE_UPGRADE_METHODS.MCUBOOT, + logName: 'UHK 80 right', + name: 'UHK 80', + keyboard: [ + { + vid: UHK_VENDOR_ID, + pid: 0x0009, // decimal 9 + }, + ], + bootloader: [ + { + vid: UHK_VENDOR_ID, + pid: 0x0008, // decimal 8 + }, + ], + buspal: [], + reportId: 4, +}; + +export const UHK_DONGLE: UhkDeviceProduct = { + id: UHK_DEVICE_IDS.UHK_DONGLE, + asCliArg: 'dongle', + firmwareUpgradeMethod: FIRMWARE_UPGRADE_METHODS.MCUBOOT, + logName: 'UHK Dongle', + name: 'UHK Dongle', + keyboard: [ + { + vid: UHK_VENDOR_ID, + pid: 0x0005, // decimal 5 + }, + ], + bootloader: [ + { + vid: UHK_VENDOR_ID, + pid: 0x0004, // decimal 4 + }, + ], + buspal: [], + reportId: 4, }; export const UHK_DEVICES: Array = [ UHK_60_DEVICE, - UHK_60_V2_DEVICE + UHK_60_V2_DEVICE, + UHK_80_DEVICE, ]; +export const ALL_UHK_DEVICES = [ + ...UHK_DEVICES, + UHK_80_DEVICE_LEFT, + UHK_DONGLE, +]; + + export interface UhkModule { - id: number; + id: UHK_MODULE_IDS_TYPE; name: string; configPath?: string; slotId: ModuleSlotToId; @@ -49,7 +199,7 @@ export interface UhkModule { } export const LEFT_HALF_MODULE: UhkModule = { - id: 1, + id: UHK_MODULE_IDS.LEFT_HALF, name: 'Left keyboard half', slotId: ModuleSlotToId.leftHalf, i2cAddress: ModuleSlotToI2cAddress.leftHalf, @@ -57,7 +207,7 @@ export const LEFT_HALF_MODULE: UhkModule = { }; export const LEFT_KEY_CLUSTER_MODULE: UhkModule = { - id: 2, + id: UHK_MODULE_IDS.LEFT_KEY_CLUSTER, name: 'Key cluster', configPath: '/add-on/key-cluster', slotId: ModuleSlotToId.leftModule, @@ -66,7 +216,7 @@ export const LEFT_KEY_CLUSTER_MODULE: UhkModule = { }; export const RIGHT_TRACKBALL_MODULE: UhkModule = { - id: 3, + id: UHK_MODULE_IDS.RIGHT_TRACKBALL, name: 'Trackball', configPath: '/add-on/trackball', slotId: ModuleSlotToId.rightModule, @@ -75,7 +225,7 @@ export const RIGHT_TRACKBALL_MODULE: UhkModule = { }; export const RIGHT_TRACKPOINT_MODULE: UhkModule = { - id: 4, + id: UHK_MODULE_IDS.RIGHT_TRACKPOINT, name: 'Trackpoint', configPath: '/add-on/trackpoint', slotId: ModuleSlotToId.rightModule, @@ -84,7 +234,7 @@ export const RIGHT_TRACKPOINT_MODULE: UhkModule = { }; export const RIGHT_TOUCHPAD_MODULE: UhkModule = { - id: 5, + id: UHK_MODULE_IDS.RIGHT_TOUCHPAD, name: 'Touchpad', configPath: '/add-on/touchpad', slotId: ModuleSlotToId.rightModule, diff --git a/packages/uhk-common/src/models/user-config-history.ts b/packages/uhk-common/src/models/user-config-history.ts index 67c653334a5..f7468fe9bb4 100644 --- a/packages/uhk-common/src/models/user-config-history.ts +++ b/packages/uhk-common/src/models/user-config-history.ts @@ -1,4 +1,4 @@ -import { UhkDeviceProduct } from './uhk-products'; +import { UhkDeviceProduct } from './uhk-products.js'; export interface HistoryFileInfo { filePath: string; diff --git a/packages/uhk-common/src/util/convert-array-to-hex-array.ts b/packages/uhk-common/src/util/convert-array-to-hex-array.ts new file mode 100644 index 00000000000..999833502ef --- /dev/null +++ b/packages/uhk-common/src/util/convert-array-to-hex-array.ts @@ -0,0 +1,3 @@ +export function convertArrayToHexArray(arr: number[]): string[] { + return arr.map(x => x.toString(16).padStart(2, '0')); +} diff --git a/packages/uhk-common/src/util/convert-array-to-hex-string.ts b/packages/uhk-common/src/util/convert-array-to-hex-string.ts new file mode 100644 index 00000000000..c163466da34 --- /dev/null +++ b/packages/uhk-common/src/util/convert-array-to-hex-string.ts @@ -0,0 +1,5 @@ +import { convertArrayToHexArray } from './convert-array-to-hex-array.js'; + +export function convertArrayToHexString(arr: number[]): string { + return convertArrayToHexArray(arr).join(' '); +} diff --git a/packages/uhk-common/src/util/index.ts b/packages/uhk-common/src/util/index.ts index 6284d0d4806..53724a506c0 100644 --- a/packages/uhk-common/src/util/index.ts +++ b/packages/uhk-common/src/util/index.ts @@ -1,6 +1,8 @@ export { IpcEvents } from './ipcEvents.js'; export * from './constants.js'; export * from './copy-rgb-color.js'; +export * from './convert-array-to-hex-array.js'; +export * from './convert-array-to-hex-string.js'; export * from './create-md5-hash.js'; export * from './date-formatter.js'; export * from './disable-agent-upgrade-protection.js'; diff --git a/packages/uhk-common/src/util/ipcEvents.ts b/packages/uhk-common/src/util/ipcEvents.ts index 5fbb38b2130..9627bb8e7da 100644 --- a/packages/uhk-common/src/util/ipcEvents.ts +++ b/packages/uhk-common/src/util/ipcEvents.ts @@ -24,6 +24,7 @@ export class AutoUpdate { export class Device { public static readonly changeKeyboardLayout = 'device-change-keyboard-layout'; public static readonly changeKeyboardLayoutReply = 'device-change-keyboard-layout-reply'; + public static readonly dongleVersionInfoLoaded = 'device-dongle-version-info-loaded'; public static readonly hardwareModulesLoaded = 'device-hardware-modules-loaded'; public static readonly setPrivilegeOnLinux = 'set-privilege-on-linux'; public static readonly setPrivilegeOnLinuxReply = 'set-privilege-on-linux-reply'; @@ -51,6 +52,15 @@ export class Device { public static readonly getUserConfigFromHistoryReply = 'device-get-user-config-from-history-reply'; public static readonly statusBufferChanged = 'device-status-buffer-changed'; public static readonly toggleI2cDebugging = 'device-toggle-i2c-debugging'; + public static readonly deleteHostConnection = 'device-delete-host-connection'; + public static readonly deleteHostConnectionSuccess = 'device-delete-host-connection-success'; + public static readonly deleteHostConnectionFailed = 'device-delete-host-connection-failed'; + public static readonly startDonglePairing = 'device-start-dongle-pairing'; + public static readonly donglePairingSuccess = 'device-dongle-pairing-success'; + public static readonly donglePairingFailed = 'device-dongle-pairing-failed'; + public static readonly startLeftHalfPairing = 'device-start-left-half-pairing'; + public static readonly leftHalfPairingSuccess = 'device-left-half-pairing-success'; + public static readonly leftHalfPairingFailed = 'device-left-half-pairing-failed'; public static readonly i2cWatchdogCounterChanged = 'device-i2c-watchdog-counter-changed'; } diff --git a/packages/uhk-smart-macro/package-lock.json b/packages/uhk-smart-macro/package-lock.json index e2c2f8bc335..6806dba8b14 100644 --- a/packages/uhk-smart-macro/package-lock.json +++ b/packages/uhk-smart-macro/package-lock.json @@ -8,163 +8,178 @@ "name": "uhk-smart-macro", "version": "1.0.0", "dependencies": { - "@octokit/rest": "20.0.2", + "@octokit/rest": "21.0.2", "fs-extra": "11.2.0", - "got": "13.0.0", + "got": "14.4.4", "url-join": "5.0.0" } }, "node_modules/@octokit/auth-token": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", - "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", + "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", + "license": "MIT", "engines": { "node": ">= 18" } }, "node_modules/@octokit/core": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", - "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.2.tgz", + "integrity": "sha512-hEb7Ma4cGJGEUNOAVmyfdB/3WirWMg5hDuNFVejGEDFqupeOysLc2sG6HJxY2etBp5YQu5Wtxwi020jS9xlUwg==", + "license": "MIT", "dependencies": { - "@octokit/auth-token": "^4.0.0", - "@octokit/graphql": "^7.0.0", - "@octokit/request": "^8.0.2", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-token": "^5.0.0", + "@octokit/graphql": "^8.0.0", + "@octokit/request": "^9.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^3.0.2", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/endpoint": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.1.tgz", - "integrity": "sha512-hRlOKAovtINHQPYHZlfyFwaM8OyetxeoC81lAkBy34uLb8exrZB50SQdeW3EROqiY9G9yxQTpp5OHTV54QD+vA==", + "version": "10.1.1", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.1.tgz", + "integrity": "sha512-JYjh5rMOwXMJyUpj028cu0Gbp7qe/ihxfJMLc8VZBMMqSwLgOxDI1911gV4Enl1QSavAQNJcwmwBF9M0VvLh6Q==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/graphql": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", - "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.1.1.tgz", + "integrity": "sha512-ukiRmuHTi6ebQx/HFRCXKbDlOh/7xEV6QUXaE7MJEKGNAncGI/STSbOkl12qVXZrfZdpXctx5O9X1AIaebiDBg==", + "license": "MIT", "dependencies": { - "@octokit/request": "^8.0.1", - "@octokit/types": "^12.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/request": "^9.0.0", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^7.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/openapi-types": { - "version": "19.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-19.0.0.tgz", - "integrity": "sha512-PclQ6JGMTE9iUStpzMkwLCISFn/wDeRjkZFIKALpvJQNBGwDoYYi2fFvuHwssoQ1rXI5mfh6jgTgWuddeUzfWw==" + "version": "22.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-22.2.0.tgz", + "integrity": "sha512-QBhVjcUa9W7Wwhm6DBFu6ZZ+1/t/oYxqc2tp81Pi41YNuJinbFRx8B133qVOrAaBbF7D/m0Et6f9/pZt9Rc+tg==", + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.0.0.tgz", - "integrity": "sha512-oIJzCpttmBTlEhBmRvb+b9rlnGpmFgDtZ0bB6nq39qIod6A5DP+7RkVLMOixIgRCYSHDTeayWqmiJ2SZ6xgfdw==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.3.5.tgz", + "integrity": "sha512-cgwIRtKrpwhLoBi0CUNuY83DPGRMaWVjqVI/bGKsLJ4PzyWZNaEmhHroI2xlrVXkk6nFv0IsZpOp+ZWSWUS2AQ==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.0.0" + "@octokit/types": "^13.6.0" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-request-log": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.0.tgz", - "integrity": "sha512-2uJI1COtYCq8Z4yNSnM231TgH50bRkheQ9+aH8TnZanB6QilOnx8RMD2qsnamSOXtDj0ilxvevf5fGsBhBBzKA==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz", + "integrity": "sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw==", + "license": "MIT", "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.0.1.tgz", - "integrity": "sha512-fgS6HPkPvJiz8CCliewLyym9qAx0RZ/LKh3sATaPfM41y/O2wQ4Z9MrdYeGPVh04wYmHFmWiGlKPC7jWVtZXQA==", + "version": "13.2.6", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.2.6.tgz", + "integrity": "sha512-wMsdyHMjSfKjGINkdGKki06VEkgdEldIGstIEyGX0wbYHGByOwN/KiM+hAAlUwAtPkP3gvXtVQA9L3ITdV2tVw==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.0.0" + "@octokit/types": "^13.6.1" }, "engines": { "node": ">= 18" }, "peerDependencies": { - "@octokit/core": ">=5" + "@octokit/core": ">=6" } }, "node_modules/@octokit/request": { - "version": "8.1.4", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.1.4.tgz", - "integrity": "sha512-M0aaFfpGPEKrg7XoA/gwgRvc9MSXHRO2Ioki1qrPDbl1e9YhjIwVoHE7HIKmv/m3idzldj//xBujcFNqGX6ENA==", + "version": "9.1.3", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.1.3.tgz", + "integrity": "sha512-V+TFhu5fdF3K58rs1pGUJIDH5RZLbZm5BI+MNF+6o/ssFNT4vWlCh/tVpF3NxGtP15HUxTTMUbsG5llAuU2CZA==", + "license": "MIT", "dependencies": { - "@octokit/endpoint": "^9.0.0", - "@octokit/request-error": "^5.0.0", - "@octokit/types": "^12.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@octokit/endpoint": "^10.0.0", + "@octokit/request-error": "^6.0.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^7.0.2" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/request-error": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.0.1.tgz", - "integrity": "sha512-X7pnyTMV7MgtGmiXBwmO6M5kIPrntOXdyKZLigNfQWSEQzVxR4a4vo49vJjTWX70mPndj8KhfT4Dx+2Ng3vnBQ==", + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.5.tgz", + "integrity": "sha512-IlBTfGX8Yn/oFPMwSfvugfncK2EwRLjzbrpifNaMY8o/HTEAFqCA1FZxjD9cWvSKBHgrIhc4CSBIzMxiLsbzFQ==", + "license": "MIT", "dependencies": { - "@octokit/types": "^12.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@octokit/types": "^13.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/rest": { - "version": "20.0.2", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.0.2.tgz", - "integrity": "sha512-Ux8NDgEraQ/DMAU1PlAohyfBBXDwhnX2j33Z1nJNziqAfHi70PuxkFYIcIt8aIAxtRE7KVuKp8lSR8pA0J5iOQ==", + "version": "21.0.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-21.0.2.tgz", + "integrity": "sha512-+CiLisCoyWmYicH25y1cDfCrv41kRSvTq6pPWtRroRJzhsCZWZyCqGyI8foJT5LmScADSwRAnr/xo+eewL04wQ==", + "license": "MIT", "dependencies": { - "@octokit/core": "^5.0.0", - "@octokit/plugin-paginate-rest": "^9.0.0", - "@octokit/plugin-request-log": "^4.0.0", - "@octokit/plugin-rest-endpoint-methods": "^10.0.0" + "@octokit/core": "^6.1.2", + "@octokit/plugin-paginate-rest": "^11.0.0", + "@octokit/plugin-request-log": "^5.3.1", + "@octokit/plugin-rest-endpoint-methods": "^13.0.0" }, "engines": { "node": ">= 18" } }, "node_modules/@octokit/types": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.0.0.tgz", - "integrity": "sha512-EzD434aHTFifGudYAygnFlS1Tl6KhbTynEWELQXIbTY8Msvb5nEqTZIm7sbPEt4mQYLZwu3zPKVdeIrw0g7ovg==", + "version": "13.6.1", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.6.1.tgz", + "integrity": "sha512-PHZE9Z+kWXb23Ndik8MKPirBPziOc0D2/3KH1P+6jK5nGWe96kadZuE4jev2/Jq7FvIfTlT2Ltg8Fv2x1v0a5g==", + "license": "MIT", "dependencies": { - "@octokit/openapi-types": "^19.0.0" + "@octokit/openapi-types": "^22.2.0" } }, + "node_modules/@sec-ant/readable-stream": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", + "integrity": "sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==", + "license": "MIT" + }, "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", - "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-7.0.1.tgz", + "integrity": "sha512-QWLl2P+rsCJeofkDNIT3WFmb6NrRud1SUYW8dIhXK/46XFV8Q/g7Bsvib0Askb0reRLe+WYPeeE+l5cH7SlkuQ==", + "license": "MIT", "engines": { - "node": ">=14.16" + "node": ">=18" }, "funding": { "url": "https://github.com/sindresorhus/is?sponsor=1" @@ -174,6 +189,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -182,44 +198,49 @@ } }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.3.tgz", - "integrity": "sha512-V46MYLFp08Wf2mmaBhvgjStM3tPa+2GAdy/iqoX+noX1//zje2x4XmrIU0cAwyClATsTmahbtoQ2EwP7I5WSiA==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" }, "node_modules/before-after-hook": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", - "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", + "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", + "license": "Apache-2.0" }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", "engines": { "node": ">=14.16" } }, "node_modules/cacheable-request": { - "version": "10.2.14", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", - "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-12.0.1.tgz", + "integrity": "sha512-Yo9wGIQUaAfIbk+qY0X4cDQgCosecfBe3V9NSyeY4qPC2SAkbCS4Xj79VP8WOzitpJUZKc/wsRCYF5ariDIwkg==", + "license": "MIT", "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", + "@types/http-cache-semantics": "^4.0.4", + "get-stream": "^9.0.1", "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", + "keyv": "^4.5.4", "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", + "normalize-url": "^8.0.1", "responselike": "^3.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=18" } }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -234,6 +255,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -245,27 +267,25 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", "engines": { "node": ">=10" } }, - "node_modules/deprecation": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" - }, "node_modules/form-data-encoder": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", - "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-4.0.2.tgz", + "integrity": "sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==", + "license": "MIT", "engines": { - "node": ">= 14.17" + "node": ">= 18" } }, "node_modules/fs-extra": { "version": "11.2.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -276,35 +296,41 @@ } }, "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-9.0.1.tgz", + "integrity": "sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==", + "license": "MIT", + "dependencies": { + "@sec-ant/readable-stream": "^0.4.1", + "is-stream": "^4.0.1" + }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/got": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-13.0.0.tgz", - "integrity": "sha512-XfBk1CxOOScDcMr9O1yKkNaQyy865NbYs+F7dr4H0LZMVgCj2Le59k6PqbNHoL5ToeaEQUYh6c6yMfVcc6SJxA==", + "version": "14.4.4", + "resolved": "https://registry.npmjs.org/got/-/got-14.4.4.tgz", + "integrity": "sha512-tqiF7eSgTBwQkxb1LxsEpva8TaMYVisbhplrFVmw9GQE3855Z+MH/mnsXLLOkDxR6hZJRFMj5VTAZ8lmTF8ZOA==", + "license": "MIT", "dependencies": { - "@sindresorhus/is": "^5.2.0", + "@sindresorhus/is": "^7.0.1", "@szmarczak/http-timer": "^5.0.1", "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", + "cacheable-request": "^12.0.1", "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", + "form-data-encoder": "^4.0.2", + "http2-wrapper": "^2.2.1", "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" + "p-cancelable": "^4.0.1", + "responselike": "^3.0.0", + "type-fest": "^4.26.1" }, "engines": { - "node": ">=16" + "node": ">=20" }, "funding": { "url": "https://github.com/sindresorhus/got?sponsor=1" @@ -313,17 +339,20 @@ "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==" + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "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==" + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "license": "BSD-2-Clause" }, "node_modules/http2-wrapper": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.0.tgz", - "integrity": "sha512-kZB0wxMo0sh1PehyjJUWRFEd99KC5TLjZ2cULC4f9iqJBAmKQQXEICjxl5iPJRwP40dpeHFqqhm7tYCvODpqpQ==", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", + "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -332,23 +361,29 @@ "node": ">=10.19.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==", + "node_modules/is-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-4.0.1.tgz", + "integrity": "sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" }, "node_modules/jsonfile": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -360,6 +395,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -368,6 +404,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -379,6 +416,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -387,9 +425,10 @@ } }, "node_modules/normalize-url": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.0.tgz", - "integrity": "sha512-uVFpKhj5MheNBJRTiMZ9pE/7hD1QTeEvugSJW/OmLzAp78PB5O6adfMNTvmfKhXBkvCzC+rqifWcVYpGFwTjnw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", + "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -397,26 +436,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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/p-cancelable": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-4.0.1.tgz", + "integrity": "sha512-wBowNApzd45EIKdO1LaU+LrMBwAcjfPaYtVzV3lmfM3gf8Z4CHZsiIqlM8TZZ8okYvh5A1cP6gTfCRQtwUpaUg==", + "license": "MIT", "engines": { - "node": ">=12.20" + "node": ">=14.16" } }, "node_modules/quick-lru": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -427,12 +460,14 @@ "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -443,15 +478,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/type-fest": { + "version": "4.26.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.26.1.tgz", + "integrity": "sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", + "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", + "license": "ISC" }, "node_modules/universalify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -460,14 +509,10 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } - }, - "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==" } } } diff --git a/packages/uhk-smart-macro/package.json b/packages/uhk-smart-macro/package.json index 3c52301ecb3..6176324c876 100644 --- a/packages/uhk-smart-macro/package.json +++ b/packages/uhk-smart-macro/package.json @@ -19,9 +19,9 @@ "lint": "eslint --ext .ts ." }, "dependencies": { - "@octokit/rest": "20.0.2", + "@octokit/rest": "21.0.2", "fs-extra": "11.2.0", - "got": "13.0.0", + "got": "14.4.4", "url-join": "5.0.0" } } diff --git a/packages/uhk-usb/jasmine.json b/packages/uhk-usb/jasmine.json new file mode 100644 index 00000000000..41ed3fadefb --- /dev/null +++ b/packages/uhk-usb/jasmine.json @@ -0,0 +1,8 @@ +{ + "spec_dir": "test", + "spec_files": [ + "**/*[sS]pec.ts" + ], + "stopSpecOnExpectationFailure": true, + "random": false +} diff --git a/packages/uhk-usb/package-lock.json b/packages/uhk-usb/package-lock.json index 43185705760..0d62b9f779e 100644 --- a/packages/uhk-usb/package-lock.json +++ b/packages/uhk-usb/package-lock.json @@ -11,11 +11,223 @@ "dependencies": { "is-root": "3.0.0", "nrf-intel-hex": "1.3.0", - "semver": "7.5.4", - "tslib": "2.6.3" + "semver": "7.6.3", + "tslib": "2.8.1" }, "peerDependencies": { - "node-hid": ">= 3.1.0" + "node-hid": ">= 3.1.2", + "serialport": ">= 12.0.0" + } + }, + "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==", + "peer": true, + "dependencies": { + "@serialport/bindings-interface": "^1.2.1", + "debug": "^4.3.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/@serialport/bindings-cpp": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/@serialport/bindings-cpp/-/bindings-cpp-12.0.1.tgz", + "integrity": "sha512-r2XOwY2dDvbW7dKqSPIk2gzsr6M6Qpe9+/Ngs94fNaNlcTRCV02PfaoDmRgcubpNVVcLATlxSxPTIDw12dbKOg==", + "hasInstallScript": true, + "peer": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "@serialport/parser-readline": "11.0.0", + "debug": "4.3.4", + "node-addon-api": "7.0.0", + "node-gyp-build": "4.6.0" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-delimiter": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-11.0.0.tgz", + "integrity": "sha512-aZLJhlRTjSmEwllLG7S4J8s8ctRAS0cbvCpO87smLvl3e4BgzbVgF6Z6zaJd3Aji2uSiYgfedCdNc4L6W+1E2g==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/@serialport/parser-readline": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-11.0.0.tgz", + "integrity": "sha512-rRAivhRkT3YO28WjmmG4FQX6L+KMb5/ikhyylRfzWPw0nSXy97+u07peS9CbHqaNvJkMhH1locp2H36aGMOEIA==", + "peer": true, + "dependencies": { + "@serialport/parser-delimiter": "11.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/bindings-cpp/node_modules/node-addon-api": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.0.0.tgz", + "integrity": "sha512-vgbBJTS4m5/KkE16t5Ly0WW9hz46swAstv0hYYwMtbG7AznRhNyfLRe8HZAiWIpcHzoO7HxhLuBQj9rJ/Ho0ZA==", + "peer": 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==", + "peer": true, + "engines": { + "node": "^12.22 || ^14.13 || >=16" + } + }, + "node_modules/@serialport/parser-byte-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-byte-length/-/parser-byte-length-12.0.0.tgz", + "integrity": "sha512-0ei0txFAj+s6FTiCJFBJ1T2hpKkX8Md0Pu6dqMrYoirjPskDLJRgZGLqoy3/lnU1bkvHpnJO+9oJ3PB9v8rNlg==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-cctalk": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-cctalk/-/parser-cctalk-12.0.0.tgz", + "integrity": "sha512-0PfLzO9t2X5ufKuBO34DQKLXrCCqS9xz2D0pfuaLNeTkyGUBv426zxoMf3rsMRodDOZNbFblu3Ae84MOQXjnZw==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-delimiter": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-delimiter/-/parser-delimiter-12.0.0.tgz", + "integrity": "sha512-gu26tVt5lQoybhorLTPsH2j2LnX3AOP2x/34+DUSTNaUTzu2fBXw+isVjQJpUBFWu6aeQRZw5bJol5X9Gxjblw==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-inter-byte-timeout": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-inter-byte-timeout/-/parser-inter-byte-timeout-12.0.0.tgz", + "integrity": "sha512-GnCh8K0NAESfhCuXAt+FfBRz1Cf9CzIgXfp7SdMgXwrtuUnCC/yuRTUFWRvuzhYKoAo1TL0hhUo77SFHUH1T/w==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-packet-length": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-packet-length/-/parser-packet-length-12.0.0.tgz", + "integrity": "sha512-p1hiCRqvGHHLCN/8ZiPUY/G0zrxd7gtZs251n+cfNTn+87rwcdUeu9Dps3Aadx30/sOGGFL6brIRGK4l/t7MuQ==", + "peer": true, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@serialport/parser-readline": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-readline/-/parser-readline-12.0.0.tgz", + "integrity": "sha512-O7cywCWC8PiOMvo/gglEBfAkLjp/SENEML46BXDykfKP5mTPM46XMaX1L0waWU6DXJpBgjaL7+yX6VriVPbN4w==", + "peer": true, + "dependencies": { + "@serialport/parser-delimiter": "12.0.0" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-ready": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-ready/-/parser-ready-12.0.0.tgz", + "integrity": "sha512-ygDwj3O4SDpZlbrRUraoXIoIqb8sM7aMKryGjYTIF0JRnKeB1ys8+wIp0RFMdFbO62YriUDextHB5Um5cKFSWg==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-regex": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-regex/-/parser-regex-12.0.0.tgz", + "integrity": "sha512-dCAVh4P/pZrLcPv9NJ2mvPRBg64L5jXuiRxIlyxxdZGH4WubwXVXY/kBTihQmiAMPxbT3yshSX8f2+feqWsxqA==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-slip-encoder": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-slip-encoder/-/parser-slip-encoder-12.0.0.tgz", + "integrity": "sha512-0APxDGR9YvJXTRfY+uRGhzOhTpU5akSH183RUcwzN7QXh8/1jwFsFLCu0grmAUfi+fItCkR+Xr1TcNJLR13VNA==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/parser-spacepacket": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/parser-spacepacket/-/parser-spacepacket-12.0.0.tgz", + "integrity": "sha512-dozONxhPC/78pntuxpz/NOtVps8qIc/UZzdc/LuPvVsqCoJXiRxOg6ZtCP/W58iibJDKPZPAWPGYeZt9DJxI+Q==", + "peer": true, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, + "node_modules/@serialport/stream": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@serialport/stream/-/stream-12.0.0.tgz", + "integrity": "sha512-9On64rhzuqKdOQyiYLYv2lQOh3TZU/D3+IWCR5gk0alPel2nwpp4YwDEGiUBfrQZEdQ6xww0PWkzqth4wqwX3Q==", + "peer": true, + "dependencies": { + "@serialport/bindings-interface": "1.2.2", + "debug": "4.3.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" } }, "node_modules/ansi-regex": { @@ -74,6 +286,23 @@ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", "peer": true }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "peer": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -118,16 +347,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "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==", + "peer": true }, "node_modules/node-addon-api": { "version": "3.2.1", @@ -135,11 +359,23 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", "peer": true }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "peer": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, "node_modules/node-hid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.0.tgz", - "integrity": "sha512-YCTD1Ad3PHavx2+hY0QA468pn/gKa44U+fWB1KkRswisWtTROtBzdbmY+Xrm+QZSBCGTkdkgke7Ce606WcGxiQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.2.tgz", + "integrity": "sha512-5uBl8V4mmBWbeqsVfRvbsrlDBBxwzsC5k6gMVF5wOM2ZVyXUHG2zrfotIC6i+QM5ZCsDShaWsiJZOSdzPvsP+g==", "hasInstallScript": true, + "license": "(MIT OR X11)", "peer": true, "dependencies": { "node-addon-api": "^3.2.1", @@ -186,12 +422,10 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -199,6 +433,34 @@ "node": ">=10" } }, + "node_modules/serialport": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/serialport/-/serialport-12.0.0.tgz", + "integrity": "sha512-AmH3D9hHPFmnF/oq/rvigfiAouAKyK/TjnrkwZRYSFZxNggJxwvbAbfYrLeuvq7ktUdhuHdVdSjj852Z55R+uA==", + "peer": true, + "dependencies": { + "@serialport/binding-mock": "10.2.2", + "@serialport/bindings-cpp": "12.0.1", + "@serialport/parser-byte-length": "12.0.0", + "@serialport/parser-cctalk": "12.0.0", + "@serialport/parser-delimiter": "12.0.0", + "@serialport/parser-inter-byte-timeout": "12.0.0", + "@serialport/parser-packet-length": "12.0.0", + "@serialport/parser-readline": "12.0.0", + "@serialport/parser-ready": "12.0.0", + "@serialport/parser-regex": "12.0.0", + "@serialport/parser-slip-encoder": "12.0.0", + "@serialport/parser-spacepacket": "12.0.0", + "@serialport/stream": "12.0.0", + "debug": "4.3.4" + }, + "engines": { + "node": ">=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/serialport/donate" + } + }, "node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -226,9 +488,10 @@ } }, "node_modules/tslib": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.3.tgz", - "integrity": "sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -256,11 +519,6 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/packages/uhk-usb/package.json b/packages/uhk-usb/package.json index d74a4cdf8a7..7a4a9840036 100644 --- a/packages/uhk-usb/package.json +++ b/packages/uhk-usb/package.json @@ -10,19 +10,22 @@ "scripts": { "build": "tsc", "clean": "rimraf ./node_modules ./dist", - "lint": "eslint --ext .ts ." + "lint": "eslint --ext .ts .", + "test:skip": "cross-env NODE_OPTIONS=--loader=ts-node/esm jasmine --config=jasmine.json" }, "devDependencies": { }, "dependencies": { + "@uhk/mcumgr": "0.0.0", "kboot": "0.0.0", "is-root": "3.0.0", "nrf-intel-hex": "1.3.0", - "tslib": "2.6.3", - "semver": "7.5.4", + "tslib": "2.8.1", + "semver": "7.6.3", "uhk-common": "1.0.0" }, "peerDependencies": { - "node-hid": ">= 3.1.0" + "node-hid": ">= 3.1.2", + "serialport": ">= 12.0.0" } } diff --git a/packages/uhk-usb/src/constants.ts b/packages/uhk-usb/src/constants.ts index 3a9a8a0c153..8dffc9bcbca 100644 --- a/packages/uhk-usb/src/constants.ts +++ b/packages/uhk-usb/src/constants.ts @@ -1,6 +1,4 @@ -export namespace Constants { - export const MAX_PAYLOAD_SIZE = 64; -} +export const MAX_USB_PAYLOAD_SIZE = 63; /** * UHK USB Communications command. All communication package should have start with a command code. @@ -26,7 +24,15 @@ export enum UsbCommand { SwitchKeymap = 0x11, GetVariable = 0x12, SetVariable = 0x13, - ExecMacroCommand = 0x14 + ExecMacroCommand = 0x14, + DrawOled = 0x15, + GetPairingData = 0x16, + SetPairingData = 0x17, + PairPeripheral = 0x18, + PairCentral = 0x19, + UnpairAll = 0x1a, + IsPaired = 0x1b, + EnterPairingMode = 0x1c, } export enum EepromOperation { @@ -49,7 +55,11 @@ export enum DevicePropertyIds { Uptime = 5, GitTag = 6, GitRepo = 7, - FirmwareChecksum = 8 + FirmwareChecksum = 8, + BleAddress = 9, + PairedRightPeerBleAddress = 10, + PairingStatus = 11, + NewPairings = 12 } export enum EnumerationModes { @@ -72,6 +82,25 @@ export enum ModulePropertyId { FirmwareChecksum = 3 } +export enum PairIds { + left = 0, + Right = 1, + Dongle = 2, + Hid = 3, +} + +export enum PairingStatuses { + InProgress = 0, + Success = 1, + Failed = 2, +} + +export const PAIRING_STATUS_TEXT = Object.freeze([ + 'InProgress', + 'Success', + 'Failed', +]); + export enum UsbVariables { testSwitches = 0, testUsbStack = 1, diff --git a/packages/uhk-usb/src/models/get-device-options.ts b/packages/uhk-usb/src/models/get-device-options.ts deleted file mode 100644 index 79a9dbbb7f5..00000000000 --- a/packages/uhk-usb/src/models/get-device-options.ts +++ /dev/null @@ -1,7 +0,0 @@ -export interface GetDeviceOptions { - /** - * Set the log level of error messages when try to connecting to the keyboard - * Default value: error - */ - errorLogLevel?: string; -} diff --git a/packages/uhk-usb/src/models/index.ts b/packages/uhk-usb/src/models/index.ts index d1d70137b48..259e42bc837 100644 --- a/packages/uhk-usb/src/models/index.ts +++ b/packages/uhk-usb/src/models/index.ts @@ -1,9 +1,10 @@ export * from './debug-info.js'; export * from './device-state.js'; export * from './duration.js'; -export * from './get-device-options.js'; export * from './i2c-baud-rate.js'; export * from './i2c-error-buffer.js'; export * from './load-configurations-result.js'; +export * from './pairing-info.js'; export * from './reenumerate-option.js'; +export * from './reenumerate-result.js'; export * from './tmp-firmware.js'; diff --git a/packages/uhk-usb/src/models/pairing-info.ts b/packages/uhk-usb/src/models/pairing-info.ts new file mode 100644 index 00000000000..74c9cef13ac --- /dev/null +++ b/packages/uhk-usb/src/models/pairing-info.ts @@ -0,0 +1,15 @@ +import { convertArrayToHexString } from 'uhk-common'; + +export interface PairingInfo { + address: number[]; + c: number[]; + r: number[]; +} + +export function serialisePairingInfo(data: PairingInfo) { + return JSON.stringify({ + address: convertArrayToHexString(data.address), + r: convertArrayToHexString(data.r), + c: convertArrayToHexString(data.c), + }); +} diff --git a/packages/uhk-usb/src/models/reenumerate-option.ts b/packages/uhk-usb/src/models/reenumerate-option.ts index ccec7213cb2..6f7950dc451 100644 --- a/packages/uhk-usb/src/models/reenumerate-option.ts +++ b/packages/uhk-usb/src/models/reenumerate-option.ts @@ -1,10 +1,13 @@ +import { UhkDeviceProduct } from 'uhk-common'; + import { EnumerationModes } from '../constants.js'; export interface ReenumerateOption { enumerationMode: EnumerationModes; - // The USB product id that should appear after the re-enumeration - productId: number; - // The USB vendor id that should appear after the re-enumeration - vendorId: number; + /** + * Send reenumeration command even the device in the desired state + */ + force?: boolean; + device: UhkDeviceProduct; timeout?: number; } diff --git a/packages/uhk-usb/src/models/reenumerate-result.ts b/packages/uhk-usb/src/models/reenumerate-result.ts new file mode 100644 index 00000000000..bca50e63a59 --- /dev/null +++ b/packages/uhk-usb/src/models/reenumerate-result.ts @@ -0,0 +1,7 @@ +import { VidPidPair } from 'uhk-common'; + +export interface ReenumerateResult { + vidPidPair: VidPidPair + usbPath: string; + serialPath: string; +} diff --git a/packages/uhk-usb/src/uhk-hid-device.ts b/packages/uhk-usb/src/uhk-hid-device.ts index e28856252ed..1813a8ce23a 100644 --- a/packages/uhk-usb/src/uhk-hid-device.ts +++ b/packages/uhk-usb/src/uhk-hid-device.ts @@ -1,45 +1,69 @@ -import { Device, HID } from 'node-hid'; import fse from 'fs-extra'; -import * as path from 'path'; import isRoot from 'is-root'; +import { Device, HID } from 'node-hid'; +import * as path from 'path'; +import semver from 'semver'; +import { SerialPort } from 'serialport'; import { + ALL_UHK_DEVICES, + BLE_ADDRESS_LENGTH, Buffer, CommandLineArgs, DeviceConnectionState, + FIRMWARE_UPGRADE_METHODS, HalvesInfo, isEqualArray, LeftSlotModules, LogService, mapI2cAddressToModuleName, ModuleSlotToI2cAddress, + ProtocolVersions, RightSlotModules, - UdevRulesInfo + UdevRulesInfo, + UhkBuffer, + UHK_BLE_MIN_PRODUCT_iD, + UHK_DONGLE, + UHK_80_DEVICE, + UHK_80_DEVICE_LEFT, + UHK_VENDOR_ID, } from 'uhk-common'; - import { + DevicePropertyIds, EnumerationModes, KbootCommands, LAYER_NUMBER_TO_STRING, MODULE_ID_TO_STRING, + PairingStatuses, + PairIds, UsbCommand } from './constants.js'; +import { + DeviceState, + PairingInfo, + ReenumerateOption, + ReenumerateResult, +} from './models/index.js'; import { bufferToString, + convertBufferToIntArray, getFileContentAsync, - getTransferData, - isBootloader, getUhkDevice, + isBootloader, isUhkCommunicationInterface, + isUhkCommunicationUsage, retry, - snooze } from './util.js'; -import { DeviceState, GetDeviceOptions, ReenumerateOption } from './models/index.js'; import { calculateHalvesState, - findDeviceByOptions, + findDeviceByDeviceIdentifier, + getDeviceEnumerateVidPidPairs, getNumberOfConnectedDevices, getUhkDevices, - usbDeviceJsonFormatter + isDongleCommunicationDevice, + isSerialPortInVidPids, + snooze, + usbDeviceJsonFormatter, + validateConnectedDevices, } from './utils/index.js'; export const BOOTLOADER_TIMEOUT_MS = 5000; @@ -57,6 +81,7 @@ interface UsvDeviceConnectionState { state: UsbDeviceConnectionStates; } +export const UHK_HID_DEVICE_NOT_CONNECTED = '[UhkHidDevice] Device is not connected'; /** * HID API wrapper to support unified logging and async write */ @@ -67,12 +92,15 @@ export class UhkHidDevice { */ private _prevDevices = new Map(); private _device: HID; + private _deviceInfo: Device; private _hasPermission = false; + private _protocolVersions: ProtocolVersions | undefined; private _udevRulesInfo = UdevRulesInfo.Unknown; constructor(private logService: LogService, private options: CommandLineArgs, - private rootDir: string) { + private rootDir: string, + private hidDevice?: Device) { } /** @@ -93,11 +121,11 @@ export class UhkHidDevice { } this.logService.misc('[UhkHidDevice] Devices before checking permission:'); - const devs = await getUhkDevices(this.options.vid); + const devs = await getUhkDevices(); this.listAvailableDevices(devs); - const dev = this.options.vid - ? devs.find(findDeviceByOptions(this.options)) + const dev = this.options.vid || this.options['serial-number'] + ? devs.find(findDeviceByDeviceIdentifier(this.options)) : devs.find((x: Device) => isUhkCommunicationInterface(x) || isBootloader(x)); if (!dev) { @@ -117,15 +145,187 @@ export class UhkHidDevice { return false; } + public async deleteBond(address: number[]): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: Delete all bonds'); + const buffer = Buffer.from([UsbCommand.UnpairAll, ...address]); + await this.write(buffer); + } + + public async deleteAllBonds(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: Delete all bonds'); + const buffer = Buffer.from([UsbCommand.UnpairAll, 0, 0, 0, 0, 0, 0]); + await this.write(buffer); + } + + public async getBleAddress(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: get BLE address'); + const buffer = Buffer.from([UsbCommand.GetProperty, DevicePropertyIds.BleAddress]); + const responseBuffer = await this.write(buffer); + + const address = []; + // 1st byte is the status code we skip it + for(let i = 1; i < BLE_ADDRESS_LENGTH + 1; i++) { + address.push(responseBuffer.readUInt8(i)); + } + + return address; + } + + public async getPairedRightPairBleAddress(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: get paired right pair BLE address'); + const buffer = Buffer.from([UsbCommand.GetProperty, DevicePropertyIds.PairedRightPeerBleAddress]); + const responseBuffer = await this.write(buffer); + + const address = []; + // 1st byte is the status code we skip it + for(let i = 1; i < BLE_ADDRESS_LENGTH + 1; i++) { + address.push(responseBuffer.readUInt8(i)); + } + + return address; + } + + public async getPairingInfo(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: read pairing info'); + const buffer = Buffer.from([UsbCommand.GetPairingData]); + const responseBuffer = await this.write(buffer); + const numbers = convertBufferToIntArray(responseBuffer); + // firs byte is the status code + const address = numbers.slice(1, 7); + const r = numbers.slice(7, 23); + const c = numbers.slice(23, 39); + + + return { + address, + r, + c, + }; + } + + public async getPairingStatus(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: read pairing info'); + const buffer = Buffer.from([UsbCommand.GetProperty, DevicePropertyIds.PairingStatus]); + const responseBuffer = await this.write(buffer); + + // 1st byte is the status code we skip it + const status = responseBuffer.readUInt8(1); + + switch (status) { + case PairingStatuses.InProgress: + case PairingStatuses.Success: + case PairingStatuses.Failed: + return status; + + default: + throw new Error(`Unknown pairing status: ${status}`); + } + } + + public async isPairedWith(address: number[]): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: is paired with'); + const buffer = Buffer.from([ + UsbCommand.IsPaired, + ...address, + ]); + const responseBuffer = await this.write(buffer); + // 1st byte is the status code we skip it + const response = responseBuffer.readUInt8(1); + + return response === 1; + } + + public async pairCentral(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: pair central'); + const buffer = Buffer.from([UsbCommand.PairCentral]); + await this.write(buffer); + } + + public async pairPeripheral(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: pair peripheral'); + const buffer = Buffer.from([UsbCommand.PairPeripheral]); + await this.write(buffer); + } + + public async setPairingInfo(pairId: PairIds, info: PairingInfo): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: set pairing info'); + const buffer = Buffer.from([ + UsbCommand.SetPairingData, + pairId, + ...info.address, + ...info.r, + ...info.c, + ]); + + await this.write(buffer); + } + + public async switchToPairingMode(): Promise { + await this.assertDeviceSupportWirelessUSBCommands(); + + this.logService.usb('[UhkHidDevice] USB[T]: switch to pairing mode'); + const buffer = Buffer.from([UsbCommand.EnterPairingMode]); + await this.write(buffer); + } + + public async isDeviceSupportWirelessUSBCommands(): Promise { + const protocolVersions = await this.getProtocolVersions(); + + if (semver.lt(protocolVersions.deviceProtocolVersion, '4.11.0')) { + return false; + } + + return [UHK_80_DEVICE, UHK_80_DEVICE_LEFT, UHK_DONGLE].some(product => { + return product.keyboard.some(vidPid => { + return vidPid.vid === this._deviceInfo.vendorId && vidPid.pid === this._deviceInfo.productId; + }); + }); + } + + private async assertDeviceSupportWirelessUSBCommands(): Promise { + const isSupport = await this.isDeviceSupportWirelessUSBCommands(); + + if (!isSupport) { + throw new Error('UHK Device does not support Wireless USB commands.'); + } + } + /** * Return with the USB device communication sate. * @returns {DeviceConnectionState} */ public async getDeviceConnectionStateAsync(): Promise { - const devs = await getUhkDevices(this.options.vid); + const devs = await this.getUhkDevices(); const result: DeviceConnectionState = { bootloaderActive: false, + bleDeviceConnected: false, communicationInterfaceAvailable: false, + dongle: { + bootloaderActive: false, + multiDevice: false, + serialNumber: '', + }, + leftHalfBootloaderActive: false, hasPermission: await this.hasPermission(), halvesInfo: { areHalvesMerged: true, @@ -135,23 +335,79 @@ export class UhkHidDevice { }, hardwareModules: {}, isMacroStatusDirty: false, - multiDevice: await getNumberOfConnectedDevices() > 1 + leftHalfDetected: false, + multiDevice: await getNumberOfConnectedDevices(this.options) > 1, + udevRulesInfo: await this.getUdevInfoAsync(), }; if (result.multiDevice) { return result; } + function setDongleSerialNumber(serialNumber: string): void { + if (result.dongle.serialNumber) { + if (result.dongle.serialNumber !== serialNumber) { + result.dongle.multiDevice = true; + } + } + else { + result.dongle.serialNumber = serialNumber; + } + } + for (const dev of devs) { - if (!result.connectedDevice) { - result.connectedDevice = getUhkDevice(dev); + if (this.options.vid || this.options['serial-number']) { + const isUhkDevice = findDeviceByDeviceIdentifier(this.options); + + if (isUhkDevice(dev)) { + if (!result.connectedDevice) { + result.connectedDevice = getUhkDevice(dev); + } + + if (isUhkCommunicationInterface(dev)) { + result.communicationInterfaceAvailable = true; + } else if (isBootloader(dev)) { + result.bootloaderActive = true; + } + } + } else { + if (!result.connectedDevice) { + result.connectedDevice = getUhkDevice(dev); + } + + if (isUhkCommunicationInterface(dev)) { + result.communicationInterfaceAvailable = true; + } + else if (isBootloader(dev)) { + result.bootloaderActive = true; + } + else if (dev.vendorId === UHK_VENDOR_ID && dev.productId >= UHK_BLE_MIN_PRODUCT_iD) { + result.bleDeviceConnected = true; + } + else if (UHK_80_DEVICE_LEFT.keyboard.some(vidPid => dev.vendorId === vidPid.vid && dev.productId === vidPid.pid)) { + result.leftHalfDetected = true; + } + } + + if (isDongleCommunicationDevice(dev)) { + setDongleSerialNumber(dev.serialNumber); } + } + + const serialDevices = await SerialPort.list(); - if (isUhkCommunicationInterface(dev)) { - result.communicationInterfaceAvailable = true; - } else if (isBootloader(dev)) { + for (const serialDevice of serialDevices) { + if (isSerialPortInVidPids(serialDevice, UHK_DONGLE.bootloader)) { + result.dongle.bootloaderActive = true; + setDongleSerialNumber(serialDevice.serialNumber); + } + else if (isSerialPortInVidPids(serialDevice, UHK_80_DEVICE.bootloader)) { + result.connectedDevice = UHK_80_DEVICE; result.bootloaderActive = true; } + else if (isSerialPortInVidPids(serialDevice, UHK_80_DEVICE_LEFT.bootloader)) { + result.leftHalfBootloaderActive = true; + } } if (result.connectedDevice && result.hasPermission && result.communicationInterfaceAvailable) { @@ -173,14 +429,12 @@ export class UhkHidDevice { */ public async write(buffer: Buffer): Promise { return new Promise(async (resolve, reject) => { - const device = await this.getDevice(); - - if (!device) { - return reject(new Error('[UhkHidDevice] Device is not connected')); - } - try { - const sendData = getTransferData(buffer); + const device = await this.getDevice(); + const reportId = this.getReportId(); + + this.logService.setUsbReportId(reportId); + const sendData = this.getTransferData(buffer, reportId); this.logService.usb('[UhkHidDevice] USB[W]:', bufferToString(sendData)); device.write(sendData); await snooze(1); @@ -188,6 +442,10 @@ export class UhkHidDevice { const logString = bufferToString(receivedData); this.logService.usb('[UhkHidDevice] USB[R]:', logString); + if (reportId) { + receivedData.shift(); + } + if (receivedData[0] !== 0) { return reject(new Error(`Communications error with UHK. Response code: ${receivedData[0]}`)); } @@ -212,53 +470,109 @@ export class UhkHidDevice { } this._device.close(); this._device = null; + this.setDeviceInfo(undefined); this.logService.misc('[UhkHidDevice] Device communication closed.'); } async reenumerate( - { enumerationMode, productId, vendorId, timeout = BOOTLOADER_TIMEOUT_MS }: ReenumerateOption - ): Promise { + { enumerationMode, force, device, timeout = BOOTLOADER_TIMEOUT_MS }: ReenumerateOption + ): Promise { + this.close(); const reenumMode = EnumerationModes[enumerationMode].toString(); this.logService.misc(`[UhkHidDevice] Start reenumeration, mode: ${reenumMode}, timeout: ${timeout}ms`); - - const message = Buffer.from([ - UsbCommand.Reenumerate, - enumerationMode, - timeout & 0xff, - (timeout & 0xff << 8) >> 8, - (timeout & 0xff << 16) >> 16, - (timeout & 0xff << 24) >> 24 - ]); + const vidPidPairs = getDeviceEnumerateVidPidPairs(device, enumerationMode); const startTime = new Date(); const waitTimeout = timeout + 20000; let jumped = false; + let iteration = 0; while (new Date().getTime() - startTime.getTime() < waitTimeout) { - const devs = await getUhkDevices(vendorId); - - const inBootloaderMode = devs.some((x: Device) => - x.vendorId === vendorId && - x.productId === productId); - - if (inBootloaderMode) { - this.logService.misc('[UhkHidDevice] Reenumerating devices'); - return; + iteration++; + let allDevice = []; + for (const vidPid of vidPidPairs) { + + if (enumerationMode === EnumerationModes.Bootloader && device.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT) { + this.logService.misc('[UhkHidDevice] try to find MCU Bootloader'); + const serialDevices = await SerialPort.list(); + // TODO: Implement the listAvailableDevices for serial devices too + for (const serialDevice of serialDevices) { + if (Number.parseInt(serialDevice.vendorId, 16) === vidPid.vid && Number.parseInt(serialDevice.productId, 16) === vidPid.pid) { + return { + vidPidPair: vidPid, + serialPath: serialDevice.path, + usbPath: '', + }; + } + } + } else { + const devs = await getUhkDevices([vidPid.vid]); + allDevice.push(...devs); + + const reenumeratedDevice = force && iteration === 1 + ? false + : devs.find((x: Device) => + x.vendorId === vidPid.vid && + x.productId === vidPid.pid); + + if (reenumeratedDevice) { + this.logService.misc('[UhkHidDevice] Reenumerating devices'); + + return { + vidPidPair: vidPid, + serialPath: '', + usbPath: reenumeratedDevice.path, + }; + } + } } await snooze(100); if (!jumped) { - const device = await this.getDevice({ errorLogLevel: 'misc' }); - if (device) { - const data = getTransferData(message); + let keyboardDevice: HID; + for (const vidPid of device.keyboard) { + const devs = await getUhkDevices([vidPid.vid]); + const foundDevice = devs.find((dev: Device) => { + return dev.vendorId === vidPid.vid + && dev.productId === vidPid.pid + // TODO: remove duplication of isUhkCommunicationInterface + && isUhkCommunicationUsage(dev); + }); + + if (foundDevice) { + keyboardDevice = new HID(foundDevice.path); + this.setDeviceInfo(foundDevice); + } + } + + if (keyboardDevice) { + const reportId = device.reportId; + this.logService.setUsbReportId(reportId); + const message = Buffer.from([ + UsbCommand.Reenumerate, + enumerationMode, + timeout & 0xff, + (timeout & 0xff << 8) >> 8, + (timeout & 0xff << 16) >> 16, + (timeout & 0xff << 24) >> 24 + ]); + const data = this.getTransferData(message, reportId); this.logService.usb(`[UhkHidDevice] USB[T]: Enumerated device, mode: ${reenumMode}`); this.logService.usb('[UhkHidDevice] USB[W]:', bufferToString(data).substr(3)); try { - device.write(data); - device.close(); + keyboardDevice.write(data); } catch (error) { this.logService.misc('[UhkHidDevice] Reenumeration error. We hope it would not break the process', error); + } finally { + if (keyboardDevice) { + try { + this.logService.misc('[UhkHidDevice] closing normal keyboard after reenumeration'); + keyboardDevice.close(); + } catch (error) { + this.logService.misc("[UhkHidDevice] can't normal keyboard after reenumeration", error); + } + } } jumped = true; } else { @@ -267,7 +581,7 @@ export class UhkHidDevice { } else { this.logService.misc(`[UhkHidDevice] Could not find reenumerated device: ${reenumMode}. Waiting...`); - this.listAvailableDevices(devs, false); + this.listAvailableDevices(allDevice, false); } } @@ -300,7 +614,7 @@ export class UhkHidDevice { return { isEepromBusy: buffer[1] !== 0, isMacroStatusDirty: buffer[7] !== 0, - areHalvesMerged: buffer[2] !== 0, + areHalvesMerged: (buffer[2] & 0x1) !== 0, isLeftHalfConnected: buffer[3] !== 0, activeLayerNumber, activeLayerName: LAYER_NUMBER_TO_STRING[activeLayerNumber], @@ -359,6 +673,32 @@ export class UhkHidDevice { } } + async getProtocolVersions(): Promise { + if (this._protocolVersions) { + return this._protocolVersions; + } + + this.logService.usb('[UhkHidDevice] USB[T]: Read device protocol version information'); + const command = Buffer.from([UsbCommand.GetProperty, DevicePropertyIds.ProtocolVersions]); + const buffer = await this.write(command); + const uhkBuffer = UhkBuffer.fromArray(convertBufferToIntArray(buffer)); + // skip the first byte + uhkBuffer.readUInt8(); + + this._protocolVersions = { + firmwareVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, + deviceProtocolVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, + moduleProtocolVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, + userConfigVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, + hardwareConfigVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, + smartMacrosVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}` + }; + + this.logService.misc('[UhkHidDevice] protocol versions: ' + JSON.stringify(this._protocolVersions)); + + return this._protocolVersions; + } + public async getUdevInfoAsync(): Promise { if (this._udevRulesInfo === UdevRulesInfo.Ok) { return UdevRulesInfo.Ok; @@ -403,9 +743,13 @@ export class UhkHidDevice { * @returns {HID} * @private */ - private async getDevice(options?: GetDeviceOptions): Promise { + private async getDevice(): Promise { if (!this._device) { - this._device = await this.connectToDevice(options); + this._device = await this.connectToDevice(); + + if (!this._device) { + throw new Error(UHK_HID_DEVICE_NOT_CONNECTED); + } } return this._device; @@ -413,32 +757,96 @@ export class UhkHidDevice { /** * Initialize new UHK HID device. - * @returns {HID} */ - private async connectToDevice({ errorLogLevel = 'error' }: GetDeviceOptions = {}): Promise { + private async connectToDevice(): Promise { try { - const devs = await getUhkDevices(this.options.vid); + const devs = await this.getUhkDevices(); this.listAvailableDevices(devs); - const dev = this.options.vid - ? devs.find(findDeviceByOptions(this.options)) - : devs.find(isUhkCommunicationInterface); + if (this.hidDevice) { + const device = devs.find(dev => dev.path === this.hidDevice.path); + if (device) { + this.setDeviceInfo(this.hidDevice); + } + else { + this.logService.misc(`[UhkHidDevice] UHK Device not found with path: ${this.hidDevice.path}`); + } + } + else if ( this.options.vid || this.options['serial-number']) { + await validateConnectedDevices(this.options); + this.setDeviceInfo(devs.find(findDeviceByDeviceIdentifier(this.options))); + } + else { + await validateConnectedDevices(this.options); + this.setDeviceInfo(devs.find(isUhkCommunicationInterface)); + } - if (!dev) { + if (!this._deviceInfo) { this.logService.misc('[UhkHidDevice] UHK Device not found:'); return null; } - const device = new HID(dev.path); + const device = new HID(this._deviceInfo.path); if (this.options['usb-non-blocking']) { this.logService.misc('[UhkHidDevice] set non blocking communication mode'); - device.setNonBlocking(1 as any); + this._device.setNonBlocking(1 as any); } - this.logService.misc('[UhkHidDevice] Used device:', JSON.stringify(dev, usbDeviceJsonFormatter)); + this.logService.misc('[UhkHidDevice] Used device:', JSON.stringify(this._deviceInfo, usbDeviceJsonFormatter)); return device; } catch (err) { - this.logService[errorLogLevel]('[UhkHidDevice] Can not create device:', err); + this.logService.error('[UhkHidDevice] Can not create device:', err); } return null; } + + /** + * Based on the command line arguments and deviceInfo it calculate the reportId + * @private + */ + private getReportId(): number { + if (this.options['no-report-id']) { + return undefined; + } + + if (this.options['report-id'] !== undefined) { + return Number(this.options['report-id']); + } + + const uhkProduct = ALL_UHK_DEVICES.find(device => { + return device.keyboard.some(x => x.vid === this._deviceInfo.vendorId && x.pid === this._deviceInfo.productId) || + device.bootloader.some(x => x.vid === this._deviceInfo.vendorId && x.pid === this._deviceInfo.productId) || + device.buspal.some(x => x.vid === this._deviceInfo.vendorId && x.pid === this._deviceInfo.productId); + }); + + return uhkProduct?.reportId || 0; + } + + /** + * Create the communication package that will send over USB and + * @param {Buffer} buffer + * @param {number} reportId + * @returns {number[]} + * @private + * @static + */ + private getTransferData(buffer: Buffer, reportId: number): number[] { + const data = convertBufferToIntArray(buffer); + + if (reportId !== undefined) { + data.unshift(reportId); + } + + return data; + } + + private async getUhkDevices(): Promise> { + return this.options.vid + ? getUhkDevices([this.options.vid]) + : getUhkDevices(); + } + + private setDeviceInfo(device:Device | undefined): void { + this._deviceInfo = device; + this._protocolVersions = undefined; + } } diff --git a/packages/uhk-usb/src/uhk-operations.ts b/packages/uhk-usb/src/uhk-operations.ts index 574d601a264..0ad5ea021c3 100644 --- a/packages/uhk-usb/src/uhk-operations.ts +++ b/packages/uhk-usb/src/uhk-operations.ts @@ -1,8 +1,14 @@ +import { McuManager, SerialPeripheral } from '@uhk/mcumgr'; import * as fs from 'fs'; import { DataOption, KBoot, Properties, UsbPeripheral } from 'kboot'; import { + ALL_UHK_DEVICES, + BleAddressPair, Buffer, ConfigSizesInfo, + convertBleAddressArrayToString, + DeviceVersionInformation, + FIRMWARE_UPGRADE_METHODS, FirmwareRepoInfo, getSlotIdName, HardwareConfiguration, @@ -12,10 +18,10 @@ import { LogService, ModuleSlotToId, ModuleVersionInfo, - RightModuleInfo, UhkBuffer, UhkDeviceProduct, - UhkModule + UhkModule, + UNKNOWN_DEVICE, } from 'uhk-common'; import { promisify } from 'util'; import { @@ -24,21 +30,30 @@ import { EepromOperation, EnumerationModes, KbootCommands, + MAX_USB_PAYLOAD_SIZE, ModulePropertyId, + PAIRING_STATUS_TEXT, + PairIds, + PairingStatuses, UsbCommand, UsbVariables } from './constants.js'; -import { DebugInfo, Duration, I2cBaudRate, I2cErrorBuffer, LoadConfigurationsResult } from './models/index.js'; +import { + DebugInfo, + Duration, + I2cBaudRate, + I2cErrorBuffer, + LoadConfigurationsResult, +} from './models/index.js'; import { UhkHidDevice } from './uhk-hid-device.js'; import { convertBufferToIntArray, getTransferBuffers, readBootloaderFirmwareFromHexFileAsync, - snooze, waitForDevice } from './util.js'; -import { convertMsToDuration, convertSlaveI2cErrorBuffer } from './utils/index.js'; +import { convertMsToDuration, convertSlaveI2cErrorBuffer, snooze, waitUntil} from './utils/index.js'; import { normalizeStatusBuffer } from './utils/normalize-status-buffer.js'; import readUhkResponseAs0EndString from './utils/read-uhk-response-as-0-end-string.js'; @@ -60,23 +75,37 @@ export class UhkOperations { await this.device.write(transfer); } + public async updateDeviceFirmware(firmwarePath: string, device: UhkDeviceProduct): Promise { + this.logService.misc(`[UhkOperations] Start flashing device firmware with ${device.firmwareUpgradeMethod}`); + + switch (device.firmwareUpgradeMethod) { + case FIRMWARE_UPGRADE_METHODS.KBOOT: + return this.updateRightFirmwareWithKboot(firmwarePath, device); + + case FIRMWARE_UPGRADE_METHODS.MCUBOOT: + return this.updateFirmwareWithMcuManager(firmwarePath, device); + + default: + throw new Error(`Firmware upgrade method not implemented: ${device.firmwareUpgradeMethod}`); + } + } + public async updateRightFirmwareWithKboot(firmwarePath: string, device: UhkDeviceProduct): Promise { if (!(await existsAsync(firmwarePath))) { throw new Error(`Firmware path not found: ${firmwarePath}`); } - this.logService.misc('[UhkOperations] Start flashing right firmware'); + this.logService.misc('[UhkOperations] Start flashing right firmware with kboot'); this.logService.misc('[UhkOperations] Reenumerate bootloader'); - await this.device.reenumerate({ + const reenumerateResult = await this.device.reenumerate({ + device, enumerationMode: EnumerationModes.Bootloader, - vendorId: device.vendorId, - productId: device.bootloaderPid }); this.device.close(); - const kboot = new KBoot(new UsbPeripheral({ productId: device.bootloaderPid, vendorId: device.vendorId })); + const kboot = new KBoot(new UsbPeripheral({ productId: reenumerateResult.vidPidPair.pid, vendorId: reenumerateResult.vidPidPair.vid })); this.logService.misc('[UhkOperations] Waiting for bootloader'); - await waitForDevice(device.vendorId, device.bootloaderPid); + await waitForDevice(reenumerateResult.vidPidPair.vid, reenumerateResult.vidPidPair.pid); this.logService.misc('[UhkOperations] Flash security disable'); await kboot.flashSecurityDisable([0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08]); this.logService.misc('[UhkOperations] Flash erase region'); @@ -101,6 +130,35 @@ export class UhkOperations { this.logService.misc('[UhkOperations] Right firmware successfully flashed'); } + public async updateFirmwareWithMcuManager(firmwarePath: string, device: UhkDeviceProduct) { + if (!(await existsAsync(firmwarePath))) { + throw new Error(`Firmware path not found: ${firmwarePath}`); + } + + this.logService.misc(`[UhkOperations] Start flashing ${device.logName} firmware with mcumgr`); + + this.logService.misc('[UhkOperations] Reenumerate bootloader'); + const reenumerateResult = await this.device.reenumerate({ + device, + enumerationMode: EnumerationModes.Bootloader, + }); + this.device.close(); + // Give 1 sec to windows to install driver when first time appearing the mcu bootloader + await snooze(1000); + this.logService.misc(`[UhkOperations] Init SerialPeripheral: ${reenumerateResult.serialPath}`); + const peripheral = new SerialPeripheral(reenumerateResult.serialPath); + const mcuManager = new McuManager(peripheral); + this.logService.misc(`[UhkOperations] Read ${device.logName} firmware from file`); + const configData = fs.readFileSync(firmwarePath); + this.logService.misc('[UhkOperations] Write memory with mcumgr'); + await mcuManager.imageUpload(configData); + this.logService.misc('[UhkOperations] Reset mcu bootloader'); + await mcuManager.reset(); + this.logService.misc('[UhkOperations] Close mcu communication channels'); + await mcuManager.close(); + this.logService.misc(`[UhkOperations] ${device.logName} firmware successfully flashed`); + } + public async updateLeftModuleWithKboot(firmwarePath: string, device: UhkDeviceProduct): Promise { return this.updateModuleWithKboot(firmwarePath, device, LEFT_HALF_MODULE); } @@ -112,9 +170,8 @@ export class UhkOperations { ): Promise { this.logService.misc(`[UhkOperations] Start flashing "${module.name}" module firmware`); await this.device.reenumerate({ + device, enumerationMode: EnumerationModes.NormalKeyboard, - vendorId: device.vendorId, - productId: device.keyboardPid }); this.device.close(); await snooze(1000); @@ -130,15 +187,14 @@ export class UhkOperations { throw new Error(msg); } - await this.device.reenumerate({ + const reenumerateResult = await this.device.reenumerate({ + device, enumerationMode: EnumerationModes.Buspal, - vendorId: device.vendorId, - productId: device.buspalPid }); this.device.close(); this.logService.misc('[UhkOperations] Waiting for buspal'); - await waitForDevice(device.vendorId, device.buspalPid); - const usbPeripheral = new UsbPeripheral({ productId: device.buspalPid, vendorId: device.vendorId }); + await waitForDevice(reenumerateResult.vidPidPair.vid, reenumerateResult.vidPidPair.pid); + const usbPeripheral = new UsbPeripheral({ productId: reenumerateResult.vidPidPair.pid, vendorId: reenumerateResult.vidPidPair.vid }); let kboot: KBoot; const startTime = new Date(); @@ -184,14 +240,13 @@ export class UhkOperations { kboot.close(); await snooze(1000); - await this.device.reenumerate({ + const reenumerateResult1 = await this.device.reenumerate({ + device, enumerationMode: EnumerationModes.NormalKeyboard, - vendorId: device.vendorId, - productId: device.keyboardPid }); this.device.close(); this.logService.misc('[UhkOperations] Waiting for normalKeyboard'); - await waitForDevice(device.vendorId, device.keyboardPid); + await waitForDevice(reenumerateResult1.vidPidPair.vid, reenumerateResult1.vidPidPair.pid); await this.device.sendKbootCommandToModule(module.i2cAddress, KbootCommands.reset, 100); this.device.close(); await snooze(1000); @@ -233,7 +288,7 @@ export class UhkOperations { let configSize = await this.getConfigSizeFromKeyboard(configBufferId); const originalConfigSize = configSize; this.logService.usb(`[DeviceOperation] getConfigSize() configSize: ${configSize}`); - const chunkSize = 63; + const chunkSize = MAX_USB_PAYLOAD_SIZE - 1; let offset = 0; let configBuffer = Buffer.alloc(0); let firstRead = true; @@ -297,6 +352,7 @@ export class UhkOperations { await this.applyConfiguration(); this.logService.usb('[DeviceOperation] USB[T]: Write user configuration to EEPROM'); await this.writeConfigToEeprom(ConfigBufferId.validatedUserConfig); + await this.waitUntilKeyboardBusy(); } catch (error) { this.logService.error('[DeviceOperation] Transferring error', error); throw error; @@ -305,7 +361,9 @@ export class UhkOperations { } } - public async saveHardwareConfiguration(isIso: boolean, deviceId: number): Promise { + public async saveHardwareConfiguration(isIso: boolean, deviceId: number, uniqueId: number = Math.floor(2 ** 32 * Math.random())): Promise { + const uhkProduct = ALL_UHK_DEVICES.find(product => product.id === deviceId) || UNKNOWN_DEVICE; + this.logService.misc(`[DeviceOperation] save hardware configuration: layout: ${isIso ? 'iso' : 'ansi'}, deviceId: ${deviceId} (${uhkProduct.name}), uniqueId: ${uniqueId}`); const hardwareConfig = new HardwareConfiguration(); hardwareConfig.signature = 'UHK'; @@ -314,7 +372,7 @@ export class UhkOperations { hardwareConfig.patchVersion = 0; hardwareConfig.brandId = 0; hardwareConfig.deviceId = deviceId; - hardwareConfig.uniqueId = Math.floor(2 ** 32 * Math.random()); + hardwareConfig.uniqueId = uniqueId; hardwareConfig.isVendorModeOn = false; hardwareConfig.isIso = isIso; @@ -324,6 +382,7 @@ export class UhkOperations { await this.sendConfigToKeyboard(buffer, false); await this.writeConfigToEeprom(ConfigBufferId.hardwareConfig); + await this.waitUntilKeyboardBusy(); } public async writeConfigToEeprom(configBufferId: ConfigBufferId): Promise { @@ -360,7 +419,7 @@ export class UhkOperations { return true; } - this.logService.misc(`[DeviceOperation] Cannot ping the bootloader. Please remove the "${moduleName}" module, and keep reconnecting it until you see this message.`); + this.logService.misc(`[DeviceOperation] Cannot ping the bootloader. Please remove the "${moduleName}" module, and keep reconnecting it until you do not see this message anymore.`); await snooze(1000); } @@ -446,7 +505,7 @@ export class UhkOperations { } public async getRightModuleProperty(property: DevicePropertyIds, args: Array = []): Promise { - this.logService.usb(`[DeviceOperation] USB[T]: Read right module "${DevicePropertyIds[property]}" property information`); + this.logService.usb(`[DeviceOperation] USB[T]: Device module "${DevicePropertyIds[property]}" property information`); const command = Buffer.from([UsbCommand.GetProperty, property, ...args]); const buffer = await this.device.write(command); @@ -454,7 +513,7 @@ export class UhkOperations { } public async getRightModuleFirmwareRepoInfo(): Promise { - this.logService.usb('[DeviceOperation] USB[T]: Read right module firmware repo information'); + this.logService.usb('[DeviceOperation] USB[T]: Read device firmware repo information'); return { firmwareGitRepo: readUhkResponseAs0EndString(await this.getRightModuleProperty(DevicePropertyIds.GitRepo)), @@ -462,41 +521,30 @@ export class UhkOperations { }; } - public async getRightModuleVersionInfo(): Promise { - this.logService.usb('[DeviceOperation] USB[T]: Read right module version information'); + public async getDeviceVersionInfo(): Promise { + // TODO: read device name from UHK Device + this.logService.usb('[DeviceOperation] USB[T]: Device information'); - const command = Buffer.from([UsbCommand.GetProperty, DevicePropertyIds.ProtocolVersions]); - const buffer = await this.device.write(command); - const uhkBuffer = UhkBuffer.fromArray(convertBufferToIntArray(buffer)); - // skip the first byte - uhkBuffer.readUInt8(); - - let rightModuleInfo: RightModuleInfo = { - firmwareVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, - deviceProtocolVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, - moduleProtocolVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, - modules: {}, - userConfigVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, - hardwareConfigVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}`, - smartMacrosVersion: `${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}.${uhkBuffer.readUInt16()}` - }; + const protocolVersions = await this.device.getProtocolVersions(); - this.logService.misc(`[DeviceOperation] right module deviceProtocolVersion: ${rightModuleInfo.deviceProtocolVersion}`); + let deviceVersionInformation: DeviceVersionInformation = { + ...protocolVersions, + }; - if (isDeviceProtocolSupportGitInfo(rightModuleInfo.deviceProtocolVersion)) - rightModuleInfo = { - ...rightModuleInfo, + if (isDeviceProtocolSupportGitInfo(deviceVersionInformation.deviceProtocolVersion)) + deviceVersionInformation = { + ...deviceVersionInformation, ...await this.getRightModuleFirmwareRepoInfo(), }; - if (isDeviceProtocolSupportFirmwareChecksum(rightModuleInfo.deviceProtocolVersion)) { - rightModuleInfo = { - ...rightModuleInfo, + if (isDeviceProtocolSupportFirmwareChecksum(deviceVersionInformation.deviceProtocolVersion)) { + deviceVersionInformation = { + ...deviceVersionInformation, firmwareChecksum: readUhkResponseAs0EndString(await this.getRightModuleProperty(DevicePropertyIds.FirmwareChecksum, [0])), }; } - return rightModuleInfo; + return deviceVersionInformation; } public async setLedPwmBrightness(percent: number): Promise { @@ -612,6 +660,7 @@ export class UhkOperations { if (variableId === UsbVariables.statusBuffer) { let message = readUhkResponseAs0EndString(UhkBuffer.fromArray(convertBufferToIntArray(responseBuffer))); + this.logService.misc(`[DeviceOperation] status buffer segment: ${message}`); if (message.length === responseBuffer.length - 1 && iteration < 20) { message += await this.getVariable(variableId, iteration + 1); } @@ -626,6 +675,140 @@ export class UhkOperations { return responseBuffer[1]; } + public async pairToDongle(dongle: UhkHidDevice) : Promise { + const deviceBleAddress = await this.device.getBleAddress(); + this.logService.misc('[DeviceOperation] Device BLE address: ', convertBleAddressArrayToString(deviceBleAddress)); + const dongleBleAddress = await dongle.getBleAddress(); + this.logService.misc('[DeviceOperation] Dongle BLE address: ', convertBleAddressArrayToString(dongleBleAddress)); + + this.logService.misc('[DeviceOperation] Device switching to pairing mode'); + await this.device.switchToPairingMode(); + this.logService.misc('[DeviceOperation] Dongle switching to pairing mode'); + await dongle.switchToPairingMode(); + + this.logService.misc('[DeviceOperation] Device delete dongle bond'); + await this.device.deleteBond(dongleBleAddress); + this.logService.misc('[DeviceOperation] Dongle delete all bonds'); + await dongle.deleteAllBonds(); + + this.logService.misc('[DeviceOperation] Device read pairing info'); + const devicePairInfo = await this.device.getPairingInfo(); + this.logService.misc('[DeviceOperation] Dongle read pairing info'); + const donglePairInfo = await dongle.getPairingInfo(); + + this.logService.misc('[DeviceOperation] Device set pairing info'); + await this.device.setPairingInfo(PairIds.Dongle, donglePairInfo); + this.logService.misc('[DeviceOperation] Dongle set pairing info'); + await dongle.setPairingInfo(PairIds.Right, devicePairInfo); + + this.logService.misc('[DeviceOperation] Device pair peripheral'); + await this.device.pairPeripheral(); + this.logService.misc('[DeviceOperation] Dongle pair central'); + await dongle.pairCentral(); + + this.logService.misc('[DeviceOperation] Device waiting for pairing finished'); + let deviceParingStatus: PairingStatuses; + await waitUntil({ + shouldWait: async () => { + deviceParingStatus = await this.device.getPairingStatus(); + + return deviceParingStatus === PairingStatuses.InProgress; + }, + timeout: 5000, + timeoutErrorMessage: '[DeviceOperation] Device pairing timeout', + wait: 100, + }); + this.logService.misc(`[DeviceOperation] Device pairing result: ${PAIRING_STATUS_TEXT[deviceParingStatus]}`); + + this.logService.misc('[DeviceOperation] Dongle waiting for pairing finished'); + let dongleParingStatus: PairingStatuses; + await waitUntil({ + shouldWait: async () => { + dongleParingStatus = await dongle.getPairingStatus(); + + return dongleParingStatus === PairingStatuses.InProgress; + }, + timeout: 5000, + timeoutErrorMessage: '[DeviceOperation] Dongle pairing timeout', + wait: 100, + }); + this.logService.misc(`[DeviceOperation] Dongle pairing result: ${PAIRING_STATUS_TEXT[dongleParingStatus]}`); + + this.logService.misc('[DeviceOperation] Device to Dongle pairing finished'); + + return { + address: convertBleAddressArrayToString(deviceBleAddress), + pairAddress: convertBleAddressArrayToString(dongleBleAddress), + }; + } + + public async pairToLeftHalf(leftHalf: UhkHidDevice): Promise { + const deviceBleAddress = await this.device.getBleAddress(); + this.logService.misc('[DeviceOperation] Device BLE address: ', convertBleAddressArrayToString(deviceBleAddress)); + const leftHalfAddress = await leftHalf.getBleAddress(); + this.logService.misc('[DeviceOperation] Left half BLE address: ', convertBleAddressArrayToString(leftHalfAddress)); + + this.logService.misc('[DeviceOperation] Device switching to pairing mode'); + await this.device.switchToPairingMode(); + this.logService.misc('[DeviceOperation] Left half switching to pairing mode'); + await leftHalf.switchToPairingMode(); + + this.logService.misc('[DeviceOperation] Device delete left half bond'); + await this.device.deleteBond(leftHalfAddress); + this.logService.misc('[DeviceOperation] Left half delete all bonds'); + await leftHalf.deleteAllBonds(); + + this.logService.misc('[DeviceOperation] Device read pairing info'); + const devicePairInfo = await this.device.getPairingInfo(); + this.logService.misc('[DeviceOperation] Left half read pairing info'); + const leftHalfPairInfo = await leftHalf.getPairingInfo(); + + this.logService.misc('[DeviceOperation] Left half set pairing info'); + await leftHalf.setPairingInfo(PairIds.Right, devicePairInfo); + this.logService.misc('[DeviceOperation] Device set pairing info'); + await this.device.setPairingInfo(PairIds.left, leftHalfPairInfo); + + this.logService.misc('[DeviceOperation] Left half pair peripheral'); + await leftHalf.pairPeripheral(); + this.logService.misc('[DeviceOperation] Device pair central'); + await this.device.pairCentral(); + + this.logService.misc('[DeviceOperation] Left half waiting for pairing finished'); + let leftHalfParingStatus: PairingStatuses; + await waitUntil({ + shouldWait: async () => { + leftHalfParingStatus = await leftHalf.getPairingStatus(); + + return leftHalfParingStatus === PairingStatuses.InProgress; + }, + timeout: 15000, + timeoutErrorMessage: '[DeviceOperation] Left half pairing timeout', + wait: 100, + }); + this.logService.misc(`[DeviceOperation] Left half pairing result: ${PAIRING_STATUS_TEXT[leftHalfParingStatus]}`); + + this.logService.misc('[DeviceOperation] Device waiting for pairing finished'); + let deviceParingStatus: PairingStatuses; + await waitUntil({ + shouldWait: async () => { + deviceParingStatus = await this.device.getPairingStatus(); + + return deviceParingStatus === PairingStatuses.InProgress; + }, + timeout: 15000, + timeoutErrorMessage: '[DeviceOperation] Device pairing timeout', + wait: 100, + }); + this.logService.misc(`[DeviceOperation] Device pairing result: ${PAIRING_STATUS_TEXT[deviceParingStatus]}`); + + this.logService.misc('[DeviceOperation] Device to Left half pairing finished'); + + return { + address: convertBleAddressArrayToString(deviceBleAddress), + pairAddress: convertBleAddressArrayToString(leftHalfAddress), + }; + } + public async setVariable(variable: UsbVariables, value: number): Promise { this.logService.usb('[DeviceOperation] USB[T]: Set Variable'); await this.device.write(Buffer.from([UsbCommand.SetVariable, variable, value])); diff --git a/packages/uhk-usb/src/util.ts b/packages/uhk-usb/src/util.ts index 555c38d71f5..d3500e126d5 100644 --- a/packages/uhk-usb/src/util.ts +++ b/packages/uhk-usb/src/util.ts @@ -2,11 +2,10 @@ import { Device, devicesAsync } from 'node-hid'; import fse from 'fs-extra'; import { EOL } from 'os'; import MemoryMap from 'nrf-intel-hex'; -import { Buffer, LogService, UHK_DEVICES, UhkDeviceProduct } from 'uhk-common'; +import { Buffer, LogService, UHK_DEVICES, UhkDeviceProduct, VidPidPair } from 'uhk-common'; -import { Constants, UsbCommand } from './constants.js'; - -export const snooze = ms => new Promise(resolve => setTimeout(resolve, ms)); +import { MAX_USB_PAYLOAD_SIZE, UsbCommand } from './constants.js'; +import { snooze } from './utils/index.js'; /** * Convert the Buffer to number[] @@ -28,7 +27,7 @@ export function convertBufferToIntArray(buffer: Buffer): number[] { */ export function getTransferBuffers(usbCommand: UsbCommand, configBuffer: Buffer): Buffer[] { const fragments: Buffer[] = []; - const MAX_SENDING_PAYLOAD_SIZE = Constants.MAX_PAYLOAD_SIZE - 4; + const MAX_SENDING_PAYLOAD_SIZE = MAX_USB_PAYLOAD_SIZE - 4; for (let offset = 0; offset < configBuffer.length; offset += MAX_SENDING_PAYLOAD_SIZE) { const length = offset + MAX_SENDING_PAYLOAD_SIZE < configBuffer.length ? MAX_SENDING_PAYLOAD_SIZE @@ -40,20 +39,6 @@ export function getTransferBuffers(usbCommand: UsbCommand, configBuffer: Buffer) return fragments; } -/** - * Create the communication package that will send over USB and - * @param {Buffer} buffer - * @returns {number[]} - * @private - * @static - */ -export function getTransferData(buffer: Buffer): number[] { - const data = convertBufferToIntArray(buffer); - data.unshift(0); - - return data; -} - /** * Convert buffer to space separated hexadecimal string * @param {Buffer} buffer @@ -101,23 +86,28 @@ export async function retry(command: Function, maxTry = 3, logService?: LogServi } } +export const isUhkCommunicationUsage = (dev: Device): boolean => { + return (dev.usagePage === 128 && dev.usage === 129) || // Old firmware + (dev.usagePage === 65280 && dev.usage === 1); // New firmware +}; + export const isUhkCommunicationInterface = (dev: Device): boolean => { - return UHK_DEVICES.some(device => dev.vendorId === device.vendorId && - dev.productId === device.keyboardPid && - ((dev.usagePage === 128 && dev.usage === 129) || // Old firmware - (dev.usagePage === 65280 && dev.usage === 1) // New firmware - ) + return UHK_DEVICES.some(device => device.keyboard.some(vidPid => vidPid.vid === dev.vendorId && vidPid.pid === dev.productId) && + isUhkCommunicationUsage(dev) ); }; export const getUhkDevice = (dev: Device): UhkDeviceProduct => { - return UHK_DEVICES.find(device => dev.vendorId === device.vendorId && - (dev.productId === device.keyboardPid || dev.productId === device.bootloaderPid) - ); + return UHK_DEVICES.find(device => { + return device.keyboard.some(vidPid => vidPid.vid === dev.vendorId && vidPid.pid === dev.productId) || + device.bootloader.some(vidPid => vidPid.vid === dev.vendorId && vidPid.pid === dev.productId); + }); }; export const isBootloader = (dev: Device): boolean => { - return UHK_DEVICES.some(device => dev.vendorId === device.vendorId && dev.productId === device.bootloaderPid); + return UHK_DEVICES.some(device => { + return device.bootloader.some(vidPid => vidPid.vid === dev.vendorId && vidPid.pid === dev.productId); + }); }; export const getFileContentAsync = async (filePath: string): Promise> => { @@ -156,3 +146,24 @@ export const waitForDevice = async (vendorId: number, productId: number): Promis throw new Error(`Cannot find device with vendorId: ${vendorId}, productId: ${productId}`); }; + +export const waitForDevices = async (vidPidPairs: VidPidPair[]): Promise => { + const startTime = new Date().getTime() + 15000; + + while (startTime > new Date().getTime()) { + + const isAvailable = (await devicesAsync()) + .some(dev => vidPidPairs.some(vidPid => vidPid.vid === dev.vendorId && vidPid.pid === dev.productId)); + + if (isAvailable) { + await snooze(1000); + + return; + } + + await snooze(250); + } + + const errorMessage = vidPidPairs.map(vidPid => `vendorId: ${vidPid.vid}, productId: ${vidPid.pid}`).join(' or '); + throw new Error(`Cannot find device with vendorId: ${errorMessage}`); +}; diff --git a/packages/uhk-usb/src/utils/assert-command-line-options.ts b/packages/uhk-usb/src/utils/assert-command-line-options.ts index 0c084a58d85..2713cfe5abe 100644 --- a/packages/uhk-usb/src/utils/assert-command-line-options.ts +++ b/packages/uhk-usb/src/utils/assert-command-line-options.ts @@ -17,4 +17,8 @@ export function assertCommandLineOptions (options: CommandLineArgs) { if (anyUsbOption && !allUsbOptions) { throw new Error('You have to set all of the following options: vid, pid, usb-interface'); } + + if (options['report-id'] !== null && options['report-id'] !== undefined && options['no-report-id'] === true) { + throw new Error('You can not set --report-id and --no-report-id at the same time.'); + } } diff --git a/packages/uhk-usb/src/utils/device-vid-pid-interface-filter.ts b/packages/uhk-usb/src/utils/device-vid-pid-interface-filter.ts new file mode 100644 index 00000000000..9514798fe52 --- /dev/null +++ b/packages/uhk-usb/src/utils/device-vid-pid-interface-filter.ts @@ -0,0 +1,10 @@ +import { Device } from 'node-hid'; +import { DeviceIdentifier } from 'uhk-common'; + +export function deviceVidPidInterfaceFilter(deviceIdentifier: DeviceIdentifier): (device: Device) => boolean { + return (device: Device): boolean => { + return device.vendorId === deviceIdentifier.vid + && device.productId === deviceIdentifier.pid + && device.interface === deviceIdentifier['usb-interface']; + }; +} diff --git a/packages/uhk-usb/src/utils/find-device-by-device-identifier.ts b/packages/uhk-usb/src/utils/find-device-by-device-identifier.ts new file mode 100644 index 00000000000..7b881fe0488 --- /dev/null +++ b/packages/uhk-usb/src/utils/find-device-by-device-identifier.ts @@ -0,0 +1,22 @@ +import { Device } from 'node-hid'; +import { DeviceIdentifier } from 'uhk-common'; + +import { isUhkCommunicationInterface } from '../util.js'; +import { deviceVidPidInterfaceFilter } from './device-vid-pid-interface-filter.js'; + +export function findDeviceByDeviceIdentifier(deviceIdentifier: DeviceIdentifier): (device: Device) => boolean { + const isVidPidInterfaceMatching = deviceVidPidInterfaceFilter(deviceIdentifier); + + return (device: Device) => { + if (deviceIdentifier['serial-number']) { + if (device.serialNumber === deviceIdentifier['serial-number']) { + return (deviceIdentifier.vid && isVidPidInterfaceMatching(device)) + || (!deviceIdentifier.vid && isUhkCommunicationInterface(device)); + } else { + return false; + } + } + + return isVidPidInterfaceMatching(device); + }; +} diff --git a/packages/uhk-usb/src/utils/find-device-by-options.ts b/packages/uhk-usb/src/utils/find-device-by-options.ts deleted file mode 100644 index fcfff88ff2b..00000000000 --- a/packages/uhk-usb/src/utils/find-device-by-options.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Device } from 'node-hid'; -import { CommandLineArgs } from 'uhk-common'; - -export function findDeviceByOptions(options: CommandLineArgs): (device: Device) => boolean { - return (device: Device) => { - return device.vendorId === options.vid - && device.productId === options.pid - && device.interface === options['usb-interface']; - }; -} diff --git a/packages/uhk-usb/src/utils/get-current-uhk-80-left-HID.ts b/packages/uhk-usb/src/utils/get-current-uhk-80-left-HID.ts new file mode 100644 index 00000000000..ff23ed2dec3 --- /dev/null +++ b/packages/uhk-usb/src/utils/get-current-uhk-80-left-HID.ts @@ -0,0 +1,20 @@ +import { devicesAsync, Device } from 'node-hid'; + +import { isLeftHalfCommunicationDevice } from './is-left-half-communication-device.js'; + +export const MULTIPLE_UHK80_LEFT_CONNECTED_ERROR_MESSAGE = 'Multiple UHK80 Left half aren\'t supported yet, so please connect only a single left half to proceed further.'; + +export async function getCurrenUhk80LeftHID(): Promise { + const hidDevices = await devicesAsync(); + + const devices = hidDevices.filter(device => isLeftHalfCommunicationDevice(device)); + + if (devices.length === 0) { + return; + } + + if (devices.length === 1) + return devices[0]; + + throw new Error(MULTIPLE_UHK80_LEFT_CONNECTED_ERROR_MESSAGE); +} diff --git a/packages/uhk-usb/src/utils/get-current-uhk-80-right-HID.ts b/packages/uhk-usb/src/utils/get-current-uhk-80-right-HID.ts new file mode 100644 index 00000000000..a051d115c29 --- /dev/null +++ b/packages/uhk-usb/src/utils/get-current-uhk-80-right-HID.ts @@ -0,0 +1,20 @@ +import { devicesAsync, Device } from 'node-hid'; + +import { isRightHalfCommunicationDevice } from './is-right-half-communication-device.js'; + +export const MULTIPLE_UHK80_RIGHT_CONNECTED_ERROR_MESSAGE = 'Multiple UHK80 Right half aren\'t supported yet, so please connect only a single right half to proceed further.'; + +export async function getCurrenUhk80RightHID(): Promise { + const hidDevices = await devicesAsync(); + + const devices = hidDevices.filter(device => isRightHalfCommunicationDevice(device)); + + if (devices.length === 0) { + return; + } + + if (devices.length === 1) + return devices[0]; + + throw new Error(MULTIPLE_UHK80_RIGHT_CONNECTED_ERROR_MESSAGE); +} diff --git a/packages/uhk-usb/src/utils/get-current-uhk-device-product-by-bootloader-id.ts b/packages/uhk-usb/src/utils/get-current-uhk-device-product-by-bootloader-id.ts deleted file mode 100644 index ae452ede738..00000000000 --- a/packages/uhk-usb/src/utils/get-current-uhk-device-product-by-bootloader-id.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { devicesAsync } from 'node-hid'; -import { UHK_DEVICES, UhkDeviceProduct } from 'uhk-common'; - -import { validateConnectedDevices } from './validate-connected-devices.js'; - -export async function getCurrentUhkDeviceProductByBootloaderId(): Promise { - await validateConnectedDevices(); - - const hidDevices = await devicesAsync(); - - for (const hidDevice of hidDevices) { - for (const uhkDevice of UHK_DEVICES) { - if (hidDevice.vendorId === uhkDevice.vendorId && hidDevice.productId === uhkDevice.bootloaderPid) { - return uhkDevice; - } - } - } -} diff --git a/packages/uhk-usb/src/utils/get-current-uhk-device-product.ts b/packages/uhk-usb/src/utils/get-current-uhk-device-product.ts index ad994a399b3..68e391cdd7d 100644 --- a/packages/uhk-usb/src/utils/get-current-uhk-device-product.ts +++ b/packages/uhk-usb/src/utils/get-current-uhk-device-product.ts @@ -1,17 +1,48 @@ import { devicesAsync } from 'node-hid'; -import { UHK_DEVICES, UhkDeviceProduct } from 'uhk-common'; +import { ALL_UHK_DEVICES, DeviceIdentifier, UHK_DEVICES, UhkDeviceProduct } from 'uhk-common'; +import { isUhkCommunicationInterface } from '../util.js'; +import { deviceVidPidInterfaceFilter } from './device-vid-pid-interface-filter.js'; import { validateConnectedDevices } from './validate-connected-devices.js'; -export async function getCurrentUhkDeviceProduct(): Promise { - await validateConnectedDevices(); +export async function getCurrentUhkDeviceProduct(deviceIdentifier: DeviceIdentifier = {}): Promise { + await validateConnectedDevices(deviceIdentifier); + const isVidPidInterfaceMatching = deviceVidPidInterfaceFilter(deviceIdentifier); const hidDevices = await devicesAsync(); for (const hidDevice of hidDevices) { + if (deviceIdentifier['serial-number']) { + if (deviceIdentifier['serial-number'] === hidDevice.serialNumber + && ((deviceIdentifier.vid && isVidPidInterfaceMatching(hidDevice)) + || (!deviceIdentifier.vid && isUhkCommunicationInterface(hidDevice)) + ) + ) { + return ALL_UHK_DEVICES.find(uhkDevice => { + return uhkDevice.bootloader.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId) || + uhkDevice.keyboard.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId); + }); + } + else { + continue; + } + } + + if (deviceIdentifier.vid) { + if (isVidPidInterfaceMatching(hidDevice)) { + return ALL_UHK_DEVICES.find(uhkDevice => { + return uhkDevice.bootloader.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId) || + uhkDevice.keyboard.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId); + }); + } + + continue; + } + for (const uhkDevice of UHK_DEVICES) { - if (hidDevice.vendorId === uhkDevice.vendorId - && (hidDevice.productId === uhkDevice.keyboardPid || hidDevice.productId === uhkDevice.bootloaderPid)) { + if (uhkDevice.bootloader.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId) || + uhkDevice.keyboard.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId) + ) { return uhkDevice; } } diff --git a/packages/uhk-usb/src/utils/get-current-uhk-dongle-HID.ts b/packages/uhk-usb/src/utils/get-current-uhk-dongle-HID.ts new file mode 100644 index 00000000000..a905d648af6 --- /dev/null +++ b/packages/uhk-usb/src/utils/get-current-uhk-dongle-HID.ts @@ -0,0 +1,20 @@ +import { devicesAsync, Device } from 'node-hid'; + +import { isDongleCommunicationDevice } from './is-dongle-communication-device.js'; + +export const MULTIPLE_DONGLE_CONNECTED_ERROR_MESSAGE = 'Multiple dongle aren\'t supported yet, so please connect only a single dongle to proceed further.'; + +export async function getCurrentUhkDongleHID(): Promise { + const hidDevices = await devicesAsync(); + + const devices = hidDevices.filter(device => isDongleCommunicationDevice(device)); + + if (devices.length === 0) { + return; + } + + if (devices.length === 1) + return devices[0]; + + throw new Error(MULTIPLE_DONGLE_CONNECTED_ERROR_MESSAGE); +} diff --git a/packages/uhk-usb/src/utils/get-device-enumerate-product-id.ts b/packages/uhk-usb/src/utils/get-device-enumerate-vid-pid-pairs.ts similarity index 53% rename from packages/uhk-usb/src/utils/get-device-enumerate-product-id.ts rename to packages/uhk-usb/src/utils/get-device-enumerate-vid-pid-pairs.ts index 6ddfcf4366c..318a78d25aa 100644 --- a/packages/uhk-usb/src/utils/get-device-enumerate-product-id.ts +++ b/packages/uhk-usb/src/utils/get-device-enumerate-vid-pid-pairs.ts @@ -1,17 +1,17 @@ -import { UhkDeviceProduct } from 'uhk-common'; +import { UhkDeviceProduct, VidPidPair } from 'uhk-common'; import { EnumerationModes } from '../constants.js'; -export function getDeviceEnumerateProductId(device: UhkDeviceProduct, enumerationMode: EnumerationModes): number { +export function getDeviceEnumerateVidPidPairs(device: UhkDeviceProduct, enumerationMode: EnumerationModes): VidPidPair[] { switch (enumerationMode) { case EnumerationModes.Bootloader: - return device.bootloaderPid; + return device.bootloader; case EnumerationModes.Buspal: - return device.buspalPid; + return device.buspal; case EnumerationModes.NormalKeyboard: - return device.keyboardPid; + return device.keyboard; default: throw new Error(`Not implemented enumeration device mapping: ${enumerationMode}`); diff --git a/packages/uhk-usb/src/utils/get-device-firmware-path.ts b/packages/uhk-usb/src/utils/get-device-firmware-path.ts index 74b95aac223..7ebe739ebc0 100644 --- a/packages/uhk-usb/src/utils/get-device-firmware-path.ts +++ b/packages/uhk-usb/src/utils/get-device-firmware-path.ts @@ -1,5 +1,5 @@ import { dirname, join } from 'path'; -import { FirmwareJson, UhkDeviceProduct } from 'uhk-common'; +import { FirmwareJson, FIRMWARE_UPGRADE_METHODS, UhkDeviceProduct } from 'uhk-common'; export function getDeviceFirmwarePath(device: UhkDeviceProduct, firmwareJson: FirmwareJson): string { const deviceConfig = firmwareJson.devices.find(firmwareDevice => firmwareDevice.deviceId === device.id); @@ -8,5 +8,9 @@ export function getDeviceFirmwarePath(device: UhkDeviceProduct, firmwareJson: Fi throw new Error(`The firmware does not support: ${device.name}`); } - return join(dirname(firmwareJson.path), 'devices', deviceConfig.name, 'firmware.hex'); + const fileName = device.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.KBOOT + ? 'firmware.hex' + : 'firmware.bin'; + + return join(dirname(firmwareJson.path), 'devices', deviceConfig.name, fileName); } diff --git a/packages/uhk-usb/src/utils/get-device-user-config-path.ts b/packages/uhk-usb/src/utils/get-device-user-config-path.ts new file mode 100644 index 00000000000..3ffbd485a67 --- /dev/null +++ b/packages/uhk-usb/src/utils/get-device-user-config-path.ts @@ -0,0 +1,12 @@ +import { dirname, join } from 'path'; +import { FirmwareJson, UhkDeviceProduct } from 'uhk-common'; + +export function getDeviceUserConfigPath(device: UhkDeviceProduct, firmwareJson: FirmwareJson): string { + const deviceConfig = firmwareJson.devices.find(firmwareDevice => firmwareDevice.deviceId === device.id); + + if (!deviceConfig) { + throw new Error(`The user config does not support: ${device.name}`); + } + + return join(dirname(firmwareJson.path), 'devices', deviceConfig.name, 'config.bin'); +} diff --git a/packages/uhk-usb/src/utils/get-number-of-connected-devices.ts b/packages/uhk-usb/src/utils/get-number-of-connected-devices.ts index 94b4ca1256b..a0717eec509 100644 --- a/packages/uhk-usb/src/utils/get-number-of-connected-devices.ts +++ b/packages/uhk-usb/src/utils/get-number-of-connected-devices.ts @@ -1,9 +1,26 @@ import { devicesAsync } from 'node-hid'; +import { DeviceIdentifier } from 'uhk-common'; import { isBootloader, isUhkCommunicationInterface } from '../util.js'; +import { deviceVidPidInterfaceFilter } from './device-vid-pid-interface-filter.js'; + +export async function getNumberOfConnectedDevices(deviceIdentifier: DeviceIdentifier = {}): Promise { + const isVidPidInterfaceMatching = deviceVidPidInterfaceFilter(deviceIdentifier); -export async function getNumberOfConnectedDevices(): Promise { return (await devicesAsync()) - .filter(dev => isUhkCommunicationInterface(dev) || isBootloader(dev)) + .filter(dev => { + if (deviceIdentifier['serial-number']) { + return deviceIdentifier['serial-number'] === dev.serialNumber + && (deviceIdentifier.vid && isVidPidInterfaceMatching(dev) + || (!deviceIdentifier.vid && isUhkCommunicationInterface(dev)) + ); + } + + if (deviceIdentifier.vid) { + return isVidPidInterfaceMatching(dev); + } + + return isUhkCommunicationInterface(dev) || isBootloader(dev); + }) .length; } diff --git a/packages/uhk-usb/src/utils/get-uhk-devices.ts b/packages/uhk-usb/src/utils/get-uhk-devices.ts index ba5b24f7a2c..11b5e2c902c 100644 --- a/packages/uhk-usb/src/utils/get-uhk-devices.ts +++ b/packages/uhk-usb/src/utils/get-uhk-devices.ts @@ -1,6 +1,6 @@ import { Device, devicesAsync } from 'node-hid'; -import { UHK_VENDOR_ID } from 'uhk-common'; +import { UHK_VENDOR_ID, UHK_VENDOR_ID_OLD } from 'uhk-common'; -export async function getUhkDevices(vendorId: number = UHK_VENDOR_ID): Promise> { - return (await devicesAsync()).filter(x => x.vendorId === vendorId); +export async function getUhkDevices(vendorIds: number[] = [UHK_VENDOR_ID, UHK_VENDOR_ID_OLD]): Promise> { + return (await devicesAsync()).filter(x => vendorIds.includes(x.vendorId)); } diff --git a/packages/uhk-usb/src/utils/get-uhk-dongles.ts b/packages/uhk-usb/src/utils/get-uhk-dongles.ts new file mode 100644 index 00000000000..7d0972c715c --- /dev/null +++ b/packages/uhk-usb/src/utils/get-uhk-dongles.ts @@ -0,0 +1,8 @@ +import { Device, devices } from 'node-hid'; +import { UHK_DONGLE } from 'uhk-common'; + +import { isUhkCommunicationUsage } from '../util.js'; + +export function getUhkDongles(): Array { + return devices().filter(x => UHK_DONGLE.keyboard.some(vidPid => x.vendorId === vidPid.vid && x.productId === vidPid.pid && isUhkCommunicationUsage(x))); +} diff --git a/packages/uhk-usb/src/utils/index.ts b/packages/uhk-usb/src/utils/index.ts index 7f584adc059..4d60d849604 100644 --- a/packages/uhk-usb/src/utils/index.ts +++ b/packages/uhk-usb/src/utils/index.ts @@ -3,16 +3,30 @@ export * from './check-firmware-and-device-compatibility.js'; export * from './calculate-halves-state.js'; export * from './convert-ms-to-duration.js'; export * from './convert-slave-i2c-error-buffer.js'; -export * from './find-device-by-options.js'; +export * from './device-vid-pid-interface-filter.js'; +export * from './find-device-by-device-identifier.js'; export * from './get-current-uhk-device-product.js'; -export * from './get-current-uhk-device-product-by-bootloader-id.js'; -export * from './get-device-enumerate-product-id.js'; +export * from './get-current-uhk-dongle-HID.js'; +export * from './get-current-uhk-80-left-HID.js'; +export * from './get-current-uhk-80-right-HID.js'; +export * from './get-device-enumerate-vid-pid-pairs.js'; export * from './get-device-firmware-path.js'; +export * from './get-device-user-config-path.js'; export * from './get-firmware-package-json.js'; export * from './get-module-firmware-path.js'; export * from './get-number-of-connected-devices.js'; export * from './get-package-json-from-path-async.js'; export * from './get-uhk-devices.js'; +export * from './get-uhk-dongles.js'; +export * from './is-dongle-communication-device.js'; +export * from './is-left-half-communication-device.js'; +export * from './is-right-half-communication-device.js'; +export * from './is-serial-port-in-vid-pids.js'; +export * from './is-uhk-device-connected.js'; +export * from './is-uhk-keyboard-connected.js'; +export * from './snooze.js'; export * from './validate-connected-devices.js'; export { default as readUhkResponseAs0EndString } from './read-uhk-response-as-0-end-string.js'; export * from './usb-device-json-formatter.js'; +export * from './wait-for-uhk-device-connected.js'; +export * from './wait-until.js'; diff --git a/packages/uhk-usb/src/utils/is-dongle-communication-device.ts b/packages/uhk-usb/src/utils/is-dongle-communication-device.ts new file mode 100644 index 00000000000..10842cce636 --- /dev/null +++ b/packages/uhk-usb/src/utils/is-dongle-communication-device.ts @@ -0,0 +1,12 @@ +import { Device } from 'node-hid'; +import { UHK_DONGLE } from 'uhk-common'; + +import { isUhkCommunicationUsage } from '../util.js'; + +export function isDongleCommunicationDevice(device: Device): boolean { + return UHK_DONGLE.keyboard.some(vidPid => { + return vidPid.vid === device.vendorId + && vidPid.pid == device.productId + && isUhkCommunicationUsage(device); + }); +} diff --git a/packages/uhk-usb/src/utils/is-left-half-communication-device.ts b/packages/uhk-usb/src/utils/is-left-half-communication-device.ts new file mode 100644 index 00000000000..b2c1fbf27d2 --- /dev/null +++ b/packages/uhk-usb/src/utils/is-left-half-communication-device.ts @@ -0,0 +1,12 @@ +import { Device } from 'node-hid'; +import { UHK_80_DEVICE_LEFT } from 'uhk-common'; + +import { isUhkCommunicationUsage } from '../util.js'; + +export function isLeftHalfCommunicationDevice(device: Device): boolean { + return UHK_80_DEVICE_LEFT.keyboard.some(vidPid => { + return vidPid.vid === device.vendorId + && vidPid.pid == device.productId + && isUhkCommunicationUsage(device); + }); +} diff --git a/packages/uhk-usb/src/utils/is-right-half-communication-device.ts b/packages/uhk-usb/src/utils/is-right-half-communication-device.ts new file mode 100644 index 00000000000..0cb40f2f2a3 --- /dev/null +++ b/packages/uhk-usb/src/utils/is-right-half-communication-device.ts @@ -0,0 +1,12 @@ +import { Device } from 'node-hid'; +import { UHK_80_DEVICE } from 'uhk-common'; + +import { isUhkCommunicationUsage } from '../util.js'; + +export function isRightHalfCommunicationDevice(device: Device): boolean { + return UHK_80_DEVICE.keyboard.some(vidPid => { + return vidPid.vid === device.vendorId + && vidPid.pid == device.productId + && isUhkCommunicationUsage(device); + }); +} diff --git a/packages/uhk-usb/src/utils/is-serial-port-in-vid-pids.ts b/packages/uhk-usb/src/utils/is-serial-port-in-vid-pids.ts new file mode 100644 index 00000000000..62ed9eb85ec --- /dev/null +++ b/packages/uhk-usb/src/utils/is-serial-port-in-vid-pids.ts @@ -0,0 +1,9 @@ +import { PortInfo } from '@serialport/bindings-interface'; +import { VidPidPair } from 'uhk-common'; + +export function isSerialPortInVidPids(serialDevice: PortInfo, vidPids: VidPidPair[]): boolean { + return vidPids.some(vidPid => { + return vidPid.vid === Number.parseInt(serialDevice.vendorId, 16) + && vidPid.pid == Number.parseInt(serialDevice.productId, 16); + }); +} diff --git a/packages/uhk-usb/src/utils/is-uhk-device-connected.ts b/packages/uhk-usb/src/utils/is-uhk-device-connected.ts new file mode 100644 index 00000000000..7931847add7 --- /dev/null +++ b/packages/uhk-usb/src/utils/is-uhk-device-connected.ts @@ -0,0 +1,32 @@ +import { devicesAsync } from 'node-hid'; +import {SerialPort} from 'serialport'; +import { UhkDeviceProduct } from 'uhk-common'; + +import { isUhkCommunicationUsage } from '../util.js'; + +export async function isUhkDeviceConnected(uhkDevice: UhkDeviceProduct): Promise { + const hidDevices = await devicesAsync(); + + for (const device of hidDevices) { + if ((uhkDevice.keyboard.some(vidPid => vidPid.vid === device.vendorId && vidPid.pid === device.productId) + // TODO: remove duplication of isUhkCommunicationInterface + && isUhkCommunicationUsage(device) + ) + || uhkDevice.bootloader.some(vidPid => vidPid.vid === device.vendorId && vidPid.pid === device.productId) + ) { + return true; + } + } + + const serialDevices = await SerialPort.list(); + + for (const serialDevice of serialDevices) { + if (uhkDevice.keyboard.some(vidPid => Number.parseInt(serialDevice.vendorId, 16) === vidPid.vid && Number.parseInt(serialDevice.productId, 16) === vidPid.pid) + || uhkDevice.bootloader.some(vidPid => Number.parseInt(serialDevice.vendorId, 16) === vidPid.vid && Number.parseInt(serialDevice.productId, 16) === vidPid.pid) + ) { + return true; + } + } + + return false; +} diff --git a/packages/uhk-usb/src/utils/is-uhk-keyboard-connected.ts b/packages/uhk-usb/src/utils/is-uhk-keyboard-connected.ts new file mode 100644 index 00000000000..0b17d9e70db --- /dev/null +++ b/packages/uhk-usb/src/utils/is-uhk-keyboard-connected.ts @@ -0,0 +1,18 @@ +import { devices as HidDevices } from 'node-hid'; +import { UhkDeviceProduct } from 'uhk-common'; + +import { isUhkCommunicationUsage } from '../util.js'; + +export async function isUkhKeyboardConnected(uhkDevice: UhkDeviceProduct): Promise { + const hidDevices = HidDevices(); + + for (const device of hidDevices) { + if (uhkDevice.keyboard.some(vidPid => vidPid.vid === device.vendorId && vidPid.pid === device.productId) + && isUhkCommunicationUsage(device) + ) { + return true; + } + } + + return false; +} diff --git a/packages/uhk-usb/src/utils/snooze.ts b/packages/uhk-usb/src/utils/snooze.ts new file mode 100644 index 00000000000..0ce4060360f --- /dev/null +++ b/packages/uhk-usb/src/utils/snooze.ts @@ -0,0 +1 @@ +export const snooze = ms => new Promise(resolve => setTimeout(resolve, ms)); diff --git a/packages/uhk-usb/src/utils/validate-connected-devices.ts b/packages/uhk-usb/src/utils/validate-connected-devices.ts index cc89d53ff33..24947d2abc8 100644 --- a/packages/uhk-usb/src/utils/validate-connected-devices.ts +++ b/packages/uhk-usb/src/utils/validate-connected-devices.ts @@ -1,16 +1,20 @@ +import { DeviceIdentifier } from 'uhk-common'; import { getNumberOfConnectedDevices } from './get-number-of-connected-devices.js'; -export async function validateConnectedDevices(): Promise { - const devices = await getNumberOfConnectedDevices(); +export const MULTIPLE_DEVICE_CONNECTED_ERROR_MESSAGE = 'Multiple devices aren\'t supported yet, so please connect only a single device to proceed further.'; +export const CANT_FIND_CONNECTED_DEVICE_ERROR_MESSAGE = 'Can not find connected device'; + +export async function validateConnectedDevices(deviceIdentifier?: DeviceIdentifier): Promise { + const devices = await getNumberOfConnectedDevices(deviceIdentifier); switch (devices) { case 0: - throw new Error('Can not find connected device'); + throw new Error(CANT_FIND_CONNECTED_DEVICE_ERROR_MESSAGE); case 1: return; default: - throw new Error('Multiple devices aren\'t supported yet, so please connect only a single device to proceed further.'); + throw new Error(MULTIPLE_DEVICE_CONNECTED_ERROR_MESSAGE); } } diff --git a/packages/uhk-usb/src/utils/wait-for-uhk-device-connected.ts b/packages/uhk-usb/src/utils/wait-for-uhk-device-connected.ts new file mode 100644 index 00000000000..5fe9e4910f8 --- /dev/null +++ b/packages/uhk-usb/src/utils/wait-for-uhk-device-connected.ts @@ -0,0 +1,14 @@ +import { UhkDeviceProduct } from 'uhk-common'; + +import { isUhkDeviceConnected } from './is-uhk-device-connected.js'; +import { snooze } from './snooze.js'; + +export async function waitForUhkDeviceConnected(device: UhkDeviceProduct): Promise { + while (true) { + if (await isUhkDeviceConnected(device)) { + break; + } + + await snooze(250); + } +} diff --git a/packages/uhk-usb/src/utils/wait-until.ts b/packages/uhk-usb/src/utils/wait-until.ts new file mode 100644 index 00000000000..265ac3db8d6 --- /dev/null +++ b/packages/uhk-usb/src/utils/wait-until.ts @@ -0,0 +1,37 @@ +import {snooze} from './snooze.js'; + +export interface WaitUntilOptions { + /** + * If returns with true then start new iteration + */ + shouldWait: () => Promise; + /** + * maximum wait timeout in millisecond + */ + timeout?: number; + /** + * maximum wait timeout in millisecond + */ + timeoutErrorMessage?: string; + /** + * waits between 2 iteration in milliseconds + */ + wait: number; +} + +export async function waitUntil({ shouldWait, timeout = Number.MAX_SAFE_INTEGER, timeoutErrorMessage, wait }: WaitUntilOptions): Promise { + const startTime = new Date(); + + while (new Date().getTime() - startTime.getTime() < timeout) { + const shouldRun = await shouldWait(); + if (!shouldRun) { + return; + } + + if (wait) { + await snooze(wait); + } + } + + throw Error(timeoutErrorMessage || 'Wait until timed out.'); +} diff --git a/packages/uhk-web/.gitignore b/packages/uhk-web/.gitignore index 98a47fa1885..d7944acc807 100644 --- a/packages/uhk-web/.gitignore +++ b/packages/uhk-web/.gitignore @@ -1 +1,2 @@ .angular +src/app/services/user-config.json diff --git a/packages/uhk-web/package.json b/packages/uhk-web/package.json index f9dd2533807..f180e4a45a6 100644 --- a/packages/uhk-web/package.json +++ b/packages/uhk-web/package.json @@ -5,7 +5,8 @@ "clean": "rimraf ./node_modules ./.angular", "ng": "ng", "start": "ng serve", - "build": "run-s -sn build:renderer", + "build": "run-s -sn build:user-config build:renderer", + "build:user-config": "node ./scripts/generate-user-configs.mjs", "build:web": "ng build --configuration=production --project=uhk-web", "build:renderer": "ng build --configuration=production --project=uhk-renderer", "server:renderer": "ng build --project=uhk-renderer --watch", diff --git a/packages/uhk-web/scripts/generate-user-configs.mjs b/packages/uhk-web/scripts/generate-user-configs.mjs new file mode 100644 index 00000000000..2cb5ae3f455 --- /dev/null +++ b/packages/uhk-web/scripts/generate-user-configs.mjs @@ -0,0 +1,39 @@ +import fs from 'node:fs/promises'; +import path from 'node:path'; +import { + LayerName, + UHK_60_LEFT_MAX_KEY_ACTION_COUNT, + UHK_60_RIGHT_MAX_KEY_ACTION_COUNT, + UserConfiguration, +} from "uhk-common"; + +const uhk80UserConfigPath = path.join(import.meta.dirname, '../src/app/services/user-config-80.json'); +const uhk80UserConfigJson = JSON.parse(await fs.readFile(uhk80UserConfigPath, { encoding: 'utf8' })); +const uhk60UserConfig = new UserConfiguration().fromJsonObject(uhk80UserConfigJson); + +for (const keymap of uhk60UserConfig.keymaps) { + const layers = []; + + for (const layer of keymap.layers) { + if (layer.id === LayerName.fn2) { + continue; + } + + layers.push(layer); + for (const module of layer.modules) { + // right half + if (module.id === 0) { + module.keyActions = module.keyActions.slice(0, UHK_60_RIGHT_MAX_KEY_ACTION_COUNT) + } + // left half + else if (module.id === 1) { + module.keyActions = module.keyActions.slice(0, UHK_60_LEFT_MAX_KEY_ACTION_COUNT) + } + } + } + + keymap.layers = layers; +} + +const uhk60UserConfigPath = path.join(import.meta.dirname, '../src/app/services/user-config.json'); +await fs.writeFile(uhk60UserConfigPath, JSON.stringify(uhk60UserConfig.toJsonObject(), null, 2), { encoding: 'utf8' }); diff --git a/packages/uhk-web/scripts/migrate-uhk80-user-config.mjs b/packages/uhk-web/scripts/migrate-uhk80-user-config.mjs new file mode 100644 index 00000000000..0e287bbd48c --- /dev/null +++ b/packages/uhk-web/scripts/migrate-uhk80-user-config.mjs @@ -0,0 +1,136 @@ +import fs from 'node:fs/promises'; +import process from 'node:process'; +import { + KeyActionHelper, + Module, + UserConfiguration, +} from "uhk-common"; + +const sourceFile = process.argv[2] +const destinationFile = process.argv[3] + +const sourceFileJson = JSON.parse(await fs.readFile(sourceFile, { encoding: 'utf8' })); +const userConfig = new UserConfiguration().fromJsonObject(sourceFileJson); + +for (const keymap of userConfig.keymaps) { + for (const layer of keymap.layers) { + layer.modules = layer.modules.map(originalModule => { + // right half + if (originalModule.id === 0) { + const module = new Module(); + module.id = originalModule.id; + + module.keyActions[0] = KeyActionHelper.fromKeyAction(originalModule.keyActions[0]); + module.keyActions[1] = KeyActionHelper.fromKeyAction(originalModule.keyActions[1]); + module.keyActions[2] = KeyActionHelper.fromKeyAction(originalModule.keyActions[2]); + module.keyActions[3] = KeyActionHelper.fromKeyAction(originalModule.keyActions[3]); + module.keyActions[4] = KeyActionHelper.fromKeyAction(originalModule.keyActions[4]); + module.keyActions[5] = KeyActionHelper.fromKeyAction(originalModule.keyActions[5]); + module.keyActions[6] = KeyActionHelper.fromKeyAction(originalModule.keyActions[6]); + module.keyActions[7] = KeyActionHelper.fromKeyAction(originalModule.keyActions[14]); + module.keyActions[8] = KeyActionHelper.fromKeyAction(originalModule.keyActions[7]); + module.keyActions[9] = KeyActionHelper.fromKeyAction(originalModule.keyActions[8]); + module.keyActions[10] = KeyActionHelper.fromKeyAction(originalModule.keyActions[9]); + module.keyActions[11] = KeyActionHelper.fromKeyAction(originalModule.keyActions[10]); + module.keyActions[12] = KeyActionHelper.fromKeyAction(originalModule.keyActions[11]); + module.keyActions[13] = KeyActionHelper.fromKeyAction(originalModule.keyActions[12]); + module.keyActions[14] = KeyActionHelper.fromKeyAction(originalModule.keyActions[13]); + module.keyActions[15] = KeyActionHelper.fromKeyAction(originalModule.keyActions[21]); + module.keyActions[16] = KeyActionHelper.fromKeyAction(originalModule.keyActions[15]); + module.keyActions[17] = KeyActionHelper.fromKeyAction(originalModule.keyActions[16]); + module.keyActions[18] = KeyActionHelper.fromKeyAction(originalModule.keyActions[17]); + module.keyActions[19] = KeyActionHelper.fromKeyAction(originalModule.keyActions[18]); + module.keyActions[20] = KeyActionHelper.fromKeyAction(originalModule.keyActions[19]); + module.keyActions[21] = KeyActionHelper.fromKeyAction(originalModule.keyActions[20]); + module.keyActions[22] = KeyActionHelper.fromKeyAction(originalModule.keyActions[22]); + module.keyActions[23] = KeyActionHelper.fromKeyAction(originalModule.keyActions[23]); + module.keyActions[24] = KeyActionHelper.fromKeyAction(originalModule.keyActions[24]); + module.keyActions[25] = KeyActionHelper.fromKeyAction(originalModule.keyActions[25]); + module.keyActions[26] = KeyActionHelper.fromKeyAction(originalModule.keyActions[26]); + module.keyActions[27] = KeyActionHelper.fromKeyAction(originalModule.keyActions[27]); + module.keyActions[28] = KeyActionHelper.fromKeyAction(originalModule.keyActions[29]); + module.keyActions[29] = KeyActionHelper.fromKeyAction(originalModule.keyActions[31]); + module.keyActions[30] = KeyActionHelper.fromKeyAction(originalModule.keyActions[32]); + module.keyActions[31] = KeyActionHelper.fromKeyAction(originalModule.keyActions[33]); + module.keyActions[32] = KeyActionHelper.fromKeyAction(originalModule.keyActions[34]); + module.keyActions[33] = KeyActionHelper.fromKeyAction(originalModule.keyActions[30]); + module.keyActions[34] = KeyActionHelper.fromKeyAction(originalModule.keyActions[56]); + module.keyActions[35] = KeyActionHelper.fromKeyAction(originalModule.keyActions[35]); + module.keyActions[36] = KeyActionHelper.fromKeyAction(originalModule.keyActions[36]); + module.keyActions[37] = KeyActionHelper.fromKeyAction(originalModule.keyActions[37]); + module.keyActions[38] = KeyActionHelper.fromKeyAction(originalModule.keyActions[38]); + module.keyActions[39] = KeyActionHelper.fromKeyAction(originalModule.keyActions[39]); + module.keyActions[40] = KeyActionHelper.fromKeyAction(originalModule.keyActions[40]); + module.keyActions[41] = KeyActionHelper.fromKeyAction(originalModule.keyActions[41]); + module.keyActions[42] = KeyActionHelper.fromKeyAction(originalModule.keyActions[42]); + module.keyActions[43] = KeyActionHelper.fromKeyAction(originalModule.keyActions[43]); + module.keyActions[44] = KeyActionHelper.fromKeyAction(originalModule.keyActions[44]); + module.keyActions[45] = KeyActionHelper.fromKeyAction(originalModule.keyActions[45]); + module.keyActions[46] = KeyActionHelper.fromKeyAction(originalModule.keyActions[46]); + module.keyActions[47] = KeyActionHelper.fromKeyAction(originalModule.keyActions[47]); + module.keyActions[48] = KeyActionHelper.fromKeyAction(originalModule.keyActions[48]); + module.keyActions[49] = KeyActionHelper.fromKeyAction(originalModule.keyActions[49]); + module.keyActions[50] = KeyActionHelper.fromKeyAction(originalModule.keyActions[50]); + module.keyActions[51] = KeyActionHelper.fromKeyAction(originalModule.keyActions[51]); + module.keyActions[52] = KeyActionHelper.fromKeyAction(originalModule.keyActions[52]); + module.keyActions[53] = KeyActionHelper.fromKeyAction(originalModule.keyActions[53]); + module.keyActions[54] = KeyActionHelper.fromKeyAction(originalModule.keyActions[54]); + module.keyActions[55] = KeyActionHelper.fromKeyAction(originalModule.keyActions[55]); + + return module; + } + // left half + else if (originalModule.id === 1) { + const module = new Module(); + module.id = originalModule.id; + + module.keyActions[0] = KeyActionHelper.fromKeyAction(originalModule.keyActions[0]); + module.keyActions[1] = KeyActionHelper.fromKeyAction(originalModule.keyActions[1]); + module.keyActions[2] = KeyActionHelper.fromKeyAction(originalModule.keyActions[2]); + module.keyActions[3] = KeyActionHelper.fromKeyAction(originalModule.keyActions[3]); + module.keyActions[4] = KeyActionHelper.fromKeyAction(originalModule.keyActions[4]); + module.keyActions[5] = KeyActionHelper.fromKeyAction(originalModule.keyActions[5]); + module.keyActions[6] = KeyActionHelper.fromKeyAction(originalModule.keyActions[6]); + module.keyActions[7] = KeyActionHelper.fromKeyAction(originalModule.keyActions[7]); + module.keyActions[8] = KeyActionHelper.fromKeyAction(originalModule.keyActions[8]); + module.keyActions[9] = KeyActionHelper.fromKeyAction(originalModule.keyActions[9]); + module.keyActions[10] = KeyActionHelper.fromKeyAction(originalModule.keyActions[10]); + module.keyActions[11] = KeyActionHelper.fromKeyAction(originalModule.keyActions[11]); + module.keyActions[12] = KeyActionHelper.fromKeyAction(originalModule.keyActions[13]); + module.keyActions[13] = KeyActionHelper.fromKeyAction(originalModule.keyActions[14]); + module.keyActions[14] = KeyActionHelper.fromKeyAction(originalModule.keyActions[15]); + module.keyActions[15] = KeyActionHelper.fromKeyAction(originalModule.keyActions[16]); + module.keyActions[16] = KeyActionHelper.fromKeyAction(originalModule.keyActions[17]); + module.keyActions[17] = KeyActionHelper.fromKeyAction(originalModule.keyActions[18]); + module.keyActions[18] = KeyActionHelper.fromKeyAction(originalModule.keyActions[20]); + module.keyActions[19] = KeyActionHelper.fromKeyAction(originalModule.keyActions[21]); + module.keyActions[20] = KeyActionHelper.fromKeyAction(originalModule.keyActions[22]); + module.keyActions[21] = KeyActionHelper.fromKeyAction(originalModule.keyActions[23]); + module.keyActions[22] = KeyActionHelper.fromKeyAction(originalModule.keyActions[24]); + module.keyActions[23] = KeyActionHelper.fromKeyAction(originalModule.keyActions[25]); + module.keyActions[24] = KeyActionHelper.fromKeyAction(originalModule.keyActions[26]); + module.keyActions[25] = KeyActionHelper.fromKeyAction(originalModule.keyActions[27]); + module.keyActions[26] = KeyActionHelper.fromKeyAction(originalModule.keyActions[28]); + module.keyActions[27] = KeyActionHelper.fromKeyAction(originalModule.keyActions[29]); + module.keyActions[28] = KeyActionHelper.fromKeyAction(originalModule.keyActions[30]); + module.keyActions[29] = KeyActionHelper.fromKeyAction(originalModule.keyActions[31]); + module.keyActions[30] = KeyActionHelper.fromKeyAction(originalModule.keyActions[33]); + module.keyActions[31] = KeyActionHelper.fromKeyAction(originalModule.keyActions[32]); + module.keyActions[32] = KeyActionHelper.fromKeyAction(originalModule.keyActions[41]); + module.keyActions[33] = KeyActionHelper.fromKeyAction(originalModule.keyActions[34]); + module.keyActions[34] = KeyActionHelper.fromKeyAction(originalModule.keyActions[35]); + module.keyActions[35] = KeyActionHelper.fromKeyAction(originalModule.keyActions[36]); + module.keyActions[36] = KeyActionHelper.fromKeyAction(originalModule.keyActions[37]); + module.keyActions[37] = KeyActionHelper.fromKeyAction(originalModule.keyActions[38]); + module.keyActions[38] = KeyActionHelper.fromKeyAction(originalModule.keyActions[39]); + module.keyActions[39] = KeyActionHelper.fromKeyAction(originalModule.keyActions[40]); + + return module; + } + + return originalModule; + }) + } +} + +await fs.writeFile(destinationFile, JSON.stringify(userConfig.toJsonObject(), null, 2), { encoding: 'utf8' }); diff --git a/packages/uhk-web/src/app/app.component.html b/packages/uhk-web/src/app/app.component.html index 4faa37a184a..fc5334b0c8d 100644 --- a/packages/uhk-web/src/app/app.component.html +++ b/packages/uhk-web/src/app/app.component.html @@ -1,15 +1,21 @@
- - + + + + diff --git a/packages/uhk-web/src/app/app.component.scss b/packages/uhk-web/src/app/app.component.scss index e82afc2d8f2..8a53ba04d08 100644 --- a/packages/uhk-web/src/app/app.component.scss +++ b/packages/uhk-web/src/app/app.component.scss @@ -28,6 +28,7 @@ } } +dongle-pairing-panel, firmware-upgrade-panel, app-update-available { height: $main-content-top-margin-on-update; diff --git a/packages/uhk-web/src/app/app.component.ts b/packages/uhk-web/src/app/app.component.ts index ca8a7b8f7ba..497eb392ab6 100644 --- a/packages/uhk-web/src/app/app.component.ts +++ b/packages/uhk-web/src/app/app.component.ts @@ -9,6 +9,7 @@ import { DoNotUpdateAppAction, UpdateAppAction } from './store/actions/app-updat import { EnableUsbStackTestAction, UpdateFirmwareAction } from './store/actions/device'; import { AppState, + getDonglePairingState, getErrorPanelHeight, getShowAppUpdateAvailable, getParsedStatusBuffer, @@ -21,10 +22,11 @@ import { getOutOfSpaceWaringData, getShowFirmwareUpgradePanel } from './store'; +import { StartDonglePairingAction } from './store/actions/dongle-pairing.action'; import { ProgressButtonState } from './store/reducers/progress-button-state'; import { UpdateInfo } from './models/update-info'; import { ErrorPanelSizeChangedAction, KeyUpAction, KeyDownAction } from './store/actions/app'; -import { OutOfSpaceWarningData } from './models'; +import { DonglePairingState, OutOfSpaceWarningData } from './models'; import { filter } from 'rxjs/operators'; import { SecondSideMenuContainerComponent } from './components/side-menu'; @@ -90,6 +92,7 @@ import { SecondSideMenuContainerComponent } from './components/side-menu'; export class MainAppComponent implements OnDestroy { @ViewChild(SecondSideMenuContainerComponent) secondarySideMenuContainer: SecondSideMenuContainerComponent; + donglePairingState: DonglePairingState; showFirmwareUpgradePanel: boolean; showUpdateAvailable: boolean; updateInfo$: Observable; @@ -104,6 +107,7 @@ export class MainAppComponent implements OnDestroy { bottom: 0 }; statusBuffer: string; + private donglePairingStateSubscription: Subscription; private errorPanelHeightSubscription: Subscription; private keypressCapturing: boolean; private saveToKeyboardStateSubscription: Subscription; @@ -119,6 +123,11 @@ export class MainAppComponent implements OnDestroy { private route: ActivatedRoute, private router: Router, private cdRef: ChangeDetectorRef) { + this.donglePairingStateSubscription = store.select(getDonglePairingState) + .subscribe(data => { + this.donglePairingState = data; + this.cdRef.markForCheck(); + }); this.errorPanelHeightSubscription = store.select(getErrorPanelHeight) .subscribe(height => { this.splitSizes = { @@ -133,7 +142,10 @@ export class MainAppComponent implements OnDestroy { this.cdRef.markForCheck(); }); this.showUpdateAvailableSubscription = store.select(getShowAppUpdateAvailable) - .subscribe(data => this.showUpdateAvailable = data); + .subscribe(data => { + this.showUpdateAvailable = data; + this.cdRef.markForCheck(); + }); this.updateInfo$ = store.select(getUpdateInfo); this.deviceConfigurationLoaded$ = store.select(deviceConfigurationLoaded); this.runningInElectron$ = store.select(runningInElectron); @@ -179,6 +191,7 @@ export class MainAppComponent implements OnDestroy { } ngOnDestroy(): void { + this.donglePairingStateSubscription.unsubscribe(); this.errorPanelHeightSubscription.unsubscribe(); this.saveToKeyboardStateSubscription.unsubscribe(); this.keypressCapturingSubscription.unsubscribe(); @@ -238,10 +251,14 @@ export class MainAppComponent implements OnDestroy { } isTopNotificationPanelVisible(): boolean { - return this.showFirmwareUpgradePanel || this.showUpdateAvailable; + return this.showFirmwareUpgradePanel || this.showUpdateAvailable || this.donglePairingState?.showDonglePairingPanel; } updateFirmware(): void { this.store.dispatch(new UpdateFirmwareAction(false)); } + + startDonglePairing(): void { + this.store.dispatch(new StartDonglePairingAction()); + } } diff --git a/packages/uhk-web/src/app/app.routes.ts b/packages/uhk-web/src/app/app.routes.ts index c6998d3725c..93faaf902c8 100644 --- a/packages/uhk-web/src/app/app.routes.ts +++ b/packages/uhk-web/src/app/app.routes.ts @@ -22,6 +22,7 @@ import { RecoveryModeComponent } from './components/device'; import { UhkDeviceBootloaderNotActiveGuard } from './services/uhk-device-bootloader-not-active.guard'; import { AgentUpdateNeededGuard } from './services/agent-update-needed-guard.service'; import { UpdateFirmwarePageComponent } from './pages/update-firmware.page'; +import { UhkUdevGuard } from './services/uhk-device-udev.guard'; const appRoutes: Routes = [ { @@ -59,7 +60,7 @@ const appRoutes: Routes = [ { path: '', component: MainPage, - canActivate: [UhkDeviceDisconnectedGuard, UhkDeviceLoadingGuard, UhkMultiDeviceGuard, AgentUpdateNeededGuard], + canActivate: [UhkDeviceDisconnectedGuard, UhkDeviceLoadingGuard, UhkMultiDeviceGuard, AgentUpdateNeededGuard, UhkUdevGuard], children: [ ...deviceRoutes, ...keymapRoutes, diff --git a/packages/uhk-web/src/app/components/auto-grow-input/auto-grow-input.component.ts b/packages/uhk-web/src/app/components/auto-grow-input/auto-grow-input.component.ts index 9de07a81efb..6687ffad601 100644 --- a/packages/uhk-web/src/app/components/auto-grow-input/auto-grow-input.component.ts +++ b/packages/uhk-web/src/app/components/auto-grow-input/auto-grow-input.component.ts @@ -31,9 +31,10 @@ const noop = (_: any) => { styleUrls: ['./auto-grow-input.component.scss'] }) export class AutoGrowInputComponent implements ControlValueAccessor, AfterViewInit, OnChanges { - @Input() maxParentWidthPercent; - @Input() maxParentWidthOffset; - @Input() minWidth: number = 100; + @Input() alignToParentWidth = true; // If false then element can be wider than the parent + @Input() maxParentWidthPercent: number; + @Input() maxParentWidthOffset: number; + @Input() minWidth: number = 10; @Input() css: string; @Input() selectAfterInit = false; @@ -147,7 +148,9 @@ export class AutoGrowInputComponent implements ControlValueAccessor, AfterViewIn calculateTextWidth(text: string): void { const htmlInput = this.inputControl.nativeElement as HTMLInputElement; - let maxWidth = htmlInput.parentElement.parentElement.offsetWidth; + let maxWidth = this.alignToParentWidth + ? htmlInput.parentElement.parentElement.offsetWidth + : Number.MAX_SAFE_INTEGER; if (this.maxParentWidthPercent) { maxWidth *= this.maxParentWidthPercent; @@ -162,6 +165,6 @@ export class AutoGrowInputComponent implements ControlValueAccessor, AfterViewIn textWidth += util.getContentWidth(window.getComputedStyle(htmlInput), 'W') * 1.1; } - this._renderer.setStyle(htmlInput, 'width', Math.min(maxWidth, textWidth) + 'px'); + this._renderer.setStyle(htmlInput, 'width', Math.max(this.minWidth, Math.min(maxWidth, textWidth)) + 'px'); } } diff --git a/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.html b/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.html index ceeb808af16..dcf46762e08 100644 --- a/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.html +++ b/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.html @@ -12,7 +12,7 @@

+
+ +
+
@@ -47,7 +57,7 @@

diff --git a/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.ts b/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.ts index 70e8e64fa70..fc5497b4cfc 100644 --- a/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.ts +++ b/packages/uhk-web/src/app/components/device/advanced-settings/advanced-settings.page.component.ts @@ -10,10 +10,20 @@ import { import { faCog } from '@fortawesome/free-solid-svg-icons'; import { Store } from '@ngrx/store'; import { Observable, Subscription } from 'rxjs'; -import { KeyboardLayout } from 'uhk-common'; +import { KeyboardLayout, UHK_80_DEVICE } from 'uhk-common'; -import { ToggleI2cDebuggingAction, ToggleI2cDebuggingRingBellAction } from '../../../store/actions/advance-settings.action'; -import { advanceSettingsState, AppState, getKeyboardLayout, isKeyboardLayoutChanging } from '../../../store'; +import { + ToggleI2cDebuggingAction, + ToggleI2cDebuggingRingBellAction, + StartLeftHalfPairingAction, +} from '../../../store/actions/advance-settings.action'; +import { + advanceSettingsState, + AppState, + getConnectedDevice, + getKeyboardLayout, + isKeyboardLayoutChanging, +} from '../../../store'; import { ChangeKeyboardLayoutAction } from '../../../store/actions/device'; import { initialState, State } from '../../../store/reducers/advanced-settings.reducer'; @@ -31,6 +41,7 @@ export class AdvancedSettingsPageComponent implements OnInit, OnDestroy { @ViewChild('audioPlayer', {static: true,}) audioPlayer: ElementRef; isKeyboardLayoutChanging$: Observable; + isHalvesPairingAllowed: boolean; keyboardLayout: KeyboardLayout; keyboardLayoutEnum = KeyboardLayout; @@ -38,6 +49,7 @@ export class AdvancedSettingsPageComponent implements OnInit, OnDestroy { private i2cErrorsLength = 0; private stateSubscription: Subscription; + private connectedDeviceSubscription: Subscription; private keyboardLayoutSubscription: Subscription; constructor(private store: Store, @@ -47,6 +59,7 @@ export class AdvancedSettingsPageComponent implements OnInit, OnDestroy { } ngOnDestroy(): void { + this.connectedDeviceSubscription?.unsubscribe(); if(this.keyboardLayoutSubscription) { this.keyboardLayoutSubscription.unsubscribe(); } @@ -57,6 +70,11 @@ export class AdvancedSettingsPageComponent implements OnInit, OnDestroy { } ngOnInit(): void { + this.connectedDeviceSubscription = this.store.select(getConnectedDevice) + .subscribe(connectedDevice => { + this.isHalvesPairingAllowed = connectedDevice?.id === UHK_80_DEVICE.id; + this.cdRef.detectChanges(); + }); this.keyboardLayoutSubscription = this.store.select(getKeyboardLayout) .subscribe(layout => { this.keyboardLayout = layout; @@ -95,4 +113,8 @@ export class AdvancedSettingsPageComponent implements OnInit, OnDestroy { onToggleI2cDebugRingBell(): void { this.store.dispatch(new ToggleI2cDebuggingRingBellAction()); } + + startLeftHalfPairing(): void { + this.store.dispatch(new StartLeftHalfPairingAction()); + } } diff --git a/packages/uhk-web/src/app/components/device/device.routes.ts b/packages/uhk-web/src/app/components/device/device.routes.ts index bf63fdac984..a5f31c13c06 100644 --- a/packages/uhk-web/src/app/components/device/device.routes.ts +++ b/packages/uhk-web/src/app/components/device/device.routes.ts @@ -6,6 +6,7 @@ import { DeviceFirmwareComponent } from './firmware/device-firmware.component'; import { MouseSpeedComponent } from './mouse-speed/mouse-speed.component'; import { LEDSettingsComponent } from './led-settings/led-settings.component'; import { RestoreConfigurationComponent } from './restore-configuration/restore-configuration.component'; +import { HostConnectionsComponent } from './host-connections/host-connections.component'; import { TypingBehaviorPage } from './typing-behavior-page/typing-behavior-page.component'; export const deviceRoutes: Routes = [ @@ -41,6 +42,10 @@ export const deviceRoutes: Routes = [ path: 'restore-user-configuration', component: RestoreConfigurationComponent }, + { + path: 'host-connections', + component: HostConnectionsComponent + }, { path: 'typing-behavior', component: TypingBehaviorPage diff --git a/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.html b/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.html new file mode 100644 index 00000000000..373f2f77ec8 --- /dev/null +++ b/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.html @@ -0,0 +1,17 @@ + diff --git a/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.scss b/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.scss new file mode 100644 index 00000000000..86c049dbdf1 --- /dev/null +++ b/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.scss @@ -0,0 +1,21 @@ +@import '../../../../styles/variables'; + +.dongle-pairing-panel-wrapper { + display: flex; + justify-content: center; + align-items: center; + height: $main-content-top-margin-on-update; + margin: 0; + padding-top: 5px; + padding-bottom: 5px; + + background-color: var(--color-firmware-upgrade-panel-bg); + color: var(--color-firmware-upgrade-panel-text); + border-radius: 0; + border-width: 0; + + a { + color: var(--color-firmware-upgrade-panel-text); + text-decoration: underline; + } +} diff --git a/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.ts b/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.ts new file mode 100644 index 00000000000..36f468406f7 --- /dev/null +++ b/packages/uhk-web/src/app/components/device/dongle-pairing-panel/dongle-pairing-panel.component.ts @@ -0,0 +1,19 @@ +import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output } from '@angular/core'; +import { faSpinner } from '@fortawesome/free-solid-svg-icons'; + +import { DonglePairingStates } from '../../../models'; + +@Component({ + selector: 'dongle-pairing-panel', + changeDetection: ChangeDetectionStrategy.OnPush, + templateUrl: './dongle-pairing-panel.component.html', + styleUrls: ['./dongle-pairing-panel.component.scss'] +}) +export class DonglePairingPanelComponent { + @Input() state: DonglePairingStates; + + @Output() pairDongle = new EventEmitter(); + + protected readonly DonglePairingStates = DonglePairingStates; + protected readonly faSpinner = faSpinner; +} diff --git a/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.html b/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.html new file mode 100644 index 00000000000..f8a9bb857a2 --- /dev/null +++ b/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.html @@ -0,0 +1,72 @@ +

+ + Connections +

+ + + + + + + + + + + + + + + + + + + + + + + + +
+ + Type + + Address + + Name + + Switchover + +
+ + + {{hostConnection.type | hostConnectionTypeLabelPipe}} + + {{ hostConnection.address || '—' }} + + + + + + +
diff --git a/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.scss b/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.scss new file mode 100644 index 00000000000..c17991040f4 --- /dev/null +++ b/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.scss @@ -0,0 +1,45 @@ +table { + th, + td { + padding: 0.5rem; + border-bottom: 1px solid var(--color-sidemenu-border); + + button.btn { + border: none; + padding: 0; + } + + .movable { + &:hover { + cursor: move; + } + } + } +} + +// Dragula styles +.gu { + &-mirror { + position: fixed; + margin: 0; + z-index: 9999; + opacity: 0.8; + + td { + padding: 0.5rem; + } + } + + &-hide { + display: none; + } + + &-unselectable { + user-select: none; + } + + &-transit { + opacity: 0.2; + background: var(--color-macro-bg); + } +} diff --git a/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.ts b/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.ts new file mode 100644 index 00000000000..243dfa8edfa --- /dev/null +++ b/packages/uhk-web/src/app/components/device/host-connections/host-connections.component.ts @@ -0,0 +1,98 @@ +import { ChangeDetectorRef } from '@angular/core'; +import { Component, OnDestroy, OnInit } from '@angular/core'; +import { DragulaService } from '@ert78gb/ng2-dragula'; +import { faCircleNodes, faTrash } from '@fortawesome/free-solid-svg-icons'; +import { Store } from '@ngrx/store'; +import { Subscription } from 'rxjs'; +import { HostConnection } from 'uhk-common'; + +import { DeleteHostConnectionAction } from '../../../store/actions/dongle-pairing.action'; +import { + RenameHostConnectionAction, + ReorderHostConnectionsAction, + SetHostConnectionSwitchoverAction, +} from '../../../store/actions/user-config'; +import { AppState, getHostConnections, isDonglePairing } from '../../../store/index'; + +@Component({ + selector: 'host-connections', + templateUrl: './host-connections.component.html', + styleUrls: ['./host-connections.component.scss'], + host: { + 'class': 'container-fluid full-screen-component' + }, +}) +export class HostConnectionsComponent implements OnInit, OnDestroy { + faCircleNodes = faCircleNodes; + faTrash = faTrash; + + hostConnections: HostConnection[] = [] as HostConnection[]; + isDonglePairing: boolean; + dragAndDropGroup = 'HOST_CONNECTION'; + + private hostConnectionsSubscription: Subscription; + private isDonglePairingSubscription: Subscription; + + constructor(private dragulaService: DragulaService, + private cdRef: ChangeDetectorRef, + private store: Store) { + + dragulaService.createGroup(this.dragAndDropGroup, { + moves: (el, container, handle) => { + if (!handle) { + return false; + } + + let element = handle; + while (element) { + if (element.classList.contains('movable')) { + return true; + } + element = element.parentElement; + } + + return false; + } + }); + } + + ngOnInit(): void { + this.hostConnectionsSubscription = this.store.select(getHostConnections) + .subscribe(hostConnections => { + this.hostConnections = hostConnections; + this.cdRef.markForCheck(); + }); + this.isDonglePairingSubscription = this.store.select(isDonglePairing) + .subscribe(isDonglePairing => { + this.isDonglePairing = isDonglePairing; + this.cdRef.markForCheck(); + }); + } + + ngOnDestroy(): void { + this.dragulaService.destroy(this.dragAndDropGroup); + if(this.hostConnectionsSubscription) { + this.hostConnectionsSubscription.unsubscribe(); + } + this.isDonglePairingSubscription?.unsubscribe(); + } + + deleteHostConnection(index: number, hostConnection: HostConnection): void { + this.store.dispatch(new DeleteHostConnectionAction({index, hostConnection})); + } + + renameHostConnection(index: number, newName: string): void { + this.store.dispatch(new RenameHostConnectionAction({ + index, + newName, + })); + } + + hostConnectionsReordered(deviceTargets: HostConnection[]): void { + this.store.dispatch(new ReorderHostConnectionsAction(deviceTargets)); + } + + setHostConnectionSwitchover(index: number, checked: boolean): void { + this.store.dispatch(new SetHostConnectionSwitchoverAction({index, checked})); + } +} diff --git a/packages/uhk-web/src/app/components/device/index.ts b/packages/uhk-web/src/app/components/device/index.ts index 231f575a02c..bbf44942a38 100644 --- a/packages/uhk-web/src/app/components/device/index.ts +++ b/packages/uhk-web/src/app/components/device/index.ts @@ -6,5 +6,6 @@ export * from './led-settings/functional-backlight-color.component'; export * from './led-settings/led-settings.component'; export * from './restore-configuration/restore-configuration.component'; export * from './recovery-mode/recovery-mode.component'; +export * from './host-connections/host-connections.component'; export * from './typing-behavior-page/typing-behavior-page.component'; export * from './device.routes'; diff --git a/packages/uhk-web/src/app/components/device/led-settings/fade-timeout-slider.component.html b/packages/uhk-web/src/app/components/device/led-settings/fade-timeout-slider.component.html index 8560b08ed1b..78096340ccd 100644 --- a/packages/uhk-web/src/app/components/device/led-settings/fade-timeout-slider.component.html +++ b/packages/uhk-web/src/app/components/device/led-settings/fade-timeout-slider.component.html @@ -1,5 +1,4 @@

LED brightness

-
- -
- -
- -
- -
- +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + USB-powered + + Battery-powered +
+ Key backlight brightness + + + + +
+ Key backlight timeout + + + + +
+ LED display brightness + + + + +
+ LED display timeout + + + + +
@@ -71,12 +140,3 @@

Functional backlighting colors

- -

LED fade timeout

- -
-
- -
-
diff --git a/packages/uhk-web/src/app/components/device/led-settings/led-settings.component.ts b/packages/uhk-web/src/app/components/device/led-settings/led-settings.component.ts index 7d9ee560986..5334ee91a93 100644 --- a/packages/uhk-web/src/app/components/device/led-settings/led-settings.component.ts +++ b/packages/uhk-web/src/app/components/device/led-settings/led-settings.component.ts @@ -1,14 +1,14 @@ import { ChangeDetectorRef, Component, OnInit, OnDestroy } from '@angular/core'; import { Store } from '@ngrx/store'; import { BacklightingOption } from '../../../models/index'; -import { AppState, getBacklightingOptions, getUserConfiguration } from '../../../store'; +import { AppState, getBacklightingOptions, getConnectedDevice, getUserConfiguration } from '../../../store'; import { SetUserConfigurationRgbValueAction, SetUserConfigurationValueAction } from '../../../store/actions/user-config'; import { Observable, Subscription } from 'rxjs'; import { faSlidersH } from '@fortawesome/free-solid-svg-icons'; -import { BacklightingMode, RgbColorInterface, UserConfiguration } from 'uhk-common'; +import { BacklightingMode, RgbColorInterface, UHK_80_DEVICE, UserConfiguration } from 'uhk-common'; @Component({ selector: 'device-led-settings', @@ -30,16 +30,23 @@ export class LEDSettingsComponent implements OnInit, OnDestroy { backlightingMacroColor: RgbColorInterface; backlightingOptions: Array; - ledsFadeTimeout = 0; - public iconsAndLayerTextsBrightness: number = 0; - public alphanumericSegmentsBrightness: number = 0; - public keyBacklightBrightness: number = 0; + displayBrightness = 255; + displayBrightnessBattery = 255; + keyBacklightBrightness = 255; + keyBacklightBrightnessBattery = 255; + displayFadeOutTimeout = 0; + displayFadeOutBatteryTimeout = 0; + keyBacklightFadeOutTimeout = 0; + keyBacklightFadeOutBatteryTimeout = 0; + faSlidersH = faSlidersH; + showBatteryPoweredColumn = false; private userConfig$: Observable; private userConfigSubscription: Subscription; private backlightingOptionsSubscription: Subscription; + private connectedDeviceSubscription: Subscription; constructor(private store: Store, private cdRef: ChangeDetectorRef) {} @@ -47,10 +54,15 @@ export class LEDSettingsComponent implements OnInit, OnDestroy { ngOnInit() { this.userConfig$ = this.store.select(getUserConfiguration); this.userConfigSubscription = this.userConfig$.subscribe(config => { - this.iconsAndLayerTextsBrightness = config.iconsAndLayerTextsBrightness; - this.alphanumericSegmentsBrightness = config.alphanumericSegmentsBrightness; + this.displayBrightness = config.displayBrightness; + this.displayBrightnessBattery = config.displayBrightnessBattery; this.keyBacklightBrightness = config.keyBacklightBrightness; - this.ledsFadeTimeout = config.ledsFadeTimeout; + this.keyBacklightBrightnessBattery = config.keyBacklightBrightnessBattery; + this.displayFadeOutTimeout = config.displayFadeOutTimeout; + this.displayFadeOutBatteryTimeout = config.displayFadeOutBatteryTimeout; + this.keyBacklightFadeOutTimeout = config.keyBacklightFadeOutTimeout; + this.keyBacklightFadeOutBatteryTimeout = config.keyBacklightFadeOutBatteryTimeout; + this.backlightingMode = config.backlightingMode; this.backlightingNoneActionColor = config.backlightingNoneActionColor.toJsonObject(); this.backlightingScancodeColor = config.backlightingScancodeColor.toJsonObject(); @@ -67,9 +79,15 @@ export class LEDSettingsComponent implements OnInit, OnDestroy { this.backlightingOptions = options; this.cdRef.detectChanges(); }); + this.connectedDeviceSubscription = this.store.select(getConnectedDevice) + .subscribe(connectedDevice => { + this.showBatteryPoweredColumn = connectedDevice?.id === UHK_80_DEVICE.id; + this.cdRef.detectChanges(); + }); } ngOnDestroy() { + this.connectedDeviceSubscription?.unsubscribe(); this.userConfigSubscription.unsubscribe(); if (this.backlightingOptionsSubscription) { this.backlightingOptionsSubscription.unsubscribe(); diff --git a/packages/uhk-web/src/app/components/device/recovery-mode/recovery-mode.component.html b/packages/uhk-web/src/app/components/device/recovery-mode/recovery-mode.component.html index cb3036a314d..2ecafcb73cc 100644 --- a/packages/uhk-web/src/app/components/device/recovery-mode/recovery-mode.component.html +++ b/packages/uhk-web/src/app/components/device/recovery-mode/recovery-mode.component.html @@ -4,10 +4,10 @@

- Fix device + {{recoverPageState.title}}

- Your device seems to be broken. No worries, Agent can fix it. + {{recoverPageState.description}}

diff --git a/packages/uhk-web/src/app/components/missing-device/missing-device.component.html b/packages/uhk-web/src/app/components/missing-device/missing-device.component.html index bd23401fad1..4f7609afd2f 100644 --- a/packages/uhk-web/src/app/components/missing-device/missing-device.component.html +++ b/packages/uhk-web/src/app/components/missing-device/missing-device.component.html @@ -1,3 +1,4 @@ diff --git a/packages/uhk-web/src/app/components/popover/popover.component.html b/packages/uhk-web/src/app/components/popover/popover.component.html index 00170987e36..4b70b372609 100644 --- a/packages/uhk-web/src/app/components/popover/popover.component.html +++ b/packages/uhk-web/src/app/components/popover/popover.component.html @@ -23,7 +23,7 @@ [defaultKeyAction]="shadowKeyAction" [secondaryRoleEnabled]="true" [allowRemapOnAllKeymapWarning]="true" - [remapInfo]="remapInfo" + [remapInfo]="internalRemapInfo" [secondaryRoleOptions]="secondaryRoleOptions" (validAction)="setKeyActionValidState($event)" (keyActionChange)="keystrokeActionChange($event)" @@ -44,7 +44,7 @@ [selectedKey]="selectedKey" [defaultKeyAction]="defaultKeyAction" [macroPlaybackSupported]="macroPlaybackSupported$ | async" - [remapInfo]="remapInfo" + [remapInfo]="internalRemapInfo" (assignNewMacro)="onAssignNewMacro()" (validAction)="setKeyActionValidState($event)" > @@ -67,7 +67,7 @@ + [(ngModel)]="internalRemapInfo.remapOnAllKeymap">
@@ -75,7 +75,7 @@ class="form-check-input" id="remapOnAllLayer" name="remapOnAllLayer" - [(ngModel)]="remapInfo.remapOnAllLayer" + [(ngModel)]="internalRemapInfo.remapOnAllLayer" [disabled]="disableRemapOnAllLayer" (ngModelChange)="remapInfoChange()">
+
diff --git a/packages/uhk-web/src/app/components/uhk-message/uhk-message.component.ts b/packages/uhk-web/src/app/components/uhk-message/uhk-message.component.ts index 42757d7acd9..a81dddb3e16 100644 --- a/packages/uhk-web/src/app/components/uhk-message/uhk-message.component.ts +++ b/packages/uhk-web/src/app/components/uhk-message/uhk-message.component.ts @@ -7,6 +7,7 @@ import { Component, Input, ChangeDetectionStrategy } from '@angular/core'; changeDetection: ChangeDetectionStrategy.OnPush }) export class UhkMessageComponent { + @Input() description: string; @Input() header: string; @Input() subtitle: string; @Input() rotateLogo = false; diff --git a/packages/uhk-web/src/app/components/user-configuration-history/user-configuration-history.component.html b/packages/uhk-web/src/app/components/user-configuration-history/user-configuration-history.component.html index 4c2b53ac1bf..024655f08b4 100644 --- a/packages/uhk-web/src/app/components/user-configuration-history/user-configuration-history.component.html +++ b/packages/uhk-web/src/app/components/user-configuration-history/user-configuration-history.component.html @@ -31,7 +31,7 @@

    + *ngIf="!state.loading && state.selectedTabIndex !== null && state.tabs[state.selectedTabIndex].files.length">
  • {{ fileInfo.timestamp }} @@ -50,8 +50,7 @@

  • -
  • +
  • The following records were created before the grouping feature was introduced, and hence, they're displayed for every device.
  • diff --git a/packages/uhk-web/src/app/components/xterm/xterm.component.ts b/packages/uhk-web/src/app/components/xterm/xterm.component.ts index 28522b324ec..dd299e2fe94 100644 --- a/packages/uhk-web/src/app/components/xterm/xterm.component.ts +++ b/packages/uhk-web/src/app/components/xterm/xterm.component.ts @@ -23,6 +23,10 @@ export class XtermComponent implements OnChanges { } getClipboardContent(): string { + if (!this.logs) { + return ''; + } + return this.logs.reduce((value, line) => value + line.message + '\n', ''); } diff --git a/packages/uhk-web/src/app/models/delete-host-connection-payload.ts b/packages/uhk-web/src/app/models/delete-host-connection-payload.ts new file mode 100644 index 00000000000..ac33b080586 --- /dev/null +++ b/packages/uhk-web/src/app/models/delete-host-connection-payload.ts @@ -0,0 +1,6 @@ +import { HostConnection } from 'uhk-common'; + +export interface DeleteHostConnectionPayload { + index: number; + hostConnection: HostConnection; +} diff --git a/packages/uhk-web/src/app/models/dongle-pairing-state.ts b/packages/uhk-web/src/app/models/dongle-pairing-state.ts new file mode 100644 index 00000000000..1ca1fd8e459 --- /dev/null +++ b/packages/uhk-web/src/app/models/dongle-pairing-state.ts @@ -0,0 +1,22 @@ +export enum DonglePairingStates { + Deleting = 'Deleting', + DeletingSuccess = 'DeletingSuccess', + DeletingFailed = 'DeletingFailed', + Idle = 'Idle', + Pairing = 'Pairing', + PairingSuccess = 'PairingSuccess', + PairingFailed = 'PairingFailed', + SavingToKeyboard = 'SavingToKeyboard', +} + +export enum DongleOperations { + Delete = 'Delete', + None = 'None', + Pairing = 'Pairing', +} + +export interface DonglePairingState { + showDonglePairingPanel: boolean; + operation: DongleOperations; + state: DonglePairingStates; +} diff --git a/packages/uhk-web/src/app/models/index.ts b/packages/uhk-web/src/app/models/index.ts index 17dcaf1995c..e2ee536e10a 100644 --- a/packages/uhk-web/src/app/models/index.ts +++ b/packages/uhk-web/src/app/models/index.ts @@ -1,7 +1,9 @@ export * from './apply-user-configuration-from-file-payload'; export * from './backlighting-option'; export * from './config-size-state'; +export * from './delete-host-connection-payload'; export * from './device-ui-states'; +export * from './dongle-pairing-state'; export * from './duplicate-macro-action-payload'; export * from './exchange-keys-action.model'; export * from './firmware-upgrade-state'; @@ -14,6 +16,7 @@ export * from './modify-color-of-backlighting-color-palette-payload'; export * from './navigation-payload'; export * from './open-popover.model'; export * from './out-of-space-warning-data'; +export * from './recover-page-state'; export * from './selected-macro-action'; export * from './selected-key.model'; export * from './side-menu-page-state'; diff --git a/packages/uhk-web/src/app/models/missing-device-state.ts b/packages/uhk-web/src/app/models/missing-device-state.ts index fd6e436ac8c..7efa0b837a3 100644 --- a/packages/uhk-web/src/app/models/missing-device-state.ts +++ b/packages/uhk-web/src/app/models/missing-device-state.ts @@ -1,4 +1,5 @@ export interface MissingDeviceState { header: string; subtitle: string; + description?: string; } diff --git a/packages/uhk-web/src/app/models/privilage-page-sate.ts b/packages/uhk-web/src/app/models/privilage-page-sate.ts index f011c3ec08e..0364ad2ca16 100644 --- a/packages/uhk-web/src/app/models/privilage-page-sate.ts +++ b/packages/uhk-web/src/app/models/privilage-page-sate.ts @@ -3,4 +3,5 @@ export interface PrivilagePageSate { showWhatWillThisDoContent: boolean; permissionSetupFailed: boolean; udevFileContent: string; + updateUdevRules: boolean; } diff --git a/packages/uhk-web/src/app/models/recover-page-state.ts b/packages/uhk-web/src/app/models/recover-page-state.ts new file mode 100644 index 00000000000..cc4f641c03e --- /dev/null +++ b/packages/uhk-web/src/app/models/recover-page-state.ts @@ -0,0 +1,7 @@ +import { UHK_DEVICE_IDS_TYPE } from 'uhk-common'; + +export interface RecoverPageState { + deviceId: UHK_DEVICE_IDS_TYPE; + description: string; + title: string; +} diff --git a/packages/uhk-web/src/app/models/update-firmware-success-payload.ts b/packages/uhk-web/src/app/models/update-firmware-success-payload.ts index e302345f262..114dd66f045 100644 --- a/packages/uhk-web/src/app/models/update-firmware-success-payload.ts +++ b/packages/uhk-web/src/app/models/update-firmware-success-payload.ts @@ -1,7 +1,4 @@ -import { HardwareModules } from 'uhk-common'; - export interface UpdateFirmwareSuccessPayload { firmwareDowngraded: boolean; - hardwareModules: HardwareModules; userConfigSaved: boolean; } diff --git a/packages/uhk-web/src/app/pages/update-agent.page.ts b/packages/uhk-web/src/app/pages/update-agent.page.ts index 0ea48d00ee4..5dffc5eaa8c 100644 --- a/packages/uhk-web/src/app/pages/update-agent.page.ts +++ b/packages/uhk-web/src/app/pages/update-agent.page.ts @@ -1,9 +1,9 @@ -import { ChangeDetectionStrategy, Component, ChangeDetectorRef } from '@angular/core'; +import { ChangeDetectionStrategy, Component, ChangeDetectorRef, OnDestroy } from '@angular/core'; import { faSpinner } from '@fortawesome/free-solid-svg-icons'; import { Store } from '@ngrx/store'; -import { Subscription } from 'rxjs'; +import { Observable, Subscription } from 'rxjs'; -import { AppState, isForceUpdate } from '../store'; +import { AppState, isForceUpdate, upgradeAgentTooltip } from '../store'; import { ForceUpdateAction } from '../store/actions/app-update.action'; @Component({ @@ -14,8 +14,7 @@ import { ForceUpdateAction } from '../store/actions/app-update.action';

    Update Agent

    -

    Your UHK contains a newer configuration version than this Agent version can handle, so you - must update Agent.

    +

    Your UHK contains a newer configuration version than this Agent version can handle, so you must update Agent.

@@ -32,10 +31,11 @@ import { ForceUpdateAction } from '../store/actions/app-update.action'; `, styleUrls: ['../components/uhk-message/uhk-message.component.scss'], }) -export class UpdateAgentPageComponent { +export class UpdateAgentPageComponent implements OnDestroy { faSpinner = faSpinner; isForceUpdate: boolean; + upgradeAgentTooltip$: Observable; private subscriptions = new Subscription(); @@ -45,6 +45,13 @@ export class UpdateAgentPageComponent { this.isForceUpdate = value; cdRef.markForCheck(); })); + this.upgradeAgentTooltip$ = store.select(upgradeAgentTooltip); + } + + ngOnDestroy(): void { + if (this.subscriptions) { + this.subscriptions.unsubscribe(); + } } onUpdate(): void { diff --git a/packages/uhk-web/src/app/pages/update-firmware.page.ts b/packages/uhk-web/src/app/pages/update-firmware.page.ts index 2bf5ad5eaf1..389a35fc5b4 100644 --- a/packages/uhk-web/src/app/pages/update-firmware.page.ts +++ b/packages/uhk-web/src/app/pages/update-firmware.page.ts @@ -1,7 +1,8 @@ import { ChangeDetectionStrategy, Component } from '@angular/core'; import { Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; -import { AppState } from '../store'; +import { AppState, upgradeFirmwareTooltip } from '../store'; import { SkipFirmwareUpgradeAction, UpdateFirmwareAction } from '../store/actions/device'; @Component({ @@ -11,8 +12,7 @@ import { SkipFirmwareUpgradeAction, UpdateFirmwareAction } from '../store/action

Update Firmware

-

Agent supports a new configuration format. If you want to save new configurations, you - must update the firmware.

+

Agent supports a new configuration version. If you want to save new configurations, you must update the firmware.

; constructor(private store: Store) { + this.upgradeFirmwareTooltip$ = store.select(upgradeFirmwareTooltip); } onUpdate(): void { diff --git a/packages/uhk-web/src/app/pipes/host-connection-type-label.pipe.ts b/packages/uhk-web/src/app/pipes/host-connection-type-label.pipe.ts new file mode 100644 index 00000000000..0e130ff92ba --- /dev/null +++ b/packages/uhk-web/src/app/pipes/host-connection-type-label.pipe.ts @@ -0,0 +1,12 @@ +import { Pipe, PipeTransform } from '@angular/core'; +import { HostConnections, HOST_CONNECTION_LABELS } from 'uhk-common'; + +@Pipe({ + name: 'hostConnectionTypeLabelPipe', +}) +export class HostConnectionTypeLabelPipePipe implements PipeTransform { + + transform(hostConnection: HostConnections): string { + return HOST_CONNECTION_LABELS[hostConnection]; + } +} diff --git a/packages/uhk-web/src/app/pipes/index.ts b/packages/uhk-web/src/app/pipes/index.ts index f027fa24850..69673dbd33d 100644 --- a/packages/uhk-web/src/app/pipes/index.ts +++ b/packages/uhk-web/src/app/pipes/index.ts @@ -1,4 +1,5 @@ export { AsHexColorPipe } from './as-hex-color.pipe'; +export { HostConnectionTypeLabelPipePipe } from './host-connection-type-label.pipe'; export { NewLineToBrPipe } from './new-line-to-br.pipe'; export { SafeHtmlPipe } from './safe-html.pipe'; export { SafeStylePipe } from './safe-style.pipe'; diff --git a/packages/uhk-web/src/app/services/default-user-configuration.service.ts b/packages/uhk-web/src/app/services/default-user-configuration.service.ts index e76302d513e..da5dd78ec94 100644 --- a/packages/uhk-web/src/app/services/default-user-configuration.service.ts +++ b/packages/uhk-web/src/app/services/default-user-configuration.service.ts @@ -3,14 +3,24 @@ import { UserConfiguration } from 'uhk-common'; @Injectable() export class DefaultUserConfigurationService { - private _defaultConfig: UserConfiguration; + private _defaultConfig60: UserConfiguration; + private _defaultConfig80: UserConfiguration; - constructor() { - this._defaultConfig = new UserConfiguration() - .fromJsonObject(require('./user-config.json')); + getDefault60(): UserConfiguration { + if (!this._defaultConfig60) { + this._defaultConfig60 = new UserConfiguration() + .fromJsonObject(require('./user-config.json')); + } + + return this._defaultConfig60; } - getDefault(): UserConfiguration { - return this._defaultConfig; + getDefault80(): UserConfiguration { + if (!this._defaultConfig80) { + this._defaultConfig80 = new UserConfiguration() + .fromJsonObject(require('./user-config-80.json')); + } + + return this._defaultConfig80; } } diff --git a/packages/uhk-web/src/app/services/device-renderer.service.ts b/packages/uhk-web/src/app/services/device-renderer.service.ts index 57e1071eee7..c5d836b17f2 100644 --- a/packages/uhk-web/src/app/services/device-renderer.service.ts +++ b/packages/uhk-web/src/app/services/device-renderer.service.ts @@ -4,14 +4,17 @@ import { Action, Store } from '@ngrx/store'; import { ChangeKeyboardLayoutIpcResponse, DeviceConnectionState, + DeviceVersionInformation, FirmwareJson, FirmwareUpgradeIpcResponse, + HardwareConfiguration, HardwareModules, IpcEvents, IpcResponse, KeyboardLayout, LogService, SaveUserConfigurationData, + UHK_DEVICE_IDS_TYPE, UpdateFirmwareData, UploadFileData, UserConfiguration, @@ -19,11 +22,19 @@ import { VersionInformation } from 'uhk-common'; +import { DeleteHostConnectionPayload } from '../models'; import { AppState } from '../store'; +import { + DeleteHostConnectionFailedAction, + DeleteHostConnectionSuccessAction, + DonglePairingFailedAction, + DonglePairingSuccessAction, +} from '../store/actions/dongle-pairing.action'; import { IpcCommonRenderer } from './ipc-common-renderer'; import { ChangeKeyboardLayoutReplyAction, ConnectionStateChangedAction, + DongleVersionInfoLoadedAction, CurrentlyUpdateSkipModuleAction, CurrentlyUpdatingModuleAction, HardwareModulesLoadedAction, @@ -36,7 +47,11 @@ import { UpdateFirmwareJsonAction, UpdateFirmwareReplyAction } from '../store/actions/device'; -import { I2cWatchdogCounterChangedAction } from '../store/actions/advance-settings.action'; +import { + LeftHalfPairingFailedAction, + LeftHalfPairingSuccessAction, + I2cWatchdogCounterChangedAction, +} from '../store/actions/advance-settings.action'; import { LoadConfigFromDeviceReplyAction, LoadUserConfigurationFromFileAction } from '../store/actions/user-config'; import { LoadUserConfigurationHistorySuccessAction } from '../store/actions/user-configuration-history.actions'; @@ -50,8 +65,16 @@ export class DeviceRendererService { this.logService.misc('[DeviceRendererService] init success '); } - changeKeyboardLayout(layout: KeyboardLayout, deviceId: number): void { - this.ipcRenderer.send(IpcEvents.device.changeKeyboardLayout, layout, deviceId); + changeKeyboardLayout(layout: KeyboardLayout, hardwareConfiguration: HardwareConfiguration): void { + this.ipcRenderer.send(IpcEvents.device.changeKeyboardLayout, layout, hardwareConfiguration.toJsonObject()); + } + + deleteHostConnection(data: DeleteHostConnectionPayload, isConnectedDongleAddress: boolean): void { + this.ipcRenderer.send(IpcEvents.device.deleteHostConnection, { + isConnectedDongleAddress, + index: data.index, + address: data.hostConnection.address, + }); } setPrivilegeOnLinux(): void { @@ -74,8 +97,11 @@ export class DeviceRendererService { this.ipcRenderer.send(IpcEvents.device.startConnectionPoller); } - recoveryDevice(userConfig: UserConfiguration): void { - this.ipcRenderer.send(IpcEvents.device.recoveryDevice, userConfig.toJsonObject()); + recoveryDevice(userConfig: UserConfiguration, deviceId: UHK_DEVICE_IDS_TYPE): void { + this.ipcRenderer.send(IpcEvents.device.recoveryDevice, { + deviceId, + userConfig: userConfig.toJsonObject() + }); } recoveryModule(moduleId: number): void { @@ -98,6 +124,14 @@ export class DeviceRendererService { this.ipcRenderer.send(IpcEvents.device.getUserConfigFromHistory, fileName); } + startDonglePairing(): void { + this.ipcRenderer.send(IpcEvents.device.startDonglePairing); + } + + startLeftHalfPairing(): void { + this.ipcRenderer.send(IpcEvents.device.startLeftHalfPairing); + } + toggleI2cDebugging(enabled: boolean): void { this.ipcRenderer.send(IpcEvents.device.toggleI2cDebugging, enabled); } @@ -107,6 +141,18 @@ export class DeviceRendererService { this.dispachStoreAction(new ChangeKeyboardLayoutReplyAction(response)); }); + this.ipcRenderer.on(IpcEvents.device.dongleVersionInfoLoaded, (event: string, response: DeviceVersionInformation) => { + this.dispachStoreAction(new DongleVersionInfoLoadedAction(response)); + }); + + this.ipcRenderer.on(IpcEvents.device.deleteHostConnectionSuccess, (event: string, data: any) => { + this.dispachStoreAction(new DeleteHostConnectionSuccessAction(data)); + }); + + this.ipcRenderer.on(IpcEvents.device.deleteHostConnectionFailed, (event: string, message: string) => { + this.dispachStoreAction(new DeleteHostConnectionFailedAction(message)); + }); + this.ipcRenderer.on(IpcEvents.device.hardwareModulesLoaded, (event: string, response: HardwareModules) => { this.dispachStoreAction(new HardwareModulesLoadedAction(response)); }); @@ -173,6 +219,22 @@ export class DeviceRendererService { autoSave: false })); }); + + this.ipcRenderer.on(IpcEvents.device.donglePairingSuccess, (event: string, bleAddress: string) => { + this.store.dispatch(new DonglePairingSuccessAction(bleAddress)); + }); + + this.ipcRenderer.on(IpcEvents.device.donglePairingFailed, (event: string, message: string) => { + this.store.dispatch(new DonglePairingFailedAction(message)); + }); + + this.ipcRenderer.on(IpcEvents.device.leftHalfPairingSuccess, (event: string, bleAddress: string) => { + this.store.dispatch(new LeftHalfPairingSuccessAction(bleAddress)); + }); + + this.ipcRenderer.on(IpcEvents.device.leftHalfPairingFailed, (event: string, message: string) => { + this.store.dispatch(new LeftHalfPairingFailedAction(message)); + }); } private dispachStoreAction(action: Action): void { diff --git a/packages/uhk-web/src/app/services/mapper.service.ts b/packages/uhk-web/src/app/services/mapper.service.ts index d2f4ceb048a..ea9b8345fa6 100644 --- a/packages/uhk-web/src/app/services/mapper.service.ts +++ b/packages/uhk-web/src/app/services/mapper.service.ts @@ -198,7 +198,6 @@ export class MapperService implements OnDestroy { this.osSpecificTexts.set(OsSpecificKeys.Enter, 'Enter'); if (this.operatingSystem === OperatingSystem.Mac) { - this.osSpecificTexts.set(OsSpecificKeys.Enter, 'Return'); this.osSpecificTexts.set(KeyModifiers.leftGui, 'LCmd'); this.osSpecificTexts.set(KeyModifiers.rightGui, 'RCmd'); this.osSpecificTexts.set(KeyModifiers.leftAlt, 'LOption'); diff --git a/packages/uhk-web/src/app/services/svg-module-provider.service.ts b/packages/uhk-web/src/app/services/svg-module-provider.service.ts index a90f7d756d5..8315b88ac1b 100644 --- a/packages/uhk-web/src/app/services/svg-module-provider.service.ts +++ b/packages/uhk-web/src/app/services/svg-module-provider.service.ts @@ -1,13 +1,40 @@ -import { Injectable } from '@angular/core'; -import { HalvesInfo, KeyboardLayout, LeftSlotModules, RightSlotModules } from 'uhk-common'; +import { Injectable, OnDestroy } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { isEqual } from 'lodash'; +import { Subscription } from 'rxjs'; +import { + getDefaultHalvesInfo, + HalvesInfo, + KeyboardLayout, + LeftSlotModules, + RightSlotModules, + UHK_60_V2_DEVICE, + UHK_80_DEVICE, +} from 'uhk-common'; import { SvgModule } from '../components/svg/module'; import { convertXmlToSvgSeparator, SvgSeparator } from '../components/svg/separator'; +import { AppState, getConnectedDevice, getHalvesInfo } from '../store/index'; + +export interface DescriptionAnimationParams { + down: string; + up: string; + upLeftKeyCluster: string; + upRightModule: string; +} + +export const UHK_60_DESCRIPTION_ANIMATION_PARAMS: DescriptionAnimationParams = Object.freeze({ + down: '-5.5em', + up: '-11.5%', + upLeftKeyCluster: '-8%', + upRightModule: '-10.5%', +}); @Injectable() -export class SvgModuleProviderService { +export class SvgModuleProviderService implements OnDestroy { private ansiLeft: SvgModule; + private halvesInfo: HalvesInfo = getDefaultHalvesInfo(); private isoLeft: SvgModule; private keyClusterLeft: SvgModule; private right: SvgModule; @@ -15,21 +42,56 @@ export class SvgModuleProviderService { private touchPadRight: SvgModule; private trackBallRight: SvgModule; private trackPointRight: SvgModule; + private connectedDeviceId = UHK_60_V2_DEVICE.id; + private descriptionAnimationParams: DescriptionAnimationParams; + private subscriptions = new Subscription(); + private viewBox: string; + + constructor(private _store: Store) { + this.setUHK60Modules(); + + this.subscriptions.add(this._store.select(getConnectedDevice).subscribe(device => { + const connectedDeviceId = device?.id || UHK_60_V2_DEVICE.id; + if (connectedDeviceId === this.connectedDeviceId) { + return; + } - getSvgModules(layout = KeyboardLayout.ANSI, halvesInfo: HalvesInfo): SvgModule[] { + this.connectedDeviceId = connectedDeviceId; + this.setModules(); + })); + + this.subscriptions.add(this._store.select(getHalvesInfo).subscribe(halvesInfo => { + if (isEqual(this.halvesInfo, halvesInfo)) { + return; + } + + this.halvesInfo = halvesInfo; + this.setModules(); + })); + } + + ngOnDestroy() { + this.subscriptions.unsubscribe(); + } + + getDescriptionAnimationParams(): DescriptionAnimationParams { + return this.descriptionAnimationParams; + } + + getSvgModules(layout = KeyboardLayout.ANSI): SvgModule[] { const modules = [this.getRightModule()]; - if (halvesInfo.isLeftHalfConnected) { + if (this.halvesInfo.isLeftHalfConnected) { modules.push(this.getLeftModule(layout)); } - switch (halvesInfo.leftModuleSlot) { + switch (this.halvesInfo.leftModuleSlot) { case LeftSlotModules.KeyClusterLeft: modules.push(this.getKeyClusterLeft()); break; } - switch (halvesInfo.rightModuleSlot) { + switch (this.halvesInfo.rightModuleSlot) { case RightSlotModules.TouchpadRight: modules.push(this.getTouchPadRight()); break; @@ -47,23 +109,18 @@ export class SvgModuleProviderService { } getSvgSeparator(): SvgSeparator { - if (!this.separator) { - this.separator = convertXmlToSvgSeparator(require('!xml-loader!../../devices/uhk60-right/separator.svg').svg); - } - return this.separator; } + getViewBox(): string { + return this.viewBox; + } + private getLeftModule(layout = KeyboardLayout.ANSI): SvgModule { if (layout === KeyboardLayout.ISO) { - if (!this.isoLeft) { - this.isoLeft = new SvgModule(require('!xml-loader!../../modules/uhk60-left/layout-iso.svg').svg); - } return this.isoLeft; } - if (!this.ansiLeft) { - this.ansiLeft = new SvgModule(require('!xml-loader!../../modules/uhk60-left/layout-ansi.svg').svg); - } + return this.ansiLeft; } @@ -76,11 +133,43 @@ export class SvgModuleProviderService { } private getRightModule(): SvgModule { + return this.right; + } - if (!this.right) { - this.right = new SvgModule(require('!xml-loader!../../devices/uhk60-right/layout.svg').svg); + private setModules() { + switch (this.connectedDeviceId) { + case UHK_80_DEVICE.id: { + this.separator = convertXmlToSvgSeparator(require('!xml-loader!../../devices/uhk80-right/separator.svg').svg); + this.right = new SvgModule(require('!xml-loader!../../devices/uhk80-right/layout.svg').svg); + this.isoLeft = new SvgModule(require('!xml-loader!../../modules/uhk80-left/layout-iso.svg').svg); + this.ansiLeft = new SvgModule(require('!xml-loader!../../modules/uhk80-left/layout-ansi.svg').svg); + + if (this.halvesInfo?.areHalvesMerged) { + this.descriptionAnimationParams = { + down: '-4em', + up: '-5.5%', + upLeftKeyCluster: '-4.5%', + upRightModule: '-5.5%', + }; + this.viewBox = '-520 660 1250 600'; + } + else { + this.descriptionAnimationParams = { + down: '-0.5em', + up: '-5.5%', + upLeftKeyCluster: '-4.5%', + upRightModule: '-5.5%', + }; + this.viewBox = '-550 610 1250 600'; + } + break; + } + + default: { + this.setUHK60Modules(); + break; + } } - return this.right; } private getTouchPadRight(): SvgModule { @@ -106,4 +195,13 @@ export class SvgModuleProviderService { return this.trackPointRight; } + + private setUHK60Modules() { + this.descriptionAnimationParams = UHK_60_DESCRIPTION_ANIMATION_PARAMS; + this.separator = convertXmlToSvgSeparator(require('!xml-loader!../../devices/uhk60-right/separator.svg').svg); + this.right = new SvgModule(require('!xml-loader!../../devices/uhk60-right/layout.svg').svg); + this.isoLeft = new SvgModule(require('!xml-loader!../../modules/uhk60-left/layout-iso.svg').svg); + this.ansiLeft = new SvgModule(require('!xml-loader!../../modules/uhk60-left/layout-ansi.svg').svg); + this.viewBox = '-600 660 1250 600'; + } } diff --git a/packages/uhk-web/src/app/services/uhk-device-udev.guard.ts b/packages/uhk-web/src/app/services/uhk-device-udev.guard.ts new file mode 100644 index 00000000000..513dc049c3e --- /dev/null +++ b/packages/uhk-web/src/app/services/uhk-device-udev.guard.ts @@ -0,0 +1,29 @@ +import { CanActivate, Router } from '@angular/router'; +import { Injectable } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { AppState, getUpdateUdevRules } from '../store'; + +@Injectable({ + providedIn: 'root' +}) +export class UhkUdevGuard implements CanActivate { + + constructor(private store: Store, private router: Router) { + } + + canActivate(): Observable { + return this.store.select(getUpdateUdevRules) + .pipe( + map(updateUdevRules => { + if (updateUdevRules) { + this.router.navigate(['/privilege']); + } + + return !updateUdevRules; + }) + ); + } +} diff --git a/packages/uhk-web/src/app/services/uhk80-migrator.service.ts b/packages/uhk-web/src/app/services/uhk80-migrator.service.ts new file mode 100644 index 00000000000..93132e5c650 --- /dev/null +++ b/packages/uhk-web/src/app/services/uhk80-migrator.service.ts @@ -0,0 +1,186 @@ +import { Injectable, OnDestroy } from '@angular/core'; +import { Store } from '@ngrx/store'; +import { Subscription } from 'rxjs'; +import { + KeyActionHelper, + Layer, + LayerName, + NoneAction, + UHK_60_LEFT_MAX_KEY_ACTION_COUNT, + UHK_60_RIGHT_MAX_KEY_ACTION_COUNT, + UHK_80_DEVICE, + UhkDeviceProduct, + UserConfiguration, +} from 'uhk-common'; + +import { AppState, getConnectedDevice, getPlatform } from '../store/index'; + +import { DefaultUserConfigurationService } from './default-user-configuration.service'; + +@Injectable({ providedIn: 'root' }) +export class Uhk80MigratorService implements OnDestroy { + private connectedDevice: UhkDeviceProduct; + private platform: string; + private subscriptions = new Subscription(); + + constructor( + private defaultUserConfigurationService: DefaultUserConfigurationService, + private store: Store, + ) { + this.subscriptions.add(this.store.select(getConnectedDevice).subscribe(device => { + this.connectedDevice = device; + })); + this.subscriptions.add(this.store.select(getPlatform).subscribe(platform => { + this.platform = platform; + })); + } + + ngOnDestroy(): void { + this.subscriptions.unsubscribe(); + } + + public migrate(userConfig: UserConfiguration): UserConfiguration { + if (this.connectedDevice?.id !== UHK_80_DEVICE.id) { + return userConfig; + } + + let hasConfiguredExcessKey = this.hasUhk80ConfiguredExcessKey(userConfig); + + if (hasConfiguredExcessKey) { + return userConfig; + } + + const uhk80UserConfig = this.defaultUserConfigurationService.getDefault80().clone(); + let uhk80BaseLayerPc: Layer; + let uhk80BaseLayerMac: Layer; + let uhk80Fn2Layer: Layer; + + for (const keymap of uhk80UserConfig.keymaps) { + for (const layer of keymap.layers) { + if (layer.id === LayerName.base) { + if (keymap.abbreviation === 'QWM') { + uhk80BaseLayerMac = layer; + } + else if (keymap.abbreviation === 'QWR') { + uhk80BaseLayerPc = layer; + } + } + + if (!uhk80Fn2Layer && layer.id === LayerName.fn2) { + uhk80Fn2Layer = layer; + } + } + + if (uhk80BaseLayerPc && uhk80BaseLayerMac && uhk80Fn2Layer) { + break; + } + } + + for (const keymap of userConfig.keymaps) { + const keymapName = keymap.name.toUpperCase(); + const keymapNameIncludePC = keymapName.includes('PC'); + const keymapNameIncludeMac = keymapName.includes('MAC'); + let hasFn2Layer = false; + + for (const layer of keymap.layers) { + if (layer.id === LayerName.base) { + if (keymap.abbreviation === 'QWR' || keymap.name === 'QWERTY for PC') { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerPc); + } + else if(keymap.abbreviation === 'QWM' || keymap.name === 'QWERTY for Mac') { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerMac); + } + else if (keymapNameIncludePC && !keymapNameIncludeMac) { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerPc); + } + else if (!keymapNameIncludePC && keymapNameIncludeMac) { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerMac); + } + else if (keymapNameIncludePC) { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerPc); + } + else if (keymapNameIncludeMac) { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerMac); + } + else if (this.platform === 'darwin') { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerMac); + } + else { + this.extendUhk60LayerWith80Layer(layer, uhk80BaseLayerMac); + } + } + else if (layer.id === LayerName.fn2) { + hasFn2Layer = true; + this.extendUhk60LayerWith80Layer(layer, uhk80Fn2Layer); + } + else { + this.extendUhk60LayerWithNoneActions(layer, uhk80BaseLayerPc); + } + } + + if (!hasFn2Layer) { + keymap.layers.push(new Layer(uhk80Fn2Layer)); + } + } + + return userConfig; + } + + private extendUhk60LayerWith80Layer(uhk60Layer: Layer, uhk80Layer: Layer) { + for (const module of uhk60Layer.modules) { + const uhk80Module = uhk80Layer.modules.find(x => x.id === module.id); + + // right and left halves + if (module.id === 0 || module.id === 1) { + let i = module.id === 0 + ? UHK_60_RIGHT_MAX_KEY_ACTION_COUNT + : UHK_60_LEFT_MAX_KEY_ACTION_COUNT; + + for (; i < uhk80Module.keyActions.length; i++) { + const keyAction = uhk80Module.keyActions[i]; + module.keyActions[i] = KeyActionHelper.fromKeyAction(keyAction); + } + } + } + } + + private extendUhk60LayerWithNoneActions(uhk60Layer: Layer, uhk80Layer: Layer) { + for (const module of uhk60Layer.modules) { + const uhk80Module = uhk80Layer.modules.find(x => x.id === module.id); + + if (module.id === 0) { + for (let i = UHK_60_RIGHT_MAX_KEY_ACTION_COUNT; i < uhk80Module.keyActions.length; i++) { + module.keyActions[i] = new NoneAction(); + } + } + // left half + else if (module.id === 1) { + for (let i = UHK_60_LEFT_MAX_KEY_ACTION_COUNT; i < uhk80Module.keyActions.length; i++) { + module.keyActions[i] = new NoneAction(); + } + } + } + } + + private hasUhk80ConfiguredExcessKey(userConfig: UserConfiguration): boolean { + for (const keymap of userConfig.keymaps) { + for (const layer of keymap.layers) { + for (const module of layer.modules) { + // right and left halves + if (module.id === 0 || module.id === 1) { + let i = module.id === 0 + ? UHK_60_RIGHT_MAX_KEY_ACTION_COUNT + : UHK_60_LEFT_MAX_KEY_ACTION_COUNT; + + for (; i < module.keyActions.length; i++) { + const keyAction = module.keyActions[i]; + if (keyAction !== null && keyAction !== undefined) { + return true; + } + } + } + } + } + } + } +} diff --git a/packages/uhk-web/src/app/services/user-config.json b/packages/uhk-web/src/app/services/user-config-80.json similarity index 66% rename from packages/uhk-web/src/app/services/user-config.json rename to packages/uhk-web/src/app/services/user-config-80.json index d3e42ad877d..71ac67f1f0f 100644 --- a/packages/uhk-web/src/app/services/user-config.json +++ b/packages/uhk-web/src/app/services/user-config-80.json @@ -1,13 +1,9 @@ { - "userConfigMajorVersion": 7, - "userConfigMinorVersion": 1, + "userConfigMajorVersion": 8, + "userConfigMinorVersion": 3, "userConfigPatchVersion": 0, "deviceName": "My UHK", "doubleTapSwitchLayerTimeout": 250, - "iconsAndLayerTextsBrightness": 255, - "alphanumericSegmentsBrightness": 255, - "keyBacklightBrightness": 255, - "ledsFadeTimeout": 0, "perKeyRgbPresent": false, "backlightingMode": "FunctionalBacklighting", "backlightingNoneActionColor": { @@ -72,6 +68,84 @@ "diagonalSpeedCompensation": false, "doubletapTimeout": 400, "keystrokeDelay": 0, + "displayBrightness": 255, + "displayBrightnessBattery": 255, + "keyBacklightBrightness": 255, + "keyBacklightBrightnessBattery": 255, + "displayFadeOutTimeout": 300, + "displayFadeOutBatteryTimeout": 10, + "keyBacklightFadeOutTimeout": 300, + "keyBacklightFadeOutBatteryTimeout": 10, + "hostConnections": [ + { + "type": "UsbRight", + "name": "My PC", + "switchover": false + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + }, + { + "type": "Empty" + } + ], "moduleConfigurations": [ { "id": "KeyClusterLeft", @@ -215,6 +289,11 @@ "type": "basic", "scancode": 42 }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 13 + }, { "keyActionType": "keystroke", "type": "basic", @@ -253,7 +332,7 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 13 + "scancode": 11 }, { "keyActionType": "keystroke", @@ -285,11 +364,6 @@ "type": "basic", "scancode": 40 }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 11 - }, { "keyActionType": "keystroke", "type": "basic", @@ -321,12 +395,29 @@ "modifierMask": 32 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 44 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 44 + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 }, { "keyActionType": "switchLayer", @@ -335,23 +426,115 @@ }, { "keyActionType": "switchLayer", - "layer": "fn", + "layer": "fn2", "switchLayerMode": "hold" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "scancode": 64 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "scancode": 65 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 16 + "scancode": 66 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 } ] }, @@ -418,9 +601,6 @@ "type": "basic", "scancode": 19 }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -451,9 +631,6 @@ "type": "basic", "scancode": 23 }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -514,6 +691,11 @@ "layer": "fn", "switchLayerMode": "hold" }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, { "keyActionType": "keystroke", "type": "basic", @@ -521,11 +703,43 @@ }, { "keyActionType": "switchLayer", - "layer": "mod", + "layer": "fn2", "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 58 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 } ] } @@ -572,6 +786,11 @@ "type": "basic", "scancode": 76 }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, { "keyActionType": "keystroke", "type": "basic", @@ -610,7 +829,7 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 75 + "scancode": 78 }, { "keyActionType": "keystroke", @@ -638,11 +857,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78 - }, { "keyActionType": "keystroke", "type": "basic", @@ -673,14 +887,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" - }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -695,19 +901,90 @@ "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 }, { - "keyActionType": "keystroke", + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", "type": "basic", "scancode": 58 }, @@ -768,9 +1045,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -797,9 +1071,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -844,14 +1115,35 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, { "keyActionType": "switchLayer", "layer": "mod", "switchLayerMode": "hold" }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, { "keyActionType": "none" } @@ -886,6 +1178,9 @@ { "keyActionType": "none" }, + { + "keyActionType": "none" + }, { "keyActionType": "keystroke", "type": "media", @@ -947,9 +1242,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "media", @@ -969,12 +1261,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, { "keyActionType": "switchLayer", "layer": "fn", @@ -994,6 +1280,75 @@ "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" } ] }, @@ -1062,12 +1417,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -1117,6 +1466,27 @@ { "keyActionType": "none" }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, { "keyActionType": "none" } @@ -1151,6 +1521,10 @@ { "keyActionType": "none" }, + { + "keyActionType": "mouse", + "mouseAction": "scrollDown" + }, { "keyActionType": "mouse", "mouseAction": "scrollLeft" @@ -1177,7 +1551,7 @@ }, { "keyActionType": "mouse", - "mouseAction": "scrollDown" + "mouseAction": "scrollUp" }, { "keyActionType": "mouse", @@ -1200,10 +1574,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "mouse", - "mouseAction": "scrollUp" - }, { "keyActionType": "none" }, @@ -1224,17 +1594,10 @@ "type": "basic", "modifierMask": 32 }, - { - "keyActionType": "none" - }, { "keyActionType": "mouse", "mouseAction": "leftClick" }, - { - "keyActionType": "mouse", - "mouseAction": "rightClick" - }, { "keyActionType": "none" }, @@ -1252,12 +1615,11 @@ "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ + }, + { + "keyActionType": "mouse", + "mouseAction": "rightClick" + }, { "keyActionType": "none" }, @@ -1301,24 +1663,19 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "rightClick" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "middleClick" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "leftClick" + "keyActionType": "none" }, { "keyActionType": "none" @@ -1327,10 +1684,13 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 - }, + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "none" }, @@ -1350,503 +1710,315 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "decelerate" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "accelerate" + "keyActionType": "none" }, { "keyActionType": "none" - } - ] - } - ] - } - ] - }, - { - "isDefault": false, - "abbreviation": "COL", - "name": "Colemak for PC", - "description": "Colemak is based on QWERTY, but it places the most frequent letters under the strongest fingers. This is the PC version.\n", - "layers": [ - { - "id": "base", - "modules": [ - { - "id": 0, - "keyActions": [ - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 36 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 37 + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 38 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 39 + "keyActionType": "mouse", + "mouseAction": "rightClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 45 + "keyActionType": "mouse", + "mouseAction": "middleClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 46 + "keyActionType": "mouse", + "mouseAction": "leftClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 42 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 15 + "modifierMask": 2 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 24 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 28 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 51 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 47 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 48 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 49 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 13 + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 17 + "modifierMask": 4 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 8 + "modifierMask": 8 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 12 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 18 + "keyActionType": "mouse", + "mouseAction": "accelerate" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 52 + "keyActionType": "mouse", + "mouseAction": "decelerate" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 40 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 11 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 14 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 16 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 54 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 55 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 56 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 - }, + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn2", + "modules": [ + { + "id": 0, + "keyActions": [ { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 44 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 53 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 30 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 31 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 32 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 33 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 34 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 35 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 43 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 20 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 26 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 9 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 19 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 10 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 4 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 21 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 22 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 23 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 7 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 100 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 29 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 27 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 6 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 25 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 5 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 44 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "mod", - "modules": [ - { - "id": 0, - "keyActions": [ - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 64 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 65 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 66 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 67 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 68 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 69 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 76 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 74 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 82 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 77 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 76 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 70 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 71 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 72 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80 - }, + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 81 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 73 + "keyActionType": "none" }, { "keyActionType": "none" @@ -1855,14 +2027,10 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { "keyActionType": "none" @@ -1874,14 +2042,10 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 101 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 + "keyActionType": "none" }, { "keyActionType": "none" @@ -1890,93 +2054,72 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ + "keyActionType": "none" + }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 58 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 59 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 60 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 61 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 62 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 63 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 23, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78, - "modifierMask": 1 + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" }, { "keyActionType": "none" @@ -1987,234 +2130,308 @@ { "keyActionType": "none" }, + { + "keyActionType": "none" + } + ] + } + ] + } + ] + }, + { + "isDefault": false, + "abbreviation": "COL", + "name": "Colemak for PC", + "description": "Colemak is based on QWERTY, but it places the most frequent letters under the strongest fingers. This is the PC version.\n", + "layers": [ + { + "id": "base", + "modules": [ + { + "id": 0, + "keyActions": [ { "keyActionType": "keystroke", "type": "basic", - "scancode": 57 + "scancode": 36 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 80, - "modifierMask": 5 + "scancode": 37 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 43, - "modifierMask": 4 + "scancode": 38 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 79, - "modifierMask": 5 + "scancode": 39 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 45 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 46 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 2 + "scancode": 42 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 13 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 15 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 75, - "modifierMask": 3 + "scancode": 24 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 26, - "modifierMask": 1 + "scancode": 28 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 78, - "modifierMask": 3 + "scancode": 51 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 47 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 1 + "scancode": 48 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 8 + "scancode": 49 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 4 + "scancode": 11 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 17 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 8 }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 12 }, { - "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "fn", - "modules": [ - { - "id": 0, - "keyActions": [ - { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 18 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 52 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 40 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 14 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 16 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 54 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 55 }, { "keyActionType": "keystroke", - "type": "media", - "scancode": 205 + "type": "basic", + "scancode": 56 }, { "keyActionType": "keystroke", - "type": "media", - "scancode": 233 + "type": "basic", + "modifierMask": 32 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 44 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 }, { "keyActionType": "keystroke", - "type": "system", - "scancode": 130 + "type": "basic", + "modifierMask": 16 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, { "keyActionType": "keystroke", - "type": "media", - "scancode": 182 + "type": "basic", + "scancode": 64 }, { "keyActionType": "keystroke", - "type": "media", - "scancode": 234 + "type": "basic", + "scancode": 65 }, { "keyActionType": "keystroke", - "type": "media", - "scancode": 181 + "type": "basic", + "scancode": 66 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 }, { "keyActionType": "keystroke", - "type": "media", - "scancode": 226 + "type": "basic", + "scancode": 73 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 32 + "scancode": 75 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 1 }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "scancode": 79, + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "scancode": 80 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 16 + "scancode": 81 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 } ] }, @@ -2222,72 +2439,99 @@ "id": 1, "keyActions": [ { - "keyActionType": "none" - }, - { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWR" - }, - { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVO" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 53 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 30 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWM" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 31 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVM" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 32 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COM" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 33 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 34 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 35 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 43 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 20 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 26 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 9 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 19 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 10 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 4 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 21 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 22 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 23 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 7 }, { "keyActionType": "keystroke", @@ -2295,22 +2539,34 @@ "modifierMask": 2 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 100 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 29 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 27 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 6 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 25 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 5 }, { "keyActionType": "keystroke", @@ -2333,103 +2589,175 @@ "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 44 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 58 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 } ] } ] }, { - "id": "mouse", + "id": "mod", "modules": [ { "id": 0, "keyActions": [ { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 64 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 65 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 66 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 }, { - "keyActionType": "mouse", - "mouseAction": "scrollLeft" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 }, { - "keyActionType": "mouse", - "mouseAction": "moveUp" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 }, { - "keyActionType": "mouse", - "mouseAction": "scrollRight" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 }, { - "keyActionType": "mouse", - "mouseAction": "scrollUp" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 }, { - "keyActionType": "mouse", - "mouseAction": "moveLeft" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 }, { - "keyActionType": "mouse", - "mouseAction": "moveDown" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 }, { - "keyActionType": "mouse", - "mouseAction": "moveRight" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 }, { "keyActionType": "none" }, - { - "keyActionType": "mouse", - "mouseAction": "scrollDown" - }, { "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 }, { "keyActionType": "none" @@ -2443,18 +2771,15 @@ { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 32 - }, - { - "keyActionType": "none" + "scancode": 101 }, { - "keyActionType": "mouse", - "mouseAction": "leftClick" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 }, { - "keyActionType": "mouse", - "mouseAction": "rightClick" + "keyActionType": "none" }, { "keyActionType": "none" @@ -2473,20 +2798,11 @@ "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "none" - }, - { - "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" }, { "keyActionType": "none" @@ -2521,37 +2837,15 @@ { "keyActionType": "none" }, - { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" - }, { "keyActionType": "none" }, - { - "keyActionType": "mouse", - "mouseAction": "rightClick" - }, - { - "keyActionType": "mouse", - "mouseAction": "middleClick" - }, - { - "keyActionType": "mouse", - "mouseAction": "leftClick" - }, { "keyActionType": "none" }, { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 - }, { "keyActionType": "none" }, @@ -2570,539 +2864,427 @@ { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 - }, { "keyActionType": "none" }, - { - "keyActionType": "mouse", - "mouseAction": "decelerate" - }, - { - "keyActionType": "mouse", - "mouseAction": "accelerate" - }, { "keyActionType": "none" } ] - } - ] - } - ] - }, - { - "isDefault": false, - "abbreviation": "DVM", - "name": "Dvorak for Mac", - "description": "The Dvorak keyboard layout was designed with the goal of maximizing typing efficiency. This is the Mac version.", - "layers": [ - { - "id": "base", - "modules": [ + }, { - "id": 0, + "id": 1, "keyActions": [ { "keyActionType": "keystroke", "type": "basic", - "scancode": 36 + "scancode": 41 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 37 + "scancode": 58 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 38 + "scancode": 59 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 39 + "scancode": 60 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 47 + "scancode": 61 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 48 + "scancode": 62 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 42 + "scancode": 63 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 10 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 6 + "scancode": 41 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 21 + "scancode": 75, + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 15 + "scancode": 23, + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 56 + "scancode": 78, + "modifierMask": 1 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 46 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 49 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 9 + "scancode": 57 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 11 + "scancode": 80, + "modifierMask": 5 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 23 + "scancode": 43, + "modifierMask": 4 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 17 + "scancode": 79, + "modifierMask": 5 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 22 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 45 + "modifierMask": 2 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 40 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 7 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 5 + "scancode": 75, + "modifierMask": 3 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 16 + "scancode": 26, + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 26 + "scancode": 78, + "modifierMask": 3 + }, + { + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 25 + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 29 + "modifierMask": 8 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 32 + "modifierMask": 4 }, { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 44 - }, { "keyActionType": "switchLayer", "layer": "mod", "switchLayerMode": "hold" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" } ] - }, + } + ] + }, + { + "id": "fn", + "modules": [ { - "id": 1, + "id": 0, "keyActions": [ { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 53 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 30 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 31 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 32 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 33 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 34 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 35 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 43 + "keyActionType": "none" }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 52 + "type": "media", + "scancode": 205 }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 54 + "type": "media", + "scancode": 233 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 55 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 19 + "keyActionType": "none" + }, + { + "keyActionType": "none" }, { "keyActionType": "none" }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 28 + "type": "system", + "scancode": 130 }, { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" + "keyActionType": "none" }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 4 + "type": "media", + "scancode": 182 }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 18 + "type": "media", + "scancode": 234 }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 8 + "type": "media", + "scancode": 181 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 24 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 12 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 100 + "keyActionType": "none" }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 51 + "type": "media", + "scancode": 226 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 20 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 13 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 14 + "modifierMask": 32 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 27 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 4 + "modifierMask": 64 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 8 - }, - { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "modifierMask": 128 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 44 + "modifierMask": 16 }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "mod", - "modules": [ - { - "id": 0, - "keyActions": [ + }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 65 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 66 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 67 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 68 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 69 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 76 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 74 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 82 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 77 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 76 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 70 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 71 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 72 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 81 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 73 + "keyActionType": "none" }, { "keyActionType": "none" }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78 + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWR" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVO" }, { "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWM" }, { - "keyActionType": "none" + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVM" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 101 + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COM" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 + "keyActionType": "none" }, { "keyActionType": "none" @@ -3111,94 +3293,43 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ + "keyActionType": "none" + }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 58 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 59 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 60 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 61 + "modifierMask": 2 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 62 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 63 + "keyActionType": "none" }, { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80, - "modifierMask": 12 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 23, - "modifierMask": 8 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79, - "modifierMask": 12 - }, { "keyActionType": "none" }, @@ -3209,39 +3340,31 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 57 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 80, "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 43, "modifierMask": 8 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 79, - "modifierMask": 1 + "modifierMask": 4 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" }, { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 - }, { "keyActionType": "none" }, @@ -3251,33 +3374,12 @@ { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 26, - "modifierMask": 8 - }, { "keyActionType": "none" }, { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 - }, { "keyActionType": "none" }, @@ -3285,9 +3387,7 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" @@ -3297,7 +3397,7 @@ ] }, { - "id": "fn", + "id": "mouse", "modules": [ { "id": 0, @@ -3324,20 +3424,20 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 205 + "keyActionType": "mouse", + "mouseAction": "scrollUp" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 233 + "keyActionType": "mouse", + "mouseAction": "scrollLeft" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "moveUp" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "scrollRight" }, { "keyActionType": "none" @@ -3346,31 +3446,26 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 184, - "modifierMask": 12 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 182 + "keyActionType": "mouse", + "mouseAction": "scrollDown" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 234 + "keyActionType": "mouse", + "mouseAction": "moveLeft" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 181 + "keyActionType": "mouse", + "mouseAction": "moveDown" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "moveRight" }, { "keyActionType": "none" @@ -3388,9 +3483,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 226 + "keyActionType": "none" }, { "keyActionType": "none" @@ -3404,64 +3497,36 @@ "modifierMask": 32 }, { - "keyActionType": "none" - }, - { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "leftClick" }, { "keyActionType": "none" }, - { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" - }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "modifierMask": 64 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "modifierMask": 128 }, { "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "none" - }, - { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWR" - }, - { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVO" - }, - { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COL" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWM" + "keyActionType": "mouse", + "mouseAction": "rightClick" }, { "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COM" + "keyActionType": "none" }, { "keyActionType": "none" @@ -3506,9 +3571,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { "keyActionType": "none" @@ -3524,29 +3587,26 @@ }, { "keyActionType": "none" - }, + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" @@ -3556,17 +3616,7 @@ }, { "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "mouse", - "modules": [ - { - "id": 0, - "keyActions": [ + }, { "keyActionType": "none" }, @@ -3583,26 +3633,33 @@ "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" }, { "keyActionType": "none" }, { "keyActionType": "mouse", - "mouseAction": "scrollLeft" + "mouseAction": "rightClick" }, { "keyActionType": "mouse", - "mouseAction": "moveUp" + "mouseAction": "middleClick" }, { "keyActionType": "mouse", - "mouseAction": "scrollRight" + "mouseAction": "leftClick" }, { "keyActionType": "none" }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, { "keyActionType": "none" }, @@ -3613,36 +3670,39 @@ "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollDown" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveLeft" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveDown" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveRight" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 }, { "keyActionType": "none" }, { "keyActionType": "mouse", - "mouseAction": "scrollUp" + "mouseAction": "accelerate" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "decelerate" }, { "keyActionType": "none" @@ -3656,39 +3716,197 @@ { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 - }, { "keyActionType": "none" }, - { - "keyActionType": "mouse", - "mouseAction": "leftClick" - }, - { - "keyActionType": "mouse", - "mouseAction": "rightClick" - }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn2", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" } ] }, @@ -3738,24 +3956,19 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "rightClick" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "middleClick" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "leftClick" + "keyActionType": "none" }, { "keyActionType": "none" @@ -3764,9 +3977,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { "keyActionType": "none" @@ -3787,30 +3998,39 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "decelerate" + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, { - "keyActionType": "mouse", - "mouseAction": "accelerate" + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" }, { "keyActionType": "none" @@ -3823,9 +4043,9 @@ }, { "isDefault": false, - "abbreviation": "DVO", - "name": "Dvorak for PC", - "description": "The Dvorak keyboard layout was designed with the goal of maximizing typing efficiency. This is the PC version.", + "abbreviation": "DVM", + "name": "Dvorak for Mac", + "description": "The Dvorak keyboard layout was designed with the goal of maximizing typing efficiency. This is the Mac version.", "layers": [ { "id": "base", @@ -3868,6 +4088,11 @@ "type": "basic", "scancode": 42 }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 9 + }, { "keyActionType": "keystroke", "type": "basic", @@ -3906,7 +4131,7 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 9 + "scancode": 7 }, { "keyActionType": "keystroke", @@ -3938,11 +4163,6 @@ "type": "basic", "scancode": 40 }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 7 - }, { "keyActionType": "keystroke", "type": "basic", @@ -3973,9 +4193,6 @@ "type": "basic", "modifierMask": 32 }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -3983,28 +4200,140 @@ }, { "keyActionType": "switchLayer", - "layer": "mod", + "layer": "fn", "switchLayerMode": "hold" }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, { "keyActionType": "switchLayer", - "layer": "fn", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", "switchLayerMode": "hold" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "scancode": 64 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "scancode": 65 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 16 + "scancode": 66 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 } ] }, @@ -4071,9 +4400,6 @@ "type": "basic", "scancode": 19 }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -4104,9 +4430,6 @@ "type": "basic", "scancode": 24 }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", @@ -4155,18 +4478,23 @@ { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 8 + "modifierMask": 4 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 4 + "modifierMask": 8 }, { "keyActionType": "switchLayer", "layer": "fn", "switchLayerMode": "hold" }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, { "keyActionType": "keystroke", "type": "basic", @@ -4174,11 +4502,43 @@ }, { "keyActionType": "switchLayer", - "layer": "mod", + "layer": "fn2", "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 58 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 } ] } @@ -4225,6 +4585,11 @@ "type": "basic", "scancode": 76 }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, { "keyActionType": "keystroke", "type": "basic", @@ -4263,7 +4628,7 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 75 + "scancode": 78 }, { "keyActionType": "keystroke", @@ -4291,11 +4656,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78 - }, { "keyActionType": "keystroke", "type": "basic", @@ -4326,94 +4686,58 @@ { "keyActionType": "none" }, - { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" - }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "modifierMask": 128 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "modifierMask": 64 }, { "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ + }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 58 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 59 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 60 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 61 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 62 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 63 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 23, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78, - "modifierMask": 1 + "keyActionType": "none" }, { "keyActionType": "none" @@ -4425,30 +4749,68 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 57 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80, - "modifierMask": 5 + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "keystroke", "type": "basic", - "scancode": 43, - "modifierMask": 4 + "scancode": 41 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 79, - "modifierMask": 5 + "scancode": 58 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 }, { "keyActionType": "none" @@ -4456,7 +4818,25 @@ { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 2 + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 12 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 23, + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 12 }, { "keyActionType": "none" @@ -4467,20 +4847,25 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 75, - "modifierMask": 3 + "scancode": 57 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 26, + "scancode": 80, "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 78, - "modifierMask": 3 + "scancode": 43, + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 1 }, { "keyActionType": "none" @@ -4488,20 +4873,43 @@ { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 1 + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", + "scancode": 26, "modifierMask": 8 }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, { "keyActionType": "keystroke", "type": "basic", "modifierMask": 4 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 }, { "keyActionType": "none" @@ -4511,6 +4919,30 @@ "layer": "mod", "switchLayerMode": "hold" }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, { "keyActionType": "none" } @@ -4545,6 +4977,9 @@ { "keyActionType": "none" }, + { + "keyActionType": "none" + }, { "keyActionType": "keystroke", "type": "media", @@ -4569,8 +5004,9 @@ }, { "keyActionType": "keystroke", - "type": "system", - "scancode": 130 + "type": "media", + "scancode": 184, + "modifierMask": 12 }, { "keyActionType": "none" @@ -4605,9 +5041,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, { "keyActionType": "keystroke", "type": "media", @@ -4627,12 +5060,6 @@ { "keyActionType": "none" }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, { "keyActionType": "switchLayer", "layer": "fn", @@ -4641,48 +5068,32 @@ { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "modifierMask": 128 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "modifierMask": 64 }, { "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "none" - }, - { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWR" }, { "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COL" + "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWM" + "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVM" + "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COM" + "keyActionType": "none" }, { "keyActionType": "none" @@ -4727,9 +5138,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { "keyActionType": "none" @@ -4739,35 +5148,37 @@ }, { "keyActionType": "none" - }, + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWR" }, { - "keyActionType": "none" + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVO" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COL" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWM" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COM" }, { "keyActionType": "none" @@ -4777,17 +5188,7 @@ }, { "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "mouse", - "modules": [ - { - "id": 0, - "keyActions": [ + }, { "keyActionType": "none" }, @@ -4810,16 +5211,15 @@ "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollLeft" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveUp" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollRight" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 }, { "keyActionType": "none" @@ -4834,34 +5234,34 @@ "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollUp" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveLeft" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveDown" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 }, { - "keyActionType": "mouse", - "mouseAction": "moveRight" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" }, { "keyActionType": "none" }, - { - "keyActionType": "mouse", - "mouseAction": "scrollDown" - }, { "keyActionType": "none" }, @@ -4877,44 +5277,27 @@ { "keyActionType": "none" }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 - }, { "keyActionType": "none" }, - { - "keyActionType": "mouse", - "mouseAction": "leftClick" - }, - { - "keyActionType": "mouse", - "mouseAction": "rightClick" - }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 + "keyActionType": "none" } ] - }, + } + ] + }, + { + "id": "mouse", + "modules": [ { - "id": 1, + "id": 0, "keyActions": [ { "keyActionType": "none" @@ -4938,16 +5321,20 @@ "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "scrollDown" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "scrollLeft" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "moveUp" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "scrollRight" }, { "keyActionType": "none" @@ -4959,24 +5346,23 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" + "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "scrollUp" }, { "keyActionType": "mouse", - "mouseAction": "rightClick" + "mouseAction": "moveLeft" }, { "keyActionType": "mouse", - "mouseAction": "middleClick" + "mouseAction": "moveDown" }, { "keyActionType": "mouse", - "mouseAction": "leftClick" + "mouseAction": "moveRight" }, { "keyActionType": "none" @@ -4985,9 +5371,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5004,293 +5388,166 @@ { "keyActionType": "none" }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "mouse", + "mouseAction": "leftClick" + }, { "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 1 + "modifierMask": 128 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 8 + "modifierMask": 64 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 4 + "modifierMask": 16 + }, + { + "keyActionType": "mouse", + "mouseAction": "rightClick" }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "decelerate" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "accelerate" + "keyActionType": "none" }, { "keyActionType": "none" - } - ] - } - ] - } - ] - }, - { - "isDefault": false, - "abbreviation": "QWM", - "name": "QWERTY for Mac", - "description": "QWERTY is the mother of all layouts. This is the Mac version.", - "layers": [ - { - "id": "base", - "modules": [ - { - "id": 0, - "keyActions": [ + }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 36 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 37 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 38 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 39 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 45 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 46 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 42 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 24 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 12 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 18 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 19 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 47 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 48 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 49 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 28 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 13 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 14 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 15 + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 51 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 52 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 40 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 11 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 17 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 16 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 54 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 55 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 56 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 44 + "keyActionType": "none" }, { "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 53 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 30 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 31 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 32 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 33 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 34 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 35 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 43 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 20 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 26 + "keyActionType": "mouse", + "mouseAction": "rightClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 8 + "keyActionType": "mouse", + "mouseAction": "middleClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 21 + "keyActionType": "mouse", + "mouseAction": "leftClick" }, { "keyActionType": "none" @@ -5298,105 +5555,72 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 23 - }, - { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" + "modifierMask": 2 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 4 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 22 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 7 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 9 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 10 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 2 + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 100 + "modifierMask": 4 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 29 + "modifierMask": 8 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 27 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 6 + "keyActionType": "mouse", + "mouseAction": "accelerate" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 25 + "keyActionType": "mouse", + "mouseAction": "decelerate" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 5 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 44 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" @@ -5406,105 +5630,67 @@ ] }, { - "id": "mod", + "id": "fn2", "modules": [ { "id": 0, "keyActions": [ { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 65 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 66 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 67 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 68 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 69 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 76 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 74 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 82 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 77 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 76 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 70 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 71 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 72 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 81 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 73 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5513,14 +5699,10 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5532,14 +5714,10 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 101 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5548,93 +5726,54 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 58 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 59 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 60 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 61 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 62 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 63 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80, - "modifierMask": 12 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 23, - "modifierMask": 8 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79, - "modifierMask": 12 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5646,27 +5785,16 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 57 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 43, - "modifierMask": 8 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79, - "modifierMask": 1 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5675,10 +5803,13 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 - }, + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "none" }, @@ -5689,10 +5820,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 26, - "modifierMask": 8 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5701,19 +5829,13 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5722,23 +5844,11 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "fn", - "modules": [ - { - "id": 0, - "keyActions": [ + }, { "keyActionType": "none" }, @@ -5761,14 +5871,10 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 205 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 233 + "keyActionType": "none" }, { "keyActionType": "none" @@ -5783,34 +5889,27 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 184, - "modifierMask": 12 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 182 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 234 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 181 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, { "keyActionType": "none" @@ -5825,447 +5924,525 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 226 + "keyActionType": "none" }, { "keyActionType": "none" }, { "keyActionType": "none" - }, + } + ] + } + ] + } + ] + }, + { + "isDefault": false, + "abbreviation": "DVO", + "name": "Dvorak for PC", + "description": "The Dvorak keyboard layout was designed with the goal of maximizing typing efficiency. This is the PC version.", + "layers": [ + { + "id": "base", + "modules": [ + { + "id": 0, + "keyActions": [ { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 32 + "scancode": 36 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 37 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 38 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 39 }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 47 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "scancode": 48 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "scancode": 42 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "none" + "scancode": 9 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWR" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 10 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVO" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 6 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COL" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 21 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 15 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVM" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 56 }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COM" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 46 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 49 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 7 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 11 }, { - "keyActionType": "none" - }, + "keyActionType": "keystroke", + "type": "basic", + "scancode": 23 + }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 17 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 22 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 45 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 40 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 5 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 16 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 26 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 25 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 29 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 2 + "scancode": 44 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 1 + "scancode": 64 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 4 + "scancode": 65 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 8 + "scancode": 66 }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 }, { - "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "mouse", - "modules": [ - { - "id": 0, - "keyActions": [ - { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 }, { - "keyActionType": "mouse", - "mouseAction": "scrollLeft" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 }, { - "keyActionType": "mouse", - "mouseAction": "moveUp" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 }, { - "keyActionType": "mouse", - "mouseAction": "scrollRight" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 1 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 1 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 }, { - "keyActionType": "mouse", - "mouseAction": "scrollDown" - }, + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 + } + ] + }, + { + "id": 1, + "keyActions": [ { - "keyActionType": "mouse", - "mouseAction": "moveLeft" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 53 }, { - "keyActionType": "mouse", - "mouseAction": "moveDown" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 30 }, { - "keyActionType": "mouse", - "mouseAction": "moveRight" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 31 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 32 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 33 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 34 }, { - "keyActionType": "mouse", - "mouseAction": "scrollUp" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 35 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 43 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 52 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 54 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 55 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 19 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 32 + "scancode": 28 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" }, { - "keyActionType": "mouse", - "mouseAction": "leftClick" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 4 }, { - "keyActionType": "mouse", - "mouseAction": "rightClick" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 18 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 8 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 128 + "scancode": 24 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 64 + "scancode": 12 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" + "modifierMask": 2 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 100 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 51 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 20 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 13 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 14 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 27 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 }, { "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "mouse", - "mouseAction": "rightClick" - }, - { - "keyActionType": "mouse", - "mouseAction": "middleClick" - }, - { - "keyActionType": "mouse", - "mouseAction": "leftClick" - }, - { - "keyActionType": "none" + "layer": "fn", + "switchLayerMode": "hold" }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 2 - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" + "scancode": 44 }, { - "keyActionType": "none" + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 1 + "scancode": 41 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 4 + "scancode": 58 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 8 + "scancode": 59 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 }, { - "keyActionType": "mouse", - "mouseAction": "decelerate" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 }, { - "keyActionType": "mouse", - "mouseAction": "accelerate" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 } ] } ] - } - ] - }, - { - "isDefault": true, - "abbreviation": "QWR", - "name": "QWERTY for PC", - "description": "QWERTY is the mother of all layouts. This is the PC version.", - "layers": [ + }, { - "id": "base", + "id": "mod", "modules": [ { "id": 0, @@ -6273,137 +6450,127 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 36 + "scancode": 64 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 37 + "scancode": 65 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 38 + "scancode": 66 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 39 + "scancode": 67 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 45 + "scancode": 68 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 46 + "scancode": 69 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 42 + "scancode": 76 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 24 + "scancode": 75 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 12 + "scancode": 74 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 18 + "scancode": 82 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 19 + "scancode": 77 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 47 + "scancode": 76 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 48 + "scancode": 70 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 49 + "scancode": 71 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 28 + "scancode": 72 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 13 + "scancode": 78 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 14 + "scancode": 80 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 15 + "scancode": 81 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 51 + "scancode": 79 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 52 + "scancode": 73 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 40 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 11 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 17 + "scancode": 41 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 16 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 54 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 55 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 56 + "scancode": 101 }, { "keyActionType": "keystroke", @@ -6414,19 +6581,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 44 - }, - { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" - }, - { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "keystroke", @@ -6442,104 +6597,146 @@ "keyActionType": "keystroke", "type": "basic", "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ + }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 53 + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 30 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 31 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 32 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 33 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 34 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 35 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 43 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 20 + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "keystroke", "type": "basic", - "scancode": 26 + "scancode": 41 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 8 + "scancode": 58 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 21 + "scancode": 59 }, { - "keyActionType": "none" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 23 + "scancode": 61 }, { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 4 + "scancode": 63 + }, + { + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 22 + "scancode": 41 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 7 + "scancode": 75, + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 9 + "scancode": 23, + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78, + "modifierMask": 1 + }, + { + "keyActionType": "none" }, { "keyActionType": "none" @@ -6547,42 +6744,60 @@ { "keyActionType": "keystroke", "type": "basic", - "scancode": 10 + "scancode": 57 }, { "keyActionType": "keystroke", "type": "basic", - "modifierMask": 2 + "scancode": 80, + "modifierMask": 5 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 100 + "scancode": 43, + "modifierMask": 4 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 29 + "scancode": 79, + "modifierMask": 5 + }, + { + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 27 + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 6 + "scancode": 75, + "modifierMask": 3 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 25 + "scancode": 26, + "modifierMask": 1 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 5 + "scancode": 78, + "modifierMask": 3 + }, + { + "keyActionType": "none" }, { "keyActionType": "keystroke", @@ -6599,128 +6814,4329 @@ "type": "basic", "modifierMask": 4 }, + { + "keyActionType": "none" + }, { "keyActionType": "switchLayer", - "layer": "fn", + "layer": "mod", "switchLayerMode": "hold" }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, { "keyActionType": "keystroke", - "type": "basic", - "scancode": 44 + "type": "media", + "scancode": 205 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 233 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "system", + "scancode": 130 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 182 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 234 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 181 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 226 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWR" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COL" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWM" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVM" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COM" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "mouse", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollUp" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollLeft" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveUp" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollRight" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollDown" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveLeft" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveDown" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveRight" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "mouse", + "mouseAction": "leftClick" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "mouse", + "mouseAction": "rightClick" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "rightClick" + }, + { + "keyActionType": "mouse", + "mouseAction": "middleClick" + }, + { + "keyActionType": "mouse", + "mouseAction": "leftClick" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "accelerate" + }, + { + "keyActionType": "mouse", + "mouseAction": "decelerate" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn2", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + } + ] + }, + { + "isDefault": false, + "abbreviation": "QWM", + "name": "QWERTY for Mac", + "description": "QWERTY is the mother of all layouts. This is the Mac version.", + "layers": [ + { + "id": "base", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 36 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 37 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 38 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 39 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 45 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 46 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 42 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 28 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 24 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 12 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 18 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 19 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 47 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 48 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 49 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 11 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 13 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 14 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 15 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 51 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 52 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 40 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 17 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 16 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 54 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 55 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 56 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 44 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 65 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 66 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 53 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 30 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 31 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 32 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 33 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 34 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 35 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 43 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 20 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 26 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 21 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 23 + }, + { + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 22 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 7 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 9 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 10 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 100 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 29 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 27 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 6 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 25 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 5 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 44 + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 58 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 + } + ] + } + ] + }, + { + "id": "mod", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 65 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 66 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 101 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 58 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 12 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 23, + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 12 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 57 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 43, + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 1 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 26, + "modifierMask": 8 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 205 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 233 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 184, + "modifierMask": 12 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 182 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 234 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 181 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 226 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWR" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVO" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COL" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVM" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COM" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "mouse", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollDown" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollLeft" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveUp" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollRight" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollUp" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveLeft" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveDown" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveRight" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "mouse", + "mouseAction": "leftClick" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "mouse", + "mouseAction": "rightClick" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "rightClick" + }, + { + "keyActionType": "mouse", + "mouseAction": "middleClick" + }, + { + "keyActionType": "mouse", + "mouseAction": "leftClick" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "accelerate" + }, + { + "keyActionType": "mouse", + "mouseAction": "decelerate" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn2", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + } + ] + }, + { + "isDefault": true, + "abbreviation": "QWR", + "name": "QWERTY for PC", + "description": "QWERTY is the mother of all layouts. This is the PC version.", + "layers": [ + { + "id": "base", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 36 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 37 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 38 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 39 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 45 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 46 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 42 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 28 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 24 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 12 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 18 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 19 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 47 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 48 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 49 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 11 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 13 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 14 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 15 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 51 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 52 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 40 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 17 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 16 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 54 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 55 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 56 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 44 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 65 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 66 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 53 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 30 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 31 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 32 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 33 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 34 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 35 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 43 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 20 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 26 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 21 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 23 + }, + { + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 22 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 7 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 9 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 10 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 100 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 29 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 27 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 6 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 25 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 5 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 44 + }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 58 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 + } + ] + } + ] + }, + { + "id": "mod", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 65 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 66 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 67 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 68 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 69 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 74 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 82 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 77 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 76 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 70 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 71 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 72 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 81 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 73 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 101 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 58 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 59 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 60 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 61 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 62 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 63 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 41 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75, + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 23, + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78, + "modifierMask": 1 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 57 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 80, + "modifierMask": 5 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 43, + "modifierMask": 4 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 79, + "modifierMask": 5 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 75, + "modifierMask": 3 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 26, + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "scancode": 78, + "modifierMask": 3 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "mod", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 205 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 233 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "system", + "scancode": 130 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 182 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 234 + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 181 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "media", + "scancode": 226 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 32 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 64 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 128 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 16 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + }, + { + "id": 1, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVO" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COL" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "QWM" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "DVM" + }, + { + "keyActionType": "switchKeymap", + "keymapAbbreviation": "COM" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 2 + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 1 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 8 + }, + { + "keyActionType": "keystroke", + "type": "basic", + "modifierMask": 4 + }, + { + "keyActionType": "switchLayer", + "layer": "fn", + "switchLayerMode": "hold" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "mouse", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollUp" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollLeft" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveUp" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollRight" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "none" + }, + { + "keyActionType": "mouse", + "mouseAction": "scrollDown" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveLeft" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveDown" + }, + { + "keyActionType": "mouse", + "mouseAction": "moveRight" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "mod", - "modules": [ - { - "id": 0, - "keyActions": [ + }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 65 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 66 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 67 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 68 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 69 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 76 + "modifierMask": 32 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 74 + "keyActionType": "mouse", + "mouseAction": "leftClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 82 + "keyActionType": "none" }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 77 + "modifierMask": 64 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 76 + "modifierMask": 128 }, { "keyActionType": "keystroke", "type": "basic", - "scancode": 70 + "modifierMask": 16 }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 71 + "keyActionType": "mouse", + "mouseAction": "rightClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 72 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 81 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 73 + "keyActionType": "none" }, { "keyActionType": "none" @@ -6729,14 +11145,10 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { "keyActionType": "none" @@ -6748,14 +11160,10 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 101 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 + "keyActionType": "none" }, { "keyActionType": "none" @@ -6764,27 +11172,19 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 + "keyActionType": "none" } ] }, @@ -6792,65 +11192,34 @@ "id": 1, "keyActions": [ { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 58 - }, - { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 59 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 60 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 61 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 62 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 63 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 41 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 23, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78, - "modifierMask": 1 + "keyActionType": "none" }, { "keyActionType": "none" @@ -6862,30 +11231,24 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 57 + "keyActionType": "switchLayer", + "layer": "mouse", + "switchLayerMode": "holdAndDoubleTapToggle" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 80, - "modifierMask": 5 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 43, - "modifierMask": 4 + "keyActionType": "mouse", + "mouseAction": "rightClick" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 79, - "modifierMask": 5 + "keyActionType": "mouse", + "mouseAction": "middleClick" }, { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "leftClick" }, { "keyActionType": "none" @@ -6902,22 +11265,13 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 75, - "modifierMask": 3 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 26, - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "scancode": 78, - "modifierMask": 3 + "keyActionType": "none" }, { "keyActionType": "none" @@ -6941,56 +11295,15 @@ "keyActionType": "none" }, { - "keyActionType": "none" - }, - { - "keyActionType": "switchLayer", - "layer": "mod", - "switchLayerMode": "hold" - }, - { - "keyActionType": "none" - } - ] - } - ] - }, - { - "id": "fn", - "modules": [ - { - "id": 0, - "keyActions": [ - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" - }, - { - "keyActionType": "none" + "keyActionType": "mouse", + "mouseAction": "accelerate" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 205 + "keyActionType": "mouse", + "mouseAction": "decelerate" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 233 + "keyActionType": "none" }, { "keyActionType": "none" @@ -7005,27 +11318,32 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "system", - "scancode": 130 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 182 + "keyActionType": "none" + } + ] + } + ] + }, + { + "id": "fn2", + "modules": [ + { + "id": 0, + "keyActions": [ + { + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 234 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 181 + "keyActionType": "none" }, { "keyActionType": "none" @@ -7046,9 +11364,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "media", - "scancode": 226 + "keyActionType": "none" }, { "keyActionType": "none" @@ -7057,9 +11373,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 + "keyActionType": "none" }, { "keyActionType": "none" @@ -7071,30 +11385,17 @@ "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ + "keyActionType": "none" + }, { "keyActionType": "none" }, @@ -7102,24 +11403,19 @@ "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVO" + "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COL" + "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "QWM" + "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "DVM" + "keyActionType": "none" }, { - "keyActionType": "switchKeymap", - "keymapAbbreviation": "COM" + "keyActionType": "none" }, { "keyActionType": "none" @@ -7142,6 +11438,11 @@ { "keyActionType": "none" }, + { + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" + }, { "keyActionType": "none" }, @@ -7164,9 +11465,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { "keyActionType": "none" @@ -7187,24 +11486,16 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { - "keyActionType": "switchLayer", - "layer": "fn", - "switchLayerMode": "hold" + "keyActionType": "none" }, { "keyActionType": "none" @@ -7216,14 +11507,9 @@ "keyActionType": "none" } ] - } - ] - }, - { - "id": "mouse", - "modules": [ + }, { - "id": 0, + "id": 1, "keyActions": [ { "keyActionType": "none" @@ -7247,16 +11533,10 @@ "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollLeft" - }, - { - "keyActionType": "mouse", - "mouseAction": "moveUp" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollRight" + "keyActionType": "none" }, { "keyActionType": "none" @@ -7271,20 +11551,16 @@ "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollUp" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveLeft" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveDown" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "moveRight" + "keyActionType": "none" }, { "keyActionType": "none" @@ -7296,8 +11572,7 @@ "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "scrollDown" + "keyActionType": "none" }, { "keyActionType": "none" @@ -7315,44 +11590,28 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 32 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "leftClick" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "rightClick" + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 64 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 128 + "keyActionType": "switchLayer", + "layer": "fn2", + "switchLayerMode": "hold" }, - { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 16 - } - ] - }, - { - "id": 1, - "keyActions": [ { "keyActionType": "none" }, @@ -7373,7 +11632,25 @@ }, { "keyActionType": "none" - }, + } + ] + } + ] + } + ] + }, + { + "isDefault": false, + "abbreviation": "EMP", + "name": "Empty", + "description": "This is an empty keymap. Let's start from scratch!", + "layers": [ + { + "id": "base", + "modules": [ + { + "id": 0, + "keyActions": [ { "keyActionType": "none" }, @@ -7395,25 +11672,14 @@ { "keyActionType": "none" }, - { - "keyActionType": "switchLayer", - "layer": "mouse", - "switchLayerMode": "holdAndDoubleTapToggle" - }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "rightClick" - }, - { - "keyActionType": "mouse", - "mouseAction": "middleClick" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "leftClick" + "keyActionType": "none" }, { "keyActionType": "none" @@ -7422,9 +11688,7 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 2 + "keyActionType": "none" }, { "keyActionType": "none" @@ -7445,52 +11709,26 @@ "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 1 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 8 + "keyActionType": "none" }, { - "keyActionType": "keystroke", - "type": "basic", - "modifierMask": 4 + "keyActionType": "none" }, { "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "decelerate" + "keyActionType": "none" }, { - "keyActionType": "mouse", - "mouseAction": "accelerate" + "keyActionType": "none" }, { "keyActionType": "none" - } - ] - } - ] - } - ] - }, - { - "isDefault": false, - "abbreviation": "EMP", - "name": "Empty", - "description": "This is an empty keymap. Let's start from scratch!", - "layers": [ - { - "id": "base", - "modules": [ - { - "id": 0, - "keyActions": [ + }, { "keyActionType": "none" }, @@ -7580,7 +11818,12 @@ }, { "keyActionType": "none" - }, + } + ] + }, + { + "id": 1, + "keyActions": [ { "keyActionType": "none" }, @@ -7595,12 +11838,7 @@ }, { "keyActionType": "none" - } - ] - }, - { - "id": 1, - "keyActions": [ + }, { "keyActionType": "none" }, diff --git a/packages/uhk-web/src/app/shared.module.ts b/packages/uhk-web/src/app/shared.module.ts index 2f96fab262c..2c999e62287 100644 --- a/packages/uhk-web/src/app/shared.module.ts +++ b/packages/uhk-web/src/app/shared.module.ts @@ -22,11 +22,13 @@ import { AddOnComponent } from './components/add-on'; import { BackToComponent } from './components/back-to/back-to.component'; import CircleTooltipComponent from './components/circle-tooltip/circle-tooltip.component'; import { FadeTimeoutSliderComponent } from './components/device/led-settings/fade-timeout-slider.component'; +import { DonglePairingPanelComponent } from './components/device/dongle-pairing-panel/dongle-pairing-panel.component'; import { KeyboardSliderComponent } from './components/keyboard/slider'; import { AdvancedSettingsPageComponent, DeviceConfigurationComponent, DeviceFirmwareComponent, + HostConnectionsComponent, FunctionalBacklightColorComponent, MouseSpeedComponent, LEDSettingsComponent, @@ -94,7 +96,14 @@ import { appRoutingProviders, routing } from './app.routes'; import { UhkAgentIconComponent } from './components/uhk-icon/uhk-agent-icon.component'; import { CancelableDirective, ExternalUrlDirective } from './directives'; -import { AsHexColorPipe, NewLineToBrPipe, SafeHtmlPipe, SafeStylePipe, SafeUrlPipe } from './pipes'; +import { + AsHexColorPipe, + HostConnectionTypeLabelPipePipe, + NewLineToBrPipe, + SafeHtmlPipe, + SafeStylePipe, + SafeUrlPipe, +} from './pipes'; import { CaptureService } from './services/capture.service'; import { MapperService } from './services/mapper.service'; @@ -163,6 +172,7 @@ import appInitFactory from './services/app-init-factory'; AdvancedSettingsPageComponent, AsHexColorPipe, BackToComponent, + HostConnectionTypeLabelPipePipe, NewLineToBrPipe, SafeHtmlPipe, MainAppComponent, @@ -170,6 +180,7 @@ import appInitFactory from './services/app-init-factory'; CircleTooltipComponent, DeviceConfigurationComponent, DeviceFirmwareComponent, + HostConnectionsComponent, FadeTimeoutSliderComponent, FirmwareFileUploadComponent, FirmwareUpgradePanelComponent, @@ -179,6 +190,7 @@ import appInitFactory from './services/app-init-factory'; KeymapEditComponent, KeymapHeaderComponent, NotificationComponent, + DonglePairingPanelComponent, SvgIconTextKeyComponent, SvgKeyboardKeyComponent, SvgKeystrokeKeyComponent, diff --git a/packages/uhk-web/src/app/store/actions/advance-settings.action.ts b/packages/uhk-web/src/app/store/actions/advance-settings.action.ts index cb8bf00cb44..fbb9eb1e605 100644 --- a/packages/uhk-web/src/app/store/actions/advance-settings.action.ts +++ b/packages/uhk-web/src/app/store/actions/advance-settings.action.ts @@ -2,6 +2,9 @@ import { Action } from '@ngrx/store'; export enum ActionTypes { i2cWatchdogCounterChanged = '[advanceSettings] i2c watchdog counter changed', + startLeftHalfPairing = '[advanceSettings] start left half pairing', + leftHalfPairingSuccess = '[advanceSettings] left half pairing success', + leftHalfPairingFailed = '[advanceSettings] left half pairing failed', toggleI2CDebugging = '[advanceSettings] toggle I2c debugging', toggleI2CDebuggingRingBell = '[advanceSettings] toggle I2c debugging ring bell', showAdvancedSettingsMenu = '[advanceSettings] show menu', @@ -21,6 +24,23 @@ export class ToggleI2cDebuggingRingBellAction implements Action { type = ActionTypes.toggleI2CDebuggingRingBell; } +export class StartLeftHalfPairingAction implements Action { + type = ActionTypes.startLeftHalfPairing; +} + +export class LeftHalfPairingSuccessAction implements Action { + type = ActionTypes.leftHalfPairingSuccess; + + // the payload is the left half BLE Address + constructor(public payload: string) {} +} + +export class LeftHalfPairingFailedAction implements Action { + type = ActionTypes.leftHalfPairingFailed; + + constructor(public payload: string) {} +} + export class ShowAdvancedSettingsMenuAction implements Action { type = ActionTypes.showAdvancedSettingsMenu; @@ -31,4 +51,7 @@ export type Actions = | ToggleI2cDebuggingAction | ToggleI2cDebuggingRingBellAction | ShowAdvancedSettingsMenuAction + | StartLeftHalfPairingAction + | LeftHalfPairingSuccessAction + | LeftHalfPairingFailedAction ; diff --git a/packages/uhk-web/src/app/store/actions/device.ts b/packages/uhk-web/src/app/store/actions/device.ts index abefaf824ab..0fadf100f70 100644 --- a/packages/uhk-web/src/app/store/actions/device.ts +++ b/packages/uhk-web/src/app/store/actions/device.ts @@ -4,12 +4,14 @@ import { ChangeKeyboardLayoutIpcResponse, ConfigSizesInfo, DeviceConnectionState, + DeviceVersionInformation, FirmwareJson, FirmwareUpgradeFailReason, FirmwareUpgradeIpcResponse, HardwareModules, IpcResponse, - KeyboardLayout + KeyboardLayout, + UHK_DEVICE_IDS_TYPE, } from 'uhk-common'; import { FirmwareUpgradeError } from '../../models/firmware-upgrade-error'; import { UpdateFirmwareWithPayload } from '../../models'; @@ -18,6 +20,7 @@ import { UpdateFirmwareSuccessPayload } from '../../models/update-firmware-succe export enum ActionTypes { ChangeKeyboardLayout = '[device] change keyboard layout', ChangeKeyboardLayoutReply = '[device] change keyboard layout reply', + DongleVersionInfoLoaded = '[device] dongle version info loaded', SetPrivilegeOnLinux = '[device] set privilege on linux', SetPrivilegeOnLinuxReply = '[device] set privilege on linux reply', ConnectionStateChanged = '[device] connection state changed', @@ -62,6 +65,12 @@ export class ChangeKeyboardLayoutAction implements Action { constructor(public layout: KeyboardLayout) {} } +export class DongleVersionInfoLoadedAction implements Action { + type = ActionTypes.DongleVersionInfoLoaded; + + constructor(public payload: DeviceVersionInformation) {} +} + export class ChangeKeyboardLayoutReplyAction implements Action { type = ActionTypes.ChangeKeyboardLayoutReply; @@ -219,6 +228,8 @@ export class RestoreUserConfigurationFromBackupSuccessAction implements Action { export class RecoveryDeviceAction implements Action { type = ActionTypes.RecoveryDevice; + + constructor(public payload: UHK_DEVICE_IDS_TYPE) {} } export class RecoveryDeviceReplyAction implements Action { @@ -277,6 +288,7 @@ export class SkipFirmwareUpgradeAction implements Action { export type Actions = ChangeKeyboardLayoutAction | ChangeKeyboardLayoutReplyAction + | DongleVersionInfoLoadedAction | SetPrivilegeOnLinuxAction | SetPrivilegeOnLinuxReplyAction | ConnectionStateChangedAction diff --git a/packages/uhk-web/src/app/store/actions/dongle-pairing.action.ts b/packages/uhk-web/src/app/store/actions/dongle-pairing.action.ts new file mode 100644 index 00000000000..57e44db9581 --- /dev/null +++ b/packages/uhk-web/src/app/store/actions/dongle-pairing.action.ts @@ -0,0 +1,56 @@ +import { Action } from '@ngrx/store'; +import { DeleteHostConnectionPayload } from '../../models/index'; + +export enum ActionTypes { + StartDonglePairing = '[dongle-pairing] start dongle pairing', + DeleteHostConnection = '[dongle-pairing] delete host connection', + DeleteHostConnectionSuccess = '[dongle-pairing] delete host connection success', + DeleteHostConnectionFailed = '[dongle-pairing] delete host connection failed', + DonglePairingSuccess = '[dongle-pairing] dongle pairing success', + DonglePairingFailed = '[dongle-pairing] dongle pairing failed', +} + +export class StartDonglePairingAction implements Action { + type = ActionTypes.StartDonglePairing; +} + +export class DeleteHostConnectionAction implements Action { + type = ActionTypes.DeleteHostConnection; + + constructor(public payload: DeleteHostConnectionPayload) {} +} + +export class DeleteHostConnectionSuccessAction implements Action { + type = ActionTypes.DeleteHostConnectionSuccess; + + // the index of the deleted host connection and the BLE address + constructor(public payload: {index: number; address: string}) {} +} + +export class DeleteHostConnectionFailedAction implements Action { + type = ActionTypes.DeleteHostConnectionFailed; + + constructor(public payload: string) {} +} + +export class DonglePairingSuccessAction implements Action { + type = ActionTypes.DonglePairingSuccess; + + // the payload is the dongle BLE Address + constructor(public payload: string) {} +} + +export class DonglePairingFailedAction implements Action { + type = ActionTypes.DonglePairingFailed; + + constructor(public payload: string) {} +} + +export type Actions + = StartDonglePairingAction + | DeleteHostConnectionAction + | DeleteHostConnectionSuccessAction + | DeleteHostConnectionFailedAction + | DonglePairingSuccessAction + | DonglePairingFailedAction + ; diff --git a/packages/uhk-web/src/app/store/actions/user-config.ts b/packages/uhk-web/src/app/store/actions/user-config.ts index 02f0fefda73..1a2374400e1 100644 --- a/packages/uhk-web/src/app/store/actions/user-config.ts +++ b/packages/uhk-web/src/app/store/actions/user-config.ts @@ -1,6 +1,6 @@ import { Action } from '@ngrx/store'; import { RgbColor } from 'colord'; -import { UserConfiguration, ConfigurationReply } from 'uhk-common'; +import { HostConnection, UserConfiguration, ConfigurationReply } from 'uhk-common'; import { ApplyUserConfigurationFromFilePayload, @@ -26,8 +26,11 @@ export enum ActionTypes { SaveUserConfigInBinFile = '[user-config] Save User Config in binary file', ToggleColorFromBacklightingColorPalette = '[user-config] toggle color from the backlighting color palette', LoadResetUserConfiguration = '[user-config] Load reset user configuration', + RenameHostConnection = '[user-config] Rename host connection', RenameUserConfiguration = '[user-config] Rename user configuration', + ReorderHostConnections = '[user-config] Reorder host connections', SelectModuleConfiguration = '[user-config] Select module configuration', + SetHostConnectionSwitchover = '[user-config] set host connection switchover', SetModuleConfigurationValue = '[user-config] Set module configuration value', SetUserConfigurationRgbValue = '[user-config] Set user configuration RGB value', SetUserConfigurationValue = '[user-config] Set user configuration value', @@ -123,6 +126,13 @@ export class LoadResetUserConfigurationAction implements Action { } } +export class RenameHostConnectionAction implements Action { + type = ActionTypes.RenameHostConnection; + + constructor(public payload: {index: number, newName: string}) { + } +} + export class RenameUserConfigurationAction implements Action { type = ActionTypes.RenameUserConfiguration; @@ -130,6 +140,14 @@ export class RenameUserConfigurationAction implements Action { } } +export class ReorderHostConnectionsAction implements Action { + type = ActionTypes.ReorderHostConnections; + + constructor(public payload: HostConnection[]) { + } +} + + export class SelectModuleConfigurationAction implements Action { type = ActionTypes.SelectModuleConfiguration; @@ -137,6 +155,13 @@ export class SelectModuleConfigurationAction implements Action { } } +export class SetHostConnectionSwitchoverAction implements Action { + type = ActionTypes.SetHostConnectionSwitchover; + + constructor(public payload: {index: number, checked: boolean}) { + } +} + export class SetModuleConfigurationValueAction implements Action { type = ActionTypes.SetModuleConfigurationValue; @@ -190,8 +215,11 @@ export type Actions | SaveUserConfigInBinaryFileAction | LoadResetUserConfigurationAction | PreviewUserConfigurationAction + | RenameHostConnectionAction | RenameUserConfigurationAction + | ReorderHostConnectionsAction | SelectModuleConfigurationAction + | SetHostConnectionSwitchoverAction | SetModuleConfigurationValueAction | SetUserConfigurationRgbValueAction | SetUserConfigurationValueAction diff --git a/packages/uhk-web/src/app/store/effects/advanced-settings.effects.ts b/packages/uhk-web/src/app/store/effects/advanced-settings.effects.ts index d82d1bee584..0632eecc6fe 100644 --- a/packages/uhk-web/src/app/store/effects/advanced-settings.effects.ts +++ b/packages/uhk-web/src/app/store/effects/advanced-settings.effects.ts @@ -5,7 +5,7 @@ import { tap, withLatestFrom } from 'rxjs/operators'; import { DeviceRendererService } from '../../services/device-renderer.service'; import { ActionTypes } from '../actions/advance-settings.action'; -import { AppState, getIsI2cDebuggingEnabled, isI2cDebuggingRingBellEnabled } from '../index'; +import { AppState, getIsI2cDebuggingEnabled } from '../index'; @Injectable() export class AdvancedSettingsEffects { @@ -20,6 +20,16 @@ export class AdvancedSettingsEffects { {dispatch: false} ); + startLeftHalfPairing$ = createEffect(() => this.actions$ + .pipe( + ofType(ActionTypes.startLeftHalfPairing), + tap(()=> { + this.deviceRendererService.startLeftHalfPairing(); + }) + ), + {dispatch: false}, + ); + constructor(private actions$: Actions, private store: Store, private deviceRendererService: DeviceRendererService, diff --git a/packages/uhk-web/src/app/store/effects/default-user-configuration.effect.ts b/packages/uhk-web/src/app/store/effects/default-user-configuration.effect.ts index 5c12d8edfe9..4789fdc06cf 100644 --- a/packages/uhk-web/src/app/store/effects/default-user-configuration.effect.ts +++ b/packages/uhk-web/src/app/store/effects/default-user-configuration.effect.ts @@ -1,7 +1,9 @@ import { Injectable } from '@angular/core'; import { Actions, createEffect, ofType } from '@ngrx/effects'; import { ROUTER_NAVIGATED } from '@ngrx/router-store'; -import { distinctUntilChanged, filter, map } from 'rxjs/operators'; +import { Store } from '@ngrx/store'; +import { distinctUntilChanged, filter, map, withLatestFrom } from 'rxjs/operators'; +import { UHK_80_DEVICE } from 'uhk-common'; import { ActionTypes, AddKeymapSelectedAction, @@ -10,6 +12,7 @@ import { } from '../actions/default-user-configuration.actions'; import { DefaultUserConfigurationService } from '../../services/default-user-configuration.service'; import { RouterNavigatedAction } from '@ngrx/router-store/src/actions'; +import { AppState, getConnectedDevice } from '../index'; import { RouterState } from '../router-util'; @Injectable() @@ -17,7 +20,14 @@ export class DefaultUserConfigurationEffect { loadDefaultUserConfiguration$ = createEffect(() => this.actions$ .pipe( ofType(ActionTypes.LoadDefaultUserConfiguration), - map(() => new LoadDefaultUserConfigurationSuccessAction(this.defaultUserConfigurationService.getDefault())) + withLatestFrom(this.store.select(getConnectedDevice)), + map(([_, connectedDevice]) => { + if (connectedDevice?.id === UHK_80_DEVICE.id) { + return new LoadDefaultUserConfigurationSuccessAction(this.defaultUserConfigurationService.getDefault80()); + } + + return new LoadDefaultUserConfigurationSuccessAction(this.defaultUserConfigurationService.getDefault60()); + }) ) ); @@ -33,6 +43,7 @@ export class DefaultUserConfigurationEffect { ); constructor(private actions$: Actions, - private defaultUserConfigurationService: DefaultUserConfigurationService) { - } + private defaultUserConfigurationService: DefaultUserConfigurationService, + private store: Store, + ) {} } diff --git a/packages/uhk-web/src/app/store/effects/device.ts b/packages/uhk-web/src/app/store/effects/device.ts index 08eb281bd72..b22314c1953 100644 --- a/packages/uhk-web/src/app/store/effects/device.ts +++ b/packages/uhk-web/src/app/store/effects/device.ts @@ -14,6 +14,8 @@ import { NotificationType, shouldUpgradeAgent, shouldUpgradeFirmware, + UdevRulesInfo, + UHK_80_DEVICE, UserConfiguration } from 'uhk-common'; @@ -54,7 +56,8 @@ import { AppState, deviceConnected, disableUpdateAgentProtection, - getDeviceId, + getConnectedDevice, + getHardwareConfiguration, getRouterState, getShowFirmwareUpgradePanel, getUserConfiguration @@ -78,9 +81,9 @@ export class DeviceEffects { changeKeyboardLayout$ = createEffect(() => this.actions$ .pipe( ofType(ActionTypes.ChangeKeyboardLayout), - withLatestFrom(this.store.select(getDeviceId)), - tap(([action, deviceId]) => { - this.deviceRendererService.changeKeyboardLayout(action.layout, deviceId); + withLatestFrom(this.store.select(getHardwareConfiguration)), + tap(([action, hardwareConfiguration]) => { + this.deviceRendererService.changeKeyboardLayout(action.layout, hardwareConfiguration); }) ), {dispatch:false} @@ -121,11 +124,11 @@ export class DeviceEffects { return this.router.navigate(['/multi-device']); } - if (!state.hasPermission) { + if (!state.hasPermission || state.udevRulesInfo === UdevRulesInfo.Different) { return this.router.navigate(['/privilege']); } - if (state.bootloaderActive) { + if (state.bootloaderActive || state.leftHalfBootloaderActive || state.dongle.bootloaderActive) { return this.router.navigate(['/recovery-device']); } @@ -161,14 +164,16 @@ export class DeviceEffects { return prevConnected === currConnected && prevAction.payload.hasPermission === currAction.payload.hasPermission && - prevAction.payload.communicationInterfaceAvailable === currAction.payload.communicationInterfaceAvailable; + prevAction.payload.communicationInterfaceAvailable === currAction.payload.communicationInterfaceAvailable && + prevAction.payload.udevRulesInfo === currAction.payload.udevRulesInfo; }), mergeMap(([action, route, connected]) => { const payload = action.payload; if (connected && payload.hasPermission - && payload.communicationInterfaceAvailable) { + && payload.communicationInterfaceAvailable + && (payload.udevRulesInfo === UdevRulesInfo.Ok || payload.udevRulesInfo === UdevRulesInfo.UdevDirNotExists)) { const result: Array = [ new ReadConfigSizesAction(), @@ -287,8 +292,17 @@ export class DeviceEffects { resetUserConfiguration$ = createEffect(() => this.actions$ .pipe( ofType(ActionTypes.ResetUserConfiguration), - switchMap(() => { - const config = this.defaultUserConfigurationService.getDefault().clone(); + withLatestFrom(this.store.select(getConnectedDevice)), + switchMap(([, uhkDeviceProduct]) => { + let config: UserConfiguration; + + if (uhkDeviceProduct?.id === UHK_80_DEVICE.id) { + config = this.defaultUserConfigurationService.getDefault80().clone(); + } + else { + config = this.defaultUserConfigurationService.getDefault60().clone(); + } + config.keymaps = config.keymaps.filter(keymap => keymap.abbreviation !== 'EMP'); return of(new LoadResetUserConfigurationAction(config)); }) @@ -355,7 +369,6 @@ export class DeviceEffects { if (response.success) { return of(new UpdateFirmwareSuccessAction({ firmwareDowngraded: response.firmwareDowngraded, - hardwareModules: response.modules, userConfigSaved: response.userConfigSaved })); } @@ -366,7 +379,6 @@ export class DeviceEffects { return of(new UpdateFirmwareFailedAction({ error: response.error, - modules: response.modules })); }) ) @@ -383,7 +395,7 @@ export class DeviceEffects { .pipe( ofType(ActionTypes.RecoveryDevice), withLatestFrom(this.store.select(getUserConfiguration)), - tap(([, userConfig]) => this.deviceRendererService.recoveryDevice(userConfig)) + tap(([action, userConfig]) => this.deviceRendererService.recoveryDevice(userConfig, action.payload)) ), { dispatch: false } ); @@ -398,7 +410,6 @@ export class DeviceEffects { return [ new UpdateFirmwareSuccessAction({ firmwareDowngraded: response.firmwareDowngraded, - hardwareModules: response.modules, userConfigSaved: response.userConfigSaved }), new StartConnectionPollerAction() @@ -408,7 +419,6 @@ export class DeviceEffects { return [ new UpdateFirmwareFailedAction({ error: response.error, - modules: response.modules }) ]; }) diff --git a/packages/uhk-web/src/app/store/effects/dongle-pairing.effect.ts b/packages/uhk-web/src/app/store/effects/dongle-pairing.effect.ts new file mode 100644 index 00000000000..6f764c25f1a --- /dev/null +++ b/packages/uhk-web/src/app/store/effects/dongle-pairing.effect.ts @@ -0,0 +1,92 @@ +import { Injectable } from '@angular/core'; +import { Actions, createEffect, ofType} from '@ngrx/effects'; +import { Store } from '@ngrx/store'; +import { map, tap, withLatestFrom } from 'rxjs/operators'; +import { HostConnections } from 'uhk-common'; +import { NotificationType, runInElectron } from 'uhk-common'; + +import { DeviceRendererService } from '../../services/device-renderer.service'; +import { EmptyAction, ShowNotificationAction } from '../actions/app'; +import { SaveConfigurationAction } from '../actions/device'; +import { + ActionTypes, + DeleteHostConnectionAction, + DeleteHostConnectionFailedAction, + DeleteHostConnectionSuccessAction, + DonglePairingFailedAction, + DonglePairingSuccessAction, +} from '../actions/dongle-pairing.action'; +import { AppState, getDongle } from '../index'; + +@Injectable() +export class DonglePairingEffect { + + deleteHostConnection$ = createEffect(() => this.actions$ + .pipe( + ofType(ActionTypes.DeleteHostConnection), + withLatestFrom(this.store.select(getDongle)), + map(([action, dongle ]) => { + if (runInElectron()) { + const isConnectedDongleAddress = action.payload.hostConnection.type === HostConnections.Dongle && dongle?.bleAddress === action.payload.hostConnection.address; + this.deviceRendererService.deleteHostConnection(action.payload, isConnectedDongleAddress); + return new EmptyAction(); + } else { + return new DeleteHostConnectionSuccessAction({ + index: action.payload.index, + address: action.payload.hostConnection.address, + }); + } + }) + )); + + deleteHostConnectionSuccess$ = createEffect(() => this.actions$ + .pipe( + ofType(ActionTypes.DeleteHostConnectionSuccess), + map(() => { + return new SaveConfigurationAction(true); + }) + )); + + deleteHostConnectionFailed$ = createEffect(() => this.actions$ + .pipe( + ofType(ActionTypes.DeleteHostConnectionFailed), + map((action) => { + return new ShowNotificationAction({ + type: NotificationType.Error, + message: action.payload + }); + }), + )); + + startDonglePairing$ = createEffect(() => this.actions$ + .pipe( + ofType(ActionTypes.StartDonglePairing), + tap(() => this.deviceRendererService.startDonglePairing()), + ), + { dispatch: false } + ); + + donglePairingFailed$ = createEffect(() => this.actions$ + .pipe( + ofType(ActionTypes.DonglePairingFailed), + map(action => { + return new ShowNotificationAction({ + type: NotificationType.Error, + message: action.payload + }); + }) + )); + + donglePairingSuccess$ = createEffect(() => this.actions$ + .pipe( + ofType(ActionTypes.DonglePairingSuccess), + map(() => { + return new SaveConfigurationAction(true); + }) + )); + + constructor(private actions$: Actions, + private deviceRendererService: DeviceRendererService, + private store: Store, + ){} +} diff --git a/packages/uhk-web/src/app/store/effects/index.ts b/packages/uhk-web/src/app/store/effects/index.ts index 45aa13d9848..d7ca60da894 100644 --- a/packages/uhk-web/src/app/store/effects/index.ts +++ b/packages/uhk-web/src/app/store/effects/index.ts @@ -2,6 +2,7 @@ import { AdvancedSettingsEffects } from './advanced-settings.effects'; import { DefaultUserConfigurationEffect } from './default-user-configuration.effect'; import { DeviceEffects } from './device'; import { AutoUpdateSettingsEffects } from './auto-update-settings'; +import { DonglePairingEffect } from './dongle-pairing.effect'; import { MacroEffects } from './macro'; import { KeymapEffects } from './keymap'; import { UserConfigEffects } from './user-config'; @@ -21,6 +22,7 @@ export const effects = [ AdvancedSettingsEffects, ApplicationEffects, AppUpdateEffect, + DonglePairingEffect, DefaultUserConfigurationEffect, UserConfigEffects, KeymapEffects, diff --git a/packages/uhk-web/src/app/store/effects/user-config.ts b/packages/uhk-web/src/app/store/effects/user-config.ts index 3f0626b7e71..0df2e8444d3 100644 --- a/packages/uhk-web/src/app/store/effects/user-config.ts +++ b/packages/uhk-web/src/app/store/effects/user-config.ts @@ -35,6 +35,7 @@ import { import { DataStorageRepositoryService } from '../../services/datastorage-repository.service'; import { DefaultUserConfigurationService } from '../../services/default-user-configuration.service'; +import { Uhk80MigratorService } from '../../services/uhk80-migrator.service'; import { getVersions } from '../../util'; import { AppState, getPrevUserConfiguration, getRouterState, getUserConfiguration } from '../index'; import * as Keymaps from '../actions/keymap'; @@ -81,7 +82,8 @@ export class UserConfigEffects { Macros.ActionTypes.AddAction, Macros.ActionTypes.SaveAction, Macros.ActionTypes.DeleteAction, Macros.ActionTypes.ReorderAction, Macros.ActionTypes.DuplicateAction, ActionTypes.RenameUserConfiguration, ActionTypes.SetUserConfigurationValue, ActionTypes.SetUserConfigurationRgbValue, - ActionTypes.RecoverLEDSpaces, ActionTypes.SetModuleConfigurationValue + ActionTypes.RecoverLEDSpaces, ActionTypes.SetModuleConfigurationValue, + ActionTypes.ReorderHostConnections, ActionTypes.RenameHostConnection, ActionTypes.SetHostConnectionSwitchover, ), withLatestFrom(this.store.select(getUserConfiguration), this.store.select(getPrevUserConfiguration)), mergeMap(([action, config, prevUserConfiguration]) => { @@ -241,7 +243,7 @@ export class UserConfigEffects { map(action => action.payload), map((payload: LoadUserConfigurationFromFilePayload) => { try { - const userConfig = new UserConfiguration(); + let userConfig = new UserConfiguration(); if (payload.uploadFileData.filename.endsWith('.bin')) { userConfig.fromBinary(UhkBuffer.fromArray(payload.uploadFileData.data)); @@ -252,6 +254,8 @@ export class UserConfigEffects { } if (userConfig.userConfigMajorVersion) { + userConfig = this.uhk80MigratorService.migrate(userConfig); + if (payload.autoSave) { return new ApplyUserConfigurationFromFileAction({ userConfig, @@ -345,7 +349,9 @@ export class UserConfigEffects { private defaultUserConfigurationService: DefaultUserConfigurationService, private deviceRendererService: DeviceRendererService, private logService: LogService, - private router: Router) { + private router: Router, + private uhk80MigratorService: Uhk80MigratorService, + ) { } private getUserConfiguration(): Observable { @@ -356,13 +362,13 @@ export class UserConfigEffects { if (configJsonObject) { if (configJsonObject.userConfigMajorVersion === - this.defaultUserConfigurationService.getDefault().userConfigMajorVersion) { + this.defaultUserConfigurationService.getDefault60().userConfigMajorVersion) { config = new UserConfiguration().fromJsonObject(configJsonObject); } } if (!config) { - config = this.defaultUserConfigurationService.getDefault(); + config = this.defaultUserConfigurationService.getDefault60(); } return config; diff --git a/packages/uhk-web/src/app/store/index.ts b/packages/uhk-web/src/app/store/index.ts index 9bd00efe81b..36126c02e1c 100644 --- a/packages/uhk-web/src/app/store/index.ts +++ b/packages/uhk-web/src/app/store/index.ts @@ -2,36 +2,35 @@ import { routerReducer, RouterReducerState } from '@ngrx/router-store'; import { ActionReducerMap, createSelector, MetaReducer } from '@ngrx/store'; import { storeFreeze } from 'ngrx-store-freeze'; import { gt } from 'semver'; -import { - BacklightingMode, - Constants, - UHK_DEVICES, - UHK_60_V2_DEVICE, - FirmwareRepoInfo, - HardwareConfiguration, - HistoryFileInfo as CommonHistoryFileInfo, - LayerName, - LEFT_KEY_CLUSTER_MODULE, - RIGHT_TRACKPOINT_MODULE, - UHK_OFFICIAL_FIRMWARE_REPO -} from 'uhk-common'; import { ApplicationSettings, AppTheme, AppThemeSelect, + BacklightingMode, + Constants, createMd5Hash, + FirmwareRepoInfo, getEmptyKeymap, - getMd5HashFromFilename, + HardwareConfiguration, HardwareModules, + HistoryFileInfo as CommonHistoryFileInfo, + HostConnections, isVersionGte, Keymap, + LayerName, LEFT_HALF_MODULE, + LEFT_KEY_CLUSTER_MODULE, LeftSlotModules, PlayMacroAction, + RIGHT_TRACKPOINT_MODULE, RightSlotModules, - UhkThemeColors, UHK_60_DEVICE, + UHK_60_V2_DEVICE, + UHK_80_DEVICE, + UHK_DEVICES, + UHK_OFFICIAL_FIRMWARE_REPO, UhkBuffer, + UhkThemeColors, UserConfiguration, VersionInformation } from 'uhk-common'; @@ -39,6 +38,9 @@ import { environment } from '../../environments/environment'; import { ConfigSizeState, DeviceUiStates, + DongleOperations, + DonglePairingState, + DonglePairingStates, FirmwareUpgradeState, HistoryFileInfo, MacroMenuItem, @@ -64,6 +66,7 @@ import * as autoUpdateSettings from './reducers/auto-update-settings'; import * as fromContributors from './reducers/contributors.reducer'; import * as fromDefaultUserConfig from './reducers/default-user-configuration.reducer'; import * as fromDevice from './reducers/device'; +import * as fromDongle from './reducers/dongle-pairing.reducer'; import * as fromFirmware from './reducers/firmware-upgrade.reducer'; import { initProgressButtonState } from './reducers/progress-button-state'; import * as fromSelectors from './reducers/selectors'; @@ -76,6 +79,7 @@ import { RouterState } from './router-util'; export interface AppState { advanceSettings: fromAdvancedSettings.State; defaultUserConfiguration: fromDefaultUserConfig.State; + dongle: fromDongle.State; userConfiguration: fromUserConfig.State; autoUpdateSettings: autoUpdateSettings.State; app: fromApp.State; @@ -91,6 +95,7 @@ export interface AppState { export const reducers: ActionReducerMap = { advanceSettings: fromAdvancedSettings.reducer, defaultUserConfiguration: fromDefaultUserConfig.reducer, + dongle: fromDongle.reducer, userConfiguration: fromUserConfig.reducer, autoUpdateSettings: autoUpdateSettings.reducer, app: fromApp.reducer, @@ -109,6 +114,7 @@ export const metaReducers: MetaReducer[] = environment.production export const advanceSettingsState = (state: AppState) => state.advanceSettings; export const getIsAdvancedSettingsMenuVisible = createSelector(advanceSettingsState, fromAdvancedSettings.isAdvancedSettingsMenuVisible); +export const isLeftHalfPairing = createSelector(advanceSettingsState, fromAdvancedSettings.isLeftHalfPairing); export const getIsI2cDebuggingEnabled = createSelector(advanceSettingsState, fromAdvancedSettings.isI2cDebuggingEnabled); export const isI2cDebuggingRingBellEnabled = createSelector(advanceSettingsState, fromAdvancedSettings.isI2cDebuggingRingBellEnabled); @@ -117,6 +123,7 @@ export const getRouterState = (state: AppState) => state.router; export const getUserConfiguration = createSelector(userConfigState, fromUserConfig.getUserConfiguration); export const getKeymaps = createSelector(userConfigState, fromUserConfig.getKeymaps); +export const getHostConnections = createSelector(userConfigState, fromUserConfig.getHostConnections); export const getDefaultKeymap = createSelector(userConfigState, fromUserConfig.getDefaultKeymap); export const getSelectedKeymap = createSelector(userConfigState, fromUserConfig.getSelectedKeymap); export const getMacros = createSelector(userConfigState, fromUserConfig.getMacros); @@ -177,7 +184,6 @@ export const getUndoableNotification = createSelector(appState, fromApp.getUndoa export const getHardwareConfiguration = createSelector(appState, fromApp.getHardwareConfiguration); export const getPrevUserConfiguration = createSelector(appState, fromApp.getPrevUserConfiguration); export const runningInElectron = createSelector(appState, fromApp.runningInElectron); -export const getDeviceId = createSelector(appState, fromApp.getDeviceId); export const getKeyboardLayout = createSelector(appState, fromApp.getKeyboardLayout); export const deviceConfigurationLoaded = createSelector(appState, fromApp.deviceConfigurationLoaded); export const getAgentVersionInfo = createSelector(appState, fromApp.getAgentVersionInfo); @@ -219,6 +225,8 @@ export const deviceConnected = createSelector( return !!device.connectedDevice; }); export const hasDevicePermission = createSelector(deviceState, fromDevice.hasDevicePermission); +export const getDeviceBleAddress = createSelector(deviceState, fromDevice.getDeviceBleAddress); +export const getDevicePairedWithDongle = createSelector(deviceState, fromDevice.getDevicePairedWithDongle); export const getMissingDeviceState = createSelector(deviceState, fromDevice.getMissingDeviceState); export const xtermLog = createSelector(firmwareState, fromFirmware.xtermLog); export const flashFirmwareButtonDisabled = createSelector(runningInElectron, updatingFirmware, (electron, upgradingFirmware) => !electron || upgradingFirmware); @@ -281,6 +289,8 @@ export const getRestoreUserConfiguration = createSelector(deviceState, fromDevic export const bootloaderActive = createSelector(deviceState, fromDevice.bootloaderActive); export const firmwareUpgradeFailed = createSelector(firmwareState, fromFirmware.firmwareUpgradeFailed); export const firmwareUpgradeSuccess = createSelector(firmwareState, fromFirmware.firmwareUpgradeSuccess); +export const getUpdateUdevRules = createSelector(deviceState, fromDevice.updateUdevRules); +export const getRecoveryPageState = createSelector(deviceState, fromDevice.getRecoveryPageState); export const getHalvesInfo = createSelector(deviceState, fromDevice.halvesInfo); export const isUserConfigSaving = createSelector(deviceState, fromDevice.isUserConfigSaving); export const deviceUiState = createSelector(deviceState, fromDevice.deviceUiState); @@ -414,13 +424,14 @@ export const firstAttemptOfSaveToKeyboard = createSelector( return electron ? !everAttemptedSavingToKeyboard && saveToKeyboard.showButton : false; }); export const getPrivilegePageState = createSelector( - appState, getUdevFileContent, - (app, udevFileContent): PrivilagePageSate => { + appState, getUdevFileContent, getUpdateUdevRules, + (app, udevFileContent, updateUdevRules): PrivilagePageSate => { const permissionSetupFailed = !!app.permissionError; return { permissionSetupFailed, udevFileContent, + updateUdevRules, showWhatWillThisDo: !app.privilegeWhatWillThisDoClicked && !permissionSetupFailed, showWhatWillThisDoContent: app.privilegeWhatWillThisDoClicked || permissionSetupFailed }; @@ -474,6 +485,50 @@ export const calculateDeviceUiState = createSelector( } ); +export const getDongleState = (state: AppState) => state.dongle; +export const isDonglePairing = createSelector(getDongleState, fromDongle.isDonglePairing); +export const getDongle = createSelector(getDongleState, fromDongle.getDongle); +export const getDonglePairingState = createSelector( + runningInElectron, + getDongleState, + getUserConfiguration, + deviceConfigurationLoaded, + getDevicePairedWithDongle, + getConnectedDevice, + (isRunningInElectron, + dongleState, + userConfig, + deviceConfigLoaded, + devicePairedWithDongle, + connectedDevice, + ): DonglePairingState => { + if (!isRunningInElectron || !connectedDevice?.id || connectedDevice.id !== UHK_80_DEVICE.id || + dongleState.operation === DongleOperations.Delete + ) { + return { + operation: dongleState.operation, + state: DonglePairingStates.Idle, + showDonglePairingPanel: false, + }; + } + + const isDongleBleMissingFromHostConnections = dongleState.dongle?.bleAddress + && !userConfig.hostConnections.some(hostConnection => { + return hostConnection.type === HostConnections.Dongle && hostConnection.address === dongleState.dongle.bleAddress; + }); + + const isBleAddressMismatches = dongleState.dongle?.bleAddress && (!devicePairedWithDongle || !dongleState.dongle.isPairedWithKeyboard); + + return { + operation: dongleState.operation, + state: dongleState.state === DonglePairingStates.DeletingSuccess + ? DonglePairingStates.Idle + : dongleState.state, + showDonglePairingPanel: deviceConfigLoaded && (isDongleBleMissingFromHostConnections || isBleAddressMismatches || dongleState.operation === DongleOperations.Pairing), + }; + } +); + export const getSideMenuPageState = createSelector( runningInElectron, updatingFirmware, @@ -483,6 +538,8 @@ export const getSideMenuPageState = createSelector( getConnectedDevice, getIsAdvancedSettingsMenuVisible, getSelectedLayerOption, + getDonglePairingState, + isLeftHalfPairing, ( runningInElectronValue: boolean, updatingFirmwareValue: boolean, @@ -491,7 +548,9 @@ export const getSideMenuPageState = createSelector( uiState, connectedDevice, isAdvancedSettingsMenuVisible, - selectedLayerOption + selectedLayerOption, + donglePairingState, + leftHalfPairing, ): SideMenuPageState => { const macros = getMacroMenuItems(userConfiguration); @@ -499,7 +558,7 @@ export const getSideMenuPageState = createSelector( advancedSettingsMenuVisible: isAdvancedSettingsMenuVisible, connectedDevice: runningInElectronValue ? connectedDevice : UHK_60_DEVICE, runInElectron: runningInElectronValue, - updatingFirmware: updatingFirmwareValue, + updatingFirmware: updatingFirmwareValue || donglePairingState.operation !== DongleOperations.None || leftHalfPairing, deviceName: userConfiguration.deviceName, keymaps: userConfiguration.keymaps, keymapQueryParams: { @@ -579,21 +638,8 @@ export const getUserConfigHistoryComponentState = createSelector( }; } - let selectedTabIndex = state.activeTabIndex || 0; - const currentDeviceHasHistory = state.userConfigHistory.devices.find((device, index) => { - if (device.uniqueId === hardwareConfig?.uniqueId) { - if (state.activeTabIndex === null) { - selectedTabIndex = index; - } - - return true; - } - - return false; - }); - const result: UserConfigHistoryComponentState = { - selectedTabIndex, + selectedTabIndex: state.activeTabIndex || 0, commonFiles: state.userConfigHistory.commonFiles.map(fileMapper), loading: inElectron && state.loading, tabs: state.userConfigHistory.devices.map(device => { @@ -607,6 +653,8 @@ export const getUserConfigHistoryComponentState = createSelector( disabled: saving }; + const currentDeviceHasHistory = state.userConfigHistory.devices.find(device => device.uniqueId === hardwareConfig?.uniqueId); + if (result.tabs.length === 0 || !currentDeviceHasHistory) { let deviceName = UHK_60_V2_DEVICE.name; let tooltip = ''; @@ -627,6 +675,14 @@ export const getUserConfigHistoryComponentState = createSelector( result.tabs.sort((a, b) => a.displayText.localeCompare(b.displayText)); + if (state.activeTabIndex === null) { + for (const [index, tab] of result.tabs.entries()) { + if (tab.isCurrentDevice) { + result.selectedTabIndex = index; + } + } + } + return result; }); @@ -671,7 +727,16 @@ export const getFirmwareUpgradeState = createSelector(runningInElectron, getStat recoveryModules: [] }; }); - +export const upgradeAgentTooltip = createSelector( + getHardwareModules, getAgentVersionInfo, + (hardwareModules:HardwareModules, agentVersionInfo: VersionInformation) => { + return `rightModule.userConfigVersion ${hardwareModules.rightModuleInfo.userConfigVersion} minor version is larger than agent.userConfigVersion ${agentVersionInfo.userConfigVersion}`; + }); +export const upgradeFirmwareTooltip = createSelector( + getHardwareModules, getAgentVersionInfo, + (hardwareModules:HardwareModules, agentVersionInfo: VersionInformation) => { + return `rightModule.userConfigVersion ${hardwareModules.rightModuleInfo.userConfigVersion} patch version is less than agent.userConfigVersion ${agentVersionInfo.userConfigVersion}`; + }); export const defaultUserConfigState = (state: AppState) => state.defaultUserConfiguration; export const getDefaultUserConfiguration = createSelector( defaultUserConfigState, fromDefaultUserConfig.getDefaultUserConfiguration); diff --git a/packages/uhk-web/src/app/store/reducers/advanced-settings.reducer.ts b/packages/uhk-web/src/app/store/reducers/advanced-settings.reducer.ts index 441001352ff..3c9b92fa58e 100644 --- a/packages/uhk-web/src/app/store/reducers/advanced-settings.reducer.ts +++ b/packages/uhk-web/src/app/store/reducers/advanced-settings.reducer.ts @@ -1,14 +1,20 @@ import { getFormattedTimestamp } from 'uhk-common'; import { XtermCssClass, XtermLog } from '../../models/xterm-log'; -import { I2cWatchdogCounterChangedAction } from '../actions/advance-settings.action'; -import { ActionTypes, Actions } from '../actions/advance-settings.action'; +import { appendXtermLogs } from '../../util/merge-xterm-logs'; +import { + Actions, + ActionTypes, + I2cWatchdogCounterChangedAction , +} from '../actions/advance-settings.action'; +import * as App from '../actions/app'; export interface State { i2cDebuggingEnabled: boolean; i2cDebuggingRingBellEnabled: boolean, i2cDebuggingRingBellControlDisabled: boolean, i2cLogs: Array; + isLeftHalfPairing: boolean; menuVisible: boolean; } @@ -17,12 +23,26 @@ export const initialState = (): State => ({ i2cDebuggingRingBellEnabled: false, i2cDebuggingRingBellControlDisabled: true, i2cLogs: [], + isLeftHalfPairing: false, menuVisible: false, }); -export function reducer(state = initialState(), action: Actions) { +export function reducer(state = initialState(), action: Actions | App.Actions) { switch (action.type) { + case App.ActionTypes.ElectronMainLogReceived: { + if (!state.isLeftHalfPairing) { + return state; + } + + const payload = (action as App.ElectronMainLogReceivedAction).payload; + + return { + ...state, + i2cLogs: appendXtermLogs(state.i2cLogs, payload), + }; + } + case ActionTypes.i2cWatchdogCounterChanged: { const counter = (action as I2cWatchdogCounterChangedAction).counter; const newState = {...state}; @@ -38,6 +58,22 @@ export function reducer(state = initialState(), action: Actions) { return newState; } + case ActionTypes.startLeftHalfPairing: { + return { + ...state, + i2cLogs: [], + isLeftHalfPairing: true, + }; + } + + case ActionTypes.leftHalfPairingSuccess: + case ActionTypes.leftHalfPairingFailed: { + return { + ...state, + isLeftHalfPairing: false, + }; + } + case ActionTypes.toggleI2CDebugging: { const newState = { ...state, @@ -75,5 +111,6 @@ export function reducer(state = initialState(), action: Actions) { } export const isAdvancedSettingsMenuVisible = (state: State): boolean => state.menuVisible; +export const isLeftHalfPairing = (state: State): boolean => state.isLeftHalfPairing; export const isI2cDebuggingEnabled = (state: State): boolean => state.i2cDebuggingEnabled; export const isI2cDebuggingRingBellEnabled = (state: State): boolean => state.i2cDebuggingRingBellEnabled; diff --git a/packages/uhk-web/src/app/store/reducers/app.reducer.ts b/packages/uhk-web/src/app/store/reducers/app.reducer.ts index 6995726c923..5962a6a5d8a 100644 --- a/packages/uhk-web/src/app/store/reducers/app.reducer.ts +++ b/packages/uhk-web/src/app/store/reducers/app.reducer.ts @@ -227,7 +227,6 @@ export const getErrorPanelHeight = (state: State) => state.errorPanelHeight; export const getUndoableNotification = (state: State) => state.undoableNotification; export const getPrevUserConfiguration = (state: State) => state.prevUserConfig; export const runningInElectron = (state: State) => state.runningInElectron; -export const getDeviceId = (state: State): number => state.hardwareConfig?.deviceId; export const getKeyboardLayout = (state: State): KeyboardLayout => { if (state.hardwareConfig && state.hardwareConfig.isIso) { diff --git a/packages/uhk-web/src/app/store/reducers/device.ts b/packages/uhk-web/src/app/store/reducers/device.ts index 059220f7071..28f1c952ca0 100644 --- a/packages/uhk-web/src/app/store/reducers/device.ts +++ b/packages/uhk-web/src/app/store/reducers/device.ts @@ -3,15 +3,19 @@ import { BackupUserConfiguration, BackupUserConfigurationInfo, ConfigSizesInfo, + Dongle, getDefaultHalvesInfo, HalvesInfo, HardwareModules, isVersionGtMinor, LeftSlotModules, RightSlotModules, + UdevRulesInfo, + UHK_DEVICE_IDS, + UHK_DEVICE_IDS_TYPE, UhkDeviceProduct } from 'uhk-common'; -import { DeviceUiStates } from '../../models'; +import { DeviceUiStates, RecoverPageState } from '../../models'; import { MissingDeviceState } from '../../models/missing-device-state'; import { RestoreConfigurationState } from '../../models/restore-configuration-state'; import { getVersions } from '../../util'; @@ -22,12 +26,18 @@ import { ReadConfigSizesReplyAction } from '../actions/device'; import { getSaveToKeyboardButtonState, initProgressButtonState, ProgressButtonState } from './progress-button-state'; export interface State { + bleAddress?: string; + bleDeviceConnected: boolean; + dongle?: Dongle; isKeyboardLayoutChanging: boolean; + isPairedWithDongle?: boolean; connectedDevice?: UhkDeviceProduct; hasPermission: boolean; bootloaderActive: boolean; deviceConnectionStateLoaded: boolean; keyboardHalvesAlwaysJoined: boolean; + leftHalfBootloaderActive: boolean; + leftHalfDetected: boolean; multiDevice: boolean; communicationInterfaceAvailable: boolean; saveToKeyboard: ProgressButtonState; @@ -42,14 +52,18 @@ export interface State { configSizes: ConfigSizesInfo; skipFirmwareUpgrade: boolean; statusBuffer: string; + udevRuleInfo: UdevRulesInfo; } export const initialState: State = { + bleDeviceConnected: false, isKeyboardLayoutChanging: false, hasPermission: true, bootloaderActive: false, deviceConnectionStateLoaded: false, keyboardHalvesAlwaysJoined: false, + leftHalfBootloaderActive: false, + leftHalfDetected: false, multiDevice: false, communicationInterfaceAvailable: true, saveToKeyboard: initProgressButtonState, @@ -71,7 +85,8 @@ export const initialState: State = { readingConfigSizes: false, configSizes: { userConfig: 32704, hardwareConfig: 64 }, skipFirmwareUpgrade: false, - statusBuffer: '' + statusBuffer: '', + udevRuleInfo: UdevRulesInfo.Ok, }; export function reducer(state = initialState, action: Action): State { @@ -112,14 +127,21 @@ export function reducer(state = initialState, action: Action): State { const data = (action).payload; return { ...state, + bleAddress: data.bleAddress, + bleDeviceConnected: data.bleDeviceConnected, + dongle: data.dongle, + isPairedWithDongle: data.isPairedWithDongle, connectedDevice: data.connectedDevice, deviceConnectionStateLoaded: true, hasPermission: data.hasPermission, communicationInterfaceAvailable: data.communicationInterfaceAvailable, bootloaderActive: data.bootloaderActive, halvesInfo: data.halvesInfo, + leftHalfBootloaderActive: data.leftHalfBootloaderActive, + leftHalfDetected: data.leftHalfDetected, modules: data.hardwareModules, - multiDevice: data.multiDevice + multiDevice: data.multiDevice, + udevRuleInfo: data.udevRulesInfo, }; } @@ -196,7 +218,6 @@ export function reducer(state = initialState, action: Action): State { const newState = { ...state, - modules: payload.hardwareModules, saveToKeyboard: state.modifiedConfigWhileSaved && !payload.userConfigSaved ? getSaveToKeyboardButtonState() : initProgressButtonState, @@ -266,7 +287,9 @@ export function reducer(state = initialState, action: Action): State { } } -export const hasDevicePermission = (state: State) => state.hasPermission; +export const hasDevicePermission = (state: State) => state.hasPermission && state.udevRuleInfo === UdevRulesInfo.Ok; +export const getDeviceBleAddress = (state: State): string => state.bleAddress; +export const getDevicePairedWithDongle = (state: State): boolean => state.isPairedWithDongle; export const getMissingDeviceState = (state: State): MissingDeviceState => { if (!state.deviceConnectionStateLoaded) { return { @@ -275,6 +298,29 @@ export const getMissingDeviceState = (state: State): MissingDeviceState => { }; } + if (!state.connectedDevice) { + if (state.bleDeviceConnected) { + return { + header: 'UHK 80 connected via BLE', + subtitle: 'Disconnect BLE and connect your UHK via its right USB port!' + }; + } + + if (state.dongle?.serialNumber) { + return { + header: 'Dongle connected', + subtitle: 'Please connect the UHK right half via USB cable!' + }; + } + + if (state.leftHalfDetected) { + return { + header: 'UHK 80 left half connected', + subtitle: 'Please connect the right half instead!' + }; + } + } + if (state.connectedDevice && !state.communicationInterfaceAvailable) { return { header: 'Cannot find your UHK', @@ -283,6 +329,7 @@ export const getMissingDeviceState = (state: State): MissingDeviceState => { } return { + description: 'If you have a UHK 80, connect its right half via USB, and ensure it\'s not connected to a dongle or BLE host!', header: 'Cannot find your UHK', subtitle: 'Please plug it in!' }; @@ -301,7 +348,7 @@ export const getBackupUserConfigurationState = (state: State): RestoreConfigurat backupUserConfiguration: state.backupUserConfiguration }; }; -export const bootloaderActive = (state: State) => state.bootloaderActive; +export const bootloaderActive = (state: State) => state.bootloaderActive || state.leftHalfBootloaderActive || state.dongle?.bootloaderActive; export const halvesInfo = (state: State): HalvesInfo => { return { ...state.halvesInfo, @@ -322,7 +369,7 @@ export const deviceUiState = (state: State): DeviceUiStates | undefined => { return DeviceUiStates.PermissionRequired; } - if (state.bootloaderActive) { + if (bootloaderActive(state)) { return DeviceUiStates.Recovery; } @@ -341,3 +388,39 @@ export const getSkipFirmwareUpgrade = (state: State) => state.skipFirmwareUpgrad export const isKeyboardLayoutChanging = (state: State) => state.isKeyboardLayoutChanging; export const keyboardHalvesAlwaysJoined = (state: State) => state.keyboardHalvesAlwaysJoined; export const getStatusBuffer = (state: State) => state.statusBuffer; +export const updateUdevRules = (state: State) => state.udevRuleInfo === UdevRulesInfo.Different; +export const getRecoveryPageState = (state: State): RecoverPageState => { + let deviceText = 'UHK Device'; + let deviceId: UHK_DEVICE_IDS_TYPE; + + if (state.dongle?.bootloaderActive) { + deviceText = 'UHK Dongle'; + deviceId = UHK_DEVICE_IDS.UHK_DONGLE; + } + else if (state.bootloaderActive) { + deviceId = state.connectedDevice.id; + + switch (deviceId) { + case UHK_DEVICE_IDS.UHK60V1_RIGHT: + case UHK_DEVICE_IDS.UHK60V2_RIGHT: { + deviceText = 'UHK 60'; + break; + } + + case UHK_DEVICE_IDS.UHK80_RIGHT: { + deviceText = 'UHK 80 right half'; + break; + } + } + } + else if (state.leftHalfBootloaderActive) { + deviceText = 'UHK 80 left half'; + deviceId = UHK_DEVICE_IDS.UHK80_LEFT; + } + + return { + deviceId, + description: `Your ${deviceText} seems to be broken. No worries, Agent can fix it.`, + title: `Fix ${deviceText}`, + }; +}; diff --git a/packages/uhk-web/src/app/store/reducers/dongle-pairing.reducer.ts b/packages/uhk-web/src/app/store/reducers/dongle-pairing.reducer.ts new file mode 100644 index 00000000000..9a01d2b0e94 --- /dev/null +++ b/packages/uhk-web/src/app/store/reducers/dongle-pairing.reducer.ts @@ -0,0 +1,134 @@ +import { Action } from '@ngrx/store'; +import { Dongle } from 'uhk-common'; +import { DongleOperations, DonglePairingStates } from '../../models'; +import * as Device from '../actions/device'; +import * as DonglePairing from '../actions/dongle-pairing.action'; + +export interface State { + dongle?: Dongle; + operation: DongleOperations; + state: DonglePairingStates; +} + +export const initialState: State = { + operation: DongleOperations.None, + state: DonglePairingStates.Idle, +}; + +export function reducer(state = initialState, action: Action): State { + switch (action.type) { + + case Device.ActionTypes.SaveConfiguration: { + if (state.operation === DongleOperations.None) { + return state; + } + + return { + ...state, + state: DonglePairingStates.SavingToKeyboard + }; + } + + case Device.ActionTypes.ConnectionStateChanged: { + return { + ...state, + dongle: (action).payload.dongle, + }; + } + + case Device.ActionTypes.SaveToKeyboardFailed: { + if (state.state !== DonglePairingStates.SavingToKeyboard) { + return state; + } + + let newState = DonglePairingStates.Idle; + + if (state.operation === DongleOperations.Pairing) { + newState = DonglePairingStates.PairingFailed; + } + else if (state.operation === DongleOperations.Delete) { + newState = DonglePairingStates.DeletingFailed; + } + + return { + ...state, + operation: DongleOperations.None, + state: newState, + }; + } + + case DonglePairing.ActionTypes.DeleteHostConnection: { + return { + ...state, + operation: DongleOperations.Delete, + state: DonglePairingStates.Deleting, + }; + } + + case DonglePairing.ActionTypes.DeleteHostConnectionFailed: { + return { + ...state, + operation: DongleOperations.None, + state: DonglePairingStates.DeletingFailed, + }; + } + + case DonglePairing.ActionTypes.DeleteHostConnectionSuccess: { + return { + ...state, + state: DonglePairingStates.SavingToKeyboard, + }; + } + + case Device.ActionTypes.SaveToKeyboardSuccess: { + if (state.state !== DonglePairingStates.SavingToKeyboard) { + return state; + } + + let newState = DonglePairingStates.Idle; + if (state.operation === DongleOperations.Pairing) { + newState = DonglePairingStates.PairingSuccess; + } + else if (state.operation === DongleOperations.Delete) { + newState = DonglePairingStates.DeletingSuccess; + } + + return { + ...state, + operation: DongleOperations.None, + state: newState, + }; + } + + case DonglePairing.ActionTypes.StartDonglePairing: { + return { + ...state, + operation: DongleOperations.Pairing, + state: DonglePairingStates.Pairing, + }; + } + + case DonglePairing.ActionTypes.DonglePairingFailed: { + return { + ...state, + operation: DongleOperations.None, + state: DonglePairingStates.PairingFailed, + }; + } + + case DonglePairing.ActionTypes.DonglePairingSuccess: { + return { + ...state, + state: DonglePairingStates.SavingToKeyboard, + }; + } + + default: + return state; + } +} + +export const isDonglePairing = (state: State): boolean => { + return (state.operation === DongleOperations.Pairing && state.state === DonglePairingStates.SavingToKeyboard) || state.state === DonglePairingStates.Pairing; +}; +export const getDongle = (state: State): Dongle => state.dongle; diff --git a/packages/uhk-web/src/app/store/reducers/firmware-upgrade.reducer.ts b/packages/uhk-web/src/app/store/reducers/firmware-upgrade.reducer.ts index 244592329bc..d5bdffdeb7a 100644 --- a/packages/uhk-web/src/app/store/reducers/firmware-upgrade.reducer.ts +++ b/packages/uhk-web/src/app/store/reducers/firmware-upgrade.reducer.ts @@ -1,5 +1,6 @@ import { Action } from '@ngrx/store'; import { + Dongle, FirmwareJson, FirmwareUpgradeFailReason, HardwareModules, @@ -7,6 +8,7 @@ import { ModuleInfo, ModuleSlotToId, RIGHT_HALF_FIRMWARE_UPGRADE_MODULE_NAME, + UHK_DONGLE, UHK_MODULES, UhkModule } from 'uhk-common'; @@ -16,6 +18,7 @@ import { RecoveryDeviceReplyAction, UpdateFirmwareAction, UpdateFirmwareWithActi import * as App from '../actions/app'; import { FirmwareUpgradeState, ModuleFirmwareUpgradeState, ModuleFirmwareUpgradeStates } from '../../models'; import { XtermCssClass, XtermLog } from '../../models/xterm-log'; +import { appendXtermLogs } from '../../util/merge-xterm-logs'; export enum FirmwareUpgradeStates { Idle = 'Idle', @@ -43,6 +46,7 @@ const FIRMWARE_NOT_FORCE_UPGRADING = [ ]; export interface State { + dongle?: Dongle; firmwareJson?: FirmwareJson; hardwareModules: HardwareModules; log: Array; @@ -91,12 +95,14 @@ export function reducer(state = initialState, action: Action): State { } case Device.ActionTypes.ConnectionStateChanged: { - const hardwareModules = (action as Device.ConnectionStateChangedAction).payload.hardwareModules; + const payload = (action as Device.ConnectionStateChangedAction).payload; + const hardwareModules = payload.hardwareModules; return { ...state, + dongle: payload.dongle, hardwareModules, - modules: mapModules(state.firmwareJson, hardwareModules, state.modules), + modules: mapModules(state.firmwareJson, hardwareModules, state.modules, payload.dongle), recoveryModules: calculateRecoveryModules(hardwareModules.moduleInfos) }; } @@ -116,13 +122,28 @@ export function reducer(state = initialState, action: Action): State { }; } + case Device.ActionTypes.DongleVersionInfoLoaded: { + const versionInfo = (action as Device.DongleVersionInfoLoadedAction).payload; + + const dongle = { + ...state.dongle, + versionInfo + }; + + return { + ...state, + dongle, + modules: mapModules(state.firmwareJson, state.hardwareModules, state.modules, state.dongle), + }; + } + case Device.ActionTypes.ModulesInfoLoaded: { const hardwareModules = (action as Device.HardwareModulesLoadedAction).payload; return { ...state, hardwareModules, - modules: mapModules(state.firmwareJson, hardwareModules, state.modules), + modules: mapModules(state.firmwareJson, hardwareModules, state.modules, state.dongle), }; } @@ -233,24 +254,10 @@ export function reducer(state = initialState, action: Action): State { return state; } - const newState = { + return { ...state, - log: [...state.log] + log: appendXtermLogs(state.log, payload), }; - const lastLogEntry = state.log[state.log.length - 1]; - if (lastLogEntry.message.startsWith(payload.message)) { - newState.log[newState.log.length - 1] = { - ...lastLogEntry, - message: lastLogEntry.message + '.' - }; - } else { - newState.log.push({ - message: payload.message, - cssClass: payload.level === 'error' ? XtermCssClass.error : XtermCssClass.standard - }); - } - - return newState; } case Device.ActionTypes.RecoveryModule: @@ -268,8 +275,6 @@ export function reducer(state = initialState, action: Action): State { return { ...state, upgradeState: response.success ? FirmwareUpgradeStates.Success : FirmwareUpgradeStates.Failed, - modules: mapModules(state.firmwareJson, response.modules, state.modules), - recoveryModules: calculateRecoveryModules(response.modules.moduleInfos) }; } @@ -290,25 +295,42 @@ export const firmwareUpgradeState = (state: State): FirmwareUpgradeState => ({ recoveryModules: state.recoveryModules }); -function mapModules(firmwareJson: FirmwareJson, hardwareModules: HardwareModules, stateModules: Array = []): Array { - const modules: Array = [ - { - moduleName: RIGHT_HALF_FIRMWARE_UPGRADE_MODULE_NAME, +function mapModules(firmwareJson: FirmwareJson, hardwareModules: HardwareModules, stateModules: Array = [], dongle: Dongle): Array { + const modules: Array = []; + + function findStateModule(name: string): ModuleFirmwareUpgradeState { + return stateModules.find(module => module.moduleName === name); + } + + if (dongle?.versionInfo) { + modules.push({ + moduleName: UHK_DONGLE.name, firmwareUpgradeSupported: true, - gitRepo: hardwareModules.rightModuleInfo.firmwareGitRepo, - gitTag: hardwareModules.rightModuleInfo.firmwareGitTag, - isOfficialFirmware: isOfficialUhkFirmware(hardwareModules.rightModuleInfo.firmwareGitRepo), - currentFirmwareVersion: hardwareModules.rightModuleInfo?.firmwareVersion, - newFirmwareVersion: firmwareJson?.firmwareVersion, - state: stateModules[0]?.state ?? ModuleFirmwareUpgradeStates.Idle - } - ]; + gitRepo: dongle.versionInfo.firmwareGitRepo, + gitTag: dongle.versionInfo.firmwareGitTag, + isOfficialFirmware: isOfficialUhkFirmware(dongle.versionInfo.firmwareGitRepo), + currentFirmwareVersion: dongle.versionInfo?.firmwareVersion, + newFirmwareVersion: dongle.versionInfo?.firmwareVersion, + state: findStateModule(UHK_DONGLE.name)?.state ?? ModuleFirmwareUpgradeStates.Idle + }); + } + + modules.push({ + moduleName: RIGHT_HALF_FIRMWARE_UPGRADE_MODULE_NAME, + firmwareUpgradeSupported: true, + gitRepo: hardwareModules.rightModuleInfo.firmwareGitRepo, + gitTag: hardwareModules.rightModuleInfo.firmwareGitTag, + isOfficialFirmware: isOfficialUhkFirmware(hardwareModules.rightModuleInfo.firmwareGitRepo), + currentFirmwareVersion: hardwareModules.rightModuleInfo?.firmwareVersion, + newFirmwareVersion: firmwareJson?.firmwareVersion, + state: findStateModule(RIGHT_HALF_FIRMWARE_UPGRADE_MODULE_NAME)?.state ?? ModuleFirmwareUpgradeStates.Idle + }); if (hardwareModules.moduleInfos) { for (let i = 0; i < hardwareModules.moduleInfos?.length; i++) { const moduleInfo = hardwareModules.moduleInfos[i]; const firmwareModuleInfo = hardwareModules.rightModuleInfo.modules[moduleInfo.module.id]; - const stateModule = stateModules.find(stateModule => stateModule.moduleName === moduleInfo.module.name); + const stateModule = findStateModule(moduleInfo.module.name); if (!firmwareModuleInfo || moduleInfo.info.firmwareVersion === hardwareModules.rightModuleInfo?.firmwareVersion || firmwareModuleInfo.md5 !== moduleInfo.info.firmwareChecksum) { modules.push({ diff --git a/packages/uhk-web/src/app/store/reducers/user-configuration.ts b/packages/uhk-web/src/app/store/reducers/user-configuration.ts index c37b7a93c4c..5a8b7c9ed8f 100644 --- a/packages/uhk-web/src/app/store/reducers/user-configuration.ts +++ b/packages/uhk-web/src/app/store/reducers/user-configuration.ts @@ -1,8 +1,11 @@ import { BacklightingMode, Constants, + emptyHostConnection, getDefaultHalvesInfo, HalvesInfo, + HostConnection, + HostConnections, initBacklightingColorPalette, KeyAction, KeyActionHelper, @@ -13,9 +16,9 @@ import { LeftSlotModules, Macro, MacroActionHelper, + MODIFIER_LAYER_NAMES, Module, ModuleConfiguration, - MODIFIER_LAYER_NAMES, MODULES_NONE_CONFIGS, NoneAction, PlayMacroAction, @@ -46,6 +49,7 @@ import { import * as AppActions from '../actions/app'; import * as DeviceActions from '../actions/device'; import * as Device from '../actions/device'; +import * as DonglePairing from '../actions/dongle-pairing.action'; import * as KeymapActions from '../actions/keymap'; import * as MacroActions from '../actions/macro'; import * as UserConfig from '../actions/user-config'; @@ -84,7 +88,7 @@ export const initialState: State = { export function reducer( state = initialState, - action: AppActions.Actions | KeymapActions.Actions | MacroActions.Actions | UserConfig.Actions | DeviceActions.Actions + action: AppActions.Actions | KeymapActions.Actions | MacroActions.Actions | UserConfig.Actions | DeviceActions.Actions | DonglePairing.Actions ): State { switch (action.type) { @@ -597,7 +601,7 @@ export function reducer( ...newState, userConfiguration: saveKeyAction(newState.userConfiguration, processedAction), lastEditedKey: { - key: 'key-' + (keyIndex + 1), + key: 'key-' + keyIndex, moduleId: moduleIndex } }; @@ -828,6 +832,38 @@ export function reducer( return state; } + case UserConfig.ActionTypes.RenameHostConnection: { + const payload = (action as UserConfig.RenameHostConnectionAction).payload; + const userConfiguration: UserConfiguration = Object.assign(new UserConfiguration(), state.userConfiguration); + + userConfiguration.hostConnections = userConfiguration.hostConnections.map((hostConnection, index) => { + if (index === payload.index) { + const connection = new HostConnection(hostConnection); + connection.name = payload.newName; + + return connection; + } + + return hostConnection; + }); + + return { + ...state, + userConfiguration, + }; + } + + case UserConfig.ActionTypes.ReorderHostConnections: { + const payload = (action as UserConfig.ReorderHostConnectionsAction).payload; + const userConfiguration: UserConfiguration = Object.assign(new UserConfiguration(), state.userConfiguration); + userConfiguration.hostConnections = payload; + + return { + ...state, + userConfiguration, + }; + } + case UserConfig.ActionTypes.SelectModuleConfiguration: { return { ...state, @@ -835,6 +871,20 @@ export function reducer( }; } + case UserConfig.ActionTypes.SetHostConnectionSwitchover: { + const payload = (action as UserConfig.SetHostConnectionSwitchoverAction).payload; + const userConfiguration: UserConfiguration = Object.assign(new UserConfiguration(), state.userConfiguration); + userConfiguration.hostConnections = [...userConfiguration.hostConnections]; + const newHostConnection = new HostConnection(userConfiguration.hostConnections[payload.index]); + newHostConnection.switchover = payload.checked; + userConfiguration.hostConnections[payload.index] = newHostConnection; + + return { + ...state, + userConfiguration, + }; + } + case UserConfig.ActionTypes.SetModuleConfigurationValue: { const payload = (action as UserConfig.SetModuleConfigurationValueAction).payload; const userConfiguration: UserConfiguration = Object.assign(new UserConfiguration(), state.userConfiguration); @@ -973,6 +1023,56 @@ export function reducer( }; } + case DonglePairing.ActionTypes.DeleteHostConnectionSuccess: { + const {index} = (action as DonglePairing.DeleteHostConnectionSuccessAction).payload; + const userConfiguration: UserConfiguration = Object.assign(new UserConfiguration(), state.userConfiguration); + userConfiguration.hostConnections = state.userConfiguration.hostConnections.map((hostConnection, idx) => { + if (idx === index) { + return emptyHostConnection(); + } + + return hostConnection; + }); + + return { + ...state, + userConfiguration, + }; + } + + case DonglePairing.ActionTypes.DonglePairingSuccess: { + const bleAddress = (action as DonglePairing.DonglePairingSuccessAction).payload; + + const isUserConfigContainsBleAddress = state.userConfiguration.hostConnections.some(hostConnection => { + return hostConnection.type === HostConnections.Dongle && hostConnection.address === bleAddress; + }); + + if (isUserConfigContainsBleAddress) { + return state; + } + + const userConfiguration: UserConfiguration = Object.assign(new UserConfiguration(), state.userConfiguration); + userConfiguration.hostConnections = [...userConfiguration.hostConnections]; + + for (let i = 0; i < userConfiguration.hostConnections.length; i += 1) { + const hostConnection = userConfiguration.hostConnections[i]; + if (hostConnection.type === HostConnections.Empty || i === userConfiguration.hostConnections.length - 1) { + const newHostConnection = new HostConnection(); + newHostConnection.type = HostConnections.Dongle; + newHostConnection.address = bleAddress; + newHostConnection.name = 'Dongle'; + + userConfiguration.hostConnections[i] = newHostConnection; + break; + } + } + + return { + ...state, + userConfiguration, + }; + } + default: return state; } @@ -981,6 +1081,9 @@ export function reducer( export const getUserConfiguration = (state: State): UserConfiguration => state.userConfiguration; export const getKeymaps = (state: State): Keymap[] => state.userConfiguration.keymaps; export const getDefaultKeymap = (state: State): Keymap => state.userConfiguration.keymaps.find(keymap => keymap.isDefault); +export const getHostConnections = (state: State): HostConnection[] => { + return state.userConfiguration.hostConnections; +}; export const getSelectedKeymap = (state: State): Keymap => { if (state.selectedKeymapAbbr === undefined) { return getDefaultKeymap(state); diff --git a/packages/uhk-web/src/app/util/merge-xterm-logs.ts b/packages/uhk-web/src/app/util/merge-xterm-logs.ts new file mode 100644 index 00000000000..df34f6dc0d9 --- /dev/null +++ b/packages/uhk-web/src/app/util/merge-xterm-logs.ts @@ -0,0 +1,21 @@ +import { ElectronLogEntry, XtermCssClass, XtermLog } from '../models/xterm-log'; + +export function appendXtermLogs(xtermLogs: XtermLog[], logEntry: ElectronLogEntry): XtermLog[] { + const logs: XtermLog[] = [...xtermLogs]; + + const lastIndex = xtermLogs.length - 1; + const lastLogEntry = xtermLogs[lastIndex]; + if (lastIndex >= 0 && lastLogEntry.message.startsWith(logEntry.message)) { + logs[lastIndex] = { + ...lastLogEntry, + message: lastLogEntry.message + '.' + }; + } else { + logs.push({ + message: logEntry.message, + cssClass: logEntry.level === 'error' ? XtermCssClass.error : XtermCssClass.standard + }); + } + + return logs; +} diff --git a/packages/uhk-web/src/custom_types/sudo-prompt.d.ts b/packages/uhk-web/src/custom_types/sudo-prompt.d.ts deleted file mode 100644 index 2bafb92b428..00000000000 --- a/packages/uhk-web/src/custom_types/sudo-prompt.d.ts +++ /dev/null @@ -1 +0,0 @@ -declare module 'sudo-prompt'; diff --git a/packages/uhk-web/src/devices/uhk60-right/layout.svg b/packages/uhk-web/src/devices/uhk60-right/layout.svg index bab7268badb..83461feba44 100644 --- a/packages/uhk-web/src/devices/uhk60-right/layout.svg +++ b/packages/uhk-web/src/devices/uhk60-right/layout.svg @@ -1,38 +1,37 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/devices/uhk60-right/separator.svg b/packages/uhk-web/src/devices/uhk60-right/separator.svg index 5084d225ed6..eac7a222a90 100644 --- a/packages/uhk-web/src/devices/uhk60-right/separator.svg +++ b/packages/uhk-web/src/devices/uhk60-right/separator.svg @@ -1,7 +1,5 @@ - - - + + diff --git a/packages/uhk-web/src/devices/uhk80-right/layout.svg b/packages/uhk-web/src/devices/uhk80-right/layout.svg new file mode 100644 index 00000000000..7e4a9deec66 --- /dev/null +++ b/packages/uhk-web/src/devices/uhk80-right/layout.svg @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/devices/uhk80-right/separator.svg b/packages/uhk-web/src/devices/uhk80-right/separator.svg new file mode 100644 index 00000000000..6874dc95119 --- /dev/null +++ b/packages/uhk-web/src/devices/uhk80-right/separator.svg @@ -0,0 +1,5 @@ + + + diff --git a/packages/uhk-web/src/modules/keyclusterleft/module.svg b/packages/uhk-web/src/modules/keyclusterleft/module.svg index 443c92b2649..db46c995534 100644 --- a/packages/uhk-web/src/modules/keyclusterleft/module.svg +++ b/packages/uhk-web/src/modules/keyclusterleft/module.svg @@ -1,21 +1,21 @@ - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/modules/touchpadright/module.svg b/packages/uhk-web/src/modules/touchpadright/module.svg index babc735aec5..9ef7e441092 100644 --- a/packages/uhk-web/src/modules/touchpadright/module.svg +++ b/packages/uhk-web/src/modules/touchpadright/module.svg @@ -1,10 +1,9 @@ - - - - - - - - - + + + + + + + + diff --git a/packages/uhk-web/src/modules/trackballright/module.svg b/packages/uhk-web/src/modules/trackballright/module.svg index 7cd55a12456..b8bcadd8d4d 100644 --- a/packages/uhk-web/src/modules/trackballright/module.svg +++ b/packages/uhk-web/src/modules/trackballright/module.svg @@ -1,15 +1,14 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/modules/trackpointright/module.svg b/packages/uhk-web/src/modules/trackpointright/module.svg index a31e02fe9d4..72ce1fb0852 100644 --- a/packages/uhk-web/src/modules/trackpointright/module.svg +++ b/packages/uhk-web/src/modules/trackpointright/module.svg @@ -1,15 +1,14 @@ - - - - - - - - - - - - - - + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/modules/uhk60-left/layout-ansi.svg b/packages/uhk-web/src/modules/uhk60-left/layout-ansi.svg index 8fa7658f18b..189283d46dc 100644 --- a/packages/uhk-web/src/modules/uhk60-left/layout-ansi.svg +++ b/packages/uhk-web/src/modules/uhk60-left/layout-ansi.svg @@ -1,35 +1,34 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/modules/uhk60-left/layout-iso.svg b/packages/uhk-web/src/modules/uhk60-left/layout-iso.svg index 8cddcb1bcdd..e8963b0f223 100644 --- a/packages/uhk-web/src/modules/uhk60-left/layout-iso.svg +++ b/packages/uhk-web/src/modules/uhk60-left/layout-iso.svg @@ -1,36 +1,35 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/modules/uhk80-left/layout-ansi.svg b/packages/uhk-web/src/modules/uhk80-left/layout-ansi.svg new file mode 100644 index 00000000000..8006e4784c5 --- /dev/null +++ b/packages/uhk-web/src/modules/uhk80-left/layout-ansi.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/modules/uhk80-left/layout-iso.svg b/packages/uhk-web/src/modules/uhk80-left/layout-iso.svg new file mode 100644 index 00000000000..4c100e7a1f0 --- /dev/null +++ b/packages/uhk-web/src/modules/uhk80-left/layout-iso.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/uhk-web/src/styles/_table.scss b/packages/uhk-web/src/styles/_table.scss index be3250e139f..ad0d068a6b5 100644 --- a/packages/uhk-web/src/styles/_table.scss +++ b/packages/uhk-web/src/styles/_table.scss @@ -45,4 +45,43 @@ table.settings { } } } + + &.led-settings { + thead, + tbody { + tr { + td:nth-of-type(1) { + width: 20%; + } + + td:nth-of-type(2), + td:nth-of-type(3) { + width: 40%; + } + } + } + + tbody { + tr { + td { + vertical-align: top; + + &.label { + padding-top: 0.75em; + } + + &:has(fade-timeout-slider) { + height: 90px; + } + + slider-wrapper { + --slider-value-width: 45px; + display: block; + margin-left: -1.25rem; + margin-right: 2rem; + } + } + } + } + } } diff --git a/packages/usb/apply-config.ts b/packages/usb/apply-config.ts index 098f054cc5e..38da8c990fa 100755 --- a/packages/usb/apply-config.ts +++ b/packages/usb/apply-config.ts @@ -11,6 +11,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; const { operations } = Uhk(argv); await operations.applyConfiguration(); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/blink-led-pwm-brightness.ts b/packages/usb/blink-led-pwm-brightness.ts index 07c944bf859..d028609a959 100755 --- a/packages/usb/blink-led-pwm-brightness.ts +++ b/packages/usb/blink-led-pwm-brightness.ts @@ -16,6 +16,6 @@ setInterval(async function () { const brightnessPercent = areLedsEnabled ? 100 : 0; await operations.setLedPwmBrightness(brightnessPercent); } catch (error) { - errorHandler(error); + await errorHandler(error); } }, 500); diff --git a/packages/usb/blink-test-leds.ts b/packages/usb/blink-test-leds.ts index 7ba928b3dd6..2e8585e3ab6 100755 --- a/packages/usb/blink-test-leds.ts +++ b/packages/usb/blink-test-leds.ts @@ -15,6 +15,6 @@ setInterval(async function () { await operations.setTestLedsState(areLedsEnabled); } catch (error) { - errorHandler(error); + await errorHandler(error); } }, 500); diff --git a/packages/usb/bootloader-reset-timeout-test.ts b/packages/usb/bootloader-reset-timeout-test.ts index 9432c0dd8c3..52fbfa312a2 100755 --- a/packages/usb/bootloader-reset-timeout-test.ts +++ b/packages/usb/bootloader-reset-timeout-test.ts @@ -1,7 +1,7 @@ #!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning import Uhk, { errorHandler, yargs } from './src/index.js'; -import { EnumerationModes, waitForDevice } from 'uhk-usb'; +import { EnumerationModes, waitForDevices } from 'uhk-usb'; import { KBoot, UsbPeripheral } from '../kboot/src/index.js'; import { UHK_60_DEVICE } from 'uhk-common'; @@ -14,22 +14,21 @@ import { UHK_60_DEVICE } from 'uhk-common'; const { device } = Uhk(argv); console.info('Start Bootloader re-enumeration with 60 sec'); - await device.reenumerate({ + const reenumerateResult = await device.reenumerate({ + device: UHK_60_DEVICE, enumerationMode: EnumerationModes.Bootloader, timeout: 60000, - vendorId: UHK_60_DEVICE.vendorId, - productId: UHK_60_DEVICE.bootloaderPid }); console.info('Kboot reset'); - const kboot = new KBoot(new UsbPeripheral({ vendorId: UHK_60_DEVICE.vendorId, productId: UHK_60_DEVICE.bootloaderPid })); + const kboot = new KBoot(new UsbPeripheral({ vendorId: reenumerateResult.vidPidPair.vid, productId: reenumerateResult.vidPidPair.pid })); await kboot.reset(); console.info('Wait for Keyboard'); - await waitForDevice(UHK_60_DEVICE.vendorId, UHK_60_DEVICE.keyboardPid); + await waitForDevices(UHK_60_DEVICE.keyboard); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/debug-i2c.ts b/packages/usb/debug-i2c.ts index 543d697dda2..ab27593f89e 100755 --- a/packages/usb/debug-i2c.ts +++ b/packages/usb/debug-i2c.ts @@ -20,6 +20,6 @@ setInterval(async function () { i2cRecovery = debugInfo.i2cWatchdogRecoveryCounter; } } catch (error) { - errorHandler(error); + await errorHandler(error); } }, 1000); diff --git a/packages/usb/delete-dongle-bonds.ts b/packages/usb/delete-dongle-bonds.ts new file mode 100755 index 00000000000..8b6a2b45f98 --- /dev/null +++ b/packages/usb/delete-dongle-bonds.ts @@ -0,0 +1,30 @@ +#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning + +import { getCurrentUhkDongleHID, UhkHidDevice } from 'uhk-usb'; +import Uhk, { errorHandler, yargs } from './src/index.js'; + +const argv = yargs + .usage('Delete Dongle bonds') + .argv; + + +const { logger, rootDir } = Uhk(argv); + +try { + const dongleHidDevice = await getCurrentUhkDongleHID(); + if (!dongleHidDevice) { + console.log('Dongle device is not found'); + process.exit(1); + } + + const dongleUhkDevice = new UhkHidDevice( + logger, + argv as any, + rootDir, + dongleHidDevice + ); + + await dongleUhkDevice.deleteAllBonds(); +} catch (error) { + await errorHandler(error); +} diff --git a/packages/usb/eeprom.ts b/packages/usb/eeprom.ts index 4d119a19657..5c89a786a34 100755 --- a/packages/usb/eeprom.ts +++ b/packages/usb/eeprom.ts @@ -15,7 +15,7 @@ import { ConfigBufferId, EepromOperation } from 'uhk-usb'; const operation = mapOperation(argv._[0]); await operations.launchEepromTransfer(operation, mapBufferId(argv._[1])); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/erase-hardware-config.ts b/packages/usb/erase-hardware-config.ts index 637bac903f9..a3dea2da5bb 100755 --- a/packages/usb/erase-hardware-config.ts +++ b/packages/usb/erase-hardware-config.ts @@ -10,6 +10,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; const { operations } = Uhk(argv); await operations.eraseHardwareConfig(); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/erase-user-config.ts b/packages/usb/erase-user-config.ts index 81941e21934..b7e96855325 100755 --- a/packages/usb/erase-user-config.ts +++ b/packages/usb/erase-user-config.ts @@ -11,6 +11,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; const { operations } = Uhk(argv); await operations.eraseUserConfig(); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/exec-macro-command.ts b/packages/usb/exec-macro-command.ts index f400f6f5305..a3e1d28401a 100755 --- a/packages/usb/exec-macro-command.ts +++ b/packages/usb/exec-macro-command.ts @@ -20,6 +20,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; const { operations } = Uhk(argv); await operations.execMacroCommand(cmd); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/factory-update-uhk80.ts b/packages/usb/factory-update-uhk80.ts new file mode 100755 index 00000000000..013903f6c13 --- /dev/null +++ b/packages/usb/factory-update-uhk80.ts @@ -0,0 +1,191 @@ +#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning + +import fs from 'fs'; +import { Device } from 'node-hid'; +import path from 'node:path'; +import { + FirmwareJson, + UHK_80_DEVICE, + UHK_80_DEVICE_LEFT, + UhkDeviceProduct, +} from 'uhk-common'; +import { + getCurrenUhk80LeftHID, + getCurrenUhk80RightHID, + getDeviceUserConfigPath, + getDeviceFirmwarePath, + getFirmwarePackageJson, + TmpFirmware, + snooze, + UhkHidDevice, + UhkOperations, + UsbVariables, + waitForUhkDeviceConnected, +} from 'uhk-usb'; + +import Uhk, { errorHandler, yargs } from './src/index.js'; + +const argv = yargs + .scriptName('./factory-update-uhk80.ts') + .usage('Usage: $0 {iso|ansi}') + .demandCommand(2, 'Firmware path and layout are required') + .option('set-serial-number', { + description: 'Use the given serial number instead of randomly generated one.', + type: 'number', + }) + .argv as any; + +const firmwarePath = argv._[0] as string; +const layout = argv._[1] as string; + +const { logger, rootDir } = Uhk(argv); + +try { + let connectedDevices = await getHidDevices(); + + const firmwareDirectoryInfo: TmpFirmware = { + packageJsonPath: path.join(firmwarePath, 'package.json'), + tmpDirectory: firmwarePath, + }; + + const firmwarePackageJson = await getFirmwarePackageJson(firmwareDirectoryInfo); + + const firmwareUpgradesResults = await Promise.all([ + upgradeFirmware(UHK_80_DEVICE, connectedDevices.rightHidDevice, firmwarePackageJson), + upgradeFirmware(UHK_80_DEVICE_LEFT, connectedDevices.leftHidDevice, firmwarePackageJson), + ]); + + assertOperationResults(firmwareUpgradesResults, 'Firmware upgrade failed: '); + + // just wait until devices be ready. After the reenumeration the halves start to communicate with each other + // give them some time to finish + await snooze(5000); + + // Need to reload hid devices because after the reenumeration maybe the HID device path changed + connectedDevices = await getHidDevices(); + + const writeHardwareConfigResults = await Promise.all([ + writeHardwareConfig(UHK_80_DEVICE, connectedDevices.rightHidDevice, layout), + writeHardwareConfig(UHK_80_DEVICE_LEFT, connectedDevices.leftHidDevice, layout), + ]); + + assertOperationResults(writeHardwareConfigResults, 'Hardware configuration write failed: '); + + await snooze(5000); // just wait until devices be ready + + // re-read hid devices just to be sure + connectedDevices = await getHidDevices(); + + let leftUhkDevice: UhkHidDevice; + let rightUhkDevice: UhkHidDevice; + try { + leftUhkDevice = new UhkHidDevice(logger, {}, rootDir, connectedDevices.leftHidDevice); + rightUhkDevice = new UhkHidDevice(logger, {}, rootDir, connectedDevices.rightHidDevice); + const rightUhkOperations = new UhkOperations(logger, rightUhkDevice); + const leftUhkOperations = new UhkOperations(logger, leftUhkDevice); + + // Save user-config to the right half + const userConfigPath = getDeviceUserConfigPath(UHK_80_DEVICE, firmwarePackageJson); + const configBuffer = fs.readFileSync(userConfigPath) as any; + await rightUhkOperations.saveUserConfiguration(configBuffer); + + // pair left and right half + await rightUhkOperations.pairToLeftHalf(leftUhkDevice); + + await rightUhkOperations.setVariable(UsbVariables.testSwitches, 1); + await leftUhkOperations.setVariable(UsbVariables.testSwitches, 1); + } + finally { + leftUhkDevice?.close(); + rightUhkDevice?.close(); + } + +} catch (error) { + await errorHandler(error); +} + +interface OperationResult { + uhkDeviceProduct: UhkDeviceProduct; + error?: any; +} + +async function getHidDevices() { + const rightHidDevice = await getCurrenUhk80RightHID(); + if (!rightHidDevice) { + console.error('Cannot find UHK 80 right half!'); + process.exit(1); + } + + const leftHidDevice = await getCurrenUhk80LeftHID(); + if (!leftHidDevice) { + console.error('Cannot find UHK 80 left half!'); + process.exit(1); + } + + return { + rightHidDevice, + leftHidDevice, + }; +} + +function assertOperationResults(operationResults: OperationResult[], errorMessage: string) { + let hasError = false; + for (const operationResult of operationResults) { + if (operationResult.error) { + hasError = true; + console.error(errorMessage, operationResult.uhkDeviceProduct.logName); + console.error(operationResult.error); + console.error('\n'); + } + } + + if (hasError) { + process.exit(1); + } +} + +async function upgradeFirmware(uhkDeviceProduct: UhkDeviceProduct, hidDevice: Device, packageJson: FirmwareJson): Promise { + const result: OperationResult = { + uhkDeviceProduct + }; + + let uhkHidDevice: UhkHidDevice; + try { + const deviceFirmwarePath = getDeviceFirmwarePath(uhkDeviceProduct, packageJson); + uhkHidDevice = new UhkHidDevice(logger, {}, rootDir, hidDevice); + const uhkOperations = new UhkOperations(logger, uhkHidDevice); + await uhkOperations.updateDeviceFirmware(deviceFirmwarePath, uhkDeviceProduct); + await waitForUhkDeviceConnected(uhkDeviceProduct); + } + catch (error) { + result.error = error; + } + finally { + uhkHidDevice?.close(); + } + + return result; +} + +async function writeHardwareConfig(uhkDeviceProduct: UhkDeviceProduct, hidDevice: Device, layout: string ): Promise { + const result: OperationResult = { + uhkDeviceProduct + }; + + let uhkHidDevice: UhkHidDevice; + + try { + uhkHidDevice = new UhkHidDevice(logger, {}, rootDir, hidDevice); + const uhkOperations = new UhkOperations(logger, uhkHidDevice); + await uhkOperations.saveHardwareConfiguration(layout === 'iso', uhkDeviceProduct.id, argv.setSerialNumber); + } + catch (error) { + result.error = error; + } + finally { + uhkHidDevice?.close(); + } + + + return result; +} diff --git a/packages/usb/factory-update.ts b/packages/usb/factory-update.ts index f21a1edac9e..9e79b9c5d65 100755 --- a/packages/usb/factory-update.ts +++ b/packages/usb/factory-update.ts @@ -2,7 +2,20 @@ import * as path from 'path'; import * as fs from 'fs'; -import { getCurrentUhkDeviceProduct, getDeviceFirmwarePath, getFirmwarePackageJson } from 'uhk-usb'; +import { + FIRMWARE_UPGRADE_METHODS, + LEFT_HALF_MODULE, + UHK_80_DEVICE_LEFT, +} from 'uhk-common'; +import { waitForUhkDeviceConnected } from 'uhk-usb'; +import { isUhkDeviceConnected } from 'uhk-usb'; +import { + getCurrentUhkDeviceProduct, + getDeviceFirmwarePath, + getDeviceUserConfigPath, + getFirmwarePackageJson, + getModuleFirmwarePath, +} from 'uhk-usb'; import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; @@ -12,13 +25,17 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; .scriptName('./factory-update.ts') .usage('Usage: $0 {uhk60v1|uhk60v2} {iso|ansi}') .demandCommand(3) + .option('set-serial-number', { + description: 'Use the given serial number instead of randomly generated one.', + type: 'number', + }) .argv; const firmwarePath = argv._[0] as string; const deviceId = getDeviceIdFromArg(argv._[1] as string); const layout = argv._[2] as string; - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); const packageJsonPath = path.join(firmwarePath, 'package.json'); const packageJson = await getFirmwarePackageJson({ @@ -32,13 +49,17 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; process.exit(1); } - const leftFirmwarePath = path.join(firmwarePath, '/modules/uhk60-left.bin'); + + const leftFirmwarePath = uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT + ? getDeviceFirmwarePath(UHK_80_DEVICE_LEFT, packageJson) + : getModuleFirmwarePath(LEFT_HALF_MODULE, packageJson); + if (!fs.existsSync(leftFirmwarePath)) { console.error('Left firmware path not found!'); process.exit(1); } - const userConfigPath = path.join(firmwarePath, '/devices/uhk60-right/config.bin'); + const userConfigPath = getDeviceUserConfigPath(uhkDeviceProduct, packageJson); if (!fs.existsSync(userConfigPath)) { console.error('User configuration path not found!'); process.exit(1); @@ -50,14 +71,29 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; } const { operations } = Uhk(argv); - await operations.updateRightFirmwareWithKboot(rightFirmwarePath, uhkDeviceProduct); - await operations.updateLeftModuleWithKboot(leftFirmwarePath, uhkDeviceProduct); + await operations.updateDeviceFirmware(rightFirmwarePath, uhkDeviceProduct); + if (uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT) { + if (!(await isUhkDeviceConnected(UHK_80_DEVICE_LEFT))) { + console.log(`[DeviceService] Please connect your ${UHK_80_DEVICE_LEFT.logName} keyboard with USB cable.`); + } + await waitForUhkDeviceConnected(UHK_80_DEVICE_LEFT); + + await operations.updateFirmwareWithMcuManager(leftFirmwarePath, UHK_80_DEVICE_LEFT); + + if (!(await isUhkDeviceConnected(uhkDeviceProduct))) { + console.log(`[DeviceService] Please connect your ${uhkDeviceProduct.logName} keyboard with USB cable.`); + } + await waitForUhkDeviceConnected(uhkDeviceProduct); + } + else { + await operations.updateLeftModuleWithKboot(leftFirmwarePath, uhkDeviceProduct); + } const configBuffer = fs.readFileSync(userConfigPath) as any; await operations.saveUserConfiguration(configBuffer); - await operations.saveHardwareConfiguration(layout === 'iso', deviceId); + await operations.saveHardwareConfiguration(layout === 'iso', deviceId, argv.setSerialNumber); await operations.switchKeymap('TES'); console.log('All done!'); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-adc-value.ts b/packages/usb/get-adc-value.ts index 936b69bea43..7c1c33fff56 100755 --- a/packages/usb/get-adc-value.ts +++ b/packages/usb/get-adc-value.ts @@ -19,6 +19,6 @@ setInterval(async function () { (receivedBuffer[2] * 255 + receivedBuffer[1]) / 4096 * 5.5 * 1.045 ); } catch (error) { - errorHandler(error); + await errorHandler(error); } }, 500); diff --git a/packages/usb/get-config-size.ts b/packages/usb/get-config-size.ts index 7673ac90af1..a0c28155fb6 100755 --- a/packages/usb/get-config-size.ts +++ b/packages/usb/get-config-size.ts @@ -14,6 +14,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; console.log(`hardwareConfigMaxSize: ${configs.hardwareConfig}`); console.log(`userConfigMaxSize: ${configs.userConfig}`); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-debug-info.ts b/packages/usb/get-debug-info.ts index fa21831d29c..0f1e333163d 100755 --- a/packages/usb/get-debug-info.ts +++ b/packages/usb/get-debug-info.ts @@ -41,6 +41,6 @@ setInterval(async function () { prevSystem = debugInfo.usbSystemKeyboardActionCounter; prevMouse = debugInfo.usbMouseActionCounter; } catch (error) { - errorHandler(error); + await errorHandler(error); } }, 500); diff --git a/packages/usb/get-device-state.ts b/packages/usb/get-device-state.ts index 9e1ee5c47e6..18921181923 100755 --- a/packages/usb/get-device-state.ts +++ b/packages/usb/get-device-state.ts @@ -21,6 +21,6 @@ rightModuleSlot:${state.rightModuleSlot} | \ layer:${state.activeLayerName} ${state.activeLayerToggled ? 'toggled' : ''}` ); } catch (error) { - errorHandler(error); + await errorHandler(error); } }, 500); diff --git a/packages/usb/get-i2c-baud-rate.ts b/packages/usb/get-i2c-baud-rate.ts index 20b32306d1b..8a0286a11f0 100755 --- a/packages/usb/get-i2c-baud-rate.ts +++ b/packages/usb/get-i2c-baud-rate.ts @@ -15,6 +15,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; console.log(`requestedBaudRate:${baudRate.requestedBaudRate} | actualBaudRate:${baudRate.actualBaudRate} | I2C0_F:0b${baudRate.i2c0F}`); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-i2c-health.ts b/packages/usb/get-i2c-health.ts index c011e7cd0a8..12e82866750 100755 --- a/packages/usb/get-i2c-health.ts +++ b/packages/usb/get-i2c-health.ts @@ -27,6 +27,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; console.log(str); } } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-left-firmware-version.ts b/packages/usb/get-left-firmware-version.ts index 247f06b8c8f..3829bd8cd60 100755 --- a/packages/usb/get-left-firmware-version.ts +++ b/packages/usb/get-left-firmware-version.ts @@ -16,6 +16,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; console.log(`moduleProtocolVersion: ${version.moduleProtocolVersion}`); console.log(`firmwareVersion: ${version.firmwareVersion}`); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-module-bootloader-version.ts b/packages/usb/get-module-bootloader-version.ts index 813740610c0..4de7c484bc7 100755 --- a/packages/usb/get-module-bootloader-version.ts +++ b/packages/usb/get-module-bootloader-version.ts @@ -19,17 +19,16 @@ import Uhk, { .argv; const i2cAddress = getI2cAddressFromArg(argv._[0] as string); - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); const { device, logger } = Uhk(argv); - await device.reenumerate({ + const reenumerateResult = await device.reenumerate({ + device: uhkDeviceProduct, enumerationMode: EnumerationModes.Buspal, - vendorId: uhkDeviceProduct.vendorId, - productId: uhkDeviceProduct.buspalPid }); device.close(); - await waitForDevice(uhkDeviceProduct.vendorId, uhkDeviceProduct.buspalPid); - const usbPeripheral = new UsbPeripheral({ productId: uhkDeviceProduct.buspalPid, vendorId: uhkDeviceProduct.vendorId }); + await waitForDevice(reenumerateResult.vidPidPair.vid, reenumerateResult.vidPidPair.pid); + const usbPeripheral = new UsbPeripheral({ productId: reenumerateResult.vidPidPair.pid, vendorId: reenumerateResult.vidPidPair.vid }); let kboot: KBoot; let bootloaderVersion: BootloaderVersion; const startTime = new Date(); @@ -51,9 +50,8 @@ import Uhk, { kboot.reset(); kboot.close(); await device.reenumerate({ + device: uhkDeviceProduct, enumerationMode: EnumerationModes.NormalKeyboard, - vendorId: uhkDeviceProduct.vendorId, - productId: uhkDeviceProduct.keyboardPid }); if (bootloaderVersion) { @@ -62,6 +60,6 @@ import Uhk, { console.error('Can not read module bootloader'); } } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-module-state.ts b/packages/usb/get-module-state.ts index e023b51a007..4078db5e873 100755 --- a/packages/usb/get-module-state.ts +++ b/packages/usb/get-module-state.ts @@ -15,7 +15,7 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; .argv; const { operations } = Uhk(argv); - const rightModuleInfo = await operations.getRightModuleVersionInfo(); + const rightModuleInfo = await operations.getDeviceVersionInfo(); const isGitInfoSupported = isDeviceProtocolSupportGitInfo(rightModuleInfo.deviceProtocolVersion); const isFirmwareChecksum = isDeviceProtocolSupportFirmwareChecksum(rightModuleInfo.deviceProtocolVersion); const info = await operations.getModuleVersionInfo( @@ -25,6 +25,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; ); console.log(info); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-right-firmware-version.ts b/packages/usb/get-right-firmware-version.ts index 2e2b360563a..46b470328b8 100755 --- a/packages/usb/get-right-firmware-version.ts +++ b/packages/usb/get-right-firmware-version.ts @@ -5,11 +5,11 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; (async function () { try { const argv = yargs - .usage('Get Left firmware version') + .usage('Get Right firmware version') .argv; const { operations } = Uhk(argv); - const version = await operations.getRightModuleVersionInfo(); + const version = await operations.getDeviceVersionInfo(); console.log(`firmwareVersion: ${version.firmwareVersion}`); console.log(`deviceProtocolVersion: ${version.deviceProtocolVersion}`); @@ -17,7 +17,10 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; console.log(`userConfigVersion: ${version.userConfigVersion}`); console.log(`hardwareConfigVersion: ${version.hardwareConfigVersion}`); console.log(`smartMacrosVersion: ${version.smartMacrosVersion}`); + console.log(`firmwareGitRepo: ${version.firmwareGitRepo}`); + console.log(`firmwareGitTag: ${version.firmwareGitTag}`); + console.log(`firmwareChecksum: ${version.firmwareChecksum}`); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-slave-i2c-errors.ts b/packages/usb/get-slave-i2c-errors.ts index cf38c6a26e7..b7cfe7098d3 100755 --- a/packages/usb/get-slave-i2c-errors.ts +++ b/packages/usb/get-slave-i2c-errors.ts @@ -26,6 +26,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; console.log(str); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-uptime.ts b/packages/usb/get-uptime.ts index 805c8f7497a..e70652d729f 100755 --- a/packages/usb/get-uptime.ts +++ b/packages/usb/get-uptime.ts @@ -13,6 +13,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; const uptime = await operations.getUptime(); console.log(`uptime: ${uptime.days}d ${uptime.hours.toString(10).padStart(2, '')}:${uptime.minutes.toString(10).padStart(2, '')}:${uptime.seconds.toString(10).padStart(2, '')}`); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/get-variable.ts b/packages/usb/get-variable.ts index 71cdc896a95..5970df97481 100755 --- a/packages/usb/get-variable.ts +++ b/packages/usb/get-variable.ts @@ -26,6 +26,6 @@ import { UsbVariables } from 'uhk-usb'; console.log(value); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/hidapi-async-stress-test.ts b/packages/usb/hidapi-async-stress-test.ts index 6375edc20a6..0049499b139 100755 --- a/packages/usb/hidapi-async-stress-test.ts +++ b/packages/usb/hidapi-async-stress-test.ts @@ -17,6 +17,6 @@ const { operations } = Uhk(argv); await operations.getConfigSizesFromKeyboard(); } } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/jump-to-module-bootloader.ts b/packages/usb/jump-to-module-bootloader.ts index 5b083aef69f..ab2ad0e0f81 100755 --- a/packages/usb/jump-to-module-bootloader.ts +++ b/packages/usb/jump-to-module-bootloader.ts @@ -24,6 +24,6 @@ import { ModuleSlotToId } from 'uhk-common'; const { operations } = Uhk(argv); await operations.jumpToBootloaderModule(ModuleSlotToId[module]); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/kboot-firmware-upgrade.ts b/packages/usb/kboot-firmware-upgrade.ts index 815fdff06d3..79b24034078 100755 --- a/packages/usb/kboot-firmware-upgrade.ts +++ b/packages/usb/kboot-firmware-upgrade.ts @@ -11,7 +11,7 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; .usage('Upgrade firmwares') .argv; - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); const { operations } = Uhk(argv); const firmwareDir = path.join('../../tmp/packages/firmware'); @@ -26,6 +26,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; const leftFirmwarePath = path.join(firmwareDir, 'modules/uhk60-left.bin'); await operations.updateLeftModuleWithKboot(leftFirmwarePath, uhkDeviceProduct); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/package-lock.json b/packages/usb/package-lock.json index 1e8378e04aa..862553964eb 100644 --- a/packages/usb/package-lock.json +++ b/packages/usb/package-lock.json @@ -10,7 +10,7 @@ "license": "See in LICENSE", "dependencies": { "desm": "1.2.0", - "node-hid": "3.1.0", + "node-hid": "3.1.2", "yargs": "17.7.2" } }, @@ -105,10 +105,11 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node_modules/node-hid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.0.tgz", - "integrity": "sha512-YCTD1Ad3PHavx2+hY0QA468pn/gKa44U+fWB1KkRswisWtTROtBzdbmY+Xrm+QZSBCGTkdkgke7Ce606WcGxiQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.2.tgz", + "integrity": "sha512-5uBl8V4mmBWbeqsVfRvbsrlDBBxwzsC5k6gMVF5wOM2ZVyXUHG2zrfotIC6i+QM5ZCsDShaWsiJZOSdzPvsP+g==", "hasInstallScript": true, + "license": "(MIT OR X11)", "dependencies": { "node-addon-api": "^3.2.1", "pkg-prebuilds": "^1.0.0" @@ -285,9 +286,9 @@ "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==" }, "node-hid": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.0.tgz", - "integrity": "sha512-YCTD1Ad3PHavx2+hY0QA468pn/gKa44U+fWB1KkRswisWtTROtBzdbmY+Xrm+QZSBCGTkdkgke7Ce606WcGxiQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/node-hid/-/node-hid-3.1.2.tgz", + "integrity": "sha512-5uBl8V4mmBWbeqsVfRvbsrlDBBxwzsC5k6gMVF5wOM2ZVyXUHG2zrfotIC6i+QM5ZCsDShaWsiJZOSdzPvsP+g==", "requires": { "node-addon-api": "^3.2.1", "pkg-prebuilds": "^1.0.0" diff --git a/packages/usb/package.json b/packages/usb/package.json index 8f70221f1be..092cc6c3777 100644 --- a/packages/usb/package.json +++ b/packages/usb/package.json @@ -9,7 +9,7 @@ "desm": "1.2.0", "yargs": "17.7.2", "kboot": "0.0.0", - "node-hid": "3.1.0", + "node-hid": "3.1.2", "uhk-common": "1.0.0", "uhk-usb": "1.0.0" }, diff --git a/packages/usb/pair-device-to-dongle.ts b/packages/usb/pair-device-to-dongle.ts new file mode 100755 index 00000000000..9994d4fe9f7 --- /dev/null +++ b/packages/usb/pair-device-to-dongle.ts @@ -0,0 +1,31 @@ +#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning + +import { UhkHidDevice } from 'uhk-usb'; +import { getCurrentUhkDongleHID } from 'uhk-usb'; + +import Uhk, { errorHandler, yargs } from './src/index.js'; + +const argv = yargs + .scriptName('./pair-device-to-dongle.ts') + .usage('Pair UHK 80 Right half to UHK Dongle') + .argv as any; + +const { logger, rootDir, operations, device } = Uhk(argv); + +try { + const dongleHidDevice = await getCurrentUhkDongleHID(); + if (!dongleHidDevice) { + console.log('Dongle device is not found'); + process.exit(1); + } + + const dongleUhkDevice = new UhkHidDevice( + logger, + argv, + rootDir, + dongleHidDevice + ); + await operations.pairToDongle(dongleUhkDevice); +} catch (error) { + await errorHandler(error); +} diff --git a/packages/usb/read-config.ts b/packages/usb/read-config.ts index f5f0405819f..2670f8167e2 100755 --- a/packages/usb/read-config.ts +++ b/packages/usb/read-config.ts @@ -31,6 +31,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; console.log('read ', bufferToString(config)); fs.writeFileSync(fileName, config); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/reenumerate.ts b/packages/usb/reenumerate.ts index 9b36445c4c5..2a226c517bc 100755 --- a/packages/usb/reenumerate.ts +++ b/packages/usb/reenumerate.ts @@ -1,12 +1,22 @@ #!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning -import Uhk, { errorHandler, yargs } from './src/index.js'; +import { devices as HidDevices} from 'node-hid'; +import { SerialPort} from 'serialport'; +import { + ALL_UHK_DEVICES, + UHK_80_DEVICE, + UHK_80_DEVICE_LEFT, + UHK_DONGLE, + UhkDeviceProduct, +} from 'uhk-common'; import { EnumerationModes, - getCurrentUhkDeviceProduct, - getDeviceEnumerateProductId + deviceVidPidInterfaceFilter, + isUhkCommunicationUsage, } from 'uhk-usb'; +import Uhk, { errorHandler, yargs } from './src/index.js'; + (async function () { try { const argv = yargs @@ -31,16 +41,78 @@ import { process.exit(1); } const enumerationMode = EnumerationModes[mode]; - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); - const enumerationProductId = getDeviceEnumerateProductId(uhkDeviceProduct, enumerationMode); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); const { device } = Uhk(argv); await device.reenumerate({ + device: uhkDeviceProduct, enumerationMode, - vendorId: uhkDeviceProduct.vendorId, - productId: enumerationProductId, timeout: argv.timeout}); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); + +async function getCurrentUhkDeviceProduct(argv: any): Promise { + let uhkDeviceProduct: UhkDeviceProduct; + const isVidPidInterfaceMatching = deviceVidPidInterfaceFilter(argv); + + function setUhkDeviceProduct(device: UhkDeviceProduct) { + if (uhkDeviceProduct) { + throw new Error('Multiple devices aren\'t supported yet, so please connect only a single device to proceed further.'); + } + + uhkDeviceProduct = device; + } + + const hidDevices = HidDevices(); + + for (const hidDevice of hidDevices) { + for (const uhkDevice of ALL_UHK_DEVICES) { + if (argv['serial-number']) { + if (argv['serial-number'] === hidDevice.serialNumber) { + if (!argv.vid && isUhkCommunicationUsage(hidDevice)) { + setUhkDeviceProduct(uhkDevice); + } else if (isVidPidInterfaceMatching(hidDevice)) { + setUhkDeviceProduct(uhkDevice); + } + } + else { + continue; + } + } + + if (uhkDevice.bootloader.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId) || + uhkDevice.keyboard.some(vidPid => vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId) + ) { + if (!argv.vid && isUhkCommunicationUsage(hidDevice)) { + setUhkDeviceProduct(uhkDevice); + } else if (isVidPidInterfaceMatching(hidDevice)) { + setUhkDeviceProduct(uhkDevice); + } + } + } + } + + const serialDevices = await SerialPort.list(); + + const uhk80Devices = [ + UHK_80_DEVICE_LEFT, + UHK_80_DEVICE, + UHK_DONGLE, + ]; + + for (const serialDevice of serialDevices) { + for (const uhkDevice of uhk80Devices) { + if (uhkDevice.bootloader.some(vidPid => Number.parseInt(serialDevice.vendorId, 16) === vidPid.vid && Number.parseInt(serialDevice.productId, 16) === vidPid.pid)) { + setUhkDeviceProduct(uhkDevice); + } + } + } + + if (!uhkDeviceProduct) { + throw new Error('Can not find connected device'); + } + + return uhkDeviceProduct; +} diff --git a/packages/usb/send-command-80.js b/packages/usb/send-command-80.js new file mode 100755 index 00000000000..5a066d17abf --- /dev/null +++ b/packages/usb/send-command-80.js @@ -0,0 +1,84 @@ +#!/usr/bin/env -S node + +import HID, {HIDAsync} from 'node-hid'; + +const devices = HID.devices(); +const device = devices.find(dev => dev.vendorId === 0x1D50 && dev.productId === 0x6125 && dev.usagePage === 65280 && dev.usage === 1); + +if (!device) { + console.error('Device not found'); + process.exit(1); +} + +/**************************************************************************************** + * Method 1 - using write and async read + * The expected behaviour is log any data or error response +****************************************************************************************/ +// const hid = new HID.HID(device.path); +// +// hid.on('data', (data) => { +// console.log('data: ', data); +// }) +// hid.on('error', (error) => { +// console.log('error: ', error); +// }) +// +// console.log('write: 4 9'); +// hid.write([4, 9]) +// console.log('read...'); + +/**************************************************************************************** + * Method 2 - using write and sync read + * The expected behaviour is log any data or thrown an error + ****************************************************************************************/ +// const hid = new HID.HID(device.path); +// +// console.log('write: 4 9'); +// hid.write([4, 9]) +// console.log('read...'); +// const data = hid.readSync(); +// +// console.log('data: ', data); + +/**************************************************************************************** + * Method 3 - using write and sync read with timeout + * The expected behaviour is log any data or thrown an error + ****************************************************************************************/ +const hid = new HID.HID(device.path); + +const dataToSend = [4, 9]; +console.log('write:', dataToSend); +hid.write(dataToSend) +console.log('read 5 second timeout'); +const data = hid.readTimeout(5000); // 5 seconds timeout + +console.log('data: ', data); + + +/**************************************************************************************** + * Method 4 - use feature reports + * Totally not working + ****************************************************************************************/ +// const hid = new HID.HID(device.path); +// +// console.log('write: 4 9'); +// hid.sendFeatureReport([4, 9]) +// console.log('read...'); +// const data = hid.getFeatureReport(4, 1); +// +// console.log('data: ', data); + +/**************************************************************************************** + * Method 5 - new node-hid async API + ****************************************************************************************/ +// const hid = await HID.HIDAsync.open(device.path); +// hid.on('data', (data) => { +// console.log('data: ', data); +// }) +// hid.on('error', (error) => { +// console.log('error: ', error); +// }) +// +// console.log('write: 4 9'); +// await hid.write([4, 9]) +// console.log('read...'); diff --git a/packages/usb/send-command.ts b/packages/usb/send-command.ts index 8680ce71179..568224aa8ef 100755 --- a/packages/usb/send-command.ts +++ b/packages/usb/send-command.ts @@ -32,5 +32,5 @@ try { process.stdout.write(response.toString('utf8', 1)); process.stdout.write('\n'); } catch (error) { - errorHandler(error); + await errorHandler(error); } diff --git a/packages/usb/send-kboot-command-to-module.ts b/packages/usb/send-kboot-command-to-module.ts index 75242f979ef..93f71d2e9f8 100755 --- a/packages/usb/send-kboot-command-to-module.ts +++ b/packages/usb/send-kboot-command-to-module.ts @@ -42,6 +42,6 @@ import Uhk, { errorHandler, getI2cAddressFromArg, yargs } from './src/index.js'; } } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/set-i2c-baud-rate.ts b/packages/usb/set-i2c-baud-rate.ts index 1bc0911ee5c..2ba71b46d96 100755 --- a/packages/usb/set-i2c-baud-rate.ts +++ b/packages/usb/set-i2c-baud-rate.ts @@ -26,6 +26,6 @@ You're free to use any value in between and test the results.`) const { operations } = Uhk(argv); await operations.setI2CBaudRate(baudRate); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/set-led-pwm-brightness.ts b/packages/usb/set-led-pwm-brightness.ts index 1a57e316346..b47e8391575 100755 --- a/packages/usb/set-led-pwm-brightness.ts +++ b/packages/usb/set-led-pwm-brightness.ts @@ -15,6 +15,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; await operations.setLedPwmBrightness(argv._[0]); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/set-variable.ts b/packages/usb/set-variable.ts index 72964a9f653..14e6cb1c745 100755 --- a/packages/usb/set-variable.ts +++ b/packages/usb/set-variable.ts @@ -34,6 +34,6 @@ import { UsbVariables } from 'uhk-usb'; await operations.setVariable(UsbVariables[variable], value); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/src/command-line.ts b/packages/usb/src/command-line.ts index b2502de1573..61e85218599 100644 --- a/packages/usb/src/command-line.ts +++ b/packages/usb/src/command-line.ts @@ -13,10 +13,23 @@ export const yargs = Yargs(hideBin(process.argv)) default: 'none', choices: ['all', 'config', 'misc', 'none', 'usb'] }) + .option('no-report-id', { + description: "Don't use report id for USB communication. The default value depends on the UHK device. You can not set --report-id and --no-report-id at the same time.", + type: 'boolean', + default: false, + }) .option('pid', { description: 'Set USB product id. If you set it you have to set the vid and usb-interface too.', type: 'number' }) + .option('report-id', { + description: 'Report Id that used for USB communication. If the value is -1 then does not use report id. The default value depends from the UHK device. For UHK 60 is 0. For UHK 80 is 4', + type: 'number', + }) + .option('serial-number', { + description: 'Use the specified USB device that serial-number is matching.', + type: 'string', + }) .option('usb-non-blocking', { description: 'Use USB non blocking communication', type: 'boolean', diff --git a/packages/usb/src/error-handler.ts b/packages/usb/src/error-handler.ts index e1ef68baddf..76593e1fdd4 100644 --- a/packages/usb/src/error-handler.ts +++ b/packages/usb/src/error-handler.ts @@ -1,9 +1,35 @@ +import { + CANT_FIND_CONNECTED_DEVICE_ERROR_MESSAGE, + getUhkDevices, + isUhkCommunicationInterface, + MULTIPLE_DEVICE_CONNECTED_ERROR_MESSAGE, + UHK_HID_DEVICE_NOT_CONNECTED, +} from 'uhk-usb'; + import { InvalidArgumentError } from './invalid-argument-error.js'; -export function errorHandler(error) { +export async function errorHandler(error) { if (error instanceof InvalidArgumentError) { console.error(error.message); - } else { + } + if (error.message === MULTIPLE_DEVICE_CONNECTED_ERROR_MESSAGE || + error.message === CANT_FIND_CONNECTED_DEVICE_ERROR_MESSAGE || + error.message === UHK_HID_DEVICE_NOT_CONNECTED) { + console.error(error.message); + + console.log('Available UHK devices:'); + const devices = await getUhkDevices(); + for(const device of devices) { + if (isUhkCommunicationInterface(device)) { + const selector = device.serialNumber + ? `--serial-number=${device.serialNumber}` + : `--vid=${device.vendorId} --pid=${device.productId} --usb-interface=${device.interface}`; + + console.log(`vid: ${device.vendorId} pid: ${device.productId} interface: ${device.interface} serial number: ${device.serialNumber} selector: ${selector}`); + } + } + } + else { console.error(error); } diff --git a/packages/usb/src/uhk.ts b/packages/usb/src/uhk.ts index 2f112a6794a..769ec18b776 100644 --- a/packages/usb/src/uhk.ts +++ b/packages/usb/src/uhk.ts @@ -7,21 +7,23 @@ import { parseLoggingOptions } from './parse-logging-options.js'; export interface Uhk { device: UhkHidDevice; logger: LogService; + rootDir: string; operations: UhkOperations; } -const tmpDir = join(import.meta.url, '../../tmp'); +const rootDir = join(import.meta.url, '../../tmp'); export default function (argv: any): Uhk { const logger = new LogService(); logger.setLogOptions(parseLoggingOptions(argv.log)); - const device = new UhkHidDevice(logger, argv, tmpDir); + const device = new UhkHidDevice(logger, argv, rootDir); const operations = new UhkOperations(logger, device); return { device, logger, + rootDir, operations }; } diff --git a/packages/usb/src/util/get-device-id-from-arg.ts b/packages/usb/src/util/get-device-id-from-arg.ts index 84261eb3061..d972604467d 100644 --- a/packages/usb/src/util/get-device-id-from-arg.ts +++ b/packages/usb/src/util/get-device-id-from-arg.ts @@ -1,8 +1,15 @@ +import { + UHK_60_DEVICE, + UHK_60_V2_DEVICE, + UHK_80_DEVICE, +} from 'uhk-common'; + import { InvalidArgumentError } from '../invalid-argument-error.js'; const DEVICES = new Map([ - ['uhk60v1', 1], - ['uhk60v2', 2] + ['uhk60v1', UHK_60_DEVICE.id], + ['uhk60v2', UHK_60_V2_DEVICE.id], + ['uhk80', UHK_80_DEVICE.id], ]); function getKeys(): string { diff --git a/packages/usb/switch-keymap.ts b/packages/usb/switch-keymap.ts index c49e70be719..c6e1c287cb9 100755 --- a/packages/usb/switch-keymap.ts +++ b/packages/usb/switch-keymap.ts @@ -14,6 +14,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; await operations.switchKeymap(argv._[0]); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/tsconfig.json b/packages/usb/tsconfig.json index 895992dc0ef..64ebfb16d46 100644 --- a/packages/usb/tsconfig.json +++ b/packages/usb/tsconfig.json @@ -3,7 +3,7 @@ "compileOnSave": false, "compilerOptions": { "declaration": false, - "module": "ES2020", + "module": "ES2022", "outDir": "./dist" } } diff --git a/packages/usb/update-device-firmware.ts b/packages/usb/update-device-firmware.ts index bf53b9c0030..32dbedacb8b 100755 --- a/packages/usb/update-device-firmware.ts +++ b/packages/usb/update-device-firmware.ts @@ -20,13 +20,13 @@ import { getCurrentUhkDeviceProduct } from 'uhk-usb'; } const { operations } = Uhk(argv); - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); console.log(`Updating right firmware from ${firmwarePath} ...`); - await operations.updateRightFirmwareWithKboot(firmwarePath, uhkDeviceProduct); + await operations.updateDeviceFirmware(firmwarePath, uhkDeviceProduct); console.log('Firmware updated.'); console.log('Reenumerating device...'); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/update-dongle-firmware.ts b/packages/usb/update-dongle-firmware.ts new file mode 100755 index 00000000000..3006ad51444 --- /dev/null +++ b/packages/usb/update-dongle-firmware.ts @@ -0,0 +1,45 @@ +#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning + +import { existsSync } from 'fs'; +import { UHK_DONGLE } from 'uhk-common'; +import { getUhkDongles } from 'uhk-usb'; + +import Uhk, { errorHandler, yargs } from './src/index.js'; + +(async () => { + try { + const argv = yargs + .scriptName('./update-dongle-firmware') + .usage('Usage: $0 ') + .demandCommand(1, 'Firmware path is required') + .argv as any; + + const firmwarePath = argv._[0]; + + if (!existsSync(firmwarePath)) { + console.log('Firmware path does not exists.'); + process.exit(1); + } + + const dongles = getUhkDongles(); + + if (dongles.length === 0) { + console.log('UHK Dongle not connected'); + process.exit(1); + } + + if (dongles.length > 1) { + console.log('More then 1 UHK Dongle connected'); + process.exit(1) ; + } + + const { operations } = Uhk(argv); + console.log(`Updating Dongle firmware from ${firmwarePath} ...`); + await operations.updateDeviceFirmware(firmwarePath, UHK_DONGLE); + console.log('Firmware updated.'); + console.log('Reenumerating device...'); + + } catch (error) { + await errorHandler(error); + } +})(); diff --git a/packages/usb/update-firmwares-and-configs.ts b/packages/usb/update-firmwares-and-configs.ts index 630aa826993..5b546e62492 100755 --- a/packages/usb/update-firmwares-and-configs.ts +++ b/packages/usb/update-firmwares-and-configs.ts @@ -2,7 +2,20 @@ import * as path from 'path'; import * as fs from 'fs'; -import { getCurrentUhkDeviceProduct, getDeviceFirmwarePath, getFirmwarePackageJson } from 'uhk-usb'; +import { + FIRMWARE_UPGRADE_METHODS, + LEFT_HALF_MODULE, + UHK_80_DEVICE_LEFT, +} from 'uhk-common'; +import { waitForUhkDeviceConnected } from 'uhk-usb'; +import { isUhkDeviceConnected } from 'uhk-usb'; +import { + getCurrentUhkDeviceProduct, + getDeviceFirmwarePath, + getDeviceUserConfigPath, + getFirmwarePackageJson, + getModuleFirmwarePath +} from 'uhk-usb'; import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; @@ -12,7 +25,11 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; .scriptName('./update-firmwares-and-configs.ts') .usage('Usage: $0 {uhk60v1|uhk60v2} {iso|ansi}') .demandCommand(2, 'Both firmwarePath and layout must be specified.') - .argv as any; + .option('set-serial-number', { + description: 'Use the given serial number instead of randomly generated one.', + type: 'number', + }) + .argv; const firmwarePath = argv._[0]; const deviceId = getDeviceIdFromArg(argv._[1] as string); @@ -23,7 +40,7 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; process.exit(1); } - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); const packageJsonPath = path.join(firmwarePath, 'package.json'); const packageJson = await getFirmwarePackageJson({ @@ -36,13 +53,16 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; process.exit(1); } - const leftFirmwarePath = path.join(firmwarePath, '/modules/uhk60-left.bin'); + const leftFirmwarePath = uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT + ? getDeviceFirmwarePath(UHK_80_DEVICE_LEFT, packageJson) + : getModuleFirmwarePath(LEFT_HALF_MODULE, packageJson); + if (!fs.existsSync(leftFirmwarePath)) { console.error('Left firmware path not found!'); process.exit(1); } - const userConfigPath = path.join(firmwarePath, '/devices/uhk60-right/config.bin'); + const userConfigPath = getDeviceUserConfigPath(uhkDeviceProduct, packageJson); if (!fs.existsSync(userConfigPath)) { console.error('User configuration path not found!'); process.exit(1); @@ -54,13 +74,28 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; } const { operations } = Uhk(argv); - await operations.updateRightFirmwareWithKboot(rightFirmwarePath, uhkDeviceProduct); - await operations.updateLeftModuleWithKboot(leftFirmwarePath, uhkDeviceProduct); + await operations.updateDeviceFirmware(rightFirmwarePath, uhkDeviceProduct); + if (uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT) { + if (!(await isUhkDeviceConnected(UHK_80_DEVICE_LEFT))) { + console.log(`[DeviceService] Please connect your ${UHK_80_DEVICE_LEFT.logName} keyboard with USB cable.`); + } + await waitForUhkDeviceConnected(UHK_80_DEVICE_LEFT); + + await operations.updateFirmwareWithMcuManager(leftFirmwarePath, UHK_80_DEVICE_LEFT); + + if (!(await isUhkDeviceConnected(uhkDeviceProduct))) { + console.log(`[DeviceService] Please connect your ${uhkDeviceProduct.logName} keyboard with USB cable.`); + } + await waitForUhkDeviceConnected(uhkDeviceProduct); + } + else { + await operations.updateLeftModuleWithKboot(leftFirmwarePath, uhkDeviceProduct); + } const configBuffer = fs.readFileSync(userConfigPath) as any; await operations.saveUserConfiguration(configBuffer); - await operations.saveHardwareConfiguration(layout === 'iso', deviceId); + await operations.saveHardwareConfiguration(layout === 'iso', deviceId, argv.setSerialNumber); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/update-firmwares.ts b/packages/usb/update-firmwares.ts index 1b93f940cac..410803ce1ab 100755 --- a/packages/usb/update-firmwares.ts +++ b/packages/usb/update-firmwares.ts @@ -2,7 +2,20 @@ import * as path from 'path'; import * as fs from 'fs'; -import { getCurrentUhkDeviceProduct, getDeviceFirmwarePath, getFirmwarePackageJson } from 'uhk-usb'; +import { + FIRMWARE_UPGRADE_METHODS, + LEFT_HALF_MODULE, + UHK_80_DEVICE_LEFT, +} from 'uhk-common'; +import { waitForUhkDeviceConnected } from 'uhk-usb'; +import { isUhkDeviceConnected } from 'uhk-usb'; +import { + getCurrentUhkDeviceProduct, + getDeviceFirmwarePath, + getDeviceUserConfigPath, + getFirmwarePackageJson, + getModuleFirmwarePath +} from 'uhk-usb'; import Uhk, { errorHandler, yargs } from './src/index.js'; @@ -27,7 +40,7 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; process.exit(1); } - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); const packageJsonPath = path.join(firmwarePath, 'package.json'); const packageJson = await getFirmwarePackageJson({ @@ -42,18 +55,35 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; process.exit(1); } - const leftFirmwarePath = path.join(firmwarePath, '/modules/uhk60-left.bin'); + const leftFirmwarePath = uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT + ? getDeviceFirmwarePath(UHK_80_DEVICE_LEFT, packageJson) + : getModuleFirmwarePath(LEFT_HALF_MODULE, packageJson); + if (!fs.existsSync(leftFirmwarePath)) { console.error('Left firmware path not found!'); process.exit(1); } const { operations } = Uhk(argv); - await operations.updateRightFirmwareWithKboot(rightFirmwarePath, uhkDeviceProduct); - await operations.updateLeftModuleWithKboot(leftFirmwarePath, uhkDeviceProduct); + await operations.updateDeviceFirmware(rightFirmwarePath, uhkDeviceProduct); + if (uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT) { + if (!(await isUhkDeviceConnected(UHK_80_DEVICE_LEFT))) { + console.log(`[DeviceService] Please connect your ${UHK_80_DEVICE_LEFT.logName} keyboard with USB cable.`); + } + await waitForUhkDeviceConnected(UHK_80_DEVICE_LEFT); + + await operations.updateFirmwareWithMcuManager(leftFirmwarePath, UHK_80_DEVICE_LEFT); + if (!(await isUhkDeviceConnected(uhkDeviceProduct))) { + console.log(`[DeviceService] Please connect your ${uhkDeviceProduct.logName} keyboard with USB cable.`); + } + await waitForUhkDeviceConnected(uhkDeviceProduct); + } + else { + await operations.updateLeftModuleWithKboot(leftFirmwarePath, uhkDeviceProduct); + } if (argv['overwrite-user-config']) { - const userConfigPath = path.join(firmwarePath, '/devices/uhk60-right/config.bin'); + const userConfigPath = getDeviceUserConfigPath(uhkDeviceProduct, packageJson); if (!fs.existsSync(userConfigPath)) { console.error('User configuration path not found!'); process.exit(1); @@ -63,6 +93,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; await operations.saveUserConfiguration(configBuffer); } } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/update-module-firmware.ts b/packages/usb/update-module-firmware.ts index 44814cbf5a4..7a6b90fe8df 100755 --- a/packages/usb/update-module-firmware.ts +++ b/packages/usb/update-module-firmware.ts @@ -32,7 +32,7 @@ import Uhk, { getI2cAddressArgs, getI2cAddressFromArg, errorHandler, yargs } fro name: mapI2cAddressToModuleName(i2cAddress), firmwareUpgradeSupported: true }; - const uhkDeviceProduct = await getCurrentUhkDeviceProduct(); + const uhkDeviceProduct = await getCurrentUhkDeviceProduct(argv); const { operations } = Uhk(argv); console.log(`Updating ${uhkModule.name} module from ${firmwarePath} ...`); await operations.updateModuleWithKboot( @@ -43,6 +43,6 @@ import Uhk, { getI2cAddressArgs, getI2cAddressFromArg, errorHandler, yargs } fro console.log('Firmware updated.'); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/user-config-json-to-bin.ts b/packages/usb/user-config-json-to-bin.ts index 286f7e99b85..1b6bfe88126 100755 --- a/packages/usb/user-config-json-to-bin.ts +++ b/packages/usb/user-config-json-to-bin.ts @@ -4,8 +4,26 @@ import { UhkBuffer, UserConfiguration } from 'uhk-common'; import * as fs from 'fs'; import { join } from 'desm'; -const outputFile = process.argv[2]; -const inputFile = join(import.meta.url, '../uhk-web/src/app/services/user-config.json'); +import { yargs } from './src/index.js'; + +const USER_CONFIG_TYPES = '{uhk60|uhk80}' +; +const argv = yargs + .scriptName('./user-config-json-to-bin.ts') + .usage(`Usage: $0 ${USER_CONFIG_TYPES} `) + .demandCommand(2, 'User configuration type and output path are required') + .argv as any; + +const userConfigType = argv._[0]; +const outputFile = argv._[1]; + +if (userConfigType !== 'uhk60' && userConfigType !== 'uhk80') { + console.log(`Invalid user config type: ${userConfigType}. Available options: ${USER_CONFIG_TYPES}`); + process.exit(1); +} + +const inputFileName = userConfigType === 'uhk60' ? 'user-config.json' : 'user-config-80.json'; +const inputFile = join(import.meta.url, '..', 'uhk-web', 'src', 'app', 'services', inputFileName); const config1Js = JSON.parse(fs.readFileSync(inputFile).toString()); const config1Ts: UserConfiguration = new UserConfiguration().fromJsonObject(config1Js); const config1Buffer = new UhkBuffer(); diff --git a/packages/usb/wait-for-device.ts b/packages/usb/wait-for-device.ts new file mode 100755 index 00000000000..6265c01fe83 --- /dev/null +++ b/packages/usb/wait-for-device.ts @@ -0,0 +1,118 @@ +#!/usr/bin/env -S node --loader ts-node/esm --no-warnings=ExperimentalWarning + +import { devicesAsync } from 'node-hid'; +import { SerialPort } from 'serialport'; +import { + ALL_UHK_DEVICES, + FIRMWARE_UPGRADE_METHODS, + VidPidPair, +} from 'uhk-common'; +import { + isUhkCommunicationUsage, + snooze, +} from 'uhk-usb'; + +import { yargs } from './src/index.js'; + +const REENUMERATION_MODES = ['device', 'bootloader', 'buspal']; +const reenumerationOptions = REENUMERATION_MODES.join('|'); +const devicesOptions = ALL_UHK_DEVICES.map(uhkDevice => uhkDevice.asCliArg).join('|'); + +const argv = yargs + .scriptName('./wait-for-device.ts') + .usage(`Usage: $0 {${devicesOptions}} {${reenumerationOptions}} timeout`) + .demandCommand(2, 'Device and enumeration mode are required. Timeout in seconds is optional, default value 5 seconds.') + .argv; + +const deviceArg = argv._[0] as string; +const enumerationModeArg = argv._[1] as string; +const timeoutArg = argv._[2] as string; + +const uhkDeviceProduct = ALL_UHK_DEVICES.find(uhkDevice => uhkDevice.asCliArg === deviceArg); + +if (!uhkDeviceProduct) { + console.error(`Invalid device: ${deviceArg}. Available options: ${devicesOptions}`); + process.exit(1); +} + +const reenumerationMode = REENUMERATION_MODES.find(value => value === enumerationModeArg); + +if (!reenumerationMode) { + console.error(`Invalid reenumeration mode: ${enumerationModeArg}. Available options: ${reenumerationOptions}`); + process.exit(1); +} + +if (reenumerationMode === 'buspal' && uhkDeviceProduct.buspal.length === 0) { + console.error(`${deviceArg} does not support buspal reenumeration mode.`); + process.exit(1); +} + +let timeout = 5000; + +if (timeoutArg) { + const tmpTimeout = Number(timeoutArg); + if (Number.isNaN(tmpTimeout)) { + console.error(`Invalid timeout: ${timeoutArg}. Please provide a number.`); + process.exit(1); + } + + timeout = tmpTimeout; +} + + +let vidPids: VidPidPair[]; + +if (reenumerationMode === 'device') { + vidPids = uhkDeviceProduct.keyboard; +} +else if (reenumerationMode === 'bootloader') { + vidPids = uhkDeviceProduct.bootloader; +} +else if (reenumerationMode === 'buspal') { + vidPids = uhkDeviceProduct.buspal; +} +else { + console.error(`Not implemented reenumeration mode mapping: ${reenumerationMode}`); +} + +const startTime = new Date(); + +let found = false; + +while (new Date().getTime() - startTime.getTime() < timeout && !found) { + + if (reenumerationMode === 'bootloader' && uhkDeviceProduct.firmwareUpgradeMethod === FIRMWARE_UPGRADE_METHODS.MCUBOOT) { + const serialDevices = await SerialPort.list(); + + for (const serialDevice of serialDevices) { + found = vidPids.some(vidPid => Number.parseInt(serialDevice.vendorId, 16) === vidPid.vid && Number.parseInt(serialDevice.productId, 16) === vidPid.pid); + + if (found) { + break; + } + } + } + else { + const hidDevices = await devicesAsync(); + for (const hidDevice of hidDevices) { + found = vidPids.some(vidPid => { + return vidPid.vid === hidDevice.vendorId && vidPid.pid === hidDevice.productId + && (reenumerationMode !== 'device' || isUhkCommunicationUsage(hidDevice)); + }); + + if (found) { + break; + } + } + } + + await snooze(100); +} + +if (found) { + process.exit(0); +} +else { + console.error('Cannot find device within timeout'); + process.exit(1); +} diff --git a/packages/usb/wait-for-kboot-idle.ts b/packages/usb/wait-for-kboot-idle.ts index 19b9687060c..71f1f34b86c 100755 --- a/packages/usb/wait-for-kboot-idle.ts +++ b/packages/usb/wait-for-kboot-idle.ts @@ -13,6 +13,6 @@ import Uhk, { errorHandler, yargs } from './src/index.js'; await operations.waitForKbootIdle(); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/write-hardware-config.ts b/packages/usb/write-hardware-config.ts index 05b6fe10445..d18106d6972 100755 --- a/packages/usb/write-hardware-config.ts +++ b/packages/usb/write-hardware-config.ts @@ -6,8 +6,12 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; try { const argv = yargs .scriptName('./write-hardware-config.ts') - .usage('Usage: $0 {uhk60v1|uhk60v2} {iso|ansi}') + .usage('Usage: $0 {uhk60v1|uhk60v2|uhk80} {iso|ansi}') .demandCommand(2, 'DeviceId and layout is required.') + .option('set-serial-number', { + description: 'Use the given serial number instead of randomly generated one.', + type: 'number', + }) .argv; const deviceId = getDeviceIdFromArg(argv._[0] as string); @@ -19,9 +23,9 @@ import Uhk, { errorHandler, getDeviceIdFromArg, yargs } from './src/index.js'; } const { operations } = Uhk(argv); - await operations.saveHardwareConfiguration(layout === 'iso', deviceId); + await operations.saveHardwareConfiguration(layout === 'iso', deviceId, argv.setSerialNumber); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/packages/usb/write-user-config.ts b/packages/usb/write-user-config.ts index 4615be6e381..f31df711a0e 100755 --- a/packages/usb/write-user-config.ts +++ b/packages/usb/write-user-config.ts @@ -23,6 +23,6 @@ import * as fs from 'fs'; await operations.saveUserConfiguration(configBuffer); } catch (error) { - errorHandler(error); + await errorHandler(error); } })(); diff --git a/rules/50-uhk60.rules b/rules/50-uhk60.rules index 37afcbcb4e0..f162789cd2d 100644 --- a/rules/50-uhk60.rules +++ b/rules/50-uhk60.rules @@ -4,3 +4,7 @@ SUBSYSTEM=="input", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="612[0-7]", GROUP="input", MODE="0660" SUBSYSTEMS=="usb", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="612[0-7]", TAG+="uaccess" KERNEL=="hidraw*", ATTRS{idVendor}=="1d50", ATTRS{idProduct}=="612[0-7]", TAG+="uaccess" + +SUBSYSTEM=="input", ATTRS{idVendor}=="37a8", ATTRS{idProduct}=="*", GROUP="input", MODE="0660" +SUBSYSTEMS=="usb", ATTRS{idVendor}=="37a8", ATTRS{idProduct}=="*", TAG+="uaccess" +KERNEL=="hidraw*", ATTRS{idVendor}=="37a8", ATTRS{idProduct}=="*", TAG+="uaccess" diff --git a/rules/setup-rules.sh b/rules/setup-rules.sh index 4059fc2ebc9..155593c3a49 100755 --- a/rules/setup-rules.sh +++ b/rules/setup-rules.sh @@ -2,5 +2,6 @@ cd $(dirname $0) cp 50-uhk60.rules /etc/udev/rules.d +udevadm control --reload-rules udevadm trigger udevadm settle