diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 4b823f6..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "env": { - "browser": true, - "commonjs": true, - "es2021": true - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest" - }, - "plugins": [ - "@typescript-eslint" - ], - "rules": {} -} \ No newline at end of file diff --git a/.github/workflows/beta-release.yml b/.github/workflows/beta-release.yml index 365f152..7c284b6 100644 --- a/.github/workflows/beta-release.yml +++ b/.github/workflows/beta-release.yml @@ -21,11 +21,11 @@ jobs: if: ${{ github.repository == 'homebridge/hap-client' }} - uses: homebridge/.github/.github/workflows/npm-publish.yml@latest + uses: homebridge/.github/.github/workflows/npm-publish-esm.yml@latest with: - tag: 'beta' + tag: beta dynamically_adjust_version: true - npm_version_command: 'pre' - pre_id: 'beta' + npm_version_command: pre + pre_id: beta secrets: npm_auth_token: ${{ secrets.npm_token }} diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a3faf80..ca3f3f0 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -1,10 +1,10 @@ -name: "CodeQL" +name: CodeQL on: push: - branches: [ latest, beta* ] + branches: [latest, beta*] pull_request: - branches: [ latest, beta* ] + branches: [latest, beta*] schedule: - cron: '17 9 * * 2' diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 2eb6bcc..f5b566b 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,6 +19,6 @@ jobs: if: ${{ github.repository == 'homebridge/hap-client' }} - uses: homebridge/.github/.github/workflows/npm-publish.yml@latest + uses: homebridge/.github/.github/workflows/npm-publish-esm.yml@latest secrets: npm_auth_token: ${{ secrets.npm_token }} diff --git a/.vscode/settings.json b/.vscode/settings.json index 8a0ac67..0c3839e 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -7,4 +7,4 @@ }, "editor.formatOnSave": true, "codeQL.githubDatabase.download": "never" -} \ No newline at end of file +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 0199631..b6d816e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,12 @@ All notable changes to `@homebridge/hap-client` will be documented in this file. This project tries to adhere to [Semantic Versioning](http://semver.org/). +## BETA + +### Changed + +- Updated dependencies, regenerate HAP types + ## v2.0.4 (2024-11-07) ### Changed diff --git a/README.md b/README.md index 678aa38..7bf6607 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ A client for an insecure HAP-NodeJS instance. Provides a Typescript based interf - homebridge-config-ui-x - homebridge-gsh - - [NPM Dependants](https://www.npmjs.com/package/@homebridge/hap-client?activeTab=dependents) ## Credits diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..67d2be7 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,57 @@ +import antfu from '@antfu/eslint-config' + +export default antfu({ + ignores: ['dist', 'docs'], + jsx: false, + typescript: true, + formatters: { + markdown: true, + }, + rules: { + 'curly': ['error', 'multi-line'], + 'import/extensions': ['error', 'ignorePackages'], + 'import/order': 0, + 'jsdoc/check-alignment': 'error', + 'jsdoc/check-line-alignment': 'error', + 'no-undef': 'off', // Turn off no-undef for TypeScript, handled by TS itself + 'perfectionist/sort-exports': 'error', + 'perfectionist/sort-imports': [ + 'error', + { + groups: [ + 'builtin-type', + 'external-type', + 'internal-type', + ['parent-type', 'sibling-type', 'index-type'], + 'builtin', + 'external', + 'internal', + ['parent', 'sibling', 'index'], + 'object', + 'unknown', + ], + order: 'asc', + type: 'natural', + }, + ], + 'perfectionist/sort-named-exports': 'error', + 'perfectionist/sort-named-imports': 'error', + 'sort-imports': 0, + 'style/brace-style': ['error', '1tbs', { allowSingleLine: true }], + 'style/quote-props': ['error', 'consistent-as-needed'], + 'test/no-only-tests': 'error', + 'unicorn/no-useless-spread': 'error', + 'unused-imports/no-unused-vars': ['error', { caughtErrors: 'none' }], + }, + overrides: [ + { + files: ['*.ts', '*.tsx'], // Apply to TypeScript files only + env: { + node: true, // Enables Node.js global variables and type definitions + }, + parserOptions: { + project: './tsconfig.json', // Directs ESLint to use your TypeScript config + }, + }, + ], +}) diff --git a/package-lock.json b/package-lock.json index 9712c67..1d99aca 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,22 +9,263 @@ "version": "2.0.4", "license": "MIT", "dependencies": { - "axios": "1.7.6", - "bonjour-service": "1.2.1", - "decamelize": "5.0.1", + "axios": "1.7.7", + "bonjour-service": "^1.3.0", + "decamelize": "^6.0.0", "inflection": "3.0.0", "source-map-support": "0.5.21" }, "devDependencies": { - "@types/node": "^22.5.1", + "@antfu/eslint-config": "^3.9.2", + "@types/node": "^22.9.1", "@types/source-map-support": "^0.5.10", - "@typescript-eslint/eslint-plugin": "^8.3.0", - "@typescript-eslint/parser": "^8.3.0", - "eslint": "^8.57.0", - "eslint-plugin-jest": "^28.8.1", - "hap-nodejs": "^1.1.0", + "eslint": "^9.15.0", + "eslint-plugin-format": "^0.1.2", + "hap-nodejs": "^1.1.1-alpha.21", + "rimraf": "^6.0.1", "ts-node": "^10.9.2", - "typescript": "^5.5.4" + "typescript": "^5.6.3" + }, + "engines": { + "node": "^18 || ^20 || ^22" + } + }, + "node_modules/@antfu/eslint-config": { + "version": "3.9.2", + "resolved": "https://registry.npmjs.org/@antfu/eslint-config/-/eslint-config-3.9.2.tgz", + "integrity": "sha512-a1I1CXmtQdTL9jxcb2RzKjuYYAzjdKK3ktVpQGd/1S/aUdhKgcEEi3DRXYgnB8xdpYLqracETxEMDf9PQlmyBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^0.4.1", + "@clack/prompts": "^0.8.1", + "@eslint-community/eslint-plugin-eslint-comments": "^4.4.1", + "@eslint/markdown": "^6.2.1", + "@stylistic/eslint-plugin": "^2.10.1", + "@typescript-eslint/eslint-plugin": "^8.15.0", + "@typescript-eslint/parser": "^8.15.0", + "@vitest/eslint-plugin": "^1.1.10", + "eslint-config-flat-gitignore": "^0.3.0", + "eslint-flat-config-utils": "^0.4.0", + "eslint-merge-processors": "^0.1.0", + "eslint-plugin-antfu": "^2.7.0", + "eslint-plugin-command": "^0.2.6", + "eslint-plugin-import-x": "^4.4.2", + "eslint-plugin-jsdoc": "^50.5.0", + "eslint-plugin-jsonc": "^2.18.2", + "eslint-plugin-n": "^17.13.2", + "eslint-plugin-no-only-tests": "^3.3.0", + "eslint-plugin-perfectionist": "^3.9.1", + "eslint-plugin-regexp": "^2.7.0", + "eslint-plugin-toml": "^0.11.1", + "eslint-plugin-unicorn": "^56.0.0", + "eslint-plugin-unused-imports": "^4.1.4", + "eslint-plugin-vue": "^9.31.0", + "eslint-plugin-yml": "^1.15.0", + "eslint-processor-vue-blocks": "^0.1.2", + "globals": "^15.12.0", + "jsonc-eslint-parser": "^2.4.0", + "local-pkg": "^0.5.0", + "parse-gitignore": "^2.0.0", + "picocolors": "^1.1.1", + "toml-eslint-parser": "^0.10.0", + "vue-eslint-parser": "^9.4.3", + "yaml-eslint-parser": "^1.2.3", + "yargs": "^17.7.2" + }, + "bin": { + "eslint-config": "bin/index.js" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@eslint-react/eslint-plugin": "^1.5.8", + "@prettier/plugin-xml": "^3.4.1", + "@unocss/eslint-plugin": ">=0.50.0", + "astro-eslint-parser": "^1.0.2", + "eslint": "^9.10.0", + "eslint-plugin-astro": "^1.2.0", + "eslint-plugin-format": ">=0.1.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-react-refresh": "^0.4.4", + "eslint-plugin-solid": "^0.14.3", + "eslint-plugin-svelte": ">=2.35.1", + "prettier-plugin-astro": "^0.13.0", + "prettier-plugin-slidev": "^1.0.5", + "svelte-eslint-parser": ">=0.37.0" + }, + "peerDependenciesMeta": { + "@eslint-react/eslint-plugin": { + "optional": true + }, + "@prettier/plugin-xml": { + "optional": true + }, + "@unocss/eslint-plugin": { + "optional": true + }, + "astro-eslint-parser": { + "optional": true + }, + "eslint-plugin-astro": { + "optional": true + }, + "eslint-plugin-format": { + "optional": true + }, + "eslint-plugin-react-hooks": { + "optional": true + }, + "eslint-plugin-react-refresh": { + "optional": true + }, + "eslint-plugin-solid": { + "optional": true + }, + "eslint-plugin-svelte": { + "optional": true + }, + "prettier-plugin-astro": { + "optional": true + }, + "prettier-plugin-slidev": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + } + } + }, + "node_modules/@antfu/install-pkg": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-0.4.1.tgz", + "integrity": "sha512-T7yB5QNG29afhWVkVq7XeIMBa5U/vs9mX69YqayXypPRmYzUmzwnYltplHmPtZ4HPCn+sQKeXW8I47wCbuBOjw==", + "dev": true, + "license": "MIT", + "dependencies": { + "package-manager-detector": "^0.2.0", + "tinyexec": "^0.3.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", + "integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.9", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "dev": true, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@clack/core": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/@clack/core/-/core-0.3.4.tgz", + "integrity": "sha512-H4hxZDXgHtWTwV3RAVenqcC4VbJZNegbBjlPvzOzCouXtS2y3sDvlO3IsbrPNWuLWPPlYVYPghQdSF64683Ldw==", + "dev": true, + "license": "MIT", + "dependencies": { + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@clack/prompts/-/prompts-0.8.1.tgz", + "integrity": "sha512-I263nEUNbX4lPTX93trl1fkIvGrGlz6nUYkqOddF0ZmjqcxUgUlXmpUIUqfapirRKJrFddvwF+qdZgg8cSqF7g==", + "bundleDependencies": [ + "is-unicode-supported" + ], + "dev": true, + "license": "MIT", + "dependencies": { + "@clack/core": "0.3.4", + "is-unicode-supported": "*", + "picocolors": "^1.0.0", + "sisteransi": "^1.0.5" + } + }, + "node_modules/@clack/prompts/node_modules/is-unicode-supported": { + "version": "1.3.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/@cspotcode/source-map-support": { @@ -40,43 +281,182 @@ "node": ">=12" } }, + "node_modules/@dprint/formatter": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@dprint/formatter/-/formatter-0.3.0.tgz", + "integrity": "sha512-N9fxCxbaBOrDkteSOzaCqwWjso5iAe+WJPsHC021JfHNj2ThInPNEF13ORDKta3llq5D1TlclODCvOvipH7bWQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@dprint/markdown": { + "version": "0.17.8", + "resolved": "https://registry.npmjs.org/@dprint/markdown/-/markdown-0.17.8.tgz", + "integrity": "sha512-ukHFOg+RpG284aPdIg7iPrCYmMs3Dqy43S1ejybnwlJoFiW02b+6Bbr5cfZKFRYNP3dKGM86BqHEnMzBOyLvvA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@dprint/toml": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/@dprint/toml/-/toml-0.6.3.tgz", + "integrity": "sha512-zQ42I53sb4WVHA+5yoY1t59Zk++Ot02AvUgtNKLzTT8mPyVqVChFcePa3on/xIoKEgH+RoepgPHzqfk9837YFw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.48.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.48.0.tgz", + "integrity": "sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@eslint-community/eslint-plugin-eslint-comments": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-plugin-eslint-comments/-/eslint-plugin-eslint-comments-4.4.1.tgz", + "integrity": "sha512-lb/Z/MzbTf7CaVYM9WCFNQZ4L1yi3ev2fsFPF99h31ljhSEyUoyEsKsNWiU+qD1glbYTDJdqgyaLKtyTkkqtuQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^4.0.0", + "ignore": "^5.2.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" + } + }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/compat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@eslint/compat/-/compat-1.2.3.tgz", + "integrity": "sha512-wlZhwlDFxkxIZ571aH0FoK4h4Vwx7P3HJx62Gp8hTc10bfpwT2x0nULuAHmQSJBOWPgPeVf+9YtnD4j50zVHmA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^9.10.0" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.0.tgz", + "integrity": "sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz", + "integrity": "sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.2.0.tgz", + "integrity": "sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==", "dev": true, "license": "MIT", "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -84,7 +464,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -101,6 +481,19 @@ "concat-map": "0.0.1" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -115,13 +508,52 @@ } }, "node_modules/@eslint/js": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", - "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.15.0.tgz", + "integrity": "sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/markdown": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@eslint/markdown/-/markdown-6.2.1.tgz", + "integrity": "sha512-cKVd110hG4ICHmWhIwZJfKmmJBvbiDWyrHODJknAtudKgZtlROGoLX9UEOA0o746zC0hCY4UV4vR+aOGW9S6JQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/plugin-kit": "^0.2.0", + "mdast-util-from-markdown": "^2.0.1", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.3.tgz", + "integrity": "sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, "node_modules/@homebridge/ciao": { @@ -179,44 +611,42 @@ "node": ">=0.3.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, "engines": { - "node": ">=10.10.0" + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -233,13 +663,37 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", "dev": true, - "license": "BSD-3-Clause" + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } }, "node_modules/@jridgewell/resolve-uri": { "version": "3.1.2", @@ -313,6 +767,39 @@ "node": ">= 8" } }, + "node_modules/@pkgr/core": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.11.0.tgz", + "integrity": "sha512-PNRHbydNG5EH8NK4c+izdJlxajIR6GxcUhzsYNRsn6Myep4dsZt0qFCz3rCPnkvgO5FYibDcMqgNHUT+zvjYZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.13.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, "node_modules/@tsconfig/node10": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.11.tgz", @@ -341,16 +828,64 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/node": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz", - "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==", + "version": "22.9.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.9.1.tgz", + "integrity": "sha512-p8Yy/8sw1caA8CdRIQBG5tiLHmxtQKObCijiAa9Ez+d4+PRffM4054xbju0msf+cvhJpnFEeNjxmVT/0ipktrg==", "dev": true, "license": "MIT", "dependencies": { - "undici-types": "~6.19.2" + "undici-types": "~6.19.8" } }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/source-map-support": { "version": "0.5.10", "resolved": "https://registry.npmjs.org/@types/source-map-support/-/source-map-support-0.5.10.tgz", @@ -361,18 +896,25 @@ "source-map": "^0.6.0" } }, + "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, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.3.0.tgz", - "integrity": "sha512-FLAIn63G5KH+adZosDYiutqkOkYEx0nvcwNNfJAf+c7Ae/H35qWwTYvPZUKFj5AS+WfHG/WJJfWnDnyNUlp8UA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.15.0.tgz", + "integrity": "sha512-+zkm9AR1Ds9uLWN3fkoeXgFppaQ+uEVtfOV62dDmsy9QCNqlRHWNEck4yarvRNrvRcHQLGfqBNui3cimoz8XAg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.3.0", - "@typescript-eslint/type-utils": "8.3.0", - "@typescript-eslint/utils": "8.3.0", - "@typescript-eslint/visitor-keys": "8.3.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/type-utils": "8.15.0", + "@typescript-eslint/utils": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -396,16 +938,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.3.0.tgz", - "integrity": "sha512-h53RhVyLu6AtpUzVCYLPhZGL5jzTD9fZL+SYf/+hYOx2bDkyQXztXSc4tbvKYHzfMXExMLiL9CWqJmVz6+78IQ==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.15.0.tgz", + "integrity": "sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.3.0", - "@typescript-eslint/types": "8.3.0", - "@typescript-eslint/typescript-estree": "8.3.0", - "@typescript-eslint/visitor-keys": "8.3.0", + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "debug": "^4.3.4" }, "engines": { @@ -425,14 +967,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.3.0.tgz", - "integrity": "sha512-mz2X8WcN2nVu5Hodku+IR8GgCOl4C0G/Z1ruaWN4dgec64kDBabuXyPAr+/RgJtumv8EEkqIzf3X2U5DUKB2eg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.15.0.tgz", + "integrity": "sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.3.0", - "@typescript-eslint/visitor-keys": "8.3.0" + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -443,14 +985,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.3.0.tgz", - "integrity": "sha512-wrV6qh//nLbfXZQoj32EXKmwHf4b7L+xXLrP3FZ0GOUU72gSvLjeWUl5J5Ue5IwRxIV1TfF73j/eaBapxx99Lg==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.15.0.tgz", + "integrity": "sha512-UU6uwXDoI3JGSXmcdnP5d8Fffa2KayOhUUqr/AiBnG1Gl7+7ut/oyagVeSkh7bxQ0zSXV9ptRh/4N15nkCqnpw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.3.0", - "@typescript-eslint/utils": "8.3.0", + "@typescript-eslint/typescript-estree": "8.15.0", + "@typescript-eslint/utils": "8.15.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -461,6 +1003,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -468,9 +1013,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.3.0.tgz", - "integrity": "sha512-y6sSEeK+facMaAyixM36dQ5NVXTnKWunfD1Ft4xraYqxP0lC0POJmIaL/mw72CUMqjY9qfyVfXafMeaUj0noWw==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.15.0.tgz", + "integrity": "sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==", "dev": true, "license": "MIT", "engines": { @@ -482,14 +1027,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.3.0.tgz", - "integrity": "sha512-Mq7FTHl0R36EmWlCJWojIC1qn/ZWo2YiWYc1XVtasJ7FIgjo0MVv9rZWXEE7IK2CGrtwe1dVOxWwqXUdNgfRCA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.15.0.tgz", + "integrity": "sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.3.0", - "@typescript-eslint/visitor-keys": "8.3.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/visitor-keys": "8.15.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -511,16 +1056,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.3.0.tgz", - "integrity": "sha512-F77WwqxIi/qGkIGOGXNBLV7nykwfjLsdauRB/DOFPdv6LTF3BHHkBpq81/b5iMPSF055oO2BiivDJV4ChvNtXA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.15.0.tgz", + "integrity": "sha512-k82RI9yGhr0QM3Dnq+egEpz9qB6Un+WLYhmoNcvl8ltMEededhh7otBVVIDDsEEttauwdY/hQoSsOv13lxrFzQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.3.0", - "@typescript-eslint/types": "8.3.0", - "@typescript-eslint/typescript-estree": "8.3.0" + "@typescript-eslint/scope-manager": "8.15.0", + "@typescript-eslint/types": "8.15.0", + "@typescript-eslint/typescript-estree": "8.15.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -531,17 +1076,22 @@ }, "peerDependencies": { "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.3.0.tgz", - "integrity": "sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==", + "version": "8.15.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.15.0.tgz", + "integrity": "sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.3.0", - "eslint-visitor-keys": "^3.4.3" + "@typescript-eslint/types": "8.15.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -551,17 +1101,97 @@ "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "node_modules/@vitest/eslint-plugin": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/@vitest/eslint-plugin/-/eslint-plugin-1.1.10.tgz", + "integrity": "sha512-uScH5Kz5v32vvtQYB2iodpoPg2mGASK+VKpjlc2IUgE0+16uZKqVKi2vQxjxJ6sMCQLBs4xhBFZlmZBszsmfKQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "peerDependencies": { + "@typescript-eslint/utils": ">= 8.0", + "eslint": ">= 8.57.0", + "typescript": ">= 5.0.0", + "vitest": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "vitest": { + "optional": true + } + } + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "dev": true, + "license": "MIT", + "peer": true }, "node_modules/acorn": { - "version": "8.12.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", - "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "license": "MIT", "bin": { @@ -582,9 +1212,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "version": "8.3.4", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", + "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", "dev": true, "license": "MIT", "dependencies": { @@ -612,13 +1242,16 @@ } }, "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/ansi-styles": { @@ -637,6 +1270,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/are-docs-informative": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/are-docs-informative/-/are-docs-informative-0.0.2.tgz", + "integrity": "sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -698,9 +1341,9 @@ } }, "node_modules/axios": { - "version": "1.7.6", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.6.tgz", - "integrity": "sha512-Ekur6XDwhnJ5RgOCaxFnXyqlPALI3rVeukZMwOdfghW7/wGz784BYKiQq+QD8NPcr91KRo30KfHOchyijwWw7g==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", @@ -729,15 +1372,22 @@ } }, "node_modules/bonjour-service": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.2.1.tgz", - "integrity": "sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", + "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "multicast-dns": "^7.2.5" } }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true, + "license": "ISC" + }, "node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -761,12 +1411,58 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.24.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", + "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "caniuse-lite": "^1.0.30001669", + "electron-to-chromium": "^1.5.41", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.1" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", "license": "MIT" }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -797,6 +1493,38 @@ "node": ">=6" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001683", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001683.tgz", + "integrity": "sha512-iqmNnThZ0n70mNwvxpEC2nBJ037ZHZUoBI5Gorh1Mw6IlEAZujEoU1tXA628iZfzm7R9FvFzxbfdgml82a3k8Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -814,75 +1542,247 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ci-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.1.0.tgz", + "integrity": "sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", + "integrity": "sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=7.0.0" + "node": ">=4" } }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "node_modules/clean-regexp/node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", "dependencies": { - "delayed-stream": "~1.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, "engines": { - "node": ">= 0.8" + "node": ">=12" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true, "license": "MIT" }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/debug": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", - "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true, + "license": "MIT" + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/comment-parser": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/core-js-compat": { + "version": "3.39.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.39.0.tgz", + "integrity": "sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==", + "dev": true, + "license": "MIT", + "dependencies": { + "browserslist": "^4.24.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -894,17 +1794,31 @@ } }, "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-6.0.0.tgz", + "integrity": "sha512-Fv96DCsdOgB6mdGl67MT5JaTNKRzrzill5OH5s8bjYJXVlcXyPYGyPsUkWyGV5p1TXI5esYIYMMeDJL0hEIwaA==", "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "dev": true, + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/deep-equal": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.3.tgz", @@ -990,6 +1904,30 @@ "node": ">=0.4.0" } }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", @@ -1032,6 +1970,65 @@ "dev": true, "license": "MIT" }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true, + "license": "MIT" + }, + "node_modules/electron-to-chromium": { + "version": "1.5.64", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.64.tgz", + "integrity": "sha512-IXEuxU+5ClW2IGEYFC2T7szbyVgehupCWQe5GNh+H065CD6U6IFN0s4KeAMFGNmQolRU4IV7zGBWSYMmZ8uuqQ==", + "dev": true, + "license": "ISC" + }, + "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, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.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, + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, "node_modules/es-define-property": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", @@ -1076,6 +2073,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true, + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1090,500 +2104,738 @@ } }, "node_modules/eslint": { - "version": "8.57.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", - "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", + "version": "9.15.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.15.0.tgz", + "integrity": "sha512-7CrWySmIibCgT1Os28lUU6upBshZ+GxybLOrmRzi08kS8MBuO8QA7pXEgYgY5W8vK3e74xv0lpjo9DbaGU9Rkw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.0", - "@humanwhocodes/config-array": "^0.11.14", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.0", + "@eslint/core": "^0.9.0", + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "9.15.0", + "@eslint/plugin-kit": "^0.2.3", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.5", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/eslint-plugin-jest": { - "version": "28.8.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.8.1.tgz", - "integrity": "sha512-G46XMyYu6PtSNJUkQ0hsPjzXYpzq/O4vpCciMizTKRJG8kNsRreGoMRDG6H9FIB/xVgfFuclVnuX4XRvFUzrZQ==", + "node_modules/eslint-compat-utils": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.3.tgz", + "integrity": "sha512-9IDdksh5pUYP2ZLi7mOdROxVjLY8gY2qKxprmrJ/5Dyqud7M/IFKxF3o0VLlRhITm1pK6Fk7NiBxE39M/VlUcw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^6.0.0 || ^7.0.0 || ^8.0.0" + "semver": "^7.5.4" }, "engines": { - "node": "^16.10.0 || ^18.12.0 || >=20.0.0" + "node": ">=12" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0 || ^8.0.0", - "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", - "jest": "*" - }, - "peerDependenciesMeta": { - "@typescript-eslint/eslint-plugin": { - "optional": true - }, - "jest": { - "optional": true - } + "eslint": ">=6.0.0" } }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/eslint-config-flat-gitignore": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/eslint-config-flat-gitignore/-/eslint-config-flat-gitignore-0.3.0.tgz", + "integrity": "sha512-0Ndxo4qGhcewjTzw52TK06Mc00aDtHNTdeeW2JfONgDcLkRO/n/BteMRzNVpLQYxdCC/dFEilfM9fjjpGIJ9Og==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "@eslint/compat": "^1.1.1", + "find-up-simple": "^1.0.0" }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "^9.5.0" + } + }, + "node_modules/eslint-flat-config-utils": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/eslint-flat-config-utils/-/eslint-flat-config-utils-0.4.0.tgz", + "integrity": "sha512-kfd5kQZC+BMO0YwTol6zxjKX1zAsk8JfSAopbKjKqmENTJcew+yBejuvccAg37cvOrN0Mh+DVbeyznuNWEjt4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "pathe": "^1.1.2" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "node_modules/eslint-formatting-reporter": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/eslint-formatting-reporter/-/eslint-formatting-reporter-0.0.0.tgz", + "integrity": "sha512-k9RdyTqxqN/wNYVaTk/ds5B5rA8lgoAmvceYN7bcZMBwU7TuXx5ntewJv81eF3pIL/CiJE+pJZm36llG8yhyyw==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": ">=8.40.0" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "ms": "^2.1.1" } }, - "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "node_modules/eslint-json-compat-utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/eslint-json-compat-utils/-/eslint-json-compat-utils-0.2.1.tgz", + "integrity": "sha512-YzEodbDyW8DX8bImKhAcCeu/L31Dd/70Bidx2Qex9OFUtgzXLqtfWL4Hr5fM/aCCB8QUZLuJur0S9k6UfgFkfg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "esquery": "^1.6.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, - "funding": { - "url": "https://opencollective.com/eslint" + "peerDependencies": { + "eslint": "*", + "jsonc-eslint-parser": "^2.4.0" + }, + "peerDependenciesMeta": { + "@eslint/json": { + "optional": true + } } }, - "node_modules/esquery": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", - "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "node_modules/eslint-merge-processors": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/eslint-merge-processors/-/eslint-merge-processors-0.1.0.tgz", + "integrity": "sha512-IvRXXtEajLeyssvW4wJcZ2etxkR9mUf4zpNwgI+m/Uac9RfXHskuJefkHUcawVzePnd6xp24enp5jfgdHzjRdQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "*" + } + }, + "node_modules/eslint-parser-plain": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/eslint-parser-plain/-/eslint-parser-plain-0.1.0.tgz", + "integrity": "sha512-oOeA6FWU0UJT/Rxc3XF5Cq0nbIZbylm7j8+plqq0CZoE6m4u32OXJrR+9iy4srGMmF6v6pmgvP1zPxSRIGh3sg==", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-plugin-antfu": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-antfu/-/eslint-plugin-antfu-2.7.0.tgz", + "integrity": "sha512-gZM3jq3ouqaoHmUNszb1Zo2Ux7RckSvkGksjLWz9ipBYGSv1EwwBETN6AdiUXn+RpVHXTbEMPAPlXJazcA6+iA==", + "dev": true, + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "@antfu/utils": "^0.7.10" }, - "engines": { - "node": ">=0.10" + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", - "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "node_modules/eslint-plugin-command": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-command/-/eslint-plugin-command-0.2.6.tgz", + "integrity": "sha512-T0bHZ1oblW1xUHUVoBKZJR2osSNNGkfZuK4iqboNwuNS/M7tdp3pmURaJtTi/XDzitxaQ02lvOdFH0mUd5QLvQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.2.0" + "@es-joy/jsdoccomment": "^0.48.0" }, - "engines": { - "node": ">=4.0" + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "*" } }, - "node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, - "license": "BSD-2-Clause", + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" + }, "engines": { - "node": ">=4.0" + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": ">=8" } }, - "node_modules/esutils": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "node_modules/eslint-plugin-es-x/node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/event-stream": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", - "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", + "node_modules/eslint-plugin-format": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-format/-/eslint-plugin-format-0.1.2.tgz", + "integrity": "sha512-ZrcO3aiumgJ6ENAv65IWkPjtW77ML/5mp0YrRK0jdvvaZJb+4kKWbaQTMr/XbJo6CtELRmCApAziEKh7L2NbdQ==", "dev": true, "license": "MIT", "dependencies": { - "duplexer": "^0.1.1", - "from": "^0.1.7", - "map-stream": "0.0.7", - "pause-stream": "^0.0.11", - "split": "^1.0.1", - "stream-combiner": "^0.2.2", - "through": "^2.3.8" + "@dprint/formatter": "^0.3.0", + "@dprint/markdown": "^0.17.1", + "@dprint/toml": "^0.6.2", + "eslint-formatting-reporter": "^0.0.0", + "eslint-parser-plain": "^0.1.0", + "prettier": "^3.3.2", + "synckit": "^0.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "eslint": "^8.40.0 || ^9.0.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "node_modules/eslint-plugin-import-x": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.4.3.tgz", + "integrity": "sha512-QBprHvhLsfDhP++2T1NnjsOUt6bLDX3NMHaYwAB1FD3xmYTkdFH+HS1OamGhz28jLkRyIZa6UNAzTxbHnJwz5w==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "@typescript-eslint/utils": "^8.1.0", + "debug": "^4.3.4", + "doctrine": "^3.0.0", + "eslint-import-resolver-node": "^0.3.9", + "get-tsconfig": "^4.7.3", + "is-glob": "^4.0.3", + "minimatch": "^9.0.3", + "semver": "^7.6.3", + "stable-hash": "^0.0.4", + "tslib": "^2.6.3" }, "engines": { - "node": ">=8.6.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "node_modules/eslint-plugin-jsdoc": { + "version": "50.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-50.5.0.tgz", + "integrity": "sha512-xTkshfZrUbiSHXBwZ/9d5ulZ2OcHXxSvm/NPo494H/hadLRJwOq5PMV0EUpMqsb9V+kQo+9BAgi6Z7aJtdBp2A==", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "is-glob": "^4.0.1" + "@es-joy/jsdoccomment": "~0.49.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.3.6", + "escape-string-regexp": "^4.0.0", + "espree": "^10.1.0", + "esquery": "^1.6.0", + "parse-imports": "^2.1.1", + "semver": "^7.6.3", + "spdx-expression-parse": "^4.0.0", + "synckit": "^0.9.1" }, "engines": { - "node": ">= 6" + "node": ">=18" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "node_modules/eslint-plugin-jsdoc/node_modules/@es-joy/jsdoccomment": { + "version": "0.49.0", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.49.0.tgz", + "integrity": "sha512-xjZTSFgECpb9Ohuk5yMX5RhUEbfeQcuOp8IF60e+wyzWEF0M5xeSgqsfLtvPEX8BIyOX9saZqzuGPmZ8oWc+5Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" + }, + "engines": { + "node": ">=16" + } }, - "node_modules/fast-srp-hap": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-2.0.4.tgz", - "integrity": "sha512-lHRYYaaIbMrhZtsdGTwPN82UbqD9Bv8QfOlKs+Dz6YRnByZifOh93EYmf2iEWFtkOEIqR2IK8cFD0UN5wLIWBQ==", + "node_modules/eslint-plugin-jsonc": { + "version": "2.18.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsonc/-/eslint-plugin-jsonc-2.18.2.tgz", + "integrity": "sha512-SDhJiSsWt3nItl/UuIv+ti4g3m4gpGkmnUJS9UWR3TrpyNsIcnJoBRD7Kof6cM4Rk3L0wrmY5Tm3z7ZPjR2uGg==", "dev": true, "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "eslint-compat-utils": "^0.6.0", + "eslint-json-compat-utils": "^0.2.1", + "espree": "^9.6.1", + "graphemer": "^1.4.0", + "jsonc-eslint-parser": "^2.0.4", + "natural-compare": "^1.4.0", + "synckit": "^0.6.0" + }, "engines": { - "node": ">=10.17.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "node_modules/eslint-plugin-jsonc/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "node_modules/eslint-plugin-jsonc/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "flat-cache": "^3.0.4" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "node_modules/eslint-plugin-jsonc/node_modules/synckit": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.6.2.tgz", + "integrity": "sha512-Vhf+bUa//YSTYKseDiiEuQmhGCoIF3CVBhunm3r/DQnYiGT4JssmnKQc44BIyOZRK2pKjXXAgbhfmbeoC9CJpA==", "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "tslib": "^2.3.1" }, "engines": { - "node": ">=8" + "node": ">=12.20" } }, - "node_modules/find-up": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", - "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "node_modules/eslint-plugin-n": { + "version": "17.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.14.0.tgz", + "integrity": "sha512-maxPLMEA0rPmRpoOlxEclKng4UpDe+N5BJS4t24I3UKnN109Qcivnfs37KMy84G0af3bxjog5lKctP5ObsvcTA==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "@eslint-community/eslint-utils": "^4.4.1", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "ignore": "^5.3.2", + "minimatch": "^9.0.5", + "semver": "^7.6.3" }, "engines": { - "node": ">=10" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": ">=8.23.0" } }, - "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "node_modules/eslint-plugin-no-only-tests": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-only-tests/-/eslint-plugin-no-only-tests-3.3.0.tgz", + "integrity": "sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==", "dev": true, "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=5.0.0" } }, - "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "node_modules/eslint-plugin-perfectionist": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-perfectionist/-/eslint-plugin-perfectionist-3.9.1.tgz", + "integrity": "sha512-9WRzf6XaAxF4Oi5t/3TqKP5zUjERhasHmLFHin2Yw6ZAp/EP/EVA2dr3BhQrrHWCm5SzTMZf0FcjDnBkO2xFkA==", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.6", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", - "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "^8.9.0", + "@typescript-eslint/utils": "^8.9.0", + "minimatch": "^9.0.5", + "natural-compare-lite": "^1.4.0" + }, "engines": { - "node": ">=4.0" + "node": "^18.0.0 || >=20.0.0" + }, + "peerDependencies": { + "astro-eslint-parser": "^1.0.2", + "eslint": ">=8.0.0", + "svelte": ">=3.0.0", + "svelte-eslint-parser": "^0.41.1", + "vue-eslint-parser": ">=9.0.0" }, "peerDependenciesMeta": { - "debug": { + "astro-eslint-parser": { + "optional": true + }, + "svelte": { + "optional": true + }, + "svelte-eslint-parser": { + "optional": true + }, + "vue-eslint-parser": { "optional": true } } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "node_modules/eslint-plugin-regexp": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-regexp/-/eslint-plugin-regexp-2.7.0.tgz", + "integrity": "sha512-U8oZI77SBtH8U3ulZ05iu0qEzIizyEDXd+BWHvyVxTOjGwcDcvy/kEpgFG4DYca2ByRLiVPFZ2GeH7j1pdvZTA==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "comment-parser": "^1.4.0", + "jsdoc-type-pratt-parser": "^4.0.0", + "refa": "^0.12.1", + "regexp-ast-analysis": "^0.7.1", + "scslre": "^0.3.0" + }, + "engines": { + "node": "^18 || >=20" + }, + "peerDependencies": { + "eslint": ">=8.44.0" } }, - "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "node_modules/eslint-plugin-toml": { + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-toml/-/eslint-plugin-toml-0.11.1.tgz", + "integrity": "sha512-Y1WuMSzfZpeMIrmlP1nUh3kT8p96mThIq4NnHrYUhg10IKQgGfBZjAWnrg9fBqguiX4iFps/x/3Hb5TxBisfdw==", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "debug": "^4.1.1", + "eslint-compat-utils": "^0.5.0", + "lodash": "^4.17.19", + "toml-eslint-parser": "^0.10.0" }, "engines": { - "node": ">= 6" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/from": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", - "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "node_modules/eslint-plugin-toml/node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "semver": "^7.5.4" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "node_modules/eslint-plugin-unicorn": { + "version": "56.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-56.0.1.tgz", + "integrity": "sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.24.7", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^4.0.0", + "clean-regexp": "^1.0.0", + "core-js-compat": "^3.38.1", + "esquery": "^1.6.0", + "globals": "^15.9.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.6.3", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=18.18" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.56.0" + } }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "node_modules/eslint-plugin-unused-imports": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-unused-imports/-/eslint-plugin-unused-imports-4.1.4.tgz", + "integrity": "sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peerDependencies": { + "@typescript-eslint/eslint-plugin": "^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0", + "eslint": "^9.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@typescript-eslint/eslint-plugin": { + "optional": true + } } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "node_modules/eslint-plugin-vue": { + "version": "9.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.31.0.tgz", + "integrity": "sha512-aYMUCgivhz1o4tLkRHj5oq9YgYPM4/EJc0M7TAKRLCUA5OYxRLAhYEVD2nLtTwLyixEFI+/QXSvKU9ESZFgqjQ==", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/futoin-hkdf": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz", - "integrity": "sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==", + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "node_modules/eslint-plugin-vue/node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint-plugin-yml": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.15.0.tgz", + "integrity": "sha512-leC8APYVOsKyWUlvRwVhewytK5wS70BfMqIaUplFstRfzCoVp0YoEroV4cUEvQrBj93tQ3M9LcjO/ewr6D4kjA==", "dev": true, "license": "MIT", "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "debug": "^4.3.2", + "eslint-compat-utils": "^0.5.0", + "lodash": "^4.17.21", + "natural-compare": "^1.4.0", + "yaml-eslint-parser": "^1.2.1" }, "engines": { - "node": ">= 0.4" + "node": "^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/ota-meshi" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "deprecated": "Glob versions prior to v9 are no longer supported", + "node_modules/eslint-plugin-yml/node_modules/eslint-compat-utils": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "semver": "^7.5.4" }, "engines": { - "node": "*" + "node": ">=12" }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-processor-vue-blocks": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/eslint-processor-vue-blocks/-/eslint-processor-vue-blocks-0.1.2.tgz", + "integrity": "sha512-PfpJ4uKHnqeL/fXUnzYkOax3aIenlwewXRX8jFinA1a2yCFnLgMuiH3xvCgvHHUlV2xJWQHbCTdiJWGwb3NqpQ==", + "dev": true, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/compiler-sfc": "^3.3.0", + "eslint": "^8.50.0 || ^9.0.0" } }, - "node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/eslint-scope": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "is-glob": "^4.0.3" + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=10.13.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/glob/node_modules/brace-expansion": { + "node_modules/eslint/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", @@ -1594,7 +2846,7 @@ "concat-map": "0.0.1" } }, - "node_modules/glob/node_modules/minimatch": { + "node_modules/eslint/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", @@ -1607,301 +2859,368 @@ "node": "*" } }, - "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "type-fest": "^0.20.2" + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "get-intrinsic": "^1.1.3" + "estraverse": "^5.1.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=0.10" } }, - "node_modules/graphemer": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", - "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true, - "license": "MIT" - }, - "node_modules/hap-nodejs": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/hap-nodejs/-/hap-nodejs-1.1.0.tgz", - "integrity": "sha512-FVJotfbsUzBY7ydiz9cWDmlmyAHswh0AcLwGJ9T+SuRAVhZYsnoHRpom0si1mWzwXA2k0RqFOn52nssf0AlrGQ==", + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, - "license": "Apache-2.0", + "license": "BSD-2-Clause", "dependencies": { - "@homebridge/ciao": "^1.3.0", - "@homebridge/dbus-native": "^0.6.0", - "bonjour-hap": "^3.8.0", - "debug": "^4.3.5", - "fast-srp-hap": "^2.0.4", - "futoin-hkdf": "^1.5.3", - "node-persist": "^0.0.12", - "source-map-support": "^0.5.21", - "tslib": "^2.6.3", - "tweetnacl": "^1.0.3" + "estraverse": "^5.2.0" }, "engines": { - "node": "^18 || ^20" + "node": ">=4.0" } }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true, "license": "MIT", + "peer": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "node_modules/event-stream": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/event-stream/-/event-stream-4.0.1.tgz", + "integrity": "sha512-qACXdu/9VHPBzcyhdOWR5/IahhGMf0roTeZJfzz077GwylcDd90yOHLouhmv7GJ5XzPi6ekaQWd8AvPP2nOvpA==", "dev": true, "license": "MIT", "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "duplexer": "^0.1.1", + "from": "^0.1.7", + "map-stream": "0.0.7", + "pause-stream": "^0.0.11", + "split": "^1.0.1", + "stream-combiner": "^0.2.2", + "through": "^2.3.8" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.3.0.tgz", + "integrity": "sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8.6.0" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 6" } }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-srp-hap": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/fast-srp-hap/-/fast-srp-hap-2.0.4.tgz", + "integrity": "sha512-lHRYYaaIbMrhZtsdGTwPN82UbqD9Bv8QfOlKs+Dz6YRnByZifOh93EYmf2iEWFtkOEIqR2IK8cFD0UN5wLIWBQ==", "dev": true, "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=10.17.0" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" + "reusify": "^1.0.4" } }, - "node_modules/hexy": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/hexy/-/hexy-0.3.5.tgz", - "integrity": "sha512-UCP7TIZPXz5kxYJnNOym+9xaenxCLor/JyhKieo8y8/bJWunGh9xbhy3YrgYJUQ87WwfXGm05X330DszOfINZw==", + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "license": "MIT", - "bin": { - "hexy": "bin/hexy_cmd.js" + "dependencies": { + "flat-cache": "^4.0.0" }, "engines": { - "node": ">=10.4" + "node": ">=16.0.0" } }, - "node_modules/ignore": { - "version": "5.3.2", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", - "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, "engines": { - "node": ">= 4" + "node": ">=8" } }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "node_modules/find-up-simple": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/find-up-simple/-/find-up-simple-1.0.0.tgz", + "integrity": "sha512-q7Us7kcjj2VMePAa02hDAF6d+MzsdsAWEwYyOpwUtlerRBkOEPBCRZrAV4XfcSN8fHAgaD0hP7miwoay6DCprw==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inflection": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/inflection/-/inflection-3.0.0.tgz", - "integrity": "sha512-1zEJU1l19SgJlmwqsEyFTbScw/tkMHFenUo//Y0i+XEP83gDFdMvPizAD/WGcE+l1ku12PcTVHQhO6g5E0UCMw==", - "license": "MIT", - "engines": { - "node": ">=18.0.0" + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" } }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, - "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", - "dev": true, + "node_modules/follow-redirects": { + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, "engines": { - "node": ">= 0.4" + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", - "dev": true, + "node_modules/form-data": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.1.tgz", + "integrity": "sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.4" - }, + "node": ">= 6" + } + }, + "node_modules/from": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz", + "integrity": "sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==", + "dev": true, + "license": "MIT" + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true, "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" - }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "node_modules/futoin-hkdf": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/futoin-hkdf/-/futoin-hkdf-1.5.3.tgz", + "integrity": "sha512-SewY5KdMpaoCeh7jachEWFsh1nNlaDjNHZXWqL5IGwtpEYHTgkr2+AMCgNwKWkcc0wpSYrZfR7he4WdmHFtDxQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, "engines": { "node": ">= 0.4" @@ -1910,117 +3229,173 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "resolve-pkg-maps": "^1.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "node_modules/glob": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", + "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-tostringtag": "^1.0.0" + "foreground-child": "^3.1.0", + "jackspeak": "^4.0.1", + "minimatch": "^10.0.0", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">= 0.4" + "node": "20 || >=22" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10.13.0" } }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "node_modules/glob/node_modules/minimatch": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", + "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-extglob": "^2.1.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-map": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", - "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "node_modules/globals": { + "version": "15.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.12.0.tgz", + "integrity": "sha512-1+gLErljJFhbOVyaetcwJiJ4+eLe45S2E7P5UiZ9xGfeq3ATQf5DOv9G7MH3gGbKQLkzmNh2DxfZwLdw+j6oTQ==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "node": ">=18" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.12.0" + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/hap-nodejs": { + "version": "1.1.1-beta.8", + "resolved": "https://registry.npmjs.org/hap-nodejs/-/hap-nodejs-1.1.1-beta.8.tgz", + "integrity": "sha512-QQWDPgw1FWzL9Cqd5kJAIUQqBrWyGlUSxJkncDdmK+HGR4Mqld69jMJAs4njSl3dDBIM/LeHo9o4bm4iqxhBmA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "has-tostringtag": "^1.0.0" + "@homebridge/ciao": "^1.3.1", + "@homebridge/dbus-native": "^0.6.0", + "bonjour-hap": "^3.8.0", + "debug": "^4.3.7", + "fast-srp-hap": "^2.0.4", + "futoin-hkdf": "^1.5.3", + "node-persist": "^0.0.12", + "source-map-support": "^0.5.21", + "tslib": "^2.8.0", + "tweetnacl": "^1.0.3" }, "engines": { - "node": ">= 0.4" - }, + "node": "^18 || ^20 || ^22" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "es-define-property": "^1.0.0" }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -2028,10 +3403,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-set": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", - "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true, "license": "MIT", "engines": { @@ -2041,14 +3416,14 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -2057,60 +3432,119 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "function-bind": "^1.1.2" }, "engines": { "node": ">= 0.4" + } + }, + "node_modules/hexy": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/hexy/-/hexy-0.3.5.tgz", + "integrity": "sha512-UCP7TIZPXz5kxYJnNOym+9xaenxCLor/JyhKieo8y8/bJWunGh9xbhy3YrgYJUQ87WwfXGm05X330DszOfINZw==", + "dev": true, + "license": "MIT", + "bin": { + "hexy": "bin/hexy_cmd.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10.4" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true, + "license": "ISC" + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", - "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 0.4" + "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, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/inflection/-/inflection-3.0.0.tgz", + "integrity": "sha512-1zEJU1l19SgJlmwqsEyFTbScw/tkMHFenUo//Y0i+XEP83gDFdMvPizAD/WGcE+l1ku12PcTVHQhO6g5E0UCMw==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">= 0.4" } }, - "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -2119,125 +3553,1401 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true, + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "license": "MIT", + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.2.tgz", + "integrity": "sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "license": "MIT", + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jsonc-eslint-parser": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz", + "integrity": "sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.5.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/jsonc-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "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, + "license": "MIT" + }, + "node_modules/local-pkg": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.1.tgz", + "integrity": "sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.3", + "pkg-types": "^1.2.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true, + "license": "MIT" + }, + "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, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/lru-cache": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.2.tgz", + "integrity": "sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/magic-string": { + "version": "0.30.13", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.13.tgz", + "integrity": "sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true, + "license": "ISC" + }, + "node_modules/map-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", + "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", + "dev": true, "license": "MIT" }, - "node_modules/isexe": { + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "dev": true, + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } }, - "node_modules/js-yaml": { + "node_modules/mdast-util-phrasing": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "dev": true, + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } }, - "node_modules/keyv": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", - "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "micromark-util-types": "^2.0.0" } }, - "node_modules/levn": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", - "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" } }, - "node_modules/locate-path": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", - "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "node_modules/micromark-util-subtokenize": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", + "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" } }, - "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==", + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "license": "ISC" - }, - "node_modules/map-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz", - "integrity": "sha512-C0X0KQmGm3N2ftbTGBhSyuydQ+vV1LC3f3zPvT3RXHXNZrvfPZcoXp/N5DOa8vedX/rTMm2CjTtivFg2STJMRQ==", + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", "dev": true, + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], "license": "MIT" }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/micromatch": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", @@ -2252,6 +4962,19 @@ "node": ">=8.6" } }, + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/mime-db": { "version": "1.52.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", @@ -2273,6 +4996,16 @@ "node": ">= 0.6" } }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -2299,6 +5032,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -2312,10 +5055,23 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/mlly": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.3.tgz", + "integrity": "sha512-xUsx5n/mN0uQf4V548PKQ+YShA4/IW0KI1dZhrNrPCLG+xizETbHTkOa1f8/xut9JRPp8kQuMnz0oqwkTiLo/A==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^1.1.2", + "pkg-types": "^1.2.1", + "ufo": "^1.5.4" + } + }, "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", "dev": true, "license": "MIT" }, @@ -2339,6 +5095,26 @@ "dev": true, "license": "MIT" }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -2346,6 +5122,13 @@ "dev": true, "license": "MIT" }, + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", + "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", + "dev": true, + "license": "MIT" + }, "node_modules/node-persist": { "version": "0.0.12", "resolved": "https://registry.npmjs.org/node-persist/-/node-persist-0.0.12.tgz", @@ -2357,10 +5140,53 @@ "q": "~1.1.1" } }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true, + "license": "MIT" + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-package-data/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, "node_modules/object-inspect": { - "version": "1.13.2", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", - "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", "dev": true, "license": "MIT", "engines": { @@ -2416,16 +5242,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -2476,6 +5292,30 @@ "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", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, + "node_modules/package-manager-detector": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.4.tgz", + "integrity": "sha512-H/OUu9/zUfP89z1APcBf2X8Us0tt8dUK4lUmKqz12QNXif3DxAs1/YqjGtcutZi1zQqeNQRWr9C+EbQnnvSSFA==", + "dev": true, + "license": "MIT" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -2489,24 +5329,57 @@ "node": ">=6" } }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/parse-gitignore": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/parse-gitignore/-/parse-gitignore-2.0.0.tgz", + "integrity": "sha512-RmVuCHWsfu0QPNW+mraxh/xjQVw/lhUCUru8Zni3Ctq3AoMhpDTq0OVdKS6iesd6Kqb7viCV3isAL43dciOSog==", "dev": true, "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/parse-imports": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/parse-imports/-/parse-imports-2.2.1.tgz", + "integrity": "sha512-OL/zLggRp8mFhKL0rNORUTR4yBYujK/uU+xZL+/0Rgm2QE4nLO9v8PzEweSJEbMGKmDRjJE4R3IMJlL2di4JeQ==", + "dev": true, + "license": "Apache-2.0 AND MIT", + "dependencies": { + "es-module-lexer": "^1.5.3", + "slashes": "^3.0.12" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/path-key": { @@ -2514,11 +5387,42 @@ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", "dev": true, - "license": "MIT", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", + "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, "engines": { - "node": ">=8" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/pathe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "dev": true, + "license": "MIT" + }, "node_modules/pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -2532,19 +5436,48 @@ "through": "~2.3" } }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" + }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pkg-types": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.2.1.tgz", + "integrity": "sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.2", + "pathe": "^1.1.2" + } + }, + "node_modules/pluralize": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", + "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/possible-typed-array-names": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", @@ -2555,6 +5488,50 @@ "node": ">= 0.4" } }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2565,6 +5542,35 @@ "node": ">= 0.8.0" } }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-linter-helpers": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", + "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-diff": "^1.1.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/proxy-from-env": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", @@ -2614,17 +5620,154 @@ ], "license": "MIT" }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/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, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/refa": { + "version": "0.12.1", + "resolved": "https://registry.npmjs.org/refa/-/refa-0.12.1.tgz", + "integrity": "sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/regexp-ast-analysis": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/regexp-ast-analysis/-/regexp-ast-analysis-0.7.1.tgz", + "integrity": "sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.1" + }, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/regexp-tree": { + "version": "0.1.27", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", + "integrity": "sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==", + "dev": true, + "license": "MIT", + "bin": { + "regexp-tree": "bin/regexp-tree" + } + }, "node_modules/regexp.prototype.flags": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz", - "integrity": "sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==", + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "define-properties": "^1.2.1", "es-errors": "^1.3.0", - "set-function-name": "^2.0.1" + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -2633,6 +5776,56 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/regjsparser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.10.0.tgz", + "integrity": "sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", @@ -2643,6 +5836,16 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -2655,17 +5858,20 @@ } }, "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "deprecated": "Rimraf versions prior to v4 are no longer supported", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", + "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", "dev": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "glob": "^11.0.0", + "package-json-from-dist": "^1.0.0" }, "bin": { - "rimraf": "bin.js" + "rimraf": "dist/esm/bin.mjs" + }, + "engines": { + "node": "20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -2723,6 +5929,21 @@ "dev": true, "license": "ISC" }, + "node_modules/scslre": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/scslre/-/scslre-0.3.0.tgz", + "integrity": "sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.8.0", + "refa": "^0.12.0", + "regexp-ast-analysis": "^0.7.0" + }, + "engines": { + "node": "^14.0.0 || >=16.0.0" + } + }, "node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", @@ -2812,6 +6033,33 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slashes": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/slashes/-/slashes-3.0.12.tgz", + "integrity": "sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==", + "dev": true, + "license": "ISC" + }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -2821,16 +6069,74 @@ "node": ">=0.10.0" } }, - "node_modules/source-map-support": { - "version": "0.5.21", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", - "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", + "dev": true, "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-license-ids": { + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.20.tgz", + "integrity": "sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==", + "dev": true, + "license": "CC0-1.0" + }, "node_modules/split": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", @@ -2844,6 +6150,13 @@ "node": "*" } }, + "node_modules/stable-hash": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", + "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "dev": true, + "license": "MIT" + }, "node_modules/stop-iteration-iterator": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", @@ -2868,7 +6181,88 @@ "through": "~2.3.4" } }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", @@ -2881,6 +6275,29 @@ "node": ">=8" } }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -2907,12 +6324,45 @@ "node": ">=8" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/synckit": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.2.tgz", + "integrity": "sha512-vrozgXDQwYO72vHjUb/HnFbQx1exDjoKzqx23aXEg2a9VIg2TSFZ8FmeZpTjUCFMYw7mpX4BE2SFu8wI7asYsw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } }, "node_modules/through": { "version": "2.3.8", @@ -2927,6 +6377,13 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "license": "MIT" }, + "node_modules/tinyexec": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.1.tgz", + "integrity": "sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==", + "dev": true, + "license": "MIT" + }, "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", @@ -2940,10 +6397,39 @@ "node": ">=8.0" } }, + "node_modules/toml-eslint-parser": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/toml-eslint-parser/-/toml-eslint-parser-0.10.0.tgz", + "integrity": "sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/toml-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, "license": "MIT", "engines": { @@ -2997,84 +6483,280 @@ } } }, - "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true, + "license": "0BSD" + }, + "node_modules/tweetnacl": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", + "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "dev": true, + "license": "Unlicense" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true, - "license": "0BSD" + "license": "MIT" }, - "node_modules/tweetnacl": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz", - "integrity": "sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==", + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true, - "license": "Unlicense" + "license": "MIT" }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "license": "MIT", "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/vue-eslint-parser": { + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "debug": "^4.3.4", + "eslint-scope": "^7.1.1", + "eslint-visitor-keys": "^3.3.0", + "espree": "^9.3.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.6" + }, "engines": { - "node": ">=10" + "node": "^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" } }, - "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=14.17" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", "dev": true, - "license": "MIT" + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "punycode": "^2.1.0" + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true, - "license": "MIT" - }, "node_modules/which": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", @@ -3157,12 +6839,110 @@ "node": ">=0.10.0" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/xml-name-validator": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", + "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12" + } }, "node_modules/xml2js": { "version": "0.6.2", @@ -3188,6 +6968,134 @@ "node": ">=4.0" } }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yaml-eslint-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", + "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.0.0", + "lodash": "^4.17.21", + "yaml": "^2.0.0" + }, + "engines": { + "node": "^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ota-meshi" + } + }, + "node_modules/yaml-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true, + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", @@ -3210,6 +7118,17 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "dev": true, + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } } } } diff --git a/package.json b/package.json index 952cd71..3a3819b 100644 --- a/package.json +++ b/package.json @@ -1,27 +1,8 @@ { "name": "@homebridge/hap-client", + "type": "module", "version": "2.0.4", "description": "A client for HAP-NodeJS.", - "main": "./dist/index.js", - "scripts": { - "check": "npm install && npm outdated", - "lint": "eslint src/**.ts", - "build": "tsc", - "gen": "ts-node -P tsconfig.gen.json scripts/gen-hap-types.ts", - "prepublishOnly": "npm run lint && npm run build", - "clean": "rimraf ./dist", - "test": "eslint src/**.ts" - }, - "types": "./dist/index.d.ts", - "repository": { - "type": "git", - "url": "git+https://github.com/homebridge/hap-client.git" - }, - "keywords": [ - "hap", - "homebridge", - "api" - ], "author": { "name": "oznu", "email": "dev@oz.nu" @@ -33,26 +14,50 @@ } ], "license": "MIT", + "homepage": "https://github.com/homebridge/hap-client/blob/latest#readme", + "repository": { + "type": "git", + "url": "git+https://github.com/homebridge/hap-client.git" + }, "bugs": { "url": "https://github.com/homebridge/hap-client/issues/" }, - "homepage": "https://github.com/homebridge/hap-client/blob/latest#readme", + "keywords": [ + "hap", + "homebridge", + "api" + ], + "exports": "./dist/index.js", + "types": "dist/index.d.ts", + "engines": { + "node": "^18 || ^20 || ^22" + }, + "scripts": { + "build": "tsc", + "check": "npm install && npm outdated", + "clean": "rimraf dist && rimraf coverage", + "gen": "node --no-warnings=ExperimentalWarning --loader ts-node/esm scripts/gen-hap-types.ts", + "lint": "eslint .", + "lint:fix": "npm run lint -- --fix", + "prepublishOnly": "npm run lint && npm run build", + "test": "echo \"Error: no test specified\" && exit 0" + }, "dependencies": { - "axios": "1.7.6", - "bonjour-service": "1.2.1", - "decamelize": "5.0.1", + "axios": "1.7.7", + "bonjour-service": "^1.3.0", + "decamelize": "^6.0.0", "inflection": "3.0.0", "source-map-support": "0.5.21" }, "devDependencies": { - "@types/node": "^22.5.1", + "@antfu/eslint-config": "^3.9.2", + "@types/node": "^22.9.1", "@types/source-map-support": "^0.5.10", - "@typescript-eslint/eslint-plugin": "^8.3.0", - "@typescript-eslint/parser": "^8.3.0", - "eslint": "^8.57.0", - "eslint-plugin-jest": "^28.8.1", - "hap-nodejs": "^1.1.0", + "eslint": "^9.15.0", + "eslint-plugin-format": "^0.1.2", + "hap-nodejs": "^1.1.1-alpha.21", + "rimraf": "^6.0.1", "ts-node": "^10.9.2", - "typescript": "^5.5.4" + "typescript": "^5.6.3" } -} \ No newline at end of file +} diff --git a/scripts/gen-hap-types.ts b/scripts/gen-hap-types.ts index 82d105d..34259c7 100644 --- a/scripts/gen-hap-types.ts +++ b/scripts/gen-hap-types.ts @@ -1,62 +1,66 @@ -import { writeFileSync } from 'node:fs'; -import { resolve } from 'node:path'; +import { writeFileSync } from 'node:fs' +import { dirname, resolve } from 'node:path' +import { fileURLToPath } from 'node:url' -import { Characteristic, Service, Categories } from 'hap-nodejs'; +import * as hapNodeJs from 'hap-nodejs' + +const { Characteristic, Service, Categories } = hapNodeJs +const __dirname = dirname(fileURLToPath(import.meta.url)) /** Generate Service Types */ let Services = [ 'export const Services = {', -] as any; +] as any -const uuidMap = new Map(); +const uuidMap = new Map() for (const [name, value] of Object.entries(Service)) { if (value.UUID) { if (!uuidMap.has(value.UUID)) { // If the UUID does not exist, add a new entry - Services.push(` '${value.UUID}': '${name}',`); - uuidMap.set(value.UUID, Services.length - 1); + Services.push(` '${value.UUID}': '${name}',`) + uuidMap.set(value.UUID, Services.length - 1) } - Services.push(` '${name}': '${value.UUID}',`); + Services.push(` '${name}': '${value.UUID}',`) } } -Services.push(`};\n\n`); -Services = Services.join('\n'); +Services.push(`}\n\n`) +Services = Services.join('\n') /** Generate Characteristic Types */ let Characteristics = [ 'export const Characteristics = {', -] as any; +] as any for (const [name, value] of Object.entries(Characteristic)) { if (value.UUID) { - Characteristics.push(` '${value.UUID}': '${name}',`); - Characteristics.push(` '${name}': '${value.UUID}',`); + Characteristics.push(` '${value.UUID}': '${name}',`) + Characteristics.push(` '${name}': '${value.UUID}',`) } } -Characteristics.push(`};\n\n`); -Characteristics = Characteristics.join('\n'); +Characteristics.push(`}\n\n`) +Characteristics = Characteristics.join('\n') /** Generate Category Types */ let Category = [ 'export const Categories = {', -] as any; +] as any -// @ts-ignore +// @ts-expect-error - const enums can only be used in property or index access expressions or the right hand side of an import declaration or export assignment or type query for (const [name, value] of Object.entries(Categories)) { if (typeof value === 'number') { - Category.push(` '${name}': ${value},`); + Category.push(` ${name}: ${value},`) } } -Category.push(`};\n`); -Category = Category.join('\n'); +Category.push(`}\n`) +Category = Category.join('\n') -const out = `/* This file is automatically generated */\n\n` + Services + Characteristics + Category; +const out = `/* This file is automatically generated */\n\n${Services}${Characteristics}${Category}` -writeFileSync(resolve(__dirname, '../src/hap-types.ts'), out, 'utf8'); +writeFileSync(resolve(__dirname, '../src/hap-types.ts'), out, 'utf8') diff --git a/scripts/test.ts b/scripts/test.ts deleted file mode 100644 index 6c50b67..0000000 --- a/scripts/test.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { HapClient } from '../src' - -const client = new HapClient({ - pin: '000-00-000', - logger: console, - config: { - debug: true - } -}); diff --git a/src/eventedHttpClient/httpParser.ts b/src/eventedHttpClient/httpParser.ts index ac50664..f326323 100644 --- a/src/eventedHttpClient/httpParser.ts +++ b/src/eventedHttpClient/httpParser.ts @@ -5,8 +5,12 @@ // Borrowed and heavily modified from https://github.com/miguelmota/http-message-parser -function httpMessageParser(message) { - const result = { +/* eslint-disable node/prefer-global/buffer */ + +import type { HttpMessageParserResult } from '../interfaces' + +function httpMessageParser(message: string | Buffer) { + const result: HttpMessageParserResult = { protocol: null, httpVersion: null, statusCode: null, @@ -18,55 +22,55 @@ function httpMessageParser(message) { boundary: null, multipart: null, additional: null, - }; + } - let messageString = ''; - let headerNewlineIndex = 0; - let fullBoundary = null; + let messageString = '' + let headerNewlineIndex = 0 + let fullBoundary: string | null = null if (httpMessageParser._isBuffer(message)) { - messageString = message.toString(); + messageString = message.toString() } else if (typeof message === 'string') { - messageString = message; - message = httpMessageParser._createBuffer(messageString); + messageString = message + message = httpMessageParser._createBuffer(messageString) } else { - return result; + return result } /* * Strip extra return characters */ - messageString = messageString.replace(/\r\n/gim, '\n'); + messageString = messageString.replace(/\r\n/g, '\n'); /* * Trim leading whitespace */ (function () { - const firstNonWhitespaceRegex = /[\w-]+/gim; - const firstNonWhitespaceIndex = messageString.search(firstNonWhitespaceRegex); + const firstNonWhitespaceRegex = /[\w-]+/g + const firstNonWhitespaceIndex = messageString.search(firstNonWhitespaceRegex) if (firstNonWhitespaceIndex > 0) { - message = message.slice(firstNonWhitespaceIndex, message.length); - messageString = message.toString(); + message = message.slice(firstNonWhitespaceIndex, message.length) + messageString = message.toString() } })(); /* Parse request line */ (function () { - const possibleRequestLine = messageString.split(/\n|\r\n/)[0]; - const requestLineMatch = possibleRequestLine.match(httpMessageParser._requestLineRegex); + const possibleRequestLine = messageString.split(/\n|\r\n/)[0] + const requestLineMatch = possibleRequestLine.match(httpMessageParser._requestLineRegex) if (Array.isArray(requestLineMatch) && requestLineMatch.length > 1) { - result.protocol = requestLineMatch[1]; - result.httpVersion = parseFloat(requestLineMatch[2]); - result.statusCode = parseInt(requestLineMatch[3], 10); - result.statusMessage = requestLineMatch[4]; + result.protocol = requestLineMatch[1] + result.httpVersion = Number.parseFloat(requestLineMatch[2]) + result.statusCode = Number.parseInt(requestLineMatch[3], 10) + result.statusMessage = requestLineMatch[4] } else { - const responseLineMath = possibleRequestLine.match(httpMessageParser._responseLineRegex); + const responseLineMath = possibleRequestLine.match(httpMessageParser._responseLineRegex) if (Array.isArray(responseLineMath) && responseLineMath.length > 1) { - result.method = responseLineMath[1]; - result.url = responseLineMath[2]; - result.httpVersion = parseFloat(responseLineMath[3]); + result.method = responseLineMath[1] + result.url = responseLineMath[2] + result.httpVersion = Number.parseFloat(responseLineMath[3]) } } })(); @@ -74,25 +78,25 @@ function httpMessageParser(message) { /* Parse headers */ (function () { - headerNewlineIndex = messageString.search(httpMessageParser._headerNewlineRegex); + headerNewlineIndex = messageString.search(httpMessageParser._headerNewlineRegex) if (headerNewlineIndex > -1) { - headerNewlineIndex = headerNewlineIndex + 1; // 1 for newline length + headerNewlineIndex = headerNewlineIndex + 1 // 1 for newline length } else { /* There's no line breaks so check if request line exists - * because the message might be all headers and no body + * because the message might be all headers and without a body */ if (result.httpVersion) { - headerNewlineIndex = messageString.length; + headerNewlineIndex = messageString.length } } - const headersString = messageString.substr(0, headerNewlineIndex); - const headers = httpMessageParser._parseHeaders(headersString); + const headersString = messageString.substr(0, headerNewlineIndex) + const headers = httpMessageParser._parseHeaders(headersString) if (Object.keys(headers).length > 0) { - result.headers = headers; + result.headers = headers - // TOOD: extract boundary. + // TODO: extract boundary. } })(); @@ -100,12 +104,11 @@ function httpMessageParser(message) { */ (function () { if (!result.boundary) { - const boundaryMatch = messageString.match(httpMessageParser._boundaryRegex); + const boundaryMatch = messageString.match(httpMessageParser._boundaryRegex) if (Array.isArray(boundaryMatch) && boundaryMatch.length) { - fullBoundary = boundaryMatch[0].replace(/[\r\n]+/gi, ''); - const boundary = fullBoundary.replace(/^--/, ''); - result.boundary = boundary; + fullBoundary = boundaryMatch[0].replace(/[\r\n]+/g, '') + result.boundary = fullBoundary.replace(/^--/, '') } } })(); @@ -113,35 +116,37 @@ function httpMessageParser(message) { /* Parse body */ (function () { - let start = headerNewlineIndex; - let end = (result.headers && result.headers['Content-Length'] ? result.headers['Content-Length'] + start : messageString.length); - const firstBoundaryIndex = messageString.indexOf(fullBoundary); + let start = headerNewlineIndex + let end = result.headers && Object.prototype.hasOwnProperty.call(result.headers, 'Content-Length') + ? (result.headers['Content-Length'] as number) + start + : messageString.length + const firstBoundaryIndex = fullBoundary === null ? -1 : messageString.indexOf(fullBoundary) if (firstBoundaryIndex > -1 && result.boundary) { - start = headerNewlineIndex; - end = firstBoundaryIndex; + start = headerNewlineIndex + end = firstBoundaryIndex } if (headerNewlineIndex > -1) { - const body = messageString.slice(start, end); - result.additional = messageString.slice(end); // Pass back any unparsed data for running thru again + const body = messageString.slice(start, end) + result.additional = messageString.slice(end) // Pass back any unparsed data for running thru again // console.log("Lengths: total %s -> start %s -> end %s -> final %s", messageString.length, start, end, body.length); if (body && body.length) { - if ((result.headers && result.headers['Content-Type'] === 'application/hap+json') || - (result.headers && result.headers['Content-Type'] === 'application/json')) { + if ((result.headers && result.headers['Content-Type'] === 'application/hap+json') + || (result.headers && result.headers['Content-Type'] === 'application/json')) { // JSON.parse JSON message's try { if (result.headers['Content-Length']) { - result.body = body; + result.body = body } else { - result.body = body.split('\n')[1]; + result.body = body.split('\n')[1] } } catch (err) { } } else { - result.body = body; + result.body = body } } } @@ -150,18 +155,17 @@ function httpMessageParser(message) { /* Parse multipart sections */ (function () { - if (result.boundary) { - const multipartStart = messageString.indexOf(fullBoundary) + fullBoundary.length; - const multipartEnd = messageString.lastIndexOf(fullBoundary); - const multipartBody = messageString.substr(multipartStart, multipartEnd); - const splitRegex = new RegExp('^' + fullBoundary + '.*[\n\r]?$', 'gm'); - const parts = multipartBody.split(splitRegex); - - result.multipart = parts.filter(httpMessageParser._isTruthy).map(function (part, i) { - // tslint:disable-next-line: no-shadowed-variable + if (result.boundary && fullBoundary) { + const multipartStart = messageString.indexOf(fullBoundary) + fullBoundary.length + const multipartEnd = messageString.lastIndexOf(fullBoundary) + const multipartBody = messageString.substring(multipartStart, multipartEnd) + const splitRegex = new RegExp(`^${fullBoundary}.*[\n\r]?$`, 'gm') + const parts = multipartBody.split(splitRegex) + + result.multipart = parts.filter(httpMessageParser._isTruthy).map((part, i) => { const result = { - headers: null, - body: null, + headers: null as { [key: string]: string | number } | null, + body: '' as string | Buffer | null, meta: { body: { byteOffset: { @@ -170,136 +174,134 @@ function httpMessageParser(message) { }, }, }, - }; + } - const newlineRegex = /\n\n|\r\n\r\n/gim; - let newlineIndex = 0; - let newlineMatch = newlineRegex.exec(part); - let body = null; + const newlineRegex = /\n\n|\r\n\r\n/g + let newlineIndex = 0 + let newlineMatch = newlineRegex.exec(part) + let body = null if (newlineMatch) { - newlineIndex = newlineMatch.index; + newlineIndex = newlineMatch.index if (newlineMatch.index <= 0) { - newlineMatch = newlineRegex.exec(part); + newlineMatch = newlineRegex.exec(part) if (newlineMatch) { - newlineIndex = newlineMatch.index; + newlineIndex = newlineMatch.index } } } - const possibleHeadersString = part.substr(0, newlineIndex); + const possibleHeadersString = part.substring(0, newlineIndex) - let startOffset = null; - let endOffset = null; + let startOffset = null + let endOffset = null if (newlineIndex > -1) { - const headers = httpMessageParser._parseHeaders(possibleHeadersString); + const headers = httpMessageParser._parseHeaders(possibleHeadersString) if (Object.keys(headers).length > 0) { - result.headers = headers; + result.headers = headers - const boundaryIndexes = []; + const boundaryIndexes: any[] = [] for (let j = 0; j >= 0;) { - j = message.indexOf(fullBoundary, j); + j = message.indexOf(fullBoundary as string, j) if (j >= 0) { - boundaryIndexes.push(j); - j += fullBoundary.length; + boundaryIndexes.push(j) + j += (fullBoundary as string).length } } - const boundaryNewlineIndexes = []; - boundaryIndexes.slice(0, boundaryIndexes.length - 1).forEach(function (m, k) { - const partBody = message.slice(boundaryIndexes[k], boundaryIndexes[k + 1]).toString(); - // tslint:disable-next-line: no-shadowed-variable - let headerNewlineIndex = partBody.search(/\n\n|\r\n\r\n/gim) + 2; - headerNewlineIndex = boundaryIndexes[k] + headerNewlineIndex; - boundaryNewlineIndexes.push(headerNewlineIndex); - }); - - startOffset = boundaryNewlineIndexes[i]; - endOffset = boundaryIndexes[i + 1]; - body = message.slice(startOffset, endOffset); + const boundaryNewlineIndexes: any[] = [] + boundaryIndexes.slice(0, boundaryIndexes.length - 1).forEach((m, k) => { + const partBody = message.slice(boundaryIndexes[k], boundaryIndexes[k + 1]).toString() + let headerNewlineIndex = partBody.search(/\n\n|\r\n\r\n/g) + 2 + headerNewlineIndex = boundaryIndexes[k] + headerNewlineIndex + boundaryNewlineIndexes.push(headerNewlineIndex) + }) + + startOffset = boundaryNewlineIndexes[i] + endOffset = boundaryIndexes[i + 1] + body = message.slice(startOffset, endOffset) } else { - body = part; + body = part } } else { - body = part; + body = part } - result.body = body; - result.meta.body.byteOffset.start = startOffset; - result.meta.body.byteOffset.end = endOffset; + result.body = body + result.meta.body.byteOffset.start = startOffset + result.meta.body.byteOffset.end = endOffset - return result; - }); + return result + }) } - })(); + })() - return result; + return result } -httpMessageParser._isTruthy = function _isTruthy(v) { - return !!v; -}; +httpMessageParser._isTruthy = function _isTruthy(v: any) { + return !!v +} -httpMessageParser._isNumeric = function _isNumeric(v) { - if (typeof v === 'number' && !isNaN(v)) { - return true; +httpMessageParser._isNumeric = function _isNumeric(v: any) { + if (typeof v === 'number' && !Number.isNaN(v)) { + return true } - v = (v || '').toString().trim(); + v = (v || '').toString().trim() if (!v) { - return false; + return false } - return !isNaN(v); -}; + return !Number.isNaN(v) +} -httpMessageParser._isBuffer = function (item) { - return ((httpMessageParser._isNodeBufferSupported() && - typeof global === 'object' && - global.Buffer.isBuffer(item)) || - (item instanceof Object && - item._isBuffer)); -}; +httpMessageParser._isBuffer = function (item: any) { + return ((httpMessageParser._isNodeBufferSupported() + && typeof globalThis === 'object' + && globalThis.Buffer.isBuffer(item)) + || (item instanceof Object + && item._isBuffer)) +} httpMessageParser._isNodeBufferSupported = function () { - return (typeof global === 'object' && - typeof global.Buffer === 'function' && - typeof global.Buffer.isBuffer === 'function'); -}; + return (typeof globalThis === 'object' + && typeof globalThis.Buffer === 'function' + && typeof globalThis.Buffer.isBuffer === 'function') +} -httpMessageParser._parseHeaders = function _parseHeaders(body) { - const headers = {}; +httpMessageParser._parseHeaders = function _parseHeaders(body: string | Buffer) { + const headers = {} if (typeof body !== 'string') { - return headers; + return headers } - body.split(/[\r\n]/).forEach(function (string) { - const match = string.match(/([\w-]+):\s*(.*)/i); + body.split(/[\r\n]/).forEach((string) => { + const match = string.match(/([\w-]+):\s*(.*)/) if (Array.isArray(match) && match.length === 3) { - const key = match[1]; - const value = match[2]; + const key = match[1] + const value = match[2] - headers[key] = httpMessageParser._isNumeric(value) ? Number(value) : value; + // @ts-expect-error - No index signature with a parameter of type string was found on type + headers[key] = httpMessageParser._isNumeric(value) ? Number(value) : value } - }); + }) - return headers; -}; + return headers +} -httpMessageParser._requestLineRegex = /(HTTP|EVENT)\/(1\.0|1\.1|2\.0)\s+(\d+)\s+([\w\s-_]+)/i; -httpMessageParser._responseLineRegex = /(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|TRACE|CONNECT)\s+(.*)\s+HTTP\/(1\.0|1\.1|2\.0)/i; -// httpMessageParser._headerNewlineRegex = /^[\r\n]+/gim; -httpMessageParser._headerNewlineRegex = /^[\r\n]+/gim; -httpMessageParser._boundaryRegex = /(\n|\r\n)+--[\w-]+(\n|\r\n)+/g; +httpMessageParser._requestLineRegex = /(HTTP|EVENT)\/(1\.0|1\.1|2\.0)\s+(\d+)\s+([\w\s-]+)/i +httpMessageParser._responseLineRegex = /(GET|POST|PUT|DELETE|PATCH|OPTIONS|HEAD|TRACE|CONNECT)\s+(\S+)\s+HTTP\/(1\.[01]|2\.0)/i +httpMessageParser._headerNewlineRegex = /^[\r\n]+/gm +httpMessageParser._boundaryRegex = /(\n|\r\n)+--[\w-]+(\n|\r\n)+/g -httpMessageParser._createBuffer = function (data) { - // tslint:disable-next-line: deprecation - return new Buffer(data); -}; +httpMessageParser._createBuffer = function (data: string) { + return Buffer.from(data) +} -export default httpMessageParser; +export default httpMessageParser diff --git a/src/eventedHttpClient/index.ts b/src/eventedHttpClient/index.ts index 22f9569..63ace3d 100644 --- a/src/eventedHttpClient/index.ts +++ b/src/eventedHttpClient/index.ts @@ -3,22 +3,23 @@ * https://github.com/NorthernMan54/Hap-Node-Client/blob/master/lib/eventedHttpClient.js */ -import { createConnection as netCreateConnection } from 'node:net'; -import { parse } from 'node:url'; +import type { HapEvInstance } from '../interfaces.js' -import httpMessageParser from './httpParser'; +import { createConnection as netCreateConnection } from 'node:net' -export const parseMessage = httpMessageParser; +import httpMessageParser from './httpParser.js' -export function createConnection(instance, pin: string, body) { +export const parseMessage = httpMessageParser + +export function createConnection(instance: HapEvInstance, pin: string, body: { characteristics: { aid: number, iid: number, ev: boolean }[] | undefined }) { const client = netCreateConnection({ host: instance.ipAddress, port: instance.port, - }); + }) client.write(_buildMessage({ method: 'PUT', - url: 'http://' + instance.ipAddress + ':' + instance.port + '/characteristics', + url: `http://${instance.ipAddress}:${instance.port}/characteristics`, maxAttempts: 1, // (default) try 5 times headers: { 'Content-Type': 'Application/json', @@ -26,34 +27,34 @@ export function createConnection(instance, pin: string, body) { 'connection': 'keep-alive', }, body: JSON.stringify(body), - })); + })) - return client; + return client } -function _headersToString(headers) { - let response = ''; +function _headersToString(headers: { [x: string]: any }) { + let response = '' for (const header of Object.keys(headers)) { - response = response + header + ': ' + headers[header] + '\r\n'; + response = `${response + header}: ${headers[header]}\r\n` } - return (response); + return (response) } -function _buildMessage(request) { - const context = parse(request.url); - let message; +function _buildMessage(request: { method: any, url: any, maxAttempts?: number, headers: any, body: any }) { + const context = new URL(request.url) + let message - message = request.method + ' ' + context.pathname; + message = `${request.method} ${context.pathname}` if (context.search) { - message = message + context.search; + message = message + context.search } - message = message + ' HTTP/1.1\r\nHost: ' + context.host + '\r\n' + _headersToString(request.headers); + message = `${message} HTTP/1.1\r\nHost: ${context.host}\r\n${_headersToString(request.headers)}` if (request.body) { - message = message + 'Content-Length: ' + request.body.length + '\r\n\r\n' + request.body + '\r\n\r\n'; + message = `${message}Content-Length: ${request.body.length}\r\n\r\n${request.body}\r\n\r\n` } else { - message = message + '\r\n\r\n'; + message = `${message}\r\n\r\n` } // debug("Message ->", message); - return (message); + return (message) } diff --git a/src/hap-types.ts b/src/hap-types.ts index 7d22c94..6c02388 100644 --- a/src/hap-types.ts +++ b/src/hap-types.ts @@ -1,681 +1,667 @@ /* This file is automatically generated */ export const Services = { - '00000260-0000-1000-8000-0026BB765291': 'AccessCode', - 'AccessCode': '00000260-0000-1000-8000-0026BB765291', - '000000DA-0000-1000-8000-0026BB765291': 'AccessControl', - 'AccessControl': '000000DA-0000-1000-8000-0026BB765291', - '0000003E-0000-1000-8000-0026BB765291': 'AccessoryInformation', - 'AccessoryInformation': '0000003E-0000-1000-8000-0026BB765291', - '00000270-0000-1000-8000-0026BB765291': 'AccessoryMetrics', - 'AccessoryMetrics': '00000270-0000-1000-8000-0026BB765291', - '00000239-0000-1000-8000-0026BB765291': 'AccessoryRuntimeInformation', - 'AccessoryRuntimeInformation': '00000239-0000-1000-8000-0026BB765291', - '000000BB-0000-1000-8000-0026BB765291': 'AirPurifier', - 'AirPurifier': '000000BB-0000-1000-8000-0026BB765291', - '0000008D-0000-1000-8000-0026BB765291': 'AirQualitySensor', - 'AirQualitySensor': '0000008D-0000-1000-8000-0026BB765291', - '00000267-0000-1000-8000-0026BB765291': 'AssetUpdate', - 'AssetUpdate': '00000267-0000-1000-8000-0026BB765291', - '0000026A-0000-1000-8000-0026BB765291': 'Assistant', - 'Assistant': '0000026A-0000-1000-8000-0026BB765291', - '00000127-0000-1000-8000-0026BB765291': 'AudioStreamManagement', - 'AudioStreamManagement': '00000127-0000-1000-8000-0026BB765291', - '00000096-0000-1000-8000-0026BB765291': 'Battery', - 'Battery': '00000096-0000-1000-8000-0026BB765291', - '0000021A-0000-1000-8000-0026BB765291': 'CameraOperatingMode', - 'CameraOperatingMode': '0000021A-0000-1000-8000-0026BB765291', - '00000204-0000-1000-8000-0026BB765291': 'CameraRecordingManagement', - 'CameraRecordingManagement': '00000204-0000-1000-8000-0026BB765291', - '00000110-0000-1000-8000-0026BB765291': 'CameraRTPStreamManagement', - 'CameraRTPStreamManagement': '00000110-0000-1000-8000-0026BB765291', - '00000097-0000-1000-8000-0026BB765291': 'CarbonDioxideSensor', - 'CarbonDioxideSensor': '00000097-0000-1000-8000-0026BB765291', - '0000007F-0000-1000-8000-0026BB765291': 'CarbonMonoxideSensor', - 'CarbonMonoxideSensor': '0000007F-0000-1000-8000-0026BB765291', - '0000005A-0000-1000-8000-0026BB765291': 'CloudRelay', - 'CloudRelay': '0000005A-0000-1000-8000-0026BB765291', - '00000080-0000-1000-8000-0026BB765291': 'ContactSensor', - 'ContactSensor': '00000080-0000-1000-8000-0026BB765291', - '00000129-0000-1000-8000-0026BB765291': 'DataStreamTransportManagement', - 'DataStreamTransportManagement': '00000129-0000-1000-8000-0026BB765291', - '00000237-0000-1000-8000-0026BB765291': 'Diagnostics', - 'Diagnostics': '00000237-0000-1000-8000-0026BB765291', - '00000081-0000-1000-8000-0026BB765291': 'Door', - 'Door': '00000081-0000-1000-8000-0026BB765291', - '00000121-0000-1000-8000-0026BB765291': 'Doorbell', - 'Doorbell': '00000121-0000-1000-8000-0026BB765291', - '00000040-0000-1000-8000-0026BB765291': 'Fan', - 'Fan': '00000040-0000-1000-8000-0026BB765291', - '000000B7-0000-1000-8000-0026BB765291': 'Fanv2', - 'Fanv2': '000000B7-0000-1000-8000-0026BB765291', - '000000D7-0000-1000-8000-0026BB765291': 'Faucet', - 'Faucet': '000000D7-0000-1000-8000-0026BB765291', - '000000BA-0000-1000-8000-0026BB765291': 'FilterMaintenance', - 'FilterMaintenance': '000000BA-0000-1000-8000-0026BB765291', - '00000236-0000-1000-8000-0026BB765291': 'FirmwareUpdate', - 'FirmwareUpdate': '00000236-0000-1000-8000-0026BB765291', - '00000041-0000-1000-8000-0026BB765291': 'GarageDoorOpener', - 'GarageDoorOpener': '00000041-0000-1000-8000-0026BB765291', - '000000BC-0000-1000-8000-0026BB765291': 'HeaterCooler', - 'HeaterCooler': '000000BC-0000-1000-8000-0026BB765291', - '000000BD-0000-1000-8000-0026BB765291': 'HumidifierDehumidifier', - 'HumidifierDehumidifier': '000000BD-0000-1000-8000-0026BB765291', - '00000082-0000-1000-8000-0026BB765291': 'HumiditySensor', - 'HumiditySensor': '00000082-0000-1000-8000-0026BB765291', - '000000D9-0000-1000-8000-0026BB765291': 'InputSource', - 'InputSource': '000000D9-0000-1000-8000-0026BB765291', - '000000CF-0000-1000-8000-0026BB765291': 'IrrigationSystem', - 'IrrigationSystem': '000000CF-0000-1000-8000-0026BB765291', - '00000083-0000-1000-8000-0026BB765291': 'LeakSensor', - 'LeakSensor': '00000083-0000-1000-8000-0026BB765291', - '00000043-0000-1000-8000-0026BB765291': 'Lightbulb', - 'Lightbulb': '00000043-0000-1000-8000-0026BB765291', - '00000084-0000-1000-8000-0026BB765291': 'LightSensor', - 'LightSensor': '00000084-0000-1000-8000-0026BB765291', - '00000044-0000-1000-8000-0026BB765291': 'LockManagement', - 'LockManagement': '00000044-0000-1000-8000-0026BB765291', - '00000045-0000-1000-8000-0026BB765291': 'LockMechanism', - 'LockMechanism': '00000045-0000-1000-8000-0026BB765291', - '00000112-0000-1000-8000-0026BB765291': 'Microphone', - 'Microphone': '00000112-0000-1000-8000-0026BB765291', - '00000085-0000-1000-8000-0026BB765291': 'MotionSensor', - 'MotionSensor': '00000085-0000-1000-8000-0026BB765291', - '00000266-0000-1000-8000-0026BB765291': 'NFCAccess', - 'NFCAccess': '00000266-0000-1000-8000-0026BB765291', - '00000086-0000-1000-8000-0026BB765291': 'OccupancySensor', - 'OccupancySensor': '00000086-0000-1000-8000-0026BB765291', - '00000047-0000-1000-8000-0026BB765291': 'Outlet', - 'Outlet': '00000047-0000-1000-8000-0026BB765291', - '00000055-0000-1000-8000-0026BB765291': 'Pairing', - 'Pairing': '00000055-0000-1000-8000-0026BB765291', - '00000221-0000-1000-8000-0026BB765291': 'PowerManagement', - 'PowerManagement': '00000221-0000-1000-8000-0026BB765291', - '000000A2-0000-1000-8000-0026BB765291': 'ProtocolInformation', - 'ProtocolInformation': '000000A2-0000-1000-8000-0026BB765291', - '0000007E-0000-1000-8000-0026BB765291': 'SecuritySystem', - 'SecuritySystem': '0000007E-0000-1000-8000-0026BB765291', - '000000CC-0000-1000-8000-0026BB765291': 'ServiceLabel', - 'ServiceLabel': '000000CC-0000-1000-8000-0026BB765291', - '00000133-0000-1000-8000-0026BB765291': 'Siri', - 'Siri': '00000133-0000-1000-8000-0026BB765291', - '00000253-0000-1000-8000-0026BB765291': 'SiriEndpoint', - 'SiriEndpoint': '00000253-0000-1000-8000-0026BB765291', - '000000B9-0000-1000-8000-0026BB765291': 'Slats', - 'Slats': '000000B9-0000-1000-8000-0026BB765291', - '00000228-0000-1000-8000-0026BB765291': 'SmartSpeaker', - 'SmartSpeaker': '00000228-0000-1000-8000-0026BB765291', - '00000087-0000-1000-8000-0026BB765291': 'SmokeSensor', - 'SmokeSensor': '00000087-0000-1000-8000-0026BB765291', - '00000113-0000-1000-8000-0026BB765291': 'Speaker', - 'Speaker': '00000113-0000-1000-8000-0026BB765291', - '00000088-0000-1000-8000-0026BB765291': 'StatefulProgrammableSwitch', - 'StatefulProgrammableSwitch': '00000088-0000-1000-8000-0026BB765291', - '00000089-0000-1000-8000-0026BB765291': 'StatelessProgrammableSwitch', - 'StatelessProgrammableSwitch': '00000089-0000-1000-8000-0026BB765291', - '00000049-0000-1000-8000-0026BB765291': 'Switch', - 'Switch': '00000049-0000-1000-8000-0026BB765291', - '0000022E-0000-1000-8000-0026BB765291': 'TapManagement', - 'TapManagement': '0000022E-0000-1000-8000-0026BB765291', - '00000125-0000-1000-8000-0026BB765291': 'TargetControl', - 'TargetControl': '00000125-0000-1000-8000-0026BB765291', - '00000122-0000-1000-8000-0026BB765291': 'TargetControlManagement', - 'TargetControlManagement': '00000122-0000-1000-8000-0026BB765291', - '000000D8-0000-1000-8000-0026BB765291': 'Television', - 'Television': '000000D8-0000-1000-8000-0026BB765291', - 'TelevisionSpeaker': '00000113-0000-1000-8000-0026BB765291', - '0000008A-0000-1000-8000-0026BB765291': 'TemperatureSensor', - 'TemperatureSensor': '0000008A-0000-1000-8000-0026BB765291', - '0000004A-0000-1000-8000-0026BB765291': 'Thermostat', - 'Thermostat': '0000004A-0000-1000-8000-0026BB765291', - '00000701-0000-1000-8000-0026BB765291': 'ThreadTransport', - 'ThreadTransport': '00000701-0000-1000-8000-0026BB765291', - '00000203-0000-1000-8000-0026BB765291': 'TransferTransportManagement', - 'TransferTransportManagement': '00000203-0000-1000-8000-0026BB765291', - '00000056-0000-1000-8000-0026BB765291': 'Tunnel', - 'Tunnel': '00000056-0000-1000-8000-0026BB765291', - '000000D0-0000-1000-8000-0026BB765291': 'Valve', - 'Valve': '000000D0-0000-1000-8000-0026BB765291', - '0000020A-0000-1000-8000-0026BB765291': 'WiFiRouter', - 'WiFiRouter': '0000020A-0000-1000-8000-0026BB765291', - '0000020F-0000-1000-8000-0026BB765291': 'WiFiSatellite', - 'WiFiSatellite': '0000020F-0000-1000-8000-0026BB765291', - '0000022A-0000-1000-8000-0026BB765291': 'WiFiTransport', - 'WiFiTransport': '0000022A-0000-1000-8000-0026BB765291', - '0000008B-0000-1000-8000-0026BB765291': 'Window', - 'Window': '0000008B-0000-1000-8000-0026BB765291', - '0000008C-0000-1000-8000-0026BB765291': 'WindowCovering', - 'WindowCovering': '0000008C-0000-1000-8000-0026BB765291', -}; + '00000260-0000-1000-8000-0026BB765291': 'AccessCode', + 'AccessCode': '00000260-0000-1000-8000-0026BB765291', + '000000DA-0000-1000-8000-0026BB765291': 'AccessControl', + 'AccessControl': '000000DA-0000-1000-8000-0026BB765291', + '0000003E-0000-1000-8000-0026BB765291': 'AccessoryInformation', + 'AccessoryInformation': '0000003E-0000-1000-8000-0026BB765291', + '00000270-0000-1000-8000-0026BB765291': 'AccessoryMetrics', + 'AccessoryMetrics': '00000270-0000-1000-8000-0026BB765291', + '00000239-0000-1000-8000-0026BB765291': 'AccessoryRuntimeInformation', + 'AccessoryRuntimeInformation': '00000239-0000-1000-8000-0026BB765291', + '000000BB-0000-1000-8000-0026BB765291': 'AirPurifier', + 'AirPurifier': '000000BB-0000-1000-8000-0026BB765291', + '0000008D-0000-1000-8000-0026BB765291': 'AirQualitySensor', + 'AirQualitySensor': '0000008D-0000-1000-8000-0026BB765291', + '00000267-0000-1000-8000-0026BB765291': 'AssetUpdate', + 'AssetUpdate': '00000267-0000-1000-8000-0026BB765291', + '0000026A-0000-1000-8000-0026BB765291': 'Assistant', + 'Assistant': '0000026A-0000-1000-8000-0026BB765291', + '00000127-0000-1000-8000-0026BB765291': 'AudioStreamManagement', + 'AudioStreamManagement': '00000127-0000-1000-8000-0026BB765291', + '00000096-0000-1000-8000-0026BB765291': 'Battery', + 'Battery': '00000096-0000-1000-8000-0026BB765291', + '0000021A-0000-1000-8000-0026BB765291': 'CameraOperatingMode', + 'CameraOperatingMode': '0000021A-0000-1000-8000-0026BB765291', + '00000204-0000-1000-8000-0026BB765291': 'CameraRecordingManagement', + 'CameraRecordingManagement': '00000204-0000-1000-8000-0026BB765291', + '00000110-0000-1000-8000-0026BB765291': 'CameraRTPStreamManagement', + 'CameraRTPStreamManagement': '00000110-0000-1000-8000-0026BB765291', + '00000097-0000-1000-8000-0026BB765291': 'CarbonDioxideSensor', + 'CarbonDioxideSensor': '00000097-0000-1000-8000-0026BB765291', + '0000007F-0000-1000-8000-0026BB765291': 'CarbonMonoxideSensor', + 'CarbonMonoxideSensor': '0000007F-0000-1000-8000-0026BB765291', + '00000080-0000-1000-8000-0026BB765291': 'ContactSensor', + 'ContactSensor': '00000080-0000-1000-8000-0026BB765291', + '00000129-0000-1000-8000-0026BB765291': 'DataStreamTransportManagement', + 'DataStreamTransportManagement': '00000129-0000-1000-8000-0026BB765291', + '00000237-0000-1000-8000-0026BB765291': 'Diagnostics', + 'Diagnostics': '00000237-0000-1000-8000-0026BB765291', + '00000081-0000-1000-8000-0026BB765291': 'Door', + 'Door': '00000081-0000-1000-8000-0026BB765291', + '00000121-0000-1000-8000-0026BB765291': 'Doorbell', + 'Doorbell': '00000121-0000-1000-8000-0026BB765291', + '00000040-0000-1000-8000-0026BB765291': 'Fan', + 'Fan': '00000040-0000-1000-8000-0026BB765291', + '000000B7-0000-1000-8000-0026BB765291': 'Fanv2', + 'Fanv2': '000000B7-0000-1000-8000-0026BB765291', + '000000D7-0000-1000-8000-0026BB765291': 'Faucet', + 'Faucet': '000000D7-0000-1000-8000-0026BB765291', + '000000BA-0000-1000-8000-0026BB765291': 'FilterMaintenance', + 'FilterMaintenance': '000000BA-0000-1000-8000-0026BB765291', + '00000236-0000-1000-8000-0026BB765291': 'FirmwareUpdate', + 'FirmwareUpdate': '00000236-0000-1000-8000-0026BB765291', + '00000041-0000-1000-8000-0026BB765291': 'GarageDoorOpener', + 'GarageDoorOpener': '00000041-0000-1000-8000-0026BB765291', + '000000BC-0000-1000-8000-0026BB765291': 'HeaterCooler', + 'HeaterCooler': '000000BC-0000-1000-8000-0026BB765291', + '000000BD-0000-1000-8000-0026BB765291': 'HumidifierDehumidifier', + 'HumidifierDehumidifier': '000000BD-0000-1000-8000-0026BB765291', + '00000082-0000-1000-8000-0026BB765291': 'HumiditySensor', + 'HumiditySensor': '00000082-0000-1000-8000-0026BB765291', + '000000D9-0000-1000-8000-0026BB765291': 'InputSource', + 'InputSource': '000000D9-0000-1000-8000-0026BB765291', + '000000CF-0000-1000-8000-0026BB765291': 'IrrigationSystem', + 'IrrigationSystem': '000000CF-0000-1000-8000-0026BB765291', + '00000083-0000-1000-8000-0026BB765291': 'LeakSensor', + 'LeakSensor': '00000083-0000-1000-8000-0026BB765291', + '00000043-0000-1000-8000-0026BB765291': 'Lightbulb', + 'Lightbulb': '00000043-0000-1000-8000-0026BB765291', + '00000084-0000-1000-8000-0026BB765291': 'LightSensor', + 'LightSensor': '00000084-0000-1000-8000-0026BB765291', + '00000044-0000-1000-8000-0026BB765291': 'LockManagement', + 'LockManagement': '00000044-0000-1000-8000-0026BB765291', + '00000045-0000-1000-8000-0026BB765291': 'LockMechanism', + 'LockMechanism': '00000045-0000-1000-8000-0026BB765291', + '00000112-0000-1000-8000-0026BB765291': 'Microphone', + 'Microphone': '00000112-0000-1000-8000-0026BB765291', + '00000085-0000-1000-8000-0026BB765291': 'MotionSensor', + 'MotionSensor': '00000085-0000-1000-8000-0026BB765291', + '00000266-0000-1000-8000-0026BB765291': 'NFCAccess', + 'NFCAccess': '00000266-0000-1000-8000-0026BB765291', + '00000086-0000-1000-8000-0026BB765291': 'OccupancySensor', + 'OccupancySensor': '00000086-0000-1000-8000-0026BB765291', + '00000047-0000-1000-8000-0026BB765291': 'Outlet', + 'Outlet': '00000047-0000-1000-8000-0026BB765291', + '00000055-0000-1000-8000-0026BB765291': 'Pairing', + 'Pairing': '00000055-0000-1000-8000-0026BB765291', + '00000221-0000-1000-8000-0026BB765291': 'PowerManagement', + 'PowerManagement': '00000221-0000-1000-8000-0026BB765291', + '000000A2-0000-1000-8000-0026BB765291': 'ProtocolInformation', + 'ProtocolInformation': '000000A2-0000-1000-8000-0026BB765291', + '0000007E-0000-1000-8000-0026BB765291': 'SecuritySystem', + 'SecuritySystem': '0000007E-0000-1000-8000-0026BB765291', + '000000CC-0000-1000-8000-0026BB765291': 'ServiceLabel', + 'ServiceLabel': '000000CC-0000-1000-8000-0026BB765291', + '00000133-0000-1000-8000-0026BB765291': 'Siri', + 'Siri': '00000133-0000-1000-8000-0026BB765291', + '00000253-0000-1000-8000-0026BB765291': 'SiriEndpoint', + 'SiriEndpoint': '00000253-0000-1000-8000-0026BB765291', + '000000B9-0000-1000-8000-0026BB765291': 'Slats', + 'Slats': '000000B9-0000-1000-8000-0026BB765291', + '00000228-0000-1000-8000-0026BB765291': 'SmartSpeaker', + 'SmartSpeaker': '00000228-0000-1000-8000-0026BB765291', + '00000087-0000-1000-8000-0026BB765291': 'SmokeSensor', + 'SmokeSensor': '00000087-0000-1000-8000-0026BB765291', + '00000113-0000-1000-8000-0026BB765291': 'Speaker', + 'Speaker': '00000113-0000-1000-8000-0026BB765291', + '00000088-0000-1000-8000-0026BB765291': 'StatefulProgrammableSwitch', + 'StatefulProgrammableSwitch': '00000088-0000-1000-8000-0026BB765291', + '00000089-0000-1000-8000-0026BB765291': 'StatelessProgrammableSwitch', + 'StatelessProgrammableSwitch': '00000089-0000-1000-8000-0026BB765291', + '00000049-0000-1000-8000-0026BB765291': 'Switch', + 'Switch': '00000049-0000-1000-8000-0026BB765291', + '0000022E-0000-1000-8000-0026BB765291': 'TapManagement', + 'TapManagement': '0000022E-0000-1000-8000-0026BB765291', + '00000125-0000-1000-8000-0026BB765291': 'TargetControl', + 'TargetControl': '00000125-0000-1000-8000-0026BB765291', + '00000122-0000-1000-8000-0026BB765291': 'TargetControlManagement', + 'TargetControlManagement': '00000122-0000-1000-8000-0026BB765291', + '000000D8-0000-1000-8000-0026BB765291': 'Television', + 'Television': '000000D8-0000-1000-8000-0026BB765291', + 'TelevisionSpeaker': '00000113-0000-1000-8000-0026BB765291', + '0000008A-0000-1000-8000-0026BB765291': 'TemperatureSensor', + 'TemperatureSensor': '0000008A-0000-1000-8000-0026BB765291', + '0000004A-0000-1000-8000-0026BB765291': 'Thermostat', + 'Thermostat': '0000004A-0000-1000-8000-0026BB765291', + '00000701-0000-1000-8000-0026BB765291': 'ThreadTransport', + 'ThreadTransport': '00000701-0000-1000-8000-0026BB765291', + '00000203-0000-1000-8000-0026BB765291': 'TransferTransportManagement', + 'TransferTransportManagement': '00000203-0000-1000-8000-0026BB765291', + '000000D0-0000-1000-8000-0026BB765291': 'Valve', + 'Valve': '000000D0-0000-1000-8000-0026BB765291', + '0000020A-0000-1000-8000-0026BB765291': 'WiFiRouter', + 'WiFiRouter': '0000020A-0000-1000-8000-0026BB765291', + '0000020F-0000-1000-8000-0026BB765291': 'WiFiSatellite', + 'WiFiSatellite': '0000020F-0000-1000-8000-0026BB765291', + '0000022A-0000-1000-8000-0026BB765291': 'WiFiTransport', + 'WiFiTransport': '0000022A-0000-1000-8000-0026BB765291', + '0000008B-0000-1000-8000-0026BB765291': 'Window', + 'Window': '0000008B-0000-1000-8000-0026BB765291', + '0000008C-0000-1000-8000-0026BB765291': 'WindowCovering', + 'WindowCovering': '0000008C-0000-1000-8000-0026BB765291', +} export const Characteristics = { - '00000262-0000-1000-8000-0026BB765291': 'AccessCodeControlPoint', - 'AccessCodeControlPoint': '00000262-0000-1000-8000-0026BB765291', - '00000261-0000-1000-8000-0026BB765291': 'AccessCodeSupportedConfiguration', - 'AccessCodeSupportedConfiguration': '00000261-0000-1000-8000-0026BB765291', - '000000E5-0000-1000-8000-0026BB765291': 'AccessControlLevel', - 'AccessControlLevel': '000000E5-0000-1000-8000-0026BB765291', - '000000A6-0000-1000-8000-0026BB765291': 'AccessoryFlags', - 'AccessoryFlags': '000000A6-0000-1000-8000-0026BB765291', - '00000057-0000-1000-8000-0026BB765291': 'AccessoryIdentifier', - 'AccessoryIdentifier': '00000057-0000-1000-8000-0026BB765291', - '000000B0-0000-1000-8000-0026BB765291': 'Active', - 'Active': '000000B0-0000-1000-8000-0026BB765291', - '000000E7-0000-1000-8000-0026BB765291': 'ActiveIdentifier', - 'ActiveIdentifier': '000000E7-0000-1000-8000-0026BB765291', - '0000023B-0000-1000-8000-0026BB765291': 'ActivityInterval', - 'ActivityInterval': '0000023B-0000-1000-8000-0026BB765291', - '00000001-0000-1000-8000-0026BB765291': 'AdministratorOnlyAccess', - 'AdministratorOnlyAccess': '00000001-0000-1000-8000-0026BB765291', - '00000064-0000-1000-8000-0026BB765291': 'AirParticulateDensity', - 'AirParticulateDensity': '00000064-0000-1000-8000-0026BB765291', - '00000065-0000-1000-8000-0026BB765291': 'AirParticulateSize', - 'AirParticulateSize': '00000065-0000-1000-8000-0026BB765291', - '0000025B-0000-1000-8000-0026BB765291': 'AirPlayEnable', - 'AirPlayEnable': '0000025B-0000-1000-8000-0026BB765291', - '00000095-0000-1000-8000-0026BB765291': 'AirQuality', - 'AirQuality': '00000095-0000-1000-8000-0026BB765291', - '000000A4-0000-1000-8000-0026BB765291': 'AppMatchingIdentifier', - 'AppMatchingIdentifier': '000000A4-0000-1000-8000-0026BB765291', - '00000269-0000-1000-8000-0026BB765291': 'AssetUpdateReadiness', - 'AssetUpdateReadiness': '00000269-0000-1000-8000-0026BB765291', - '00000005-0000-1000-8000-0026BB765291': 'AudioFeedback', - 'AudioFeedback': '00000005-0000-1000-8000-0026BB765291', - '00000068-0000-1000-8000-0026BB765291': 'BatteryLevel', - 'BatteryLevel': '00000068-0000-1000-8000-0026BB765291', - '00000008-0000-1000-8000-0026BB765291': 'Brightness', - 'Brightness': '00000008-0000-1000-8000-0026BB765291', - '00000126-0000-1000-8000-0026BB765291': 'ButtonEvent', - 'ButtonEvent': '00000126-0000-1000-8000-0026BB765291', - '0000021D-0000-1000-8000-0026BB765291': 'CameraOperatingModeIndicator', - 'CameraOperatingModeIndicator': '0000021D-0000-1000-8000-0026BB765291', - '00000092-0000-1000-8000-0026BB765291': 'CarbonDioxideDetected', - 'CarbonDioxideDetected': '00000092-0000-1000-8000-0026BB765291', - '00000093-0000-1000-8000-0026BB765291': 'CarbonDioxideLevel', - 'CarbonDioxideLevel': '00000093-0000-1000-8000-0026BB765291', - '00000094-0000-1000-8000-0026BB765291': 'CarbonDioxidePeakLevel', - 'CarbonDioxidePeakLevel': '00000094-0000-1000-8000-0026BB765291', - '00000069-0000-1000-8000-0026BB765291': 'CarbonMonoxideDetected', - 'CarbonMonoxideDetected': '00000069-0000-1000-8000-0026BB765291', - '00000090-0000-1000-8000-0026BB765291': 'CarbonMonoxideLevel', - 'CarbonMonoxideLevel': '00000090-0000-1000-8000-0026BB765291', - '00000091-0000-1000-8000-0026BB765291': 'CarbonMonoxidePeakLevel', - 'CarbonMonoxidePeakLevel': '00000091-0000-1000-8000-0026BB765291', - '00000246-0000-1000-8000-0026BB765291': 'CCAEnergyDetectThreshold', - 'CCAEnergyDetectThreshold': '00000246-0000-1000-8000-0026BB765291', - '00000245-0000-1000-8000-0026BB765291': 'CCASignalDetectThreshold', - 'CCASignalDetectThreshold': '00000245-0000-1000-8000-0026BB765291', - '0000024B-0000-1000-8000-0026BB765291': 'CharacteristicValueActiveTransitionCount', - 'CharacteristicValueActiveTransitionCount': '0000024B-0000-1000-8000-0026BB765291', - '00000143-0000-1000-8000-0026BB765291': 'CharacteristicValueTransitionControl', - 'CharacteristicValueTransitionControl': '00000143-0000-1000-8000-0026BB765291', - '0000008F-0000-1000-8000-0026BB765291': 'ChargingState', - 'ChargingState': '0000008F-0000-1000-8000-0026BB765291', - '000000DD-0000-1000-8000-0026BB765291': 'ClosedCaptions', - 'ClosedCaptions': '000000DD-0000-1000-8000-0026BB765291', - '000000CE-0000-1000-8000-0026BB765291': 'ColorTemperature', - 'ColorTemperature': '000000CE-0000-1000-8000-0026BB765291', - '00000263-0000-1000-8000-0026BB765291': 'ConfigurationState', - 'ConfigurationState': '00000263-0000-1000-8000-0026BB765291', - '000000E3-0000-1000-8000-0026BB765291': 'ConfiguredName', - 'ConfiguredName': '000000E3-0000-1000-8000-0026BB765291', - '0000006A-0000-1000-8000-0026BB765291': 'ContactSensorState', - 'ContactSensorState': '0000006A-0000-1000-8000-0026BB765291', - '0000000D-0000-1000-8000-0026BB765291': 'CoolingThresholdTemperature', - 'CoolingThresholdTemperature': '0000000D-0000-1000-8000-0026BB765291', - '00000250-0000-1000-8000-0026BB765291': 'CryptoHash', - 'CryptoHash': '00000250-0000-1000-8000-0026BB765291', - '000000A9-0000-1000-8000-0026BB765291': 'CurrentAirPurifierState', - 'CurrentAirPurifierState': '000000A9-0000-1000-8000-0026BB765291', - '0000006B-0000-1000-8000-0026BB765291': 'CurrentAmbientLightLevel', - 'CurrentAmbientLightLevel': '0000006B-0000-1000-8000-0026BB765291', - '0000000E-0000-1000-8000-0026BB765291': 'CurrentDoorState', - 'CurrentDoorState': '0000000E-0000-1000-8000-0026BB765291', - '000000AF-0000-1000-8000-0026BB765291': 'CurrentFanState', - 'CurrentFanState': '000000AF-0000-1000-8000-0026BB765291', - '000000B1-0000-1000-8000-0026BB765291': 'CurrentHeaterCoolerState', - 'CurrentHeaterCoolerState': '000000B1-0000-1000-8000-0026BB765291', - '0000000F-0000-1000-8000-0026BB765291': 'CurrentHeatingCoolingState', - 'CurrentHeatingCoolingState': '0000000F-0000-1000-8000-0026BB765291', - '0000006C-0000-1000-8000-0026BB765291': 'CurrentHorizontalTiltAngle', - 'CurrentHorizontalTiltAngle': '0000006C-0000-1000-8000-0026BB765291', - '000000B3-0000-1000-8000-0026BB765291': 'CurrentHumidifierDehumidifierState', - 'CurrentHumidifierDehumidifierState': '000000B3-0000-1000-8000-0026BB765291', - '000000E0-0000-1000-8000-0026BB765291': 'CurrentMediaState', - 'CurrentMediaState': '000000E0-0000-1000-8000-0026BB765291', - '0000006D-0000-1000-8000-0026BB765291': 'CurrentPosition', - 'CurrentPosition': '0000006D-0000-1000-8000-0026BB765291', - '00000010-0000-1000-8000-0026BB765291': 'CurrentRelativeHumidity', - 'CurrentRelativeHumidity': '00000010-0000-1000-8000-0026BB765291', - '000000AA-0000-1000-8000-0026BB765291': 'CurrentSlatState', - 'CurrentSlatState': '000000AA-0000-1000-8000-0026BB765291', - '00000011-0000-1000-8000-0026BB765291': 'CurrentTemperature', - 'CurrentTemperature': '00000011-0000-1000-8000-0026BB765291', - '000000C1-0000-1000-8000-0026BB765291': 'CurrentTiltAngle', - 'CurrentTiltAngle': '000000C1-0000-1000-8000-0026BB765291', - '0000022B-0000-1000-8000-0026BB765291': 'CurrentTransport', - 'CurrentTransport': '0000022B-0000-1000-8000-0026BB765291', - '0000006E-0000-1000-8000-0026BB765291': 'CurrentVerticalTiltAngle', - 'CurrentVerticalTiltAngle': '0000006E-0000-1000-8000-0026BB765291', - '00000135-0000-1000-8000-0026BB765291': 'CurrentVisibilityState', - 'CurrentVisibilityState': '00000135-0000-1000-8000-0026BB765291', - '00000138-0000-1000-8000-0026BB765291': 'DataStreamHAPTransport', - 'DataStreamHAPTransport': '00000138-0000-1000-8000-0026BB765291', - '00000139-0000-1000-8000-0026BB765291': 'DataStreamHAPTransportInterrupt', - 'DataStreamHAPTransportInterrupt': '00000139-0000-1000-8000-0026BB765291', - '00000224-0000-1000-8000-0026BB765291': 'DiagonalFieldOfView', - 'DiagonalFieldOfView': '00000224-0000-1000-8000-0026BB765291', - '0000011D-0000-1000-8000-0026BB765291': 'DigitalZoom', - 'DigitalZoom': '0000011D-0000-1000-8000-0026BB765291', - '00000136-0000-1000-8000-0026BB765291': 'DisplayOrder', - 'DisplayOrder': '00000136-0000-1000-8000-0026BB765291', - '0000023D-0000-1000-8000-0026BB765291': 'EventRetransmissionMaximum', - 'EventRetransmissionMaximum': '0000023D-0000-1000-8000-0026BB765291', - '00000223-0000-1000-8000-0026BB765291': 'EventSnapshotsActive', - 'EventSnapshotsActive': '00000223-0000-1000-8000-0026BB765291', - '0000023E-0000-1000-8000-0026BB765291': 'EventTransmissionCounters', - 'EventTransmissionCounters': '0000023E-0000-1000-8000-0026BB765291', - '000000AC-0000-1000-8000-0026BB765291': 'FilterChangeIndication', - 'FilterChangeIndication': '000000AC-0000-1000-8000-0026BB765291', - '000000AB-0000-1000-8000-0026BB765291': 'FilterLifeLevel', - 'FilterLifeLevel': '000000AB-0000-1000-8000-0026BB765291', - '00000052-0000-1000-8000-0026BB765291': 'FirmwareRevision', - 'FirmwareRevision': '00000052-0000-1000-8000-0026BB765291', - '00000234-0000-1000-8000-0026BB765291': 'FirmwareUpdateReadiness', - 'FirmwareUpdateReadiness': '00000234-0000-1000-8000-0026BB765291', - '00000235-0000-1000-8000-0026BB765291': 'FirmwareUpdateStatus', - 'FirmwareUpdateStatus': '00000235-0000-1000-8000-0026BB765291', - '0000026C-0000-1000-8000-0026BB765291': 'HardwareFinish', - 'HardwareFinish': '0000026C-0000-1000-8000-0026BB765291', - '00000053-0000-1000-8000-0026BB765291': 'HardwareRevision', - 'HardwareRevision': '00000053-0000-1000-8000-0026BB765291', - '0000024A-0000-1000-8000-0026BB765291': 'HeartBeat', - 'HeartBeat': '0000024A-0000-1000-8000-0026BB765291', - '00000012-0000-1000-8000-0026BB765291': 'HeatingThresholdTemperature', - 'HeatingThresholdTemperature': '00000012-0000-1000-8000-0026BB765291', - '0000006F-0000-1000-8000-0026BB765291': 'HoldPosition', - 'HoldPosition': '0000006F-0000-1000-8000-0026BB765291', - '0000021B-0000-1000-8000-0026BB765291': 'HomeKitCameraActive', - 'HomeKitCameraActive': '0000021B-0000-1000-8000-0026BB765291', - '00000013-0000-1000-8000-0026BB765291': 'Hue', - 'Hue': '00000013-0000-1000-8000-0026BB765291', - '000000E6-0000-1000-8000-0026BB765291': 'Identifier', - 'Identifier': '000000E6-0000-1000-8000-0026BB765291', - '00000014-0000-1000-8000-0026BB765291': 'Identify', - 'Identify': '00000014-0000-1000-8000-0026BB765291', - '0000011F-0000-1000-8000-0026BB765291': 'ImageMirroring', - 'ImageMirroring': '0000011F-0000-1000-8000-0026BB765291', - '0000011E-0000-1000-8000-0026BB765291': 'ImageRotation', - 'ImageRotation': '0000011E-0000-1000-8000-0026BB765291', - '000000DC-0000-1000-8000-0026BB765291': 'InputDeviceType', - 'InputDeviceType': '000000DC-0000-1000-8000-0026BB765291', - '000000DB-0000-1000-8000-0026BB765291': 'InputSourceType', - 'InputSourceType': '000000DB-0000-1000-8000-0026BB765291', - '000000D2-0000-1000-8000-0026BB765291': 'InUse', - 'InUse': '000000D2-0000-1000-8000-0026BB765291', - '000000D6-0000-1000-8000-0026BB765291': 'IsConfigured', - 'IsConfigured': '000000D6-0000-1000-8000-0026BB765291', - '00000070-0000-1000-8000-0026BB765291': 'LeakDetected', - 'LeakDetected': '00000070-0000-1000-8000-0026BB765291', - '00000050-0000-1000-8000-0026BB765291': 'ListPairings', - 'ListPairings': '00000050-0000-1000-8000-0026BB765291', - '00000019-0000-1000-8000-0026BB765291': 'LockControlPoint', - 'LockControlPoint': '00000019-0000-1000-8000-0026BB765291', - '0000001D-0000-1000-8000-0026BB765291': 'LockCurrentState', - 'LockCurrentState': '0000001D-0000-1000-8000-0026BB765291', - '0000001C-0000-1000-8000-0026BB765291': 'LockLastKnownAction', - 'LockLastKnownAction': '0000001C-0000-1000-8000-0026BB765291', - '0000001A-0000-1000-8000-0026BB765291': 'LockManagementAutoSecurityTimeout', - 'LockManagementAutoSecurityTimeout': '0000001A-0000-1000-8000-0026BB765291', - '000000A7-0000-1000-8000-0026BB765291': 'LockPhysicalControls', - 'LockPhysicalControls': '000000A7-0000-1000-8000-0026BB765291', - '0000001E-0000-1000-8000-0026BB765291': 'LockTargetState', - 'LockTargetState': '0000001E-0000-1000-8000-0026BB765291', - '0000001F-0000-1000-8000-0026BB765291': 'Logs', - 'Logs': '0000001F-0000-1000-8000-0026BB765291', - '00000247-0000-1000-8000-0026BB765291': 'MACRetransmissionMaximum', - 'MACRetransmissionMaximum': '00000247-0000-1000-8000-0026BB765291', - '00000248-0000-1000-8000-0026BB765291': 'MACTransmissionCounters', - 'MACTransmissionCounters': '00000248-0000-1000-8000-0026BB765291', - '00000215-0000-1000-8000-0026BB765291': 'ManagedNetworkEnable', - 'ManagedNetworkEnable': '00000215-0000-1000-8000-0026BB765291', - '00000227-0000-1000-8000-0026BB765291': 'ManuallyDisabled', - 'ManuallyDisabled': '00000227-0000-1000-8000-0026BB765291', - '00000020-0000-1000-8000-0026BB765291': 'Manufacturer', - 'Manufacturer': '00000020-0000-1000-8000-0026BB765291', - '00000243-0000-1000-8000-0026BB765291': 'MaximumTransmitPower', - 'MaximumTransmitPower': '00000243-0000-1000-8000-0026BB765291', - '00000272-0000-1000-8000-0026BB765291': 'MetricsBufferFullState', - 'MetricsBufferFullState': '00000272-0000-1000-8000-0026BB765291', - '00000021-0000-1000-8000-0026BB765291': 'Model', - 'Model': '00000021-0000-1000-8000-0026BB765291', - '00000022-0000-1000-8000-0026BB765291': 'MotionDetected', - 'MotionDetected': '00000022-0000-1000-8000-0026BB765291', - '0000026B-0000-1000-8000-0026BB765291': 'MultifunctionButton', - 'MultifunctionButton': '0000026B-0000-1000-8000-0026BB765291', - '0000011A-0000-1000-8000-0026BB765291': 'Mute', - 'Mute': '0000011A-0000-1000-8000-0026BB765291', - '00000023-0000-1000-8000-0026BB765291': 'Name', - 'Name': '00000023-0000-1000-8000-0026BB765291', - '0000021F-0000-1000-8000-0026BB765291': 'NetworkAccessViolationControl', - 'NetworkAccessViolationControl': '0000021F-0000-1000-8000-0026BB765291', - '0000020C-0000-1000-8000-0026BB765291': 'NetworkClientProfileControl', - 'NetworkClientProfileControl': '0000020C-0000-1000-8000-0026BB765291', - '0000020D-0000-1000-8000-0026BB765291': 'NetworkClientStatusControl', - 'NetworkClientStatusControl': '0000020D-0000-1000-8000-0026BB765291', - '00000264-0000-1000-8000-0026BB765291': 'NFCAccessControlPoint', - 'NFCAccessControlPoint': '00000264-0000-1000-8000-0026BB765291', - '00000265-0000-1000-8000-0026BB765291': 'NFCAccessSupportedConfiguration', - 'NFCAccessSupportedConfiguration': '00000265-0000-1000-8000-0026BB765291', - '0000011B-0000-1000-8000-0026BB765291': 'NightVision', - 'NightVision': '0000011B-0000-1000-8000-0026BB765291', - '000000C4-0000-1000-8000-0026BB765291': 'NitrogenDioxideDensity', - 'NitrogenDioxideDensity': '000000C4-0000-1000-8000-0026BB765291', - '00000024-0000-1000-8000-0026BB765291': 'ObstructionDetected', - 'ObstructionDetected': '00000024-0000-1000-8000-0026BB765291', - '00000071-0000-1000-8000-0026BB765291': 'OccupancyDetected', - 'OccupancyDetected': '00000071-0000-1000-8000-0026BB765291', - '00000025-0000-1000-8000-0026BB765291': 'On', - 'On': '00000025-0000-1000-8000-0026BB765291', - '00000232-0000-1000-8000-0026BB765291': 'OperatingStateResponse', - 'OperatingStateResponse': '00000232-0000-1000-8000-0026BB765291', - '0000011C-0000-1000-8000-0026BB765291': 'OpticalZoom', - 'OpticalZoom': '0000011C-0000-1000-8000-0026BB765291', - '00000026-0000-1000-8000-0026BB765291': 'OutletInUse', - 'OutletInUse': '00000026-0000-1000-8000-0026BB765291', - '000000C3-0000-1000-8000-0026BB765291': 'OzoneDensity', - 'OzoneDensity': '000000C3-0000-1000-8000-0026BB765291', - '0000004F-0000-1000-8000-0026BB765291': 'PairingFeatures', - 'PairingFeatures': '0000004F-0000-1000-8000-0026BB765291', - '0000004C-0000-1000-8000-0026BB765291': 'PairSetup', - 'PairSetup': '0000004C-0000-1000-8000-0026BB765291', - '0000004E-0000-1000-8000-0026BB765291': 'PairVerify', - 'PairVerify': '0000004E-0000-1000-8000-0026BB765291', - '000000E4-0000-1000-8000-0026BB765291': 'PasswordSetting', - 'PasswordSetting': '000000E4-0000-1000-8000-0026BB765291', - '00000225-0000-1000-8000-0026BB765291': 'PeriodicSnapshotsActive', - 'PeriodicSnapshotsActive': '00000225-0000-1000-8000-0026BB765291', - '000000E2-0000-1000-8000-0026BB765291': 'PictureMode', - 'PictureMode': '000000E2-0000-1000-8000-0026BB765291', - '0000023C-0000-1000-8000-0026BB765291': 'Ping', - 'Ping': '0000023C-0000-1000-8000-0026BB765291', - '000000C7-0000-1000-8000-0026BB765291': 'PM10Density', - 'PM10Density': '000000C7-0000-1000-8000-0026BB765291', - '000000C6-0000-1000-8000-0026BB765291': 'PM2_5Density', - 'PM2_5Density': '000000C6-0000-1000-8000-0026BB765291', - '00000072-0000-1000-8000-0026BB765291': 'PositionState', - 'PositionState': '00000072-0000-1000-8000-0026BB765291', - '000000DF-0000-1000-8000-0026BB765291': 'PowerModeSelection', - 'PowerModeSelection': '000000DF-0000-1000-8000-0026BB765291', - '00000220-0000-1000-8000-0026BB765291': 'ProductData', - 'ProductData': '00000220-0000-1000-8000-0026BB765291', - '00000073-0000-1000-8000-0026BB765291': 'ProgrammableSwitchEvent', - 'ProgrammableSwitchEvent': '00000073-0000-1000-8000-0026BB765291', - '00000074-0000-1000-8000-0026BB765291': 'ProgrammableSwitchOutputState', - 'ProgrammableSwitchOutputState': '00000074-0000-1000-8000-0026BB765291', - '000000D1-0000-1000-8000-0026BB765291': 'ProgramMode', - 'ProgramMode': '000000D1-0000-1000-8000-0026BB765291', - '0000023F-0000-1000-8000-0026BB765291': 'ReceivedSignalStrengthIndication', - 'ReceivedSignalStrengthIndication': '0000023F-0000-1000-8000-0026BB765291', - '00000244-0000-1000-8000-0026BB765291': 'ReceiverSensitivity', - 'ReceiverSensitivity': '00000244-0000-1000-8000-0026BB765291', - '00000226-0000-1000-8000-0026BB765291': 'RecordingAudioActive', - 'RecordingAudioActive': '00000226-0000-1000-8000-0026BB765291', - '000000C9-0000-1000-8000-0026BB765291': 'RelativeHumidityDehumidifierThreshold', - 'RelativeHumidityDehumidifierThreshold': '000000C9-0000-1000-8000-0026BB765291', - '000000CA-0000-1000-8000-0026BB765291': 'RelativeHumidityHumidifierThreshold', - 'RelativeHumidityHumidifierThreshold': '000000CA-0000-1000-8000-0026BB765291', - '0000005E-0000-1000-8000-0026BB765291': 'RelayControlPoint', - 'RelayControlPoint': '0000005E-0000-1000-8000-0026BB765291', - '0000005B-0000-1000-8000-0026BB765291': 'RelayEnabled', - 'RelayEnabled': '0000005B-0000-1000-8000-0026BB765291', - '0000005C-0000-1000-8000-0026BB765291': 'RelayState', - 'RelayState': '0000005C-0000-1000-8000-0026BB765291', - '000000D4-0000-1000-8000-0026BB765291': 'RemainingDuration', - 'RemainingDuration': '000000D4-0000-1000-8000-0026BB765291', - '000000E1-0000-1000-8000-0026BB765291': 'RemoteKey', - 'RemoteKey': '000000E1-0000-1000-8000-0026BB765291', - '000000AD-0000-1000-8000-0026BB765291': 'ResetFilterIndication', - 'ResetFilterIndication': '000000AD-0000-1000-8000-0026BB765291', - '00000028-0000-1000-8000-0026BB765291': 'RotationDirection', - 'RotationDirection': '00000028-0000-1000-8000-0026BB765291', - '00000029-0000-1000-8000-0026BB765291': 'RotationSpeed', - 'RotationSpeed': '00000029-0000-1000-8000-0026BB765291', - '0000020E-0000-1000-8000-0026BB765291': 'RouterStatus', - 'RouterStatus': '0000020E-0000-1000-8000-0026BB765291', - '0000002F-0000-1000-8000-0026BB765291': 'Saturation', - 'Saturation': '0000002F-0000-1000-8000-0026BB765291', - '0000008E-0000-1000-8000-0026BB765291': 'SecuritySystemAlarmType', - 'SecuritySystemAlarmType': '0000008E-0000-1000-8000-0026BB765291', - '00000066-0000-1000-8000-0026BB765291': 'SecuritySystemCurrentState', - 'SecuritySystemCurrentState': '00000066-0000-1000-8000-0026BB765291', - '00000067-0000-1000-8000-0026BB765291': 'SecuritySystemTargetState', - 'SecuritySystemTargetState': '00000067-0000-1000-8000-0026BB765291', - '00000128-0000-1000-8000-0026BB765291': 'SelectedAudioStreamConfiguration', - 'SelectedAudioStreamConfiguration': '00000128-0000-1000-8000-0026BB765291', - '00000209-0000-1000-8000-0026BB765291': 'SelectedCameraRecordingConfiguration', - 'SelectedCameraRecordingConfiguration': '00000209-0000-1000-8000-0026BB765291', - '0000024D-0000-1000-8000-0026BB765291': 'SelectedDiagnosticsModes', - 'SelectedDiagnosticsModes': '0000024D-0000-1000-8000-0026BB765291', - '00000117-0000-1000-8000-0026BB765291': 'SelectedRTPStreamConfiguration', - 'SelectedRTPStreamConfiguration': '00000117-0000-1000-8000-0026BB765291', - '00000252-0000-1000-8000-0026BB765291': 'SelectedSleepConfiguration', - 'SelectedSleepConfiguration': '00000252-0000-1000-8000-0026BB765291', - '00000030-0000-1000-8000-0026BB765291': 'SerialNumber', - 'SerialNumber': '00000030-0000-1000-8000-0026BB765291', - '000000CB-0000-1000-8000-0026BB765291': 'ServiceLabelIndex', - 'ServiceLabelIndex': '000000CB-0000-1000-8000-0026BB765291', - '000000CD-0000-1000-8000-0026BB765291': 'ServiceLabelNamespace', - 'ServiceLabelNamespace': '000000CD-0000-1000-8000-0026BB765291', - '000000D3-0000-1000-8000-0026BB765291': 'SetDuration', - 'SetDuration': '000000D3-0000-1000-8000-0026BB765291', - '00000131-0000-1000-8000-0026BB765291': 'SetupDataStreamTransport', - 'SetupDataStreamTransport': '00000131-0000-1000-8000-0026BB765291', - '00000118-0000-1000-8000-0026BB765291': 'SetupEndpoints', - 'SetupEndpoints': '00000118-0000-1000-8000-0026BB765291', - '00000201-0000-1000-8000-0026BB765291': 'SetupTransferTransport', - 'SetupTransferTransport': '00000201-0000-1000-8000-0026BB765291', - '00000241-0000-1000-8000-0026BB765291': 'SignalToNoiseRatio', - 'SignalToNoiseRatio': '00000241-0000-1000-8000-0026BB765291', - '00000255-0000-1000-8000-0026BB765291': 'SiriEnable', - 'SiriEnable': '00000255-0000-1000-8000-0026BB765291', - '00000254-0000-1000-8000-0026BB765291': 'SiriEndpointSessionStatus', - 'SiriEndpointSessionStatus': '00000254-0000-1000-8000-0026BB765291', - '0000025A-0000-1000-8000-0026BB765291': 'SiriEngineVersion', - 'SiriEngineVersion': '0000025A-0000-1000-8000-0026BB765291', - '00000132-0000-1000-8000-0026BB765291': 'SiriInputType', - 'SiriInputType': '00000132-0000-1000-8000-0026BB765291', - '00000258-0000-1000-8000-0026BB765291': 'SiriLightOnUse', - 'SiriLightOnUse': '00000258-0000-1000-8000-0026BB765291', - '00000256-0000-1000-8000-0026BB765291': 'SiriListening', - 'SiriListening': '00000256-0000-1000-8000-0026BB765291', - '00000257-0000-1000-8000-0026BB765291': 'SiriTouchToUse', - 'SiriTouchToUse': '00000257-0000-1000-8000-0026BB765291', - '000000C0-0000-1000-8000-0026BB765291': 'SlatType', - 'SlatType': '000000C0-0000-1000-8000-0026BB765291', - '000000E8-0000-1000-8000-0026BB765291': 'SleepDiscoveryMode', - 'SleepDiscoveryMode': '000000E8-0000-1000-8000-0026BB765291', - '0000023A-0000-1000-8000-0026BB765291': 'SleepInterval', - 'SleepInterval': '0000023A-0000-1000-8000-0026BB765291', - '00000076-0000-1000-8000-0026BB765291': 'SmokeDetected', - 'SmokeDetected': '00000076-0000-1000-8000-0026BB765291', - '00000054-0000-1000-8000-0026BB765291': 'SoftwareRevision', - 'SoftwareRevision': '00000054-0000-1000-8000-0026BB765291', - '00000249-0000-1000-8000-0026BB765291': 'StagedFirmwareVersion', - 'StagedFirmwareVersion': '00000249-0000-1000-8000-0026BB765291', - '00000075-0000-1000-8000-0026BB765291': 'StatusActive', - 'StatusActive': '00000075-0000-1000-8000-0026BB765291', - '00000077-0000-1000-8000-0026BB765291': 'StatusFault', - 'StatusFault': '00000077-0000-1000-8000-0026BB765291', - '00000078-0000-1000-8000-0026BB765291': 'StatusJammed', - 'StatusJammed': '00000078-0000-1000-8000-0026BB765291', - '00000079-0000-1000-8000-0026BB765291': 'StatusLowBattery', - 'StatusLowBattery': '00000079-0000-1000-8000-0026BB765291', - '0000007A-0000-1000-8000-0026BB765291': 'StatusTampered', - 'StatusTampered': '0000007A-0000-1000-8000-0026BB765291', - '00000120-0000-1000-8000-0026BB765291': 'StreamingStatus', - 'StreamingStatus': '00000120-0000-1000-8000-0026BB765291', - '000000C5-0000-1000-8000-0026BB765291': 'SulphurDioxideDensity', - 'SulphurDioxideDensity': '000000C5-0000-1000-8000-0026BB765291', - '00000268-0000-1000-8000-0026BB765291': 'SupportedAssetTypes', - 'SupportedAssetTypes': '00000268-0000-1000-8000-0026BB765291', - '00000207-0000-1000-8000-0026BB765291': 'SupportedAudioRecordingConfiguration', - 'SupportedAudioRecordingConfiguration': '00000207-0000-1000-8000-0026BB765291', - '00000115-0000-1000-8000-0026BB765291': 'SupportedAudioStreamConfiguration', - 'SupportedAudioStreamConfiguration': '00000115-0000-1000-8000-0026BB765291', - '00000205-0000-1000-8000-0026BB765291': 'SupportedCameraRecordingConfiguration', - 'SupportedCameraRecordingConfiguration': '00000205-0000-1000-8000-0026BB765291', - '00000144-0000-1000-8000-0026BB765291': 'SupportedCharacteristicValueTransitionConfiguration', - 'SupportedCharacteristicValueTransitionConfiguration': '00000144-0000-1000-8000-0026BB765291', - '00000130-0000-1000-8000-0026BB765291': 'SupportedDataStreamTransportConfiguration', - 'SupportedDataStreamTransportConfiguration': '00000130-0000-1000-8000-0026BB765291', - '0000024C-0000-1000-8000-0026BB765291': 'SupportedDiagnosticsModes', - 'SupportedDiagnosticsModes': '0000024C-0000-1000-8000-0026BB765291', - '00000238-0000-1000-8000-0026BB765291': 'SupportedDiagnosticsSnapshot', - 'SupportedDiagnosticsSnapshot': '00000238-0000-1000-8000-0026BB765291', - '00000233-0000-1000-8000-0026BB765291': 'SupportedFirmwareUpdateConfiguration', - 'SupportedFirmwareUpdateConfiguration': '00000233-0000-1000-8000-0026BB765291', - '00000271-0000-1000-8000-0026BB765291': 'SupportedMetrics', - 'SupportedMetrics': '00000271-0000-1000-8000-0026BB765291', - '00000210-0000-1000-8000-0026BB765291': 'SupportedRouterConfiguration', - 'SupportedRouterConfiguration': '00000210-0000-1000-8000-0026BB765291', - '00000116-0000-1000-8000-0026BB765291': 'SupportedRTPConfiguration', - 'SupportedRTPConfiguration': '00000116-0000-1000-8000-0026BB765291', - '00000251-0000-1000-8000-0026BB765291': 'SupportedSleepConfiguration', - 'SupportedSleepConfiguration': '00000251-0000-1000-8000-0026BB765291', - '00000202-0000-1000-8000-0026BB765291': 'SupportedTransferTransportConfiguration', - 'SupportedTransferTransportConfiguration': '00000202-0000-1000-8000-0026BB765291', - '00000206-0000-1000-8000-0026BB765291': 'SupportedVideoRecordingConfiguration', - 'SupportedVideoRecordingConfiguration': '00000206-0000-1000-8000-0026BB765291', - '00000114-0000-1000-8000-0026BB765291': 'SupportedVideoStreamConfiguration', - 'SupportedVideoStreamConfiguration': '00000114-0000-1000-8000-0026BB765291', - '000000B6-0000-1000-8000-0026BB765291': 'SwingMode', - 'SwingMode': '000000B6-0000-1000-8000-0026BB765291', - '0000022F-0000-1000-8000-0026BB765291': 'TapType', - 'TapType': '0000022F-0000-1000-8000-0026BB765291', - '000000A8-0000-1000-8000-0026BB765291': 'TargetAirPurifierState', - 'TargetAirPurifierState': '000000A8-0000-1000-8000-0026BB765291', - '00000124-0000-1000-8000-0026BB765291': 'TargetControlList', - 'TargetControlList': '00000124-0000-1000-8000-0026BB765291', - '00000123-0000-1000-8000-0026BB765291': 'TargetControlSupportedConfiguration', - 'TargetControlSupportedConfiguration': '00000123-0000-1000-8000-0026BB765291', - '00000032-0000-1000-8000-0026BB765291': 'TargetDoorState', - 'TargetDoorState': '00000032-0000-1000-8000-0026BB765291', - '000000BF-0000-1000-8000-0026BB765291': 'TargetFanState', - 'TargetFanState': '000000BF-0000-1000-8000-0026BB765291', - '000000B2-0000-1000-8000-0026BB765291': 'TargetHeaterCoolerState', - 'TargetHeaterCoolerState': '000000B2-0000-1000-8000-0026BB765291', - '00000033-0000-1000-8000-0026BB765291': 'TargetHeatingCoolingState', - 'TargetHeatingCoolingState': '00000033-0000-1000-8000-0026BB765291', - '0000007B-0000-1000-8000-0026BB765291': 'TargetHorizontalTiltAngle', - 'TargetHorizontalTiltAngle': '0000007B-0000-1000-8000-0026BB765291', - '000000B4-0000-1000-8000-0026BB765291': 'TargetHumidifierDehumidifierState', - 'TargetHumidifierDehumidifierState': '000000B4-0000-1000-8000-0026BB765291', - '00000137-0000-1000-8000-0026BB765291': 'TargetMediaState', - 'TargetMediaState': '00000137-0000-1000-8000-0026BB765291', - '0000007C-0000-1000-8000-0026BB765291': 'TargetPosition', - 'TargetPosition': '0000007C-0000-1000-8000-0026BB765291', - '00000034-0000-1000-8000-0026BB765291': 'TargetRelativeHumidity', - 'TargetRelativeHumidity': '00000034-0000-1000-8000-0026BB765291', - '00000035-0000-1000-8000-0026BB765291': 'TargetTemperature', - 'TargetTemperature': '00000035-0000-1000-8000-0026BB765291', - '000000C2-0000-1000-8000-0026BB765291': 'TargetTiltAngle', - 'TargetTiltAngle': '000000C2-0000-1000-8000-0026BB765291', - '0000007D-0000-1000-8000-0026BB765291': 'TargetVerticalTiltAngle', - 'TargetVerticalTiltAngle': '0000007D-0000-1000-8000-0026BB765291', - '00000134-0000-1000-8000-0026BB765291': 'TargetVisibilityState', - 'TargetVisibilityState': '00000134-0000-1000-8000-0026BB765291', - '00000036-0000-1000-8000-0026BB765291': 'TemperatureDisplayUnits', - 'TemperatureDisplayUnits': '00000036-0000-1000-8000-0026BB765291', - '0000021C-0000-1000-8000-0026BB765291': 'ThirdPartyCameraActive', - 'ThirdPartyCameraActive': '0000021C-0000-1000-8000-0026BB765291', - '00000704-0000-1000-8000-0026BB765291': 'ThreadControlPoint', - 'ThreadControlPoint': '00000704-0000-1000-8000-0026BB765291', - '00000702-0000-1000-8000-0026BB765291': 'ThreadNodeCapabilities', - 'ThreadNodeCapabilities': '00000702-0000-1000-8000-0026BB765291', - '00000706-0000-1000-8000-0026BB765291': 'ThreadOpenThreadVersion', - 'ThreadOpenThreadVersion': '00000706-0000-1000-8000-0026BB765291', - '00000703-0000-1000-8000-0026BB765291': 'ThreadStatus', - 'ThreadStatus': '00000703-0000-1000-8000-0026BB765291', - '00000231-0000-1000-8000-0026BB765291': 'Token', - 'Token': '00000231-0000-1000-8000-0026BB765291', - '00000242-0000-1000-8000-0026BB765291': 'TransmitPower', - 'TransmitPower': '00000242-0000-1000-8000-0026BB765291', - '00000061-0000-1000-8000-0026BB765291': 'TunnelConnectionTimeout', - 'TunnelConnectionTimeout': '00000061-0000-1000-8000-0026BB765291', - '00000060-0000-1000-8000-0026BB765291': 'TunneledAccessoryAdvertising', - 'TunneledAccessoryAdvertising': '00000060-0000-1000-8000-0026BB765291', - '00000059-0000-1000-8000-0026BB765291': 'TunneledAccessoryConnected', - 'TunneledAccessoryConnected': '00000059-0000-1000-8000-0026BB765291', - '00000058-0000-1000-8000-0026BB765291': 'TunneledAccessoryStateNumber', - 'TunneledAccessoryStateNumber': '00000058-0000-1000-8000-0026BB765291', - '000000D5-0000-1000-8000-0026BB765291': 'ValveType', - 'ValveType': '000000D5-0000-1000-8000-0026BB765291', - '00000037-0000-1000-8000-0026BB765291': 'Version', - 'Version': '00000037-0000-1000-8000-0026BB765291', - '00000229-0000-1000-8000-0026BB765291': 'VideoAnalysisActive', - 'VideoAnalysisActive': '00000229-0000-1000-8000-0026BB765291', - '000000C8-0000-1000-8000-0026BB765291': 'VOCDensity', - 'VOCDensity': '000000C8-0000-1000-8000-0026BB765291', - '00000119-0000-1000-8000-0026BB765291': 'Volume', - 'Volume': '00000119-0000-1000-8000-0026BB765291', - '000000E9-0000-1000-8000-0026BB765291': 'VolumeControlType', - 'VolumeControlType': '000000E9-0000-1000-8000-0026BB765291', - '000000EA-0000-1000-8000-0026BB765291': 'VolumeSelector', - 'VolumeSelector': '000000EA-0000-1000-8000-0026BB765291', - '00000222-0000-1000-8000-0026BB765291': 'WakeConfiguration', - 'WakeConfiguration': '00000222-0000-1000-8000-0026BB765291', - '00000211-0000-1000-8000-0026BB765291': 'WANConfigurationList', - 'WANConfigurationList': '00000211-0000-1000-8000-0026BB765291', - '00000212-0000-1000-8000-0026BB765291': 'WANStatusList', - 'WANStatusList': '00000212-0000-1000-8000-0026BB765291', - '000000B5-0000-1000-8000-0026BB765291': 'WaterLevel', - 'WaterLevel': '000000B5-0000-1000-8000-0026BB765291', - '0000022C-0000-1000-8000-0026BB765291': 'WiFiCapabilities', - 'WiFiCapabilities': '0000022C-0000-1000-8000-0026BB765291', - '0000022D-0000-1000-8000-0026BB765291': 'WiFiConfigurationControl', - 'WiFiConfigurationControl': '0000022D-0000-1000-8000-0026BB765291', - '0000021E-0000-1000-8000-0026BB765291': 'WiFiSatelliteStatus', - 'WiFiSatelliteStatus': '0000021E-0000-1000-8000-0026BB765291', -}; + '00000262-0000-1000-8000-0026BB765291': 'AccessCodeControlPoint', + 'AccessCodeControlPoint': '00000262-0000-1000-8000-0026BB765291', + '00000261-0000-1000-8000-0026BB765291': 'AccessCodeSupportedConfiguration', + 'AccessCodeSupportedConfiguration': '00000261-0000-1000-8000-0026BB765291', + '000000E5-0000-1000-8000-0026BB765291': 'AccessControlLevel', + 'AccessControlLevel': '000000E5-0000-1000-8000-0026BB765291', + '000000A6-0000-1000-8000-0026BB765291': 'AccessoryFlags', + 'AccessoryFlags': '000000A6-0000-1000-8000-0026BB765291', + '00000057-0000-1000-8000-0026BB765291': 'AccessoryIdentifier', + 'AccessoryIdentifier': '00000057-0000-1000-8000-0026BB765291', + '000000B0-0000-1000-8000-0026BB765291': 'Active', + 'Active': '000000B0-0000-1000-8000-0026BB765291', + '000000E7-0000-1000-8000-0026BB765291': 'ActiveIdentifier', + 'ActiveIdentifier': '000000E7-0000-1000-8000-0026BB765291', + '0000023B-0000-1000-8000-0026BB765291': 'ActivityInterval', + 'ActivityInterval': '0000023B-0000-1000-8000-0026BB765291', + '00000001-0000-1000-8000-0026BB765291': 'AdministratorOnlyAccess', + 'AdministratorOnlyAccess': '00000001-0000-1000-8000-0026BB765291', + '00000064-0000-1000-8000-0026BB765291': 'AirParticulateDensity', + 'AirParticulateDensity': '00000064-0000-1000-8000-0026BB765291', + '00000065-0000-1000-8000-0026BB765291': 'AirParticulateSize', + 'AirParticulateSize': '00000065-0000-1000-8000-0026BB765291', + '0000025B-0000-1000-8000-0026BB765291': 'AirPlayEnable', + 'AirPlayEnable': '0000025B-0000-1000-8000-0026BB765291', + '00000095-0000-1000-8000-0026BB765291': 'AirQuality', + 'AirQuality': '00000095-0000-1000-8000-0026BB765291', + '000000A4-0000-1000-8000-0026BB765291': 'AppMatchingIdentifier', + 'AppMatchingIdentifier': '000000A4-0000-1000-8000-0026BB765291', + '00000269-0000-1000-8000-0026BB765291': 'AssetUpdateReadiness', + 'AssetUpdateReadiness': '00000269-0000-1000-8000-0026BB765291', + '00000005-0000-1000-8000-0026BB765291': 'AudioFeedback', + 'AudioFeedback': '00000005-0000-1000-8000-0026BB765291', + '00000068-0000-1000-8000-0026BB765291': 'BatteryLevel', + 'BatteryLevel': '00000068-0000-1000-8000-0026BB765291', + '00000008-0000-1000-8000-0026BB765291': 'Brightness', + 'Brightness': '00000008-0000-1000-8000-0026BB765291', + '00000126-0000-1000-8000-0026BB765291': 'ButtonEvent', + 'ButtonEvent': '00000126-0000-1000-8000-0026BB765291', + '0000021D-0000-1000-8000-0026BB765291': 'CameraOperatingModeIndicator', + 'CameraOperatingModeIndicator': '0000021D-0000-1000-8000-0026BB765291', + '00000092-0000-1000-8000-0026BB765291': 'CarbonDioxideDetected', + 'CarbonDioxideDetected': '00000092-0000-1000-8000-0026BB765291', + '00000093-0000-1000-8000-0026BB765291': 'CarbonDioxideLevel', + 'CarbonDioxideLevel': '00000093-0000-1000-8000-0026BB765291', + '00000094-0000-1000-8000-0026BB765291': 'CarbonDioxidePeakLevel', + 'CarbonDioxidePeakLevel': '00000094-0000-1000-8000-0026BB765291', + '00000069-0000-1000-8000-0026BB765291': 'CarbonMonoxideDetected', + 'CarbonMonoxideDetected': '00000069-0000-1000-8000-0026BB765291', + '00000090-0000-1000-8000-0026BB765291': 'CarbonMonoxideLevel', + 'CarbonMonoxideLevel': '00000090-0000-1000-8000-0026BB765291', + '00000091-0000-1000-8000-0026BB765291': 'CarbonMonoxidePeakLevel', + 'CarbonMonoxidePeakLevel': '00000091-0000-1000-8000-0026BB765291', + '00000246-0000-1000-8000-0026BB765291': 'CCAEnergyDetectThreshold', + 'CCAEnergyDetectThreshold': '00000246-0000-1000-8000-0026BB765291', + '00000245-0000-1000-8000-0026BB765291': 'CCASignalDetectThreshold', + 'CCASignalDetectThreshold': '00000245-0000-1000-8000-0026BB765291', + '0000024B-0000-1000-8000-0026BB765291': 'CharacteristicValueActiveTransitionCount', + 'CharacteristicValueActiveTransitionCount': '0000024B-0000-1000-8000-0026BB765291', + '00000143-0000-1000-8000-0026BB765291': 'CharacteristicValueTransitionControl', + 'CharacteristicValueTransitionControl': '00000143-0000-1000-8000-0026BB765291', + '0000008F-0000-1000-8000-0026BB765291': 'ChargingState', + 'ChargingState': '0000008F-0000-1000-8000-0026BB765291', + '000000DD-0000-1000-8000-0026BB765291': 'ClosedCaptions', + 'ClosedCaptions': '000000DD-0000-1000-8000-0026BB765291', + '000000CE-0000-1000-8000-0026BB765291': 'ColorTemperature', + 'ColorTemperature': '000000CE-0000-1000-8000-0026BB765291', + '00000263-0000-1000-8000-0026BB765291': 'ConfigurationState', + 'ConfigurationState': '00000263-0000-1000-8000-0026BB765291', + '000000E3-0000-1000-8000-0026BB765291': 'ConfiguredName', + 'ConfiguredName': '000000E3-0000-1000-8000-0026BB765291', + '0000006A-0000-1000-8000-0026BB765291': 'ContactSensorState', + 'ContactSensorState': '0000006A-0000-1000-8000-0026BB765291', + '0000000D-0000-1000-8000-0026BB765291': 'CoolingThresholdTemperature', + 'CoolingThresholdTemperature': '0000000D-0000-1000-8000-0026BB765291', + '00000250-0000-1000-8000-0026BB765291': 'CryptoHash', + 'CryptoHash': '00000250-0000-1000-8000-0026BB765291', + '000000A9-0000-1000-8000-0026BB765291': 'CurrentAirPurifierState', + 'CurrentAirPurifierState': '000000A9-0000-1000-8000-0026BB765291', + '0000006B-0000-1000-8000-0026BB765291': 'CurrentAmbientLightLevel', + 'CurrentAmbientLightLevel': '0000006B-0000-1000-8000-0026BB765291', + '0000000E-0000-1000-8000-0026BB765291': 'CurrentDoorState', + 'CurrentDoorState': '0000000E-0000-1000-8000-0026BB765291', + '000000AF-0000-1000-8000-0026BB765291': 'CurrentFanState', + 'CurrentFanState': '000000AF-0000-1000-8000-0026BB765291', + '000000B1-0000-1000-8000-0026BB765291': 'CurrentHeaterCoolerState', + 'CurrentHeaterCoolerState': '000000B1-0000-1000-8000-0026BB765291', + '0000000F-0000-1000-8000-0026BB765291': 'CurrentHeatingCoolingState', + 'CurrentHeatingCoolingState': '0000000F-0000-1000-8000-0026BB765291', + '0000006C-0000-1000-8000-0026BB765291': 'CurrentHorizontalTiltAngle', + 'CurrentHorizontalTiltAngle': '0000006C-0000-1000-8000-0026BB765291', + '000000B3-0000-1000-8000-0026BB765291': 'CurrentHumidifierDehumidifierState', + 'CurrentHumidifierDehumidifierState': '000000B3-0000-1000-8000-0026BB765291', + '000000E0-0000-1000-8000-0026BB765291': 'CurrentMediaState', + 'CurrentMediaState': '000000E0-0000-1000-8000-0026BB765291', + '0000006D-0000-1000-8000-0026BB765291': 'CurrentPosition', + 'CurrentPosition': '0000006D-0000-1000-8000-0026BB765291', + '00000010-0000-1000-8000-0026BB765291': 'CurrentRelativeHumidity', + 'CurrentRelativeHumidity': '00000010-0000-1000-8000-0026BB765291', + '000000AA-0000-1000-8000-0026BB765291': 'CurrentSlatState', + 'CurrentSlatState': '000000AA-0000-1000-8000-0026BB765291', + '00000011-0000-1000-8000-0026BB765291': 'CurrentTemperature', + 'CurrentTemperature': '00000011-0000-1000-8000-0026BB765291', + '000000C1-0000-1000-8000-0026BB765291': 'CurrentTiltAngle', + 'CurrentTiltAngle': '000000C1-0000-1000-8000-0026BB765291', + '0000022B-0000-1000-8000-0026BB765291': 'CurrentTransport', + 'CurrentTransport': '0000022B-0000-1000-8000-0026BB765291', + '0000006E-0000-1000-8000-0026BB765291': 'CurrentVerticalTiltAngle', + 'CurrentVerticalTiltAngle': '0000006E-0000-1000-8000-0026BB765291', + '00000135-0000-1000-8000-0026BB765291': 'CurrentVisibilityState', + 'CurrentVisibilityState': '00000135-0000-1000-8000-0026BB765291', + '00000138-0000-1000-8000-0026BB765291': 'DataStreamHAPTransport', + 'DataStreamHAPTransport': '00000138-0000-1000-8000-0026BB765291', + '00000139-0000-1000-8000-0026BB765291': 'DataStreamHAPTransportInterrupt', + 'DataStreamHAPTransportInterrupt': '00000139-0000-1000-8000-0026BB765291', + '00000224-0000-1000-8000-0026BB765291': 'DiagonalFieldOfView', + 'DiagonalFieldOfView': '00000224-0000-1000-8000-0026BB765291', + '0000011D-0000-1000-8000-0026BB765291': 'DigitalZoom', + 'DigitalZoom': '0000011D-0000-1000-8000-0026BB765291', + '00000136-0000-1000-8000-0026BB765291': 'DisplayOrder', + 'DisplayOrder': '00000136-0000-1000-8000-0026BB765291', + '0000023D-0000-1000-8000-0026BB765291': 'EventRetransmissionMaximum', + 'EventRetransmissionMaximum': '0000023D-0000-1000-8000-0026BB765291', + '00000223-0000-1000-8000-0026BB765291': 'EventSnapshotsActive', + 'EventSnapshotsActive': '00000223-0000-1000-8000-0026BB765291', + '0000023E-0000-1000-8000-0026BB765291': 'EventTransmissionCounters', + 'EventTransmissionCounters': '0000023E-0000-1000-8000-0026BB765291', + '000000AC-0000-1000-8000-0026BB765291': 'FilterChangeIndication', + 'FilterChangeIndication': '000000AC-0000-1000-8000-0026BB765291', + '000000AB-0000-1000-8000-0026BB765291': 'FilterLifeLevel', + 'FilterLifeLevel': '000000AB-0000-1000-8000-0026BB765291', + '00000052-0000-1000-8000-0026BB765291': 'FirmwareRevision', + 'FirmwareRevision': '00000052-0000-1000-8000-0026BB765291', + '00000234-0000-1000-8000-0026BB765291': 'FirmwareUpdateReadiness', + 'FirmwareUpdateReadiness': '00000234-0000-1000-8000-0026BB765291', + '00000235-0000-1000-8000-0026BB765291': 'FirmwareUpdateStatus', + 'FirmwareUpdateStatus': '00000235-0000-1000-8000-0026BB765291', + '0000026C-0000-1000-8000-0026BB765291': 'HardwareFinish', + 'HardwareFinish': '0000026C-0000-1000-8000-0026BB765291', + '00000053-0000-1000-8000-0026BB765291': 'HardwareRevision', + 'HardwareRevision': '00000053-0000-1000-8000-0026BB765291', + '0000024A-0000-1000-8000-0026BB765291': 'HeartBeat', + 'HeartBeat': '0000024A-0000-1000-8000-0026BB765291', + '00000012-0000-1000-8000-0026BB765291': 'HeatingThresholdTemperature', + 'HeatingThresholdTemperature': '00000012-0000-1000-8000-0026BB765291', + '0000006F-0000-1000-8000-0026BB765291': 'HoldPosition', + 'HoldPosition': '0000006F-0000-1000-8000-0026BB765291', + '0000021B-0000-1000-8000-0026BB765291': 'HomeKitCameraActive', + 'HomeKitCameraActive': '0000021B-0000-1000-8000-0026BB765291', + '00000013-0000-1000-8000-0026BB765291': 'Hue', + 'Hue': '00000013-0000-1000-8000-0026BB765291', + '000000E6-0000-1000-8000-0026BB765291': 'Identifier', + 'Identifier': '000000E6-0000-1000-8000-0026BB765291', + '00000014-0000-1000-8000-0026BB765291': 'Identify', + 'Identify': '00000014-0000-1000-8000-0026BB765291', + '0000011F-0000-1000-8000-0026BB765291': 'ImageMirroring', + 'ImageMirroring': '0000011F-0000-1000-8000-0026BB765291', + '0000011E-0000-1000-8000-0026BB765291': 'ImageRotation', + 'ImageRotation': '0000011E-0000-1000-8000-0026BB765291', + '000000DC-0000-1000-8000-0026BB765291': 'InputDeviceType', + 'InputDeviceType': '000000DC-0000-1000-8000-0026BB765291', + '000000DB-0000-1000-8000-0026BB765291': 'InputSourceType', + 'InputSourceType': '000000DB-0000-1000-8000-0026BB765291', + '000000D2-0000-1000-8000-0026BB765291': 'InUse', + 'InUse': '000000D2-0000-1000-8000-0026BB765291', + '000000D6-0000-1000-8000-0026BB765291': 'IsConfigured', + 'IsConfigured': '000000D6-0000-1000-8000-0026BB765291', + '00000070-0000-1000-8000-0026BB765291': 'LeakDetected', + 'LeakDetected': '00000070-0000-1000-8000-0026BB765291', + '00000050-0000-1000-8000-0026BB765291': 'ListPairings', + 'ListPairings': '00000050-0000-1000-8000-0026BB765291', + '00000019-0000-1000-8000-0026BB765291': 'LockControlPoint', + 'LockControlPoint': '00000019-0000-1000-8000-0026BB765291', + '0000001D-0000-1000-8000-0026BB765291': 'LockCurrentState', + 'LockCurrentState': '0000001D-0000-1000-8000-0026BB765291', + '0000001C-0000-1000-8000-0026BB765291': 'LockLastKnownAction', + 'LockLastKnownAction': '0000001C-0000-1000-8000-0026BB765291', + '0000001A-0000-1000-8000-0026BB765291': 'LockManagementAutoSecurityTimeout', + 'LockManagementAutoSecurityTimeout': '0000001A-0000-1000-8000-0026BB765291', + '000000A7-0000-1000-8000-0026BB765291': 'LockPhysicalControls', + 'LockPhysicalControls': '000000A7-0000-1000-8000-0026BB765291', + '0000001E-0000-1000-8000-0026BB765291': 'LockTargetState', + 'LockTargetState': '0000001E-0000-1000-8000-0026BB765291', + '0000001F-0000-1000-8000-0026BB765291': 'Logs', + 'Logs': '0000001F-0000-1000-8000-0026BB765291', + '00000247-0000-1000-8000-0026BB765291': 'MACRetransmissionMaximum', + 'MACRetransmissionMaximum': '00000247-0000-1000-8000-0026BB765291', + '00000248-0000-1000-8000-0026BB765291': 'MACTransmissionCounters', + 'MACTransmissionCounters': '00000248-0000-1000-8000-0026BB765291', + '00000215-0000-1000-8000-0026BB765291': 'ManagedNetworkEnable', + 'ManagedNetworkEnable': '00000215-0000-1000-8000-0026BB765291', + '00000227-0000-1000-8000-0026BB765291': 'ManuallyDisabled', + 'ManuallyDisabled': '00000227-0000-1000-8000-0026BB765291', + '00000020-0000-1000-8000-0026BB765291': 'Manufacturer', + 'Manufacturer': '00000020-0000-1000-8000-0026BB765291', + '0000026D-0000-1000-8000-0026BB765291': 'MatterFirmwareRevisionNumber', + 'MatterFirmwareRevisionNumber': '0000026D-0000-1000-8000-0026BB765291', + '0000026E-0000-1000-8000-0026BB765291': 'MatterFirmwareUpdateStatus', + 'MatterFirmwareUpdateStatus': '0000026E-0000-1000-8000-0026BB765291', + '00000243-0000-1000-8000-0026BB765291': 'MaximumTransmitPower', + 'MaximumTransmitPower': '00000243-0000-1000-8000-0026BB765291', + '00000272-0000-1000-8000-0026BB765291': 'MetricsBufferFullState', + 'MetricsBufferFullState': '00000272-0000-1000-8000-0026BB765291', + '00000021-0000-1000-8000-0026BB765291': 'Model', + 'Model': '00000021-0000-1000-8000-0026BB765291', + '00000022-0000-1000-8000-0026BB765291': 'MotionDetected', + 'MotionDetected': '00000022-0000-1000-8000-0026BB765291', + '0000026B-0000-1000-8000-0026BB765291': 'MultifunctionButton', + 'MultifunctionButton': '0000026B-0000-1000-8000-0026BB765291', + '0000011A-0000-1000-8000-0026BB765291': 'Mute', + 'Mute': '0000011A-0000-1000-8000-0026BB765291', + '00000023-0000-1000-8000-0026BB765291': 'Name', + 'Name': '00000023-0000-1000-8000-0026BB765291', + '0000021F-0000-1000-8000-0026BB765291': 'NetworkAccessViolationControl', + 'NetworkAccessViolationControl': '0000021F-0000-1000-8000-0026BB765291', + '0000020C-0000-1000-8000-0026BB765291': 'NetworkClientProfileControl', + 'NetworkClientProfileControl': '0000020C-0000-1000-8000-0026BB765291', + '0000020D-0000-1000-8000-0026BB765291': 'NetworkClientStatusControl', + 'NetworkClientStatusControl': '0000020D-0000-1000-8000-0026BB765291', + '00000264-0000-1000-8000-0026BB765291': 'NFCAccessControlPoint', + 'NFCAccessControlPoint': '00000264-0000-1000-8000-0026BB765291', + '00000265-0000-1000-8000-0026BB765291': 'NFCAccessSupportedConfiguration', + 'NFCAccessSupportedConfiguration': '00000265-0000-1000-8000-0026BB765291', + '0000011B-0000-1000-8000-0026BB765291': 'NightVision', + 'NightVision': '0000011B-0000-1000-8000-0026BB765291', + '000000C4-0000-1000-8000-0026BB765291': 'NitrogenDioxideDensity', + 'NitrogenDioxideDensity': '000000C4-0000-1000-8000-0026BB765291', + '00000024-0000-1000-8000-0026BB765291': 'ObstructionDetected', + 'ObstructionDetected': '00000024-0000-1000-8000-0026BB765291', + '00000071-0000-1000-8000-0026BB765291': 'OccupancyDetected', + 'OccupancyDetected': '00000071-0000-1000-8000-0026BB765291', + '00000025-0000-1000-8000-0026BB765291': 'On', + 'On': '00000025-0000-1000-8000-0026BB765291', + '00000232-0000-1000-8000-0026BB765291': 'OperatingStateResponse', + 'OperatingStateResponse': '00000232-0000-1000-8000-0026BB765291', + '0000011C-0000-1000-8000-0026BB765291': 'OpticalZoom', + 'OpticalZoom': '0000011C-0000-1000-8000-0026BB765291', + '00000026-0000-1000-8000-0026BB765291': 'OutletInUse', + 'OutletInUse': '00000026-0000-1000-8000-0026BB765291', + '000000C3-0000-1000-8000-0026BB765291': 'OzoneDensity', + 'OzoneDensity': '000000C3-0000-1000-8000-0026BB765291', + '0000004F-0000-1000-8000-0026BB765291': 'PairingFeatures', + 'PairingFeatures': '0000004F-0000-1000-8000-0026BB765291', + '0000004C-0000-1000-8000-0026BB765291': 'PairSetup', + 'PairSetup': '0000004C-0000-1000-8000-0026BB765291', + '0000004E-0000-1000-8000-0026BB765291': 'PairVerify', + 'PairVerify': '0000004E-0000-1000-8000-0026BB765291', + '000000E4-0000-1000-8000-0026BB765291': 'PasswordSetting', + 'PasswordSetting': '000000E4-0000-1000-8000-0026BB765291', + '00000225-0000-1000-8000-0026BB765291': 'PeriodicSnapshotsActive', + 'PeriodicSnapshotsActive': '00000225-0000-1000-8000-0026BB765291', + '000000E2-0000-1000-8000-0026BB765291': 'PictureMode', + 'PictureMode': '000000E2-0000-1000-8000-0026BB765291', + '0000023C-0000-1000-8000-0026BB765291': 'Ping', + 'Ping': '0000023C-0000-1000-8000-0026BB765291', + '000000C7-0000-1000-8000-0026BB765291': 'PM10Density', + 'PM10Density': '000000C7-0000-1000-8000-0026BB765291', + '000000C6-0000-1000-8000-0026BB765291': 'PM2_5Density', + 'PM2_5Density': '000000C6-0000-1000-8000-0026BB765291', + '00000072-0000-1000-8000-0026BB765291': 'PositionState', + 'PositionState': '00000072-0000-1000-8000-0026BB765291', + '000000DF-0000-1000-8000-0026BB765291': 'PowerModeSelection', + 'PowerModeSelection': '000000DF-0000-1000-8000-0026BB765291', + '00000220-0000-1000-8000-0026BB765291': 'ProductData', + 'ProductData': '00000220-0000-1000-8000-0026BB765291', + '00000073-0000-1000-8000-0026BB765291': 'ProgrammableSwitchEvent', + 'ProgrammableSwitchEvent': '00000073-0000-1000-8000-0026BB765291', + '00000074-0000-1000-8000-0026BB765291': 'ProgrammableSwitchOutputState', + 'ProgrammableSwitchOutputState': '00000074-0000-1000-8000-0026BB765291', + '000000D1-0000-1000-8000-0026BB765291': 'ProgramMode', + 'ProgramMode': '000000D1-0000-1000-8000-0026BB765291', + '0000023F-0000-1000-8000-0026BB765291': 'ReceivedSignalStrengthIndication', + 'ReceivedSignalStrengthIndication': '0000023F-0000-1000-8000-0026BB765291', + '00000244-0000-1000-8000-0026BB765291': 'ReceiverSensitivity', + 'ReceiverSensitivity': '00000244-0000-1000-8000-0026BB765291', + '00000226-0000-1000-8000-0026BB765291': 'RecordingAudioActive', + 'RecordingAudioActive': '00000226-0000-1000-8000-0026BB765291', + '000000C9-0000-1000-8000-0026BB765291': 'RelativeHumidityDehumidifierThreshold', + 'RelativeHumidityDehumidifierThreshold': '000000C9-0000-1000-8000-0026BB765291', + '000000CA-0000-1000-8000-0026BB765291': 'RelativeHumidityHumidifierThreshold', + 'RelativeHumidityHumidifierThreshold': '000000CA-0000-1000-8000-0026BB765291', + '000000D4-0000-1000-8000-0026BB765291': 'RemainingDuration', + 'RemainingDuration': '000000D4-0000-1000-8000-0026BB765291', + '000000E1-0000-1000-8000-0026BB765291': 'RemoteKey', + 'RemoteKey': '000000E1-0000-1000-8000-0026BB765291', + '000000AD-0000-1000-8000-0026BB765291': 'ResetFilterIndication', + 'ResetFilterIndication': '000000AD-0000-1000-8000-0026BB765291', + '00000028-0000-1000-8000-0026BB765291': 'RotationDirection', + 'RotationDirection': '00000028-0000-1000-8000-0026BB765291', + '00000029-0000-1000-8000-0026BB765291': 'RotationSpeed', + 'RotationSpeed': '00000029-0000-1000-8000-0026BB765291', + '0000020E-0000-1000-8000-0026BB765291': 'RouterStatus', + 'RouterStatus': '0000020E-0000-1000-8000-0026BB765291', + '0000002F-0000-1000-8000-0026BB765291': 'Saturation', + 'Saturation': '0000002F-0000-1000-8000-0026BB765291', + '0000008E-0000-1000-8000-0026BB765291': 'SecuritySystemAlarmType', + 'SecuritySystemAlarmType': '0000008E-0000-1000-8000-0026BB765291', + '00000066-0000-1000-8000-0026BB765291': 'SecuritySystemCurrentState', + 'SecuritySystemCurrentState': '00000066-0000-1000-8000-0026BB765291', + '00000067-0000-1000-8000-0026BB765291': 'SecuritySystemTargetState', + 'SecuritySystemTargetState': '00000067-0000-1000-8000-0026BB765291', + '00000128-0000-1000-8000-0026BB765291': 'SelectedAudioStreamConfiguration', + 'SelectedAudioStreamConfiguration': '00000128-0000-1000-8000-0026BB765291', + '00000209-0000-1000-8000-0026BB765291': 'SelectedCameraRecordingConfiguration', + 'SelectedCameraRecordingConfiguration': '00000209-0000-1000-8000-0026BB765291', + '0000024D-0000-1000-8000-0026BB765291': 'SelectedDiagnosticsModes', + 'SelectedDiagnosticsModes': '0000024D-0000-1000-8000-0026BB765291', + '00000117-0000-1000-8000-0026BB765291': 'SelectedRTPStreamConfiguration', + 'SelectedRTPStreamConfiguration': '00000117-0000-1000-8000-0026BB765291', + '00000252-0000-1000-8000-0026BB765291': 'SelectedSleepConfiguration', + 'SelectedSleepConfiguration': '00000252-0000-1000-8000-0026BB765291', + '00000030-0000-1000-8000-0026BB765291': 'SerialNumber', + 'SerialNumber': '00000030-0000-1000-8000-0026BB765291', + '000000CB-0000-1000-8000-0026BB765291': 'ServiceLabelIndex', + 'ServiceLabelIndex': '000000CB-0000-1000-8000-0026BB765291', + '000000CD-0000-1000-8000-0026BB765291': 'ServiceLabelNamespace', + 'ServiceLabelNamespace': '000000CD-0000-1000-8000-0026BB765291', + '000000D3-0000-1000-8000-0026BB765291': 'SetDuration', + 'SetDuration': '000000D3-0000-1000-8000-0026BB765291', + '00000131-0000-1000-8000-0026BB765291': 'SetupDataStreamTransport', + 'SetupDataStreamTransport': '00000131-0000-1000-8000-0026BB765291', + '00000118-0000-1000-8000-0026BB765291': 'SetupEndpoints', + 'SetupEndpoints': '00000118-0000-1000-8000-0026BB765291', + '00000201-0000-1000-8000-0026BB765291': 'SetupTransferTransport', + 'SetupTransferTransport': '00000201-0000-1000-8000-0026BB765291', + '00000241-0000-1000-8000-0026BB765291': 'SignalToNoiseRatio', + 'SignalToNoiseRatio': '00000241-0000-1000-8000-0026BB765291', + '00000255-0000-1000-8000-0026BB765291': 'SiriEnable', + 'SiriEnable': '00000255-0000-1000-8000-0026BB765291', + '00000254-0000-1000-8000-0026BB765291': 'SiriEndpointSessionStatus', + 'SiriEndpointSessionStatus': '00000254-0000-1000-8000-0026BB765291', + '0000025A-0000-1000-8000-0026BB765291': 'SiriEngineVersion', + 'SiriEngineVersion': '0000025A-0000-1000-8000-0026BB765291', + '00000132-0000-1000-8000-0026BB765291': 'SiriInputType', + 'SiriInputType': '00000132-0000-1000-8000-0026BB765291', + '00000258-0000-1000-8000-0026BB765291': 'SiriLightOnUse', + 'SiriLightOnUse': '00000258-0000-1000-8000-0026BB765291', + '00000256-0000-1000-8000-0026BB765291': 'SiriListening', + 'SiriListening': '00000256-0000-1000-8000-0026BB765291', + '00000257-0000-1000-8000-0026BB765291': 'SiriTouchToUse', + 'SiriTouchToUse': '00000257-0000-1000-8000-0026BB765291', + '000000C0-0000-1000-8000-0026BB765291': 'SlatType', + 'SlatType': '000000C0-0000-1000-8000-0026BB765291', + '000000E8-0000-1000-8000-0026BB765291': 'SleepDiscoveryMode', + 'SleepDiscoveryMode': '000000E8-0000-1000-8000-0026BB765291', + '0000023A-0000-1000-8000-0026BB765291': 'SleepInterval', + 'SleepInterval': '0000023A-0000-1000-8000-0026BB765291', + '00000076-0000-1000-8000-0026BB765291': 'SmokeDetected', + 'SmokeDetected': '00000076-0000-1000-8000-0026BB765291', + '00000054-0000-1000-8000-0026BB765291': 'SoftwareRevision', + 'SoftwareRevision': '00000054-0000-1000-8000-0026BB765291', + '00000249-0000-1000-8000-0026BB765291': 'StagedFirmwareVersion', + 'StagedFirmwareVersion': '00000249-0000-1000-8000-0026BB765291', + '00000075-0000-1000-8000-0026BB765291': 'StatusActive', + 'StatusActive': '00000075-0000-1000-8000-0026BB765291', + '00000077-0000-1000-8000-0026BB765291': 'StatusFault', + 'StatusFault': '00000077-0000-1000-8000-0026BB765291', + '00000078-0000-1000-8000-0026BB765291': 'StatusJammed', + 'StatusJammed': '00000078-0000-1000-8000-0026BB765291', + '00000079-0000-1000-8000-0026BB765291': 'StatusLowBattery', + 'StatusLowBattery': '00000079-0000-1000-8000-0026BB765291', + '0000007A-0000-1000-8000-0026BB765291': 'StatusTampered', + 'StatusTampered': '0000007A-0000-1000-8000-0026BB765291', + '00000120-0000-1000-8000-0026BB765291': 'StreamingStatus', + 'StreamingStatus': '00000120-0000-1000-8000-0026BB765291', + '000000C5-0000-1000-8000-0026BB765291': 'SulphurDioxideDensity', + 'SulphurDioxideDensity': '000000C5-0000-1000-8000-0026BB765291', + '00000268-0000-1000-8000-0026BB765291': 'SupportedAssetTypes', + 'SupportedAssetTypes': '00000268-0000-1000-8000-0026BB765291', + '00000207-0000-1000-8000-0026BB765291': 'SupportedAudioRecordingConfiguration', + 'SupportedAudioRecordingConfiguration': '00000207-0000-1000-8000-0026BB765291', + '00000115-0000-1000-8000-0026BB765291': 'SupportedAudioStreamConfiguration', + 'SupportedAudioStreamConfiguration': '00000115-0000-1000-8000-0026BB765291', + '00000205-0000-1000-8000-0026BB765291': 'SupportedCameraRecordingConfiguration', + 'SupportedCameraRecordingConfiguration': '00000205-0000-1000-8000-0026BB765291', + '00000144-0000-1000-8000-0026BB765291': 'SupportedCharacteristicValueTransitionConfiguration', + 'SupportedCharacteristicValueTransitionConfiguration': '00000144-0000-1000-8000-0026BB765291', + '00000130-0000-1000-8000-0026BB765291': 'SupportedDataStreamTransportConfiguration', + 'SupportedDataStreamTransportConfiguration': '00000130-0000-1000-8000-0026BB765291', + '0000024C-0000-1000-8000-0026BB765291': 'SupportedDiagnosticsModes', + 'SupportedDiagnosticsModes': '0000024C-0000-1000-8000-0026BB765291', + '00000238-0000-1000-8000-0026BB765291': 'SupportedDiagnosticsSnapshot', + 'SupportedDiagnosticsSnapshot': '00000238-0000-1000-8000-0026BB765291', + '00000233-0000-1000-8000-0026BB765291': 'SupportedFirmwareUpdateConfiguration', + 'SupportedFirmwareUpdateConfiguration': '00000233-0000-1000-8000-0026BB765291', + '00000271-0000-1000-8000-0026BB765291': 'SupportedMetrics', + 'SupportedMetrics': '00000271-0000-1000-8000-0026BB765291', + '00000210-0000-1000-8000-0026BB765291': 'SupportedRouterConfiguration', + 'SupportedRouterConfiguration': '00000210-0000-1000-8000-0026BB765291', + '00000116-0000-1000-8000-0026BB765291': 'SupportedRTPConfiguration', + 'SupportedRTPConfiguration': '00000116-0000-1000-8000-0026BB765291', + '00000251-0000-1000-8000-0026BB765291': 'SupportedSleepConfiguration', + 'SupportedSleepConfiguration': '00000251-0000-1000-8000-0026BB765291', + '00000202-0000-1000-8000-0026BB765291': 'SupportedTransferTransportConfiguration', + 'SupportedTransferTransportConfiguration': '00000202-0000-1000-8000-0026BB765291', + '00000206-0000-1000-8000-0026BB765291': 'SupportedVideoRecordingConfiguration', + 'SupportedVideoRecordingConfiguration': '00000206-0000-1000-8000-0026BB765291', + '00000114-0000-1000-8000-0026BB765291': 'SupportedVideoStreamConfiguration', + 'SupportedVideoStreamConfiguration': '00000114-0000-1000-8000-0026BB765291', + '000000B6-0000-1000-8000-0026BB765291': 'SwingMode', + 'SwingMode': '000000B6-0000-1000-8000-0026BB765291', + '0000022F-0000-1000-8000-0026BB765291': 'TapType', + 'TapType': '0000022F-0000-1000-8000-0026BB765291', + '000000A8-0000-1000-8000-0026BB765291': 'TargetAirPurifierState', + 'TargetAirPurifierState': '000000A8-0000-1000-8000-0026BB765291', + '00000124-0000-1000-8000-0026BB765291': 'TargetControlList', + 'TargetControlList': '00000124-0000-1000-8000-0026BB765291', + '00000123-0000-1000-8000-0026BB765291': 'TargetControlSupportedConfiguration', + 'TargetControlSupportedConfiguration': '00000123-0000-1000-8000-0026BB765291', + '00000032-0000-1000-8000-0026BB765291': 'TargetDoorState', + 'TargetDoorState': '00000032-0000-1000-8000-0026BB765291', + '000000BF-0000-1000-8000-0026BB765291': 'TargetFanState', + 'TargetFanState': '000000BF-0000-1000-8000-0026BB765291', + '000000B2-0000-1000-8000-0026BB765291': 'TargetHeaterCoolerState', + 'TargetHeaterCoolerState': '000000B2-0000-1000-8000-0026BB765291', + '00000033-0000-1000-8000-0026BB765291': 'TargetHeatingCoolingState', + 'TargetHeatingCoolingState': '00000033-0000-1000-8000-0026BB765291', + '0000007B-0000-1000-8000-0026BB765291': 'TargetHorizontalTiltAngle', + 'TargetHorizontalTiltAngle': '0000007B-0000-1000-8000-0026BB765291', + '000000B4-0000-1000-8000-0026BB765291': 'TargetHumidifierDehumidifierState', + 'TargetHumidifierDehumidifierState': '000000B4-0000-1000-8000-0026BB765291', + '00000137-0000-1000-8000-0026BB765291': 'TargetMediaState', + 'TargetMediaState': '00000137-0000-1000-8000-0026BB765291', + '0000007C-0000-1000-8000-0026BB765291': 'TargetPosition', + 'TargetPosition': '0000007C-0000-1000-8000-0026BB765291', + '00000034-0000-1000-8000-0026BB765291': 'TargetRelativeHumidity', + 'TargetRelativeHumidity': '00000034-0000-1000-8000-0026BB765291', + '00000035-0000-1000-8000-0026BB765291': 'TargetTemperature', + 'TargetTemperature': '00000035-0000-1000-8000-0026BB765291', + '000000C2-0000-1000-8000-0026BB765291': 'TargetTiltAngle', + 'TargetTiltAngle': '000000C2-0000-1000-8000-0026BB765291', + '0000007D-0000-1000-8000-0026BB765291': 'TargetVerticalTiltAngle', + 'TargetVerticalTiltAngle': '0000007D-0000-1000-8000-0026BB765291', + '00000134-0000-1000-8000-0026BB765291': 'TargetVisibilityState', + 'TargetVisibilityState': '00000134-0000-1000-8000-0026BB765291', + '00000036-0000-1000-8000-0026BB765291': 'TemperatureDisplayUnits', + 'TemperatureDisplayUnits': '00000036-0000-1000-8000-0026BB765291', + '0000021C-0000-1000-8000-0026BB765291': 'ThirdPartyCameraActive', + 'ThirdPartyCameraActive': '0000021C-0000-1000-8000-0026BB765291', + '00000704-0000-1000-8000-0026BB765291': 'ThreadControlPoint', + 'ThreadControlPoint': '00000704-0000-1000-8000-0026BB765291', + '00000702-0000-1000-8000-0026BB765291': 'ThreadNodeCapabilities', + 'ThreadNodeCapabilities': '00000702-0000-1000-8000-0026BB765291', + '00000706-0000-1000-8000-0026BB765291': 'ThreadOpenThreadVersion', + 'ThreadOpenThreadVersion': '00000706-0000-1000-8000-0026BB765291', + '00000703-0000-1000-8000-0026BB765291': 'ThreadStatus', + 'ThreadStatus': '00000703-0000-1000-8000-0026BB765291', + '00000231-0000-1000-8000-0026BB765291': 'Token', + 'Token': '00000231-0000-1000-8000-0026BB765291', + '00000242-0000-1000-8000-0026BB765291': 'TransmitPower', + 'TransmitPower': '00000242-0000-1000-8000-0026BB765291', + '000000D5-0000-1000-8000-0026BB765291': 'ValveType', + 'ValveType': '000000D5-0000-1000-8000-0026BB765291', + '00000037-0000-1000-8000-0026BB765291': 'Version', + 'Version': '00000037-0000-1000-8000-0026BB765291', + '00000229-0000-1000-8000-0026BB765291': 'VideoAnalysisActive', + 'VideoAnalysisActive': '00000229-0000-1000-8000-0026BB765291', + '000000C8-0000-1000-8000-0026BB765291': 'VOCDensity', + 'VOCDensity': '000000C8-0000-1000-8000-0026BB765291', + '00000119-0000-1000-8000-0026BB765291': 'Volume', + 'Volume': '00000119-0000-1000-8000-0026BB765291', + '000000E9-0000-1000-8000-0026BB765291': 'VolumeControlType', + 'VolumeControlType': '000000E9-0000-1000-8000-0026BB765291', + '000000EA-0000-1000-8000-0026BB765291': 'VolumeSelector', + 'VolumeSelector': '000000EA-0000-1000-8000-0026BB765291', + '00000222-0000-1000-8000-0026BB765291': 'WakeConfiguration', + 'WakeConfiguration': '00000222-0000-1000-8000-0026BB765291', + '00000211-0000-1000-8000-0026BB765291': 'WANConfigurationList', + 'WANConfigurationList': '00000211-0000-1000-8000-0026BB765291', + '00000212-0000-1000-8000-0026BB765291': 'WANStatusList', + 'WANStatusList': '00000212-0000-1000-8000-0026BB765291', + '000000B5-0000-1000-8000-0026BB765291': 'WaterLevel', + 'WaterLevel': '000000B5-0000-1000-8000-0026BB765291', + '0000022C-0000-1000-8000-0026BB765291': 'WiFiCapabilities', + 'WiFiCapabilities': '0000022C-0000-1000-8000-0026BB765291', + '0000022D-0000-1000-8000-0026BB765291': 'WiFiConfigurationControl', + 'WiFiConfigurationControl': '0000022D-0000-1000-8000-0026BB765291', + '0000021E-0000-1000-8000-0026BB765291': 'WiFiSatelliteStatus', + 'WiFiSatelliteStatus': '0000021E-0000-1000-8000-0026BB765291', +} export const Categories = { - 'OTHER': 1, - 'BRIDGE': 2, - 'FAN': 3, - 'GARAGE_DOOR_OPENER': 4, - 'LIGHTBULB': 5, - 'DOOR_LOCK': 6, - 'OUTLET': 7, - 'SWITCH': 8, - 'THERMOSTAT': 9, - 'SENSOR': 10, - 'ALARM_SYSTEM': 11, - 'SECURITY_SYSTEM': 11, - 'DOOR': 12, - 'WINDOW': 13, - 'WINDOW_COVERING': 14, - 'PROGRAMMABLE_SWITCH': 15, - 'RANGE_EXTENDER': 16, - 'CAMERA': 17, - 'IP_CAMERA': 17, - 'VIDEO_DOORBELL': 18, - 'AIR_PURIFIER': 19, - 'AIR_HEATER': 20, - 'AIR_CONDITIONER': 21, - 'AIR_HUMIDIFIER': 22, - 'AIR_DEHUMIDIFIER': 23, - 'APPLE_TV': 24, - 'HOMEPOD': 25, - 'SPEAKER': 26, - 'AIRPORT': 27, - 'SPRINKLER': 28, - 'FAUCET': 29, - 'SHOWER_HEAD': 30, - 'TELEVISION': 31, - 'TARGET_CONTROLLER': 32, - 'ROUTER': 33, - 'AUDIO_RECEIVER': 34, - 'TV_SET_TOP_BOX': 35, - 'TV_STREAMING_STICK': 36, -}; + OTHER: 1, + BRIDGE: 2, + FAN: 3, + GARAGE_DOOR_OPENER: 4, + LIGHTBULB: 5, + DOOR_LOCK: 6, + OUTLET: 7, + SWITCH: 8, + THERMOSTAT: 9, + SENSOR: 10, + ALARM_SYSTEM: 11, + SECURITY_SYSTEM: 11, + DOOR: 12, + WINDOW: 13, + WINDOW_COVERING: 14, + PROGRAMMABLE_SWITCH: 15, + RANGE_EXTENDER: 16, + CAMERA: 17, + IP_CAMERA: 17, + VIDEO_DOORBELL: 18, + AIR_PURIFIER: 19, + AIR_HEATER: 20, + AIR_CONDITIONER: 21, + AIR_HUMIDIFIER: 22, + AIR_DEHUMIDIFIER: 23, + APPLE_TV: 24, + HOMEPOD: 25, + SPEAKER: 26, + AIRPORT: 27, + SPRINKLER: 28, + FAUCET: 29, + SHOWER_HEAD: 30, + TELEVISION: 31, + TARGET_CONTROLLER: 32, + ROUTER: 33, + AUDIO_RECEIVER: 34, + TV_SET_TOP_BOX: 35, + TV_STREAMING_STICK: 36, +} diff --git a/src/index.ts b/src/index.ts index 7c81742..1c90ce4 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,63 +1,66 @@ -import { createHash } from 'node:crypto'; -import { EventEmitter } from 'node:events'; +import type { Browser, Service } from 'bonjour-service' -import axios from 'axios'; -import * as decamelize from 'decamelize'; -import { titleize } from 'inflection'; -import Bonjour, { Browser, Service } from 'bonjour-service' +import type { AccessoryInformationProperties, CharacteristicType, HapAccessoriesRespType, HapCharacteristicRespType, HapInstance, ServiceType } from './interfaces' -import { Services, Characteristics } from './hap-types'; -import { toLongFormUUID } from './uuid'; -import { HapMonitor } from './monitor'; -import { HapAccessoriesRespType, ServiceType, CharacteristicType, HapInstance, HapCharacteristicRespType, AccessoryInformationProperties } from './interfaces'; -import 'source-map-support/register'; +import { createHash } from 'node:crypto' +import { EventEmitter } from 'node:events' -export * from './interfaces'; +import axios from 'axios' +import Bonjour from 'bonjour-service' +import decamelize from 'decamelize' +import { titleize } from 'inflection' +import 'source-map-support/register' + +import { Characteristics, Services } from './hap-types.js' +import { HapMonitor } from './monitor.js' +import { toLongFormUUID } from './uuid.js' + +export * from './interfaces.js' export class HapClient extends EventEmitter { - private bonjour = new Bonjour(); - private browser: Browser; - private discoveryInProgress = false; + private bonjour = new Bonjour() + private browser: Browser | undefined + private discoveryInProgress = false - private logger; - private pin: string; - private debugEnabled: boolean; + private readonly logger + private readonly pin: string + private readonly debugEnabled: boolean private config: { - debug?: boolean; - instanceBlacklist?: string[]; - }; + debug?: boolean + instanceBlacklist?: string[] + } - private instances: HapInstance[] = []; + private instances: HapInstance[] = [] private hiddenServices = [ Services.AccessoryInformation, - ]; + ] private hiddenCharacteristics = [ Characteristics.Name, - ]; + ] - private resetInstancePoolTimeout: NodeJS.Timeout | undefined = undefined; - private startDiscoveryTimeout: NodeJS.Timeout | undefined = undefined; - private hapMonitor: HapMonitor; + private resetInstancePoolTimeout: NodeJS.Timeout | undefined = undefined + private startDiscoveryTimeout: NodeJS.Timeout | undefined = undefined + private hapMonitor: HapMonitor | undefined = undefined constructor(opts: { - pin: string; - logger?: any; - config: any; + pin: string + logger?: any + config: any }) { - super(); + super() - this.pin = opts.pin; - this.logger = opts.logger; - this.debugEnabled = opts.config.debug; - this.config = opts.config; - this.startDiscovery(); + this.pin = opts.pin + this.logger = opts.logger + this.debugEnabled = opts.config.debug + this.config = opts.config + this.startDiscovery() } - debug(msg) { + debug(msg: string) { if (this.debugEnabled) { - this.logger.log(msg); + this.logger.log(msg) } } @@ -66,16 +69,16 @@ export class HapClient extends EventEmitter { */ public resetInstancePool() { if (this.discoveryInProgress) { - this.browser.stop(); - this.debug(`[HapClient] Discovery :: Terminated`); - this.discoveryInProgress = false; + this.browser?.stop() + this.debug(`[HapClient] Discovery :: Terminated`) + this.discoveryInProgress = false } - this.instances = []; + this.instances = [] this.resetInstancePoolTimeout = setTimeout(() => { - this.refreshInstances(); - }, 6000); + this.refreshInstances() + }, 6000) } /** @@ -83,38 +86,38 @@ export class HapClient extends EventEmitter { */ public refreshInstances() { if (!this.discoveryInProgress) { - this.startDiscovery(); + this.startDiscovery() } else { try { - this.debug(`[HapClient] Discovery :: Re-broadcasting discovery query`); - this.browser.update(); + this.debug(`[HapClient] Discovery :: Re-broadcasting discovery query`) + this.browser?.update() } catch (e) { } } } private async startDiscovery() { - this.discoveryInProgress = true; + this.discoveryInProgress = true this.browser = this.bonjour.find({ type: 'hap', - }); + }) // start matching services - this.browser.start(); - this.debug(`[HapClient] Discovery :: Started`); + this.browser.start() + this.debug(`[HapClient] Discovery :: Started`) // stop discovery after 20 seconds this.startDiscoveryTimeout = setTimeout(() => { - this.browser.stop(); - this.debug(`[HapClient] Discovery :: Ended`); - this.discoveryInProgress = false; - }, 60000); + this.browser?.stop() + this.debug(`[HapClient] Discovery :: Ended`) + this.discoveryInProgress = false + }, 60000) // service found this.browser.on('up', async (device: Service) => { if (!device || !device.txt) { - this.debug(`[HapClient] Discovery :: Ignoring device that contains no txt records. ${JSON.stringify(device)}`); - return; + this.debug(`[HapClient] Discovery :: Ignoring device that contains no txt records. ${JSON.stringify(device)}`) + return } const instance: HapInstance = { @@ -124,63 +127,61 @@ export class HapClient extends EventEmitter { port: device.port, services: [], connectionFailedCount: 0, - }; + } - this.debug(`[HapClient] Discovery :: Found HAP device with username ${instance.username}`); + this.debug(`[HapClient] Discovery :: Found HAP device with username ${instance.username}`) // update an existing instance - const existingInstanceIndex = this.instances.findIndex(x => x.username === instance.username); + const existingInstanceIndex = this.instances.findIndex(x => x.username === instance.username) if (existingInstanceIndex > -1) { - if ( - this.instances[existingInstanceIndex].port !== instance.port || - this.instances[existingInstanceIndex].name !== instance.name + this.instances[existingInstanceIndex].port !== instance.port + || this.instances[existingInstanceIndex].name !== instance.name ) { - this.instances[existingInstanceIndex].port = instance.port; - this.instances[existingInstanceIndex].name = instance.name; - this.debug(`[HapClient] Discovery :: [${this.instances[existingInstanceIndex].ipAddress}:${instance.port} ` + - `(${instance.username})] Instance Updated`); - this.emit('instance-discovered', instance); + this.instances[existingInstanceIndex].port = instance.port + this.instances[existingInstanceIndex].name = instance.name + this.debug(`[HapClient] Discovery :: [${this.instances[existingInstanceIndex].ipAddress}:${instance.port} ` + + `(${instance.username})] Instance Updated`) + this.emit('instance-discovered', instance) } - return; + return } // check instance is not on the blacklist if (this.config.instanceBlacklist && this.config.instanceBlacklist.find(x => instance.username.toLowerCase() === x.toLowerCase())) { - this.debug(`[HapClient] Discovery :: Instance with username ${instance.username} found in blacklist. Disregarding.`); - return; + this.debug(`[HapClient] Discovery :: Instance with username ${instance.username} found in blacklist. Disregarding.`) + return } - for (const ip of device.addresses) { - if (ip.match(/^(?:(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(\.(?!$)|$)){4}$/)) { + for (const ip of device.addresses || []) { + if (ip.match(/^(?:(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)(\.(?!$)|$)){4}$/)) { try { - this.debug(`[HapClient] Discovery :: Testing ${instance.username} via http://${ip}:${device.port}/accessories`); + this.debug(`[HapClient] Discovery :: Testing ${instance.username} via http://${ip}:${device.port}/accessories`) const test: HapAccessoriesRespType = (await axios.get(`http://${ip}:${device.port}/accessories`, { timeout: 10000, - })).data; + })).data if (test.accessories) { - this.debug(`[HapClient] Discovery :: Success ${instance.username} via http://${ip}:${device.port}/accessories`); - instance.ipAddress = ip; + this.debug(`[HapClient] Discovery :: Success ${instance.username} via http://${ip}:${device.port}/accessories`) + instance.ipAddress = ip } - break; - } catch (e) { - this.debug(`[HapClient] Discovery :: Failed ${instance.username} via http://${ip}:${device.port}/accessories`); - this.debug(`[HapClient] Discovery :: Failed ${instance.username} with error: ${e.message}`); + break + } catch (e: any) { + this.debug(`[HapClient] Discovery :: Failed ${instance.username} via http://${ip}:${device.port}/accessories`) + this.debug(`[HapClient] Discovery :: Failed ${instance.username} with error: ${e.message}`) } } } // store instance record if the connection works if (instance.ipAddress && await this.checkInstanceConnection(instance)) { - this.instances.push(instance); - this.debug(`[HapClient] Discovery :: [${instance.ipAddress}:${instance.port} (${instance.username})] Instance Registered`); - this.emit('instance-discovered', instance); + this.instances.push(instance) + this.debug(`[HapClient] Discovery :: [${instance.ipAddress}:${instance.port} (${instance.username})] Instance Registered`) + this.emit('instance-discovered', instance) } else { - this.debug(`[HapClient] Discovery :: Could not register to device with username ${instance.username}`); + this.debug(`[HapClient] Discovery :: Could not register to device with username ${instance.username}`) } - }); - + }) } /** @@ -188,124 +189,127 @@ export class HapClient extends EventEmitter { */ private async checkInstanceConnection(instance: HapInstance): Promise { try { - await axios.put(`http://${instance.ipAddress}:${instance.port}/characteristics`, - { - characteristics: [{ aid: -1, iid: -1 }], + await axios.put(`http://${instance.ipAddress}:${instance.port}/characteristics`, { + characteristics: [{ aid: -1, iid: -1 }], + }, { + headers: { + Authorization: this.pin, }, - { - headers: { - Authorization: this.pin, - }, - } - ); - return true; - } catch (e) { - this.debug(`[HapClient] Discovery :: [${instance.ipAddress}:${instance.port} (${instance.username})] returned an error while attempting connection: ${e.message}`); - return false; + }) + return true + } catch (e: any) { + this.debug(`[HapClient] Discovery :: [${instance.ipAddress}:${instance.port} (${instance.username})] returned an error while attempting connection: ${e.message}`) + return false } } private async getAccessories(): Promise { if (!this.instances.length) { - this.debug('[HapClient] Cannot load accessories. No Homebridge instances have been discovered.'); + this.debug('[HapClient] Cannot load accessories. No Homebridge instances have been discovered.') } - const accessories = []; + const accessories = [] for (const instance of this.instances) { try { - const resp: HapAccessoriesRespType = (await axios.get(`http://${instance.ipAddress}:${instance.port}/accessories`)).data; - instance.connectionFailedCount = 0; + const resp: HapAccessoriesRespType = (await axios.get(`http://${instance.ipAddress}:${instance.port}/accessories`)).data + instance.connectionFailedCount = 0 for (const accessory of resp.accessories) { - accessory.instance = instance; - accessories.push(accessory); + accessory.instance = instance + accessories.push(accessory) } } catch (e) { if (this.logger) { - instance.connectionFailedCount++; - this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Failed to connect`); + instance.connectionFailedCount++ + this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Failed to connect`) if (instance.connectionFailedCount > 5) { - const instanceIndex = this.instances.findIndex(x => x.username === instance.username && x.ipAddress === instance.ipAddress); - this.instances.splice(instanceIndex, 1); - this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Removed From Instance Pool`); + const instanceIndex = this.instances.findIndex(x => x.username === instance.username && x.ipAddress === instance.ipAddress) + this.instances.splice(instanceIndex, 1) + this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Removed From Instance Pool`) } } } } - return accessories; + return accessories } /** * monitorCharacteristics * @param services - Optional array of services to monitor - * + * * Creates connections to all Homebridge instances and monitors all characteristics for changes. Will emit `service-update` events when characteristics change, which can be listened to. - * @returns + * @returns HapMonitor instance */ public async monitorCharacteristics(services?: ServiceType[]) { // If `services` is not provided, retrieve all services - services = services ?? await this.getAllServices(); - this.hapMonitor = new HapMonitor(this.logger, this.debug.bind(this), this.pin, services); - return this.hapMonitor; + services = services ?? await this.getAllServices() + this.hapMonitor = new HapMonitor(this.logger, this.debug.bind(this), this.pin, services) + return this.hapMonitor } /** - * + * * @returns Array of all services from all Homebridge instances */ public async getAllServices() { /* Get Accessories from HAP */ - const accessories = await this.getAccessories(); + const accessories = await this.getAccessories() - const services: Array = []; + const services: Array = [] /* Parse All Accessories */ - accessories.forEach(accessory => { + accessories.forEach((accessory) => { /** Ensure UUIDs are long form */ for (const service of accessory.services) { - service.type = toLongFormUUID(service.type); + service.type = toLongFormUUID(service.type) for (const characteristic of service.characteristics) { - characteristic.type = toLongFormUUID(characteristic.type); + characteristic.type = toLongFormUUID(characteristic.type) } } /* Parse Accessory Information */ - const accessoryInformationService = accessory.services.find(x => x.type === Services.AccessoryInformation); - const accessoryInformation = {} as AccessoryInformationProperties; + const accessoryInformationService = accessory.services.find(x => x.type === Services.AccessoryInformation) + const accessoryInformation = {} as AccessoryInformationProperties if (accessoryInformationService && accessoryInformationService.characteristics) { accessoryInformationService.characteristics.forEach((c) => { if (c.value) { - accessoryInformation[c.description] = c.value; + // @ts-expect-error index by key issue + accessoryInformation[c.description] = c.value } - }); + }) } /* Parse All Services */ accessory.services - .filter((s) => this.hiddenServices.indexOf(s.type) < 0 && Services[s.type]) - .map((s) => { - let serviceName = s.characteristics.find(x => x.type === Characteristics.Name); + // @ts-expect-error index by key issue + .filter(s => !this.hiddenServices.includes(s.type) && Services[s.type]) + .map((s) => { // eslint-disable-line array-callback-return + let serviceName = s.characteristics.find(x => x.type === Characteristics.Name) /* Set default name characteristic if none defined */ - serviceName = serviceName ? serviceName : { + serviceName = serviceName || { iid: 0, type: Characteristics.Name, description: 'Name', format: 'string', + // @ts-expect-error index by key issue value: accessoryInformation.Name || this.humanizeString(Services[s.type]), perms: ['pr'], - }; + } /* Parse Service Characteristics */ const serviceCharacteristics: Array = s.characteristics - .filter((c) => this.hiddenCharacteristics.indexOf(c.type) < 0 && Characteristics[c.type]) + // @ts-expect-error index by key issue + .filter(c => !this.hiddenCharacteristics.includes(c.type) && Characteristics[c.type]) .map((c) => { return { aid: accessory.aid, iid: c.iid, uuid: c.type, + // @ts-expect-error index by key issue type: Characteristics[c.type], + // @ts-expect-error index by key issue serviceType: Services[s.type], serviceName: serviceName.value.toString(), description: c.description, @@ -319,14 +323,16 @@ export class HapClient extends EventEmitter { canRead: c.perms.includes('pr'), canWrite: c.perms.includes('pw'), ev: c.perms.includes('ev'), - }; - }); + } + }) const service: ServiceType = { aid: accessory.aid, iid: s.iid, uuid: s.type, + // @ts-expect-error index by key issue type: Services[s.type], + // @ts-expect-error index by key issue humanType: this.humanizeString(Services[s.type]), serviceName: serviceName.value.toString(), serviceCharacteristics, @@ -334,149 +340,150 @@ export class HapClient extends EventEmitter { values: {}, linked: s.linked, instance: accessory.instance, - }; + } // generate unique id for service service.uniqueId = createHash('sha256') .update(`${service.instance.username}${service.aid}${service.iid}${service.type}`) - .digest('hex'); + .digest('hex') /* Helper function to trigger a call to the accessory to get all the characteristic values */ service.refreshCharacteristics = () => { - return this.refreshServiceCharacteristics.bind(this)(service); - }; + return this.refreshServiceCharacteristics.bind(this)(service) + } /* Helper function to set the value of a characteristic */ service.setCharacteristic = (iid: number, value: number | string | boolean) => { - return this.setCharacteristic.bind(this)(service, iid, value); - }; + return this.setCharacteristic.bind(this)(service, iid, value) as unknown as Promise + } - /* Helper function to returns a characteristic by it's type name */ + /* Helper function to returns a characteristic by its type name */ service.getCharacteristic = (type: string) => { - return service.serviceCharacteristics.find(c => c.type === type); - }; + return service.serviceCharacteristics.find(c => c.type === type) as unknown as CharacteristicType + } service.serviceCharacteristics.forEach((c) => { /* Helper function to set the value of a characteristic */ c.setValue = async (value: number | string | boolean) => { - return await this.setCharacteristic.bind(this)(service, c.iid, value); - }; + return await this.setCharacteristic.bind(this)(service, c.iid, value) as unknown as CharacteristicType + } /* Helper function to get the value of a characteristic from the accessory */ c.getValue = async () => { - return await this.getCharacteristic.bind(this)(service, c.iid); - }; + return await this.getCharacteristic.bind(this)(service, c.iid) as unknown as CharacteristicType + } /* set the values for each characteristic type in an easy-to-access object */ - service.values[c.type] = c.value; - }); + service.values[c.type] = c.value + }) - services.push(service); - }); - }); + services.push(service) + }) + }) - return services; + return services } async getService(iid: number) { - const services = await this.getAllServices(); - return services.find(x => x.iid === iid); + const services = await this.getAllServices() + return services.find(x => x.iid === iid) } async getServiceByName(serviceName: string) { - const services = await this.getAllServices(); - return services.find(x => x.serviceName === serviceName); + const services = await this.getAllServices() + return services.find(x => x.serviceName === serviceName) } async refreshServiceCharacteristics(service: ServiceType): Promise { try { - const iids: number[] = service.serviceCharacteristics.map(c => c.iid); + const iids: number[] = service.serviceCharacteristics.map(c => c.iid) const resp: HapCharacteristicRespType = (await axios.get(`http://${service.instance.ipAddress}:${service.instance.port}/characteristics`, { params: { id: iids.map(iid => `${service.aid}.${iid}`).join(','), - } - })).data; + }, + })).data resp.characteristics.forEach((c) => { - const characteristic = service.serviceCharacteristics.find(x => x.iid === c.iid && x.aid === service.aid); - characteristic.value = c.value; - }); - - } catch (e) { - this.debug(e); - this.logger.log(`Failed to refresh characteristics for ${service.serviceName}: ${e.message}`); + const characteristic = service.serviceCharacteristics.find(x => x.iid === c.iid && x.aid === service.aid) + if (characteristic) { + characteristic.value = c.value + } + }) + } catch (e: any) { + this.debug(e) + this.logger.log(`Failed to refresh characteristics for ${service.serviceName}: ${e.message}`) } - return service; + return service } - async getCharacteristic(service: ServiceType, iid: number): Promise { + async getCharacteristic(service: ServiceType, iid: number): Promise { try { const resp: HapCharacteristicRespType = (await axios.get(`http://${service.instance.ipAddress}:${service.instance.port}/characteristics`, { params: { id: `${service.aid}.${iid}`, }, - })).data; + })).data - const characteristic = service.serviceCharacteristics.find(x => x.iid === resp.characteristics[0].iid && x.aid === service.aid); - characteristic.value = resp.characteristics[0].value; + const characteristic = service.serviceCharacteristics.find(x => x.iid === resp.characteristics[0].iid && x.aid === service.aid) - return characteristic; - } catch (e) { - this.debug(e); - this.logger.log(`Failed to get characteristics for ${service.serviceName} with iid ${iid}: ${e.message}`); + if (characteristic) { + characteristic.value = resp.characteristics[0].value + return characteristic + } + } catch (e: any) { + this.debug(e) + this.logger.log(`Failed to get characteristics for ${service.serviceName} with iid ${iid}: ${e.message}`) } } async setCharacteristic(service: ServiceType, iid: number, value: number | string | boolean) { try { - await axios.put(`http://${service.instance.ipAddress}:${service.instance.port}/characteristics`, - { - characteristics: [ - { - aid: service.aid, - iid, - value, - }, - ], - }, - { - headers: { - Authorization: this.pin, + await axios.put(`http://${service.instance.ipAddress}:${service.instance.port}/characteristics`, { + characteristics: [ + { + aid: service.aid, + iid, + value, }, - } - ); - return this.getCharacteristic(service, iid); - } catch (e) { + ], + }, { + headers: { + Authorization: this.pin, + }, + }) + return this.getCharacteristic(service, iid) + } catch (e: any) { if (this.logger) { - this.logger.error(`[HapClient] [${service.instance.ipAddress}:${service.instance.port} (${service.instance.username})] ` + - `Failed to set value for ${service.serviceName}.`); - if (e.response && e.response.status === 470 || e.response.status === 401) { - this.logger.warn(`[HapClient] [${service.instance.ipAddress}:${service.instance.port} (${service.instance.username})] ` + - `Make sure Homebridge pin for this instance is set to ${this.pin}.`); - throw new Error(`Failed to control accessory. Make sure the Homebridge pin for ${service.instance.ipAddress}:${service.instance.port} ` + - `is set to ${this.pin}.`); + this.logger.error(`[HapClient] [${service.instance.ipAddress}:${service.instance.port} (${service.instance.username})] ` + + `Failed to set value for ${service.serviceName}.`) + if ([401, 470].includes(e.response?.status)) { + this.logger.warn(`[HapClient] [${service.instance.ipAddress}:${service.instance.port} (${service.instance.username})] ` + + `Make sure Homebridge pin for this instance is set to ${this.pin}.`) + throw new Error(`Failed to control accessory. Make sure the Homebridge pin for ${service.instance.ipAddress}:${service.instance.port} ` + + `is set to ${this.pin}.`) } else { - this.logger.error(e.message); - throw new Error(`Failed to control accessory: ${e.message}`); + this.logger.error(e.message) + throw new Error(`Failed to control accessory: ${e.message}`) } } else { - console.log(e); + // eslint-disable-next-line no-console + console.log(e) } } } private humanizeString(string: string) { - return titleize(decamelize(string)); + return titleize(decamelize(string)) } /** * Destroy the HAP client, used by testing when shutting down */ - public async destroy() { - this.browser?.stop(); - this.hapMonitor?.finish(); - this.discoveryInProgress = false; + public destroy() { + this.browser?.stop() + this.hapMonitor?.finish() + this.discoveryInProgress = false if (this.resetInstancePoolTimeout) { clearTimeout(this.resetInstancePoolTimeout) } @@ -484,5 +491,4 @@ export class HapClient extends EventEmitter { clearTimeout(this.startDiscoveryTimeout) } } - } diff --git a/src/interfaces.ts b/src/interfaces.ts index 30d69f2..cb8d561 100644 --- a/src/interfaces.ts +++ b/src/interfaces.ts @@ -1,105 +1,131 @@ -import { Socket } from 'node:net'; +import type { Buffer } from 'node:buffer' +import type { Socket } from 'node:net' export interface HapInstance { - name: string; - ipAddress: string | null; - port: number; - username: string; - connectionFailedCount: number; - services: ServiceType[]; + name: string + ipAddress: string | null + port: number + username: string + connectionFailedCount: number + services: ServiceType[] } export interface HapEvInstance { - name: string; - ipAddress: string; - port: number; - username: string; - evCharacteristics?: { aid: number, iid: number, ev: boolean }[]; - socket?: Socket; + name: string + ipAddress: string + port: number + username: string + evCharacteristics?: { aid: number, iid: number, ev: boolean }[] + socket?: Socket } export interface HapAccessoriesRespType { accessories: Array<{ - instance: HapInstance; - aid: number; + instance: HapInstance + aid: number services: Array<{ - iid: number; - type: string; - primary: boolean; - hidden: boolean; - linked?: Array; + iid: number + type: string + primary: boolean + hidden: boolean + linked?: Array characteristics: Array<{ - iid: number; - type: string; - description: string; - value: number | string | boolean; - format: 'bool' | 'int' | 'float' | 'string' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | 'data' | 'tlv8' | 'array' | 'dictionary'; - perms: Array<'pr' | 'pw' | 'ev' | 'aa' | 'tw' | 'hd'>; - unit?: 'unit' | 'percentage' | 'celsius' | 'arcdegrees' | 'lux' | 'seconds'; - maxValue?: number; - minValue?: number; - minStep?: number; - }>; - }>; - }>; + iid: number + type: string + description: string + value: number | string | boolean + format: 'bool' | 'int' | 'float' | 'string' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | 'data' | 'tlv8' | 'array' | 'dictionary' + perms: Array<'pr' | 'pw' | 'ev' | 'aa' | 'tw' | 'hd'> + unit?: 'unit' | 'percentage' | 'celsius' | 'arcdegrees' | 'lux' | 'seconds' + maxValue?: number + minValue?: number + minStep?: number + }> + }> + }> } export interface HapCharacteristicRespType { characteristics: { - aid: number; - iid: number; - value: number | string | boolean; - }[]; + aid: number + iid: number + value: number | string | boolean + }[] } export interface ServiceType { - aid: number; - iid: number; - uuid: string; - type: string; - linked?: Array; + aid: number + iid: number + uuid: string + type: string + linked?: Array linkedServices?: { - [iid: number]: ServiceType; - }; - hidden?: boolean; - humanType: string; - serviceName: string; - serviceCharacteristics: CharacteristicType[]; - accessoryInformation: any; - refreshCharacteristics?: () => Promise; - setCharacteristic?: (iid: number, value: number | string | boolean) => Promise; - getCharacteristic?: (type: string) => CharacteristicType; - values: any; - instance: HapInstance; - uniqueId?: string; + [iid: number]: ServiceType + } + hidden?: boolean + humanType: string + serviceName: string + serviceCharacteristics: CharacteristicType[] + accessoryInformation: any + refreshCharacteristics?: () => Promise + setCharacteristic?: (iid: number, value: number | string | boolean) => Promise + getCharacteristic?: (type: string) => CharacteristicType + values: any + instance: HapInstance + uniqueId?: string } export interface CharacteristicType { - aid: number; - iid: number; - uuid: string; - type: string; - serviceType: string; - serviceName: string; - description: string; - value: number | string | boolean; - format: 'bool' | 'int' | 'float' | 'string' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | 'data' | 'tlv8' | 'array' | 'dictionary'; - perms: Array<'pr' | 'pw' | 'ev' | 'aa' | 'tw' | 'hd'>; - unit?: 'unit' | 'percentage' | 'celsius' | 'arcdegrees' | 'lux' | 'seconds'; - maxValue?: number; - minValue?: number; - minStep?: number; - canRead: boolean; - canWrite: boolean; - ev: boolean; - setValue?: (value: number | string | boolean) => Promise; - getValue?: () => Promise; + aid: number + iid: number + uuid: string + type: string + serviceType: string + serviceName: string + description: string + value: number | string | boolean + format: 'bool' | 'int' | 'float' | 'string' | 'uint8' | 'uint16' | 'uint32' | 'uint64' | 'data' | 'tlv8' | 'array' | 'dictionary' + perms: Array<'pr' | 'pw' | 'ev' | 'aa' | 'tw' | 'hd'> + unit?: 'unit' | 'percentage' | 'celsius' | 'arcdegrees' | 'lux' | 'seconds' + maxValue?: number + minValue?: number + minStep?: number + canRead: boolean + canWrite: boolean + ev: boolean + setValue?: (value: number | string | boolean) => Promise + getValue?: () => Promise } export interface AccessoryInformationProperties { - 'Manufacturer': string; - 'Model': string; - 'Name': string; - 'Serial Number': string; - 'Firmware Revision': string; + 'Manufacturer': string + 'Model': string + 'Name': string + 'Serial Number': string + 'Firmware Revision': string +} + +export interface HttpMessageParserResult { + protocol: string | null + httpVersion: number | null + statusCode: number | null + statusMessage: string | null + method: string | null + url: string | null + headers: { [key: string]: string | number } | null + body: string | null + boundary: string | null + multipart: Array<{ + headers: { [key: string]: string | number } | null + body: string | Buffer | null + meta: { + body: { + byteOffset: { + start: number | null + end: number | null + } + } + } + }> | null + additional: string | null } diff --git a/src/monitor.ts b/src/monitor.ts index 9015c7a..97a3a64 100644 --- a/src/monitor.ts +++ b/src/monitor.ts @@ -1,81 +1,83 @@ -import { EventEmitter } from 'node:events'; +import type { CharacteristicType, HapEvInstance, ServiceType } from './interfaces' -import { ServiceType, HapEvInstance } from './interfaces'; -import { createConnection, parseMessage } from './eventedHttpClient'; +import { EventEmitter } from 'node:events' + +import { createConnection, parseMessage } from './eventedHttpClient/index.js' /** * HapMonitor - Creates a monitor to watch for changes in accessory characteristics. And generates 'service-update' events when they change. */ export class HapMonitor extends EventEmitter { - private pin; - private evInstances: HapEvInstance[]; - private services: ServiceType[]; - private logger: any; - private debug: (arg0: string) => void; + private readonly pin + private readonly evInstances: HapEvInstance[] + private readonly services: ServiceType[] + private readonly logger: any + private readonly debug: (arg0: string) => void constructor(logger: any, debug: any, pin: string, services: ServiceType[]) { - super(); - this.logger = logger; - this.debug = debug; - this.pin = pin; - this.services = services; - this.evInstances = []; + super() + this.logger = logger + this.debug = debug + this.pin = pin + this.services = services + this.evInstances = [] // get a list of characteristics we can watch for each instance - this.parseServices(); + this.parseServices() // start watching - this.start(); + this.start() } start() { for (const instance of this.evInstances) { - instance.socket = createConnection(instance, this.pin, { characteristics: instance.evCharacteristics }); + instance.socket = createConnection(instance, this.pin, { characteristics: instance.evCharacteristics }) - this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Connected`); + this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Connected`) instance.socket.on('data', (data) => { - const message = parseMessage(data); + const message = parseMessage(data) if (message.statusCode === 401) { if (this.logger) { - this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] ` + - `${message.statusCode} ${message.statusMessage} - make sure Homebridge pin for this instance is set to ${this.pin}.`); + this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] ` + + `${message.statusCode} ${message.statusMessage} - make sure Homebridge pin for this instance is set to ${this.pin}.`) } } if (message.protocol === 'EVENT') { try { - const body = JSON.parse(message.body); - if (body.characteristics && body.characteristics.length) { - this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] ` + - `Got Event: ${JSON.stringify(body.characteristics)}`); - - const response = body.characteristics.map((c) => { - // find the matching service for each characteristics - const services = this.services.filter(x => x.aid === c.aid && x.instance.username === instance.username); - const service = services.find(x => x.serviceCharacteristics.find(y => y.iid === c.iid)); - - if (service) { - // find the correct characteristic and update it - const characteristic = service.serviceCharacteristics.find(x => x.iid === c.iid); - if (characteristic) { - characteristic.value = c.value; - service.values[characteristic.type] = c.value; - return service; + if (message.body) { + const body = JSON.parse(message.body) + if (body.characteristics && body.characteristics.length) { + this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] ` + + `Got Event: ${JSON.stringify(body.characteristics)}`) + + const response = body.characteristics.map((c: CharacteristicType) => { // eslint-disable-line array-callback-return + // find the matching service for each characteristic + const services = this.services.filter(x => x.aid === c.aid && x.instance.username === instance.username) + const service = services.find(x => x.serviceCharacteristics.find(y => y.iid === c.iid)) + + if (service) { + // find the correct characteristic and update it + const characteristic = service.serviceCharacteristics.find(x => x.iid === c.iid) + if (characteristic) { + characteristic.value = c.value + service.values[characteristic.type] = c.value + return service + } } - } - - }); + }) - // push update to listeners - this.emit('service-update', response.filter(x => x)); + // push update to listeners + this.emit('service-update', response.filter((x: any) => x)) + } } } catch (e) { // do nothing } } - }); + }) } } @@ -83,8 +85,8 @@ export class HapMonitor extends EventEmitter { for (const instance of this.evInstances) { if (instance.socket) { try { - instance.socket.destroy(); - this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Disconnected`); + instance.socket.destroy() + this.debug(`[HapClient] [${instance.ipAddress}:${instance.port} (${instance.username})] Disconnected`) } catch (e) { // do nothing } @@ -95,21 +97,23 @@ export class HapMonitor extends EventEmitter { parseServices() { // get a list of characteristics we can watch for each instance for (const service of this.services) { - const evCharacteristics = service.serviceCharacteristics.filter(x => x.perms.includes('ev')); + const evCharacteristics = service.serviceCharacteristics.filter(x => x.perms.includes('ev')) if (evCharacteristics.length) { // register the instance if it's not already there if (!this.evInstances.find(x => x.username === service.instance.username)) { - const newInstance = Object.assign({}, service.instance) as HapEvInstance; - newInstance.evCharacteristics = []; - this.evInstances.push(newInstance); + const newInstance = Object.assign({}, service.instance) as HapEvInstance + newInstance.evCharacteristics = [] + this.evInstances.push(newInstance) } - const instance = this.evInstances.find(x => x.username === service.instance.username); + const instance = this.evInstances.find(x => x.username === service.instance.username) - for (const evCharacteristic of evCharacteristics) { - if (!instance.evCharacteristics.find(x => x.aid === service.aid && x.iid === evCharacteristic.iid)) { - instance.evCharacteristics.push({ aid: service.aid, iid: evCharacteristic.iid, ev: true }); + if (instance?.evCharacteristics) { + for (const evCharacteristic of evCharacteristics) { + if (!instance.evCharacteristics.find(x => x.aid === service.aid && x.iid === evCharacteristic.iid)) { + instance.evCharacteristics.push({ aid: service.aid, iid: evCharacteristic.iid, ev: true }) + } } } } diff --git a/src/uuid.ts b/src/uuid.ts index c6efad7..83c5d06 100644 --- a/src/uuid.ts +++ b/src/uuid.ts @@ -1,22 +1,22 @@ // https://github.com/homebridge/HAP-NodeJS/blob/master/src/lib/util/uuid.ts -const VALID_UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; +const VALID_UUID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i export function isValid(UUID: string) { - return VALID_UUID_REGEX.test(UUID); + return VALID_UUID_REGEX.test(UUID) } -const VALID_SHORT_REGEX = /^[0-9a-f]{1,8}$/i; +const VALID_SHORT_REGEX = /^[0-9a-f]{1,8}$/i export function toLongFormUUID(uuid: string, base = '-0000-1000-8000-0026BB765291') { if (isValid(uuid)) { - return uuid.toUpperCase(); + return uuid.toUpperCase() } if (!VALID_SHORT_REGEX.test(uuid)) { - throw new TypeError('uuid was not a valid UUID or short form UUID'); + throw new TypeError('uuid was not a valid UUID or short form UUID') } - if (!isValid('00000000' + base)) { - throw new TypeError('base was not a valid base UUID'); + if (!isValid(`00000000${base}`)) { + throw new TypeError('base was not a valid base UUID') } - return (('00000000' + uuid).substr(-8) + base).toUpperCase(); + return ((`00000000${uuid}`).substr(-8) + base).toUpperCase() } diff --git a/tsconfig.gen.json b/tsconfig.gen.json deleted file mode 100644 index 14603f1..0000000 --- a/tsconfig.gen.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "./tsconfig.json", - "compilerOptions": { - "module": "CommonJS", - "preserveConstEnums": true, - } -} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index 7d74254..e42d79f 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,23 +1,31 @@ { "compilerOptions": { - "module": "commonjs", + "target": "ESNext", + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable" + ], + "rootDir": "./src", + "module": "ESNext", + "moduleResolution": "node", + "strict": true, "declaration": true, + "declarationMap": true, + "outDir": "./dist", + "preserveConstEnums": true, "removeComments": true, - "emitDecoratorMetadata": true, - "experimentalDecorators": true, - "target": "es2022", "sourceMap": true, - "outDir": "./dist", - "baseUrl": "./", + "esModuleInterop": true, + "skipLibCheck": true }, - "lib": [ - "es2017" + "include": [ + "src/" ], "exclude": [ - "server", - "portal", + "**/*.spec.ts", "scripts", "node_modules", - "./dist", + "./dist" ] } diff --git a/tslint.json b/tslint.json deleted file mode 100644 index c9894d5..0000000 --- a/tslint.json +++ /dev/null @@ -1,73 +0,0 @@ -{ - "defaultSeverity": "error", - "extends": [ - "tslint:recommended" - ], - "linterOptions": { - "exclude": [ - "migration/*.ts", - "node_modules/**" - ] - }, - "jsRules": { - "no-unused-expression": true - }, - "rules": { - "indent": { - "options": [ - "spaces", - 2 - ] - }, - "eofline": false, - "quotemark": [ - true, - "single" - ], - "ordered-imports": [ - false - ], - "member-ordering": [ - false - ], - "curly": false, - "interface-name": [ - false - ], - "array-type": [ - false - ], - "member-access": [ - false - ], - "no-empty-interface": false, - "no-empty": false, - "arrow-parens": false, - "object-literal-sort-keys": false, - "no-unused-expression": false, - "variable-name": [ - false - ], - "one-line": [ - false - ], - "one-variable-per-declaration": [ - false - ], - "no-console": [ - false - ], - "max-line-length": [ - true, - 150 - ], - "no-bitwise": [ - false - ], - "semicolon": [ - true, - "always" - ] - }, - "rulesDirectory": [] -} \ No newline at end of file