diff --git a/.eslintrc.js b/.eslintrc.js index be2d849..ddbd0d8 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -3,7 +3,7 @@ module.exports = { parserOptions: { ecmaVersion: 2020, sourceType: 'module', - project: './tsconfig.json', + project: './tsconfig.eslint.json', }, env: { browser: false, diff --git a/.github/workflows/api-docs.yml b/.github/workflows/api-docs.yml index 4137c69..8499519 100644 --- a/.github/workflows/api-docs.yml +++ b/.github/workflows/api-docs.yml @@ -31,10 +31,14 @@ jobs: steps: - name: Checkout uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: '24.x' + cache: 'npm' - name: Setup Pages uses: actions/configure-pages@v4 - name: Build docs - run: npm install && npm run generate-api-reference + run: npm ci && npm run generate-api-reference - name: Upload artifact uses: actions/upload-pages-artifact@v3 with: diff --git a/.github/workflows/npm-build.yml b/.github/workflows/npm-build.yml index 28519fc..08fd5d0 100644 --- a/.github/workflows/npm-build.yml +++ b/.github/workflows/npm-build.yml @@ -10,7 +10,7 @@ jobs: build: strategy: matrix: - node-version: [latest] + node-version: [24.x] os: [windows-latest, macos-latest, ubuntu-latest] runs-on: ${{ matrix.os }} steps: diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml index d42dacd..a9f7cbc 100644 --- a/.github/workflows/publish-package.yml +++ b/.github/workflows/publish-package.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: 20.x + node-version: 24.x - run: npm ci - run: npm test @@ -25,7 +25,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: '20.x' + node-version: '24.x' registry-url: 'https://npm.pkg.github.com' - run: npm ci - run: npm publish diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index a38f924..0d88412 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -32,7 +32,7 @@ jobs: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: - node-version: '20.x' + node-version: '24.x' registry-url: 'https://registry.npmjs.org' - run: npm ci - run: npm run build diff --git a/.husky/pre-commit b/.husky/pre-commit index 367c595..ee6b430 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,11 +1,3 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -exit_with_warning_message(){ - echo "\e[0;33m$1\e[m" - exit 1 -} - echo "Formatting and linting staged files ✨" -./node_modules/.bin/lint-staged || exit_with_warning_message "\nCode contains linting errors.\n" +npm run precommit echo "Successfully formatted and linted staged files ✨" diff --git a/package-lock.json b/package-lock.json index d99d5c7..c0fa3e6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,22 +1,20 @@ { "name": "node-simconnect", - "version": "4.1.0-beta.1", + "version": "4.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "node-simconnect", - "version": "4.1.0-beta.1", + "version": "4.1.0", "license": "LGPL-3.0-or-later", "dependencies": { - "@types/node": "*", - "bytebuffer": "^5.0.1", "debug": "^4.3.4", "ini": "^2.0.0", "regedit": "^5.1.1" }, "devDependencies": { - "@types/bytebuffer": "^5.0.44", + "@types/node": "*", "@types/debug": "^4.1.7", "@types/ini": "^1.3.30", "@types/jest": "^29.2.4", @@ -30,18 +28,18 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-tsdoc": "^0.2.17", - "husky": "^8.0.1", + "husky": "^9.1.7", "jest": "^29.3.1", - "lint-staged": "^12.4.2", + "lint-staged": "^16.4.0", "prettier": "^2.6.2", "pretty-quick": "^3.1.0", - "ts-jest": "^29.0.3", - "typedoc": "^0.25.4", - "typescript": "^4.9.4" + "ts-jest": "^29.4.1", + "typedoc": "^0.28.13", + "typescript": "^6.0.0" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=20.17.0", + "npm": ">=10.0.0" } }, "node_modules/@ampproject/remapping": { @@ -567,10 +565,11 @@ } }, "node_modules/@eslint/eslintrc/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==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -590,6 +589,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@gerrit0/mini-shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.23.0.tgz", + "integrity": "sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==", + "dev": true, + "dependencies": { + "@shikijs/engine-oniguruma": "^3.23.0", + "@shikijs/langs": "^3.23.0", + "@shikijs/themes": "^3.23.0", + "@shikijs/types": "^3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, "node_modules/@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -1022,6 +1034,50 @@ "node": ">= 8" } }, + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "dev": true, + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "dev": true, + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "dev": true, + "dependencies": { + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "dev": true, + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true + }, "node_modules/@sinclair/typebox": { "version": "0.24.51", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", @@ -1087,16 +1143,6 @@ "@babel/types": "^7.3.0" } }, - "node_modules/@types/bytebuffer": { - "version": "5.0.44", - "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.44.tgz", - "integrity": "sha512-k1qonHga/SfQT02NF633i+7tIfKd+cfC/8pjnedcfuXJNMWooss/FkCgRMSnLf2WorLjbuH4bfgAZEbtyHBDoQ==", - "dev": true, - "dependencies": { - "@types/long": "^3.0.0", - "@types/node": "*" - } - }, "node_modules/@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -1115,6 +1161,15 @@ "@types/node": "*" } }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/ini": { "version": "1.3.30", "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", @@ -1167,12 +1222,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "node_modules/@types/long": { - "version": "3.0.32", - "resolved": "https://registry.npmjs.org/@types/long/-/long-3.0.32.tgz", - "integrity": "sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==", - "dev": true - }, "node_modules/@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -1202,6 +1251,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true + }, "node_modules/@types/yargs": { "version": "17.0.17", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz", @@ -1460,19 +1515,6 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -1525,12 +1567,6 @@ "node": ">=8" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, "node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -1632,15 +1668,6 @@ "node": ">=8" } }, - "node_modules/astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/babel-jest": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.3.1.tgz", @@ -1739,10 +1766,11 @@ "dev": true }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1815,17 +1843,6 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "node_modules/bytebuffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", - "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", - "dependencies": { - "long": "~3" - }, - "engines": { - "node": ">=0.8" - } - }, "node_modules/call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -1913,48 +1930,45 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "node_modules/clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, + "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" + "restore-cursor": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, + "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/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.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -1962,36 +1976,31 @@ "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/cli-truncate/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/cli-truncate/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==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, + "license": "MIT", "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/cli-truncate/node_modules/strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -2066,18 +2075,20 @@ "dev": true }, "node_modules/colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", - "dev": true + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true, + "license": "MIT" }, "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true, + "license": "MIT", "engines": { - "node": ">= 12" + "node": ">=20" } }, "node_modules/concat-map": { @@ -2203,12 +2214,6 @@ "node": ">=6.0.0" } }, - "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 - }, "node_modules/electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -2242,6 +2247,31 @@ "once": "^1.4.0" } }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -2758,10 +2788,11 @@ } }, "node_modules/eslint/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==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -2931,6 +2962,13 @@ "node": ">=0.10.0" } }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true, + "license": "MIT" + }, "node_modules/execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -3118,10 +3156,11 @@ } }, "node_modules/flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", - "dev": true + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", + "dev": true, + "license": "ISC" }, "node_modules/fs.realpath": { "version": "1.0.0", @@ -3203,6 +3242,19 @@ "node": "6.* || 8.* || >= 10.*" } }, + "node_modules/get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -3312,6 +3364,27 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "node_modules/handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, "node_modules/has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -3409,15 +3482,16 @@ } }, "node_modules/husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true, + "license": "MIT", "bin": { - "husky": "lib/bin.js" + "husky": "bin.js" }, "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/typicode" @@ -3490,15 +3564,6 @@ "node": ">=0.8.19" } }, - "node_modules/indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -4566,10 +4631,11 @@ "dev": true }, "node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -4609,9 +4675,9 @@ "dev": true }, "node_modules/json5": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", - "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true, "bin": { "json5": "lib/cli.js" @@ -4620,12 +4686,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "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 - }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -4644,203 +4704,209 @@ "node": ">=6" } }, - "node_modules/lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true, - "engines": { - "node": ">=10" - } - }, "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 }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/lint-staged": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.4.2.tgz", - "integrity": "sha512-JAJGIzY/OioIUtrRePr8go6qUxij//mL+RGGoFKU3VWQRtIHgWoHizSqH0QVn2OwrbXS9Q6CICQjfj+E5qvrXg==", - "dev": true, - "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^8.3.0", - "debug": "^4.3.3", - "execa": "^5.1.1", - "lilconfig": "2.0.4", - "listr2": "^4.0.1", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.0", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.1", - "yaml": "^1.10.2" + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.4.0.tgz", + "integrity": "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^14.0.3", + "listr2": "^9.0.5", + "picomatch": "^4.0.3", + "string-argv": "^0.3.2", + "tinyexec": "^1.0.4", + "yaml": "^2.8.2" }, "bin": { "lint-staged": "bin/lint-staged.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=20.17" }, "funding": { "url": "https://opencollective.com/lint-staged" } }, - "node_modules/lint-staged/node_modules/supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", + "node_modules/lint-staged/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, + "license": "MIT", "dependencies": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "node": ">=20.0.0" } }, - "node_modules/listr2/node_modules/cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "dependencies": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/node_modules/slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": 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/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/listr2/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==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "environment": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, - "node_modules/lodash.memoize": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", - "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", - "dev": 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/log-update/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "get-east-asian-width": "^1.3.1" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log-update/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==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=", + "node_modules/log-update/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, "engines": { - "node": ">=0.6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/lunr": { @@ -4879,22 +4945,39 @@ "tmpl": "1.0.5" } }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", "dev": true, - "bin": { - "marked": "bin/marked.js" + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, - "engines": { - "node": ">= 12" + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "node_modules/markdown-it/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 + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true + }, + "node_modules/merge-stream": { + "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 }, "node_modules/merge2": { @@ -4928,11 +5011,25 @@ "node": ">=6" } }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "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": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -4982,6 +5079,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "node_modules/neo-async": { + "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 + }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -5133,21 +5236,6 @@ "node": ">=8" } }, - "node_modules/p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -5236,10 +5324,11 @@ "dev": true }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.6" }, @@ -5247,18 +5336,6 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/pirates": { "version": "4.0.5", "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.5.tgz", @@ -5439,6 +5516,15 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -5569,16 +5655,49 @@ } }, "node_modules/restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, + "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/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, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/reusify": { @@ -5592,10 +5711,11 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", - "dev": true + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true, + "license": "MIT" }, "node_modules/rimraf": { "version": "3.0.2", @@ -5635,21 +5755,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - }, "node_modules/semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -5680,18 +5785,6 @@ "node": ">=8" } }, - "node_modules/shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", - "dev": true, - "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, "node_modules/side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -5728,26 +5821,28 @@ } }, "node_modules/slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, "engines": { - "node": ">=12" + "node": ">=20" }, "funding": { "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/slice-ansi/node_modules/ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -5756,12 +5851,16 @@ } }, "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", "dev": true, + "license": "MIT", + "dependencies": { + "get-east-asian-width": "^1.3.1" + }, "engines": { - "node": ">=12" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5815,10 +5914,11 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "node_modules/string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.19" } @@ -5964,12 +6064,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "node_modules/through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, "node_modules/through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", @@ -5979,6 +6073,16 @@ "xtend": ">=4.0.0 <4.1.0-0" } }, + "node_modules/tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, "node_modules/tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -5998,37 +6102,43 @@ } }, "node_modules/ts-jest": { - "version": "29.0.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.3.tgz", - "integrity": "sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==", + "version": "29.4.9", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.9.tgz", + "integrity": "sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==", "dev": true, "dependencies": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.1", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.4", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", - "typescript": ">=4.3" + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", + "typescript": ">=4.3 <7" }, "peerDependenciesMeta": { "@babel/core": { "optional": true }, + "@jest/transform": { + "optional": true + }, "@jest/types": { "optional": true }, @@ -6037,13 +6147,16 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true, "bin": { "semver": "bin/semver.js" @@ -6115,62 +6228,107 @@ "node": ">=4" } }, + "node_modules/type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/typedoc": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.4.tgz", - "integrity": "sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==", + "version": "0.28.19", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.19.tgz", + "integrity": "sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==", "dev": true, "dependencies": { + "@gerrit0/mini-shiki": "^3.23.0", "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.1" + "markdown-it": "^14.1.1", + "minimatch": "^10.2.5", + "yaml": "^2.8.3" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 16" + "node": ">= 18", + "pnpm": ">= 10" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x" + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x || 6.0.x" + } + }, + "node_modules/typedoc/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" }, "engines": { - "node": ">=4.2.0" + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, + "node_modules/uglify-js": { + "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, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, "node_modules/unbox-primitive": { @@ -6249,18 +6407,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, "node_modules/walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -6310,18 +6456,95 @@ "node": ">=0.10.0" } }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.2.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, "node_modules/wrappy": { @@ -6361,12 +6584,19 @@ } }, "node_modules/yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { @@ -6804,9 +7034,9 @@ } }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -6820,6 +7050,19 @@ } } }, + "@gerrit0/mini-shiki": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.23.0.tgz", + "integrity": "sha512-bEMORlG0cqdjVyCEuU0cDQbORWX+kYCeo0kV1lbxF5bt4r7SID2l9bqsxJEM0zndaxpOUT7riCyIVEuqq/Ynxg==", + "dev": true, + "requires": { + "@shikijs/engine-oniguruma": "^3.23.0", + "@shikijs/langs": "^3.23.0", + "@shikijs/themes": "^3.23.0", + "@shikijs/types": "^3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, "@humanwhocodes/config-array": { "version": "0.9.5", "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.9.5.tgz", @@ -7166,6 +7409,50 @@ "fastq": "^1.6.0" } }, + "@shikijs/engine-oniguruma": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.23.0.tgz", + "integrity": "sha512-1nWINwKXxKKLqPibT5f4pAFLej9oZzQTsby8942OTlsJzOBZ0MWKiwzMsd+jhzu8YPCHAswGnnN1YtQfirL35g==", + "dev": true, + "requires": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "@shikijs/langs": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.23.0.tgz", + "integrity": "sha512-2Ep4W3Re5aB1/62RSYQInK9mM3HsLeB91cHqznAJMuylqjzNVAVCMnNWRHFtcNHXsoNRayP9z1qj4Sq3nMqYXg==", + "dev": true, + "requires": { + "@shikijs/types": "3.23.0" + } + }, + "@shikijs/themes": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.23.0.tgz", + "integrity": "sha512-5qySYa1ZgAT18HR/ypENL9cUSGOeI2x+4IvYJu4JgVJdizn6kG4ia5Q1jDEOi7gTbN4RbuYtmHh0W3eccOrjMA==", + "dev": true, + "requires": { + "@shikijs/types": "3.23.0" + } + }, + "@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "dev": true, + "requires": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true + }, "@sinclair/typebox": { "version": "0.24.51", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.24.51.tgz", @@ -7231,16 +7518,6 @@ "@babel/types": "^7.3.0" } }, - "@types/bytebuffer": { - "version": "5.0.44", - "resolved": "https://registry.npmjs.org/@types/bytebuffer/-/bytebuffer-5.0.44.tgz", - "integrity": "sha512-k1qonHga/SfQT02NF633i+7tIfKd+cfC/8pjnedcfuXJNMWooss/FkCgRMSnLf2WorLjbuH4bfgAZEbtyHBDoQ==", - "dev": true, - "requires": { - "@types/long": "^3.0.0", - "@types/node": "*" - } - }, "@types/debug": { "version": "4.1.7", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.7.tgz", @@ -7259,6 +7536,15 @@ "@types/node": "*" } }, + "@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "requires": { + "@types/unist": "*" + } + }, "@types/ini": { "version": "1.3.30", "resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.30.tgz", @@ -7311,12 +7597,6 @@ "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", "dev": true }, - "@types/long": { - "version": "3.0.32", - "resolved": "https://registry.npmjs.org/@types/long/-/long-3.0.32.tgz", - "integrity": "sha512-ZXyOOm83p7X8p3s0IYM3VeueNmHpkk/yMlP8CLeOnEcu6hIwPH7YjZBvhQkR0ZFS2DqZAxKtJ/M5fcuv3OU5BA==", - "dev": true - }, "@types/minimatch": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz", @@ -7346,6 +7626,12 @@ "integrity": "sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==", "dev": true }, + "@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true + }, "@types/yargs": { "version": "17.0.17", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.17.tgz", @@ -7498,16 +7784,6 @@ "dev": true, "requires": {} }, - "aggregate-error": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", - "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", - "dev": true, - "requires": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - } - }, "ajv": { "version": "6.12.6", "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", @@ -7543,12 +7819,6 @@ "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true }, - "ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -7620,12 +7890,6 @@ "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, - "astral-regex": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", - "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", - "dev": true - }, "babel-jest": { "version": "29.3.1", "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.3.1.tgz", @@ -7703,9 +7967,9 @@ "dev": true }, "brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.14.tgz", + "integrity": "sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g==", "dev": true, "requires": { "balanced-match": "^1.0.0", @@ -7757,14 +8021,6 @@ "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", "dev": true }, - "bytebuffer": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/bytebuffer/-/bytebuffer-5.0.1.tgz", - "integrity": "sha1-WC7qSxqHO20CCkjVjfhfC7ps/d0=", - "requires": { - "long": "~3" - } - }, "call-bind": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", @@ -7821,61 +8077,48 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, - "clean-stack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", - "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", - "dev": true - }, "cli-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", - "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", "dev": true, "requires": { - "restore-cursor": "^3.1.0" + "restore-cursor": "^5.0.0" } }, "cli-truncate": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-3.1.0.tgz", - "integrity": "sha512-wfOBkjXteqSnI59oPcJkcPl/ZmwvMMOj340qUIY1SKZCv0B9Cf4D4fAucRkIKQmsIuYK3x1rrgU7MeGRruiuiA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-5.2.0.tgz", + "integrity": "sha512-xRwvIOMGrfOAnM1JYtqQImuaNtDEv9v6oIYAs4LIHwTiKee8uwvIi363igssOC0O5U04i4AlENs79LQLu9tEMw==", "dev": true, "requires": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "slice-ansi": "^8.0.0", + "string-width": "^8.2.0" }, "dependencies": { "ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", - "dev": true - }, - "emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", "dev": true }, "string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.0.tgz", + "integrity": "sha512-6hJPQ8N0V0P3SNmP6h2J99RLuzrWz2gvT7VnK5tKvrNqJoyS9W4/Fb8mo31UiPvy00z7DQXkP2hnKBVav76thw==", "dev": true, "requires": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" } }, "strip-ansi": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.0.1.tgz", - "integrity": "sha512-cXNxvT8dFNRVfhVME3JAe98mkXDYN2O1l7jmcwMnOslDeESg1rF/OZMtK0nRAhiari1unG5cD4jG3rapUAkLbw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "dev": true, "requires": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" } } } @@ -7932,15 +8175,15 @@ "dev": true }, "colorette": { - "version": "2.0.16", - "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.16.tgz", - "integrity": "sha512-hUewv7oMjCp+wkBv5Rm0v87eJhq4woh5rSR+42YSQJKecCqgIqNkZ6lAlQms/BwHPJA5NKMRlpxPRv0n8HQW6g==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", "dev": true }, "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "dev": true }, "concat-map": { @@ -8037,12 +8280,6 @@ "esutils": "^2.0.2" } }, - "eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "dev": true - }, "electron-to-chromium": { "version": "1.4.284", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.284.tgz", @@ -8070,6 +8307,18 @@ "once": "^1.4.0" } }, + "entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true + }, + "environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -8207,9 +8456,9 @@ } }, "js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "requires": { "argparse": "^2.0.1" @@ -8588,6 +8837,12 @@ "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", "dev": true }, + "eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "dev": true + }, "execa": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", @@ -8745,9 +9000,9 @@ } }, "flatted": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.5.tgz", - "integrity": "sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.2.tgz", + "integrity": "sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==", "dev": true }, "fs.realpath": { @@ -8805,6 +9060,12 @@ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", "dev": true }, + "get-east-asian-width": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", + "dev": true + }, "get-intrinsic": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", @@ -8881,6 +9142,19 @@ "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", "dev": true }, + "handlebars": { + "version": "4.7.9", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.9.tgz", + "integrity": "sha512-4E71E0rpOaQuJR2A3xDZ+GM1HyWYv1clR58tC8emQNeQe3RH7MAzSbat+V0wG78LQBo6m6bzSG/L4pBuCsgnUQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" + } + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", @@ -8948,9 +9222,9 @@ "dev": true }, "husky": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.1.tgz", - "integrity": "sha512-xs7/chUH/CKdOCs7Zy0Aev9e/dKOMZf3K1Az1nar3tzlv0jfqnYtu235bstsWTmXOR0EfINrPa97yy4Lz6RiKw==", + "version": "9.1.7", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", + "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", "dev": true }, "if-async": { @@ -8998,12 +9272,6 @@ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", "dev": true }, - "indent-string": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", - "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -9804,9 +10072,9 @@ "dev": true }, "js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -9838,15 +10106,9 @@ "dev": true }, "json5": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz", - "integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ==", - "dev": true - }, - "jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", "dev": true }, "kleur": { @@ -9861,96 +10123,55 @@ "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", "dev": true }, - "lilconfig": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.4.tgz", - "integrity": "sha512-bfTIN7lEsiooCocSISTWXkiWJkRqtL9wYtYy+8EK3Y41qh3mpwPU0ycTOgjdY9ErwXCc8QyrQp82bdL0Xkm9yA==", - "dev": true - }, "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 }, + "linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "requires": { + "uc.micro": "^2.0.0" + } + }, "lint-staged": { - "version": "12.4.2", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-12.4.2.tgz", - "integrity": "sha512-JAJGIzY/OioIUtrRePr8go6qUxij//mL+RGGoFKU3VWQRtIHgWoHizSqH0QVn2OwrbXS9Q6CICQjfj+E5qvrXg==", - "dev": true, - "requires": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.16", - "commander": "^8.3.0", - "debug": "^4.3.3", - "execa": "^5.1.1", - "lilconfig": "2.0.4", - "listr2": "^4.0.1", - "micromatch": "^4.0.4", - "normalize-path": "^3.0.0", - "object-inspect": "^1.12.0", - "pidtree": "^0.5.0", - "string-argv": "^0.3.1", - "supports-color": "^9.2.1", - "yaml": "^1.10.2" + "version": "16.4.0", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-16.4.0.tgz", + "integrity": "sha512-lBWt8hujh/Cjysw5GYVmZpFHXDCgZzhrOm8vbcUdobADZNOK/bRshr2kM3DfgrrtR1DQhfupW9gnIXOfiFi+bw==", + "dev": true, + "requires": { + "commander": "^14.0.3", + "listr2": "^9.0.5", + "picomatch": "^4.0.3", + "string-argv": "^0.3.2", + "tinyexec": "^1.0.4", + "yaml": "^2.8.2" }, "dependencies": { - "supports-color": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-9.2.2.tgz", - "integrity": "sha512-XC6g/Kgux+rJXmwokjm9ECpD6k/smUoS5LKlUCcsYr4IY3rW0XyAympon2RmxGrlnZURMpg5T18gWDP9CsHXFA==", + "picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", "dev": true } } }, "listr2": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-4.0.5.tgz", - "integrity": "sha512-juGHV1doQdpNT3GSTs9IUN43QJb7KHdF9uqg7Vufs/tG9VTzpFphqF4pm/ICdAABGQxsyNn9CiYA3StkI6jpwA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-9.0.5.tgz", + "integrity": "sha512-ME4Fb83LgEgwNw96RKNvKV4VTLuXfoKudAmm2lP8Kk87KaMK0/Xrx/aAkMWmT8mDb+3MlFDspfbCs7adjRxA2g==", "dev": true, "requires": { - "cli-truncate": "^2.1.0", - "colorette": "^2.0.16", - "log-update": "^4.0.0", - "p-map": "^4.0.0", - "rfdc": "^1.3.0", - "rxjs": "^7.5.5", - "through": "^2.3.8", - "wrap-ansi": "^7.0.0" - }, - "dependencies": { - "cli-truncate": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-2.1.0.tgz", - "integrity": "sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==", - "dev": true, - "requires": { - "slice-ansi": "^3.0.0", - "string-width": "^4.2.0" - } - }, - "slice-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-3.0.0.tgz", - "integrity": "sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - } - }, - "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, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - } + "cli-truncate": "^5.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" } }, "locate-path": { @@ -9975,35 +10196,69 @@ "dev": true }, "log-update": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-4.0.0.tgz", - "integrity": "sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", "dev": true, "requires": { - "ansi-escapes": "^4.3.0", - "cli-cursor": "^3.1.0", - "slice-ansi": "^4.0.0", - "wrap-ansi": "^6.2.0" + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" }, "dependencies": { + "ansi-escapes": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.3.0.tgz", + "integrity": "sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==", + "dev": true, + "requires": { + "environment": "^1.0.0" + } + }, + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "requires": { + "get-east-asian-width": "^1.3.1" + } + }, "slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.2.tgz", + "integrity": "sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + } + }, + "strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "requires": { + "ansi-regex": "^6.2.2" } } } }, - "long": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", - "integrity": "sha1-2CG3E4yhy1gcFymQ7xTbIAtcR0s=" - }, "lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", @@ -10034,10 +10289,32 @@ "tmpl": "1.0.5" } }, - "marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "requires": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "dependencies": { + "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 + } + } + }, + "mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", "dev": true }, "merge-stream": { @@ -10068,10 +10345,16 @@ "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", "dev": true }, + "mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true + }, "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "requires": { "brace-expansion": "^1.1.7" @@ -10113,6 +10396,12 @@ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", "dev": true }, + "neo-async": { + "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 + }, "node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -10222,15 +10511,6 @@ "p-limit": "^2.2.0" } }, - "p-map": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", - "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", @@ -10295,15 +10575,9 @@ "dev": true }, "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "dev": true }, "pirates": { @@ -10433,6 +10707,12 @@ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", "dev": true }, + "punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true + }, "queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -10522,13 +10802,30 @@ "dev": true }, "restore-cursor": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", - "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", "dev": true, "requires": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "dependencies": { + "onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "requires": { + "mimic-function": "^5.0.0" + } + }, + "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 + } } }, "reusify": { @@ -10538,9 +10835,9 @@ "dev": true }, "rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", "dev": true }, "rimraf": { @@ -10561,23 +10858,6 @@ "queue-microtask": "^1.2.2" } }, - "rxjs": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.5.tgz", - "integrity": "sha512-sy+H0pQofO95VDmFLzyaw9xNJU4KTRSwQIGM6+iG3SypAtCiLDzpeG8sJrNCWn2Up9km+KhkvTdbkrdy+yzZdw==", - "dev": true, - "requires": { - "tslib": "^2.1.0" - }, - "dependencies": { - "tslib": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", - "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", - "dev": true - } - } - }, "semver": { "version": "6.3.1", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", @@ -10599,18 +10879,6 @@ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", "dev": true }, - "shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", - "dev": true, - "requires": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" - } - }, "side-channel": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", @@ -10641,26 +10909,29 @@ "dev": true }, "slice-ansi": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", - "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-8.0.0.tgz", + "integrity": "sha512-stxByr12oeeOyY2BlviTNQlYV5xOj47GirPr4yA1hE9JCtxfQN0+tVbkxwCtYDQWhEKWFHsEK48ORg5jrouCAg==", "dev": true, "requires": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" + "ansi-styles": "^6.2.3", + "is-fullwidth-code-point": "^5.1.0" }, "dependencies": { "ansi-styles": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.1.0.tgz", - "integrity": "sha512-VbqNsoz55SYGczauuup0MFUyXNQviSpFTj1RQtFzmQLk18qbVSpTFFGMT293rmDaQuKCT6InmbuEyUne4mTuxQ==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", "dev": true }, "is-fullwidth-code-point": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", - "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", - "dev": true + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.1.0.tgz", + "integrity": "sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==", + "dev": true, + "requires": { + "get-east-asian-width": "^1.3.1" + } } } }, @@ -10706,9 +10977,9 @@ "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=" }, "string-argv": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz", - "integrity": "sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true }, "string-length": { @@ -10813,12 +11084,6 @@ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", "dev": true }, - "through": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", - "dev": true - }, "through2": { "version": "0.6.5", "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", @@ -10828,6 +11093,12 @@ "xtend": ">=4.0.0 <4.1.0-0" } }, + "tinyexec": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", + "dev": true + }, "tmpl": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", @@ -10844,25 +11115,26 @@ } }, "ts-jest": { - "version": "29.0.3", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.0.3.tgz", - "integrity": "sha512-Ibygvmuyq1qp/z3yTh9QTwVVAbFdDy/+4BtIQR2sp6baF2SJU/8CKK/hhnGIDY2L90Az2jIqTwZPnN2p+BweiQ==", + "version": "29.4.9", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.9.tgz", + "integrity": "sha512-LTb9496gYPMCqjeDLdPrKuXtncudeV1yRZnF4Wo5l3SFi0RYEnYRNgMrFIdg+FHvfzjCyQk1cLncWVqiSX+EvQ==", "dev": true, "requires": { - "bs-logger": "0.x", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", - "json5": "^2.2.1", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "7.x", - "yargs-parser": "^21.0.1" + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.4", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "dependencies": { "semver": { - "version": "7.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", - "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", "dev": true } } @@ -10917,44 +11189,70 @@ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", "dev": true }, + "type-fest": { + "version": "4.41.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", + "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", + "dev": true + }, "typedoc": { - "version": "0.25.4", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.4.tgz", - "integrity": "sha512-Du9ImmpBCw54bX275yJrxPVnjdIyJO/84co0/L9mwe0R3G4FSR6rQ09AlXVRvZEGMUg09+z/usc8mgygQ1aidA==", + "version": "0.28.19", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.19.tgz", + "integrity": "sha512-wKh+lhdmMFivMlc6vRRcMGXeGEHGU2g8a2CkPTJjJlwRf1iXbimWIPcFolCqe4E0d/FRtGszpIrsp3WLpDB8Pw==", "dev": true, "requires": { + "@gerrit0/mini-shiki": "^3.23.0", "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.1" + "markdown-it": "^14.1.1", + "minimatch": "^10.2.5", + "yaml": "^2.8.3" }, "dependencies": { + "balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true + }, "brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "dev": true, "requires": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" } }, "minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", "dev": true, "requires": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.5" } } } }, "typescript": { - "version": "4.9.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.4.tgz", - "integrity": "sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-6.0.3.tgz", + "integrity": "sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==", "dev": true }, + "uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true + }, + "uglify-js": { + "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, + "optional": true + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -11011,18 +11309,6 @@ } } }, - "vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, "walker": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", @@ -11060,15 +11346,61 @@ "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true }, + "wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.2.tgz", + "integrity": "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==", "dev": true, "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true + }, + "emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "dev": true + }, + "string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "requires": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + } + }, + "strip-ansi": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", + "dev": true, + "requires": { + "ansi-regex": "^6.2.2" + } + } } }, "wrappy": { @@ -11099,9 +11431,9 @@ "dev": true }, "yaml": { - "version": "1.10.2", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", - "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", "dev": true }, "yargs": { diff --git a/package.json b/package.json index 00be1ad..7388ade 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,17 @@ "name": "node-simconnect", "version": "4.1.0", "description": "A SimConnect client library for Node.JS.", - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "./dist/index.js", + "types": "./dist/index.d.ts", "type": "commonjs", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.js", + "default": "./dist/index.js" + }, + "./package.json": "./package.json" + }, "scripts": { "build": "npx rimraf dist && tsc -p tsconfig.build.json", "build:watch": "tsc --watch", @@ -18,7 +26,7 @@ "link": "npm run build && cd dist && npm link", "precommit": "lint-staged", "prepublishOnly": "npm run clean && npm run build", - "prepare": "husky install", + "prepare": "husky", "generate-api-reference": "typedoc src/index.ts", "clean": "npx rimraf dist" }, @@ -42,7 +50,7 @@ }, "homepage": "https://github.com/EvenAR/node-simconnect#readme", "devDependencies": { - "@types/bytebuffer": "^5.0.44", + "@types/node": "*", "@types/debug": "^4.1.7", "@types/ini": "^1.3.30", "@types/jest": "^29.2.4", @@ -56,31 +64,28 @@ "eslint-plugin-prettier": "^4.0.0", "eslint-plugin-simple-import-sort": "^7.0.0", "eslint-plugin-tsdoc": "^0.2.17", - "husky": "^8.0.1", + "husky": "^9.1.7", "jest": "^29.3.1", - "lint-staged": "^12.4.2", + "lint-staged": "^16.4.0", "prettier": "^2.6.2", "pretty-quick": "^3.1.0", - "ts-jest": "^29.0.3", - "typedoc": "^0.25.4", - "typescript": "^4.9.4" + "ts-jest": "^29.4.1", + "typedoc": "^0.28.13", + "typescript": "^6.0.0" }, "dependencies": { - "@types/node": "*", - "bytebuffer": "^5.0.1", "debug": "^4.3.4", "ini": "^2.0.0", "regedit": "^5.1.1" }, "engines": { - "node": ">=18.0.0", - "npm": ">=8.0.0" + "node": ">=20.17.0", + "npm": ">=10.0.0" }, "files": [ "/dist", "/samples", "./package.json", - "./package-lock.json", "./README.md", "./LICENSE" ] diff --git a/samples/typescript/facilities.ts b/samples/typescript/facilities.ts index d706a52..b3254df 100644 --- a/samples/typescript/facilities.ts +++ b/samples/typescript/facilities.ts @@ -108,10 +108,10 @@ open('SimConnect sample client', Protocol.KittyHawk) console.log({ runway: number1 + - DESIGNATOR_VALUE[designator1] + + DESIGNATOR_VALUE[designator1]!! + '/' + number2 + - DESIGNATOR_VALUE[designator2], + DESIGNATOR_VALUE[designator2]!!, heading, ilsIcao1, ilsIcao2, diff --git a/src/RawBuffer.ts b/src/RawBuffer.ts index 76ded7c..bbd3194 100644 --- a/src/RawBuffer.ts +++ b/src/RawBuffer.ts @@ -1,226 +1,329 @@ -import ByteBuffer = require('bytebuffer'); - class RawBuffer { - private readonly buffer: ByteBuffer; + private buffer: Buffer; + + private offset = 0; + + private limit: number; constructor(b: Buffer | number) { if (typeof b === 'number') { - this.buffer = ByteBuffer.allocate(b).LE(true); + this.buffer = Buffer.alloc(b); + this.limit = b; } else { - this.buffer = ByteBuffer.wrap(b).LE(true); + this.buffer = Buffer.alloc(b.length); + this.buffer.set(b); + this.limit = b.length; } } clear() { - this.buffer.clear(); + this.offset = 0; + this.limit = this.buffer.length; } setOffset(offset: number) { - this.buffer.offset = offset; + this.assertBounds(offset, 0); + this.offset = offset; } getOffset(): number { - return this.buffer.offset; + return this.offset; } getBuffer(): Buffer { - this.buffer.flip(); - return this.buffer.toBuffer(true); + const copy = Buffer.alloc(this.offset); + copy.set(this.buffer.subarray(0, this.offset)); + return copy; } write(bytes: Buffer) { - this.buffer.append(bytes); + this.writeBuffer(bytes); } writeByte(byte: number) { - this.buffer.writeByte(byte); + this.writeAtCurrentOffset(1, currentOffset => { + this.buffer.writeUInt8(byte & 0xff, currentOffset); + }); } readBytes(length: number): Buffer { - const bytes = this.buffer.readBytes(length).copy(); - return bytes.toBuffer(); + const start = this.offset; + this.assertReadable(length); + this.offset += length; + const copy = Buffer.alloc(length); + copy.set(this.buffer.subarray(start, start + length)); + return copy; } readInt16(): number { - return this.buffer.readInt16(); + return this.readNumber(2, currentOffset => this.buffer.readInt16LE(currentOffset)); } readInt32(): number { - return this.buffer.readInt32(); + return this.readNumber(4, currentOffset => this.buffer.readInt32LE(currentOffset)); } readUint32(): number { - return this.buffer.readUint32(); + return this.readNumber(4, currentOffset => this.buffer.readUInt32LE(currentOffset)); } writeInt16(value: number, offset?: number) { - this.buffer.writeInt16(value, offset); + this.writeNumber( + 2, + currentOffset => this.buffer.writeInt16LE(value, currentOffset), + offset + ); } /** @deprecated use readInt32() instead */ readInt = this.readInt32; writeInt32(value: number, offset?: number) { - this.buffer.writeInt32(value, offset); + this.writeNumber( + 4, + currentOffset => this.buffer.writeInt32LE(value, currentOffset), + offset + ); } /** @deprecated use writeInt32() instead */ writeInt = this.writeInt32; readInt64(): number { - return this.buffer.readInt64().toNumber(); + return this.readNumber(8, currentOffset => + Number(this.buffer.readBigInt64LE(currentOffset)) + ); } readUint64(): bigint { - return BigInt(this.buffer.readUint64().toString(10)); + return this.readNumber(8, currentOffset => this.buffer.readBigUInt64LE(currentOffset)); } /** @deprecated use readInt64() instead */ readLong = this.readInt64; writeInt64(value: number) { - this.buffer.writeInt64(value); + this.writeAtCurrentOffset(8, currentOffset => { + this.buffer.writeBigInt64LE(BigInt(value), currentOffset); + }); } writeUint32(value: number, offset?: number) { - this.buffer.writeUint64(value, offset); + this.writeNumber( + 4, + currentOffset => this.buffer.writeUInt32LE(value, currentOffset), + offset + ); } writeUint64(value: bigint, offset?: number) { - const buffer = Buffer.alloc(8); - buffer.writeBigUint64LE(value); - this.buffer.append(buffer, undefined, offset); + this.writeNumber( + 8, + currentOffset => this.buffer.writeBigUInt64LE(value, currentOffset), + offset + ); } /** @deprecated use writeInt64() instead */ writeLong = this.writeInt64; readFloat32(): number { - return this.buffer.readFloat32(); + return this.readNumber(4, currentOffset => this.buffer.readFloatLE(currentOffset)); } /** @deprecated use readFloat32() instead */ readFloat = this.readFloat32; writeFloat32(value: number) { - this.buffer.writeFloat32(value); + this.writeAtCurrentOffset(4, currentOffset => { + this.buffer.writeFloatLE(value, currentOffset); + }); } /** @deprecated use writeFloat32() instead */ writeFloat = this.writeFloat32; - readFloat64() { - return this.buffer.readFloat64(); + readFloat64(): number { + return this.readNumber(8, currentOffset => this.buffer.readDoubleLE(currentOffset)); } /** @deprecated use readFloat64() instead */ readDouble = this.readFloat64; writeFloat64(value: number) { - this.buffer.writeFloat64(value); + this.writeAtCurrentOffset(8, currentOffset => { + this.buffer.writeDoubleLE(value, currentOffset); + }); } /** @deprecated use writeFloat64() instead */ writeDouble = this.writeFloat64; writeString(value: string, fixedLength?: number) { - putString(this.buffer, value, fixedLength || value.length); + putString(this, value, fixedLength || value.length); } readString8() { - return makeString(this.buffer, 8); + return makeString(this, 8); } writeString8(value: string) { - putString(this.buffer, value, 8); + putString(this, value, 8); } writeString30(value: string) { - putString(this.buffer, value, 30); + putString(this, value, 30); } readString32() { - return makeString(this.buffer, 32); + return makeString(this, 32); } writeString32(value: string) { - putString(this.buffer, value, 32); + putString(this, value, 32); } readString64() { - return makeString(this.buffer, 64); + return makeString(this, 64); } writeString64(value: string) { - putString(this.buffer, value, 64); + putString(this, value, 64); } readString128() { - return makeString(this.buffer, 128); + return makeString(this, 128); } writeString128(value: string) { - putString(this.buffer, value, 128); + putString(this, value, 128); } readString256() { - return makeString(this.buffer, 256); + return makeString(this, 256); } writeString256(value: string | null) { - putString(this.buffer, value, 256); + putString(this, value, 256); } readString260() { - return makeString(this.buffer, 260); + return makeString(this, 260); } writeString260(value: string) { - putString(this.buffer, value, 260); + putString(this, value, 260); } readStringV() { let bytesRead = 0; let strLen = 0; let endFound = false; - while (this.buffer.offset < this.buffer.limit) { - const currentByte = this.buffer.readByte(); + + while (this.offset < this.limit) { + const currentByte = this.buffer.readUInt8(this.offset); + this.offset++; bytesRead++; + if (endFound && currentByte !== 0) { - break; // Reached beginning of new value + break; } else if (currentByte === 0) { endFound = true; } + strLen++; } - // Reset offset so we can read the same bytes later - this.buffer.offset -= bytesRead; - return makeString(this.buffer, strLen); + + this.offset -= bytesRead; + return makeString(this, strLen); } readString(length: number) { - return makeString(this.buffer, length); + return makeString(this, length); } remaining() { - return this.buffer.remaining(); + return this.limit - this.offset; + } + + private readNumber(byteLength: number, reader: (offset: number) => T): T { + const currentOffset = this.offset; + this.assertReadable(byteLength); + this.offset += byteLength; + return reader(currentOffset); + } + + private writeNumber(byteLength: number, writer: (offset: number) => void, offset?: number) { + if (offset === undefined) { + this.writeAtCurrentOffset(byteLength, writer); + return; + } + + this.ensureCapacity(offset + byteLength); + writer(offset); + } + + private writeAtCurrentOffset(byteLength: number, writer: (offset: number) => void) { + const currentOffset = this.offset; + this.ensureCapacity(currentOffset + byteLength); + writer(currentOffset); + this.offset += byteLength; + } + + private writeBuffer(bytes: Buffer) { + this.writeAtCurrentOffset(bytes.length, currentOffset => { + this.buffer.set(bytes, currentOffset); + }); + } + + private assertReadable(byteLength: number) { + if (this.offset < 0 || this.offset + byteLength > this.limit) { + throw new RangeError( + `Illegal offset: 0 <= ${this.offset} (+${byteLength}) <= ${this.limit}` + ); + } + } + + private assertBounds(offset: number, byteLength: number) { + if (offset < 0 || offset + byteLength > this.limit) { + throw new RangeError( + `Illegal offset: 0 <= ${offset} (+${byteLength}) <= ${this.limit}` + ); + } + } + + private ensureCapacity(requiredLength: number) { + if (requiredLength <= this.buffer.length) { + return; + } + + let nextLength = this.buffer.length === 0 ? 1 : this.buffer.length; + while (nextLength < requiredLength) { + nextLength *= 2; + } + + const nextBuffer = Buffer.alloc(nextLength); + nextBuffer.set(this.buffer.subarray(0, this.limit)); + this.buffer = nextBuffer; + this.limit = nextLength; } } -function makeString(bf: ByteBuffer, expectedLength: number) { - const content = bf.readCString(bf.offset); - bf.skip(expectedLength); - return content.string; +function makeString(buffer: RawBuffer, expectedLength: number) { + const contentBytes = buffer.readBytes(expectedLength); + const endIndex = contentBytes.indexOf(0x00); + const stringBytes = endIndex === -1 ? contentBytes : contentBytes.subarray(0, endIndex); + return stringBytes.toString('latin1'); } -function putString(bf: ByteBuffer, s: string | null, fixed: number) { - const value = s === null ? '' : s; - const bytes = Buffer.from(value, 'utf-8'); - bf.append(bytes); +function putString(buffer: RawBuffer, value: string | null, fixed: number) { + const content = value === null ? '' : value; + const bytes = Buffer.from(content, 'latin1'); + + buffer.write(bytes); + if (bytes.length < fixed) { - for (let i = 0; i < fixed - bytes.length; i++) { - bf.writeByte(0x00); - } + buffer.write(Buffer.alloc(fixed - bytes.length)); } } diff --git a/src/SimConnectConnection.ts b/src/SimConnectConnection.ts index b99d4ca..3bc43b0 100644 --- a/src/SimConnectConnection.ts +++ b/src/SimConnectConnection.ts @@ -3,14 +3,14 @@ import { SimConnectDataType } from './enums/SimConnectDataType'; import { SimConnectPeriod } from './enums/SimConnectPeriod'; import { SimObjectType } from './enums/SimObjectType'; import { RawBuffer } from './RawBuffer'; -import { autodetectServerAddress, ConnectionParameters } from './connectionParameters'; +import { autodetectServerAddress } from './connectionParameters'; import { NotificationPriority } from './enums/NotificationPriority'; -import { IcaoType, InitPosition, SimConnectData } from './dto'; +import { IcaoType, InitPosition } from './dto'; import { TextType } from './enums/TextType'; import { FacilityListType } from './enums/FacilityListType'; import { ClientDataPeriod } from './enums/ClientDataPeriod'; import { Protocol } from './enums/Protocol'; -import { RecvID, SimConnectMessage, SimConnectSocket } from './SimConnectSocket'; +import { RecvID, SimConnectSocket } from './SimConnectSocket'; import { DataRequestFlag } from './flags/DataRequestFlag'; import { EventFlag } from './flags/EventFlag'; import { DataSetFlag } from './flags/DataSetFlag'; @@ -60,6 +60,9 @@ import { NotificationGroupId, ObjectId, } from './Types'; +import type { ConnectionParameters } from './connectionParameters'; +import type { SimConnectData } from './dto'; +import type { SimConnectMessage } from './SimConnectSocket'; import Timeout = NodeJS.Timeout; import { RecvEnumerateSimobjectAndLiveryList } from './recv/RecvEnumerateSimobjectAndLiveryList'; import { RecvFlowEvent } from './recv/RecvFlowEvent'; @@ -270,7 +273,7 @@ class SimConnectConnection extends EventEmitter { mapClientEventToSimEvent(clientEventId: ClientEventId, eventName?: string): number { return this._buildAndSend( this._beginPacket(0x04) - .putInt32(clientEventId) + .putUint32(clientEventId) .putString256(eventName || '') ); } @@ -288,11 +291,11 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x05) - .putInt32(objectId) - .putInt32(clientEventId) - .putInt32(data) - .putInt32(notificationGroupId) - .putInt32(flags) + .putUint32(objectId) + .putUint32(clientEventId) + .putUint32(data) + .putUint32(notificationGroupId) + .putUint32(flags) ); } @@ -303,8 +306,8 @@ class SimConnectConnection extends EventEmitter { setSystemEventState(clientEventId: ClientEventId, state: boolean): number { return this._buildAndSend( this._beginPacket(0x06) - .putInt32(clientEventId) - .putInt32(state ? 1 : 0) + .putUint32(clientEventId) + .putUint32(state ? 1 : 0) ); } @@ -319,9 +322,9 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x07) - .putInt32(notificationGroupId) - .putInt32(clientEventId) - .putInt32(maskable ? 1 : 0) + .putUint32(notificationGroupId) + .putUint32(clientEventId) + .putUint32(maskable ? 1 : 0) ); } @@ -335,8 +338,8 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x08) // - .putInt32(notificationGroupId) - .putInt32(clientEventId) + .putUint32(notificationGroupId) + .putUint32(clientEventId) ); } @@ -350,8 +353,8 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x09) // - .putInt32(notificationGroupId) - .putInt32(priority) + .putUint32(notificationGroupId) + .putUint32(priority) ); } @@ -362,7 +365,7 @@ class SimConnectConnection extends EventEmitter { clearNotificationGroup(notificationGroupId: NotificationGroupId): number { return this._buildAndSend( this._beginPacket(0x0a) // - .putInt32(notificationGroupId) + .putUint32(notificationGroupId) ); } @@ -377,9 +380,9 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x0b) // - .putInt32(notificationGroupId) - .putInt32(reserved) - .putInt32(flags) + .putUint32(notificationGroupId) + .putUint32(reserved) + .putUint32(flags) ); } @@ -397,12 +400,12 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x0c) - .putInt32(dataDefinitionId) + .putUint32(dataDefinitionId) .putString256(datumName) .putString256(unitsName) - .putInt32(dataType === undefined ? SimConnectDataType.FLOAT64 : dataType) + .putUint32(dataType === undefined ? SimConnectDataType.FLOAT64 : dataType) .putFloat32(epsilon || 0) - .putInt32(datumId === undefined ? SimConnectConstants.UNUSED : datumId) + .putUint32(datumId === undefined ? SimConnectConstants.UNUSED : datumId) ); } @@ -413,7 +416,7 @@ class SimConnectConnection extends EventEmitter { clearDataDefinition(dataDefinitionId: DataDefinitionId): number { return this._buildAndSend( this._beginPacket(0x0d) // - .putInt32(dataDefinitionId) + .putUint32(dataDefinitionId) ); } @@ -454,14 +457,14 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x0e) - .putInt32(dataRequestId) - .putInt32(dataDefinitionId) - .putInt32(objectId) - .putInt32(period) - .putInt32(flags || 0) - .putInt32(origin || 0) - .putInt32(interval || 0) - .putInt32(limit || 0) + .putUint32(dataRequestId) + .putUint32(dataDefinitionId) + .putUint32(objectId) + .putUint32(period) + .putUint32(flags || 0) + .putUint32(origin || 0) + .putUint32(interval || 0) + .putUint32(limit || 0) ); } @@ -481,10 +484,10 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x0f) - .putInt32(dataRequestId) - .putInt32(dataDefinitionId) - .putInt32(radiusMeters) - .putInt32(type) + .putUint32(dataRequestId) + .putUint32(dataDefinitionId) + .putUint32(radiusMeters) + .putUint32(type) ); } @@ -498,14 +501,14 @@ class SimConnectConnection extends EventEmitter { data: { buffer: RawBuffer; arrayCount: number; tagged: boolean } | SimConnectData[] ): number { const packet = this._beginPacket(0x10) // - .putInt32(dataDefinitionId) - .putInt32(objectId); + .putUint32(dataDefinitionId) + .putUint32(objectId); if (data instanceof Array) { packet - .putInt32(DataSetFlag.DEFAULT) // - .putInt32(data.length) // - .putInt32(0); // Just a placeholder for array unit size + .putUint32(DataSetFlag.DEFAULT) // + .putUint32(data.length) // + .putUint32(0); // Just a placeholder for array unit size const arrayStartPos = packet.getRawBuffer().getOffset(); @@ -515,14 +518,14 @@ class SimConnectConnection extends EventEmitter { const arrayTotalSize = packet.getRawBuffer().getOffset() - arrayStartPos; const unitSize = arrayTotalSize / data.length; - packet.putInt32(unitSize, arrayStartPos - 4); // Replace placeholder + packet.putUint32(unitSize, arrayStartPos - 4); // Replace placeholder } else { const { tagged, arrayCount, buffer } = data; const bytes = buffer.getBuffer(); packet - .putInt32(tagged ? DataSetFlag.TAGGED : DataSetFlag.DEFAULT) - .putInt32(arrayCount === 0 ? 1 : arrayCount) - .putInt32(bytes.length) + .putUint32(tagged ? DataSetFlag.TAGGED : DataSetFlag.DEFAULT) + .putUint32(arrayCount === 0 ? 1 : arrayCount) + .putUint32(bytes.length) .putBytes(bytes); } @@ -544,15 +547,15 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x11) - .putInt32(inputGroupId) + .putUint32(inputGroupId) .putString256(inputDefinition) - .putInt32(clientEventDownID) - .putInt32(downValue || 0) - .putInt32( + .putUint32(clientEventDownID) + .putUint32(downValue || 0) + .putUint32( clientEventUpID === undefined ? SimConnectConstants.UNUSED : clientEventUpID ) - .putInt32(upValue || 0) - .putInt32(maskable ? 1 : 0) + .putUint32(upValue || 0) + .putUint32(maskable ? 1 : 0) ); } @@ -563,8 +566,8 @@ class SimConnectConnection extends EventEmitter { setInputGroupPriority(inputGroupId: InputGroupId, priority: NotificationPriority): number { return this._buildAndSend( this._beginPacket(0x12) // - .putInt32(inputGroupId) - .putInt32(priority) + .putUint32(inputGroupId) + .putUint32(priority) ); } @@ -575,7 +578,7 @@ class SimConnectConnection extends EventEmitter { removeInputEvent(inputGroupId: InputGroupId, inputDefinition: string): number { return this._buildAndSend( this._beginPacket(0x13) // - .putInt32(inputGroupId) + .putUint32(inputGroupId) .putString256(inputDefinition) ); } @@ -587,7 +590,7 @@ class SimConnectConnection extends EventEmitter { clearInputGroup(inputGroupId: InputGroupId): number { return this._buildAndSend( this._beginPacket(0x14) // - .putInt32(inputGroupId) + .putUint32(inputGroupId) ); } @@ -598,8 +601,8 @@ class SimConnectConnection extends EventEmitter { setInputGroupState(inputGroupId: InputGroupId, state: boolean): number { return this._buildAndSend( this._beginPacket(0x15) - .putInt32(inputGroupId) - .putInt32(state ? 1 : 0) + .putUint32(inputGroupId) + .putUint32(state ? 1 : 0) ); } @@ -615,7 +618,7 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x16) - .putInt32(clientEventId) + .putUint32(clientEventId) .putString(keyChoice1 || '', 30) .putString(keyChoice2 || '', 30) .putString(keyChoice3 || '', 30) @@ -629,7 +632,7 @@ class SimConnectConnection extends EventEmitter { subscribeToSystemEvent(clientEventId: ClientEventId, eventName: string): number { return this._buildAndSend( this._beginPacket(0x17) // - .putInt32(clientEventId) + .putUint32(clientEventId) .putString256(eventName) ); } @@ -641,7 +644,7 @@ class SimConnectConnection extends EventEmitter { unsubscribeFromSystemEvent(clientEventId: ClientEventId): number { return this._buildAndSend( this._beginPacket(0x18) // - .putInt32(clientEventId) + .putUint32(clientEventId) ); } @@ -657,7 +660,7 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x19) - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putFloat32(lat) .putFloat32(lon) .putFloat32(alt) @@ -671,7 +674,7 @@ class SimConnectConnection extends EventEmitter { weatherRequestObservationAtStation(dataRequestId: DataRequestId, ICAO: string): number { return this._buildAndSend( this._beginPacket(0x1a) // - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putString(ICAO, 5) ); } @@ -687,7 +690,7 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x1b) // - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putFloat32(lat) .putFloat32(lon) ); @@ -707,7 +710,7 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x1c) - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putString(ICAO, 5) .putString256(name) .putFloat32(lat) @@ -723,7 +726,7 @@ class SimConnectConnection extends EventEmitter { weatherRemoveStation(dataRequestId: DataRequestId, ICAO: string): number { return this._buildAndSend( this._beginPacket(0x1d) // - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putString(ICAO, 5) ); } @@ -735,7 +738,7 @@ class SimConnectConnection extends EventEmitter { weatherSetObservation(seconds: number, metar: string): number { return this._buildAndSend( this._beginPacket(0x1e) // - .putInt32(seconds) + .putUint32(seconds) .putString(metar) .putByte(0) ); @@ -748,8 +751,8 @@ class SimConnectConnection extends EventEmitter { weatherSetModeServer(port: number, seconds: number): number { return this._buildAndSend( this._beginPacket(0x1f) // - .putInt32(port) - .putInt32(seconds) + .putUint32(port) + .putUint32(seconds) ); } @@ -787,7 +790,7 @@ class SimConnectConnection extends EventEmitter { weatherSetDynamicUpdateRate(rate: number): number { return this._buildAndSend( this._beginPacket(0x23) // - .putInt32(rate) + .putUint32(rate) ); } @@ -807,14 +810,14 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x24) - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putFloat32(minLat) .putFloat32(minLon) .putFloat32(minAlt) .putFloat32(maxLat) .putFloat32(maxLon) .putFloat32(maxAlt) - .putInt32(flags || 0) + .putUint32(flags || 0) ); } @@ -840,7 +843,7 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x25) - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putFloat32(lat) .putFloat32(lon) .putFloat32(alt) @@ -864,7 +867,7 @@ class SimConnectConnection extends EventEmitter { weatherRemoveThermal(objectId: ObjectId): number { return this._buildAndSend( this._beginPacket(0x26) // - .putInt32(objectId) + .putUint32(objectId) ); } @@ -883,7 +886,7 @@ class SimConnectConnection extends EventEmitter { .putString256(containerTitle) .putString(tailNumber, 12) .putString(airportID, 5) - .putInt32(dataRequestId) + .putUint32(dataRequestId) ); } @@ -907,8 +910,8 @@ class SimConnectConnection extends EventEmitter { .putInt32(flightNumber) .putString(flightPlanPath, 260) .putFloat64(flightPlanPosition) - .putInt32(touchAndGo ? 1 : 0) - .putInt32(dataRequestId) + .putUint32(touchAndGo ? 1 : 0) + .putUint32(dataRequestId) ); } @@ -927,7 +930,7 @@ class SimConnectConnection extends EventEmitter { .putString(tailNumber, 12); initPos.writeTo(packet); - packet.putInt32(dataRequestId); + packet.putUint32(dataRequestId); return this._buildAndSend(packet); } @@ -945,7 +948,7 @@ class SimConnectConnection extends EventEmitter { packet.putString256(containerTitle); initPos.writeTo(packet); - packet.putInt32(dataRequestId); + packet.putUint32(dataRequestId); return this._buildAndSend(packet); } @@ -957,8 +960,8 @@ class SimConnectConnection extends EventEmitter { aIReleaseControl(objectId: ObjectId, dataRequestId: DataRequestId): number { return this._buildAndSend( this._beginPacket(0x2b) // - .putInt32(objectId) - .putInt32(dataRequestId) + .putUint32(objectId) + .putUint32(dataRequestId) ); } @@ -969,8 +972,8 @@ class SimConnectConnection extends EventEmitter { aIRemoveObject(objectId: ObjectId, dataRequestId: DataRequestId): number { return this._buildAndSend( this._beginPacket(0x2c) // - .putInt32(objectId) - .putInt32(dataRequestId) + .putUint32(objectId) + .putUint32(dataRequestId) ); } @@ -985,9 +988,9 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x2d) - .putInt32(objectId) + .putUint32(objectId) .putString(flightPlanPath, 260) - .putInt32(dataRequestId) + .putUint32(dataRequestId) ); } @@ -1048,8 +1051,8 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x31) // .putString256(menuItem) - .putInt32(menuEventId) - .putInt32(data) + .putUint32(menuEventId) + .putUint32(data) ); } @@ -1060,7 +1063,7 @@ class SimConnectConnection extends EventEmitter { menuDeleteItem(menuEventId: ClientEventId): number { return this._buildAndSend( this._beginPacket(0x32) // - .putInt32(menuEventId) + .putUint32(menuEventId) ); } @@ -1076,10 +1079,10 @@ class SimConnectConnection extends EventEmitter { ) { return this._buildAndSend( this._beginPacket(0x33) - .putInt32(menuEventId) + .putUint32(menuEventId) .putString256(menuItem) - .putInt32(subMenuEventId) - .putInt32(data) + .putUint32(subMenuEventId) + .putUint32(data) ); } @@ -1090,8 +1093,8 @@ class SimConnectConnection extends EventEmitter { menuDeleteSubItem(menuEventId: ClientEventId, subMenuEventId: ClientEventId): number { return this._buildAndSend( this._beginPacket(0x34) // - .putInt32(menuEventId) - .putInt32(subMenuEventId) + .putUint32(menuEventId) + .putUint32(subMenuEventId) ); } @@ -1102,7 +1105,7 @@ class SimConnectConnection extends EventEmitter { requestSystemState(dataRequestId: DataRequestId, state: string): number { return this._buildAndSend( this._beginPacket(0x35) // - .putInt32(dataRequestId) + .putUint32(dataRequestId) .putString256(state) ); } @@ -1120,10 +1123,10 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x36) .putString256(state) - .putInt32(paramInt) + .putUint32(paramInt) .putFloat32(paramFloat) .putString256(paramString) - .putInt32(0) + .putUint32(0) ); } @@ -1135,7 +1138,7 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x37) // .putString256(clientDataName) - .putInt32(clientDataId) + .putUint32(clientDataId) ); } @@ -1146,9 +1149,9 @@ class SimConnectConnection extends EventEmitter { createClientData(clientDataId: ClientDataId, size: number, readOnly: boolean): number { return this._buildAndSend( this._beginPacket(0x38) - .putInt32(clientDataId) - .putInt32(size) - .putInt32(readOnly ? 1 : 0) + .putUint32(clientDataId) + .putUint32(size) + .putUint32(readOnly ? 1 : 0) ); } @@ -1167,11 +1170,11 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x39) - .putInt32(dataDefinitionId) - .putInt32(offset) - .putInt32(sizeOrType) + .putUint32(dataDefinitionId) + .putUint32(offset) + .putUint32(sizeOrType) .putFloat32(epsilon || 0) - .putInt32(datumId || 0) + .putUint32(datumId || 0) ); } @@ -1182,7 +1185,7 @@ class SimConnectConnection extends EventEmitter { clearClientDataDefinition(dataDefinitionId: DataDefinitionId): number { return this._buildAndSend( this._beginPacket(0x3a) // - .putInt32(dataDefinitionId) + .putUint32(dataDefinitionId) ); } @@ -1204,14 +1207,14 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x3b) - .putInt32(clientDataId) - .putInt32(dataRequestId) - .putInt32(clientDataDefineID) - .putInt32(period) - .putInt32(flags) - .putInt32(origin || 0) - .putInt32(interval || 0) - .putInt32(limit || 0) + .putUint32(clientDataId) + .putUint32(dataRequestId) + .putUint32(clientDataDefineID) + .putUint32(period) + .putUint32(flags) + .putUint32(origin || 0) + .putUint32(interval || 0) + .putUint32(limit || 0) ); } @@ -1229,12 +1232,12 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x3c) - .putInt32(clientDataId) - .putInt32(clientDataDefineID) - .putInt32(0) // do not use arg - .putInt32(1) // do not use arg + .putUint32(clientDataId) + .putUint32(clientDataDefineID) + .putUint32(0) // do not use arg + .putUint32(1) // do not use arg // TODO: add support for arrays https://github.com/mharj/jsimconnect/blob/master/src/flightsim/simconnect/SimConnect.java#L3803 - .putInt32(unitSize) + .putUint32(unitSize) .putBytes(data) ); } @@ -1270,7 +1273,7 @@ class SimConnectConnection extends EventEmitter { } packet.putString(description, 2048); - packet.putInt32(SimConnectConstants.UNUSED); + packet.putUint32(SimConnectConstants.UNUSED); return this._buildAndSend(packet); } @@ -1299,15 +1302,15 @@ class SimConnectConnection extends EventEmitter { if (this._ourProtocol < Protocol.FSX_SP1) throw Error(SimConnectError.BadVersion); // $NON-NLS-1$ const packet = this._beginPacket(0x40) - .putInt32(type) + .putUint32(type) .putFloat32(timeSeconds) - .putInt32(clientEventId); + .putUint32(clientEventId); if (message !== null && message.length > 0) { - packet.putInt32(message.length + 1); + packet.putUint32(message.length + 1); packet.putString(message); } else { - packet.putInt32(1); + packet.putUint32(1); } packet.putByte(0); return this._buildAndSend(packet); @@ -1327,10 +1330,10 @@ class SimConnectConnection extends EventEmitter { if (this._ourProtocol < Protocol.FSX_SP1) throw Error(SimConnectError.BadVersion); // $NON-NLS-1$ const packet = this._beginPacket(0x40) - .putInt32(TextType.MENU) + .putUint32(TextType.MENU) .putFloat32(timeSeconds) - .putInt32(clientEventId) - .putInt32(0); // size, will be set later + .putUint32(clientEventId) + .putUint32(0); // size, will be set later if (!title && !prompt && items.length === 0) { packet.putByte(0); @@ -1360,8 +1363,8 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x41) // - .putInt32(type) - .putInt32(clientEventId) + .putUint32(type) + .putUint32(clientEventId) ); } @@ -1374,7 +1377,7 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x42) // - .putInt32(type) + .putUint32(type) ); } @@ -1387,8 +1390,8 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x43) // - .putInt32(type) - .putInt32(clientEventId) + .putUint32(type) + .putUint32(clientEventId) ); } @@ -1409,15 +1412,15 @@ class SimConnectConnection extends EventEmitter { ): number { return this._buildAndSend( this._beginPacket(0x44) - .putInt32(objectId) - .putInt32(clientEventId) - .putInt32(notificationGroupId) - .putInt32(flags) - .putInt32(data0) - .putInt32(data1) - .putInt32(data2) - .putInt32(data3) - .putInt32(data4) + .putUint32(objectId) + .putUint32(clientEventId) + .putUint32(notificationGroupId) + .putUint32(flags) + .putUint32(data0) + .putUint32(data1) + .putUint32(data2) + .putUint32(data3) + .putUint32(data4) ); } @@ -1430,7 +1433,7 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x45) // - .putInt32(dataDefinitionId) + .putUint32(dataDefinitionId) .putString256(fieldName) ); } @@ -1449,8 +1452,8 @@ class SimConnectConnection extends EventEmitter { if (this._ourProtocol < Protocol.KittyHawk) throw Error(SimConnectError.BadVersion); const packet = this._beginPacket(type === undefined ? 0x46 : 0x4a) - .putInt32(dataDefinitionId) - .putInt32(dataRequestId) + .putUint32(dataDefinitionId) + .putUint32(dataRequestId) .putString(icao, 16) .putString(region || '', 4); @@ -1475,9 +1478,9 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x47) // - .putInt32(type) - .putInt32(newElemInRangeRequestID) - .putInt32(oldElemOutRangeRequestID) + .putUint32(type) + .putUint32(newElemInRangeRequestID) + .putUint32(oldElemOutRangeRequestID) ); } @@ -1494,7 +1497,7 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x48) // - .putInt32(type) + .putUint32(type) .putByte(unsubscribeNewInRange ? 1 : 0) .putByte(unsubscribeOldOutRange ? 1 : 0) ); @@ -1509,8 +1512,8 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x49) // - .putInt32(type) - .putInt32(clientEventId) + .putUint32(type) + .putUint32(clientEventId) ); } @@ -1523,13 +1526,13 @@ class SimConnectConnection extends EventEmitter { const packet = this._beginPacket(0x4b) .putString(airportIcao, 16) - .putInt32(parkingIndices?.length || 0); + .putUint32(parkingIndices?.length || 0); if (parkingIndices === undefined || parkingIndices.length === 0) { - packet.putInt32(0); + packet.putUint32(0); } else { parkingIndices.forEach(parkingIndex => { - packet.putInt32(parkingIndex); + packet.putUint32(parkingIndex); }); } @@ -1564,15 +1567,15 @@ class SimConnectConnection extends EventEmitter { return this._buildAndSend( this._beginPacket(0x4d) - .putInt32(inputGroupId) + .putUint32(inputGroupId) .putString256(inputDefinition) - .putInt32(clientEventDownID) - .putInt32(downValue || 0) - .putInt32( + .putUint32(clientEventDownID) + .putUint32(downValue || 0) + .putUint32( clientEventUpID === undefined ? SimConnectConstants.UNUSED : clientEventUpID ) - .putInt32(upValue || 0) - .putInt32(maskable ? 1 : 0) + .putUint32(upValue || 0) + .putUint32(maskable ? 1 : 0) ); } @@ -1587,9 +1590,9 @@ class SimConnectConnection extends EventEmitter { const paramValues = values.getBuffer(); const packet = this._beginPacket(0x4e) - .putInt32(dataRequestID) + .putUint32(dataRequestID) .putString256(actionID) - .putInt32(paramValues.length) + .putUint32(paramValues.length) .putBytes(paramValues); return this._buildAndSend(packet); } @@ -1601,7 +1604,7 @@ class SimConnectConnection extends EventEmitter { enumerateInputEvents(dataRequestID: number): number { if (this._ourProtocol < Protocol.KittyHawk) throw Error(SimConnectError.BadVersion); - const packet = this._beginPacket(0x4f).putInt32(dataRequestID); + const packet = this._beginPacket(0x4f).putUint32(dataRequestID); return this._buildAndSend(packet); } @@ -1612,7 +1615,7 @@ class SimConnectConnection extends EventEmitter { getInputEvent(dataRequestID: number, inputEventHashID: bigint): number { if (this._ourProtocol < Protocol.KittyHawk) throw Error(SimConnectError.BadVersion); - const packet = this._beginPacket(0x50).putInt32(dataRequestID).putUint64(inputEventHashID); + const packet = this._beginPacket(0x50).putUint32(dataRequestID).putUint64(inputEventHashID); return this._buildAndSend(packet); } @@ -1626,9 +1629,9 @@ class SimConnectConnection extends EventEmitter { const packet = this._beginPacket(0x51).putUint64(inputEventHashID); if (typeof value === 'string') { - packet.putInt32(value.length).putString(value); + packet.putUint32(value.length).putString(value); } else { - packet.putInt32(8).putFloat64(value); + packet.putUint32(8).putFloat64(value); } return this._buildAndSend(packet); @@ -1679,13 +1682,13 @@ class SimConnectConnection extends EventEmitter { ) { if (this._ourProtocol < Protocol.KittyHawk) throw Error(SimConnectError.BadVersion); - const packet = this._beginPacket(0x55).putInt32(dataDefinitionId).putString256(filterPath); + const packet = this._beginPacket(0x55).putUint32(dataDefinitionId).putString256(filterPath); if (filterData === null) { - packet.putInt32(0); + packet.putUint32(0); } else { const filterDataBuffer = filterData.getBuffer(); - packet.putInt32(filterDataBuffer.length).putBytes(filterDataBuffer); + packet.putUint32(filterDataBuffer.length).putBytes(filterDataBuffer); } return this._buildAndSend(packet); @@ -1697,7 +1700,7 @@ class SimConnectConnection extends EventEmitter { */ clearAllFacilityDataDefinitionFilters(dataDefinitionId: DataDefinitionId) { if (this._ourProtocol < Protocol.KittyHawk) throw Error(SimConnectError.BadVersion); - return this._buildAndSend(this._beginPacket(0x56).putInt32(dataDefinitionId)); + return this._buildAndSend(this._beginPacket(0x56).putUint32(dataDefinitionId)); } /** @@ -1719,7 +1722,7 @@ class SimConnectConnection extends EventEmitter { .putString256(livery) .putString(tailNumber, 12) .putString(airportID, 5) - .putInt32(dataRequestId) + .putUint32(dataRequestId) ); } @@ -1747,8 +1750,8 @@ class SimConnectConnection extends EventEmitter { .putInt32(flightNumber) .putString(flightPlanPath, 260) .putFloat64(flightPlanPosition) - .putInt32(touchAndGo ? 1 : 0) - .putInt32(dataRequestId) + .putUint32(touchAndGo ? 1 : 0) + .putUint32(dataRequestId) ); } @@ -1771,7 +1774,7 @@ class SimConnectConnection extends EventEmitter { .putString(tailNumber, 12); initPos.writeTo(packet); - packet.putInt32(dataRequestId); + packet.putUint32(dataRequestId); return this._buildAndSend(packet); } @@ -1793,7 +1796,7 @@ class SimConnectConnection extends EventEmitter { packet.putString256(containerTitle); packet.putString256(livery); initPos.writeTo(packet); - packet.putInt32(dataRequestId); + packet.putUint32(dataRequestId); return this._buildAndSend(packet); } @@ -1805,7 +1808,7 @@ class SimConnectConnection extends EventEmitter { enumerateSimObjectsAndLiveries(dataRequestId: DataRequestId, type: SimObjectType): number { if (this._ourProtocol < Protocol.SunRise) throw Error(SimConnectError.BadVersion); - const packet = this._beginPacket(0x5b).putInt32(dataRequestId).putInt32(type); + const packet = this._beginPacket(0x5b).putUint32(dataRequestId).putUint32(type); return this._buildAndSend(packet); } @@ -1839,7 +1842,7 @@ class SimConnectConnection extends EventEmitter { requestAllFacilities(dataRequestId: DataRequestId, type: FacilityListType): number { if (this._ourProtocol < Protocol.SunRise) throw Error(SimConnectError.BadVersion); - const packet = this._beginPacket(0x5e).putInt32(dataRequestId).putInt32(type); + const packet = this._beginPacket(0x5e).putUint32(dataRequestId).putUint32(type); return this._buildAndSend(packet); } @@ -2018,16 +2021,16 @@ class SimConnectConnection extends EventEmitter { this._buildAndSend( this._beginPacket(0x01) .putString256(this._appName) - .putInt32(0) + .putUint32(0) .putByte(0x00) .putString(version.alias, 3) - .putInt32(version.major) - .putInt32(version.minor) - .putInt32(version.buildMajor) - .putInt32(version.buildMinor) + .putUint32(version.major) + .putUint32(version.minor) + .putUint32(version.buildMajor) + .putUint32(version.buildMinor) ); } } -export { SimConnectConnection, ConnectionOptions, SimConnectRecvEvents }; -module.exports = { SimConnectConnection }; +export { SimConnectConnection }; +export type { ConnectionOptions, SimConnectRecvEvents }; diff --git a/src/SimConnectConstants.ts b/src/SimConnectConstants.ts index 6c9f4cd..e8a77fd 100644 --- a/src/SimConnectConstants.ts +++ b/src/SimConnectConstants.ts @@ -1,5 +1,4 @@ -// Import the necessary type -import { ObjectId } from './Types'; +import type { ObjectId } from './Types'; // eslint-disable-next-line @typescript-eslint/no-namespace export namespace SimConnectConstants { @@ -114,7 +113,3 @@ export namespace SimConnectConstants { /** @see {@link SimConnectConnection.addToClientDataDefinition} */ export const CLIENT_DATA_TYPE_FLOAT64 = -6; } - -module.exports = { - SimConnectConstants, -}; diff --git a/src/SimConnectSocket.ts b/src/SimConnectSocket.ts index 815896c..d93ebde 100644 --- a/src/SimConnectSocket.ts +++ b/src/SimConnectSocket.ts @@ -1,7 +1,7 @@ import { Socket } from 'net'; import { Duplex } from 'stream'; import { RawBuffer } from './RawBuffer'; -import { ConnectionParameters } from './connectionParameters'; +import type { ConnectionParameters } from './connectionParameters'; const HEADER_LENGTH = 4; @@ -111,7 +111,7 @@ class SimConnectSocket extends Duplex { const chunk: Buffer | null = this._socket.read(); if (chunk === null) break; - this._dataBuffer = Buffer.concat([this._dataBuffer, chunk]); + this._dataBuffer = concatBuffers(this._dataBuffer, chunk); while (this._dataBuffer.length >= HEADER_LENGTH) { const totalMessageSize: number = this._dataBuffer.readInt32LE(0); @@ -149,8 +149,16 @@ class SimConnectSocket extends Duplex { } _write(data: Buffer, encoding: BufferEncoding, cb: (error?: Error | null) => void) { - this._socket.write(data, encoding, cb); + this._socket.write(Uint8Array.from(data), encoding, cb); } } -export { SimConnectSocket, RecvID, SimConnectMessage, ConnectionParameters }; +function concatBuffers(a: Buffer, b: Buffer): Buffer { + const combined = Buffer.alloc(a.length + b.length); + combined.set(a); + combined.set(b, a.length); + return combined; +} + +export { SimConnectSocket, RecvID }; +export type { SimConnectMessage, ConnectionParameters }; diff --git a/src/datastructures/ControllerItem.ts b/src/datastructures/ControllerItem.ts index 5342621..8ba95d1 100644 --- a/src/datastructures/ControllerItem.ts +++ b/src/datastructures/ControllerItem.ts @@ -14,9 +14,9 @@ export class ControllerItem { constructor(data: RawBuffer) { this.deviceName = data.readString256(); - this.deviceId = data.readInt32(); - this.productId = data.readInt32(); - this.compositeId = data.readInt32(); + this.deviceId = data.readUint32(); + this.productId = data.readUint32(); + this.compositeId = data.readUint32(); this.hardwareVersion = new VersionBaseType(data); } } diff --git a/src/datastructures/FacilityNDB.ts b/src/datastructures/FacilityNDB.ts index cdc233d..6aced2b 100644 --- a/src/datastructures/FacilityNDB.ts +++ b/src/datastructures/FacilityNDB.ts @@ -7,6 +7,6 @@ export class FacilityNDB extends FacilityWaypoint { constructor(data: RawBuffer, protocol: Protocol) { super(data, protocol); - this.frequency = data.readInt32(); + this.frequency = data.readUint32(); } } diff --git a/src/datastructures/FacilityVOR.ts b/src/datastructures/FacilityVOR.ts index 8788997..8e1e4f2 100644 --- a/src/datastructures/FacilityVOR.ts +++ b/src/datastructures/FacilityVOR.ts @@ -25,7 +25,7 @@ export class FacilityVOR extends FacilityNDB { constructor(data: RawBuffer, protocol: Protocol) { super(data, protocol); - this.flags = data.readInt32(); + this.flags = data.readUint32(); this.localizer = data.readFloat32(); this.glideLat = data.readFloat64(); this.glideLon = data.readFloat64(); diff --git a/src/datastructures/JetwayData.ts b/src/datastructures/JetwayData.ts index 71562ca..c2065f2 100644 --- a/src/datastructures/JetwayData.ts +++ b/src/datastructures/JetwayData.ts @@ -2,7 +2,7 @@ import { LatLonAlt } from '../dto/LatLonAlt'; import { PBH } from '../dto/PBH'; import { JetwayStatus } from '../enums/JetwayStatus'; import { XYZ } from '../dto/XYZ'; -import { ObjectId } from '../Types'; +import type { ObjectId } from '../Types'; import { RawBuffer } from '../RawBuffer'; import { readLatLonAlt, readPBH, readXYZ } from '../dto/bufferHelpers'; diff --git a/src/dto/MarkerState.ts b/src/dto/MarkerState.ts index 480cdfa..2447dce 100644 --- a/src/dto/MarkerState.ts +++ b/src/dto/MarkerState.ts @@ -9,13 +9,13 @@ class MarkerState implements SimConnectData { readFrom(buffer: RawBuffer) { this.markerName = buffer.readString64(); - this.markerState = buffer.readInt32() !== 0; + this.markerState = buffer.readUint32() !== 0; } writeTo(packetBuilder: SimConnectPacketBuilder) { packetBuilder // .putString(this.markerName, 64) - .putInt32(this.markerState ? 1 : 0); + .putUint32(this.markerState ? 1 : 0); } } diff --git a/src/dto/SimConnectData.ts b/src/dto/SimConnectData.ts index c8477df..e8de94e 100644 --- a/src/dto/SimConnectData.ts +++ b/src/dto/SimConnectData.ts @@ -6,4 +6,4 @@ interface SimConnectData { readonly writeTo: (packetBuilder: SimConnectPacketBuilder) => void; } -export { SimConnectData }; +export type { SimConnectData }; diff --git a/src/dto/Waypoint.ts b/src/dto/Waypoint.ts index f56d8eb..385f1b9 100644 --- a/src/dto/Waypoint.ts +++ b/src/dto/Waypoint.ts @@ -33,7 +33,7 @@ class Waypoint implements SimConnectData { this.latitude = buffer.readFloat64(); this.longitude = buffer.readFloat64(); this.altitude = buffer.readFloat64(); - this.flags = buffer.readInt32(); + this.flags = buffer.readUint32(); this.speed = buffer.readFloat64(); this.throttle = buffer.readFloat64(); } @@ -43,7 +43,7 @@ class Waypoint implements SimConnectData { .putFloat64(this.latitude) .putFloat64(this.longitude) .putFloat64(this.altitude) - .putInt32(this.flags) + .putUint32(this.flags) .putFloat64(this.speed) .putFloat64(this.throttle); } diff --git a/src/enums/FacilityDataType.ts b/src/enums/FacilityDataType.ts index e5c5f7d..f843e50 100644 --- a/src/enums/FacilityDataType.ts +++ b/src/enums/FacilityDataType.ts @@ -29,7 +29,3 @@ export enum FacilityDataType { HOLDING_PATTERN, TAXI_PARKING_AIRLINE, } - -module.exports = { - FacilityDataType, -}; diff --git a/src/enums/FacilityListType.ts b/src/enums/FacilityListType.ts index 316f348..2f7c5dd 100644 --- a/src/enums/FacilityListType.ts +++ b/src/enums/FacilityListType.ts @@ -10,7 +10,3 @@ export enum FacilityListType { /** Not valid as a list type, but simply the number of list types. */ COUNT, } - -module.exports = { - FacilityListType, -}; diff --git a/src/enums/FlowEvent.ts b/src/enums/FlowEvent.ts index f0b94cd..fd8e09f 100644 --- a/src/enums/FlowEvent.ts +++ b/src/enums/FlowEvent.ts @@ -17,7 +17,3 @@ export enum FlowEvent { FLIGHT_END, PLANE_CRASH, } - -module.exports = { - FlowEvent, -}; diff --git a/src/enums/Protocol.ts b/src/enums/Protocol.ts index 40b65a6..98a3038 100644 --- a/src/enums/Protocol.ts +++ b/src/enums/Protocol.ts @@ -20,7 +20,3 @@ export enum Protocol { */ SunRise = 0x6, } - -module.exports = { - Protocol, -}; diff --git a/src/enums/SimConnectDataType.ts b/src/enums/SimConnectDataType.ts index 4229d1e..c35882b 100644 --- a/src/enums/SimConnectDataType.ts +++ b/src/enums/SimConnectDataType.ts @@ -37,7 +37,3 @@ export enum SimConnectDataType { /** enum limit */ MAX, } - -module.exports = { - SimConnectDataType, -}; diff --git a/src/enums/SimConnectException.ts b/src/enums/SimConnectException.ts index 851d9d5..7228c56 100644 --- a/src/enums/SimConnectException.ts +++ b/src/enums/SimConnectException.ts @@ -44,7 +44,3 @@ export enum SimConnectException { GET_INPUT_EVENT_FAILED, SET_INPUT_EVENT_FAILED, } - -module.exports = { - SimConnectException, -}; diff --git a/src/enums/SimConnectPeriod.ts b/src/enums/SimConnectPeriod.ts index 7ad438f..15f1d2a 100644 --- a/src/enums/SimConnectPeriod.ts +++ b/src/enums/SimConnectPeriod.ts @@ -11,7 +11,3 @@ export enum SimConnectPeriod { /** Specifies that the data should be sent once every second. */ SECOND, } - -module.exports = { - SimConnectPeriod, -}; diff --git a/src/enums/SimObjectType.ts b/src/enums/SimObjectType.ts index e23d164..113612c 100644 --- a/src/enums/SimObjectType.ts +++ b/src/enums/SimObjectType.ts @@ -17,7 +17,3 @@ export enum SimObjectType { USER_AVATAR, USER_CURRENT, } - -module.exports = { - SimObjectType, -}; diff --git a/src/enums/TextResult.ts b/src/enums/TextResult.ts index 80e4a5c..1001334 100644 --- a/src/enums/TextResult.ts +++ b/src/enums/TextResult.ts @@ -30,7 +30,3 @@ export enum TextResult { /** Specifies that the menu or text identified by the EventID has timed-out and is no longer on display. */ TIMEOUT = 0x00010004, } - -module.exports = { - TextResult, -}; diff --git a/src/index.ts b/src/index.ts index cc2af10..6c9dfd7 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,6 +1,7 @@ -import { SimConnectConnection, ConnectionOptions } from './SimConnectConnection'; +import { SimConnectConnection } from './SimConnectConnection'; import { Protocol } from './enums/Protocol'; -import { RecvOpen } from './recv'; +import type { ConnectionOptions } from './SimConnectConnection'; +import type { RecvOpen } from './recv'; export * from './SimConnectConstants'; export * from './SimConnectPacketBuilder'; @@ -14,12 +15,11 @@ export * from './recv'; export * from './dto'; export { RawBuffer } from './RawBuffer'; -/** - * @member recvOpen - Information about the flight simulator - * @member handle - The object used to interact with SimConnect - */ export interface OpenEvent { + /** Information about the flight simulator. */ recvOpen: RecvOpen; + + /** The object used to interact with SimConnect. */ handle: SimConnectConnection; } diff --git a/src/recv/RecvActionCallback.ts b/src/recv/RecvActionCallback.ts index f0643b0..4af9a2f 100644 --- a/src/recv/RecvActionCallback.ts +++ b/src/recv/RecvActionCallback.ts @@ -1,6 +1,6 @@ import { RawBuffer } from '../RawBuffer'; import { RecvEvent } from './RecvEvent'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; export class RecvActionCallback extends RecvEvent { requestID: DataRequestId; @@ -10,6 +10,6 @@ export class RecvActionCallback extends RecvEvent { constructor(data: RawBuffer) { super(data); this.actionID = data.readString260(); - this.requestID = data.readInt32(); + this.requestID = data.readUint32(); } } diff --git a/src/recv/RecvAssignedObjectID.ts b/src/recv/RecvAssignedObjectID.ts index 7f7db36..8ff1d13 100644 --- a/src/recv/RecvAssignedObjectID.ts +++ b/src/recv/RecvAssignedObjectID.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { DataRequestId, ObjectId } from '../Types'; +import type { DataRequestId, ObjectId } from '../Types'; export class RecvAssignedObjectID { requestID: DataRequestId; @@ -7,7 +7,7 @@ export class RecvAssignedObjectID { objectID: ObjectId; constructor(data: RawBuffer) { - this.requestID = data.readInt32() as DataRequestId; - this.objectID = data.readInt32() as ObjectId; + this.requestID = data.readUint32() as DataRequestId; + this.objectID = data.readUint32() as ObjectId; } } diff --git a/src/recv/RecvCloudState.ts b/src/recv/RecvCloudState.ts index aa9c530..26feb33 100644 --- a/src/recv/RecvCloudState.ts +++ b/src/recv/RecvCloudState.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; export class RecvCloudState { requestID: DataRequestId; @@ -9,8 +9,8 @@ export class RecvCloudState { data: number[][]; constructor(data: RawBuffer) { - this.requestID = data.readInt32() as DataRequestId; - this.arraySize = data.readInt32(); + this.requestID = data.readUint32() as DataRequestId; + this.arraySize = data.readUint32(); this.data = []; // Read 2D-array of 64x64 bytes for (let i = 0; i < 64; i++) { diff --git a/src/recv/RecvCustomAction.ts b/src/recv/RecvCustomAction.ts index 0b18e21..981429d 100644 --- a/src/recv/RecvCustomAction.ts +++ b/src/recv/RecvCustomAction.ts @@ -9,7 +9,7 @@ export class RecvCustomAction { constructor(data: RawBuffer) { this.guid = data.readBytes(16); - this.waitForCompletion = data.readInt32(); + this.waitForCompletion = data.readUint32(); this.payload = data.readString(data.remaining()); } } diff --git a/src/recv/RecvEvent.ts b/src/recv/RecvEvent.ts index 0a497e3..0be47cf 100644 --- a/src/recv/RecvEvent.ts +++ b/src/recv/RecvEvent.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { ClientEventId, InputGroupId, NotificationGroupId } from '../Types'; +import type { ClientEventId, InputGroupId, NotificationGroupId } from '../Types'; export class RecvEvent { groupID: NotificationGroupId | InputGroupId; @@ -9,8 +9,8 @@ export class RecvEvent { data: number; constructor(data: RawBuffer) { - this.groupID = data.readInt32() as NotificationGroupId; - this.clientEventId = data.readInt32() as ClientEventId; - this.data = data.readInt32(); + this.groupID = data.readUint32() as NotificationGroupId; + this.clientEventId = data.readUint32() as ClientEventId; + this.data = data.readUint32(); } } diff --git a/src/recv/RecvEventAddRemove.ts b/src/recv/RecvEventAddRemove.ts index ea2e045..da90555 100644 --- a/src/recv/RecvEventAddRemove.ts +++ b/src/recv/RecvEventAddRemove.ts @@ -7,6 +7,6 @@ export class RecvEventAddRemove extends RecvEvent { constructor(data: RawBuffer) { super(data); - this.type = data.readInt32(); + this.type = data.readUint32(); } } diff --git a/src/recv/RecvEventEx1.ts b/src/recv/RecvEventEx1.ts index f53a7b1..72c378b 100644 --- a/src/recv/RecvEventEx1.ts +++ b/src/recv/RecvEventEx1.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { ClientEventId, InputGroupId, NotificationGroupId } from '../Types'; +import type { ClientEventId, InputGroupId, NotificationGroupId } from '../Types'; export class RecvEventEx1 { groupID: NotificationGroupId | InputGroupId; @@ -10,14 +10,14 @@ export class RecvEventEx1 { data: [number, number, number, number, number]; constructor(data: RawBuffer) { - this.groupID = data.readInt32() as NotificationGroupId; - this.clientEventId = data.readInt32() as ClientEventId; + this.groupID = data.readUint32() as NotificationGroupId; + this.clientEventId = data.readUint32() as ClientEventId; this.data = [ - data.readInt32(), - data.readInt32(), - data.readInt32(), - data.readInt32(), - data.readInt32(), + data.readUint32(), + data.readUint32(), + data.readUint32(), + data.readUint32(), + data.readUint32(), ]; } } diff --git a/src/recv/RecvEventFilename.ts b/src/recv/RecvEventFilename.ts index c08db4e..6530841 100644 --- a/src/recv/RecvEventFilename.ts +++ b/src/recv/RecvEventFilename.ts @@ -10,6 +10,6 @@ export class RecvEventFilename extends RecvEvent { constructor(data: RawBuffer) { super(data); this.fileName = data.readString(SimConnectConstants.MAX_PATH); - this.flags = data.readInt32(); + this.flags = data.readUint32(); } } diff --git a/src/recv/RecvEventRaceEnd.ts b/src/recv/RecvEventRaceEnd.ts index cc04731..04f864d 100644 --- a/src/recv/RecvEventRaceEnd.ts +++ b/src/recv/RecvEventRaceEnd.ts @@ -34,8 +34,8 @@ export class RecvEventRaceEnd extends RecvEvent { constructor(data: RawBuffer) { super(data); - this.racerNumber = data.readInt32(); - this.numberRacers = data.readInt32(); + this.racerNumber = data.readUint32(); + this.numberRacers = data.readUint32(); this.missionGUID = data.readBytes(16); this.playerName = data.readString(260); this.sessionType = data.readString(260); @@ -43,6 +43,6 @@ export class RecvEventRaceEnd extends RecvEvent { this.playerRole = data.readString(260); this.totalTime = data.readFloat64(); this.penaltyTime = data.readFloat64(); - this.disqualified = data.readInt32() === 1; + this.disqualified = data.readUint32() === 1; } } diff --git a/src/recv/RecvEventRaceLap.ts b/src/recv/RecvEventRaceLap.ts index 11c95c2..dddc0e0 100644 --- a/src/recv/RecvEventRaceLap.ts +++ b/src/recv/RecvEventRaceLap.ts @@ -34,8 +34,8 @@ export class RecvEventRaceLap extends RecvEvent { constructor(data: RawBuffer) { super(data); - this.lapIndex = data.readInt32(); - this.numberRacers = data.readInt32(); + this.lapIndex = data.readUint32(); + this.numberRacers = data.readUint32(); this.missionGUID = data.readBytes(16); this.playerName = data.readString(260); this.sessionType = data.readString(260); @@ -43,6 +43,6 @@ export class RecvEventRaceLap extends RecvEvent { this.playerRole = data.readString(260); this.totalTime = data.readFloat64(); this.penaltyTime = data.readFloat64(); - this.disqualified = data.readInt32() === 1; + this.disqualified = data.readUint32() === 1; } } diff --git a/src/recv/RecvException.ts b/src/recv/RecvException.ts index 3fcf748..4ded0e8 100644 --- a/src/recv/RecvException.ts +++ b/src/recv/RecvException.ts @@ -11,12 +11,10 @@ export class RecvException { exceptionName: string; constructor(data: RawBuffer) { - this.exception = data.readInt32(); - this.sendId = data.readInt32(); - this.index = data.readInt32(); + this.exception = data.readUint32(); + this.sendId = data.readUint32(); + this.index = data.readUint32(); this.exceptionName = SimConnectException[this.exception] ?? 'Unknown Exception'; } } - -module.exports = { RecvException }; diff --git a/src/recv/RecvFacilitiesList.ts b/src/recv/RecvFacilitiesList.ts index 0963a63..50a794b 100644 --- a/src/recv/RecvFacilitiesList.ts +++ b/src/recv/RecvFacilitiesList.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; export class RecvFacilitiesList { requestID: DataRequestId; @@ -11,9 +11,9 @@ export class RecvFacilitiesList { outOf: number; constructor(data: RawBuffer) { - this.requestID = data.readInt32() as DataRequestId; - this.arraySize = data.readInt32(); - this.entryNumber = data.readInt32(); - this.outOf = data.readInt32(); + this.requestID = data.readUint32() as DataRequestId; + this.arraySize = data.readUint32(); + this.entryNumber = data.readUint32(); + this.outOf = data.readUint32(); } } diff --git a/src/recv/RecvFacilityData.ts b/src/recv/RecvFacilityData.ts index bbdc74d..e243c4d 100644 --- a/src/recv/RecvFacilityData.ts +++ b/src/recv/RecvFacilityData.ts @@ -1,6 +1,6 @@ import { FacilityDataType } from '../enums/FacilityDataType'; import { RawBuffer } from '../RawBuffer'; -import { DataDefinitionId, DataRequestId } from '../Types'; +import type { DataDefinitionId, DataRequestId } from '../Types'; export class RecvFacilityData { userRequestId: DataRequestId; @@ -20,13 +20,13 @@ export class RecvFacilityData { data: RawBuffer; constructor(data: RawBuffer) { - this.userRequestId = data.readInt32(); - this.uniqueRequestId = data.readInt32(); - this.parentUniqueRequestId = data.readInt32(); - this.type = data.readInt32(); - this.isListItem = data.readInt32() === 1; - this.itemIndex = data.readInt32(); - this.listSize = data.readInt32(); + this.userRequestId = data.readUint32(); + this.uniqueRequestId = data.readUint32(); + this.parentUniqueRequestId = data.readUint32(); + this.type = data.readUint32(); + this.isListItem = data.readUint32() === 1; + this.itemIndex = data.readUint32(); + this.listSize = data.readUint32(); this.data = data; } } diff --git a/src/recv/RecvFacilityDataEnd.ts b/src/recv/RecvFacilityDataEnd.ts index 15f3781..c5eeade 100644 --- a/src/recv/RecvFacilityDataEnd.ts +++ b/src/recv/RecvFacilityDataEnd.ts @@ -1,11 +1,11 @@ import { RawBuffer } from '../RawBuffer'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; export class RecvFacilityDataEnd { // extends RecvEvent userRequestId: DataRequestId; constructor(data: RawBuffer) { - this.userRequestId = data.readInt32(); + this.userRequestId = data.readUint32(); } } diff --git a/src/recv/RecvFlowEvent.ts b/src/recv/RecvFlowEvent.ts index 92d0487..fdf8ed0 100644 --- a/src/recv/RecvFlowEvent.ts +++ b/src/recv/RecvFlowEvent.ts @@ -6,7 +6,7 @@ export class RecvFlowEvent { fltPath: string; constructor(data: RawBuffer) { - this.flowEventID = data.readInt32(); + this.flowEventID = data.readUint32(); this.fltPath = data.readString256(); } } diff --git a/src/recv/RecvGetInputEvent.ts b/src/recv/RecvGetInputEvent.ts index 867c8ba..e71babf 100644 --- a/src/recv/RecvGetInputEvent.ts +++ b/src/recv/RecvGetInputEvent.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; import { InputEventType } from '../enums/InputEventType'; export class RecvGetInputEvent { @@ -10,7 +10,7 @@ export class RecvGetInputEvent { value: number | string; constructor(data: RawBuffer) { - this.requestID = data.readInt32(); + this.requestID = data.readUint32(); this.type = data.readUint32(); switch (this.type) { diff --git a/src/recv/RecvListTemplate.ts b/src/recv/RecvListTemplate.ts index 9349152..75dace4 100644 --- a/src/recv/RecvListTemplate.ts +++ b/src/recv/RecvListTemplate.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; export class RecvListTemplate { requestID: DataRequestId; @@ -11,9 +11,9 @@ export class RecvListTemplate { outOf: number; constructor(data: RawBuffer) { - this.requestID = data.readInt32() as DataRequestId; - this.arraySize = data.readInt32(); - this.entryNumber = data.readInt32(); - this.outOf = data.readInt32(); + this.requestID = data.readUint32() as DataRequestId; + this.arraySize = data.readUint32(); + this.entryNumber = data.readUint32(); + this.outOf = data.readUint32(); } } diff --git a/src/recv/RecvOpen.ts b/src/recv/RecvOpen.ts index 3d07e6e..8fde1b3 100644 --- a/src/recv/RecvOpen.ts +++ b/src/recv/RecvOpen.ts @@ -25,15 +25,15 @@ export class RecvOpen { constructor(data: RawBuffer) { this.applicationName = data.readString256(); - this.applicationVersionMajor = data.readInt32(); - this.applicationVersionMinor = data.readInt32(); - this.applicationBuildMajor = data.readInt32(); - this.applicationBuildMinor = data.readInt32(); - this.simConnectVersionMajor = data.readInt32(); - this.simConnectVersionMinor = data.readInt32(); - this.simConnectBuildMajor = data.readInt32(); - this.simConnectBuildMinor = data.readInt32(); - this.reserved1 = data.readInt32(); - this.reserved2 = data.readInt32(); + this.applicationVersionMajor = data.readUint32(); + this.applicationVersionMinor = data.readUint32(); + this.applicationBuildMajor = data.readUint32(); + this.applicationBuildMinor = data.readUint32(); + this.simConnectVersionMajor = data.readUint32(); + this.simConnectVersionMinor = data.readUint32(); + this.simConnectBuildMajor = data.readUint32(); + this.simConnectBuildMinor = data.readUint32(); + this.reserved1 = data.readUint32(); + this.reserved2 = data.readUint32(); } } diff --git a/src/recv/RecvSimObjectData.ts b/src/recv/RecvSimObjectData.ts index f26e2fd..be9e455 100644 --- a/src/recv/RecvSimObjectData.ts +++ b/src/recv/RecvSimObjectData.ts @@ -1,6 +1,6 @@ import { RawBuffer } from '../RawBuffer'; import { DataRequestFlag } from '../flags/DataRequestFlag'; -import { DataDefinitionId, DataRequestId, ObjectId } from '../Types'; +import type { DataDefinitionId, DataRequestId, ObjectId } from '../Types'; export class RecvSimObjectData { requestID: DataRequestId; @@ -21,13 +21,13 @@ export class RecvSimObjectData { constructor(data: RawBuffer) { // data.skip(8) - this.requestID = data.readInt32() as DataRequestId; - this.objectID = data.readInt32() as ObjectId; - this.defineID = data.readInt32() as DataDefinitionId; - this.flags = data.readInt32() as DataRequestFlag; - this.entryNumber = data.readInt32(); - this.outOf = data.readInt32(); - this.defineCount = data.readInt32(); + this.requestID = data.readUint32() as DataRequestId; + this.objectID = data.readUint32() as ObjectId; + this.defineID = data.readUint32() as DataDefinitionId; + this.flags = data.readUint32() as DataRequestFlag; + this.entryNumber = data.readUint32(); + this.outOf = data.readUint32(); + this.defineCount = data.readUint32(); this.data = data; } } diff --git a/src/recv/RecvSystemState.ts b/src/recv/RecvSystemState.ts index 696d5bd..f384d9f 100644 --- a/src/recv/RecvSystemState.ts +++ b/src/recv/RecvSystemState.ts @@ -1,6 +1,6 @@ import { SimConnectConstants } from '../SimConnectConstants'; import { RawBuffer } from '../RawBuffer'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; export class RecvSystemState { requestID: DataRequestId; @@ -12,8 +12,8 @@ export class RecvSystemState { dataString: string; constructor(data: RawBuffer) { - this.requestID = data.readInt32() as DataRequestId; - this.dataInteger = data.readInt32(); + this.requestID = data.readUint32() as DataRequestId; + this.dataInteger = data.readUint32(); this.dataFloat = data.readFloat32(); this.dataString = data.readString(SimConnectConstants.MAX_PATH); } diff --git a/src/recv/RecvWeatherObservation.ts b/src/recv/RecvWeatherObservation.ts index 42a1363..a1fca7d 100644 --- a/src/recv/RecvWeatherObservation.ts +++ b/src/recv/RecvWeatherObservation.ts @@ -1,5 +1,5 @@ import { RawBuffer } from '../RawBuffer'; -import { DataRequestId } from '../Types'; +import type { DataRequestId } from '../Types'; export class RecvWeatherObservation { requestID: DataRequestId; @@ -7,7 +7,7 @@ export class RecvWeatherObservation { metar: string; constructor(data: RawBuffer) { - this.requestID = data.readInt32() as DataRequestId; + this.requestID = data.readUint32() as DataRequestId; this.metar = data.readStringV(); } } diff --git a/tests/RawBuffer.test.ts b/tests/RawBuffer.test.ts new file mode 100644 index 0000000..c72bde4 --- /dev/null +++ b/tests/RawBuffer.test.ts @@ -0,0 +1,103 @@ +import { RawBuffer } from '../src/RawBuffer'; + +describe('RawBuffer', () => { + test('round-trips numeric values in little-endian order', () => { + const buffer = new RawBuffer(64); + + buffer.writeByte(0x12); + buffer.writeInt16(-1234); + buffer.writeInt32(-56789); + buffer.writeUint32(4000000000); + buffer.writeInt64(900719925); + buffer.writeUint64(18446744073709551615n); + buffer.writeFloat32(12.5); + buffer.writeFloat64(Math.PI); + + const raw = buffer.getBuffer(); + const reader = new RawBuffer(raw); + + expect(reader.readBytes(1)).toEqual(Buffer.from([0x12])); + expect(reader.readInt16()).toBe(-1234); + expect(reader.readInt32()).toBe(-56789); + expect(reader.readUint32()).toBe(4000000000); + expect(reader.readInt64()).toBe(900719925); + expect(reader.readUint64()).toBe(18446744073709551615n); + expect(reader.readFloat32()).toBeCloseTo(12.5); + expect(reader.readFloat64()).toBeCloseTo(Math.PI); + expect(reader.remaining()).toBe(0); + }); + + test('supports writing 16-bit and 32-bit values at an explicit offset', () => { + const buffer = new RawBuffer(10); + + buffer.writeInt32(0x11223344); + buffer.writeUint32(0xaabbccdd, 4); + buffer.writeInt16(-2, 8); + buffer.setOffset(10); + + const reader = new RawBuffer(buffer.getBuffer()); + + expect(reader.readInt32()).toBe(0x11223344); + expect(reader.readUint32()).toBe(0xaabbccdd); + expect(reader.readInt16()).toBe(-2); + }); + + test('reads and writes fixed-length strings with null padding', () => { + const buffer = new RawBuffer(64); + + buffer.writeString8('abc'); + buffer.writeString32('hello'); + buffer.writeString256(null); + + const raw = buffer.getBuffer(); + + expect(raw.subarray(0, 8)).toEqual(Buffer.from([0x61, 0x62, 0x63, 0, 0, 0, 0, 0])); + expect(raw.subarray(8, 40)).toEqual( + Buffer.concat([Buffer.from('hello', 'utf-8'), Buffer.alloc(27)]) + ); + expect(raw.subarray(40, 296)).toEqual(Buffer.alloc(256)); + + const reader = new RawBuffer(raw); + expect(reader.readString8()).toBe('abc'); + expect(reader.readString32()).toBe('hello'); + expect(reader.readString256()).toBe(''); + expect(reader.remaining()).toBe(0); + }); + + test('readStringV stops before the next value while consuming the padded field', () => { + const raw = Buffer.from([0x41, 0x42, 0x00, 0x00, 0x7a, 0x79, 0x00]); + const buffer = new RawBuffer(raw); + + expect(buffer.readStringV()).toBe('AB'); + expect(buffer.getOffset()).toBe(4); + expect(buffer.readString(3)).toBe('zy'); + expect(buffer.remaining()).toBe(0); + }); + + test('clear resets the offset and allows the buffer to be reused', () => { + const buffer = new RawBuffer(16); + + buffer.writeString('test'); + expect(buffer.getOffset()).toBe(4); + + buffer.clear(); + expect(buffer.getOffset()).toBe(0); + + buffer.writeInt32(42); + + const reader = new RawBuffer(buffer.getBuffer()); + expect(reader.readInt32()).toBe(42); + expect(reader.remaining()).toBe(0); + }); + + test('can read slices and manually adjust the offset', () => { + const buffer = new RawBuffer(Buffer.from([1, 2, 3, 4, 5])); + + expect(buffer.readBytes(2)).toEqual(Buffer.from([1, 2])); + expect(buffer.getOffset()).toBe(2); + + buffer.setOffset(1); + expect(buffer.readBytes(3)).toEqual(Buffer.from([2, 3, 4])); + expect(buffer.remaining()).toBe(1); + }); +}); diff --git a/tests/flightLoad.test.ts b/tests/flightLoad.test.ts index 2129329..e9ee292 100644 --- a/tests/flightLoad.test.ts +++ b/tests/flightLoad.test.ts @@ -1,5 +1,4 @@ -import { SimConnectConnection } from '../src/SimConnectConnection'; -import { Protocol } from '../src/enums/Protocol'; +import { Protocol, SimConnectConnection } from '../src'; import { expectBufferContent } from './utils'; test('The packet content when loading a flight is correctly formatted', () => { @@ -22,9 +21,9 @@ const expectedMessageContent = ` 14 01 00 00 05 00 00 00 3D 00 00 F0 02 00 00 00 43 3A 5C 55 73 65 72 73 -5C C3 98 79 73 74 65 69 -6E 5C 66 6C 69 67 68 74 -70 6C 61 6E 00 00 00 00 +5C D8 79 73 74 65 69 6E +5C 66 6C 69 67 68 74 70 +6C 61 6E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 diff --git a/tests/rawBuffer.test.ts b/tests/rawBuffer.test.ts new file mode 100644 index 0000000..0acfd5b --- /dev/null +++ b/tests/rawBuffer.test.ts @@ -0,0 +1,103 @@ +import { RawBuffer } from '../src/RawBuffer'; + +describe('RawBuffer', () => { + test('round-trips numeric values in little-endian order', () => { + const buffer = new RawBuffer(64); + + buffer.writeByte(0x12); + buffer.writeInt16(-1234); + buffer.writeInt32(-56789); + buffer.writeUint32(4000000000); + buffer.writeInt64(900719925); + buffer.writeUint64(18446744073709551615n); + buffer.writeFloat32(12.5); + buffer.writeFloat64(Math.PI); + + const raw = buffer.getBuffer(); + const reader = new RawBuffer(raw); + + expect(reader.readBytes(1)).toEqual(Buffer.from([0x12])); + expect(reader.readInt16()).toBe(-1234); + expect(reader.readInt32()).toBe(-56789); + expect(reader.readUint32()).toBe(4000000000); + expect(reader.readInt64()).toBe(900719925); + expect(reader.readUint64()).toBe(18446744073709551615n); + expect(reader.readFloat32()).toBeCloseTo(12.5); + expect(reader.readFloat64()).toBeCloseTo(Math.PI); + expect(reader.remaining()).toBe(0); + }); + + test('supports writing 16-bit and 32-bit values at an explicit offset', () => { + const buffer = new RawBuffer(10); + + buffer.writeInt32(0x11223344); + buffer.writeUint32(0xaabbccdd, 4); + buffer.writeInt16(-2, 8); + buffer.setOffset(10); + + const reader = new RawBuffer(buffer.getBuffer()); + + expect(reader.readInt32()).toBe(0x11223344); + expect(reader.readUint32()).toBe(0xaabbccdd); + expect(reader.readInt16()).toBe(-2); + }); + + test('reads and writes fixed-length strings with null padding', () => { + const buffer = new RawBuffer(64); + + buffer.writeString8('abc'); + buffer.writeString32('hello'); + buffer.writeString256(null); + + const raw = buffer.getBuffer(); + const expectedString32 = Buffer.alloc(32); + expectedString32.write('hello', 'utf-8'); + + expect(raw.subarray(0, 8)).toEqual(Buffer.from([0x61, 0x62, 0x63, 0, 0, 0, 0, 0])); + expect(raw.subarray(8, 40)).toEqual(expectedString32); + expect(raw.subarray(40, 296)).toEqual(Buffer.alloc(256)); + + const reader = new RawBuffer(raw); + expect(reader.readString8()).toBe('abc'); + expect(reader.readString32()).toBe('hello'); + expect(reader.readString256()).toBe(''); + expect(reader.remaining()).toBe(0); + }); + + test('readStringV stops before the next value while consuming the padded field', () => { + const raw = Buffer.from([0x41, 0x42, 0x00, 0x00, 0x7a, 0x79, 0x00]); + const buffer = new RawBuffer(raw); + + expect(buffer.readStringV()).toBe('AB'); + expect(buffer.getOffset()).toBe(4); + expect(buffer.readString(3)).toBe('zy'); + expect(buffer.remaining()).toBe(0); + }); + + test('clear resets the offset and allows the buffer to be reused', () => { + const buffer = new RawBuffer(16); + + buffer.writeString('test'); + expect(buffer.getOffset()).toBe(4); + + buffer.clear(); + expect(buffer.getOffset()).toBe(0); + + buffer.writeInt32(42); + + const reader = new RawBuffer(buffer.getBuffer()); + expect(reader.readInt32()).toBe(42); + expect(reader.remaining()).toBe(0); + }); + + test('can read slices and manually adjust the offset', () => { + const buffer = new RawBuffer(Buffer.from([1, 2, 3, 4, 5])); + + expect(buffer.readBytes(2)).toEqual(Buffer.from([1, 2])); + expect(buffer.getOffset()).toBe(2); + + buffer.setOffset(1); + expect(buffer.readBytes(3)).toEqual(Buffer.from([2, 3, 4])); + expect(buffer.remaining()).toBe(1); + }); +}); diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..2260aba --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2022"], + "module": "NodeNext", + "moduleResolution": "NodeNext", + "types": ["node"], + "strict": true, + "esModuleInterop": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "inlineSources": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "exactOptionalPropertyTypes": true + } +} diff --git a/tsconfig.build.json b/tsconfig.build.json index bd8527d..e83914e 100644 --- a/tsconfig.build.json +++ b/tsconfig.build.json @@ -1,4 +1,10 @@ { - "extends": "./tsconfig.json", - "exclude": ["tests/**/*", "utils/**/*"] + "extends": "./tsconfig.base.json", + "compilerOptions": { + "rootDir": "./src", + "outDir": "./dist", + "noEmit": false + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "dist", "tests", "utils"] } diff --git a/tsconfig.eslint.json b/tsconfig.eslint.json new file mode 100644 index 0000000..368dda7 --- /dev/null +++ b/tsconfig.eslint.json @@ -0,0 +1,5 @@ +{ + "extends": "./tsconfig.json", + "include": ["src/**/*", "tests/**/*", "utils/**/*"], + "exclude": ["node_modules", "dist"] +} diff --git a/tsconfig.json b/tsconfig.json index dfc03c8..84534b8 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,24 +1,10 @@ { + "extends": "./tsconfig.base.json", "compilerOptions": { - "module": "CommonJS", - "target": "es2020", - "lib": ["es2020"], - "outDir": "./dist", - "strict": true, - "moduleResolution": "node", - "allowSyntheticDefaultImports": true, - "esModuleInterop": true, - "declaration": true, - "declarationMap": true, - "inlineSourceMap": true, - "inlineSources": true, - "skipLibCheck": true, - "forceConsistentCasingInFileNames": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "exactOptionalPropertyTypes": true + "noEmit": true, + "isolatedModules": true, + "types": ["node", "jest"] }, "include": ["src/**/*", "tests/**/*", "utils/**/*"], - "exclude": ["node_modules", "dist", "**/*.test.ts", "**/*.spec.ts"] + "exclude": ["node_modules", "dist"] } diff --git a/utils/packet-inspector/packetInspectorProxy.ts b/utils/packet-inspector/packetInspectorProxy.ts index 35e417d..822015f 100644 --- a/utils/packet-inspector/packetInspectorProxy.ts +++ b/utils/packet-inspector/packetInspectorProxy.ts @@ -25,8 +25,8 @@ const server = net.createServer(clientSocket => { ); const hexString = formatAndPrint(data); - targetSocket.write(data); - targetSocket.write(Buffer.from(hexString, 'hex')); // Forwarding the data to the target server + targetSocket.write(Uint8Array.from(data)); + targetSocket.write(Uint8Array.from(Buffer.from(hexString, 'hex'))); // Forwarding the data to the target server }); targetSocket.on('data', data => { @@ -35,8 +35,8 @@ const server = net.createServer(clientSocket => { ); const hexString = formatAndPrint(data); - clientSocket.write(data); - clientSocket.write(Buffer.from(hexString, 'hex')); // Forwarding the data to the client + clientSocket.write(Uint8Array.from(data)); + clientSocket.write(Uint8Array.from(Buffer.from(hexString, 'hex'))); // Forwarding the data to the client }); clientSocket.on('end', () => { @@ -66,12 +66,18 @@ server.listen(proxyPort, proxyHost, () => { }); function formatAndPrint(data: Buffer): string { - const hexString = data.toString('hex'); - for (let i = 0; i < hexString.length; i += 32) { - const slice = hexString.slice(i, i + 32); - const utf8String = Buffer.from(slice, 'hex').toString('utf-8'); - console.log(`${slice.match(/.{1,8}/g)?.join(' ')}\t\t${utf8String}`); + const lines: string[] = []; + for (let i = 0; i < data.length; i += 8) { + const chunk = data.subarray(i, i + 8); + const hex = Array.from(chunk) + .map(b => b.toString(16).toUpperCase().padStart(2, '0')) + .join(' ') + .padEnd(23, ' '); + const text = Array.from(chunk) + .map(b => (b >= 0x20 ? Buffer.from([b]).toString('latin1') : '.')) + .join(''); + lines.push(`${hex} ${text}`); } - console.log('\n\n'); - return hexString; // Return the original hex string for forwarding + console.log(`${lines.join('\n')}\n`); + return data.toString('hex'); // Return the original hex string for forwarding }