diff --git a/docs/guide/custom-config.md b/docs/guide/custom-config.md index 5972275ad..64d877622 100644 --- a/docs/guide/custom-config.md +++ b/docs/guide/custom-config.md @@ -229,7 +229,7 @@ module.exports = { - 类型: `boolean` - 默认值: `false` -目前仅 Stash 支持 Tuic,如果你希望在 Clash 订阅中输出 Tuic 节点请开启此项。 +目前仅 Clash Meta 内核和 Stash 支持 Tuic,如果你希望在 Clash 订阅中输出 Tuic 节点请开启此项。 ### clashConfig.enableShadowTls @@ -261,11 +261,11 @@ Clash 核心版本。默认使用 Clash 核心,如果你希望输出针对 Cla 下面是目前支持的变化: -| 核心 | 变化 | -| --- |----------------------------------------------------------------------------------| -| `clash` | 默认值,不输出任何变化 | -| `clash.meta` | 不输出任何变化 | -| `stash` | - Hysteria 协议的密码字段改为 `auth` | +| 核心 | 变化 | +| --- |--------------------------------------------------------------| +| `clash` | 默认值 | +| `clash.meta` | 模板 `clash` 过滤器会改为过滤 Clash Meta 不支持的规则 | +| `stash` | - Hysteria 协议的密码字段改为 `auth`;模板 `clash` 过滤器会改为过滤 Stash 不支持的规则 | :::warning 注意 `enableTuic`, `enableShadowTls`, `enableHysteria2` 这三个配置项和 `clashCore` 目前互不影响,但是将来会合并到 `clashCore` 中。 diff --git a/docs/guide/custom-provider.md b/docs/guide/custom-provider.md index 4de2b86b0..e6077ec70 100644 --- a/docs/guide/custom-provider.md +++ b/docs/guide/custom-provider.md @@ -187,24 +187,109 @@ module.exports = defineCustomProvider({ ### Vmess +从 v3.5.0 开始 Surgio 支持了更多 Vmess 协议。为了更好地区分不同协议的参数,原有的 `host`, `path`, `wsHeaders` 将会在后面的版本中废弃,请使用下面列出的新属性。 Surgio 会忽略代理客户端不支持的协议类型。 + +#### `network: 'tcp'` + ```json5 { nodeName: '🇭🇰HK', type: 'vmess', hostname: 'hk.example.com', method: 'auto', // 仅支持 auto/aes-128-gcm/chacha20-ietf-poly1305/none - network: 'ws', // 仅支持 tcp/ws + network: 'tcp', alterId: '64', - path: '/', port: 8080, tls: false, - host: 'example.com', // 此属性相当于 wsHeaders.host,但推荐配置在 wsHeaders.host 上 uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', - tfo: false, // TCP Fast Open - tls13: false, // TLS 1.3, TLS 开启时有效 udpRelay: true, // 开启 UDP 转发 - wsHeaders: { - key: 'value', +} +``` + +#### `network: 'http'` + +```json5 +{ + nodeName: '🇭🇰HK', + type: 'vmess', + hostname: 'hk.example.com', + method: 'auto', + network: 'http', + alterId: '64', + port: 8080, + tls: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + udpRelay: true, + httpOpts: { + method: 'GET', + path: ['/', '/video'], + headers: { + 'x-key': 'x-value', + }, + }, +} +``` + +#### `network: 'ws'` + +```json5 +{ + nodeName: '🇭🇰HK', + type: 'vmess', + hostname: 'hk.example.com', + method: 'auto', + network: 'ws', + alterId: '64', + port: 8080, + tls: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + udpRelay: true, + wsOpts: { + path: '/', + headers: { + 'Host': 'www.example.com', + }, + }, +} +``` + +#### `network: 'grpc'` + +```json5 +{ + nodeName: '🇭🇰HK', + type: 'vmess', + hostname: 'hk.example.com', + method: 'auto', + network: 'grpc', + alterId: '64', + port: 8080, + tls: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + udpRelay: true, + grpcOpts: { + serviceName: 'example', + }, +} +``` + +#### `network: 'h2'` + +```json5 +{ + nodeName: '🇭🇰HK', + type: 'vmess', + hostname: 'hk.example.com', + method: 'auto', + network: 'h2', + alterId: '64', + port: 8080, + tls: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + udpRelay: true, + h2Opts: { + path: '/', + host: ['www.example.com'], }, } ``` diff --git a/package.json b/package.json index de4572655..67da7dedb 100644 --- a/package.json +++ b/package.json @@ -72,20 +72,20 @@ "topics": {} }, "dependencies": { - "@babel/parser": "^7.23.0", + "@babel/parser": "^7.24.0", "@brillout/import": "^0.2.3", "@oclif/core": "^2.15.0", "@oclif/plugin-help": "^5.2.20", - "@oclif/plugin-plugins": "^3.9.1", + "@oclif/plugin-plugins": "^3.9.4", "@royli/hygen": "^6.2.0", "@surgio/eslint-config-surgio": "^1.0.6", "@surgio/logger": "^1.3.0", - "@types/eslint": "^8.44.4", + "@types/eslint": "^8.56.5", "agentkeepalive": "^4.5.0", - "ali-oss": "^6.18.1", + "ali-oss": "^6.20.0", "bluebird": "^3.7.2", "bytes": "^3.1.2", - "cache-manager": "^5.2.4", + "cache-manager": "^5.4.0", "cache-manager-ioredis-yet": "^1.2.2", "chalk": "^4.1.2", "change-case": "^4.1.2", @@ -93,12 +93,12 @@ "compare-versions": "^6.1.0", "date-fns": "^2.30.0", "detect-newline": "^3.1.0", - "dotenv": "^16.3.1", - "emoji-regex": "^10.2.1", - "eslint": "^8.51.0", + "dotenv": "^16.4.5", + "emoji-regex": "^10.3.0", + "eslint": "^8.57.0", "execa": "^4.1.0", "filesize": "^10.1.0", - "fs-extra": "^11.1.1", + "fs-extra": "^11.2.0", "got": "^11.8.6", "hpagent": "^1.2.0", "inquirer": "^8.2.6", @@ -112,39 +112,40 @@ "query-string": "^7.1.3", "rimraf": "^4.4.1", "source-map-support": "^0.5.21", + "ts-expect": "^1.3.0", "type-fest": "^3.13.1", "update-notifier": "^5.1.0", "urlsafe-base64": "^1.0.0", - "yaml": "^2.3.2", + "yaml": "^2.4.0", "zod": "^3.22.4", "zod-validation-error": "^1.5.0" }, "devDependencies": { - "@algolia/client-search": "^4.20.0", - "@commitlint/cli": "^17.7.2", - "@commitlint/config-angular": "^17.7.0", + "@algolia/client-search": "^4.22.1", + "@commitlint/cli": "^17.8.1", + "@commitlint/config-angular": "^17.8.1", "@istanbuljs/nyc-config-typescript": "^1.0.2", "@oclif/test": "^2.5.6", - "@types/ali-oss": "^6.16.9", - "@types/bluebird": "^3.5.40", - "@types/bytes": "^3.1.2", - "@types/chai": "^4.3.8", - "@types/debug": "^4.1.9", - "@types/fs-extra": "^11.0.2", - "@types/ini": "^1.3.31", - "@types/inquirer": "^8.2.7", - "@types/ioredis-mock": "^8.2.3", - "@types/lodash": "^4.14.199", - "@types/micromatch": "^4.0.3", - "@types/mocha": "^10.0.2", - "@types/ms": "^0.7.32", - "@types/node": "^18.18.5", + "@types/ali-oss": "^6.16.11", + "@types/bluebird": "^3.5.42", + "@types/bytes": "^3.1.4", + "@types/chai": "^4.3.12", + "@types/debug": "^4.1.12", + "@types/fs-extra": "^11.0.4", + "@types/ini": "^1.3.34", + "@types/inquirer": "^8.2.10", + "@types/ioredis-mock": "^8.2.5", + "@types/lodash": "^4.14.202", + "@types/micromatch": "^4.0.6", + "@types/mocha": "^10.0.6", + "@types/ms": "^0.7.34", + "@types/node": "^18.19.21", "@types/node-dir": "^0.0.35", - "@types/nunjucks": "^3.2.4", - "@types/sinon": "^10.0.19", - "@types/urlsafe-base64": "^1.0.29", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "@typescript-eslint/parser": "^5.62.0", + "@types/nunjucks": "^3.2.6", + "@types/sinon": "^10.0.20", + "@types/urlsafe-base64": "^1.0.31", + "@typescript-eslint/eslint-plugin": "^7", + "@typescript-eslint/parser": "^7", "@vuepress/client": "2.0.0-beta.62", "@vuepress/plugin-docsearch": "2.0.0-beta.62", "@vuepress/plugin-google-analytics": "2.0.0-beta.62", @@ -153,8 +154,8 @@ "@vuepress/utils": "2.0.0-beta.62", "ava": "^5.3.1", "benchmark": "^2.1.4", - "bumpp": "^9.2.0", - "chai": "^4.3.10", + "bumpp": "^9.4.0", + "chai": "^4.4.1", "chai-jest-snapshot": "^2.0.0", "conventional-changelog-cli": "^2.2.2", "eslint-config-prettier": "^8.10.0", @@ -163,21 +164,21 @@ "ini": "^3.0.1", "ioredis-mock": "^8.9.0", "lint-staged": "^13.3.0", - "mocha": "^10.2.0", - "nock": "^13.3.4", + "mocha": "^10.3.0", + "nock": "^13.5.4", "np": "^6.5.0", "npm-debug-log-cleaner": "^1.0.3", "npm-run-all": "^4.1.5", "nyc": "^15.1.0", "prettier": "^2.8.8", - "sass": "^1.69.3", + "sass": "^1.71.1", "sinon": "^15.2.0", - "ts-node": "^10.9.1", - "typescript": "^5.2.2", - "vue": "^3.3.4", + "ts-node": "^10.9.2", + "typescript": "^5.3.3", + "vue": "^3.4.21", "vuepress": "2.0.0-beta.62", "vuepress-plugin-sitemap2": "2.0.0-beta.205", - "vuepress-plugin-umami-analytics": "^1.5.0" + "vuepress-plugin-umami-analytics": "^1.8.1" }, "ava": { "failFast": false, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6c3b47107..ec52d5489 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -6,20 +6,20 @@ settings: dependencies: '@babel/parser': - specifier: ^7.23.0 - version: 7.23.0 + specifier: ^7.24.0 + version: 7.24.0 '@brillout/import': specifier: ^0.2.3 version: 0.2.3 '@oclif/core': specifier: ^2.15.0 - version: 2.15.0(@types/node@18.18.5)(typescript@5.2.2) + version: 2.15.0(@types/node@18.19.21)(typescript@5.3.3) '@oclif/plugin-help': specifier: ^5.2.20 - version: 5.2.20(@types/node@18.18.5)(typescript@5.2.2) + version: 5.2.20(@types/node@18.19.21)(typescript@5.3.3) '@oclif/plugin-plugins': - specifier: ^3.9.1 - version: 3.9.1(@types/node@18.18.5)(typescript@5.2.2) + specifier: ^3.9.4 + version: 3.9.4(@types/node@18.19.21)(typescript@5.3.3) '@royli/hygen': specifier: ^6.2.0 version: 6.2.0 @@ -30,14 +30,14 @@ dependencies: specifier: ^1.3.0 version: 1.3.0 '@types/eslint': - specifier: ^8.44.4 - version: 8.44.4 + specifier: ^8.56.5 + version: 8.56.5 agentkeepalive: specifier: ^4.5.0 version: 4.5.0 ali-oss: - specifier: ^6.18.1 - version: 6.18.1 + specifier: ^6.20.0 + version: 6.20.0 bluebird: specifier: ^3.7.2 version: 3.7.2 @@ -45,8 +45,8 @@ dependencies: specifier: ^3.1.2 version: 3.1.2 cache-manager: - specifier: ^5.2.4 - version: 5.2.4 + specifier: ^5.4.0 + version: 5.4.0 cache-manager-ioredis-yet: specifier: ^1.2.2 version: 1.2.2 @@ -69,14 +69,14 @@ dependencies: specifier: ^3.1.0 version: 3.1.0 dotenv: - specifier: ^16.3.1 - version: 16.3.1 + specifier: ^16.4.5 + version: 16.4.5 emoji-regex: - specifier: ^10.2.1 - version: 10.2.1 + specifier: ^10.3.0 + version: 10.3.0 eslint: - specifier: ^8.51.0 - version: 8.51.0 + specifier: ^8.57.0 + version: 8.57.0 execa: specifier: ^4.1.0 version: 4.1.0 @@ -84,8 +84,8 @@ dependencies: specifier: ^10.1.0 version: 10.1.0 fs-extra: - specifier: ^11.1.1 - version: 11.1.1 + specifier: ^11.2.0 + version: 11.2.0 got: specifier: ^11.8.6 version: 11.8.6 @@ -125,6 +125,9 @@ dependencies: source-map-support: specifier: ^0.5.21 version: 0.5.21 + ts-expect: + specifier: ^1.3.0 + version: 1.3.0 type-fest: specifier: ^3.13.1 version: 3.13.1 @@ -135,8 +138,8 @@ dependencies: specifier: ^1.0.0 version: 1.0.0 yaml: - specifier: ^2.3.2 - version: 2.3.2 + specifier: ^2.4.0 + version: 2.4.0 zod: specifier: ^3.22.4 version: 3.22.4 @@ -146,95 +149,95 @@ dependencies: devDependencies: '@algolia/client-search': - specifier: ^4.20.0 - version: 4.20.0 + specifier: ^4.22.1 + version: 4.22.1 '@commitlint/cli': - specifier: ^17.7.2 - version: 17.7.2 + specifier: ^17.8.1 + version: 17.8.1 '@commitlint/config-angular': - specifier: ^17.7.0 - version: 17.7.0 + specifier: ^17.8.1 + version: 17.8.1 '@istanbuljs/nyc-config-typescript': specifier: ^1.0.2 version: 1.0.2(nyc@15.1.0) '@oclif/test': specifier: ^2.5.6 - version: 2.5.6(@types/node@18.18.5)(typescript@5.2.2) + version: 2.5.6(@types/node@18.19.21)(typescript@5.3.3) '@types/ali-oss': - specifier: ^6.16.9 - version: 6.16.9 + specifier: ^6.16.11 + version: 6.16.11 '@types/bluebird': - specifier: ^3.5.40 - version: 3.5.40 + specifier: ^3.5.42 + version: 3.5.42 '@types/bytes': - specifier: ^3.1.2 - version: 3.1.2 + specifier: ^3.1.4 + version: 3.1.4 '@types/chai': - specifier: ^4.3.8 - version: 4.3.8 + specifier: ^4.3.12 + version: 4.3.12 '@types/debug': - specifier: ^4.1.9 - version: 4.1.9 + specifier: ^4.1.12 + version: 4.1.12 '@types/fs-extra': - specifier: ^11.0.2 - version: 11.0.2 + specifier: ^11.0.4 + version: 11.0.4 '@types/ini': - specifier: ^1.3.31 - version: 1.3.31 + specifier: ^1.3.34 + version: 1.3.34 '@types/inquirer': - specifier: ^8.2.7 - version: 8.2.7 + specifier: ^8.2.10 + version: 8.2.10 '@types/ioredis-mock': - specifier: ^8.2.3 - version: 8.2.3 + specifier: ^8.2.5 + version: 8.2.5 '@types/lodash': - specifier: ^4.14.199 - version: 4.14.199 + specifier: ^4.14.202 + version: 4.14.202 '@types/micromatch': - specifier: ^4.0.3 - version: 4.0.3 + specifier: ^4.0.6 + version: 4.0.6 '@types/mocha': - specifier: ^10.0.2 - version: 10.0.2 + specifier: ^10.0.6 + version: 10.0.6 '@types/ms': - specifier: ^0.7.32 - version: 0.7.32 + specifier: ^0.7.34 + version: 0.7.34 '@types/node': - specifier: ^18.18.5 - version: 18.18.5 + specifier: ^18.19.21 + version: 18.19.21 '@types/node-dir': specifier: ^0.0.35 version: 0.0.35 '@types/nunjucks': - specifier: ^3.2.4 - version: 3.2.4 + specifier: ^3.2.6 + version: 3.2.6 '@types/sinon': - specifier: ^10.0.19 - version: 10.0.19 + specifier: ^10.0.20 + version: 10.0.20 '@types/urlsafe-base64': - specifier: ^1.0.29 - version: 1.0.29 + specifier: ^1.0.31 + version: 1.0.31 '@typescript-eslint/eslint-plugin': - specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@5.2.2) + specifier: ^7 + version: 7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.3.3) '@typescript-eslint/parser': - specifier: ^5.62.0 - version: 5.62.0(eslint@8.51.0)(typescript@5.2.2) + specifier: ^7 + version: 7.1.1(eslint@8.57.0)(typescript@5.3.3) '@vuepress/client': specifier: 2.0.0-beta.62 - version: 2.0.0-beta.62 + version: 2.0.0-beta.62(typescript@5.3.3) '@vuepress/plugin-docsearch': specifier: 2.0.0-beta.62 - version: 2.0.0-beta.62(@algolia/client-search@4.20.0) + version: 2.0.0-beta.62(@algolia/client-search@4.22.1)(typescript@5.3.3) '@vuepress/plugin-google-analytics': specifier: 2.0.0-beta.62 - version: 2.0.0-beta.62 + version: 2.0.0-beta.62(typescript@5.3.3) '@vuepress/plugin-register-components': specifier: 2.0.0-beta.62 - version: 2.0.0-beta.62 + version: 2.0.0-beta.62(typescript@5.3.3) '@vuepress/theme-default': specifier: 2.0.0-beta.62 - version: 2.0.0-beta.62 + version: 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': specifier: 2.0.0-beta.62 version: 2.0.0-beta.62 @@ -245,23 +248,23 @@ devDependencies: specifier: ^2.1.4 version: 2.1.4 bumpp: - specifier: ^9.2.0 - version: 9.2.0 + specifier: ^9.4.0 + version: 9.4.0 chai: - specifier: ^4.3.10 - version: 4.3.10 + specifier: ^4.4.1 + version: 4.4.1 chai-jest-snapshot: specifier: ^2.0.0 - version: 2.0.0(chai@4.3.10) + version: 2.0.0(chai@4.4.1) conventional-changelog-cli: specifier: ^2.2.2 version: 2.2.2 eslint-config-prettier: specifier: ^8.10.0 - version: 8.10.0(eslint@8.51.0) + version: 8.10.0(eslint@8.57.0) eslint-plugin-prettier: specifier: ^4.2.1 - version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.51.0)(prettier@2.8.8) + version: 4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@2.8.8) husky: specifier: ^8.0.3 version: 8.0.3 @@ -270,16 +273,16 @@ devDependencies: version: 3.0.1 ioredis-mock: specifier: ^8.9.0 - version: 8.9.0(@types/ioredis-mock@8.2.3)(ioredis@5.3.2) + version: 8.9.0(@types/ioredis-mock@8.2.5)(ioredis@5.3.2) lint-staged: specifier: ^13.3.0 version: 13.3.0 mocha: - specifier: ^10.2.0 - version: 10.2.0 + specifier: ^10.3.0 + version: 10.3.0 nock: - specifier: ^13.3.4 - version: 13.3.4 + specifier: ^13.5.4 + version: 13.5.4 np: specifier: ^6.5.0 version: 6.5.0 @@ -296,29 +299,29 @@ devDependencies: specifier: ^2.8.8 version: 2.8.8 sass: - specifier: ^1.69.3 - version: 1.69.3 + specifier: ^1.71.1 + version: 1.71.1 sinon: specifier: ^15.2.0 version: 15.2.0 ts-node: - specifier: ^10.9.1 - version: 10.9.1(@types/node@18.18.5)(typescript@5.2.2) + specifier: ^10.9.2 + version: 10.9.2(@types/node@18.19.21)(typescript@5.3.3) typescript: - specifier: ^5.2.2 - version: 5.2.2 + specifier: ^5.3.3 + version: 5.3.3 vue: - specifier: ^3.3.4 - version: 3.3.4 + specifier: ^3.4.21 + version: 3.4.21(typescript@5.3.3) vuepress: specifier: 2.0.0-beta.62 - version: 2.0.0-beta.62(@types/node@18.18.5)(@vuepress/client@2.0.0-beta.62)(sass@1.69.3)(ts-node@10.9.1)(vue@3.3.4) + version: 2.0.0-beta.62(@types/node@18.19.21)(@vuepress/client@2.0.0-beta.62)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3)(vue@3.4.21) vuepress-plugin-sitemap2: specifier: 2.0.0-beta.205 - version: 2.0.0-beta.205(vuepress@2.0.0-beta.62) + version: 2.0.0-beta.205(typescript@5.3.3)(vuepress@2.0.0-beta.62) vuepress-plugin-umami-analytics: - specifier: ^1.5.0 - version: 1.5.0 + specifier: ^1.8.1 + version: 1.8.1(typescript@5.3.3) packages: @@ -326,174 +329,174 @@ packages: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1): resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights dev: true - /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1): resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} peerDependencies: search-insights: '>= 1 < 3' dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch dev: true - /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + /@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1): resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) - '@algolia/client-search': 4.20.0 - algoliasearch: 4.20.0 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1) + '@algolia/client-search': 4.22.1 + algoliasearch: 4.22.1 dev: true - /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0): + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1): resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' dependencies: - '@algolia/client-search': 4.20.0 - algoliasearch: 4.20.0 + '@algolia/client-search': 4.22.1 + algoliasearch: 4.22.1 dev: true - /@algolia/cache-browser-local-storage@4.20.0: - resolution: {integrity: sha512-uujahcBt4DxduBTvYdwO3sBfHuJvJokiC3BP1+O70fglmE1ShkH8lpXqZBac1rrU3FnNYSUs4pL9lBdTKeRPOQ==} + /@algolia/cache-browser-local-storage@4.22.1: + resolution: {integrity: sha512-Sw6IAmOCvvP6QNgY9j+Hv09mvkvEIDKjYW8ow0UDDAxSXy664RBNQk3i/0nt7gvceOJ6jGmOTimaZoY1THmU7g==} dependencies: - '@algolia/cache-common': 4.20.0 + '@algolia/cache-common': 4.22.1 dev: true - /@algolia/cache-common@4.20.0: - resolution: {integrity: sha512-vCfxauaZutL3NImzB2G9LjLt36vKAckc6DhMp05An14kVo8F1Yofb6SIl6U3SaEz8pG2QOB9ptwM5c+zGevwIQ==} + /@algolia/cache-common@4.22.1: + resolution: {integrity: sha512-TJMBKqZNKYB9TptRRjSUtevJeQVXRmg6rk9qgFKWvOy8jhCPdyNZV1nB3SKGufzvTVbomAukFR8guu/8NRKBTA==} dev: true - /@algolia/cache-in-memory@4.20.0: - resolution: {integrity: sha512-Wm9ak/IaacAZXS4mB3+qF/KCoVSBV6aLgIGFEtQtJwjv64g4ePMapORGmCyulCFwfePaRAtcaTbMcJF+voc/bg==} + /@algolia/cache-in-memory@4.22.1: + resolution: {integrity: sha512-ve+6Ac2LhwpufuWavM/aHjLoNz/Z/sYSgNIXsinGofWOysPilQZPUetqLj8vbvi+DHZZaYSEP9H5SRVXnpsNNw==} dependencies: - '@algolia/cache-common': 4.20.0 + '@algolia/cache-common': 4.22.1 dev: true - /@algolia/client-account@4.20.0: - resolution: {integrity: sha512-GGToLQvrwo7am4zVkZTnKa72pheQeez/16sURDWm7Seyz+HUxKi3BM6fthVVPUEBhtJ0reyVtuK9ArmnaKl10Q==} + /@algolia/client-account@4.22.1: + resolution: {integrity: sha512-k8m+oegM2zlns/TwZyi4YgCtyToackkOpE+xCaKCYfBfDtdGOaVZCM5YvGPtK+HGaJMIN/DoTL8asbM3NzHonw==} dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/client-search': 4.20.0 - '@algolia/transporter': 4.20.0 + '@algolia/client-common': 4.22.1 + '@algolia/client-search': 4.22.1 + '@algolia/transporter': 4.22.1 dev: true - /@algolia/client-analytics@4.20.0: - resolution: {integrity: sha512-EIr+PdFMOallRdBTHHdKI3CstslgLORQG7844Mq84ib5oVFRVASuuPmG4bXBgiDbcsMLUeOC6zRVJhv1KWI0ug==} + /@algolia/client-analytics@4.22.1: + resolution: {integrity: sha512-1ssi9pyxyQNN4a7Ji9R50nSdISIumMFDwKNuwZipB6TkauJ8J7ha/uO60sPJFqQyqvvI+px7RSNRQT3Zrvzieg==} dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/client-search': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + '@algolia/client-common': 4.22.1 + '@algolia/client-search': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 dev: true - /@algolia/client-common@4.20.0: - resolution: {integrity: sha512-P3WgMdEss915p+knMMSd/fwiHRHKvDu4DYRrCRaBrsfFw7EQHon+EbRSm4QisS9NYdxbS04kcvNoavVGthyfqQ==} + /@algolia/client-common@4.22.1: + resolution: {integrity: sha512-IvaL5v9mZtm4k4QHbBGDmU3wa/mKokmqNBqPj0K7lcR8ZDKzUorhcGp/u8PkPC/e0zoHSTvRh7TRkGX3Lm7iOQ==} dependencies: - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 dev: true - /@algolia/client-personalization@4.20.0: - resolution: {integrity: sha512-N9+zx0tWOQsLc3K4PVRDV8GUeOLAY0i445En79Pr3zWB+m67V+n/8w4Kw1C5LlbHDDJcyhMMIlqezh6BEk7xAQ==} + /@algolia/client-personalization@4.22.1: + resolution: {integrity: sha512-sl+/klQJ93+4yaqZ7ezOttMQ/nczly/3GmgZXJ1xmoewP5jmdP/X/nV5U7EHHH3hCUEHeN7X1nsIhGPVt9E1cQ==} dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + '@algolia/client-common': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 dev: true - /@algolia/client-search@4.20.0: - resolution: {integrity: sha512-zgwqnMvhWLdpzKTpd3sGmMlr4c+iS7eyyLGiaO51zDZWGMkpgoNVmltkzdBwxOVXz0RsFMznIxB9zuarUv4TZg==} + /@algolia/client-search@4.22.1: + resolution: {integrity: sha512-yb05NA4tNaOgx3+rOxAmFztgMTtGBi97X7PC3jyNeGiwkAjOZc2QrdZBYyIdcDLoI09N0gjtpClcackoTN0gPA==} dependencies: - '@algolia/client-common': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/transporter': 4.20.0 + '@algolia/client-common': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/transporter': 4.22.1 dev: true - /@algolia/logger-common@4.20.0: - resolution: {integrity: sha512-xouigCMB5WJYEwvoWW5XDv7Z9f0A8VoXJc3VKwlHJw/je+3p2RcDXfksLI4G4lIVncFUYMZx30tP/rsdlvvzHQ==} + /@algolia/logger-common@4.22.1: + resolution: {integrity: sha512-OnTFymd2odHSO39r4DSWRFETkBufnY2iGUZNrMXpIhF5cmFE8pGoINNPzwg02QLBlGSaLqdKy0bM8S0GyqPLBg==} dev: true - /@algolia/logger-console@4.20.0: - resolution: {integrity: sha512-THlIGG1g/FS63z0StQqDhT6bprUczBI8wnLT3JWvfAQDZX5P6fCg7dG+pIrUBpDIHGszgkqYEqECaKKsdNKOUA==} + /@algolia/logger-console@4.22.1: + resolution: {integrity: sha512-O99rcqpVPKN1RlpgD6H3khUWylU24OXlzkavUAMy6QZd1776QAcauE3oP8CmD43nbaTjBexZj2nGsBH9Tc0FVA==} dependencies: - '@algolia/logger-common': 4.20.0 + '@algolia/logger-common': 4.22.1 dev: true - /@algolia/requester-browser-xhr@4.20.0: - resolution: {integrity: sha512-HbzoSjcjuUmYOkcHECkVTwAelmvTlgs48N6Owt4FnTOQdwn0b8pdht9eMgishvk8+F8bal354nhx/xOoTfwiAw==} + /@algolia/requester-browser-xhr@4.22.1: + resolution: {integrity: sha512-dtQGYIg6MteqT1Uay3J/0NDqD+UciHy3QgRbk7bNddOJu+p3hzjTRYESqEnoX/DpEkaNYdRHUKNylsqMpgwaEw==} dependencies: - '@algolia/requester-common': 4.20.0 + '@algolia/requester-common': 4.22.1 dev: true - /@algolia/requester-common@4.20.0: - resolution: {integrity: sha512-9h6ye6RY/BkfmeJp7Z8gyyeMrmmWsMOCRBXQDs4mZKKsyVlfIVICpcSibbeYcuUdurLhIlrOUkH3rQEgZzonng==} + /@algolia/requester-common@4.22.1: + resolution: {integrity: sha512-dgvhSAtg2MJnR+BxrIFqlLtkLlVVhas9HgYKMk2Uxiy5m6/8HZBL40JVAMb2LovoPFs9I/EWIoFVjOrFwzn5Qg==} dev: true - /@algolia/requester-node-http@4.20.0: - resolution: {integrity: sha512-ocJ66L60ABSSTRFnCHIEZpNHv6qTxsBwJEPfYaSBsLQodm0F9ptvalFkHMpvj5DfE22oZrcrLbOYM2bdPJRHng==} + /@algolia/requester-node-http@4.22.1: + resolution: {integrity: sha512-JfmZ3MVFQkAU+zug8H3s8rZ6h0ahHZL/SpMaSasTCGYR5EEJsCc8SI5UZ6raPN2tjxa5bxS13BRpGSBUens7EA==} dependencies: - '@algolia/requester-common': 4.20.0 + '@algolia/requester-common': 4.22.1 dev: true - /@algolia/transporter@4.20.0: - resolution: {integrity: sha512-Lsii1pGWOAISbzeyuf+r/GPhvHMPHSPrTDWNcIzOE1SG1inlJHICaVe2ikuoRjcpgxZNU54Jl+if15SUCsaTUg==} + /@algolia/transporter@4.22.1: + resolution: {integrity: sha512-kzWgc2c9IdxMa3YqA6TN0NW5VrKYYW/BELIn7vnLyn+U/RFdZ4lxxt9/8yq3DKV5snvoDzzO4ClyejZRdV3lMQ==} dependencies: - '@algolia/cache-common': 4.20.0 - '@algolia/logger-common': 4.20.0 - '@algolia/requester-common': 4.20.0 + '@algolia/cache-common': 4.22.1 + '@algolia/logger-common': 4.22.1 + '@algolia/requester-common': 4.22.1 dev: true - /@ampproject/remapping@2.2.1: - resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@babel/code-frame@7.22.13: - resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==} + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/highlight': 7.22.20 + '@babel/highlight': 7.23.4 chalk: 2.4.2 dev: true - /@babel/compat-data@7.23.2: - resolution: {integrity: sha512-0S9TQMmDHlqAZ2ITT95irXKfxN9bncq8ZCoJhun3nHL/lLUxd2NKBJYoNGWH7S0hz6fRQwWlAWn/ILM0C70KZQ==} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} engines: {node: '>=6.9.0'} dev: true - /@babel/core@7.23.2: - resolution: {integrity: sha512-n7s51eWdaWZ3vGT2tD4T7J6eJs3QoBXydv7vkUM06Bf1cbVD2Kc2UrkzhiQwobfV7NwOnQXYL7UBJ5VPU+RGoQ==} + /@babel/core@7.24.0: + resolution: {integrity: sha512-fQfkg0Gjkza3nf0c7/w6Xf34BW4YvzNfACRLmmb7XRLa6XHdR+K9AlJlxneFfWYf6uhOzuzZVTjF/8KfndZANw==} engines: {node: '>=6.9.0'} dependencies: - '@ampproject/remapping': 2.2.1 - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 - '@babel/helper-compilation-targets': 7.22.15 - '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.2) - '@babel/helpers': 7.23.2 - '@babel/parser': 7.23.0 - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.2 - '@babel/types': 7.23.0 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.0) + '@babel/helpers': 7.24.0 + '@babel/parser': 7.24.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 convert-source-map: 2.0.0 debug: 4.3.4(supports-color@8.1.1) gensync: 1.0.0-beta.2 @@ -503,23 +506,23 @@ packages: - supports-color dev: true - /@babel/generator@7.23.0: - resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==} + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 - '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.19 + '@babel/types': 7.24.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets@7.22.15: - resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==} + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} dependencies: - '@babel/compat-data': 7.23.2 - '@babel/helper-validator-option': 7.22.15 - browserslist: 4.22.1 + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -533,31 +536,31 @@ packages: resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/types': 7.23.0 + '@babel/template': 7.24.0 + '@babel/types': 7.24.0 dev: true /@babel/helper-hoist-variables@7.22.5: resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.0 dev: true /@babel/helper-module-imports@7.22.15: resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.0 dev: true - /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.2): - resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + /@babel/helper-module-transforms@7.23.3(@babel/core@7.24.0): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.24.0 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-module-imports': 7.22.15 '@babel/helper-simple-access': 7.22.5 @@ -569,42 +572,42 @@ packages: resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.0 dev: true /@babel/helper-split-export-declaration@7.22.6: resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.0 dev: true - /@babel/helper-string-parser@7.22.5: - resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} engines: {node: '>=6.9.0'} /@babel/helper-validator-identifier@7.22.20: resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} - /@babel/helper-validator-option@7.22.15: - resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} dev: true - /@babel/helpers@7.23.2: - resolution: {integrity: sha512-lzchcp8SjTSVe/fPmLwtWVBFC7+Tbn8LGHDVfDp9JGxpAY5opSaEFgt8UQvrnECWOTdji2mOWMz1rOhkHscmGQ==} + /@babel/helpers@7.24.0: + resolution: {integrity: sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.22.15 - '@babel/traverse': 7.23.2 - '@babel/types': 7.23.0 + '@babel/template': 7.24.0 + '@babel/traverse': 7.24.0 + '@babel/types': 7.24.0 transitivePeerDependencies: - supports-color dev: true - /@babel/highlight@7.22.20: - resolution: {integrity: sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==} + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-validator-identifier': 7.22.20 @@ -612,52 +615,52 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser@7.23.0: - resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==} + /@babel/parser@7.24.0: + resolution: {integrity: sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.23.0 + '@babel/types': 7.24.0 - /@babel/runtime@7.23.2: - resolution: {integrity: sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg==} + /@babel/runtime@7.24.0: + resolution: {integrity: sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 dev: false - /@babel/template@7.22.15: - resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + /@babel/template@7.24.0: + resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 dev: true - /@babel/traverse@7.23.2: - resolution: {integrity: sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==} + /@babel/traverse@7.24.0: + resolution: {integrity: sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/code-frame': 7.22.13 - '@babel/generator': 7.23.0 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-function-name': 7.23.0 '@babel/helper-hoist-variables': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.23.0 - '@babel/types': 7.23.0 + '@babel/parser': 7.24.0 + '@babel/types': 7.24.0 debug: 4.3.4(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types@7.23.0: - resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + /@babel/types@7.24.0: + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-string-parser': 7.22.5 + '@babel/helper-string-parser': 7.23.4 '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 @@ -665,26 +668,21 @@ packages: resolution: {integrity: sha512-1T8WlD75eeFSMrptGy8jiLHmfHgMmSjWvLOIUvHmSVZt+6k0eQqYUoK4KbmE4T9pVLIfxvZSOm2D68VEqKRHRw==} dev: false - /@colors/colors@1.5.0: - resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} - engines: {node: '>=0.1.90'} - dev: false - /@colors/colors@1.6.0: resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} engines: {node: '>=0.1.90'} dev: false - /@commitlint/cli@17.7.2: - resolution: {integrity: sha512-t3N7TZq7lOeqTOyEgfGcaltHqEJf7YDlPg75MldeVPPyz14jZq/+mbGF9tueDLFX8R6RwdymrN6D+U5XwZ8Iwg==} + /@commitlint/cli@17.8.1: + resolution: {integrity: sha512-ay+WbzQesE0Rv4EQKfNbSMiJJ12KdKTDzIt0tcK4k11FdsWmtwP0Kp1NWMOUswfIWo6Eb7p7Ln721Nx9FLNBjg==} engines: {node: '>=v14'} hasBin: true dependencies: - '@commitlint/format': 17.4.4 - '@commitlint/lint': 17.7.0 - '@commitlint/load': 17.7.2 - '@commitlint/read': 17.5.1 - '@commitlint/types': 17.4.4 + '@commitlint/format': 17.8.1 + '@commitlint/lint': 17.8.1 + '@commitlint/load': 17.8.1 + '@commitlint/read': 17.8.1 + '@commitlint/types': 17.8.1 execa: 5.1.1 lodash.isfunction: 3.0.9 resolve-from: 5.0.0 @@ -695,31 +693,31 @@ packages: - '@swc/wasm' dev: true - /@commitlint/config-angular-type-enum@17.4.0: - resolution: {integrity: sha512-qbmfOfVqQHMKfc6CxS0A9b7+EFsOyEBoh4+i8Qa05uk8YhT/zY1CeIXK5V3wwemMDcHUegyL/ZnwCvWD7g8GxA==} + /@commitlint/config-angular-type-enum@17.8.1: + resolution: {integrity: sha512-vuIQ9rZckMPRM6I3mWzfWb7TfvE/yHJXNKaR2weuhf+lQEVSZSGQP3LwdXpMcT2QGKE9VAhU/jw0qIE0Z9EbHA==} engines: {node: '>=v14'} dev: true - /@commitlint/config-angular@17.7.0: - resolution: {integrity: sha512-ZWLgVw4se/vmNHfWiti3OIx295KgyCgZ5LjDeLFbHQe9WXMX3lhwnaeJkum4smsQhQaa3/JvufKzxV/3LDGMJA==} + /@commitlint/config-angular@17.8.1: + resolution: {integrity: sha512-M3gfC2YttKOEDHrtOtCHfoIdF74vUc+ffJHTyU6j+xqlXrc34iOS665r1rRaTgX6CEeUAnNdpWn0zKYZTj27lA==} engines: {node: '>=v14'} dependencies: - '@commitlint/config-angular-type-enum': 17.4.0 + '@commitlint/config-angular-type-enum': 17.8.1 dev: true - /@commitlint/config-validator@17.6.7: - resolution: {integrity: sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==} + /@commitlint/config-validator@17.8.1: + resolution: {integrity: sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.4.4 + '@commitlint/types': 17.8.1 ajv: 8.12.0 dev: true - /@commitlint/ensure@17.6.7: - resolution: {integrity: sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==} + /@commitlint/ensure@17.8.1: + resolution: {integrity: sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.4.4 + '@commitlint/types': 17.8.1 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 @@ -727,122 +725,122 @@ packages: lodash.upperfirst: 4.3.1 dev: true - /@commitlint/execute-rule@17.4.0: - resolution: {integrity: sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==} + /@commitlint/execute-rule@17.8.1: + resolution: {integrity: sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ==} engines: {node: '>=v14'} dev: true - /@commitlint/format@17.4.4: - resolution: {integrity: sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==} + /@commitlint/format@17.8.1: + resolution: {integrity: sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.4.4 + '@commitlint/types': 17.8.1 chalk: 4.1.2 dev: true - /@commitlint/is-ignored@17.7.0: - resolution: {integrity: sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==} + /@commitlint/is-ignored@17.8.1: + resolution: {integrity: sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.4.4 + '@commitlint/types': 17.8.1 semver: 7.5.4 dev: true - /@commitlint/lint@17.7.0: - resolution: {integrity: sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==} + /@commitlint/lint@17.8.1: + resolution: {integrity: sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA==} engines: {node: '>=v14'} dependencies: - '@commitlint/is-ignored': 17.7.0 - '@commitlint/parse': 17.7.0 - '@commitlint/rules': 17.7.0 - '@commitlint/types': 17.4.4 + '@commitlint/is-ignored': 17.8.1 + '@commitlint/parse': 17.8.1 + '@commitlint/rules': 17.8.1 + '@commitlint/types': 17.8.1 dev: true - /@commitlint/load@17.7.2: - resolution: {integrity: sha512-XA7WTnsjHZ4YH6ZYsrnxgLdXzriwMMq+utZUET6spbOEEIPBCDLdOQXS26P+v3TTO4hUHOEhzUquaBv3jbBixw==} + /@commitlint/load@17.8.1: + resolution: {integrity: sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA==} engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 17.6.7 - '@commitlint/execute-rule': 17.4.0 - '@commitlint/resolve-extends': 17.6.7 - '@commitlint/types': 17.4.4 + '@commitlint/config-validator': 17.8.1 + '@commitlint/execute-rule': 17.8.1 + '@commitlint/resolve-extends': 17.8.1 + '@commitlint/types': 17.8.1 '@types/node': 20.5.1 chalk: 4.1.2 - cosmiconfig: 8.3.6(typescript@5.2.2) - cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.1)(typescript@5.2.2) + cosmiconfig: 8.3.6(typescript@5.3.3) + cosmiconfig-typescript-loader: 4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.3.3) lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 lodash.uniq: 4.5.0 resolve-from: 5.0.0 - ts-node: 10.9.1(@types/node@20.5.1)(typescript@5.2.2) - typescript: 5.2.2 + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' dev: true - /@commitlint/message@17.4.2: - resolution: {integrity: sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==} + /@commitlint/message@17.8.1: + resolution: {integrity: sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA==} engines: {node: '>=v14'} dev: true - /@commitlint/parse@17.7.0: - resolution: {integrity: sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==} + /@commitlint/parse@17.8.1: + resolution: {integrity: sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw==} engines: {node: '>=v14'} dependencies: - '@commitlint/types': 17.4.4 + '@commitlint/types': 17.8.1 conventional-changelog-angular: 6.0.0 conventional-commits-parser: 4.0.0 dev: true - /@commitlint/read@17.5.1: - resolution: {integrity: sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==} + /@commitlint/read@17.8.1: + resolution: {integrity: sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w==} engines: {node: '>=v14'} dependencies: - '@commitlint/top-level': 17.4.0 - '@commitlint/types': 17.4.4 - fs-extra: 11.1.1 + '@commitlint/top-level': 17.8.1 + '@commitlint/types': 17.8.1 + fs-extra: 11.2.0 git-raw-commits: 2.0.11 minimist: 1.2.8 dev: true - /@commitlint/resolve-extends@17.6.7: - resolution: {integrity: sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==} + /@commitlint/resolve-extends@17.8.1: + resolution: {integrity: sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q==} engines: {node: '>=v14'} dependencies: - '@commitlint/config-validator': 17.6.7 - '@commitlint/types': 17.4.4 + '@commitlint/config-validator': 17.8.1 + '@commitlint/types': 17.8.1 import-fresh: 3.3.0 lodash.mergewith: 4.6.2 resolve-from: 5.0.0 resolve-global: 1.0.0 dev: true - /@commitlint/rules@17.7.0: - resolution: {integrity: sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==} + /@commitlint/rules@17.8.1: + resolution: {integrity: sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA==} engines: {node: '>=v14'} dependencies: - '@commitlint/ensure': 17.6.7 - '@commitlint/message': 17.4.2 - '@commitlint/to-lines': 17.4.0 - '@commitlint/types': 17.4.4 + '@commitlint/ensure': 17.8.1 + '@commitlint/message': 17.8.1 + '@commitlint/to-lines': 17.8.1 + '@commitlint/types': 17.8.1 execa: 5.1.1 dev: true - /@commitlint/to-lines@17.4.0: - resolution: {integrity: sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==} + /@commitlint/to-lines@17.8.1: + resolution: {integrity: sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA==} engines: {node: '>=v14'} dev: true - /@commitlint/top-level@17.4.0: - resolution: {integrity: sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==} + /@commitlint/top-level@17.8.1: + resolution: {integrity: sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA==} engines: {node: '>=v14'} dependencies: find-up: 5.0.0 dev: true - /@commitlint/types@17.4.4: - resolution: {integrity: sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==} + /@commitlint/types@17.8.1: + resolution: {integrity: sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ==} engines: {node: '>=v14'} dependencies: chalk: 4.1.2 @@ -866,11 +864,11 @@ packages: resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} dev: true - /@docsearch/js@3.5.2(@algolia/client-search@4.20.0): + /@docsearch/js@3.5.2(@algolia/client-search@4.22.1): resolution: {integrity: sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==} dependencies: - '@docsearch/react': 3.5.2(@algolia/client-search@4.20.0) - preact: 10.18.1 + '@docsearch/react': 3.5.2(@algolia/client-search@4.22.1) + preact: 10.19.6 transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -879,7 +877,7 @@ packages: - search-insights dev: true - /@docsearch/react@3.5.2(@algolia/client-search@4.20.0): + /@docsearch/react@3.5.2(@algolia/client-search@4.22.1): resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' @@ -896,10 +894,10 @@ packages: search-insights: optional: true dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.20.0)(algoliasearch@4.20.0) + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1) + '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.22.1)(algoliasearch@4.22.1) '@docsearch/css': 3.5.2 - algoliasearch: 4.20.0 + algoliasearch: 4.22.1 transitivePeerDependencies: - '@algolia/client-search' dev: true @@ -1102,28 +1100,28 @@ packages: dev: true optional: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.51.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.51.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 - /@eslint-community/regexpp@4.9.1: - resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4(supports-color@8.1.1) espree: 9.6.1 - globals: 13.23.0 - ignore: 5.2.4 + globals: 13.24.0 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1131,15 +1129,15 @@ packages: transitivePeerDependencies: - supports-color - /@eslint/js@8.51.0: - resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.2 debug: 4.3.4(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: @@ -1149,8 +1147,8 @@ packages: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} /@hutson/parse-repository-url@3.0.2: resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} @@ -1190,38 +1188,38 @@ packages: engines: {node: '>=8'} dev: true - /@jridgewell/gen-mapping@0.3.3: - resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/set-array': 1.1.2 + '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.4.15 - '@jridgewell/trace-mapping': 0.3.19 + '@jridgewell/trace-mapping': 0.3.25 dev: true - /@jridgewell/resolve-uri@3.1.1: - resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - /@jridgewell/set-array@1.1.2: - resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} dev: true /@jridgewell/sourcemap-codec@1.4.15: resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - /@jridgewell/trace-mapping@0.3.19: - resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 dev: true /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: - '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.4.15 /@jsdevtools/ez-spawn@3.0.4: @@ -1237,66 +1235,129 @@ packages: /@mdit-vue/plugin-component@0.12.1: resolution: {integrity: sha512-L3elbvuKUufXwPLHrmJGd/ijd/QKxfcHXy3kRy4O+P7UIV7HSWePpfB0k+wWee+by3MviYYxjVAi392z+DGy3Q==} dependencies: - '@types/markdown-it': 13.0.2 + '@types/markdown-it': 13.0.7 markdown-it: 13.0.2 dev: true + /@mdit-vue/plugin-component@2.0.0: + resolution: {integrity: sha512-cTRxlocav/+mfgDcp0P2z/gWuWBez+iNuN4D+b74LpX4AR6UAx2ZvWtCrUZ8VXrO4eCt1/G0YC/Af7mpIb3aoQ==} + dependencies: + '@types/markdown-it': 13.0.7 + markdown-it: 14.0.0 + dev: true + /@mdit-vue/plugin-frontmatter@0.12.1: resolution: {integrity: sha512-C6ycNjrJ+T4JgbVxwo9cUkfLacOO841Yl8ogqd5PJmAVpc5cM2OLBkqqkZxNRXos3g9xM1VvIQ7gK/047UNADg==} dependencies: '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 + '@types/markdown-it': 13.0.7 gray-matter: 4.0.3 markdown-it: 13.0.2 dev: true + /@mdit-vue/plugin-frontmatter@2.0.0: + resolution: {integrity: sha512-/LrT6E60QI4XV4mqx3J87hqYXlR7ZyMvndmftR2RGz7cRAwa/xL+kyFLlgrMxkBIKitOShKa3LS/9Ov9b0fU+g==} + dependencies: + '@mdit-vue/types': 2.0.0 + '@types/markdown-it': 13.0.7 + gray-matter: 4.0.3 + markdown-it: 14.0.0 + dev: true + /@mdit-vue/plugin-headers@0.12.1: resolution: {integrity: sha512-DXAw/iWW8f3qUYMDHgQmamL+XGjnaoeRzdvDseLRyr7gXX4xpYO9OIhe/pv9LzSvUoY7UGYmn4kFeI+0qpWJ+g==} dependencies: '@mdit-vue/shared': 0.12.1 '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 + '@types/markdown-it': 13.0.7 markdown-it: 13.0.2 dev: true + /@mdit-vue/plugin-headers@2.0.0: + resolution: {integrity: sha512-ITMMPCnLEYHHgj3XEUL2l75jsNn8guxNqr26YrMSi1f5zcgq4XVy1LIvfwvJ1puqM6Cc5v4BHk3oAyorAi7l1A==} + dependencies: + '@mdit-vue/shared': 2.0.0 + '@mdit-vue/types': 2.0.0 + '@types/markdown-it': 13.0.7 + markdown-it: 14.0.0 + dev: true + /@mdit-vue/plugin-sfc@0.12.1: resolution: {integrity: sha512-6j332CsSqumy1+StIM3XphdXG1zj9NXuWestDJrKgS3OLy5P0EAioXScUYiZYysw61ZG+2pP37MW7Hg+eHbyIg==} dependencies: '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 + '@types/markdown-it': 13.0.7 markdown-it: 13.0.2 dev: true + /@mdit-vue/plugin-sfc@2.0.0: + resolution: {integrity: sha512-OXrMXOyk0iwdIou2jRoIHIbjskwghkO14C9/OjgVHXSSX+iM/WQ4l4yi1aWmNlbQNjtP8IXcVAyJB9K0DFYmLg==} + dependencies: + '@mdit-vue/types': 2.0.0 + '@types/markdown-it': 13.0.7 + markdown-it: 14.0.0 + dev: true + /@mdit-vue/plugin-title@0.12.1: resolution: {integrity: sha512-JOsiDj+CryGbrTDWUnDAwB9kSkN6o9GDo3udR6BPDgBNVb3zAnx9ZNaRpEhDW1LnQhf9/LYicWJ2eTNRKPcJNQ==} dependencies: '@mdit-vue/shared': 0.12.1 '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 + '@types/markdown-it': 13.0.7 markdown-it: 13.0.2 dev: true + /@mdit-vue/plugin-title@2.0.0: + resolution: {integrity: sha512-eqBoETPVkMXNLvwFshz/A2+Cz81VB5HEkXDm0tt6RBW/rTvnoWmGJ1Z+mvcjR5ck5W4nYdIyT68oHxX2JI2M4g==} + dependencies: + '@mdit-vue/shared': 2.0.0 + '@mdit-vue/types': 2.0.0 + '@types/markdown-it': 13.0.7 + markdown-it: 14.0.0 + dev: true + /@mdit-vue/plugin-toc@0.12.1: resolution: {integrity: sha512-nFGwTwVa8GLCKJMV7cGST7lYuljSjEiCTPgKIpQ/WifwouHsQaL/rnBDr22kpzY2hRTAhM3+TT5GDwLyxa/e6A==} dependencies: '@mdit-vue/shared': 0.12.1 '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 + '@types/markdown-it': 13.0.7 markdown-it: 13.0.2 dev: true + /@mdit-vue/plugin-toc@2.0.0: + resolution: {integrity: sha512-PKQ8sZna3D5chTnt2lxL+ddpyXd++6Nyc0l8VXCeDgStlySQwiP9jaLeeC88oqY4BtRu4cAmILmxDrvuX0Rrdg==} + dependencies: + '@mdit-vue/shared': 2.0.0 + '@mdit-vue/types': 2.0.0 + '@types/markdown-it': 13.0.7 + markdown-it: 14.0.0 + dev: true + /@mdit-vue/shared@0.12.1: resolution: {integrity: sha512-bXgd0KThe4jC2leCFDFsyrudXIckvTwV4WnQK/rRMrXq0/BAuVdSNdIv1LGCWZxD5+oDyPyEPd0lalTIFwqsmg==} dependencies: '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 + '@types/markdown-it': 13.0.7 markdown-it: 13.0.2 dev: true + /@mdit-vue/shared@2.0.0: + resolution: {integrity: sha512-PdxpQpbyTazeo2JT87qms6RPZIzyJd+gwuB+1jSwLDI7+0u5g79y2XgTAbZromSVgY2f3UU5HWdwaLbV9w4uOw==} + dependencies: + '@mdit-vue/types': 2.0.0 + '@types/markdown-it': 13.0.7 + markdown-it: 14.0.0 + dev: true + /@mdit-vue/types@0.12.0: resolution: {integrity: sha512-mrC4y8n88BYvgcgzq9bvTlDgFyi2zuvzmPilRvRc3Uz1iIvq8mDhxJ0rHKFUNzPEScpDvJdIujqiDrulMqiudA==} dev: true + /@mdit-vue/types@2.0.0: + resolution: {integrity: sha512-1BeEB+DbtmDMUAfvbNUj5Hso8cSl2sBVK2iTyOMAqhfDVLdh+/9+D0JmQHaCeUk/vuJoMhOwbweZvh55wHxm4w==} + dev: true + /@nodelib/fs.scandir@2.1.5: resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1313,13 +1374,13 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 - /@oclif/core@2.15.0(@types/node@18.18.5)(typescript@5.2.2): + /@oclif/core@2.15.0(@types/node@18.19.21)(typescript@5.3.3): resolution: {integrity: sha512-fNEMG5DzJHhYmI3MgpByTvltBOMyFcnRIUMxbiz2ai8rhaYgaTHMG3Q38HcosfIvtw9nCjxpcQtC8MN8QtVCcA==} engines: {node: '>=14.0.0'} dependencies: - '@types/cli-progress': 3.11.3 + '@types/cli-progress': 3.11.5 ansi-escapes: 4.3.2 ansi-styles: 4.3.0 cardinal: 2.1.1 @@ -1342,7 +1403,7 @@ packages: strip-ansi: 6.0.1 supports-color: 8.1.1 supports-hyperlinks: 2.3.0 - ts-node: 10.9.1(@types/node@18.18.5)(typescript@5.2.2) + ts-node: 10.9.2(@types/node@18.19.21)(typescript@5.3.3) tslib: 2.6.2 widest-line: 3.1.0 wordwrap: 1.0.0 @@ -1353,11 +1414,11 @@ packages: - '@types/node' - typescript - /@oclif/plugin-help@5.2.20(@types/node@18.18.5)(typescript@5.2.2): + /@oclif/plugin-help@5.2.20(@types/node@18.19.21)(typescript@5.3.3): resolution: {integrity: sha512-u+GXX/KAGL9S10LxAwNUaWdzbEBARJ92ogmM7g3gDVud2HioCmvWQCDohNRVZ9GYV9oKwZ/M8xwd6a1d95rEKQ==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.15.0(@types/node@18.18.5)(typescript@5.2.2) + '@oclif/core': 2.15.0(@types/node@18.19.21)(typescript@5.3.3) transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -1365,22 +1426,22 @@ packages: - typescript dev: false - /@oclif/plugin-plugins@3.9.1(@types/node@18.18.5)(typescript@5.2.2): - resolution: {integrity: sha512-86155GW6fQ8ZsmscffIOuvjjCCnXfuUJ/3dA+s6vqVgyGu8VshsHxnA9LCVja/Gz53j9TeaEog08IMcMDsmS7g==} + /@oclif/plugin-plugins@3.9.4(@types/node@18.19.21)(typescript@5.3.3): + resolution: {integrity: sha512-JtumjspRdzJgHk1S10wu68tdlqSnyYRmSgCsmsc6AEvU+Orb0DQfrAgJEO77rPKPNo5MfnVAj0WyCDTi0JT/vw==} engines: {node: '>=16'} dependencies: - '@oclif/core': 2.15.0(@types/node@18.18.5)(typescript@5.2.2) + '@oclif/core': 2.15.0(@types/node@18.19.21)(typescript@5.3.3) chalk: 4.1.2 debug: 4.3.4(supports-color@8.1.1) http-call: 5.3.0 load-json-file: 5.3.0 npm: 9.8.1 npm-run-path: 4.0.1 - semver: 7.5.4 + semver: 7.6.0 shelljs: 0.8.5 tslib: 2.6.2 validate-npm-package-name: 5.0.0 - yarn: 1.22.19 + yarn: 1.22.21 transitivePeerDependencies: - '@swc/core' - '@swc/wasm' @@ -1389,11 +1450,11 @@ packages: - typescript dev: false - /@oclif/test@2.5.6(@types/node@18.18.5)(typescript@5.2.2): + /@oclif/test@2.5.6(@types/node@18.19.21)(typescript@5.3.3): resolution: {integrity: sha512-AcusFApdU6/akXaofhBDrY4IM9uYzlOD9bYCCM0NwUXOv1m6320hSp2DT/wkj9H1gsvKbJXZHqgtXsNGZTWLFg==} engines: {node: '>=12.0.0'} dependencies: - '@oclif/core': 2.15.0(@types/node@18.18.5)(typescript@5.2.2) + '@oclif/core': 2.15.0(@types/node@18.19.21)(typescript@5.3.3) fancy-test: 2.0.42 transitivePeerDependencies: - '@swc/core' @@ -1455,14 +1516,19 @@ packages: engines: {node: '>=10'} dev: false + /@sindresorhus/merge-streams@2.3.0: + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + dev: true + /@sinonjs/commons@2.0.0: resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} dependencies: type-detect: 4.0.8 dev: true - /@sinonjs/commons@3.0.0: - resolution: {integrity: sha512-jXBtWAF4vmdNmZgD5FoKsVLv3rPgDnLgPbU84LIJ3otV44vJlDRokVng5v8NFJdCf/da9legHcKaRuZs4L7faA==} + /@sinonjs/commons@3.0.1: + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} dependencies: type-detect: 4.0.8 dev: true @@ -1470,7 +1536,13 @@ packages: /@sinonjs/fake-timers@10.3.0: resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 + dev: true + + /@sinonjs/fake-timers@11.2.2: + resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} + dependencies: + '@sinonjs/commons': 3.0.1 dev: true /@sinonjs/samsam@8.0.0: @@ -1492,7 +1564,7 @@ packages: /@surgio/logger@1.3.0: resolution: {integrity: sha512-kfqErI1QaJog5u0voa/Jltx28JMlSSHhUB9xCi+EIlY6tVwzVnJ8BmDuPuuAfEmvdkWlifTXx29ZHPVM3H7Dzg==} dependencies: - winston: 3.11.0 + winston: 3.12.0 dev: false /@szmarczak/http-timer@1.1.2: @@ -1519,120 +1591,121 @@ packages: /@tsconfig/node16@1.0.4: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} - /@types/ali-oss@6.16.9: - resolution: {integrity: sha512-CJvB+LHy+vMbRkIo6qMtTdC0gD4+Ze+xqP0625rN3OA9zrhfLI5Xz5fcCKoihbOl6DFMy9m9+KRQn+y4pwOxYg==} + /@types/ali-oss@6.16.11: + resolution: {integrity: sha512-/AyemPZy93ZXGzEokMsoPFgjH37snpzH4X/fwans/n63HLaCleriCG3PyrkHCPkgHEc9vj9Uo6paqsBN3vJ3OA==} dev: true - /@types/bluebird@3.5.40: - resolution: {integrity: sha512-4dEtF/qcby/FdT6iChii+jFXzVVX0+5HYiDqHKBtHQ3ZV58x5uVJJYRG0N4QllIaj5a2+UDdf/nupae+/M6mdw==} + /@types/bluebird@3.5.42: + resolution: {integrity: sha512-Jhy+MWRlro6UjVi578V/4ZGNfeCOcNCp0YaFNIUGFKlImowqwb1O/22wDVk3FDGMLqxdpOV3qQHD5fPEH4hK6A==} dev: true - /@types/braces@3.0.2: - resolution: {integrity: sha512-U5tlMYa0U/2eFTmJgKcPWQOEICP173sJDa6OjHbj5Tv+NVaYcrq2xmdWpNXOwWYGwJu+jER/pfTLdoQ31q8PzA==} + /@types/braces@3.0.4: + resolution: {integrity: sha512-0WR3b8eaISjEW7RpZnclONaLFDf7buaowRHdqLp4vLj54AsSAYWfh3DRbfiYJY9XDxMgx1B4sE1Afw2PGpuHOA==} dev: true - /@types/bytes@3.1.2: - resolution: {integrity: sha512-92b6q7CSYBMVZDtMZh5PuKm3LjZwcU7s6H8e9sU20Z1tOrTuXN+Hz3VuP9E8axiQRaCoiEOMN1duqPCEIhamrQ==} + /@types/bytes@3.1.4: + resolution: {integrity: sha512-A0uYgOj3zNc4hNjHc5lYUfJQ/HVyBXiUMKdXd7ysclaE6k9oJdavQzODHuwjpUu2/boCP8afjQYi8z/GtvNCWA==} dev: true /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: - '@types/http-cache-semantics': 4.0.2 + '@types/http-cache-semantics': 4.0.4 '@types/keyv': 3.1.4 - '@types/node': 18.18.5 - '@types/responselike': 1.0.1 + '@types/node': 18.19.21 + '@types/responselike': 1.0.3 - /@types/chai@4.3.8: - resolution: {integrity: sha512-yW/qTM4mRBBcsA9Xw9FbcImYtFPY7sgr+G/O5RDYVmxiy9a+pE5FyoFUi8JYCZY5nicj8atrr1pcfPiYpeNGOA==} + /@types/chai@4.3.12: + resolution: {integrity: sha512-zNKDHG/1yxm8Il6uCCVsm+dRdEsJlFoDu73X17y09bId6UwoYww+vFBsAcRzl8knM1sab3Dp1VRikFQwDOtDDw==} dev: true - /@types/cli-progress@3.11.3: - resolution: {integrity: sha512-/+C9xAdVtc+g5yHHkGBThgAA8rYpi5B+2ve3wLtybYj0JHEBs57ivR4x/zGfSsplRnV+psE91Nfin1soNKqz5Q==} + /@types/cli-progress@3.11.5: + resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 - /@types/debug@4.1.9: - resolution: {integrity: sha512-8Hz50m2eoS56ldRlepxSBa6PWEVCtzUo/92HgLc2qTMnotJNIm7xP+UZhyWoYsyOdd5dxZ+NZLb24rsKyFs2ow==} + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@types/ms': 0.7.32 + '@types/ms': 0.7.34 dev: true - /@types/eslint@8.44.4: - resolution: {integrity: sha512-lOzjyfY/D9QR4hY9oblZ76B90MYTB3RrQ4z2vBIJKj9ROCRqdkYl2gSUx1x1a4IWPjKJZLL4Aw1Zfay7eMnmnA==} + /@types/eslint@8.56.5: + resolution: {integrity: sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==} dependencies: - '@types/estree': 1.0.2 - '@types/json-schema': 7.0.13 + '@types/estree': 1.0.5 + '@types/json-schema': 7.0.15 dev: false - /@types/estree@1.0.2: - resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==} + /@types/estree@1.0.5: + resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} dev: false - /@types/fs-extra@11.0.2: - resolution: {integrity: sha512-c0hrgAOVYr21EX8J0jBMXGLMgJqVf/v6yxi0dLaJboW9aQPh16Id+z6w2Tx1hm+piJOLv8xPfVKZCLfjPw/IMQ==} + /@types/fs-extra@11.0.4: + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} dependencies: - '@types/jsonfile': 6.1.2 - '@types/node': 18.18.5 + '@types/jsonfile': 6.1.4 + '@types/node': 18.19.21 dev: true /@types/glob@7.2.0: resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} dependencies: '@types/minimatch': 5.1.2 - '@types/node': 18.18.5 + '@types/node': 18.19.21 dev: true - /@types/hash-sum@1.0.0: - resolution: {integrity: sha512-FdLBT93h3kcZ586Aee66HPCVJ6qvxVjBlDWNmxSGSbCZe9hTsjRKdSsl4y1T+3zfujxo9auykQMnFsfyHWD7wg==} + /@types/hash-sum@1.0.2: + resolution: {integrity: sha512-UP28RddqY8xcU0SCEp9YKutQICXpaAq9N8U2klqF5hegGha7KzTOL8EdhIIV3bOSGBzjEpN9bU/d+nNZBdJYVw==} dev: true - /@types/http-cache-semantics@4.0.2: - resolution: {integrity: sha512-FD+nQWA2zJjh4L9+pFXqWOi0Hs1ryBCfI+985NjluQ1p8EYtoLvjLOKidXBtZ4/IcxDX4o8/E8qDS3540tNliw==} + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} - /@types/ini@1.3.31: - resolution: {integrity: sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w==} + /@types/ini@1.3.34: + resolution: {integrity: sha512-FafeLhwmWucTi31ZYg/6aHBZNyrogQ35aDvSW7zMAz3HMhUqQ4G/NBya8c5pe2jwoYsDFwra8O9/yZotong76g==} dev: true - /@types/inquirer@8.2.7: - resolution: {integrity: sha512-uICJEaJOf6MsKyyAf8p58+QxTS6dwy91QVfXk1hnQ0rUT+u7KpkeFx5dxQ/oju0BaOKB284brEMBHLpNf4bZDQ==} + /@types/inquirer@8.2.10: + resolution: {integrity: sha512-IdD5NmHyVjWM8SHWo/kPBgtzXatwPkfwzyP3fN1jF2g9BWt5WO+8hL2F4o2GKIYsU40PpqeevuUWvkS/roXJkA==} dependencies: - '@types/through': 0.0.31 + '@types/through': 0.0.33 rxjs: 7.8.1 dev: true - /@types/ioredis-mock@8.2.3: - resolution: {integrity: sha512-7veA+v2QXjPBvmuYDSyXcfcgCzlpMxa9z51g1+bZXLZ97teCmEs9qYiK9X/h7camGAJJvTiFHiE4mT8CNaqQlA==} + /@types/ioredis-mock@8.2.5: + resolution: {integrity: sha512-cZyuwC9LGtg7s5G9/w6rpy3IOZ6F/hFR0pQlWYZESMo1xQUYbDpa6haqB4grTePjsGzcB/YLBFCjqRunK5wieg==} dependencies: + '@types/node': 18.19.21 ioredis: 5.3.2 transitivePeerDependencies: - supports-color dev: true - /@types/json-schema@7.0.13: - resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - /@types/jsonfile@6.1.2: - resolution: {integrity: sha512-8t92P+oeW4d/CRQfJaSqEwXujrhH4OEeHRjGU3v1Q8mUS8GPF3yiX26sw4svv6faL2HfBtGTe2xWIoVgN3dy9w==} + /@types/jsonfile@6.1.4: + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 dev: true /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 - /@types/linkify-it@3.0.3: - resolution: {integrity: sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==} + /@types/linkify-it@3.0.5: + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} dev: true - /@types/lodash@4.14.199: - resolution: {integrity: sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg==} + /@types/lodash@4.14.202: + resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} dev: true - /@types/markdown-it-emoji@2.0.2: - resolution: {integrity: sha512-2ln8Wjbcj/0oRi/6VnuMeWEHHuK8uapFttvcLmDIe1GKCsFBLOLBX+D+xhDa9oWOQV0IpvxwrSfKKssAqqroog==} + /@types/markdown-it-emoji@2.0.4: + resolution: {integrity: sha512-H6ulk/ZmbDxOayPwI/leJzrmoW1YKX1Z+MVSCHXuYhvqckV4I/c+hPTf6UiqJyn2avWugfj30XroheEb6/Ekqg==} dependencies: '@types/markdown-it': 12.2.3 dev: true @@ -1640,361 +1713,358 @@ packages: /@types/markdown-it@12.2.3: resolution: {integrity: sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ==} dependencies: - '@types/linkify-it': 3.0.3 - '@types/mdurl': 1.0.3 + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 dev: true - /@types/markdown-it@13.0.2: - resolution: {integrity: sha512-Tla7hH9oeXHOlJyBFdoqV61xWE9FZf/y2g+gFVwQ2vE1/eBzjUno5JCd3Hdb5oATve5OF6xNjZ/4VIZhVVx+hA==} + /@types/markdown-it@13.0.7: + resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} dependencies: - '@types/linkify-it': 3.0.3 - '@types/mdurl': 1.0.3 + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 dev: true - /@types/mdurl@1.0.3: - resolution: {integrity: sha512-T5k6kTXak79gwmIOaDF2UUQXFbnBE0zBUzF20pz7wDYu0RQMzWg+Ml/Pz50214NsFHBITkoi5VtdjFZnJ2ijjA==} + /@types/mdurl@1.0.5: + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} dev: true - /@types/micromatch@4.0.3: - resolution: {integrity: sha512-QX1czv7QoLU76Asb1NSVSlu5zTMx/TFNswUDtQSbH9hgvCg+JHvIEoVvVSzBf1WNCT8XsK515W+p3wFOCuvhCg==} + /@types/micromatch@4.0.6: + resolution: {integrity: sha512-2eulCHWqjEpk9/vyic4tBhI8a9qQEl6DaK2n/sF7TweX9YESlypgKyhXMDGt4DAOy/jhLPvVrZc8pTDAMsplJA==} dependencies: - '@types/braces': 3.0.2 + '@types/braces': 3.0.4 dev: true /@types/minimatch@5.1.2: resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} dev: true - /@types/minimist@1.2.3: - resolution: {integrity: sha512-ZYFzrvyWUNhaPomn80dsMNgMeXxNWZBdkuG/hWlUvXvbdUH8ZERNBGXnU87McuGcWDsyzX2aChCv/SVN348k3A==} + /@types/minimist@1.2.5: + resolution: {integrity: sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==} dev: true - /@types/mocha@10.0.2: - resolution: {integrity: sha512-NaHL0+0lLNhX6d9rs+NSt97WH/gIlRHmszXbQ/8/MV/eVcFNdeJ/GYhrFuUc8K7WuPhRhTSdMkCp8VMzhUq85w==} + /@types/mocha@10.0.6: + resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} dev: true - /@types/ms@0.7.32: - resolution: {integrity: sha512-xPSg0jm4mqgEkNhowKgZFBNtwoEwF6gJ4Dhww+GFpm3IgtNseHQZ5IqdNwnquZEoANxyDAKDRAdVo4Z72VvD/g==} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true /@types/node-dir@0.0.35: resolution: {integrity: sha512-hGz0J6yUxQ1PB9R7Ny57LGamJ5kjJL/DIU5mCJiLejaPV8SeXIAypzyWoAL1sPiEKK01ZQLJEHtGiXYiYeDQPA==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 dev: true /@types/node@17.0.45: resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} dev: true - /@types/node@18.18.5: - resolution: {integrity: sha512-4slmbtwV59ZxitY4ixUZdy1uRLf9eSIvBWPQxNjhHYWEtn0FryfKpyS2cvADYXTayWdKEIsJengncrVvkI4I6A==} + /@types/node@18.19.21: + resolution: {integrity: sha512-2Q2NeB6BmiTFQi4DHBzncSoq/cJMLDdhPaAoJFnFCyD9a8VPZRf7a1GAwp1Edb7ROaZc5Jz/tnZyL6EsWMRaqw==} + dependencies: + undici-types: 5.26.5 /@types/node@20.5.1: resolution: {integrity: sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg==} dev: true - /@types/normalize-package-data@2.4.2: - resolution: {integrity: sha512-lqa4UEhhv/2sjjIQgjX8B+RBjj47eo0mzGasklVJ78UKGQY1r0VpB9XHDaZZO9qzEFDdy4MrXLuEaSmPrPSe/A==} + /@types/normalize-package-data@2.4.4: + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} dev: true - /@types/nunjucks@3.2.4: - resolution: {integrity: sha512-Ro2d3CROK+QNreS9MgFloCuRyHaLHyxkoiDax97uUWHQQwtKckH11ZvJfRVEuYGcTgJPY7JFwrjK3jRCTRLXwQ==} + /@types/nunjucks@3.2.6: + resolution: {integrity: sha512-pHiGtf83na1nCzliuAdq8GowYiXvH5l931xZ0YEHaLMNFgynpEqx+IPStlu7UaDkehfvl01e4x/9Tpwhy7Ue3w==} dev: true - /@types/parse-json@4.0.0: - resolution: {integrity: sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==} + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} dev: true - /@types/responselike@1.0.1: - resolution: {integrity: sha512-TiGnitEDxj2X0j+98Eqk5lv/Cij8oHd32bU4D/Yw6AOq7vvTk0gSD2GPj0G/HkvhMoVsdlhYF4yqqlyPBTM6Sg==} + /@types/responselike@1.0.3: + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 - /@types/sax@1.2.5: - resolution: {integrity: sha512-9jWta97bBVC027/MShr3gLab8gPhKy4l6qpb+UJLF5pDm3501NvA7uvqVCW+REFtx00oTi6Cq9JzLwgq6evVgw==} + /@types/sax@1.2.7: + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 dev: true - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true - /@types/sinon@10.0.19: - resolution: {integrity: sha512-MWZNGPSchIdDfb5FL+VFi4zHsHbNOTQEgjqFQk7HazXSXwUU9PAX3z9XBqb3AJGYr9YwrtCtaSMsT3brYsN/jQ==} + /@types/sinon@10.0.20: + resolution: {integrity: sha512-2APKKruFNCAZgx3daAyACGzWuJ028VVCUDk6o2rw/Z4PXT0ogwdV4KUegW0MwVs0Zu59auPXbbuBJHF12Sx1Eg==} dependencies: - '@types/sinonjs__fake-timers': 8.1.3 + '@types/sinonjs__fake-timers': 8.1.5 dev: true - /@types/sinonjs__fake-timers@8.1.3: - resolution: {integrity: sha512-4g+2YyWe0Ve+LBh+WUm1697PD0Kdi6coG1eU0YjQbwx61AZ8XbEpL1zIT6WjuUKrCMCROpEaYQPDjBnDouBVAQ==} + /@types/sinonjs__fake-timers@8.1.5: + resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} dev: true - /@types/through@0.0.31: - resolution: {integrity: sha512-LpKpmb7FGevYgXnBXYs6HWnmiFyVG07Pt1cnbgM1IhEacITTiUaBXXvOR3Y50ksaJWGSfhbEvQFivQEFGCC55w==} + /@types/through@0.0.33: + resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 dev: true - /@types/triple-beam@1.3.3: - resolution: {integrity: sha512-6tOUG+nVHn0cJbVp25JFayS5UE6+xlbcNF9Lo9mU7U0zk3zeUShZied4YEQZjy1JBF043FSkdXw8YkUJuVtB5g==} + /@types/triple-beam@1.3.5: + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} dev: false - /@types/urlsafe-base64@1.0.29: - resolution: {integrity: sha512-RAowJfSG6zhSxDFl7/QC/vGeWIyJLf7pqFoh+iLP0Y/GOsH1ddmZvo2oFug/Z5pGfUM05NMQFCnzw3sSmMA72A==} + /@types/urlsafe-base64@1.0.31: + resolution: {integrity: sha512-f+l5StyboXmVsjTXLUkNHu8FptkdJ6iGl7z7nKBQVQwvSDulzi+Ov5Rtuq6c43jHYjSHax7Mplr1ldweOdFohg==} dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 dev: true - /@types/web-bluetooth@0.0.18: - resolution: {integrity: sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==} + /@types/web-bluetooth@0.0.20: + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} dev: true - /@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/eslint-plugin@7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-zioDz623d0RHNhvx0eesUmGfIjzrk18nSBC8xewepKXbBvN/7c1qImV7Hg8TI1URTxKax7/zxfxj3Uph8Chcuw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - '@typescript-eslint/parser': ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + '@typescript-eslint/parser': ^7.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 5.62.0(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/type-utils': 5.62.0(eslint@8.51.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@5.2.2) + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 7.1.1 + '@typescript-eslint/type-utils': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.1 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 + eslint: 8.57.0 graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare-lite: 1.4.0 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + ignore: 5.3.1 + natural-compare: 1.4.0 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@5.62.0(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/parser@7.1.1(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-ZWUFyL0z04R1nAEgr9e79YtV5LbafdOtN7yapNbn1ansMyaegl2D4bL7vHoJ4HPSc4CaLwuCVas8CVuneKzplQ==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) + '@typescript-eslint/scope-manager': 7.1.1 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 7.1.1 debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 - typescript: 5.2.2 + eslint: 8.57.0 + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@5.62.0: - resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/scope-manager@7.1.1: + resolution: {integrity: sha512-cirZpA8bJMRb4WZ+rO6+mnOJrGFDd38WoXCEI57+CYBqta8Yc8aJym2i7vyqLL1vVYljgw0X27axkUXz32T8TA==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/visitor-keys': 7.1.1 dev: true - /@typescript-eslint/type-utils@5.62.0(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/type-utils@7.1.1(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-5r4RKze6XHEEhlZnJtR3GYeCh1IueUHdbrukV2KSlLXaTjuSfeVF8mZUVPLovidCuZfbVjfhi4c0DNSa/Rdg5g==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: '*' + eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - '@typescript-eslint/utils': 5.62.0(eslint@8.51.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.3.3) + '@typescript-eslint/utils': 7.1.1(eslint@8.57.0)(typescript@5.3.3) debug: 4.3.4(supports-color@8.1.1) - eslint: 8.51.0 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + eslint: 8.57.0 + ts-api-utils: 1.2.1(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@5.62.0: - resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/types@7.1.1: + resolution: {integrity: sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==} + engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@5.62.0(typescript@5.2.2): - resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/typescript-estree@7.1.1(typescript@5.3.3): + resolution: {integrity: sha512-9ZOncVSfr+sMXVxxca2OJOPagRwT0u/UHikM2Rd6L/aB+kL/QAuTnsv6MeXtjzCJYb8PzrXarypSGIPx3Jemxw==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/visitor-keys': 5.62.0 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/visitor-keys': 7.1.1 debug: 4.3.4(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - tsutils: 3.21.0(typescript@5.2.2) - typescript: 5.2.2 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.2.1(typescript@5.3.3) + typescript: 5.3.3 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@5.62.0(eslint@8.51.0)(typescript@5.2.2): - resolution: {integrity: sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/utils@7.1.1(eslint@8.57.0)(typescript@5.3.3): + resolution: {integrity: sha512-thOXM89xA03xAE0lW7alstvnyoBUbBX38YtY+zAUcpRPcq9EIhXPuJ0YTv948MbzmKh6e1AUszn5cBFK49Umqg==} + engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@types/json-schema': 7.0.13 - '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 5.62.0 - '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.2.2) - eslint: 8.51.0 - eslint-scope: 5.1.1 - semver: 7.5.4 + eslint: ^8.56.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 7.1.1 + '@typescript-eslint/types': 7.1.1 + '@typescript-eslint/typescript-estree': 7.1.1(typescript@5.3.3) + eslint: 8.57.0 + semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@5.62.0: - resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@typescript-eslint/visitor-keys@7.1.1: + resolution: {integrity: sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==} + engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 5.62.0 + '@typescript-eslint/types': 7.1.1 eslint-visitor-keys: 3.4.3 dev: true - /@vitejs/plugin-vue@4.4.0(vite@4.3.9)(vue@3.3.4): - resolution: {integrity: sha512-xdguqb+VUwiRpSg+nsc2HtbAUSGak25DXYvpQQi4RVU1Xq1uworyoH/md9Rfd8zMmPR/pSghr309QNcftUVseg==} + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + /@vitejs/plugin-vue@4.6.2(vite@4.3.9)(vue@3.4.21): + resolution: {integrity: sha512-kqf7SGFoG+80aZG6Pf+gsZIVvGSCKE98JbiWqcCV9cThtg91Jav0yvYFC9Zb+jKetNGF6ZKeoaxgZfND21fWKw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: - vite: ^4.0.0 + vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 dependencies: - vite: 4.3.9(@types/node@18.18.5)(sass@1.69.3) - vue: 3.3.4 + vite: 4.3.9(@types/node@18.19.21)(sass@1.71.1) + vue: 3.4.21(typescript@5.3.3) dev: true - /@vue/compiler-core@3.3.4: - resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==} + /@vue/compiler-core@3.4.21: + resolution: {integrity: sha512-MjXawxZf2SbZszLPYxaFCjxfibYrzr3eYbKxwpLR9EQN+oaziSu3qKVbwBERj1IFIB8OLUewxB5m/BFzi613og==} dependencies: - '@babel/parser': 7.23.0 - '@vue/shared': 3.3.4 + '@babel/parser': 7.24.0 + '@vue/shared': 3.4.21 + entities: 4.5.0 estree-walker: 2.0.2 source-map-js: 1.0.2 dev: true - /@vue/compiler-dom@3.3.4: - resolution: {integrity: sha512-wyM+OjOVpuUukIq6p5+nwHYtj9cFroz9cwkfmP9O1nzH68BenTTv0u7/ndggT8cIQlnBeOo6sUT/gvHcIkLA5w==} + /@vue/compiler-dom@3.4.21: + resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} dependencies: - '@vue/compiler-core': 3.3.4 - '@vue/shared': 3.3.4 + '@vue/compiler-core': 3.4.21 + '@vue/shared': 3.4.21 dev: true - /@vue/compiler-sfc@3.3.4: - resolution: {integrity: sha512-6y/d8uw+5TkCuzBkgLS0v3lSM3hJDntFEiUORM11pQ/hKvkhSKZrXW6i69UyXlJQisJxuUEJKAWEqWbWsLeNKQ==} + /@vue/compiler-sfc@3.4.21: + resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} dependencies: - '@babel/parser': 7.23.0 - '@vue/compiler-core': 3.3.4 - '@vue/compiler-dom': 3.3.4 - '@vue/compiler-ssr': 3.3.4 - '@vue/reactivity-transform': 3.3.4 - '@vue/shared': 3.3.4 + '@babel/parser': 7.24.0 + '@vue/compiler-core': 3.4.21 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 estree-walker: 2.0.2 - magic-string: 0.30.5 - postcss: 8.4.31 + magic-string: 0.30.8 + postcss: 8.4.35 source-map-js: 1.0.2 dev: true - /@vue/compiler-ssr@3.3.4: - resolution: {integrity: sha512-m0v6oKpup2nMSehwA6Uuu+j+wEwcy7QmwMkVNVfrV9P2qE5KshC6RwOCq8fjGS/Eak/uNb8AaWekfiXxbBB6gQ==} + /@vue/compiler-ssr@3.4.21: + resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} dependencies: - '@vue/compiler-dom': 3.3.4 - '@vue/shared': 3.3.4 + '@vue/compiler-dom': 3.4.21 + '@vue/shared': 3.4.21 dev: true - /@vue/devtools-api@6.5.1: - resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} + /@vue/devtools-api@6.6.1: + resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==} dev: true - /@vue/reactivity-transform@3.3.4: - resolution: {integrity: sha512-MXgwjako4nu5WFLAjpBnCj/ieqcjE2aJBINUNQzkZQfzIZA4xn+0fV1tIYBJvvva3N3OvKGofRLvQIwEQPpaXw==} + /@vue/reactivity@3.4.21: + resolution: {integrity: sha512-UhenImdc0L0/4ahGCyEzc/pZNwVgcglGy9HVzJ1Bq2Mm9qXOpP8RyNTjookw/gOCUlXSEtuZ2fUg5nrHcoqJcw==} dependencies: - '@babel/parser': 7.23.0 - '@vue/compiler-core': 3.3.4 - '@vue/shared': 3.3.4 - estree-walker: 2.0.2 - magic-string: 0.30.5 - dev: true - - /@vue/reactivity@3.3.4: - resolution: {integrity: sha512-kLTDLwd0B1jG08NBF3R5rqULtv/f8x3rOFByTDz4J53ttIQEDmALqKqXY0J+XQeN0aV2FBxY8nJDf88yvOPAqQ==} - dependencies: - '@vue/shared': 3.3.4 + '@vue/shared': 3.4.21 dev: true - /@vue/runtime-core@3.3.4: - resolution: {integrity: sha512-R+bqxMN6pWO7zGI4OMlmvePOdP2c93GsHFM/siJI7O2nxFRzj55pLwkpCedEY+bTMgp5miZ8CxfIZo3S+gFqvA==} + /@vue/runtime-core@3.4.21: + resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} dependencies: - '@vue/reactivity': 3.3.4 - '@vue/shared': 3.3.4 + '@vue/reactivity': 3.4.21 + '@vue/shared': 3.4.21 dev: true - /@vue/runtime-dom@3.3.4: - resolution: {integrity: sha512-Aj5bTJ3u5sFsUckRghsNjVTtxZQ1OyMWCr5dZRAPijF/0Vy4xEoRCwLyHXcj4D0UFbJ4lbx3gPTgg06K/GnPnQ==} + /@vue/runtime-dom@3.4.21: + resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} dependencies: - '@vue/runtime-core': 3.3.4 - '@vue/shared': 3.3.4 - csstype: 3.1.2 + '@vue/runtime-core': 3.4.21 + '@vue/shared': 3.4.21 + csstype: 3.1.3 dev: true - /@vue/server-renderer@3.3.4(vue@3.3.4): - resolution: {integrity: sha512-Q6jDDzR23ViIb67v+vM1Dqntu+HUexQcsWKhhQa4ARVzxOY2HbC7QRW/ggkDBd5BU+uM1sV6XOAP0b216o34JQ==} + /@vue/server-renderer@3.4.21(vue@3.4.21): + resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} peerDependencies: - vue: 3.3.4 + vue: 3.4.21 dependencies: - '@vue/compiler-ssr': 3.3.4 - '@vue/shared': 3.3.4 - vue: 3.3.4 + '@vue/compiler-ssr': 3.4.21 + '@vue/shared': 3.4.21 + vue: 3.4.21(typescript@5.3.3) dev: true - /@vue/shared@3.3.4: - resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==} + /@vue/shared@3.4.21: + resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} dev: true - /@vuepress/bundler-vite@2.0.0-beta.62(@types/node@18.18.5)(sass@1.69.3)(ts-node@10.9.1): + /@vuepress/bundler-vite@2.0.0-beta.62(@types/node@18.19.21)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3): resolution: {integrity: sha512-Dpb4rJycssM1gs3MlQ5z0cwQ0KCx9Iliojt+qs5lVIUHP9vfw6ANYx51R3ojctt3dCoWfC4bAL4NhGQndGKvrQ==} dependencies: - '@vitejs/plugin-vue': 4.4.0(vite@4.3.9)(vue@3.3.4) - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vitejs/plugin-vue': 4.6.2(vite@4.3.9)(vue@3.4.21) + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 - autoprefixer: 10.4.16(postcss@8.4.31) + autoprefixer: 10.4.18(postcss@8.4.35) connect-history-api-fallback: 2.0.0 - postcss: 8.4.31 - postcss-load-config: 4.0.1(postcss@8.4.31)(ts-node@10.9.1) + postcss: 8.4.35 + postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2) rollup: 3.29.4 - vite: 4.3.9(@types/node@18.18.5)(sass@1.69.3) - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + vite: 4.3.9(@types/node@18.19.21)(sass@1.71.1) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) transitivePeerDependencies: - '@types/node' - less @@ -2004,76 +2074,85 @@ packages: - supports-color - terser - ts-node + - typescript dev: true - /@vuepress/cli@2.0.0-beta.62: + /@vuepress/cli@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-z5mpxORVSZUWsSGtA0bqvsd4vhMDWXAGnQfHjYZ5ylUgnYMxBZMRWrQcpz9doMCk5Qkn56B2s2jKZEvhyFvdAg==} hasBin: true dependencies: - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 cac: 6.7.14 - chokidar: 3.5.3 - envinfo: 7.10.0 + chokidar: 3.6.0 + envinfo: 7.11.1 esbuild: 0.17.19 transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/client@2.0.0-beta.61: + /@vuepress/client@2.0.0-beta.61(typescript@5.3.3): resolution: {integrity: sha512-C5QbdQkPsurEsKUkLclVucUAKMzBph9kHMUvfKHJqBaAsiXKYVLa61AICTJeyDkhTYF0faOjmpqmaElfMt1S9w==} dependencies: - '@vue/devtools-api': 6.5.1 + '@vue/devtools-api': 6.6.1 '@vuepress/shared': 2.0.0-beta.61 - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) + transitivePeerDependencies: + - typescript dev: true - /@vuepress/client@2.0.0-beta.62: + /@vuepress/client@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-5JT0H6EibhZMVmg1fel2BWFFaAEv5zOoD397LOiMQmcEuUneeKNSwGcLrJDyvv8AOXz4wsXwET/to3TsOFoHDQ==} dependencies: - '@vue/devtools-api': 6.5.1 + '@vue/devtools-api': 6.6.1 '@vuepress/shared': 2.0.0-beta.62 - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) + transitivePeerDependencies: + - typescript dev: true - /@vuepress/client@2.0.0-beta.67: - resolution: {integrity: sha512-xfXZXmZmMbCvQxUhNltuAZzpoiwM0x9ke+DdPPDBF0oGMNDlmtOlsD7NcH322vQE3ehYy5mXJttXuEmfoNOG6A==} + /@vuepress/client@2.0.0-rc.2(typescript@5.3.3): + resolution: {integrity: sha512-gQ4CfBhzWYOCW4OcAUd6S8Jr9m/8UkZZuN/70t12GltbX/cdm6zrGnf89GiVjgvoK8+OYoc7luoBuWbyc/X5sg==} dependencies: - '@vue/devtools-api': 6.5.1 - '@vuepress/shared': 2.0.0-beta.67 - '@vueuse/core': 10.5.0(vue@3.3.4) - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + '@vue/devtools-api': 6.6.1 + '@vuepress/shared': 2.0.0-rc.2 + '@vueuse/core': 10.9.0(vue@3.4.21) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) transitivePeerDependencies: - '@vue/composition-api' + - typescript dev: true - /@vuepress/core@2.0.0-beta.62: + /@vuepress/core@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-IyL1lxkRg2PO6oFDcioa5YKckKO8jEIwPaNG4mwv7bIEwaN5kpsROVtBeYHKkcnncWQMrbBG/z8aHDvjO/vFJA==} dependencies: - '@vuepress/client': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/markdown': 2.0.0-beta.62 '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 - vue: 3.3.4 + vue: 3.4.21(typescript@5.3.3) transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/core@2.0.0-beta.67: - resolution: {integrity: sha512-pbCm1x+zFKZqpJjS68sv3ziEQLMn0KM04Q6W249stcTUUBrKox2OPx+OcX/BrN6yH60OviXN8hD6MgCnFSWdZA==} + /@vuepress/core@2.0.0-rc.2(typescript@5.3.3): + resolution: {integrity: sha512-C/bHG0y+v5oeCrfaesy2yFa0dyCah05g1w7vArZk8ABsVECjZKAC5/ev39UFQm2dCdNzsj2E3KgLIxYWqpcKeg==} dependencies: - '@vuepress/client': 2.0.0-beta.67 - '@vuepress/markdown': 2.0.0-beta.67 - '@vuepress/shared': 2.0.0-beta.67 - '@vuepress/utils': 2.0.0-beta.67 - vue: 3.3.4 + '@vuepress/client': 2.0.0-rc.2(typescript@5.3.3) + '@vuepress/markdown': 2.0.0-rc.2 + '@vuepress/shared': 2.0.0-rc.2 + '@vuepress/utils': 2.0.0-rc.2 + vue: 3.4.21(typescript@5.3.3) transitivePeerDependencies: - '@vue/composition-api' - supports-color + - typescript dev: true /@vuepress/markdown@2.0.0-beta.62: @@ -2088,7 +2167,7 @@ packages: '@mdit-vue/shared': 0.12.1 '@mdit-vue/types': 0.12.0 '@types/markdown-it': 12.2.3 - '@types/markdown-it-emoji': 2.0.2 + '@types/markdown-it-emoji': 2.0.4 '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 markdown-it: 13.0.2 @@ -2099,59 +2178,61 @@ packages: - supports-color dev: true - /@vuepress/markdown@2.0.0-beta.67: - resolution: {integrity: sha512-dwciE7dbfDruLan+w9x/LUl5dLdBWB39QXznX/Hhv4oPp+Mm4as53J58gqjuRPi6N25DfRi3ODrzjG5Lduwnfw==} - dependencies: - '@mdit-vue/plugin-component': 0.12.1 - '@mdit-vue/plugin-frontmatter': 0.12.1 - '@mdit-vue/plugin-headers': 0.12.1 - '@mdit-vue/plugin-sfc': 0.12.1 - '@mdit-vue/plugin-title': 0.12.1 - '@mdit-vue/plugin-toc': 0.12.1 - '@mdit-vue/shared': 0.12.1 - '@mdit-vue/types': 0.12.0 - '@types/markdown-it': 13.0.2 - '@types/markdown-it-emoji': 2.0.2 - '@vuepress/shared': 2.0.0-beta.67 - '@vuepress/utils': 2.0.0-beta.67 - markdown-it: 13.0.2 - markdown-it-anchor: 8.6.7(@types/markdown-it@13.0.2)(markdown-it@13.0.2) - markdown-it-emoji: 2.0.2 - mdurl: 1.0.1 + /@vuepress/markdown@2.0.0-rc.2: + resolution: {integrity: sha512-5/RmJnap+MGKxDhSO+Mv6zB8PoPHhhBujnNKKO3PnyfPrj0LyL0AuTm8m3Ea271wMp9956WINjw8jlpn+Z1sBg==} + dependencies: + '@mdit-vue/plugin-component': 2.0.0 + '@mdit-vue/plugin-frontmatter': 2.0.0 + '@mdit-vue/plugin-headers': 2.0.0 + '@mdit-vue/plugin-sfc': 2.0.0 + '@mdit-vue/plugin-title': 2.0.0 + '@mdit-vue/plugin-toc': 2.0.0 + '@mdit-vue/shared': 2.0.0 + '@mdit-vue/types': 2.0.0 + '@types/markdown-it': 13.0.7 + '@types/markdown-it-emoji': 2.0.4 + '@vuepress/shared': 2.0.0-rc.2 + '@vuepress/utils': 2.0.0-rc.2 + markdown-it: 14.0.0 + markdown-it-anchor: 8.6.7(@types/markdown-it@13.0.7)(markdown-it@14.0.0) + markdown-it-emoji: 3.0.0 + mdurl: 2.0.0 transitivePeerDependencies: - supports-color dev: true - /@vuepress/plugin-active-header-links@2.0.0-beta.62: + /@vuepress/plugin-active-header-links@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-NUoa0JP2npSydJQvM1oOPEtPCKRmtqpkPLxTeBCP6ucR/eHpCbBMrgYt3w6kdmMJykc/AWFd4oZA1QS/MAoEtw==} dependencies: - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 ts-debounce: 4.0.0 - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-back-to-top@2.0.0-beta.62: + /@vuepress/plugin-back-to-top@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-ndStdKobpq7/YxhtUg2YrSkd8FNoE0v4pPVdTBND6jlkPns4CCcyu+w6BZ8mkiiB2dzS27JrhKcXHz1Tsb0nUA==} dependencies: - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 ts-debounce: 4.0.0 - vue: 3.3.4 + vue: 3.4.21(typescript@5.3.3) transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-container@2.0.0-beta.62: + /@vuepress/plugin-container@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-ibo0J8ye5KA6zkwIttkVqleSLy4Sq0rcSW+X8cTzyFfoKKs0Y+ECjmf4wRrDl79m+lgpA43mlFpCcbgtmV9aqw==} dependencies: '@types/markdown-it': 12.2.3 - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/markdown': 2.0.0-beta.62 '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 @@ -2159,22 +2240,23 @@ packages: markdown-it-container: 3.0.0 transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-docsearch@2.0.0-beta.62(@algolia/client-search@4.20.0): + /@vuepress/plugin-docsearch@2.0.0-beta.62(@algolia/client-search@4.22.1)(typescript@5.3.3): resolution: {integrity: sha512-XdY4o15CKLqTEn485/pjWLdfV3fsm9JkoDJ97b9Cv0I9T/oW8NV3BFVezdX1d06vxB/doqoGj+JFEJH7t1lEuw==} dependencies: '@docsearch/css': 3.5.2 - '@docsearch/js': 3.5.2(@algolia/client-search@4.20.0) - '@docsearch/react': 3.5.2(@algolia/client-search@4.20.0) - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@docsearch/js': 3.5.2(@algolia/client-search@4.22.1) + '@docsearch/react': 3.5.2(@algolia/client-search@4.22.1) + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 - '@vueuse/core': 10.5.0(vue@3.3.4) + '@vueuse/core': 10.9.0(vue@3.4.21) ts-debounce: 4.0.0 - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -2183,171 +2265,178 @@ packages: - react-dom - search-insights - supports-color + - typescript dev: true - /@vuepress/plugin-external-link-icon@2.0.0-beta.62: + /@vuepress/plugin-external-link-icon@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-mQ7gj6pMHYCp7zk6N92omxUz9CjKYZtvZXkNmsloZsz0hiGS1SdG29vLo8yKm/qVzyu9F45WgVNcdQD5mkzx3Q==} dependencies: - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/markdown': 2.0.0-beta.62 '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 - vue: 3.3.4 + vue: 3.4.21(typescript@5.3.3) transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-git@2.0.0-beta.62: + /@vuepress/plugin-git@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-vTYUguI+X5G7JPTySDnZ6lcAGXBWlD1Nsw9IV42Hh4fvevWzZ3WIjkAhjZpdURIz+xQPEZBbgqnOKjBpbPx0jA==} dependencies: - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 execa: 7.2.0 transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-google-analytics@2.0.0-beta.62: + /@vuepress/plugin-google-analytics@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-Nm2GGb2KCooZjKD0ZgmmlI+2N05/mCMIJ8ziZU/3xrao6oRCxlKFm+g1L0iE/1XY2vNQpX76OedhSwRtYEjsRw==} dependencies: - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-medium-zoom@2.0.0-beta.62: + /@vuepress/plugin-medium-zoom@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-1BolO1OE9Dxf4xLpEDEYjWTmx+luD6RSwjM+Wbgp7gBMK98yY8N9rHxWCzhLWbTffVezmAO0ze37l7hVd4ypTA==} dependencies: - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 - medium-zoom: 1.0.8 - vue: 3.3.4 + medium-zoom: 1.1.0 + vue: 3.4.21(typescript@5.3.3) transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-nprogress@2.0.0-beta.62: + /@vuepress/plugin-nprogress@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-w1Qqw1pP7+fXN+Aznmbfdp62XnQJ2s/FJyoGfV7LjVfV+gWFtqymiJiahvd2aQpBi4/qZNvtFJ1SOQf5tn1CxA==} dependencies: - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-palette@2.0.0-beta.62: + /@vuepress/plugin-palette@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-Tw+KFxC8c3KIGeXANqMXFLoQ96ZQ/hJaKC0qm6iN04Wk9hKYazkxhPZTAZkOG3SrxaxvOrgnzvicpci6FJgnGA==} dependencies: - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 - chokidar: 3.5.3 + chokidar: 3.6.0 transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-prismjs@2.0.0-beta.62: + /@vuepress/plugin-prismjs@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-kPrlh+I4w+YyU6joahjvuMo2zMwbpB36drZYfjXtYFFIxpBQ5Xdse4xx89vYOX0KqckOQrNa/tnYnfBuHBkgAQ==} dependencies: - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) prismjs: 1.29.0 transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-register-components@2.0.0-beta.62: + /@vuepress/plugin-register-components@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-H500SYMlPgw85tE3Gcpfn5phlS6t+CeQo+Nj7epzfe0cDfZ9cnqwyM5KPNfd9NBl1Lan8JsEU9YTEmTxasujDw==} dependencies: - '@vuepress/core': 2.0.0-beta.62 + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/utils': 2.0.0-beta.62 - chokidar: 3.5.3 + chokidar: 3.6.0 transitivePeerDependencies: - supports-color + - typescript dev: true - /@vuepress/plugin-theme-data@2.0.0-beta.62: + /@vuepress/plugin-theme-data@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-q6XHIDnZcJ5W55TlynKrwHtHormZedEY5man9zT4hlZywr3vVBgToHztObNTqgn6CssFaW2BFXDlW17iyS2D2A==} dependencies: - '@vue/devtools-api': 6.5.1 - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 + '@vue/devtools-api': 6.6.1 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 - vue: 3.3.4 + vue: 3.4.21(typescript@5.3.3) transitivePeerDependencies: - supports-color + - typescript dev: true /@vuepress/shared@2.0.0-beta.61: resolution: {integrity: sha512-NhOQ1FDr5lDSu5IinNlNNzrF+jGOZ+bMFUyAlCxlTvK9oY6aRBCNwV8dWme+yoh3/zviKHGu62Xp7J2hKAHNZA==} dependencies: '@mdit-vue/types': 0.12.0 - '@vue/shared': 3.3.4 + '@vue/shared': 3.4.21 dev: true /@vuepress/shared@2.0.0-beta.62: resolution: {integrity: sha512-+OH8WzFz7+IUv+WbcBbCiy3ZTWZ4a2uVRd4GYHWkTE4Ux5V2Sx3KwY17POIGpn/PfMqNHHtjpDH6rO7qmaD+pg==} dependencies: '@mdit-vue/types': 0.12.0 - '@vue/shared': 3.3.4 + '@vue/shared': 3.4.21 dev: true - /@vuepress/shared@2.0.0-beta.67: - resolution: {integrity: sha512-gm8/6oAnd0Jh8g9xB89S+g8XJxt30QmeXK79J2Nwcbgy88CZnYbZssU1noyxFt4cHDX8wpUf8V5I388/dfHfoQ==} + /@vuepress/shared@2.0.0-rc.2: + resolution: {integrity: sha512-2kmm0rw+WalRWrSC5pW0TXRz8Wyuh57XmOZEUOhPOflw4o8Dno+PcaWbdOZ/TLkTgTt3X1n7r1/c1ALtaLta8g==} dependencies: - '@mdit-vue/types': 0.12.0 - '@vue/shared': 3.3.4 + '@mdit-vue/types': 2.0.0 dev: true - /@vuepress/theme-default@2.0.0-beta.62: + /@vuepress/theme-default@2.0.0-beta.62(typescript@5.3.3): resolution: {integrity: sha512-J6wLH4tevMnn/2y+MrTpZEVDWf5yvikx0S9TIfpcxjR/nN4XD9eSZrMB3Lt8JqTW/lwFze5MVBdTtVafZs4b3g==} - peerDependenciesMeta: - sass-loader: - optional: true dependencies: - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 - '@vuepress/plugin-active-header-links': 2.0.0-beta.62 - '@vuepress/plugin-back-to-top': 2.0.0-beta.62 - '@vuepress/plugin-container': 2.0.0-beta.62 - '@vuepress/plugin-external-link-icon': 2.0.0-beta.62 - '@vuepress/plugin-git': 2.0.0-beta.62 - '@vuepress/plugin-medium-zoom': 2.0.0-beta.62 - '@vuepress/plugin-nprogress': 2.0.0-beta.62 - '@vuepress/plugin-palette': 2.0.0-beta.62 - '@vuepress/plugin-prismjs': 2.0.0-beta.62 - '@vuepress/plugin-theme-data': 2.0.0-beta.62 + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-active-header-links': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-back-to-top': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-container': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-external-link-icon': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-git': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-medium-zoom': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-nprogress': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-palette': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-prismjs': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/plugin-theme-data': 2.0.0-beta.62(typescript@5.3.3) '@vuepress/shared': 2.0.0-beta.62 '@vuepress/utils': 2.0.0-beta.62 - '@vueuse/core': 10.5.0(vue@3.3.4) - sass: 1.69.3 - sass-loader: 13.3.2(sass@1.69.3) - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) + '@vueuse/core': 10.9.0(vue@3.4.21) + sass: 1.71.1 + sass-loader: 13.3.3(sass@1.71.1) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) transitivePeerDependencies: - '@vue/composition-api' - fibers - node-sass - sass-embedded - supports-color + - typescript - webpack dev: true /@vuepress/utils@2.0.0-beta.61: resolution: {integrity: sha512-W7g6xjrdyOW5E1V1ouyTm5d4+kgSd4KcM80D7K0NNScrhLIW6gpOggVVOVyTH3q2K1GQhzPlUcUe04ZNSo0ilQ==} dependencies: - '@types/debug': 4.1.9 - '@types/fs-extra': 11.0.2 - '@types/hash-sum': 1.0.0 + '@types/debug': 4.1.12 + '@types/fs-extra': 11.0.4 + '@types/hash-sum': 1.0.2 '@vuepress/shared': 2.0.0-beta.61 debug: 4.3.4(supports-color@8.1.1) - fs-extra: 11.1.1 + fs-extra: 11.2.0 globby: 13.2.2 hash-sum: 2.0.0 ora: 6.3.1 @@ -2360,12 +2449,12 @@ packages: /@vuepress/utils@2.0.0-beta.62: resolution: {integrity: sha512-2hyGGrN1XCUapsSlckHc7FWkklSPZfqcM5eDYjxyIT9XpQrXKYn8r0CUVcveyFdHF76Tw0KyP57JCxUDTxHxVg==} dependencies: - '@types/debug': 4.1.9 - '@types/fs-extra': 11.0.2 - '@types/hash-sum': 1.0.0 + '@types/debug': 4.1.12 + '@types/fs-extra': 11.0.4 + '@types/hash-sum': 1.0.2 '@vuepress/shared': 2.0.0-beta.62 debug: 4.3.4(supports-color@8.1.1) - fs-extra: 11.1.1 + fs-extra: 11.2.0 globby: 13.2.2 hash-sum: 2.0.0 ora: 6.3.1 @@ -2375,44 +2464,44 @@ packages: - supports-color dev: true - /@vuepress/utils@2.0.0-beta.67: - resolution: {integrity: sha512-wCK0uggm4gXroy7UkS1u8wDQmD4b0L6Gjqd/1PZTDhNlMLsrjBx7lqqoIKqarMdB2wmDLroPJcC9otvCz2oQug==} + /@vuepress/utils@2.0.0-rc.2: + resolution: {integrity: sha512-g93yFJKtztpdXm4XyOIQ9QcUrKuvuWizvH3qWDQ5/WKlxa6VqE7nVNPlkudgGUIc7Bl4AGrlHcmgvkwaNoMcfA==} dependencies: - '@types/debug': 4.1.9 - '@types/fs-extra': 11.0.2 - '@types/hash-sum': 1.0.0 - '@vuepress/shared': 2.0.0-beta.67 + '@types/debug': 4.1.12 + '@types/fs-extra': 11.0.4 + '@types/hash-sum': 1.0.2 + '@vuepress/shared': 2.0.0-rc.2 debug: 4.3.4(supports-color@8.1.1) - fs-extra: 11.1.1 - globby: 13.2.2 + fs-extra: 11.2.0 + globby: 14.0.1 hash-sum: 2.0.0 - ora: 7.0.1 + ora: 8.0.1 picocolors: 1.0.0 upath: 2.0.1 transitivePeerDependencies: - supports-color dev: true - /@vueuse/core@10.5.0(vue@3.3.4): - resolution: {integrity: sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==} + /@vueuse/core@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-/1vjTol8SXnx6xewDEKfS0Ra//ncg4Hb0DaZiwKf7drgfMsKFExQ+FnnENcN6efPen+1kIzhLQoGSy0eDUVOMg==} dependencies: - '@types/web-bluetooth': 0.0.18 - '@vueuse/metadata': 10.5.0 - '@vueuse/shared': 10.5.0(vue@3.3.4) - vue-demi: 0.14.6(vue@3.3.4) + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.9.0 + '@vueuse/shared': 10.9.0(vue@3.4.21) + vue-demi: 0.14.7(vue@3.4.21) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/metadata@10.5.0: - resolution: {integrity: sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==} + /@vueuse/metadata@10.9.0: + resolution: {integrity: sha512-iddNbg3yZM0X7qFY2sAotomgdHK7YJ6sKUvQqbvwnf7TmaVPxS4EJydcNsVejNdS8iWCtDk+fYXr7E32nyTnGA==} dev: true - /@vueuse/shared@10.5.0(vue@3.3.4): - resolution: {integrity: sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==} + /@vueuse/shared@10.9.0(vue@3.4.21): + resolution: {integrity: sha512-Uud2IWncmAfJvRaFYzv5OHDli+FbOzxiVEQdLCKQKLyhz94PIyFC3CHcH7EDMwIn8NPtD06+PNbC/PiO0LGLtw==} dependencies: - vue-demi: 0.14.6(vue@3.3.4) + vue-demi: 0.14.7(vue@3.4.21) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -2430,19 +2519,19 @@ packages: resolution: {integrity: sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==} dev: false - /acorn-jsx@5.3.2(acorn@8.10.0): + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.3 - /acorn-walk@8.2.0: - resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==} + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} engines: {node: '>=0.4.0'} - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true @@ -2455,15 +2544,6 @@ packages: engines: {node: '>= 10.0.0'} dev: false - /agent-base@7.1.0: - resolution: {integrity: sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==} - engines: {node: '>= 14'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - /agentkeepalive@3.5.2: resolution: {integrity: sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==} engines: {node: '>= 4.0.0'} @@ -2511,27 +2591,27 @@ packages: uri-js: 4.4.1 dev: true - /algoliasearch@4.20.0: - resolution: {integrity: sha512-y+UHEjnOItoNy0bYO+WWmLWBlPwDjKHW6mNHrPi0NkuhpQOOEbrkwQH/wgKFDLh7qlKjzoKeiRtlpewDPDG23g==} + /algoliasearch@4.22.1: + resolution: {integrity: sha512-jwydKFQJKIx9kIZ8Jm44SdpigFwRGPESaxZBaHSV0XWN2yBJAOT4mT7ppvlrpA4UGzz92pqFnVKr/kaZXrcreg==} dependencies: - '@algolia/cache-browser-local-storage': 4.20.0 - '@algolia/cache-common': 4.20.0 - '@algolia/cache-in-memory': 4.20.0 - '@algolia/client-account': 4.20.0 - '@algolia/client-analytics': 4.20.0 - '@algolia/client-common': 4.20.0 - '@algolia/client-personalization': 4.20.0 - '@algolia/client-search': 4.20.0 - '@algolia/logger-common': 4.20.0 - '@algolia/logger-console': 4.20.0 - '@algolia/requester-browser-xhr': 4.20.0 - '@algolia/requester-common': 4.20.0 - '@algolia/requester-node-http': 4.20.0 - '@algolia/transporter': 4.20.0 + '@algolia/cache-browser-local-storage': 4.22.1 + '@algolia/cache-common': 4.22.1 + '@algolia/cache-in-memory': 4.22.1 + '@algolia/client-account': 4.22.1 + '@algolia/client-analytics': 4.22.1 + '@algolia/client-common': 4.22.1 + '@algolia/client-personalization': 4.22.1 + '@algolia/client-search': 4.22.1 + '@algolia/logger-common': 4.22.1 + '@algolia/logger-console': 4.22.1 + '@algolia/requester-browser-xhr': 4.22.1 + '@algolia/requester-common': 4.22.1 + '@algolia/requester-node-http': 4.22.1 + '@algolia/transporter': 4.22.1 dev: true - /ali-oss@6.18.1: - resolution: {integrity: sha512-VsptD0jX3JNc3AjiLs5a9oTP0ArfT9IYhBuY6G/SpuY6LMuiwfqywrAosY65BlHKODAdYy8VWL6kmt0mO7BUGA==} + /ali-oss@6.20.0: + resolution: {integrity: sha512-TzFXgGlw81sy2JvcCveSYsa2b2+6kv+HA6WTc+cXg6bu8nUAmVPfncRGbn3x2getSOniOFA+TyGy3V4l3Fks+Q==} engines: {node: '>=8'} dependencies: address: 1.2.2 @@ -2547,10 +2627,12 @@ packages: is-type-of: 1.4.0 js-base64: 2.6.4 jstoxml: 2.2.9 - merge-descriptors: 1.0.1 + lodash: 4.17.21 + merge-descriptors: 1.0.3 mime: 2.6.0 platform: 1.3.6 pump: 3.0.0 + qs: 6.11.2 sdk-base: 2.0.1 stream-http: 2.8.2 stream-wormhole: 1.1.0 @@ -2713,11 +2795,12 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - /array-buffer-byte-length@1.0.0: - resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==} + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - is-array-buffer: 3.0.2 + call-bind: 1.0.7 + is-array-buffer: 3.0.4 dev: true /array-find-index@1.0.2: @@ -2745,17 +2828,18 @@ packages: engines: {node: '>=0.10.0'} dev: true - /arraybuffer.prototype.slice@1.0.2: - resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==} + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - call-bind: 1.0.2 + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 - get-intrinsic: 1.2.1 - is-array-buffer: 3.0.2 - is-shared-array-buffer: 1.0.2 + es-abstract: 1.22.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 dev: true /arrgv@1.0.2: @@ -2790,22 +2874,22 @@ packages: engines: {node: '>=0.12.0'} dev: true - /async@3.2.4: - resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + /async@3.2.5: + resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} - /autoprefixer@10.4.16(postcss@8.4.31): - resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} + /autoprefixer@10.4.18(postcss@8.4.35): + resolution: {integrity: sha512-1DKbDfsr6KUElM6wg+0zRNkB/Q7WcKYAaK+pzXn+Xqmszm/5Xa9coeNdtP88Vi+dPzZnMjhge8GIV49ZQkDa+g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: postcss: ^8.1.0 dependencies: - browserslist: 4.22.1 - caniuse-lite: 1.0.30001547 + browserslist: 4.23.0 + caniuse-lite: 1.0.30001593 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.31 + postcss: 8.4.35 postcss-value-parser: 4.2.0 dev: true @@ -2819,15 +2903,15 @@ packages: '@ava/typescript': optional: true dependencies: - acorn: 8.10.0 - acorn-walk: 8.2.0 + acorn: 8.11.3 + acorn-walk: 8.3.2 ansi-styles: 6.2.1 arrgv: 1.0.2 arrify: 3.0.0 callsites: 4.1.0 cbor: 8.1.0 chalk: 5.3.0 - chokidar: 3.5.3 + chokidar: 3.6.0 chunkd: 2.0.1 ci-info: 3.9.0 ci-parallel-vars: 1.0.1 @@ -2838,7 +2922,7 @@ packages: concordance: 5.0.4 currently-unhandled: 0.4.1 debug: 4.3.4(supports-color@8.1.1) - emittery: 1.0.1 + emittery: 1.0.3 figures: 5.0.0 globby: 13.2.2 ignore-by-default: 2.1.0 @@ -2866,9 +2950,11 @@ packages: - supports-color dev: true - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} + dependencies: + possible-typed-array-names: 1.0.0 dev: true /balanced-match@1.0.2: @@ -2970,15 +3056,15 @@ packages: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} dev: true - /browserslist@4.22.1: - resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==} + /browserslist@4.23.0: + resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001547 - electron-to-chromium: 1.4.553 - node-releases: 2.0.13 - update-browserslist-db: 1.0.13(browserslist@4.22.1) + caniuse-lite: 1.0.30001593 + electron-to-chromium: 1.4.692 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.23.0) dev: true /buffer-from@1.1.2: @@ -3010,22 +3096,22 @@ packages: /builtins@5.0.1: resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: false - /bumpp@9.2.0: - resolution: {integrity: sha512-pgp7y3jp33QTaXFVDrE0IKuZF5Y8EsIz+ywZXFALW2nD+ZD+4crxJe/GypBQBoJuZrr5dc6TGrR3wl7fk3+C6w==} + /bumpp@9.4.0: + resolution: {integrity: sha512-T+N+B5mSSvsTt7kgxGXCKQd957IxmEZwMn2nWirspGUY08u/cBNrpQDMXk43fzLegZtKtXS1v9S06vq2zf6lXQ==} engines: {node: '>=10'} hasBin: true dependencies: '@jsdevtools/ez-spawn': 3.0.4 - c12: 1.4.2 + c12: 1.9.0 cac: 6.7.14 - fast-glob: 3.3.1 + escalade: 3.1.2 + fast-glob: 3.3.2 + js-yaml: 4.1.0 prompts: 2.4.2 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color + semver: 7.6.0 dev: true /bytes@3.1.2: @@ -3033,22 +3119,21 @@ packages: engines: {node: '>= 0.8'} dev: false - /c12@1.4.2: - resolution: {integrity: sha512-3IP/MuamSVRVw8W8+CHWAz9gKN4gd+voF2zm/Ln6D25C2RhytEZ1ABbC8MjKr4BR9rhoV1JQ7jJA158LDiTkLg==} + /c12@1.9.0: + resolution: {integrity: sha512-7KTCZXdIbOA2hLRQ+1KzJ15Qp9Wn58one74dkihMVp2H6EzKTa3OYBy0BSfS1CCcmxYyqeX8L02m40zjQ+dstg==} dependencies: - chokidar: 3.5.3 - defu: 6.1.2 - dotenv: 16.3.1 - giget: 1.1.3 - jiti: 1.20.0 - mlly: 1.4.2 + chokidar: 3.6.0 + confbox: 0.1.3 + defu: 6.1.4 + dotenv: 16.4.5 + giget: 1.2.1 + jiti: 1.21.0 + mlly: 1.6.1 ohash: 1.1.3 - pathe: 1.1.1 + pathe: 1.1.2 perfect-debounce: 1.0.0 pkg-types: 1.0.3 rc9: 2.1.1 - transitivePeerDependencies: - - supports-color dev: true /cac@6.7.14: @@ -3060,17 +3145,18 @@ packages: resolution: {integrity: sha512-o03N/tQxfFONZ1XLGgIxOFHuQQpjpRdnSAL1THG1YWZIVp1JMUfjU3ElSAjFN1LjbJXa55IpC8waG+VEoLUCUw==} engines: {node: '>= 16.17.0'} dependencies: - cache-manager: 5.2.4 + cache-manager: 5.4.0 ioredis: 5.3.2 transitivePeerDependencies: - supports-color dev: false - /cache-manager@5.2.4: - resolution: {integrity: sha512-gkuCjug16NdGvKm/sydxGVx17uffrSWcEe2xraBtwRCgdYcFxwJAla4OYpASAZT2yhSoxgDiWL9XH6IAChcZJA==} + /cache-manager@5.4.0: + resolution: {integrity: sha512-FS7o8vqJosnLpu9rh2gQTo8EOzCRJLF1BJ4XDEUDMqcfvs7SJZs5iuoFTXLauzQ3S5v8sBAST1pCwMaurpyi1A==} dependencies: lodash.clonedeep: 4.5.0 - lru-cache: 10.0.1 + lru-cache: 10.2.0 + promise-coalesce: 1.1.2 dev: false /cacheable-lookup@2.0.1: @@ -3120,11 +3206,15 @@ packages: write-file-atomic: 3.0.3 dev: true - /call-bind@1.0.2: - resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.1 + get-intrinsic: 1.2.4 + set-function-length: 1.2.1 /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} @@ -3171,8 +3261,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - /caniuse-lite@1.0.30001547: - resolution: {integrity: sha512-W7CrtIModMAxobGhz8iXmDfuJiiKg1WADMO/9x7/CLNin5cpSbuBjooyoIUVB5eyCc36QuTVlkVa1iB2S5+/eA==} + /caniuse-lite@1.0.30001593: + resolution: {integrity: sha512-UWM1zlo3cZfkpBysd7AS+z+v007q9G1+fLTUU42rQnY6t2axoogPW/xol6T7juU5EUoOhML4WgBIdG+9yYqAjQ==} dev: true /capital-case@1.0.4: @@ -3197,18 +3287,18 @@ packages: nofilter: 3.1.0 dev: true - /chai-jest-snapshot@2.0.0(chai@4.3.10): + /chai-jest-snapshot@2.0.0(chai@4.4.1): resolution: {integrity: sha512-u8jZZjw/0G1t5A8wDfH6K7DAVfMg3g0dsw9wKQURNUyrZX96VojHNrFMmLirq1m0kOvC5icgL/Qh/fu1MZyvUw==} peerDependencies: chai: '>=1.9.0' dependencies: - chai: 4.3.10 + chai: 4.4.1 jest-snapshot: 21.2.1 lodash.values: 4.3.0 dev: true - /chai@4.3.10: - resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} dependencies: assertion-error: 1.1.0 @@ -3360,6 +3450,21 @@ packages: fsevents: 2.3.3 dev: true + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} + dependencies: + anymatch: 3.1.3 + braces: 3.0.2 + glob-parent: 5.1.2 + is-binary-path: 2.1.0 + is-glob: 4.0.3 + normalize-path: 3.0.0 + readdirp: 3.6.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} @@ -3381,6 +3486,12 @@ packages: resolution: {integrity: sha512-uvzpYrpmidaoxvIQHM+rKSrigjOe9feHYbw4uOI2gdfe1C3xIlxO+kVXq83WQWNniTf8bAxVpy+cQeFQsMERKg==} dev: true + /citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + dependencies: + consola: 3.2.3 + dev: true + /clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -3434,8 +3545,8 @@ packages: dependencies: string-width: 4.2.3 - /cli-spinners@2.9.1: - resolution: {integrity: sha512-jHgecW0pxkonBJdrKsqxgRX9AcG+u/5k0Q7WPDfi8AogLAdwxEkyYYNWwZ5GvVFoFx2uiY1eNcSK00fh+1+FyQ==} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} /cli-truncate@0.2.1: @@ -3596,10 +3707,14 @@ packages: js-string-escape: 1.0.1 lodash: 4.17.21 md5-hex: 3.0.1 - semver: 7.5.4 + semver: 7.6.0 well-known-symbols: 2.0.0 dev: true + /confbox@0.1.3: + resolution: {integrity: sha512-eH3ZxAihl1PhKfpr4VfEN6/vUd87fmgb6JkldHgg/YR6aEBhW63qUDgzP2Y6WM0UumdsYp5H3kibalXAdHfbgg==} + dev: true + /configstore@5.0.1: resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==} engines: {node: '>=8'} @@ -3616,6 +3731,11 @@ packages: engines: {node: '>=0.8'} dev: true + /consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} + dev: true + /constant-case@2.0.0: resolution: {integrity: sha512-eS0N9WwmjTqrOmR3o83F5vW8Z+9R1HnVz3xmzT2PMFug9ly+Au/fxRWlEBSb6LcZwspSsEn9Xs1uw9YgzAg1EQ==} dependencies: @@ -3832,7 +3952,7 @@ packages: /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.1)(typescript@5.2.2): + /cosmiconfig-typescript-loader@4.4.0(@types/node@20.5.1)(cosmiconfig@8.3.6)(ts-node@10.9.2)(typescript@5.3.3): resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==} engines: {node: '>=v14.21.3'} peerDependencies: @@ -3842,23 +3962,23 @@ packages: typescript: '>=4' dependencies: '@types/node': 20.5.1 - cosmiconfig: 8.3.6(typescript@5.2.2) - ts-node: 10.9.1(@types/node@20.5.1)(typescript@5.2.2) - typescript: 5.2.2 + cosmiconfig: 8.3.6(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.5.1)(typescript@5.3.3) + typescript: 5.3.3 dev: true /cosmiconfig@6.0.0: resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} engines: {node: '>=8'} dependencies: - '@types/parse-json': 4.0.0 + '@types/parse-json': 4.0.2 import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 yaml: 1.10.2 dev: true - /cosmiconfig@8.3.6(typescript@5.2.2): + /cosmiconfig@8.3.6(typescript@5.3.3): resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: @@ -3871,7 +3991,7 @@ packages: js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - typescript: 5.2.2 + typescript: 5.3.3 dev: true /create-require@1.1.1: @@ -3915,8 +4035,8 @@ packages: engines: {node: '>= 6'} dev: true - /csstype@3.1.2: - resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true /currently-unhandled@0.4.1: @@ -3939,7 +4059,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.23.2 + '@babel/runtime': 7.24.0 dev: false /date-time@3.1.0: @@ -4067,26 +4187,25 @@ packages: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} - /define-data-property@1.1.1: - resolution: {integrity: sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==} + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 + es-define-property: 1.0.0 + es-errors: 1.3.0 gopd: 1.0.1 - has-property-descriptors: 1.0.0 - dev: true /define-properties@1.2.1: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 - has-property-descriptors: 1.0.0 + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 object-keys: 1.1.1 dev: true - /defu@6.1.2: - resolution: {integrity: sha512-+uO4+qr7msjNNWKYPHqN/3+Dx3NFkmIzayk2L1MyZQlvgZb/J1A0fo410dpKrN2SnqFjt8n4JL8fDJE0wIgjFQ==} + /defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} dev: true /degit@2.8.4: @@ -4112,8 +4231,8 @@ packages: resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} - /destr@2.0.1: - resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==} + /destr@2.0.3: + resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} dev: true /destroy@1.2.0: @@ -4140,8 +4259,8 @@ packages: engines: {node: '>=0.3.1'} dev: true - /diff@5.1.0: - resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} + /diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} dev: true @@ -4208,8 +4327,8 @@ packages: dependencies: is-obj: 2.0.0 - /dotenv@16.3.1: - resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} engines: {node: '>=12'} /duplexer3@0.1.5: @@ -4230,8 +4349,8 @@ packages: dependencies: jake: 10.8.7 - /electron-to-chromium@1.4.553: - resolution: {integrity: sha512-HiRdtyKS2+VhiXvjhMvvxiMC33FJJqTA5EB2YHgFZW6v7HkK4Q9Ahv2V7O2ZPgAjw+MyCJVMQvigj13H8t+wvA==} + /electron-to-chromium@1.4.692: + resolution: {integrity: sha512-d5rZRka9n2Y3MkWRN74IoAsxR0HK3yaAt7T50e3iT9VZmCCQDT3geXUO5ZRMhDToa1pkCeQXuNo+0g+NfDOVPA==} dev: true /elegant-spinner@1.0.1: @@ -4239,13 +4358,13 @@ packages: engines: {node: '>=0.10.0'} dev: true - /emittery@1.0.1: - resolution: {integrity: sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==} + /emittery@1.0.3: + resolution: {integrity: sha512-tJdCJitoy2lrC2ldJcqN4vkqJ00lT+tOWNT1hBJjO/3FDMJa5TTIiYGCKGkn/WfCyOzUMObeohbVTj00fhiLiA==} engines: {node: '>=14.16'} dev: true - /emoji-regex@10.2.1: - resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} + /emoji-regex@10.3.0: + resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -4286,8 +4405,8 @@ packages: engines: {node: '>=0.12'} dev: true - /envinfo@7.10.0: - resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} + /envinfo@7.11.1: + resolution: {integrity: sha512-8PiZgZNIB4q/Lw4AhOvAfB/ityHAd2bli3lESSWmWSzSsl5dKpy5N1d1Rfkd2teq/g9xN90lc6o98DOjMeYHpg==} engines: {node: '>=4'} hasBin: true dev: true @@ -4297,58 +4416,70 @@ packages: dependencies: is-arrayish: 0.2.1 - /es-abstract@1.22.2: - resolution: {integrity: sha512-YoxfFcDmhjOgWPWsV13+2RNjq1F6UQnfs+8TftwNqtzlmFzEXvlUwdrNrYeaizfjQzRMxkZ6ElWMOJIFKdVqwA==} + /es-abstract@1.22.5: + resolution: {integrity: sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==} engines: {node: '>= 0.4'} dependencies: - array-buffer-byte-length: 1.0.0 - arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 - es-set-tostringtag: 2.0.1 + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + es-define-property: 1.0.0 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 es-to-primitive: 1.2.1 function.prototype.name: 1.1.6 - get-intrinsic: 1.2.1 - get-symbol-description: 1.0.0 + get-intrinsic: 1.2.4 + get-symbol-description: 1.0.2 globalthis: 1.0.3 gopd: 1.0.1 - has: 1.0.4 - has-property-descriptors: 1.0.0 - has-proto: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 has-symbols: 1.0.3 - internal-slot: 1.0.5 - is-array-buffer: 3.0.2 + hasown: 2.0.1 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 is-callable: 1.2.7 - is-negative-zero: 2.0.2 + is-negative-zero: 2.0.3 is-regex: 1.1.4 - is-shared-array-buffer: 1.0.2 + is-shared-array-buffer: 1.0.3 is-string: 1.0.7 - is-typed-array: 1.1.12 + is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.12.3 + object-inspect: 1.13.1 object-keys: 1.1.1 - object.assign: 4.1.4 - regexp.prototype.flags: 1.5.1 - safe-array-concat: 1.0.1 - safe-regex-test: 1.0.0 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.2 + safe-array-concat: 1.1.0 + safe-regex-test: 1.0.3 string.prototype.trim: 1.2.8 string.prototype.trimend: 1.0.7 string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.0 - typed-array-byte-length: 1.0.0 - typed-array-byte-offset: 1.0.0 - typed-array-length: 1.0.4 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.5 unbox-primitive: 1.0.2 - which-typed-array: 1.1.11 + which-typed-array: 1.1.14 dev: true - /es-set-tostringtag@2.0.1: - resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 - has-tostringtag: 1.0.0 + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.1 dev: true /es-to-primitive@1.2.1: @@ -4394,8 +4525,8 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: true @@ -4430,16 +4561,16 @@ packages: engines: {node: '>=12'} dev: true - /eslint-config-prettier@8.10.0(eslint@8.51.0): + /eslint-config-prettier@8.10.0(eslint@8.57.0): resolution: {integrity: sha512-SM8AMJdeQqRYT9O9zguiruQZaN7+z+E4eAP9oiLNGKMtomwaB1E9dcgUD6ZAn/eQAb52USbvezbiljfZUhbJcg==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.51.0 + eslint: 8.57.0 dev: true - /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.51.0)(prettier@2.8.8): + /eslint-plugin-prettier@4.2.1(eslint-config-prettier@8.10.0)(eslint@8.57.0)(prettier@2.8.8): resolution: {integrity: sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -4450,20 +4581,12 @@ packages: eslint-config-prettier: optional: true dependencies: - eslint: 8.51.0 - eslint-config-prettier: 8.10.0(eslint@8.51.0) + eslint: 8.57.0 + eslint-config-prettier: 8.10.0(eslint@8.57.0) prettier: 2.8.8 prettier-linter-helpers: 1.0.0 dev: true - /eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - dependencies: - esrecurse: 4.3.0 - estraverse: 4.3.0 - dev: true - /eslint-scope@7.2.2: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -4475,18 +4598,19 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint@8.51.0: - resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.51.0) - '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.51.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -4502,9 +4626,9 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.23.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4524,8 +4648,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 /esprima@4.0.1: @@ -4545,11 +4669,6 @@ packages: dependencies: estraverse: 5.3.0 - /estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - dev: true - /estraverse@5.3.0: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} @@ -4603,12 +4722,27 @@ packages: human-signals: 4.3.1 is-stream: 3.0.0 merge-stream: 2.0.0 - npm-run-path: 5.1.0 + npm-run-path: 5.3.0 onetime: 6.0.0 signal-exit: 3.0.7 strip-final-newline: 3.0.0 dev: true + /execa@8.0.1: + resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} + engines: {node: '>=16.17'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 8.0.1 + human-signals: 5.0.0 + is-stream: 3.0.0 + merge-stream: 2.0.0 + npm-run-path: 5.3.0 + onetime: 6.0.0 + signal-exit: 4.1.0 + strip-final-newline: 3.0.0 + dev: true + /extend-shallow@2.0.1: resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} engines: {node: '>=0.10.0'} @@ -4627,13 +4761,13 @@ packages: resolution: {integrity: sha512-TX8YTALYAmExny+f+G24MFxWry3Pk09+9uykwRjfwjibRxJ9ZjJzrnHYVBZK46XQdyli7d+rQc5U/KK7V6uLsw==} engines: {node: '>=12.0.0'} dependencies: - '@types/chai': 4.3.8 - '@types/lodash': 4.14.199 - '@types/node': 18.18.5 - '@types/sinon': 10.0.19 + '@types/chai': 4.3.12 + '@types/lodash': 4.14.202 + '@types/node': 18.19.21 + '@types/sinon': 10.0.20 lodash: 4.17.21 mock-stdin: 1.0.0 - nock: 13.3.4 + nock: 13.5.4 stdout-stderr: 0.1.13 transitivePeerDependencies: - supports-color @@ -4646,8 +4780,8 @@ packages: resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} dev: true - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -4662,8 +4796,8 @@ packages: /fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 @@ -4724,7 +4858,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.1 + flat-cache: 3.2.0 /filelist@1.0.4: resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} @@ -4786,11 +4920,11 @@ packages: path-exists: 5.0.0 dev: true - /flat-cache@3.1.1: - resolution: {integrity: sha512-/qM2b3LUIaIgviBQovTLvijfyOQXPtSRnRK26ksj2J7rzPIecePUIpJsZ4T02Qg+xiAEKIs5K8dsHEd+VaKa/Q==} - engines: {node: '>=12.0.0'} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 + flatted: 3.3.1 keyv: 4.5.4 rimraf: 3.0.2 @@ -4799,8 +4933,8 @@ packages: hasBin: true dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} /fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -4848,16 +4982,16 @@ packages: dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 dev: false - /fs-extra@11.1.1: - resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 jsonfile: 6.1.0 - universalify: 2.0.0 + universalify: 2.0.1 /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} @@ -4884,9 +5018,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.5 functions-have-names: 1.2.3 dev: true @@ -4904,17 +5038,24 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true + /get-east-asian-width@1.2.0: + resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} + engines: {node: '>=18'} + dev: true + /get-func-name@2.0.2: resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true - /get-intrinsic@1.2.1: - resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==} + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: + es-errors: 1.3.0 function-bind: 1.1.2 - has: 1.0.4 - has-proto: 1.0.1 + has-proto: 1.0.3 has-symbols: 1.0.3 + hasown: 2.0.1 /get-package-type@0.1.0: resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} @@ -4951,27 +5092,32 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - /get-symbol-description@1.0.0: - resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} + /get-stream@8.0.1: + resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} + engines: {node: '>=16'} + dev: true + + /get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 dev: true - /giget@1.1.3: - resolution: {integrity: sha512-zHuCeqtfgqgDwvXlR84UNgnJDuUHQcNI5OqWqFxxuk2BshuKbYhJWdxBsEo4PvKqoGh23lUAIvBNpChMLv7/9Q==} + /giget@1.2.1: + resolution: {integrity: sha512-4VG22mopWtIeHwogGSy1FViXVo0YT+m6BrqZfz0JJFwbSsePsCdOzdLIIli5BtMp7Xe8f/o2OmBpQX2NBOC24g==} hasBin: true dependencies: - colorette: 2.0.20 - defu: 6.1.2 - https-proxy-agent: 7.0.2 - mri: 1.2.0 - node-fetch-native: 1.4.0 - pathe: 1.1.1 + citty: 0.1.6 + consola: 3.2.3 + defu: 6.1.4 + node-fetch-native: 1.6.2 + nypm: 0.3.8 + ohash: 1.1.3 + pathe: 1.1.2 tar: 6.2.0 - transitivePeerDependencies: - - supports-color dev: true /git-raw-commits@2.0.11: @@ -5025,8 +5171,8 @@ packages: dependencies: is-glob: 4.0.3 - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -5034,17 +5180,17 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 5.0.1 once: 1.4.0 - path-is-absolute: 1.0.1 + dev: true /glob@9.3.5: resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} @@ -5082,8 +5228,8 @@ packages: engines: {node: '>=4'} dev: true - /globals@13.23.0: - resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -5101,8 +5247,8 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 @@ -5111,12 +5257,24 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.1 merge2: 1.4.1 slash: 4.0.0 dev: true + /globby@14.0.1: + resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + engines: {node: '>=18'} + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.2 + ignore: 5.3.1 + path-type: 5.0.0 + slash: 5.1.0 + unicorn-magic: 0.1.0 + dev: true + /globby@6.1.0: resolution: {integrity: sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==} engines: {node: '>=0.10.0'} @@ -5131,8 +5289,7 @@ packages: /gopd@1.0.1: resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} dependencies: - get-intrinsic: 1.2.1 - dev: true + get-intrinsic: 1.2.4 /got@10.7.0: resolution: {integrity: sha512-aWTDeNw9g+XqEZNcTjMMZSy7B7yE9toWOFYip7ofFTLleJhvZwUxxTxkTpKvF+p1SAA4VHmuEy7PiHTHyq8tJg==} @@ -5142,7 +5299,7 @@ packages: '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.3 '@types/keyv': 3.1.4 - '@types/responselike': 1.0.1 + '@types/responselike': 1.0.3 cacheable-lookup: 2.0.1 cacheable-request: 7.0.4 decompress-response: 5.0.0 @@ -5164,7 +5321,7 @@ packages: '@sindresorhus/is': 4.6.0 '@szmarczak/http-timer': 4.0.6 '@types/cacheable-request': 6.0.3 - '@types/responselike': 1.0.1 + '@types/responselike': 1.0.3 cacheable-lookup: 5.0.4 cacheable-request: 7.0.4 decompress-response: 6.0.0 @@ -5181,7 +5338,7 @@ packages: '@sindresorhus/is': 0.14.0 '@szmarczak/http-timer': 1.1.2 '@types/keyv': 3.1.4 - '@types/responselike': 1.0.1 + '@types/responselike': 1.0.3 cacheable-request: 6.1.0 decompress-response: 3.3.0 duplexer3: 0.1.5 @@ -5246,22 +5403,21 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /has-property-descriptors@1.0.0: - resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - get-intrinsic: 1.2.1 - dev: true + es-define-property: 1.0.0 - /has-proto@1.0.1: - resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} engines: {node: '>= 0.4'} /has-symbols@1.0.3: resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} engines: {node: '>= 0.4'} - /has-tostringtag@1.0.0: - resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==} + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} dependencies: has-symbols: 1.0.3 @@ -5271,10 +5427,6 @@ packages: resolution: {integrity: sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==} engines: {node: '>=8'} - /has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - /hash-sum@2.0.0: resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} dev: true @@ -5287,6 +5439,12 @@ packages: type-fest: 0.8.1 dev: true + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true @@ -5367,16 +5525,6 @@ packages: resolve-alpn: 1.2.1 dev: false - /https-proxy-agent@7.0.2: - resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} - engines: {node: '>= 14'} - dependencies: - agent-base: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) - transitivePeerDependencies: - - supports-color - dev: true - /human-signals@1.1.1: resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} engines: {node: '>=8.12.0'} @@ -5390,6 +5538,11 @@ packages: engines: {node: '>=14.18.0'} dev: true + /human-signals@5.0.0: + resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} + engines: {node: '>=16.17.0'} + dev: true + /humanize-ms@1.2.1: resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} dependencies: @@ -5427,12 +5580,12 @@ packages: minimatch: 3.1.2 dev: false - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} - /immutable@4.3.4: - resolution: {integrity: sha512-fsXeu4J4i6WNWSikpI88v/PcVflZz+6kMhUfIwc5SY+poQRPnaf5V7qds6SUyUN3cVxEzuCab7QIoLOQ+DQ1wA==} + /immutable@4.3.5: + resolution: {integrity: sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==} dev: true /import-fresh@3.3.0: @@ -5562,13 +5715,13 @@ packages: wrap-ansi: 6.2.0 dev: false - /internal-slot@1.0.5: - resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.2.1 - has: 1.0.4 - side-channel: 1.0.4 + es-errors: 1.3.0 + hasown: 2.0.1 + side-channel: 1.0.6 dev: true /interpret@1.4.0: @@ -5576,7 +5729,7 @@ packages: engines: {node: '>= 0.10'} dev: false - /ioredis-mock@8.9.0(@types/ioredis-mock@8.2.3)(ioredis@5.3.2): + /ioredis-mock@8.9.0(@types/ioredis-mock@8.2.5)(ioredis@5.3.2): resolution: {integrity: sha512-yIglcCkI1lvhwJVoMsR51fotZVsPsSk07ecTCgRTRlicG0Vq3lke6aAaHklyjmRNRsdYAgswqC2A0bPtQK4LSw==} engines: {node: '>=12.22'} peerDependencies: @@ -5585,11 +5738,11 @@ packages: dependencies: '@ioredis/as-callback': 3.0.0 '@ioredis/commands': 1.2.0 - '@types/ioredis-mock': 8.2.3 + '@types/ioredis-mock': 8.2.5 fengari: 0.1.4 fengari-interop: 0.1.3(fengari@0.1.4) ioredis: 5.3.2 - semver: 7.5.4 + semver: 7.6.0 dev: true /ioredis@5.3.2: @@ -5608,8 +5761,8 @@ packages: transitivePeerDependencies: - supports-color - /ip@1.1.8: - resolution: {integrity: sha512-PuExPYUiu6qMBQb4l06ecm6T6ujzhmh+MeJcW9wa89PoAz5pvd4zPgN5WJV104mb6S2T1AwNIAaB70JNrLQWhg==} + /ip@1.1.9: + resolution: {integrity: sha512-cyRxvOEpNHNtchU3Ln9KC/auJgup87llfQpQ+t5ghoC/UhL16SWzbueiCsdTnWmqAWl7LadfuwhlqmtOaqMHdQ==} dev: false /irregular-plurals@3.5.0: @@ -5617,12 +5770,12 @@ packages: engines: {node: '>=8'} dev: true - /is-array-buffer@3.0.2: - resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==} + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 dev: true /is-arrayish@0.2.1: @@ -5649,8 +5802,8 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-callable@1.2.7: @@ -5668,16 +5821,16 @@ packages: resolution: {integrity: sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==} dev: false - /is-core-module@2.13.0: - resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} dependencies: - has: 1.0.4 + hasown: 2.0.1 /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-docker@2.2.1: @@ -5756,8 +5909,8 @@ packages: lower-case: 1.1.4 dev: false - /is-negative-zero@2.0.2: - resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} dev: true @@ -5775,7 +5928,7 @@ packages: resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-number@7.0.0: @@ -5843,8 +5996,8 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - has-tostringtag: 1.0.0 + call-bind: 1.0.7 + has-tostringtag: 1.0.2 dev: true /is-retry-allowed@1.2.0: @@ -5859,10 +6012,11 @@ packages: scoped-regex: 2.1.0 dev: true - /is-shared-array-buffer@1.0.2: - resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==} + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 dev: true /is-stream@1.1.0: @@ -5883,7 +6037,7 @@ packages: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} dependencies: - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /is-symbol@1.0.4: @@ -5908,11 +6062,11 @@ packages: isstream: 0.1.2 dev: false - /is-typed-array@1.1.12: - resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==} + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} engines: {node: '>= 0.4'} dependencies: - which-typed-array: 1.1.11 + which-typed-array: 1.1.14 dev: true /is-typedarray@1.0.0: @@ -5927,6 +6081,11 @@ packages: engines: {node: '>=12'} dev: true + /is-unicode-supported@2.0.0: + resolution: {integrity: sha512-FRdAyx5lusK1iHG0TWpVtk9+1i+GjrzRffhDg4ovQ7mcidMQ6mj+MhKPmvh7Xwyv5gIS06ns49CA7Sqg7lC22Q==} + engines: {node: '>=18'} + dev: true + /is-upper-case@1.1.2: resolution: {integrity: sha512-GQYSJMgfeAmVwh9ixyk888l7OIhNAGKtY6QA+IrWlu9MDTCaXmeozOZ2S9Knj7bQwBO/H6J2kb+pbyTUiMNbsw==} dependencies: @@ -5941,7 +6100,7 @@ packages: /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 dev: true /is-windows@1.0.2: @@ -5958,10 +6117,6 @@ packages: /is-yarn-global@0.3.0: resolution: {integrity: sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==} - /isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - dev: true - /isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} @@ -5981,8 +6136,8 @@ packages: engines: {node: '>=10'} dev: true - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} + /istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} dev: true @@ -5997,9 +6152,9 @@ packages: resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} engines: {node: '>=8'} dependencies: - '@babel/core': 7.23.2 + '@babel/core': 7.24.0 '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -6011,7 +6166,7 @@ packages: dependencies: archy: 1.0.0 cross-spawn: 7.0.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 p-map: 3.0.0 rimraf: 3.0.2 uuid: 8.3.2 @@ -6021,7 +6176,7 @@ packages: resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} engines: {node: '>=10'} dependencies: - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 make-dir: 4.0.0 supports-color: 7.2.0 dev: true @@ -6031,14 +6186,14 @@ packages: engines: {node: '>=10'} dependencies: debug: 4.3.4(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: - supports-color dev: true - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} + /istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 @@ -6050,7 +6205,7 @@ packages: engines: {node: '>=10'} hasBin: true dependencies: - async: 3.2.4 + async: 3.2.5 chalk: 4.1.2 filelist: 1.0.4 minimatch: 3.1.2 @@ -6087,8 +6242,8 @@ packages: pretty-format: 21.2.1 dev: true - /jiti@1.20.0: - resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} + /jiti@1.21.0: + resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true dev: true @@ -6157,14 +6312,14 @@ packages: hasBin: true dev: true - /jsonc-parser@3.2.0: - resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} + /jsonc-parser@3.2.1: + resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} dev: true /jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: - universalify: 2.0.0 + universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 @@ -6177,8 +6332,8 @@ packages: resolution: {integrity: sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw==} dev: false - /just-extend@4.2.1: - resolution: {integrity: sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==} + /just-extend@6.2.0: + resolution: {integrity: sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==} dev: true /keyv@3.1.0: @@ -6223,6 +6378,11 @@ packages: engines: {node: '>=10'} dev: true + /lilconfig@3.1.1: + resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + engines: {node: '>=14'} + dev: true + /lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} dev: true @@ -6233,6 +6393,12 @@ packages: uc.micro: 1.0.6 dev: true + /linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + dependencies: + uc.micro: 2.1.0 + dev: true + /lint-staged@13.3.0: resolution: {integrity: sha512-mPRtrYnipYYv1FEE134ufbWpeggNTo+O/UPzngoaKzbzHAthvR55am+8GfHTnqNRQVRRrYQLGW9ZyUoD7DsBHQ==} engines: {node: ^16.14.0 || >=18.0.0} @@ -6308,7 +6474,7 @@ packages: colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 5.0.1 - rfdc: 1.3.0 + rfdc: 1.3.1 wrap-ansi: 8.1.0 dev: true @@ -6485,6 +6651,14 @@ packages: is-unicode-supported: 1.3.0 dev: true + /log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: true + /log-update@2.3.0: resolution: {integrity: sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==} engines: {node: '>=4'} @@ -6505,11 +6679,12 @@ packages: wrap-ansi: 8.1.0 dev: true - /logform@2.5.1: - resolution: {integrity: sha512-9FyqAm9o9NKKfiAKfZoYo9bGXXuwMkxQiQttkT4YjjVtQVIQtK6LmVtlxmCaFswo6N4AfEkHqZTV0taDtPotNg==} + /logform@2.6.0: + resolution: {integrity: sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ==} + engines: {node: '>= 12.0.0'} dependencies: - '@colors/colors': 1.5.0 - '@types/triple-beam': 1.3.3 + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 fecha: 4.2.3 ms: 2.1.3 safe-stable-stringify: 2.4.3 @@ -6546,8 +6721,8 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} - /lru-cache@10.0.1: - resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + /lru-cache@10.2.0: + resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} engines: {node: 14 || >=16.14} dev: false @@ -6563,8 +6738,8 @@ packages: dependencies: yallist: 4.0.0 - /magic-string@0.30.5: - resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} + /magic-string@0.30.8: + resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -6580,7 +6755,7 @@ packages: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} dependencies: - semver: 7.5.4 + semver: 7.6.0 dev: true /make-error@1.3.6: @@ -6617,14 +6792,14 @@ packages: markdown-it: 13.0.2 dev: true - /markdown-it-anchor@8.6.7(@types/markdown-it@13.0.2)(markdown-it@13.0.2): + /markdown-it-anchor@8.6.7(@types/markdown-it@13.0.7)(markdown-it@14.0.0): resolution: {integrity: sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==} peerDependencies: '@types/markdown-it': '*' markdown-it: '*' dependencies: - '@types/markdown-it': 13.0.2 - markdown-it: 13.0.2 + '@types/markdown-it': 13.0.7 + markdown-it: 14.0.0 dev: true /markdown-it-container@3.0.0: @@ -6635,6 +6810,10 @@ packages: resolution: {integrity: sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==} dev: true + /markdown-it-emoji@3.0.0: + resolution: {integrity: sha512-+rUD93bXHubA4arpEZO3q80so0qgoFJEKRkRbjKX8RTdca89v2kfyF+xR3i2sQTwql9tpPZPOQN5B+PunspXRg==} + dev: true + /markdown-it@13.0.2: resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} hasBin: true @@ -6646,6 +6825,18 @@ packages: uc.micro: 1.0.6 dev: true + /markdown-it@14.0.0: + resolution: {integrity: sha512-seFjF0FIcPt4P9U39Bq1JYblX0KZCjDLFFQPHpL5AzHpqPEKtosxmdq/LTVZnjfH7tjt9BxStm+wXcDBNuYmzw==} + hasBin: true + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + dev: true + /matcher@5.0.0: resolution: {integrity: sha512-s2EMBOWtXFc8dgqvoAzKJXxNHibcdJMV0gwqKUaw9E2JBJuGUK7DrNKrA6g/i+v72TT16+6sVm5mS3thaMLQUw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6664,8 +6855,12 @@ packages: resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} dev: true - /medium-zoom@1.0.8: - resolution: {integrity: sha512-CjFVuFq/IfrdqesAXfg+hzlDKu6A2n80ZIq0Kl9kWjoHh9j1N9Uvk5X0/MmN0hOfm5F9YBswlClhcwnmtwz7gA==} + /mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + dev: true + + /medium-zoom@1.1.0: + resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} dev: true /mem@4.3.0: @@ -6694,7 +6889,7 @@ packages: resolution: {integrity: sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==} engines: {node: '>=8'} dependencies: - '@types/minimist': 1.2.3 + '@types/minimist': 1.2.5 camelcase-keys: 6.2.2 decamelize-keys: 1.1.1 hard-rejection: 2.1.0 @@ -6711,7 +6906,7 @@ packages: resolution: {integrity: sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==} engines: {node: '>=10'} dependencies: - '@types/minimist': 1.2.3 + '@types/minimist': 1.2.5 camelcase-keys: 6.2.2 decamelize-keys: 1.1.1 hard-rejection: 2.1.0 @@ -6724,8 +6919,8 @@ packages: yargs-parser: 20.2.9 dev: true - /merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + /merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} dev: false /merge-stream@2.0.0: @@ -6806,6 +7001,13 @@ packages: brace-expansion: 2.0.1 dev: false + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -6860,17 +7062,17 @@ packages: hasBin: true dev: true - /mlly@1.4.2: - resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} + /mlly@1.6.1: + resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} dependencies: - acorn: 8.10.0 - pathe: 1.1.1 + acorn: 8.11.3 + pathe: 1.1.2 pkg-types: 1.0.3 - ufo: 1.3.1 + ufo: 1.4.0 dev: true - /mocha@10.2.0: - resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} + /mocha@10.3.0: + resolution: {integrity: sha512-uF2XJs+7xSLsrmIvn37i/wnc91nw7XjOQB8ccyx5aEgdnohr7n+rEiZP23WkCYHjilR6+EboEnbq/ZQDz4LSbg==} engines: {node: '>= 14.0.0'} hasBin: true dependencies: @@ -6881,13 +7083,12 @@ packages: diff: 5.0.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 - glob: 7.2.0 + glob: 8.1.0 he: 1.2.0 js-yaml: 4.1.0 log-symbols: 4.1.0 minimatch: 5.0.1 ms: 2.1.3 - nanoid: 3.3.3 serialize-javascript: 6.0.0 strip-json-comments: 3.1.1 supports-color: 8.1.1 @@ -6906,11 +7107,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /mri@1.2.0: - resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} - engines: {node: '>=4'} - dev: true - /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: false @@ -6936,22 +7132,12 @@ packages: thenify-all: 1.6.0 dev: false - /nanoid@3.3.3: - resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true dev: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - - /natural-compare-lite@1.4.0: - resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} - dev: true - /natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} @@ -6973,14 +7159,14 @@ packages: resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} dev: true - /nise@5.1.4: - resolution: {integrity: sha512-8+Ib8rRJ4L0o3kfmyVCL7gzrohyDe0cMFTBa2d364yIrEGMEoetznKJx899YxjybU6bL9SQkYPSBBs1gyYs8Xg==} + /nise@5.1.9: + resolution: {integrity: sha512-qOnoujW4SV6e40dYxJOb3uvuoPHtmLzIk4TFo+j0jPJoC+5Z9xja5qH5JZobEPsa8+YYphMrOSwnrshEhG2qww==} dependencies: - '@sinonjs/commons': 2.0.0 - '@sinonjs/fake-timers': 10.3.0 + '@sinonjs/commons': 3.0.1 + '@sinonjs/fake-timers': 11.2.2 '@sinonjs/text-encoding': 0.7.2 - just-extend: 4.2.1 - path-to-regexp: 1.8.0 + just-extend: 6.2.0 + path-to-regexp: 6.2.1 dev: true /no-case@2.3.2: @@ -6996,13 +7182,12 @@ packages: tslib: 2.6.2 dev: false - /nock@13.3.4: - resolution: {integrity: sha512-DDpmn5oLEdCTclEqweOT4U7bEpuoifBMFUXem9sA4turDAZ5tlbrEoWqCorwXey8CaAw44mst5JOQeVNiwtkhw==} + /nock@13.5.4: + resolution: {integrity: sha512-yAyTfdeNJGGBFxWdzSKCBYxs5FxLbCg5X5Q4ets974hcQzG1+qCxvIyOo4j2Ry6MUlhWVMX4OoYDefAIIwupjw==} engines: {node: '>= 10.13'} dependencies: debug: 4.3.4(supports-color@8.1.1) json-stringify-safe: 5.0.1 - lodash: 4.17.21 propagate: 2.0.1 transitivePeerDependencies: - supports-color @@ -7015,8 +7200,8 @@ packages: minimatch: 3.1.2 dev: false - /node-fetch-native@1.4.0: - resolution: {integrity: sha512-F5kfEj95kX8tkDhUCYdV8dg3/8Olx/94zB8+ZNthFs6Bz31UpUi8Xh40TN3thLwXgrwXry1pEg9lJ++tLWTcqA==} + /node-fetch-native@1.6.2: + resolution: {integrity: sha512-69mtXOFZ6hSkYiXAVB5SqaRvrbITC/NPyqv7yuu/qw0nmgPyYbIMYYNIDhNtwPrzk0ptrimrLz/hhjvm4w5Z+w==} dev: true /node-preload@0.2.1: @@ -7026,8 +7211,8 @@ packages: process-on-spawn: 1.0.0 dev: true - /node-releases@2.0.13: - resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} dev: true /nofilter@3.1.0: @@ -7049,8 +7234,8 @@ packages: engines: {node: '>=10'} dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.13.0 - semver: 7.5.4 + is-core-module: 2.13.1 + semver: 7.6.0 validate-npm-package-license: 3.0.4 dev: true @@ -7107,7 +7292,7 @@ packages: pkg-dir: 4.2.0 read-pkg-up: 7.0.1 rxjs: 6.6.7 - semver: 7.5.4 + semver: 7.6.0 split: 1.0.1 symbol-observable: 1.2.0 terminal-link: 2.1.1 @@ -7159,8 +7344,8 @@ packages: dependencies: path-key: 3.1.1 - /npm-run-path@5.1.0: - resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==} + /npm-run-path@5.3.0: + resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: path-key: 4.0.0 @@ -7282,13 +7467,13 @@ packages: foreground-child: 2.0.0 get-package-type: 0.1.0 glob: 7.2.3 - istanbul-lib-coverage: 3.2.0 + istanbul-lib-coverage: 3.2.2 istanbul-lib-hook: 3.0.0 istanbul-lib-instrument: 4.0.3 istanbul-lib-processinfo: 2.0.3 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 + istanbul-reports: 3.1.7 make-dir: 3.1.0 node-preload: 0.2.1 p-map: 3.0.0 @@ -7303,6 +7488,18 @@ packages: - supports-color dev: true + /nypm@0.3.8: + resolution: {integrity: sha512-IGWlC6So2xv6V4cIDmoV0SwwWx7zLG086gyqkyumteH2fIgCAM4nDVFB2iDRszDvmdSVW9xb1N+2KjQ6C7d4og==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + dependencies: + citty: 0.1.6 + consola: 3.2.3 + execa: 8.0.1 + pathe: 1.1.2 + ufo: 1.4.0 + dev: true + /object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} @@ -7311,8 +7508,8 @@ packages: resolution: {integrity: sha512-NahvP2vZcy1ZiiYah30CEPw0FpDcSkSePJBMpzl5EQgCmISijiGuJm3SPYp7U+Lf2TljyaIw3E5EgkEx/TNEVA==} dev: false - /object-inspect@1.12.3: - resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} /object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} @@ -7323,11 +7520,11 @@ packages: resolution: {integrity: sha512-EFVjAYfzWqWsBMRHPMAXLCDIJnpMhdWAqR7xG6M6a2cs6PMFpl/+Z20w9zDW4vkxOFfddegBKq9Rehd0bxWE7A==} engines: {node: '>= 10'} - /object.assign@4.1.4: - resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 has-symbols: 1.0.3 object-keys: 1.1.1 @@ -7394,7 +7591,7 @@ packages: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 is-unicode-supported: 0.1.0 log-symbols: 4.1.0 @@ -7408,7 +7605,7 @@ packages: dependencies: chalk: 5.3.0 cli-cursor: 4.0.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 2.0.0 is-unicode-supported: 1.3.0 log-symbols: 5.1.0 @@ -7417,18 +7614,18 @@ packages: wcwidth: 1.0.1 dev: true - /ora@7.0.1: - resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} - engines: {node: '>=16'} + /ora@8.0.1: + resolution: {integrity: sha512-ANIvzobt1rls2BDny5fWZ3ZVKyD6nscLvfFRpQgfWsythlcsVUC9kL0zq6j2Z5z9wwp1kd7wpsD/T9qNPVLCaQ==} + engines: {node: '>=18'} dependencies: chalk: 5.3.0 cli-cursor: 4.0.0 - cli-spinners: 2.9.1 + cli-spinners: 2.9.2 is-interactive: 2.0.0 - is-unicode-supported: 1.3.0 - log-symbols: 5.1.0 - stdin-discarder: 0.1.0 - string-width: 6.1.0 + is-unicode-supported: 2.0.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.1.0 strip-ansi: 7.1.0 dev: true @@ -7654,7 +7851,7 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.22.13 + '@babel/code-frame': 7.23.5 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -7754,14 +7951,12 @@ packages: resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} engines: {node: '>=16 || 14 >=14.17'} dependencies: - lru-cache: 10.0.1 + lru-cache: 10.2.0 minipass: 7.0.4 dev: false - /path-to-regexp@1.8.0: - resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} - dependencies: - isarray: 0.0.1 + /path-to-regexp@6.2.1: + resolution: {integrity: sha512-JLyh7xT1kizaEvcaXOQwOc2/Yhw6KZOvPf1S8401UyLk86CU79LN3vl7ztXGm/pZ+YjoyAJ4rxmHwbkBXJX+yw==} dev: true /path-type@3.0.0: @@ -7775,8 +7970,13 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - /pathe@1.1.1: - resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} + /path-type@5.0.0: + resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} + engines: {node: '>=12'} + dev: true + + /pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} dev: true /pathval@1.1.1: @@ -7857,9 +8057,9 @@ packages: /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: - jsonc-parser: 3.2.0 - mlly: 1.4.2 - pathe: 1.1.1 + jsonc-parser: 3.2.1 + mlly: 1.6.1 + pathe: 1.1.2 dev: true /platform@1.3.6: @@ -7872,8 +8072,13 @@ packages: irregular-plurals: 3.5.0 dev: true - /postcss-load-config@4.0.1(postcss@8.4.31)(ts-node@10.9.1): - resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} engines: {node: '>= 14'} peerDependencies: postcss: '>=8.0.9' @@ -7884,27 +8089,27 @@ packages: ts-node: optional: true dependencies: - lilconfig: 2.1.0 - postcss: 8.4.31 - ts-node: 10.9.1(@types/node@18.18.5)(typescript@5.2.2) - yaml: 2.3.2 + lilconfig: 3.1.1 + postcss: 8.4.35 + ts-node: 10.9.2(@types/node@18.19.21)(typescript@5.3.3) + yaml: 2.4.0 dev: true /postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} dev: true - /postcss@8.4.31: - resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + /postcss@8.4.35: + resolution: {integrity: sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 dev: true - /preact@10.18.1: - resolution: {integrity: sha512-mKUD7RRkQQM6s7Rkmi7IFkoEHjuFqRQUaXamO61E6Nn7vqF/bo7EZCmSyrUnp2UWHw0O7XjZ2eeXis+m7tf4lg==} + /preact@10.19.6: + resolution: {integrity: sha512-gympg+T2Z1fG1unB8NH29yHJwnEaCH37Z32diPDku316OTnRPeMbiRV9kTrfZpocXjdfnWuFUl/Mj4BHaf6gnw==} dev: true /prelude-ls@1.2.1: @@ -7957,6 +8162,11 @@ packages: fromentries: 1.3.2 dev: true + /promise-coalesce@1.1.2: + resolution: {integrity: sha512-zLaJ9b8hnC564fnJH6NFSOGZYYdzrAJn2JUUIwzoQb32fG2QAakpDNM+CZo1km6keXkRXRM+hml1BFAPVnPkxg==} + engines: {node: '>=16'} + dev: false + /prompts@2.4.2: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} @@ -7976,8 +8186,13 @@ packages: end-of-stream: 1.4.4 once: 1.4.0 - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} /pupa@2.1.1: @@ -7995,7 +8210,7 @@ packages: resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} engines: {node: '>=0.6'} dependencies: - side-channel: 1.0.4 + side-channel: 1.0.6 dev: false /query-string@7.1.3: @@ -8030,8 +8245,8 @@ packages: /rc9@2.1.1: resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} dependencies: - defu: 6.1.2 - destr: 2.0.1 + defu: 6.1.4 + destr: 2.0.3 flat: 5.0.2 dev: true @@ -8074,7 +8289,7 @@ packages: resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==} engines: {node: '>=8'} dependencies: - '@types/normalize-package-data': 2.4.2 + '@types/normalize-package-data': 2.4.4 normalize-package-data: 2.5.0 parse-json: 5.2.0 type-fest: 0.6.0 @@ -8141,17 +8356,18 @@ packages: dependencies: redis-errors: 1.2.0 - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: false - /regexp.prototype.flags@1.5.1: - resolution: {integrity: sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==} + /regexp.prototype.flags@1.5.2: + resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - set-function-name: 2.0.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 dev: true /registry-auth-token@4.2.2: @@ -8218,7 +8434,7 @@ packages: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true dependencies: - is-core-module: 2.13.0 + is-core-module: 2.13.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -8259,8 +8475,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - /rfdc@1.3.0: - resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + /rfdc@1.3.1: + resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} dev: true /rimraf@2.7.1: @@ -8313,12 +8529,12 @@ packages: dependencies: tslib: 2.6.2 - /safe-array-concat@1.0.1: - resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==} + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} engines: {node: '>=0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + get-intrinsic: 1.2.4 has-symbols: 1.0.3 isarray: 2.0.5 dev: true @@ -8329,11 +8545,12 @@ packages: /safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - /safe-regex-test@1.0.0: - resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 + call-bind: 1.0.7 + es-errors: 1.3.0 is-regex: 1.1.4 dev: true @@ -8345,8 +8562,8 @@ packages: /safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - /sass-loader@13.3.2(sass@1.69.3): - resolution: {integrity: sha512-CQbKl57kdEv+KDLquhC+gE3pXt74LEAzm+tzywcA0/aHZuub8wTErbjAoNI57rPUWRYRNC5WUnNl8eGJNbDdwg==} + /sass-loader@13.3.3(sass@1.71.1): + resolution: {integrity: sha512-mt5YN2F1MOZr3d/wBRcZxeFgwgkH44wVc2zohO2YF6JiOMkiXe4BYRZpSu2sO1g71mo/j16txzUhsKZlqjVGzA==} engines: {node: '>= 14.15.0'} peerDependencies: fibers: '>= 3.1.0' @@ -8365,16 +8582,16 @@ packages: optional: true dependencies: neo-async: 2.6.2 - sass: 1.69.3 + sass: 1.71.1 dev: true - /sass@1.69.3: - resolution: {integrity: sha512-X99+a2iGdXkdWn1akFPs0ZmelUzyAQfvqYc2P/MPTrJRuIRoTffGzT9W9nFqG00S+c8hXzVmgxhUuHFdrwxkhQ==} + /sass@1.71.1: + resolution: {integrity: sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==} engines: {node: '>=14.0.0'} hasBin: true dependencies: - chokidar: 3.5.3 - immutable: 4.3.4 + chokidar: 3.6.0 + immutable: 4.3.5 source-map-js: 1.0.2 dev: true @@ -8420,6 +8637,14 @@ packages: hasBin: true dependencies: lru-cache: 6.0.0 + dev: true + + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + dependencies: + lru-cache: 6.0.0 /sentence-case@2.1.1: resolution: {integrity: sha512-ENl7cYHaK/Ktwk5OTD+aDbQ3uC8IByu/6Bkg+HDv8Mm+XnBnppVNalcfJTNsp1ibstKh030/JKQQWglDvtKwEQ==} @@ -8453,13 +8678,25 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: true - /set-function-name@2.0.1: - resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==} + /set-function-length@1.2.1: + resolution: {integrity: sha512-j4t6ccc+VsKwYHso+kElc5neZpjtq9EnRICFZtWyBsLojhmeF/ZBd/elqm22WJh/BziDe/SBiOeAt0m2mfLD0g==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} engines: {node: '>= 0.4'} dependencies: - define-data-property: 1.1.1 + define-data-property: 1.1.4 + es-errors: 1.3.0 functions-have-names: 1.2.3 - has-property-descriptors: 1.0.0 + has-property-descriptors: 1.0.2 dev: true /shebang-command@1.2.0: @@ -8498,12 +8735,14 @@ packages: rechoir: 0.6.2 dev: false - /side-channel@1.0.4: - resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - object-inspect: 1.12.3 + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 /signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -8521,12 +8760,13 @@ packages: /sinon@15.2.0: resolution: {integrity: sha512-nPS85arNqwBXaIsFCkolHjGIkFo+Oxu9vbgmBJizLAhqe6P2o3Qmj3KCUoRkfhHtvgDhZdWD3risLHAUJ8npjw==} + deprecated: 16.1.1 dependencies: - '@sinonjs/commons': 3.0.0 + '@sinonjs/commons': 3.0.1 '@sinonjs/fake-timers': 10.3.0 '@sinonjs/samsam': 8.0.0 - diff: 5.1.0 - nise: 5.1.4 + diff: 5.2.0 + nise: 5.1.9 supports-color: 7.2.0 dev: true @@ -8540,7 +8780,7 @@ packages: hasBin: true dependencies: '@types/node': 17.0.45 - '@types/sax': 1.2.5 + '@types/sax': 1.2.7 arg: 5.0.2 sax: 1.3.0 dev: true @@ -8554,6 +8794,11 @@ packages: engines: {node: '>=12'} dev: true + /slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + dev: true + /slice-ansi@0.0.4: resolution: {integrity: sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==} engines: {node: '>=0.10.0'} @@ -8620,22 +8865,22 @@ packages: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.16 + spdx-license-ids: 3.0.17 dev: true - /spdx-exceptions@2.3.0: - resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==} + /spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} dev: true /spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: - spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.16 + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.17 dev: true - /spdx-license-ids@3.0.16: - resolution: {integrity: sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==} + /spdx-license-ids@3.0.17: + resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} dev: true /split-on-first@1.1.0: @@ -8688,6 +8933,11 @@ packages: bl: 5.1.0 dev: true + /stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + dev: true + /stdout-stderr@0.1.13: resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} engines: {node: '>=8.0.0'} @@ -8757,12 +9007,12 @@ packages: strip-ansi: 7.1.0 dev: true - /string-width@6.1.0: - resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} - engines: {node: '>=16'} + /string-width@7.1.0: + resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} + engines: {node: '>=18'} dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 10.2.1 + emoji-regex: 10.3.0 + get-east-asian-width: 1.2.0 strip-ansi: 7.1.0 dev: true @@ -8770,34 +9020,34 @@ packages: resolution: {integrity: sha512-DOB27b/2UTTD+4myKUFh+/fXWcu/UDyASIXfg+7VzoCNNGOfWvoyU/x5pvVHr++ztyt/oSYI1BcWBBG/hmlNjA==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.5 dev: true /string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.5 dev: true /string.prototype.trimend@1.0.7: resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.5 dev: true /string.prototype.trimstart@1.0.7: resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.2 + es-abstract: 1.22.5 dev: true /string_decoder@1.1.1: @@ -9087,12 +9337,25 @@ packages: engines: {node: '>= 14.0.0'} dev: false + /ts-api-utils@1.2.1(typescript@5.3.3): + resolution: {integrity: sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==} + engines: {node: '>=16'} + peerDependencies: + typescript: '>=4.2.0' + dependencies: + typescript: 5.3.3 + dev: true + /ts-debounce@4.0.0: resolution: {integrity: sha512-+1iDGY6NmOGidq7i7xZGA4cm8DAa6fqdYcvO5Z6yBevH++Bdo9Qt/mN0TzHUgcCcKv1gmh9+W5dHqz8pMWbCbg==} dev: true - /ts-node@10.9.1(@types/node@18.18.5)(typescript@5.2.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-expect@1.3.0: + resolution: {integrity: sha512-e4g0EJtAjk64xgnFPD6kTBUtpnMVzDrMb12N1YZV0VvSlhnVT3SGxiYTLdGy8Q5cYHOIC/FAHmZ10eGrAguicQ==} + dev: false + + /ts-node@10.9.2(@types/node@18.19.21)(typescript@5.3.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -9110,19 +9373,19 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 18.18.5 - acorn: 8.10.0 - acorn-walk: 8.2.0 + '@types/node': 18.19.21 + acorn: 8.11.3 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 - /ts-node@10.9.1(@types/node@20.5.1)(typescript@5.2.2): - resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} + /ts-node@10.9.2(@types/node@20.5.1)(typescript@5.3.3): + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: '@swc/core': '>=1.2.50' @@ -9141,13 +9404,13 @@ packages: '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 '@types/node': 20.5.1 - acorn: 8.10.0 - acorn-walk: 8.2.0 + acorn: 8.11.3 + acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.3.3 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -9159,16 +9422,6 @@ packages: /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} - /tsutils@3.21.0(typescript@5.2.2): - resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} - engines: {node: '>= 6'} - peerDependencies: - typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' - dependencies: - tslib: 1.14.1 - typescript: 5.2.2 - dev: true - /tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} dependencies: @@ -9239,42 +9492,48 @@ packages: engines: {node: '>=14.16'} dev: false - /typed-array-buffer@1.0.0: - resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==} + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 - get-intrinsic: 1.2.1 - is-typed-array: 1.1.12 + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-length@1.0.0: - resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==} + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-byte-offset@1.0.0: - resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 - has-proto: 1.0.1 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 dev: true - /typed-array-length@1.0.4: - resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + /typed-array-length@1.0.5: + resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 for-each: 0.3.3 - is-typed-array: 1.1.12 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 dev: true /typedarray-to-buffer@3.1.5: @@ -9282,8 +9541,8 @@ packages: dependencies: is-typedarray: 1.0.0 - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.3.3: + resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} hasBin: true @@ -9291,8 +9550,12 @@ packages: resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} dev: true - /ufo@1.3.1: - resolution: {integrity: sha512-uY/99gMLIOlJPwATcMVYfqDSxUR9//AUcgZMzwfSTJPDKzA1S8mX4VLqa+fiAtveraQUBCz4FFcwVZBGbwBXIw==} + /uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + dev: true + + /ufo@1.4.0: + resolution: {integrity: sha512-Hhy+BhRBleFjpJ2vchUNN40qgkh0366FWJGqVLYBHev0vpHTrXSA0ryT+74UiW6KWsldNurQMKGqCm1M2zBciQ==} dev: true /uglify-js@3.17.4: @@ -9306,12 +9569,15 @@ packages: /unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} dependencies: - call-bind: 1.0.2 + call-bind: 1.0.7 has-bigints: 1.0.2 has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unescape@1.0.1: resolution: {integrity: sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ==} engines: {node: '>=0.10.0'} @@ -9319,14 +9585,19 @@ packages: extend-shallow: 2.0.1 dev: false + /unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + dev: true + /unique-string@2.0.0: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} dependencies: crypto-random-string: 2.0.0 - /universalify@2.0.0: - resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} /upath@2.0.1: @@ -9334,14 +9605,14 @@ packages: engines: {node: '>=4'} dev: true - /update-browserslist-db@1.0.13(browserslist@4.22.1): + /update-browserslist-db@1.0.13(browserslist@4.23.0): resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.22.1 - escalade: 3.1.1 + browserslist: 4.23.0 + escalade: 3.1.2 picocolors: 1.0.0 dev: true @@ -9379,7 +9650,7 @@ packages: is-yarn-global: 0.3.0 latest-version: 5.1.0 pupa: 2.1.1 - semver: 7.5.4 + semver: 7.6.0 semver-diff: 3.1.1 xdg-basedir: 4.0.0 dev: false @@ -9409,7 +9680,7 @@ packages: /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 /url-parse-lax@3.0.0: resolution: {integrity: sha512-NjFKA0DidqPa5ciFcSrXnAltTtzz84ogy+NebPvfEgAck0+TNg4UJ4IN+fB7zRZfbgUf0syOo9MDxFkDSMuFaQ==} @@ -9435,7 +9706,7 @@ packages: formstream: 1.3.1 humanize-ms: 1.2.1 iconv-lite: 0.4.24 - ip: 1.1.8 + ip: 1.1.9 pump: 3.0.0 qs: 6.11.2 statuses: 1.5.0 @@ -9496,7 +9767,7 @@ packages: builtins: 5.0.1 dev: false - /vite@4.3.9(@types/node@18.18.5)(sass@1.69.3): + /vite@4.3.9(@types/node@18.19.21)(sass@1.71.1): resolution: {integrity: sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -9521,17 +9792,17 @@ packages: terser: optional: true dependencies: - '@types/node': 18.18.5 + '@types/node': 18.19.21 esbuild: 0.17.19 - postcss: 8.4.31 + postcss: 8.4.35 rollup: 3.29.4 - sass: 1.69.3 + sass: 1.71.1 optionalDependencies: fsevents: 2.3.3 dev: true - /vue-demi@0.14.6(vue@3.3.4): - resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + /vue-demi@0.14.7(vue@3.4.21): + resolution: {integrity: sha512-EOG8KXDQNwkJILkx/gPcoL/7vH+hORoBaKgGe+6W7VFMvCYJfmF2dGbvgDroVnI8LU7/kTu8mbjRZGBU1z9NTA==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -9542,29 +9813,35 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.3.4 + vue: 3.4.21(typescript@5.3.3) dev: true - /vue-router@4.2.5(vue@3.3.4): - resolution: {integrity: sha512-DIUpKcyg4+PTQKfFPX88UWhlagBEBEfJ5A8XDXRJLUnZOvcpMF8o/dnL90vpVkGaPbjvXazV/rC1qBKrZlFugw==} + /vue-router@4.3.0(vue@3.4.21): + resolution: {integrity: sha512-dqUcs8tUeG+ssgWhcPbjHvazML16Oga5w34uCUmsk7i0BcnskoLGwjpa15fqMr2Fa5JgVBrdL2MEgqz6XZ/6IQ==} peerDependencies: vue: ^3.2.0 dependencies: - '@vue/devtools-api': 6.5.1 - vue: 3.3.4 + '@vue/devtools-api': 6.6.1 + vue: 3.4.21(typescript@5.3.3) dev: true - /vue@3.3.4: - resolution: {integrity: sha512-VTyEYn3yvIeY1Py0WaYGZsXnz3y5UnGi62GjVEqvEGPl6nxbOrCXbVOTQWBEJUqAyTUk2uJ5JLVnYJ6ZzGbrSw==} + /vue@3.4.21(typescript@5.3.3): + resolution: {integrity: sha512-5hjyV/jLEIKD/jYl4cavMcnzKwjMKohureP8ejn3hhEjwhWIhWeuzL2kJAjzl/WyVsgPY56Sy4Z40C3lVshxXA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@vue/compiler-dom': 3.3.4 - '@vue/compiler-sfc': 3.3.4 - '@vue/runtime-dom': 3.3.4 - '@vue/server-renderer': 3.3.4(vue@3.3.4) - '@vue/shared': 3.3.4 + '@vue/compiler-dom': 3.4.21 + '@vue/compiler-sfc': 3.4.21 + '@vue/runtime-dom': 3.4.21 + '@vue/server-renderer': 3.4.21(vue@3.4.21) + '@vue/shared': 3.4.21 + typescript: 5.3.3 dev: true - /vuepress-plugin-sitemap2@2.0.0-beta.205(vuepress@2.0.0-beta.62): + /vuepress-plugin-sitemap2@2.0.0-beta.205(typescript@5.3.3)(vuepress@2.0.0-beta.62): resolution: {integrity: sha512-suYQEYPnH0Ytqytq1oK0YTeh4ZC24FwPCGgMefg/jjXLa5fTSWVvOHzGWqfNCmnYzEiU52Txgju/RAbIFHmeHA==} engines: {node: ^14.18.0 || >=16.0.0, npm: '>=8', pnpm: '>=7'} peerDependencies: @@ -9582,26 +9859,28 @@ packages: '@vuepress/shared': 2.0.0-beta.61 '@vuepress/utils': 2.0.0-beta.61 sitemap: 7.1.1 - vuepress: 2.0.0-beta.62(@types/node@18.18.5)(@vuepress/client@2.0.0-beta.62)(sass@1.69.3)(ts-node@10.9.1)(vue@3.3.4) - vuepress-shared: 2.0.0-beta.205(vuepress@2.0.0-beta.62) + vuepress: 2.0.0-beta.62(@types/node@18.19.21)(@vuepress/client@2.0.0-beta.62)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3)(vue@3.4.21) + vuepress-shared: 2.0.0-beta.205(typescript@5.3.3)(vuepress@2.0.0-beta.62) transitivePeerDependencies: - '@vue/composition-api' - supports-color + - typescript dev: true - /vuepress-plugin-umami-analytics@1.5.0: - resolution: {integrity: sha512-v6LX3gCsheblrJxwVmD1aUWWrgN5zbra1fEppwwD30HG1YRxoTl1AR+9qfsh2pe7MK2zqLuHBi6U4pGJrwbxEA==} + /vuepress-plugin-umami-analytics@1.8.1(typescript@5.3.3): + resolution: {integrity: sha512-xuAi6tS9rwYqOhspo8INInCwoaiYqPa+9NNf79BmIBQ3NYsImnQ5FhqYeML3VohW7HxapX2gSdllZl6KzAM2fg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@vuepress/client': 2.0.0-beta.67 - '@vuepress/core': 2.0.0-beta.67 - '@vuepress/utils': 2.0.0-beta.67 + '@vuepress/client': 2.0.0-rc.2(typescript@5.3.3) + '@vuepress/core': 2.0.0-rc.2(typescript@5.3.3) + '@vuepress/utils': 2.0.0-rc.2 transitivePeerDependencies: - '@vue/composition-api' - supports-color + - typescript dev: true - /vuepress-shared@2.0.0-beta.205(vuepress@2.0.0-beta.62): + /vuepress-shared@2.0.0-beta.205(typescript@5.3.3)(vuepress@2.0.0-beta.62): resolution: {integrity: sha512-DcfAsWZg9NstiYmagMeLEqqRMYAgSCA3GJtWRN3vVCZDUWRG7j64xKSsO3HlbGOtNST74O3HHEqoGu2pyRGQ1Q==} engines: {node: ^14.18.0 || >=16.0.0, npm: '>=8', pnpm: '>=7'} peerDependencies: @@ -9616,26 +9895,27 @@ packages: vuepress-webpack: optional: true dependencies: - '@vuepress/client': 2.0.0-beta.61 + '@vuepress/client': 2.0.0-beta.61(typescript@5.3.3) '@vuepress/shared': 2.0.0-beta.61 '@vuepress/utils': 2.0.0-beta.61 - '@vueuse/core': 10.5.0(vue@3.3.4) + '@vueuse/core': 10.9.0(vue@3.4.21) cheerio: 1.0.0-rc.12 dayjs: 1.11.10 execa: 7.2.0 fflate: 0.7.4 gray-matter: 4.0.3 - semver: 7.5.4 + semver: 7.6.0 striptags: 3.2.0 - vue: 3.3.4 - vue-router: 4.2.5(vue@3.3.4) - vuepress: 2.0.0-beta.62(@types/node@18.18.5)(@vuepress/client@2.0.0-beta.62)(sass@1.69.3)(ts-node@10.9.1)(vue@3.3.4) + vue: 3.4.21(typescript@5.3.3) + vue-router: 4.3.0(vue@3.4.21) + vuepress: 2.0.0-beta.62(@types/node@18.19.21)(@vuepress/client@2.0.0-beta.62)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3)(vue@3.4.21) transitivePeerDependencies: - '@vue/composition-api' - supports-color + - typescript dev: true - /vuepress-vite@2.0.0-beta.62(@types/node@18.18.5)(@vuepress/client@2.0.0-beta.62)(sass@1.69.3)(ts-node@10.9.1)(vue@3.3.4): + /vuepress-vite@2.0.0-beta.62(@types/node@18.19.21)(@vuepress/client@2.0.0-beta.62)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3)(vue@3.4.21): resolution: {integrity: sha512-C93T5ZCFMnbdXkZ/R/romtwPPP2zjPN38YZhrM6w6wWjSMDvrG26IFRwluXy+W84O0Pg7xOwqRom0wvO4kCxmA==} engines: {node: '>=16.19.0'} hasBin: true @@ -9643,12 +9923,12 @@ packages: '@vuepress/client': 2.0.0-beta.62 vue: ^3.3.1 dependencies: - '@vuepress/bundler-vite': 2.0.0-beta.62(@types/node@18.18.5)(sass@1.69.3)(ts-node@10.9.1) - '@vuepress/cli': 2.0.0-beta.62 - '@vuepress/client': 2.0.0-beta.62 - '@vuepress/core': 2.0.0-beta.62 - '@vuepress/theme-default': 2.0.0-beta.62 - vue: 3.3.4 + '@vuepress/bundler-vite': 2.0.0-beta.62(@types/node@18.19.21)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3) + '@vuepress/cli': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/client': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/core': 2.0.0-beta.62(typescript@5.3.3) + '@vuepress/theme-default': 2.0.0-beta.62(typescript@5.3.3) + vue: 3.4.21(typescript@5.3.3) transitivePeerDependencies: - '@types/node' - '@vue/composition-api' @@ -9662,15 +9942,16 @@ packages: - supports-color - terser - ts-node + - typescript - webpack dev: true - /vuepress@2.0.0-beta.62(@types/node@18.18.5)(@vuepress/client@2.0.0-beta.62)(sass@1.69.3)(ts-node@10.9.1)(vue@3.3.4): + /vuepress@2.0.0-beta.62(@types/node@18.19.21)(@vuepress/client@2.0.0-beta.62)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3)(vue@3.4.21): resolution: {integrity: sha512-kwoC7RA6PGetWSU/NwV6dJ3VItg+R+K2IpAJ4bKsnRueIqGpDZwPr423nRK0VwDhh2sN7lUn6LoyaybPwWrGZg==} engines: {node: '>=16.19.0'} hasBin: true dependencies: - vuepress-vite: 2.0.0-beta.62(@types/node@18.18.5)(@vuepress/client@2.0.0-beta.62)(sass@1.69.3)(ts-node@10.9.1)(vue@3.3.4) + vuepress-vite: 2.0.0-beta.62(@types/node@18.19.21)(@vuepress/client@2.0.0-beta.62)(sass@1.71.1)(ts-node@10.9.2)(typescript@5.3.3)(vue@3.4.21) transitivePeerDependencies: - '@types/node' - '@vue/composition-api' @@ -9685,6 +9966,7 @@ packages: - supports-color - terser - ts-node + - typescript - vue - webpack dev: true @@ -9713,15 +9995,15 @@ packages: resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} dev: true - /which-typed-array@1.1.11: - resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==} + /which-typed-array@1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 - call-bind: 1.0.2 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 for-each: 0.3.3 gopd: 1.0.1 - has-tostringtag: 1.0.0 + has-tostringtag: 1.0.2 dev: true /which@1.3.1: @@ -9751,30 +10033,30 @@ packages: semver: 5.7.2 dev: false - /winston-transport@4.5.0: - resolution: {integrity: sha512-YpZzcUzBedhlTAfJg6vJDlyEai/IFMIVcaEZZyl3UXIl4gmqRpU7AE89AHLkbzLUsv0NVmw7ts+iztqKxxPW1Q==} - engines: {node: '>= 6.4.0'} + /winston-transport@4.7.0: + resolution: {integrity: sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg==} + engines: {node: '>= 12.0.0'} dependencies: - logform: 2.5.1 + logform: 2.6.0 readable-stream: 3.6.2 triple-beam: 1.4.1 dev: false - /winston@3.11.0: - resolution: {integrity: sha512-L3yR6/MzZAOl0DsysUXHVjOwv8mKZ71TrA/41EIduGpOOV5LQVodqN+QdQ6BS6PJ/RdIshZhq84P/fStEZkk7g==} + /winston@3.12.0: + resolution: {integrity: sha512-OwbxKaOlESDi01mC9rkM0dQqQt2I8DAUMRLZ/HpbwvDXm85IryEHgoogy5fziQy38PntgZsLlhAYHz//UPHZ5w==} engines: {node: '>= 12.0.0'} dependencies: '@colors/colors': 1.6.0 '@dabh/diagnostics': 2.0.3 - async: 3.2.4 + async: 3.2.5 is-stream: 2.0.1 - logform: 2.5.1 + logform: 2.6.0 one-time: 1.0.0 readable-stream: 3.6.2 safe-stable-stringify: 2.4.3 stack-trace: 0.0.10 triple-beam: 1.4.1 - winston-transport: 4.5.0 + winston-transport: 4.7.0 dev: false /wordwrap@1.0.0: @@ -9883,9 +10165,10 @@ packages: engines: {node: '>= 14'} dev: true - /yaml@2.3.2: - resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} + /yaml@2.4.0: + resolution: {integrity: sha512-j9iR8g+/t0lArF4V6NE/QCfT+CO7iLqrXAHZbJdo+LfjqP1vR8Fg5bSiaq6Q2lOD1AUEVrEVIgABvBFYojJVYQ==} engines: {node: '>= 14'} + hasBin: true /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} @@ -9941,7 +10224,7 @@ packages: engines: {node: '>=10'} dependencies: cliui: 7.0.4 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -9954,7 +10237,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -9962,8 +10245,8 @@ packages: yargs-parser: 21.1.1 dev: true - /yarn@1.22.19: - resolution: {integrity: sha512-/0V5q0WbslqnwP91tirOvldvYISzaqhClxzyUKXYxs07yUILIs5jx/k6CFe8bvKSkds5w+eiOqta39Wk3WxdcQ==} + /yarn@1.22.21: + resolution: {integrity: sha512-ynXaJsADJ9JiZ84zU25XkPGOvVMmZ5b7tmTSpKURYwgELdjucAOydqIOrOfTxVYcNXe91xvLZwcRh68SR3liCg==} engines: {node: '>=4.0.0'} hasBin: true requiresBuild: true diff --git a/src/constant/__tests__/constant.test.ts b/src/constant/__tests__/constant.test.ts new file mode 100644 index 000000000..7dc07cc75 --- /dev/null +++ b/src/constant/__tests__/constant.test.ts @@ -0,0 +1,21 @@ +import test from 'ava' +import { expectType } from 'ts-expect' +import { z } from 'zod' + +import { + CLASH_META_SUPPORTED_VMESS_NETWORK, + V2RAYN_SUPPORTED_VMESS_NETWORK, +} from '../' +import { VmessNetworkValidator } from '../../validators' + +test('constant', (t) => { + for (const network of V2RAYN_SUPPORTED_VMESS_NETWORK) { + expectType>(network) + } + + for (const network of CLASH_META_SUPPORTED_VMESS_NETWORK) { + expectType>(network) + } + + t.pass() +}) diff --git a/src/constant/constant.ts b/src/constant/constant.ts index 4c9ca7710..533d7db83 100644 --- a/src/constant/constant.ts +++ b/src/constant/constant.ts @@ -135,3 +135,39 @@ export const CACHE_KEYS = { Provider: 'provider-v2', RenderedArtifact: 'rendered-artifact', } as const + +export const V2RAYN_SUPPORTED_VMESS_NETWORK = [ + 'tcp', + 'http', + 'ws', + 'h2', + 'grpc', +] as const + +export const CLASH_META_SUPPORTED_VMESS_NETWORK = [ + 'tcp', + 'ws', + 'h2', + 'grpc', + 'http', +] as const + +export const STASH_SUPPORTED_VMESS_NETWORK = [ + 'tcp', + 'ws', + 'h2', + 'grpc', + 'http', +] as const + +export const QUANTUMULT_X_SUPPORTED_VMESS_NETWORK = [ + 'tcp', + 'ws', + 'http', +] as const + +export const SURGE_SUPPORTED_VMESS_NETWORK = ['tcp', 'ws'] as const + +export const SURFBOARD_SUPPORTED_VMESS_NETWORK = ['tcp', 'ws'] as const + +export const LOON_SUPPORTED_VMESS_NETWORK = ['tcp', 'ws', 'http'] as const diff --git a/src/filters/__tests__/filter.test.ts b/src/filters/__tests__/filter.test.ts index 01dd86edc..4c7e2f1ac 100644 --- a/src/filters/__tests__/filter.test.ts +++ b/src/filters/__tests__/filter.test.ts @@ -768,10 +768,8 @@ function generateVmessNode(nodeName: string): VmessNodeConfig { method: 'auto', network: 'tcp', nodeName, - path: '/', port: 8080, tls: false, - host: '', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', } } diff --git a/src/provider/ClashProvider.ts b/src/provider/ClashProvider.ts index 9701c4d29..a27becda9 100644 --- a/src/provider/ClashProvider.ts +++ b/src/provider/ClashProvider.ts @@ -3,6 +3,10 @@ import yaml from 'yaml' import _ from 'lodash' import { createLogger } from '@surgio/logger' import { z } from 'zod' +import { + CLASH_META_SUPPORTED_VMESS_NETWORK, + STASH_SUPPORTED_VMESS_NETWORK, +} from '../constant' import { ClashProviderConfig, @@ -257,27 +261,20 @@ export const parseClashConfig = ( case 'vmess': { // istanbul ignore next - if (item.network && !['tcp', 'ws'].includes(item.network)) { + if ( + item.network && + ![ + ...CLASH_META_SUPPORTED_VMESS_NETWORK, + ...STASH_SUPPORTED_VMESS_NETWORK, + ].includes(item.network) + ) { logger.warn( `不支持从 Clash 订阅中读取 network 类型为 ${item.network} 的 Vmess 节点,节点 ${item.name} 会被省略`, ) return undefined } - const isNewConfig = 'ws-opts' in item - const wsHeaders = isNewConfig - ? lowercaseHeaderKeys(_.get(item, 'ws-opts.headers', {})) - : lowercaseHeaderKeys(_.get(item, 'ws-headers', {})) - const wsHost = - item.servername || _.get(wsHeaders, 'host', item.server) - const wsOpts = isNewConfig - ? _.get(item, 'ws-opts', {}) - : { - path: _.get(item, 'ws-path', '/'), - headers: wsHeaders, - } - - return { + const vmessNode: VmessNodeConfig = { type: NodeTypeEnum.Vmess, nodeName: item.name, hostname: item.server, @@ -286,22 +283,54 @@ export const parseClashConfig = ( alterId: item.alterId ? `${item.alterId}` : '0', method: item.cipher || 'auto', udpRelay: resolveUdpRelay(item.udp, udpRelay), - tls: item.tls ?? false, + tls: item.tls === true, network: item.network || 'tcp', - ...(item.network === 'ws' - ? { - host: wsHost, - path: _.get(wsOpts, 'path', '/'), - wsHeaders, - } - : null), - ...(item.tls - ? { - skipCertVerify: item['skip-cert-verify'] === true, - tls13: tls13 ?? false, - } - : null), - } as VmessNodeConfig + } + + if (vmessNode.tls) { + if (typeof item.servername === 'string') { + vmessNode.sni = item.servername + } + if (typeof item.sni === 'string') { + vmessNode.sni = item.sni + } + + vmessNode.skipCertVerify = item['skip-cert-verify'] === true + vmessNode.tls13 = tls13 === true + } + + switch (vmessNode.network) { + case 'ws': + vmessNode.wsOpts = item['ws-opts'] || { + path: '/', + } + + if (item['ws-path']) { + vmessNode.wsOpts!.path = item['ws-path'] + } + + if (item['ws-headers']) { + vmessNode.wsOpts!.headers = item['ws-headers'] + } + + break + case 'h2': + vmessNode.h2Opts = item['h2-opts'] + + break + case 'http': + vmessNode.httpOpts = item['http-opts'] + + break + case 'grpc': + vmessNode.grpcOpts = { + serviceName: item['grpc-opts']['grpc-service-name'], + } + + break + } + + return vmessNode } case 'http': diff --git a/src/provider/CustomProvider.ts b/src/provider/CustomProvider.ts index 02f49e1a8..2a0880134 100644 --- a/src/provider/CustomProvider.ts +++ b/src/provider/CustomProvider.ts @@ -4,6 +4,7 @@ import { CustomProviderConfig, NodeTypeEnum, PossibleNodeConfigType, + VmessNodeConfig, } from '../types' import { SurgioError } from '../utils' import Provider from './Provider' @@ -83,7 +84,7 @@ export default class CustomProvider extends Provider { throw new Error('obfs-uri 已废弃, 请使用 obfsUri') } - const parsedNode = (() => { + let parsedNode = (() => { switch (type) { case NodeTypeEnum.Shadowsocks: return ShadowsocksNodeConfigValidator.parse(node) @@ -122,23 +123,14 @@ export default class CustomProvider extends Provider { throw new TypeError(`无法识别的节点类型:${type}`) } })() - const propertyKeysMustBeLowercase = ['wsHeaders'] as const if (this.underlyingProxy && !parsedNode.underlyingProxy) { parsedNode.underlyingProxy = this.underlyingProxy } - propertyKeysMustBeLowercase.forEach((key) => { - if (key in parsedNode && parsedNode[key] !== undefined) { - parsedNode[key] = Object.keys(parsedNode[key] as any).reduce( - (acc: any, curr) => { - acc[curr.toLowerCase()] = (parsedNode[key] as any)[curr] - return acc - }, - {}, - ) - } - }) + if (parsedNode.type === NodeTypeEnum.Vmess) { + parsedNode = this.prepareVmessNodeConfig(parsedNode) + } parsedNodeList.push(parsedNode) } catch (err) { @@ -163,4 +155,37 @@ export default class CustomProvider extends Provider { return parsedNodeList } + + public prepareVmessNodeConfig(node: VmessNodeConfig): VmessNodeConfig { + if (node.host) { + node.sni = node.host + } + + if (node.wsHeaders) { + if (!node.wsOpts) { + node.wsOpts = { + headers: node.wsHeaders, + path: node.path || '/', + } + } else if (node.wsOpts.headers) { + throw new Error('wsOpts.headers 和 wsHeaders 不能同时存在') + } else { + node.wsOpts.headers = node.wsHeaders + } + } + + if (node.network === 'ws' && node.path) { + throw new Error('请将 path 移动到 wsOpts.path') + } + + if (node.network === 'h2' && node.path) { + throw new Error('请将 path 移动到 h2Opts.path') + } + + if (node.network === 'http' && node.path) { + throw new Error('请将 path 移动到 httpOpts.path') + } + + return node + } } diff --git a/src/provider/V2rayNSubscribeProvider.ts b/src/provider/V2rayNSubscribeProvider.ts index cfc06c472..cbfab0d14 100644 --- a/src/provider/V2rayNSubscribeProvider.ts +++ b/src/provider/V2rayNSubscribeProvider.ts @@ -1,6 +1,7 @@ import { logger } from '@surgio/logger' import assert from 'assert' import { z } from 'zod' +import _ from 'lodash' import { NodeTypeEnum, @@ -146,9 +147,9 @@ export const getV2rayNSubscription = async ({ if (item.startsWith('ss://')) { return { ...parseSSUri(item), - udpRelay, - skipCertVerify, - tls13, + udpRelay: udpRelay === true, + skipCertVerify: skipCertVerify === true, + tls13: tls13 === true, } } @@ -175,32 +176,83 @@ export const parseJSONConfig = ( `该节点 ${config.ps} 可能不是一个有效的 V2rayN 节点。请参考 https://url.royli.dev/Qtrci 进行排查, 或者将解析模式改为兼容模式`, ) } + // istanbul ignore next - if (['kcp', 'http'].indexOf(config.net) > -1) { + if (!['tcp', 'ws', 'h2', 'grpc'].includes(config.net)) { logger.warn( `不支持读取 network 类型为 ${config.net} 的 Vmess 节点,节点 ${config.ps} 会被省略。`, ) return undefined } - return { + // istanbul ignore next + if (!['none', 'http'].includes(config.type)) { + logger.warn( + `不支持读取 type 类型为 ${config.type} 的 Vmess 节点,节点 ${config.ps} 会被省略。`, + ) + return undefined + } + + const vmessNode: VmessNodeConfig = { nodeName: config.ps, type: NodeTypeEnum.Vmess, hostname: config.add, port: config.port, - method: 'auto', + method: config.scy || 'auto', uuid: config.id, alterId: config.aid || '0', network: config.net, - tls: config.tls === 'tls', - host: config.host, - path: config.path || '/', udpRelay: udpRelay === true, - ...(config.tls === 'tls' - ? { - skipCertVerify: skipCertVerify ?? false, - tls13: tls13 ?? false, + tls: config.tls === 'tls', + } + + if (vmessNode.tls) { + if (skipCertVerify) { + vmessNode.skipCertVerify = true + } + if (tls13) { + vmessNode.tls13 = true + } + if (config.sni) { + vmessNode.sni = config.sni + } + } + + switch (config.net) { + case 'tcp': + if (config.type === 'http') { + vmessNode.network = 'http' + + _.set(vmessNode, 'httpOpts.path', [config.path || '/']) + _.set(vmessNode, 'httpOpts.method', 'GET') + + if (config.host) { + _.set(vmessNode, 'httpOpts.headers.Host', config.host) } - : null), + } + + break + case 'ws': + _.set(vmessNode, 'wsOpts.path', config.path || '/') + + if (config.host) { + _.set(vmessNode, 'wsOpts.headers.Host', config.host) + } + + break + case 'h2': + _.set(vmessNode, 'h2Opts.path', config.path || '/') + + if (config.host) { + _.set(vmessNode, 'h2Opts.host', [config.host]) + } + + break + case 'grpc': + _.set(vmessNode, 'grpcOpts.serviceName', config.path) + + break } + console.log(vmessNode) + return vmessNode } diff --git a/src/provider/__tests__/ClashProvider.test.ts b/src/provider/__tests__/ClashProvider.test.ts index ac67c1d34..dd7e0f803 100644 --- a/src/provider/__tests__/ClashProvider.test.ts +++ b/src/provider/__tests__/ClashProvider.test.ts @@ -143,8 +143,6 @@ test('getClashSubscription', async (t) => { type: NodeTypeEnum.Vmess, nodeName: 'vmess new format', hostname: 'server', - host: 'v2ray.com', - path: '/path', port: 443, uuid: 'uuid', alterId: '32', @@ -154,16 +152,19 @@ test('getClashSubscription', async (t) => { tls: true, tls13: false, skipCertVerify: true, - wsHeaders: { - host: 'v2ray.com', + wsOpts: { + headers: { + Host: 'v2ray.com', + }, + path: '/path', + 'early-data-header-name': 'Sec-WebSocket-Protocol', + 'max-early-data': 2048, }, }) t.deepEqual(config.shift(), { type: NodeTypeEnum.Vmess, nodeName: 'vmess custom header', hostname: 'server', - host: 'server', - path: '/path', port: 443, uuid: 'uuid', alterId: '32', @@ -173,8 +174,11 @@ test('getClashSubscription', async (t) => { tls: true, tls13: false, skipCertVerify: false, - wsHeaders: { - edge: 'www.baidu.com', + wsOpts: { + headers: { + edge: 'www.baidu.com', + }, + path: '/path', }, }) t.deepEqual(config.shift(), { diff --git a/src/provider/__tests__/CustomProvider.test.ts b/src/provider/__tests__/CustomProvider.test.ts index e3bbe8f47..6297cd47e 100644 --- a/src/provider/__tests__/CustomProvider.test.ts +++ b/src/provider/__tests__/CustomProvider.test.ts @@ -21,39 +21,6 @@ test('CustomProvider should work', async (t) => { t.deepEqual(await provider.getNodeList(), []) }) -test('CustomProvider should format header keys to lowercase', async (t) => { - const provider = new CustomProvider('test', { - type: SupportProviderEnum.Custom, - nodeList: [ - { - type: NodeTypeEnum.Shadowsocks, - nodeName: 'test', - hostname: 'example.com', - port: 443, - method: 'chacha20-ietf-poly1305', - password: 'password', - wsHeaders: { - Host: 'Example.com', - }, - }, - ], - }) - - t.deepEqual(await provider.getNodeList(), [ - { - type: NodeTypeEnum.Shadowsocks, - nodeName: 'test', - hostname: 'example.com', - port: 443, - method: 'chacha20-ietf-poly1305', - password: 'password', - wsHeaders: { - host: 'Example.com', - }, - }, - ]) -}) - test('CustomProvider underlying proxy', async (t) => { t.deepEqual( await new CustomProvider('test', { diff --git a/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.md b/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.md index 94285547f..6d4c8dcc0 100644 --- a/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.md +++ b/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.md @@ -35,26 +35,28 @@ Generated by [AVA](https://avajs.dev). }, { alterId: '64', - host: 'example.com', hostname: '1.1.1.1', method: 'auto', network: 'ws', nodeName: '测试 1', - path: '/', port: 8080, tls: false, type: 'vmess', udpRelay: false, uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + headers: { + Host: 'example.com', + }, + path: '/', + }, }, { alterId: '64', - host: 'example.com', hostname: '1.1.1.1', method: 'auto', network: 'tcp', nodeName: '测试 2', - path: '/', port: 8080, tls: false, type: 'vmess', @@ -63,19 +65,21 @@ Generated by [AVA](https://avajs.dev). }, { alterId: '64', - host: 'example.com', hostname: 'example.com', method: 'auto', network: 'ws', nodeName: '测试 tls', - path: '/', port: 443, - skipCertVerify: false, tls: true, - tls13: false, type: 'vmess', udpRelay: false, uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + headers: { + Host: 'example.com', + }, + path: '/', + }, }, ] @@ -86,17 +90,21 @@ Generated by [AVA](https://avajs.dev). [ { alterId: '64', - host: 'example.com', hostname: '1.1.1.1', method: 'auto', network: 'ws', nodeName: '测试 1', - path: '/', port: 8080, tls: false, type: 'vmess', udpRelay: false, uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + headers: { + Host: 'example.com', + }, + path: '/', + }, }, ] @@ -107,16 +115,20 @@ Generated by [AVA](https://avajs.dev). [ { alterId: '64', - host: 'example.com', hostname: '1.1.1.1', method: 'auto', network: 'ws', nodeName: '测试 1', - path: '/', port: 8080, tls: false, type: 'vmess', udpRelay: true, uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + headers: { + Host: 'example.com', + }, + path: '/', + }, }, ] diff --git a/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.snap b/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.snap index 934d7453e..92a44837d 100644 Binary files a/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.snap and b/src/provider/__tests__/__snapshots__/V2rayNSubscribeProvider.test.ts.snap differ diff --git a/src/utils/__tests__/__snapshots__/index.test.ts.md b/src/utils/__tests__/__snapshots__/index.test.ts.md new file mode 100644 index 000000000..1f3029442 --- /dev/null +++ b/src/utils/__tests__/__snapshots__/index.test.ts.md @@ -0,0 +1,31 @@ +# Snapshot report for `src/utils/__tests__/index.test.ts` + +The actual snapshot is saved in `index.test.ts.snap`. + +Generated by [AVA](https://avajs.dev). + +## getV2rayNNodes + +> Snapshot 1 + + '{"v":"2","ps":"测试 1","add":"1.1.1.1","port":"8080","id":"1386f85e-657b-4d6e-9d56-78badb75e1fd","aid":"64","scy":"auto","net":"ws","type":"none","path":"/","host":"example.com"}' + +> Snapshot 2 + + '{"v":"2","ps":"测试 2","add":"1.1.1.1","port":"8080","id":"1386f85e-657b-4d6e-9d56-78badb75e1fd","aid":"64","scy":"auto","net":"tcp","type":"none","tls":"tls"}' + +> Snapshot 3 + + '{"v":"2","ps":"测试 3","add":"1.1.1.1","port":"8080","id":"1386f85e-657b-4d6e-9d56-78badb75e1fd","aid":"64","scy":"auto","net":"ws","type":"none","path":"/","host":"example.com"}' + +> Snapshot 4 + + '{"v":"2","ps":"测试 4","add":"1.1.1.1","port":"8080","id":"1386f85e-657b-4d6e-9d56-78badb75e1fd","aid":"64","scy":"auto","net":"tcp","type":"http","path":"/","host":"example.com"}' + +> Snapshot 5 + + '{"v":"2","ps":"测试 5","add":"1.1.1.1","port":"8080","id":"1386f85e-657b-4d6e-9d56-78badb75e1fd","aid":"64","scy":"auto","net":"h2","type":"none","path":"/","host":"example.com"}' + +> Snapshot 6 + + '{"v":"2","ps":"测试 6","add":"1.1.1.1","port":"8080","id":"1386f85e-657b-4d6e-9d56-78badb75e1fd","aid":"64","scy":"auto","net":"grpc","type":"none","path":"example"}' diff --git a/src/utils/__tests__/__snapshots__/index.test.ts.snap b/src/utils/__tests__/__snapshots__/index.test.ts.snap new file mode 100644 index 000000000..1a6549dc2 Binary files /dev/null and b/src/utils/__tests__/__snapshots__/index.test.ts.snap differ diff --git a/src/utils/__tests__/__snapshots__/surfboard.test.ts.md b/src/utils/__tests__/__snapshots__/surfboard.test.ts.md new file mode 100644 index 000000000..ddf0e791d --- /dev/null +++ b/src/utils/__tests__/__snapshots__/surfboard.test.ts.md @@ -0,0 +1,18 @@ +# Snapshot report for `src/utils/__tests__/surfboard.test.ts` + +The actual snapshot is saved in `surfboard.test.ts.snap`. + +Generated by [AVA](https://avajs.dev). + +## getSurfboardNodes + +> Snapshot 1 + + `Test Node 1 = ss, example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=example.com␊ + Test Node 2 = ss, example2.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password␊ + Test Node 4 = ss, example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=example.com␊ + Test Node 5 = ss, example2.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password␊ + Test Node 6 = ss, example2.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password␊ + 测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=true␊ + 测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, encrypt-method=aes-128-gcm, vmess-aead=false␊ + 测试 3 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, skip-cert-verify=true, vmess-aead=false` diff --git a/src/utils/__tests__/__snapshots__/surfboard.test.ts.snap b/src/utils/__tests__/__snapshots__/surfboard.test.ts.snap new file mode 100644 index 000000000..e2b5fc55d Binary files /dev/null and b/src/utils/__tests__/__snapshots__/surfboard.test.ts.snap differ diff --git a/src/utils/__tests__/clash.test.ts b/src/utils/__tests__/clash.test.ts index 53f199e04..e5f13f6e5 100644 --- a/src/utils/__tests__/clash.test.ts +++ b/src/utils/__tests__/clash.test.ts @@ -89,17 +89,21 @@ test('getClashNodes', async (t) => { }, { alterId: '64', - host: 'example.com', hostname: '1.1.1.1', method: 'auto', network: 'ws', nodeName: 'Test Node 3', - path: '/', port: 8080, tls: false, skipCertVerify: true, type: NodeTypeEnum.Vmess, uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + headers: { + host: 'example.com', + }, + path: '/', + }, }, { alterId: '64', @@ -189,7 +193,6 @@ test('getClashNodes', async (t) => { server: '1.1.1.1', network: 'ws', port: 8080, - tls: false, udp: false, type: 'vmess', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', @@ -204,9 +207,9 @@ test('getClashNodes', async (t) => { cipher: 'auto', name: 'Test Node 4', alterId: '64', + network: 'tcp', server: '1.1.1.1', port: 8080, - tls: false, type: 'vmess', udp: false, uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', @@ -215,6 +218,7 @@ test('getClashNodes', async (t) => { cipher: 'auto', name: 'Test Node 5', alterId: '64', + network: 'tcp', server: '1.1.1.1', port: 8080, tls: true, @@ -227,10 +231,10 @@ test('getClashNodes', async (t) => { name: 'Test Node 6', alterId: '64', server: '1.1.1.1', + network: 'tcp', port: 8080, tls: true, udp: false, - 'skip-cert-verify': false, type: 'vmess', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', }) @@ -239,6 +243,7 @@ test('getClashNodes', async (t) => { name: 'Test Node 7', alterId: '64', server: '1.1.1.1', + network: 'tcp', port: 8080, tls: true, udp: false, @@ -326,12 +331,10 @@ test('getClashNodes', async (t) => { clash.getClashNodes([ { alterId: '64', - host: '', hostname: '1.1.1.1', method: 'auto', network: 'tcp', nodeName: 'Test', - path: '/', port: 8080, tls: true, udpRelay: true, @@ -347,6 +350,7 @@ test('getClashNodes', async (t) => { name: 'Test', port: 8080, server: '1.1.1.1', + network: 'tcp', 'skip-cert-verify': true, tls: true, type: 'vmess', @@ -356,6 +360,124 @@ test('getClashNodes', async (t) => { ], ) + t.deepEqual( + clash.getClashNodes([ + { + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'grpc', + nodeName: 'Test Node 3', + port: 8080, + tls: false, + skipCertVerify: true, + type: NodeTypeEnum.Vmess, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + grpcOpts: { + serviceName: 'test', + }, + }, + ]), + [ + { + alterId: '64', + cipher: 'auto', + name: 'Test Node 3', + network: 'grpc', + port: 8080, + server: '1.1.1.1', + type: 'vmess', + udp: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + 'grpc-opts': { + 'grpc-service-name': 'test', + }, + }, + ], + ) + + t.deepEqual( + clash.getClashNodes([ + { + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'http', + nodeName: 'Test Node 3', + port: 8080, + tls: false, + skipCertVerify: true, + type: NodeTypeEnum.Vmess, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + httpOpts: { + headers: { + host: 'example.com', + }, + method: 'GET', + path: ['/'], + }, + }, + ]), + [ + { + alterId: '64', + cipher: 'auto', + name: 'Test Node 3', + network: 'http', + port: 8080, + server: '1.1.1.1', + type: 'vmess', + udp: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + 'http-opts': { + headers: { + host: 'example.com', + }, + method: 'GET', + path: ['/'], + }, + }, + ], + ) + + t.deepEqual( + clash.getClashNodes([ + { + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'h2', + nodeName: 'Test Node 3', + port: 8080, + tls: false, + skipCertVerify: true, + type: NodeTypeEnum.Vmess, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + h2Opts: { + path: '/h2', + host: ['host.com', 'example.com'], + }, + }, + ]), + [ + { + alterId: '64', + cipher: 'auto', + name: 'Test Node 3', + network: 'h2', + port: 8080, + server: '1.1.1.1', + type: 'vmess', + udp: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + 'h2-opts': { + path: '/h2', + host: ['host.com', 'example.com'], + }, + }, + ], + ) + t.deepEqual( clash.getClashNodes([ { diff --git a/src/utils/__tests__/index.test.ts b/src/utils/__tests__/index.test.ts index 68ed29fed..4c6d95829 100644 --- a/src/utils/__tests__/index.test.ts +++ b/src/utils/__tests__/index.test.ts @@ -6,6 +6,7 @@ import { PossibleNodeConfigType, ShadowsocksNodeConfig, } from '../../types' +import { fromBase64 } from '../index' import * as utils from '../index' test('getNodeNames', async (t) => { @@ -104,11 +105,15 @@ test('getV2rayNNodes', (t) => { method: 'auto', network: 'ws', nodeName: '测试 1', - path: '/', port: 8080, tls: false, - host: 'example.com', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + path: '/', + headers: { + Host: 'example.com', + }, + }, }, { type: NodeTypeEnum.Vmess, @@ -117,10 +122,8 @@ test('getV2rayNNodes', (t) => { method: 'auto', network: 'tcp', nodeName: '测试 2', - path: '/', port: 8080, tls: true, - host: '', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', }, { @@ -130,152 +133,72 @@ test('getV2rayNNodes', (t) => { method: 'auto', network: 'ws', nodeName: '测试 3', - path: '/', port: 8080, tls: false, - host: '', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', - }, - ]) - .split('\n') - - t.is( - schemeList[0], - 'vmess://eyJ2IjoiMiIsInBzIjoi5rWL6K+VIDEiLCJhZGQiOiIxLjEuMS4xIiwicG9ydCI6IjgwODAiLCJpZCI6IjEzODZmODVlLTY1N2ItNGQ2ZS05ZDU2LTc4YmFkYjc1ZTFmZCIsImFpZCI6IjY0IiwibmV0Ijoid3MiLCJ0eXBlIjoibm9uZSIsImhvc3QiOiJleGFtcGxlLmNvbSIsInBhdGgiOiIvIiwidGxzIjoiIn0=', - ) - t.is( - schemeList[1], - 'vmess://eyJ2IjoiMiIsInBzIjoi5rWL6K+VIDIiLCJhZGQiOiIxLjEuMS4xIiwicG9ydCI6IjgwODAiLCJpZCI6IjEzODZmODVlLTY1N2ItNGQ2ZS05ZDU2LTc4YmFkYjc1ZTFmZCIsImFpZCI6IjY0IiwibmV0IjoidGNwIiwidHlwZSI6Im5vbmUiLCJob3N0IjoiIiwicGF0aCI6Ii8iLCJ0bHMiOiJ0bHMifQ==', - ) - t.is( - schemeList[2], - 'vmess://eyJ2IjoiMiIsInBzIjoi5rWL6K+VIDMiLCJhZGQiOiIxLjEuMS4xIiwicG9ydCI6IjgwODAiLCJpZCI6IjEzODZmODVlLTY1N2ItNGQ2ZS05ZDU2LTc4YmFkYjc1ZTFmZCIsImFpZCI6IjY0IiwibmV0Ijoid3MiLCJ0eXBlIjoibm9uZSIsImhvc3QiOiIiLCJwYXRoIjoiLyIsInRscyI6IiJ9', - ) -}) - -test('formatV2rayConfig', (t) => { - const json = utils.formatV2rayConfig(100, { - type: NodeTypeEnum.Vmess, - alterId: '64', - hostname: '1.1.1.1', - method: 'auto', - network: 'ws', - nodeName: '测试 3', - path: '/', - port: 8080, - tls: false, - host: '', - uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', - }) - const json2 = utils.formatV2rayConfig(100, { - type: NodeTypeEnum.Vmess, - alterId: '64', - hostname: '1.1.1.1', - method: 'auto', - network: 'ws', - nodeName: '测试 4', - path: '/', - port: 8080, - tls: true, - tls13: true, - skipCertVerify: true, - host: '', - uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', - }) - - t.deepEqual(json, { - log: { - loglevel: 'warning', - }, - inbound: { - port: 100, - listen: '127.0.0.1', - protocol: 'socks', - settings: { - auth: 'noauth', - }, - }, - outbound: { - protocol: 'vmess', - settings: { - vnext: [ - { - address: '1.1.1.1', - port: 8080, - users: [ - { - id: '1386f85e-657b-4d6e-9d56-78badb75e1fd', - alterId: 64, - security: 'auto', - level: 0, - }, - ], - }, - ], - }, - streamSettings: { - network: 'ws', - security: 'none', - wsSettings: { + wsOpts: { + path: '/', headers: { - Host: '', - 'User-Agent': - 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', + Host: 'example.com', }, - path: '/', }, }, - }, - }) - t.deepEqual(json2, { - log: { - loglevel: 'warning', - }, - inbound: { - port: 100, - listen: '127.0.0.1', - protocol: 'socks', - settings: { - auth: 'noauth', - }, - }, - outbound: { - protocol: 'vmess', - settings: { - vnext: [ - { - address: '1.1.1.1', - port: 8080, - users: [ - { - id: '1386f85e-657b-4d6e-9d56-78badb75e1fd', - alterId: 64, - security: 'auto', - level: 0, - }, - ], - }, - ], - }, - streamSettings: { - security: 'tls', - network: 'ws', - tlsSettings: { - serverName: '1.1.1.1', - allowInsecure: true, - allowInsecureCiphers: false, - }, - wsSettings: { + { + type: NodeTypeEnum.Vmess, + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'http', + nodeName: '测试 4', + port: 8080, + tls: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + httpOpts: { + path: ['/'], + method: 'GET', headers: { - Host: '', - 'User-Agent': - 'Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1', + Host: 'example.com', }, + }, + }, + { + type: NodeTypeEnum.Vmess, + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'h2', + nodeName: '测试 5', + port: 8080, + tls: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + h2Opts: { path: '/', + host: ['example.com'], }, }, - }, - }) + { + type: NodeTypeEnum.Vmess, + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'grpc', + nodeName: '测试 6', + port: 8080, + tls: false, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + grpcOpts: { + serviceName: 'example', + }, + }, + ]) + .split('\n') + + t.snapshot(fromBase64(schemeList[0].replace('vmess://', ''))) + t.snapshot(fromBase64(schemeList[1].replace('vmess://', ''))) + t.snapshot(fromBase64(schemeList[2].replace('vmess://', ''))) + t.snapshot(fromBase64(schemeList[3].replace('vmess://', ''))) + t.snapshot(fromBase64(schemeList[4].replace('vmess://', ''))) + t.snapshot(fromBase64(schemeList[5].replace('vmess://', ''))) }) test('isIp', (t) => { diff --git a/src/utils/__tests__/loon.test.ts b/src/utils/__tests__/loon.test.ts index a898fe339..d41bcab56 100644 --- a/src/utils/__tests__/loon.test.ts +++ b/src/utils/__tests__/loon.test.ts @@ -21,7 +21,54 @@ test('getLoonNodes', (t) => { uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', }, ]), - '测试 = vmess,1.1.1.1,443,method=chacha20-ietf-poly1305,"1386f85e-657b-4d6e-9d56-78badb75e1fd",transport=tcp,over-tls=true,tls-name=1.1.1.1,skip-cert-verify=false', + '测试 = vmess,1.1.1.1,443,method=chacha20-ietf-poly1305,"1386f85e-657b-4d6e-9d56-78badb75e1fd",transport=tcp,over-tls=true', + ) + t.is( + getLoonNodes([ + { + type: NodeTypeEnum.Vmess, + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'http', + nodeName: '测试', + port: 443, + tls: true, + tls13: true, + udpRelay: true, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + httpOpts: { + path: ['/test'], + method: 'POST', + headers: { + Host: 'example.com', + }, + }, + }, + ]), + '测试 = vmess,1.1.1.1,443,method=chacha20-ietf-poly1305,"1386f85e-657b-4d6e-9d56-78badb75e1fd",transport=http,path=/test,host=example.com,over-tls=true', + ) + t.is( + getLoonNodes([ + { + type: NodeTypeEnum.Vmess, + alterId: '64', + hostname: '1.1.1.1', + method: 'auto', + network: 'ws', + nodeName: '测试', + port: 443, + tls: true, + tls13: true, + udpRelay: true, + uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + path: '/test', + headers: {}, + }, + }, + ]), + '测试 = vmess,1.1.1.1,443,method=chacha20-ietf-poly1305,"1386f85e-657b-4d6e-9d56-78badb75e1fd",transport=ws,path=/test,over-tls=true', ) t.is( getLoonNodes([ diff --git a/src/utils/__tests__/quantumult.test.ts b/src/utils/__tests__/quantumult.test.ts index f79966981..c9d8f8648 100644 --- a/src/utils/__tests__/quantumult.test.ts +++ b/src/utils/__tests__/quantumult.test.ts @@ -13,11 +13,15 @@ test('getQuantumultXNodes', (t) => { method: 'auto', network: 'ws', nodeName: '测试 1', - path: '/', port: 8080, tls: false, - host: 'example.com', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + headers: { + Host: 'example.com', + }, + path: '/', + }, }, { type: NodeTypeEnum.Vmess, @@ -26,11 +30,12 @@ test('getQuantumultXNodes', (t) => { method: 'auto', network: 'tcp', nodeName: '测试 2', - path: '/', port: 8080, tls: false, - host: '', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + path: '/', + }, }, { type: NodeTypeEnum.Vmess, @@ -39,12 +44,13 @@ test('getQuantumultXNodes', (t) => { method: 'auto', network: 'ws', nodeName: '测试 3', - path: '/', port: 8080, tls: false, - host: '', udpRelay: true, uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', + wsOpts: { + path: '/', + }, }, { type: NodeTypeEnum.Shadowsocksr, @@ -94,15 +100,15 @@ test('getQuantumultXNodes', (t) => { t.is( schemeList[0], - 'vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=false, obfs=ws, obfs-uri=/, obfs-host=example.com, tag=测试 1', + 'vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, obfs=ws, obfs-uri=/, obfs-host=example.com, tag=测试 1', ) t.is( schemeList[1], - 'vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=false, tag=测试 2', + 'vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, tag=测试 2', ) t.is( schemeList[2], - 'vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, udp-relay=true, aead=false, obfs=ws, obfs-uri=/, obfs-host=1.1.1.1, tag=测试 3', + 'vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, udp-relay=true, obfs=ws, obfs-uri=/, tag=测试 3', ) t.is( schemeList[3], @@ -118,7 +124,7 @@ test('getQuantumultXNodes', (t) => { ) t.is( schemeList[6], - 'vmess=1.1.1.1:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=false, obfs=over-tls, tls-verification=true, tag=测试 4', + 'vmess=1.1.1.1:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, obfs=over-tls, tls-verification=true, tag=测试 4', ) t.is( @@ -137,7 +143,7 @@ test('getQuantumultXNodes', (t) => { uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', }, ]), - 'vmess=1.1.1.1:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, udp-relay=true, aead=false, obfs=over-tls, tls-verification=true, tls13=true, tag=测试', + 'vmess=1.1.1.1:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, udp-relay=true, obfs=over-tls, tls-verification=true, tls13=true, tag=测试', ) t.is( diff --git a/src/utils/__tests__/surfboard.test.ts b/src/utils/__tests__/surfboard.test.ts index 269d684ae..bc95488af 100644 --- a/src/utils/__tests__/surfboard.test.ts +++ b/src/utils/__tests__/surfboard.test.ts @@ -81,14 +81,15 @@ test('getSurfboardNodes', async (t) => { method: 'auto', network: 'ws', nodeName: '测试 1', - path: '/', port: 8080, tls: true, - host: '', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', surfboardConfig: { vmessAEAD: true, }, + wsOpts: { + path: '/', + }, }, { type: NodeTypeEnum.Vmess, @@ -97,7 +98,6 @@ test('getSurfboardNodes', async (t) => { method: 'aes-128-gcm', network: 'tcp', nodeName: '测试 2', - path: '/', port: 8080, tls: false, host: '', @@ -110,57 +110,26 @@ test('getSurfboardNodes', async (t) => { method: 'auto', network: 'ws', nodeName: '测试 3', - path: '/', port: 8080, tls: true, tls13: true, skipCertVerify: true, - host: '', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', tfo: true, mptcp: true, + wsOpts: { + path: '/', + }, }, ] - const txt1 = surfboard.getSurfboardNodes(nodeList).split('\n') - const txt2 = surfboard.getSurfboardNodes( - nodeList, - (nodeConfig) => nodeConfig.nodeName === 'Test Node 1', - ) + + t.snapshot(surfboard.getSurfboardNodes(nodeList)) t.is( - txt1[0], - 'Test Node 1 = ss, example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=example.com', - ) - t.is( - txt1[1], - 'Test Node 2 = ss, example2.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password', - ) - t.is( - txt1[2], - 'Test Node 4 = ss, example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=example.com', - ) - t.is( - txt1[3], - 'Test Node 5 = ss, example2.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password', - ) - t.is( - txt1[4], - 'Test Node 6 = ss, example2.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password', - ) - t.is( - txt1[5], - '测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=true', - ) - t.is( - txt1[6], - '测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, encrypt-method=aes-128-gcm, vmess-aead=false', - ) - t.is( - txt1[7], - '测试 3 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, skip-cert-verify=true, vmess-aead=false', - ) - t.is( - txt2, + surfboard.getSurfboardNodes( + nodeList, + (nodeConfig) => nodeConfig.nodeName === 'Test Node 1', + ), 'Test Node 1 = ss, example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=example.com', ) @@ -357,19 +326,20 @@ test('getSurfboardNodes', async (t) => { method: 'auto', network: 'ws', nodeName: '测试 6', - path: '/', port: 8080, tls: true, tls13: true, skipCertVerify: true, - host: '', uuid: '1386f85e-657b-4d6e-9d56-78badb75e1fd', tfo: true, mptcp: true, testUrl: 'http://www.google.com', + wsOpts: { + path: '/', + }, }, ]), - '测试 6 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, skip-cert-verify=true, vmess-aead=false', + '测试 6 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, skip-cert-verify=true, vmess-aead=false', ) }) diff --git a/src/utils/__tests__/surge.test.ts b/src/utils/__tests__/surge.test.ts index 65b60967d..219fc27d1 100644 --- a/src/utils/__tests__/surge.test.ts +++ b/src/utils/__tests__/surge.test.ts @@ -201,11 +201,11 @@ test('getSurgeNodes', async (t) => { ) t.is( txt1[3], - '测试 3 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", vmess-aead=false', + '测试 3 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", vmess-aead=false', ) t.is( txt1[4], - '测试 4 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false', + '测试 4 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false', ) t.is( txt1[5], @@ -229,11 +229,11 @@ test('getSurgeNodes', async (t) => { ) t.is( txt1[10], - '测试 6 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false, tfo=true, mptcp=true, tls13=true, skip-cert-verify=true', + '测试 6 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false, tfo=true, mptcp=true, tls13=true, skip-cert-verify=true', ) t.is( txt1[11], - '测试 7 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false, tfo=true, mptcp=true, underlying-proxy=another-proxy, tls13=true, skip-cert-verify=true', + '测试 7 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false, tfo=true, mptcp=true, underlying-proxy=another-proxy, tls13=true, skip-cert-verify=true', ) t.is( @@ -448,7 +448,7 @@ test('getSurgeNodes', async (t) => { testUrl: 'http://www.google.com', }, ]), - '测试 6 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="host:1.1.1.1|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false, tfo=true, mptcp=true, test-url=http://www.google.com, tls13=true, skip-cert-verify=true', + '测试 6 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers="user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1", tls=true, vmess-aead=false, tfo=true, mptcp=true, test-url=http://www.google.com, tls13=true, skip-cert-verify=true', ) t.is( diff --git a/src/utils/clash.ts b/src/utils/clash.ts index f45556436..b3de786c4 100644 --- a/src/utils/clash.ts +++ b/src/utils/clash.ts @@ -55,11 +55,17 @@ export const getClashNodeNames = function ( return result } +/** + * @see https://wiki.metacubex.one/config/proxies/ + * @see https://stash.wiki/proxy-protocols/proxy-types + */ function nodeListMapper(nodeConfig: PossibleNodeConfigType) { + const clashConfig = nodeConfig.clashConfig || {} + switch (nodeConfig.type) { case NodeTypeEnum.Shadowsocks: // Istanbul ignore next - if (nodeConfig.shadowTls && !nodeConfig.clashConfig?.enableShadowTls) { + if (nodeConfig.shadowTls && !clashConfig.enableShadowTls) { logger.warn( `尚未开启 Clash 的 shadow-tls 支持,节点 ${nodeConfig.nodeName} 将被忽略。如需开启,请在配置文件中设置 clashConfig.enableShadowTls 为 true。`, ) @@ -128,8 +134,8 @@ function nodeListMapper(nodeConfig: PossibleNodeConfigType) { : null), } as const - case NodeTypeEnum.Vmess: - return { + case NodeTypeEnum.Vmess: { + const vmessNode: Record = { type: 'vmess', cipher: nodeConfig.method, name: nodeConfig.nodeName, @@ -137,32 +143,57 @@ function nodeListMapper(nodeConfig: PossibleNodeConfigType) { port: nodeConfig.port, udp: nodeConfig.udpRelay === true, uuid: nodeConfig.uuid, - alterId: nodeConfig.alterId, - ...(nodeConfig.network === 'tcp' - ? null - : { - network: nodeConfig.network, - }), - tls: nodeConfig.tls, - ...(typeof nodeConfig.skipCertVerify === 'boolean' && nodeConfig.tls - ? { - 'skip-cert-verify': nodeConfig.skipCertVerify, - } - : null), - ...(nodeConfig.network === 'ws' - ? { - 'ws-opts': { - path: nodeConfig.path, - headers: { - ...(nodeConfig.host ? { host: nodeConfig.host } : null), - ..._.omit(nodeConfig.wsHeaders, ['host']), - }, - }, + alterId: nodeConfig.alterId || '0', + network: nodeConfig.network || 'tcp', + } + + switch (nodeConfig.network) { + case 'tcp': + break + + case 'ws': + vmessNode['ws-opts'] = nodeConfig.wsOpts + break + + case 'h2': + vmessNode['h2-opts'] = nodeConfig.h2Opts + break + + case 'http': + vmessNode['http-opts'] = nodeConfig.httpOpts + break + + case 'grpc': + if (nodeConfig.grpcOpts) { + vmessNode['grpc-opts'] = { + 'grpc-service-name': nodeConfig.grpcOpts.serviceName, } - : null), - } as const + } + break + } + + if (nodeConfig.tls) { + vmessNode.tls = true - case NodeTypeEnum.Shadowsocksr: { + if (nodeConfig.skipCertVerify) { + vmessNode['skip-cert-verify'] = nodeConfig.skipCertVerify + } + if (clashConfig.clashCore === 'clash' && nodeConfig.sni) { + vmessNode.servername = nodeConfig.sni + } + if (clashConfig.clashCore === 'stash' && nodeConfig.sni) { + vmessNode.sni = nodeConfig.sni + vmessNode.servername = nodeConfig.sni + } + if (clashConfig.clashCore === 'clash.meta' && nodeConfig.sni) { + vmessNode.servername = nodeConfig.sni + } + } + + return vmessNode + } + + case NodeTypeEnum.Shadowsocksr: return { type: 'ssr', name: nodeConfig.nodeName, @@ -176,7 +207,6 @@ function nodeListMapper(nodeConfig: PossibleNodeConfigType) { 'protocol-param': nodeConfig.protoparam ?? '', udp: nodeConfig.udpRelay === true, } as const - } case NodeTypeEnum.Snell: // Istanbul ignore next @@ -273,12 +303,13 @@ function nodeListMapper(nodeConfig: PossibleNodeConfigType) { case NodeTypeEnum.Tuic: // Istanbul ignore next - if (!nodeConfig.clashConfig?.enableTuic) { + if (!clashConfig.enableTuic) { logger.warn( `尚未开启 Clash 的 Tuic 支持,节点 ${nodeConfig.nodeName} 会被省略。如需开启,请在配置文件中设置 clashConfig.enableTuic 为 true。`, ) return null } + // Istanbul ignore next if (nodeConfig.alpn && !nodeConfig.alpn.length) { logger.warn( @@ -322,7 +353,7 @@ function nodeListMapper(nodeConfig: PossibleNodeConfigType) { case NodeTypeEnum.Hysteria2: // Istanbul ignore next - if (!nodeConfig.clashConfig?.enableHysteria2) { + if (!clashConfig.enableHysteria2) { logger.warn( `尚未开启 Clash 的 Hysteria2 支持,节点 ${nodeConfig.nodeName} 会被省略。如需开启,请在配置文件中设置 clashConfig.enableHysteria2 为 true。`, ) @@ -334,7 +365,7 @@ function nodeListMapper(nodeConfig: PossibleNodeConfigType) { name: nodeConfig.nodeName, server: nodeConfig.hostname, port: nodeConfig.port, - [nodeConfig.clashConfig.clashCore === 'stash' ? 'auth' : 'password']: + [clashConfig.clashCore === 'stash' ? 'auth' : 'password']: nodeConfig.password, up: nodeConfig.uploadBandwidth || 0, down: nodeConfig.downloadBandwidth || 0, diff --git a/src/utils/index.ts b/src/utils/index.ts index 07504a33b..b869841b7 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -3,7 +3,6 @@ import fs from 'fs-extra' import os from 'os' import { join } from 'path' import queryString from 'query-string' -import { JsonObject } from 'type-fest' import { URL, URLSearchParams } from 'url' import URLSafeBase64 from 'urlsafe-base64' import net from 'net' @@ -19,7 +18,7 @@ import { SortedNodeFilterType, VmessNodeConfig, } from '../types' -import { ERR_INVALID_FILTER, OBFS_UA } from '../constant' +import { ERR_INVALID_FILTER, V2RAYN_SUPPORTED_VMESS_NETWORK } from '../constant' import { getIsGFWFree } from './env-flag' import { applyFilter } from '../filters' @@ -220,6 +219,7 @@ export const getShadowsocksrNodes = ( return result.join('\n') } +// https://github.com/2dust/v2rayN/wiki/%E5%88%86%E4%BA%AB%E9%93%BE%E6%8E%A5%E6%A0%BC%E5%BC%8F%E8%AF%B4%E6%98%8E(ver-2) export const getV2rayNNodes = ( list: ReadonlyArray, ): string => { @@ -230,20 +230,75 @@ export const getV2rayNNodes = ( return void 0 } + if (!V2RAYN_SUPPORTED_VMESS_NETWORK.includes(nodeConfig.network as any)) { + logger.warn( + `在生成 V2Ray 节点时出现了不被支持的 ${nodeConfig.network} 协议,节点 ${nodeConfig.nodeName} 会被省略`, + ) + return void 0 + } + switch (nodeConfig.type) { case NodeTypeEnum.Vmess: { - const json = { + const json: Record = { v: '2', ps: nodeConfig.nodeName, add: nodeConfig.hostname, port: `${nodeConfig.port}`, id: nodeConfig.uuid, - aid: nodeConfig.alterId, - net: nodeConfig.network, - type: 'none', - host: nodeConfig.host, - path: nodeConfig.path, - tls: nodeConfig.tls ? 'tls' : '', + aid: `${nodeConfig.alterId}` || '0', + scy: nodeConfig.method, + net: nodeConfig.network === 'http' ? 'tcp' : nodeConfig.network, + type: nodeConfig.network === 'http' ? 'http' : 'none', + } + + if (nodeConfig.tls) { + json.tls = 'tls' + + if (nodeConfig.sni) { + json.sni = nodeConfig.sni + } + if (nodeConfig.alpn) { + json.alpn = nodeConfig.alpn.join(',') + } + } + + switch (nodeConfig.network) { + case 'ws': + if (nodeConfig.wsOpts) { + const obfsHost = getHeader(nodeConfig.wsOpts.headers, 'host') + json.path = nodeConfig.wsOpts.path + + if (obfsHost) { + json.host = obfsHost + } + } + + break + case 'http': + if (nodeConfig.httpOpts) { + const obfsHost = getHeader(nodeConfig.httpOpts.headers, 'host') + + json.path = nodeConfig.httpOpts.path[0] + + if (obfsHost) { + json.host = obfsHost + } + } + + break + case 'h2': + if (nodeConfig.h2Opts) { + json.path = nodeConfig.h2Opts.path + json.host = nodeConfig.h2Opts.host[0] + } + + break + case 'grpc': + if (nodeConfig.grpcOpts) { + json.path = nodeConfig.grpcOpts.serviceName + } + + break } return 'vmess://' + toBase64(JSON.stringify(json)) @@ -434,83 +489,6 @@ export const ensureConfigFolder = (dir: string = os.homedir()): string => { return configDir } -export const formatV2rayConfig = ( - localPort: number, - nodeConfig: VmessNodeConfig, -): JsonObject => { - const config: any = { - log: { - loglevel: 'warning', - }, - inbound: { - port: Number(localPort), - listen: '127.0.0.1', - protocol: 'socks', - settings: { - auth: 'noauth', - }, - }, - outbound: { - protocol: 'vmess', - settings: { - vnext: [ - { - address: nodeConfig.hostname, - port: Number(nodeConfig.port), - users: [ - { - id: nodeConfig.uuid, - alterId: Number(nodeConfig.alterId), - security: nodeConfig.method, - level: 0, - }, - ], - }, - ], - }, - streamSettings: { - security: 'none', - }, - }, - } - - if (nodeConfig.tls) { - config.outbound.streamSettings = { - ...config.outbound.streamSettings, - security: 'tls', - tlsSettings: { - serverName: nodeConfig.host || nodeConfig.hostname, - ...(typeof nodeConfig.skipCertVerify === 'boolean' - ? { - allowInsecure: nodeConfig.skipCertVerify, - } - : null), - ...(typeof nodeConfig.tls13 === 'boolean' - ? { - allowInsecureCiphers: !nodeConfig.tls13, - } - : null), - }, - } - } - - if (nodeConfig.network === 'ws') { - config.outbound.streamSettings = { - ...config.outbound.streamSettings, - network: nodeConfig.network, - wsSettings: { - path: nodeConfig.path, - headers: { - Host: nodeConfig.host, - 'User-Agent': OBFS_UA, - }, - }, - } - } - - return config -} - export const lowercaseHeaderKeys = ( headers: Record, ): Record => { @@ -632,3 +610,18 @@ export const parseBitrate = (str: string): number => { return bitrate } } + +export const getHeader = ( + headers: Record | undefined, + key: string, +): string | undefined => { + if (!headers) { + return undefined + } + + const lowerCaseKey = key.toLowerCase() + const headerKey = Object.keys(headers).find( + (k) => k.toLowerCase() === lowerCaseKey, + ) + return headerKey ? headers[headerKey] : undefined +} diff --git a/src/utils/loon.ts b/src/utils/loon.ts index 20bde4e79..d0a80cf2e 100644 --- a/src/utils/loon.ts +++ b/src/utils/loon.ts @@ -8,8 +8,9 @@ import { PossibleNodeConfigType, SortedNodeFilterType, } from '../types' -import { ERR_INVALID_FILTER } from '../constant' +import { ERR_INVALID_FILTER, LOON_SUPPORTED_VMESS_NETWORK } from '../constant' import { applyFilter, internalFilters } from '../filters' +import { getHeader } from './index' const { httpFilter, @@ -22,7 +23,7 @@ const { } = internalFilters const logger = createLogger({ service: 'surgio:utils:loon' }) -// @see https://www.notion.so/1-9809ce5acf524d868affee8dd5fc0a6e +// https://loon0x00.github.io/LoonManual/#/cn/node export const getLoonNodes = function ( list: ReadonlyArray, filter?: NodeFilterType | SortedNodeFilterType, @@ -93,6 +94,15 @@ export const getLoonNodes = function ( } case NodeTypeEnum.Vmess: { + if ( + !LOON_SUPPORTED_VMESS_NETWORK.includes(nodeConfig.network as any) + ) { + logger.warn( + `Loon 不支持 ${nodeConfig.network} 的 Vmess 节点,节点 ${nodeConfig.nodeName} 会被省略`, + ) + return void 0 + } + const config: Array = [ `${nodeConfig.nodeName} = vmess`, nodeConfig.hostname, @@ -104,25 +114,43 @@ export const getLoonNodes = function ( `transport=${nodeConfig.network}`, ] - if (nodeConfig.network === 'ws') { - config.push( - `path=${nodeConfig.path || '/'}`, - `host=${nodeConfig.host || nodeConfig.hostname}`, - ) + if (nodeConfig.network === 'ws' && nodeConfig.wsOpts) { + const obfsHost = getHeader(nodeConfig.wsOpts.headers, 'Host') + + config.push(`path=${nodeConfig.wsOpts.path || '/'}`) + + if (obfsHost) { + config.push(`host=${obfsHost}`) + } + } - if (Object.keys(_.omit(nodeConfig.wsHeaders, 'host')).length > 0) { + if (nodeConfig.network === 'http' && nodeConfig.httpOpts) { + const obfsHost = getHeader(nodeConfig.httpOpts.headers, 'Host') + + config.push(`path=${nodeConfig.httpOpts.path || '/'}`) + + if (obfsHost) { + config.push(`host=${obfsHost}`) + } + + // istanbul ignore next + if (nodeConfig.httpOpts.method !== 'GET') { logger.warn( - `Loon 不支持自定义额外的 Header 字段,节点 ${nodeConfig.nodeName} 可能不可用`, + `Loon 不支持自定义 VMESS+HTTP 节点的 method 属性,节点 ${nodeConfig.nodeName} 可能不可用`, ) } } if (nodeConfig.tls) { - config.push( - `over-tls=${nodeConfig.tls}`, - `tls-name=${nodeConfig.host || nodeConfig.hostname}`, - `skip-cert-verify=${nodeConfig.skipCertVerify === true}`, - ) + config.push(`over-tls=true`) + + if (nodeConfig.sni) { + config.push(`tls-name=${nodeConfig.sni}`) + } + + if (nodeConfig.skipCertVerify) { + config.push(`skip-cert-verify=true`) + } } return config.join(',') diff --git a/src/utils/quantumult.ts b/src/utils/quantumult.ts index a29a6d482..f3ee173f8 100644 --- a/src/utils/quantumult.ts +++ b/src/utils/quantumult.ts @@ -1,6 +1,7 @@ import { createLogger } from '@surgio/logger' import _ from 'lodash' +import { QUANTUMULT_X_SUPPORTED_VMESS_NETWORK } from '../constant' import { NodeFilterType, NodeTypeEnum, @@ -8,7 +9,7 @@ import { SortedNodeFilterType, } from '../types' import { applyFilter } from '../filters' -import { pickAndFormatStringList } from './index' +import { getHeader, pickAndFormatStringList } from './index' const logger = createLogger({ service: 'surgio:utils:quantumult' }) @@ -43,6 +44,17 @@ function nodeListMapper( ): [string, string] | undefined { switch (nodeConfig.type) { case NodeTypeEnum.Vmess: { + if ( + !QUANTUMULT_X_SUPPORTED_VMESS_NETWORK.includes( + nodeConfig.network as any, + ) + ) { + logger.warn( + `Quantumult X 不支持 ${nodeConfig.network} 的 Vmess 节点,节点 ${nodeConfig.nodeName} 会被省略`, + ) + return void 0 + } + const config = [ `${nodeConfig.hostname}:${nodeConfig.port}`, // method 为 auto 时 qx 会无法识别 @@ -52,9 +64,7 @@ function nodeListMapper( `password=${nodeConfig.uuid}`, ...(nodeConfig.udpRelay ? ['udp-relay=true'] : []), ...(nodeConfig.tfo ? ['fast-open=true'] : []), - ...(nodeConfig.quantumultXConfig?.vmessAEAD - ? ['aead=true'] - : ['aead=false']), + ...(nodeConfig.quantumultXConfig?.vmessAEAD ? ['aead=true'] : []), ] switch (nodeConfig.network) { @@ -62,10 +72,9 @@ function nodeListMapper( if (nodeConfig.tls) { config.push(`obfs=wss`) + // istanbul ignore next if (nodeConfig.skipCertVerify) { config.push('tls-verification=false') - } else { - config.push('tls-verification=true') } // istanbul ignore next @@ -75,8 +84,16 @@ function nodeListMapper( } else { config.push(`obfs=ws`) } - config.push(`obfs-uri=${nodeConfig.path || '/'}`) - config.push(`obfs-host=${nodeConfig.host || nodeConfig.hostname}`) + + if (nodeConfig.wsOpts) { + const obfsHost = getHeader(nodeConfig.wsOpts.headers, 'Host') + + config.push(`obfs-uri=${nodeConfig.wsOpts.path || '/'}`) + + if (obfsHost) { + config.push(`obfs-host=${obfsHost}`) + } + } break case 'tcp': @@ -96,8 +113,19 @@ function nodeListMapper( } break - default: - // do nothing + case 'http': + if (nodeConfig.httpOpts) { + const obfsHost = getHeader(nodeConfig.httpOpts.headers, 'Host') + + config.push( + 'obfs=http', + `obfs-uri=${nodeConfig.httpOpts.path || '/'}`, + ) + + if (obfsHost) { + config.push(`obfs-host=${obfsHost}`) + } + } } if (typeof nodeConfig.testUrl === 'string') { @@ -108,8 +136,8 @@ function nodeListMapper( // istanbul ignore next if ( - nodeConfig.wsHeaders && - Object.keys(nodeConfig.wsHeaders).length > 1 + nodeConfig.wsOpts?.headers && + Object.keys(nodeConfig.wsOpts.headers).length > 1 ) { logger.warn( `Quantumult X 不支持自定义额外的 Header 字段,节点 ${nodeConfig.nodeName} 可能不可用`, diff --git a/src/utils/surfboard.ts b/src/utils/surfboard.ts index e29da55d7..d800988da 100644 --- a/src/utils/surfboard.ts +++ b/src/utils/surfboard.ts @@ -1,7 +1,6 @@ import { createLogger } from '@surgio/logger' -import _ from 'lodash' -import { OBFS_UA } from '../constant' +import { OBFS_UA, SURFBOARD_SUPPORTED_VMESS_NETWORK } from '../constant' import { NodeFilterType, NodeTypeEnum, @@ -22,7 +21,7 @@ export const getSurfboardExtendHeaders = ( } /** - * @see https://manual.nssurge.com/policy/proxy.html + * @see https://getsurfboard.com/docs/profile-format/proxy/ */ export const getSurfboardNodes = function ( list: ReadonlyArray, @@ -117,6 +116,15 @@ function nodeListMapper( } case NodeTypeEnum.Vmess: { + if ( + !SURFBOARD_SUPPORTED_VMESS_NETWORK.includes(nodeConfig.network as any) + ) { + logger.warn( + `Surfboard 不支持 ${nodeConfig.network} 的 Vmess 节点,节点 ${nodeConfig.nodeName} 会被省略`, + ) + return void 0 + } + const result = [ 'vmess', nodeConfig.hostname, @@ -132,27 +140,32 @@ function nodeListMapper( if (nodeConfig.network === 'ws') { result.push('ws=true') - result.push(`ws-path=${nodeConfig.path}`) + + if (nodeConfig.wsOpts) { + result.push(`ws-path=${nodeConfig.wsOpts.path}`) + } + result.push( 'ws-headers=' + JSON.stringify( getSurfboardExtendHeaders({ - host: nodeConfig.host || nodeConfig.hostname, 'user-agent': OBFS_UA, - ..._.omit(nodeConfig.wsHeaders, ['host']), // host 本质上是一个头信息,所以可能存在冲突的情况。以 host 属性为准。 + ...nodeConfig.wsOpts?.headers, }), ), ) } if (nodeConfig.tls) { - result.push( - 'tls=true', - ...(typeof nodeConfig.skipCertVerify === 'boolean' - ? [`skip-cert-verify=${nodeConfig.skipCertVerify}`] - : []), - ...(nodeConfig.host ? [`sni=${nodeConfig.host}`] : []), - ) + result.push('tls=true') + + if (nodeConfig.skipCertVerify) { + result.push('skip-cert-verify=true') + } + + if (nodeConfig.sni) { + result.push(`sni=${nodeConfig.sni}`) + } } if (nodeConfig?.surfboardConfig?.vmessAEAD) { diff --git a/src/utils/surge.ts b/src/utils/surge.ts index 0967e0181..d525ada88 100644 --- a/src/utils/surge.ts +++ b/src/utils/surge.ts @@ -1,7 +1,6 @@ import { createLogger } from '@surgio/logger' -import _ from 'lodash' -import { OBFS_UA } from '../constant' +import { OBFS_UA, SURGE_SUPPORTED_VMESS_NETWORK } from '../constant' import { NodeFilterType, NodeTypeEnum, @@ -14,10 +13,10 @@ import { applyFilter } from '../filters' const logger = createLogger({ service: 'surgio:utils:surge' }) export const getSurgeExtendHeaders = ( - wsHeaders: Record, + headers: Record, ): string => { - return Object.keys(wsHeaders) - .map((headerKey) => `${headerKey.toLowerCase()}:${wsHeaders[headerKey]}`) + return Object.keys(headers) + .map((headerKey) => `${headerKey.toLowerCase()}:${headers[headerKey]}`) .join('|') } @@ -294,6 +293,13 @@ function nodeListMapper( } case NodeTypeEnum.Vmess: { + if (!SURGE_SUPPORTED_VMESS_NETWORK.includes(nodeConfig.network as any)) { + logger.warn( + `Surge 不支持 Vmess ${nodeConfig.network} 节点,节点 ${nodeConfig.nodeName} 会被省略`, + ) + return undefined + } + const result = [ 'vmess', nodeConfig.hostname, @@ -302,31 +308,32 @@ function nodeListMapper( ] if ( - ['chacha20-ietf-poly1305', 'aes-128-gcm'].includes(nodeConfig.method) + ['chacha20-ietf-poly1305', 'aes-128-gcm', 'chacha20-poly1305'].includes( + nodeConfig.method, + ) ) { result.push(`encrypt-method=${nodeConfig.method}`) } if (nodeConfig.network === 'ws') { result.push('ws=true') - result.push(`ws-path=${nodeConfig.path}`) - result.push( - 'ws-headers=' + - JSON.stringify( - getSurgeExtendHeaders({ - host: nodeConfig.host || nodeConfig.hostname, - 'user-agent': OBFS_UA, - ..._.omit(nodeConfig.wsHeaders, ['host']), // host 本质上是一个头信息,所以可能存在冲突的情况。以 host 属性为准。 - }), - ), - ) + + if (nodeConfig.wsOpts) { + result.push(`ws-path=${nodeConfig.wsOpts.path}`) + result.push( + 'ws-headers=' + + JSON.stringify( + getSurgeExtendHeaders({ + 'user-agent': OBFS_UA, + ...nodeConfig.wsOpts.headers, + }), + ), + ) + } } if (nodeConfig.tls) { - result.push( - 'tls=true', - ...(nodeConfig.host ? [`sni=${nodeConfig.host}`] : []), - ) + result.push('tls=true') } if (nodeConfig?.surgeConfig?.vmessAEAD) { diff --git a/src/validators/common.ts b/src/validators/common.ts index 7a09b41f1..6bbd927fe 100644 --- a/src/validators/common.ts +++ b/src/validators/common.ts @@ -49,7 +49,7 @@ export const PortValidator = z export const AlterIdValiator = getPositiveIntegersNumberValidatior( (n) => n >= 0, 'alterId 必须为大于等于 0 的整数', -) +).default('0') export const IntegersVersionValidator = getPositiveIntegersNumberValidatior( (n) => n > 0, diff --git a/src/validators/vmess.ts b/src/validators/vmess.ts index 374fbce05..292ebadc7 100644 --- a/src/validators/vmess.ts +++ b/src/validators/vmess.ts @@ -7,36 +7,80 @@ import { AlterIdValiator, } from './common' -export const VmessNetworkValidator = z.union([ - z.literal('tcp'), - z.literal('ws'), - // z.literal('h2'), - // z.literal('http'), - // z.literal('grpc'), -]) +export const VmessNetworkValidator = z + .union([ + z.literal('tcp'), + z.literal('ws'), + z.literal('h2'), + z.literal('http'), + z.literal('grpc'), + ]) + .default('tcp') export const VmessMethodValidator = z.union([ z.literal('none'), z.literal('aes-128-gcm'), z.literal('chacha20-ietf-poly1305'), + z.literal('chacha20-poly1305'), z.literal('auto'), ]) -// https://stash.wiki/proxy-protocols/proxy-types#vmess +export const VmessWSOptsValidator = z.object({ + path: z.string(), + headers: z.record(z.string()).optional(), +}) + +export const VmessH2OptsValidator = z.object({ + path: z.string(), + host: z.array(z.string()).nonempty(), +}) + +export const VmessHttpOptsValidator = z.object({ + path: z.array(z.string()), + headers: z.record(z.string()).optional(), + method: z.ostring().default('GET'), +}) + +export const VmessGRPCOptsValidator = z.object({ + serviceName: z.string(), +}) + +/** + * @see https://stash.wiki/proxy-protocols/proxy-types#vmess + * @see https://wiki.metacubex.one/config/proxies/vmess/ + */ export const VmessNodeConfigValidator = SimpleNodeConfigValidator.extend({ type: z.literal(NodeTypeEnum.Vmess), hostname: z.string(), port: PortValidator, method: VmessMethodValidator, uuid: z.string().uuid(), - alterId: AlterIdValiator, + alterId: AlterIdValiator.optional(), network: VmessNetworkValidator, - tls: z.boolean(), - host: z.ostring(), - path: z.ostring(), udpRelay: z.oboolean(), + + wsOpts: VmessWSOptsValidator.optional(), + h2Opts: VmessH2OptsValidator.optional(), + httpOpts: VmessHttpOptsValidator.optional(), + grpcOpts: VmessGRPCOptsValidator.optional(), + + tls: z.oboolean(), + sni: z.ostring(), tls13: z.oboolean(), skipCertVerify: z.oboolean(), - wsHeaders: z.record(z.string()).optional(), serverCertFingerprintSha256: z.ostring(), + alpn: z.array(z.string()).nonempty().optional(), + + /** + * @deprecated + */ + host: z.ostring(), + /** + * @deprecated + */ + path: z.ostring(), + /** + * @deprecated + */ + wsHeaders: z.record(z.string()).optional(), }) diff --git a/test/cli.cli-test.ts.snap b/test/cli.cli-test.ts.snap index 3343bdcd8..763b8476c 100644 --- a/test/cli.cli-test.ts.snap +++ b/test/cli.cli-test.ts.snap @@ -61,11 +61,11 @@ trojan node = trojan, trojan.example.com, 443, password=password 🇺🇸US 2 = ss, us.example.com, 444, encrypt-method=chacha20-ietf-poly1305, password=password 🇺🇸US 3 = ss, us.example.com, 445, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=www.bing.com 🇺🇸US 4 = ss, us.example.com, 80, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=http, obfs-host=www.bing.com -🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=gateway-carry.icloud.com, tls13=false, skip-cert-verify=false -🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, tls13=false, skip-cert-verify=false -测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", vmess-aead=true +🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=gateway-carry.icloud.com, tls13=false, skip-cert-verify=false +🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, tls13=false, skip-cert-verify=false +测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|host:example.com\\", vmess-aead=true 测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, vmess-aead=true -测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, sni=example.com, vmess-aead=true, tls13=false, skip-cert-verify=false +测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|host:example.com\\", tls=true, vmess-aead=true ss1 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true ss2 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=www.bing.com ss4 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=example.com @@ -85,11 +85,11 @@ trojan node = trojan, trojan.example.com, 443, password=password 🇺🇸US 2 = ss, us.example.com, 444, encrypt-method=chacha20-ietf-poly1305, password=password 🇺🇸US 3 = ss, us.example.com, 445, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=www.bing.com 🇺🇸US 4 = ss, us.example.com, 80, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=http, obfs-host=www.bing.com -🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=gateway-carry.icloud.com -🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password -测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", vmess-aead=true +🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=gateway-carry.icloud.com +🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false +测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|Host:example.com\\", vmess-aead=true 测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, vmess-aead=true -测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, skip-cert-verify=false, sni=example.com, vmess-aead=true +测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|Host:example.com\\", tls=true, vmess-aead=true ss1 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true ss2 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=www.bing.com ss4 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=example.com @@ -116,7 +116,7 @@ shadowsocks=us.example.com:443, method=chacha20-ietf-poly1305, password=password shadowsocks=us.example.com:443, method=chacha20-ietf-poly1305, password=password, tag=🇺🇸US 2 vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=ws, obfs-uri=/, obfs-host=example.com, tag=测试 1 vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, tag=测试 2 -vmess=example.com:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=wss, tls-verification=true, obfs-uri=/, obfs-host=example.com, tag=测试 tls +vmess=example.com:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=wss, obfs-uri=/, obfs-host=example.com, tag=测试 tls shadowsocks=server:443, method=chacha20-ietf-poly1305, password=password, udp-relay=true, tag=ss1 shadowsocks=server:443, method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=www.bing.com, tag=ss2 shadowsocks=server:443, method=chacha20-ietf-poly1305, password=password, obfs=ws, obfs-host=server, obfs-uri=/, tag=ss3 @@ -145,7 +145,7 @@ trojan node = trojan,trojan.example.com,443,\\"password\\",tls-name=trojan.examp 🇺🇸US 2 = Shadowsocks,us.example.com,443,chacha20-ietf-poly1305,\\"password\\" 测试 1 = vmess,1.1.1.1,8080,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com 测试 2 = vmess,1.1.1.1,8080,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=tcp -测试 tls = vmess,example.com,443,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com,over-tls=true,tls-name=example.com,skip-cert-verify=false +测试 tls = vmess,example.com,443,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com,over-tls=true ss1 = Shadowsocks,server,443,chacha20-ietf-poly1305,\\"password\\",udp=true ss2 = Shadowsocks,server,443,chacha20-ietf-poly1305,\\"password\\",tls,www.bing.com ss4 = Shadowsocks,server,443,chacha20-ietf-poly1305,\\"password\\",tls,example.com @@ -175,18 +175,18 @@ DOMAIN,example.com,Proxy exports[`generate command default runs generate cmd 2`] = ` "getSurgeNodes -🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=gateway-carry.icloud.com, tls13=false, skip-cert-verify=false -🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, tls13=false, skip-cert-verify=false -测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", vmess-aead=true +🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=gateway-carry.icloud.com, tls13=false, skip-cert-verify=false +🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, tls13=false, skip-cert-verify=false +测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|host:example.com\\", vmess-aead=true 测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, vmess-aead=true -测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, sni=example.com, vmess-aead=true, tls13=false, skip-cert-verify=false +测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|host:example.com\\", tls=true, vmess-aead=true ---- getSurfboardNodes -🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=gateway-carry.icloud.com -🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password -测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", vmess-aead=true +🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=gateway-carry.icloud.com +🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false +测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|Host:example.com\\", vmess-aead=true 测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, vmess-aead=true -测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, skip-cert-verify=false, sni=example.com, vmess-aead=true +测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|Host:example.com\\", tls=true, vmess-aead=true ---- getNodeNames 🇺🇸US 1, 🇺🇸US 2, 测试 1, 测试 2, 测试 tls @@ -196,7 +196,7 @@ shadowsocks=us.example.com:443, method=chacha20-ietf-poly1305, password=password shadowsocks=us.example.com:443, method=chacha20-ietf-poly1305, password=password, tag=🇺🇸US 2 vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=ws, obfs-uri=/, obfs-host=example.com, tag=测试 1 vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, tag=测试 2 -vmess=example.com:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=wss, tls-verification=true, obfs-uri=/, obfs-host=example.com, tag=测试 tls +vmess=example.com:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=wss, obfs-uri=/, obfs-host=example.com, tag=测试 tls ---- getSurgeNodes @@ -206,7 +206,7 @@ getLoonNodes 🇺🇸US 2 = Shadowsocks,us.example.com,443,chacha20-ietf-poly1305,\\"password\\" 测试 1 = vmess,1.1.1.1,8080,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com 测试 2 = vmess,1.1.1.1,8080,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=tcp -测试 tls = vmess,example.com,443,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com,over-tls=true,tls-name=example.com,skip-cert-verify=false +测试 tls = vmess,example.com,443,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com,over-tls=true ---- proxyTestUrl http://www.google.com/generate_204 @@ -230,18 +230,18 @@ DOMAIN,example.com,Proxy exports[`generate command v2ray tls options runs generate cmd 1`] = ` "getSurgeNodes -🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=gateway-carry.icloud.com, tls13=false, skip-cert-verify=false -🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, tls13=false, skip-cert-verify=false -测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", vmess-aead=true +🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=gateway-carry.icloud.com, tls13=false, skip-cert-verify=false +🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, tls13=false, skip-cert-verify=false +测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|host:example.com\\", vmess-aead=true 测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, vmess-aead=true -测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, sni=example.com, vmess-aead=true, tls13=false, skip-cert-verify=false +测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|host:example.com\\", tls=true, vmess-aead=true ---- getSurfboardNodes -🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=gateway-carry.icloud.com -🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password -测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", vmess-aead=true +🇺🇸US 1 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false, obfs=tls, obfs-host=gateway-carry.icloud.com +🇺🇸US 2 = ss, us.example.com, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=false +测试 1 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|Host:example.com\\", vmess-aead=true 测试 2 = vmess, 1.1.1.1, 8080, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, vmess-aead=true -测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"host:example.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, skip-cert-verify=false, sni=example.com, vmess-aead=true +测试 tls = vmess, example.com, 443, username=1386f85e-657b-4d6e-9d56-78badb75e1fd, ws=true, ws-path=/, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|Host:example.com\\", tls=true, vmess-aead=true ---- getNodeNames 🇺🇸US 1, 🇺🇸US 2, 测试 1, 测试 2, 测试 tls @@ -251,7 +251,7 @@ shadowsocks=us.example.com:443, method=chacha20-ietf-poly1305, password=password shadowsocks=us.example.com:443, method=chacha20-ietf-poly1305, password=password, tag=🇺🇸US 2 vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=ws, obfs-uri=/, obfs-host=example.com, tag=测试 1 vmess=1.1.1.1:8080, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, tag=测试 2 -vmess=example.com:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=wss, tls-verification=true, obfs-uri=/, obfs-host=example.com, tag=测试 tls +vmess=example.com:443, method=chacha20-ietf-poly1305, password=1386f85e-657b-4d6e-9d56-78badb75e1fd, aead=true, obfs=wss, obfs-uri=/, obfs-host=example.com, tag=测试 tls ---- getSurgeNodes @@ -261,7 +261,7 @@ getLoonNodes 🇺🇸US 2 = Shadowsocks,us.example.com,443,chacha20-ietf-poly1305,\\"password\\" 测试 1 = vmess,1.1.1.1,8080,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com 测试 2 = vmess,1.1.1.1,8080,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=tcp -测试 tls = vmess,example.com,443,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com,over-tls=true,tls-name=example.com,skip-cert-verify=false +测试 tls = vmess,example.com,443,method=chacha20-ietf-poly1305,\\"1386f85e-657b-4d6e-9d56-78badb75e1fd\\",transport=ws,path=/,host=example.com,over-tls=true ---- proxyTestUrl http://www.google.com/generate_204 @@ -288,8 +288,8 @@ exports[`generate command v2ray tls options runs generate cmd 2`] = ` ss1 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true ss2 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=www.bing.com vmess = vmess, server, 443, username=uuid, vmess-aead=true -vmess new format = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"host:v2ray.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, sni=v2ray.com, vmess-aead=true, tls13=true, skip-cert-verify=true -vmess custom header = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"host:server|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|edge:www.baidu.com\\", tls=true, sni=server, vmess-aead=true, tls13=true, skip-cert-verify=false +vmess new format = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|host:v2ray.com\\", tls=true, vmess-aead=true, tls13=true, skip-cert-verify=true +vmess custom header = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|edge:www.baidu.com\\", tls=true, vmess-aead=true, tls13=true, skip-cert-verify=false http 1 = https, server, 443, username, password, tls13=true, skip-cert-verify=false http 2 = http, server, 443, username, password snell = snell, server, 44046, psk=yourpsk, obfs=http @@ -299,8 +299,8 @@ getSurfboardNodes ss1 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true ss2 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=www.bing.com vmess = vmess, server, 443, username=uuid, vmess-aead=true -vmess new format = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"host:v2ray.com|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1\\", tls=true, skip-cert-verify=true, sni=v2ray.com, vmess-aead=true -vmess custom header = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"host:server|user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|edge:www.baidu.com\\", tls=true, skip-cert-verify=false, sni=server, vmess-aead=true +vmess new format = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|Host:v2ray.com\\", tls=true, skip-cert-verify=true, vmess-aead=true +vmess custom header = vmess, server, 443, username=uuid, ws=true, ws-path=/path, ws-headers=\\"user-agent:Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/13.1.1 Mobile/15E148 Safari/604.1|edge:www.baidu.com\\", tls=true, vmess-aead=true http 1 = https, server, 443, username, password, skip-cert-verify=false http 2 = http, server, 443, username, password ss4 = ss, server, 443, encrypt-method=chacha20-ietf-poly1305, password=password, udp-relay=true, obfs=tls, obfs-host=example.com @@ -314,7 +314,7 @@ shadowsocks=server:443, method=chacha20-ietf-poly1305, password=password, obfs=t shadowsocks=server:443, method=chacha20-ietf-poly1305, password=password, obfs=ws, obfs-host=server, obfs-uri=/, udp-relay=true, tag=ss3 vmess=server:443, method=chacha20-ietf-poly1305, password=uuid, udp-relay=true, aead=true, tag=vmess vmess=server:443, method=chacha20-ietf-poly1305, password=uuid, udp-relay=true, aead=true, obfs=wss, tls-verification=false, tls13=true, obfs-uri=/path, obfs-host=v2ray.com, tag=vmess new format -vmess=server:443, method=chacha20-ietf-poly1305, password=uuid, udp-relay=true, aead=true, obfs=wss, tls-verification=true, tls13=true, obfs-uri=/path, obfs-host=server, tag=vmess custom header +vmess=server:443, method=chacha20-ietf-poly1305, password=uuid, udp-relay=true, aead=true, obfs=wss, tls13=true, obfs-uri=/path, tag=vmess custom header http=server:443, username=username, password=password, over-tls=true, tls-verification=true, tls13=true, tag=http 1 http=server:443, username=username, password=password, tag=http 2 shadowsocks=server:443, method=chacha20-ietf-poly1305, password=password, obfs=tls, obfs-host=example.com, udp-relay=true, tag=ss4 @@ -327,8 +327,8 @@ getLoonNodes ss1 = Shadowsocks,server,443,chacha20-ietf-poly1305,\\"password\\",udp=true ss2 = Shadowsocks,server,443,chacha20-ietf-poly1305,\\"password\\",tls,www.bing.com,udp=true vmess = vmess,server,443,method=chacha20-ietf-poly1305,\\"uuid\\",transport=tcp -vmess new format = vmess,server,443,method=chacha20-ietf-poly1305,\\"uuid\\",transport=ws,path=/path,host=v2ray.com,over-tls=true,tls-name=v2ray.com,skip-cert-verify=true -vmess custom header = vmess,server,443,method=chacha20-ietf-poly1305,\\"uuid\\",transport=ws,path=/path,host=server,over-tls=true,tls-name=server,skip-cert-verify=false +vmess new format = vmess,server,443,method=chacha20-ietf-poly1305,\\"uuid\\",transport=ws,path=/path,host=v2ray.com,over-tls=true,skip-cert-verify=true +vmess custom header = vmess,server,443,method=chacha20-ietf-poly1305,\\"uuid\\",transport=ws,path=/path,over-tls=true http 1 = https,server,443,username,\\"password\\",tls-name=server,skip-cert-verify=false http 2 = http,server,443,username,\\"password\\" ss4 = Shadowsocks,server,443,chacha20-ietf-poly1305,\\"password\\",tls,example.com,udp=true