From 3692cc41c886944080759cba7788bdf0ddf41bc3 Mon Sep 17 00:00:00 2001 From: amsyarasyiq <82711525+amsyarasyiq@users.noreply.github.com> Date: Wed, 6 Mar 2024 01:57:59 +0800 Subject: [PATCH] ESLint hops in --- .eslintrc.json | 77 + .prettierrc | 8 - .vscode/settings.json | 16 + FUNDING.yml | 1 - build.mjs | 21 +- package.json | 14 +- pnpm-lock.yaml | 2355 +++++++++++++++++++ src/core/commands/debug.ts | 6 +- src/core/commands/eval.ts | 8 +- src/core/commands/plugins.ts | 8 +- src/core/fixes.ts | 8 +- src/core/i18n/index.ts | 10 +- src/core/plugins/index.ts | 2 +- src/core/plugins/quickInstall/forumPost.tsx | 26 +- src/core/plugins/quickInstall/index.ts | 2 +- src/core/plugins/quickInstall/url.tsx | 18 +- src/core/polyfills.ts | 2 +- src/core/ui/components/AddonPage.tsx | 48 +- src/core/ui/components/AssetDisplay.tsx | 12 +- src/core/ui/components/Card.tsx | 80 +- src/core/ui/components/InstallButton.tsx | 8 +- src/core/ui/components/PluginCard.tsx | 24 +- src/core/ui/components/SettingsSection.tsx | 18 +- src/core/ui/components/ThemeCard.tsx | 28 +- src/core/ui/components/Version.tsx | 12 +- src/core/ui/settings/data.tsx | 50 +- src/core/ui/settings/index.ts | 6 +- src/core/ui/settings/pages/AssetBrowser.tsx | 10 +- src/core/ui/settings/pages/Developer.tsx | 24 +- src/core/ui/settings/pages/General.tsx | 22 +- src/core/ui/settings/pages/Plugins.tsx | 14 +- src/core/ui/settings/pages/Themes.tsx | 18 +- src/core/ui/settings/patches/panels.tsx | 12 +- src/core/ui/settings/patches/you.tsx | 14 +- src/core/vendettaObject.ts | 26 +- src/entry.ts | 18 +- src/index.ts | 16 +- src/lib/api/assets.ts | 6 +- src/lib/api/commands/index.ts | 11 +- src/lib/api/commands/types.ts | 2 +- src/lib/api/index.ts | 4 +- src/lib/api/native/fs.ts | 2 +- src/lib/api/native/index.ts | 2 +- src/lib/api/native/loader.ts | 16 +- src/lib/api/native/modules.ts | 4 +- src/lib/api/patcher.ts | 2 +- src/lib/api/storage/backends.ts | 16 +- src/lib/api/storage/index.ts | 12 +- src/lib/debug.ts | 22 +- src/lib/managers/plugins.ts | 18 +- src/lib/managers/themes.ts | 48 +- src/lib/metro/common.ts | 6 +- src/lib/metro/filters.ts | 12 +- src/lib/metro/index.ts | 2 +- src/lib/settings.ts | 3 +- src/lib/ui/alerts.ts | 6 +- src/lib/ui/color.ts | 12 +- src/lib/ui/components/Codeblock.tsx | 10 +- src/lib/ui/components/ContextMenu.tsx | 14 +- src/lib/ui/components/ErrorBoundary.tsx | 8 +- src/lib/ui/components/InputAlert.tsx | 12 +- src/lib/ui/components/Search.tsx | 14 +- src/lib/ui/components/Summary.tsx | 8 +- src/lib/ui/components/index.ts | 7 +- src/lib/ui/index.ts | 3 +- src/lib/ui/safeMode.tsx | 20 +- src/lib/ui/toasts.ts | 8 +- src/lib/utils/constants.ts | 6 +- src/lib/utils/emitter.ts | 2 +- src/lib/utils/findInReactTree.ts | 6 +- src/lib/utils/index.ts | 9 +- src/lib/utils/logger.ts | 2 +- src/lib/utils/safeFetch.ts | 1 - src/lib/utils/types.ts | 2 +- src/lib/utils/unfreeze.ts | 2 +- src/lib/utils/without.ts | 4 +- src/lib/windowObject.ts | 8 +- src/modules.d.ts | 2 +- tsconfig.json | 2 +- 79 files changed, 2926 insertions(+), 472 deletions(-) create mode 100644 .eslintrc.json delete mode 100644 .prettierrc create mode 100644 .vscode/settings.json delete mode 100644 FUNDING.yml diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..6509407 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,77 @@ +{ + "root": true, + "parser": "@typescript-eslint/parser", + "ignorePatterns": [ "dist", "browser" ], + "plugins": [ + "@typescript-eslint", + "simple-import-sort", + "path-alias", + "unused-imports" + ], + "settings": { + "import/resolver": { + "alias": { + "map": [ + [ "@lib/*", "./src/lib/*" ], + [ "@core/*", "./src/core/*" ], + [ "@metro/*", "src/lib/metro/*"], + [ "@ui/*", "src/lib/ui/*"], + [ "@types", "src/lib/utils/types.ts"] + ], + "extensions": [".ts", ".js", ".jsx", ".tsx", ".json"] + } + } + }, + "rules": { + "quotes": [ "error", "double", { "avoidEscape": true } ], + "jsx-quotes": [ "error", "prefer-double" ], + "no-mixed-spaces-and-tabs": "error", + "indent": [ "error", 4, { "SwitchCase": 1 } ], + "arrow-parens": [ "error", "as-needed" ], + "eol-last": [ "error", "always" ], + "func-call-spacing": [ "error", "never" ], + "no-multi-spaces": "error", + "no-trailing-spaces": "error", + "no-whitespace-before-property": "error", + "semi": [ "error", "always" ], + "semi-style": [ "error", "last" ], + "space-in-parens": [ "error", "never" ], + "block-spacing": [ "error", "always" ], + "object-curly-spacing": [ "error", "always" ], + "eqeqeq": [ "error", "always", { "null": "ignore" } ], + "spaced-comment": [ "error", "always", { "markers": [ "!" ] } ], + "yoda": "error", + "prefer-destructuring": [ "error", { "object": true, "array": false } ], + "operator-assignment": [ "error", "always" ], + "no-useless-computed-key": "error", + "no-unneeded-ternary": [ "error", { "defaultAssignment": false } ], + "no-invalid-regexp": "error", + "no-constant-condition": [ "error", { "checkLoops": false } ], + "no-duplicate-imports": "error", + "no-extra-semi": "error", + "dot-notation": "error", + "no-useless-escape": [ "error" ], + "no-fallthrough": "error", + "for-direction": "error", + "no-async-promise-executor": "error", + "no-cond-assign": "error", + "no-dupe-else-if": "error", + "no-duplicate-case": "error", + "no-irregular-whitespace": "error", + "no-loss-of-precision": "error", + "no-misleading-character-class": "error", + "no-prototype-builtins": "error", + "no-regex-spaces": "error", + "no-shadow-restricted-names": "error", + "no-unexpected-multiline": "error", + "no-unsafe-optional-chaining": "error", + "no-useless-backreference": "error", + "use-isnan": "error", + "prefer-const": "error", + "prefer-spread": "error", + "simple-import-sort/imports": "error", + "simple-import-sort/exports": "error", + "path-alias/no-relative": "error", + "unused-imports/no-unused-imports": "error" + } +} \ No newline at end of file diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 5011b09..0000000 --- a/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "printWidth": 240, - "tabWidth": 4, - "singleQuote": false, - "jsxSingleQuote": false, - "bracketSpacing": true, - "useTabs": false -} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..dfd80c5 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,16 @@ +{ + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit" + }, + "[typescript]": { + "editor.defaultFormatter": "vscode.typescript-language-features" + }, + "[typescriptreact]": { + "editor.defaultFormatter": "vscode.typescript-language-features" + }, + "javascript.format.semicolons": "insert", + "typescript.format.semicolons": "insert", + "typescript.preferences.quoteStyle": "double", + "javascript.preferences.quoteStyle": "double" +} \ No newline at end of file diff --git a/FUNDING.yml b/FUNDING.yml deleted file mode 100644 index 3bc679f..0000000 --- a/FUNDING.yml +++ /dev/null @@ -1 +0,0 @@ -github: [maisymoe, wingio] diff --git a/build.mjs b/build.mjs index 9909af8..cffab38 100644 --- a/build.mjs +++ b/build.mjs @@ -2,8 +2,8 @@ import swc from "@swc/core"; import { execSync } from "child_process"; import esbuild from "esbuild"; -import { copyFile, copyFileSync } from "fs"; -import { readFile, writeFile } from "fs/promises"; +import { copyFileSync } from "fs"; +import { readFile } from "fs/promises"; import { createServer } from "http"; import path from "path"; import { argv } from "process"; @@ -36,8 +36,11 @@ try { loader: { ".png": "dataurl" }, legalComments: "none", alias: { - "@*": "src*", - "@types": "src/utils/types.ts" + "@lib/*": "src/lib/*", + "@core/*": "src/core/*", + "@metro/*": "src/lib/metro/*", + "@ui/*": "src/lib/ui/*", + "@types": "src/utils/types.ts", }, plugins: [ { @@ -45,12 +48,12 @@ try { setup: async build => { build.onStart(() => { console.clear(); - console.log(`Building with commit hash "${commitHash}", isRelease="${isRelease}"`) + console.log(`Building with commit hash "${commitHash}", isRelease="${isRelease}"`); }); build.onEnd(result => { const { outfile } = build.initialOptions; - copyFileSync(outfile, path.resolve(outfile, "..", "pyondetta.js")) + copyFileSync(outfile, path.resolve(outfile, "..", "pyondetta.js")); console.log(`Built with ${result.errors?.length} errors!`); }); } @@ -59,12 +62,12 @@ try { name: "swc", setup(build) { let timeString = Number(new Date).toString(36); - + build.onStart(() => { timeString = Number(new Date).toString(36); console.log(`swc plugin: time-string="${timeString}"`); - }) - + }); + build.onLoad({ filter: /\.[jt]sx?$/ }, async args => { const result = await swc.transformFile(args.path, { jsc: { diff --git a/package.json b/package.json index dea7ac2..c622216 100644 --- a/package.json +++ b/package.json @@ -6,7 +6,8 @@ "dev": "node build.mjs", "build": "node build.mjs --release", "serve": "node build.mjs --serve", - "watch": "node build.mjs --watch" + "watch": "node build.mjs --watch", + "lint": "eslint ./src --ext .js,.jsx,.ts,.tsx" }, "keywords": [ "discord", @@ -26,13 +27,22 @@ "@types/node": "^20.11.21", "@types/react": "18.2.60", "@types/react-native": "0.72.3", + "@typescript-eslint/eslint-plugin": "^7.1.1", + "@typescript-eslint/parser": "^7.1.1", + "@typescript-eslint/typescript-estree": "^7.1.1", "esbuild": "^0.17.19", + "eslint": "^8.57.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-plugin-path-alias": "^1.0.0", + "eslint-plugin-react": "^7.34.0", + "eslint-plugin-unused-imports": "^3.1.0", "moment": "2.22.2", "typescript": "^5.3.3", "typescript-transform-paths": "^3.4.7" }, "dependencies": { "@swc/helpers": "0.5.0", + "eslint-plugin-simple-import-sort": "^12.0.0", "fuzzysort": "^2.0.4", "intl-messageformat": "^10.5.11", "spitroast": "^1.4.3" @@ -45,4 +55,4 @@ ] } } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 692a1cd..f970880 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,6 +8,9 @@ dependencies: '@swc/helpers': specifier: 0.5.0 version: 0.5.0 + eslint-plugin-simple-import-sort: + specifier: ^12.0.0 + version: 12.0.0(eslint@8.57.0) fuzzysort: specifier: ^2.0.4 version: 2.0.4 @@ -40,9 +43,33 @@ devDependencies: '@types/react-native': specifier: 0.72.3 version: 0.72.3 + '@typescript-eslint/eslint-plugin': + specifier: ^7.1.1 + version: 7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': + specifier: ^7.1.1 + version: 7.1.1(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': + specifier: ^7.1.1 + version: 7.1.1(typescript@5.3.3) esbuild: specifier: ^0.17.19 version: 0.17.19 + eslint: + specifier: ^8.57.0 + version: 8.57.0 + eslint-import-resolver-alias: + specifier: ^1.1.2 + version: 1.1.2(eslint-plugin-import@2.29.1) + eslint-plugin-path-alias: + specifier: ^1.0.0 + version: 1.0.0(eslint@8.57.0) + eslint-plugin-react: + specifier: ^7.34.0 + version: 7.34.0(eslint@8.57.0) + eslint-plugin-unused-imports: + specifier: ^3.1.0 + version: 3.1.0(@typescript-eslint/eslint-plugin@7.1.1)(eslint@8.57.0) moment: specifier: 2.22.2 version: 2.22.2 @@ -55,6 +82,10 @@ devDependencies: packages: + /@aashutoshrathi/word-wrap@1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + /@esbuild/android-arm64@0.17.19: resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==} engines: {node: '>=12'} @@ -253,6 +284,39 @@ packages: dev: true optional: true + /@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.57.0 + eslint-visitor-keys: 3.4.3 + + /@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.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 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + /@formatjs/ecma402-abstract@1.18.2: resolution: {integrity: sha512-+QoPW4csYALsQIl8GbN14igZzDbuwzcpWrku9nyMXlaqAlwRBgl5V+p0vWMGFqHOw37czNXaP/lEk4wbLgcmtA==} dependencies: @@ -287,6 +351,41 @@ packages: tslib: 2.6.2 dev: false + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.2 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + /@humanwhocodes/module-importer@1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + /@humanwhocodes/object-schema@2.0.2: + resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} + + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.17.1 + /@react-native-clipboard/clipboard@1.10.0: resolution: {integrity: sha512-1L+I0vmeUJgMi8MnNsqI00391/RFLkmmxj9qAuOS2madpvce/oNqJb8Pwk2Fc/uxIJSxOckTpq+dQwyPU6s+7w==} peerDependencies: @@ -444,6 +543,14 @@ packages: resolution: {integrity: sha512-/DTccpHTaKomqussrn+ciEvfW4k6NAHzNzs/sts1TCqg333qNxOhy8TNIoQCmbGG3Tl8KdEhkGAssb1n3mTXiQ==} dev: true + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + dev: true + + /@types/json5@0.0.29: + resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} + dev: true + /@types/lodash@4.14.202: resolution: {integrity: sha512-OvlIYQK9tNneDlS0VN54LLd5uiPCBOp7gS5Z0f1mjoJYBrtStzgmJBxONW3U6OZqdtNzZPmn9BS/7WI7BFFcFQ==} dev: true @@ -479,8 +586,341 @@ packages: resolution: {integrity: sha512-WZLiwShhwLRmeV6zH+GkbOFT6Z6VklCItrDioxUnv+u4Ll+8vKeFySoFyK/0ctcRpOmwAicELfmys1sDc/Rw+A==} dev: true + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} + dev: true + + /@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': ^7.0.0 + eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@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 + eslint: 8.57.0 + graphemer: 1.4.0 + 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@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: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@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 + eslint: 8.57.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + dev: true + + /@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': 7.1.1 + '@typescript-eslint/visitor-keys': 7.1.1 + dev: true + + /@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: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@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 + 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@7.1.1: + resolution: {integrity: sha512-KhewzrlRMrgeKm1U9bh2z5aoL4s7K3tK5DwHDn8MHv0yQfWFz/0ZR6trrIHHa5CsF83j/GgHqzdbzCXJ3crx0Q==} + engines: {node: ^16.0.0 || >=18.0.0} + dev: true + + /@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': 7.1.1 + '@typescript-eslint/visitor-keys': 7.1.1 + debug: 4.3.4 + globby: 11.1.0 + is-glob: 4.0.3 + 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@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: ^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@7.1.1: + resolution: {integrity: sha512-yTdHDQxY7cSoCcAtiBzVzxleJhkGB9NncSIyMYe2+OGON1ZsP9zOPws/Pqgopa65jvknOjlk/w7ulPlZ78PiLQ==} + engines: {node: ^16.0.0 || >=18.0.0} + dependencies: + '@typescript-eslint/types': 7.1.1 + eslint-visitor-keys: 3.4.3 + dev: true + + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + + /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.11.3 + + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + engines: {node: '>=0.4.0'} + hasBin: true + + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + dependencies: + color-convert: 2.0.1 + + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + /arr-diff@4.0.0: + resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} + engines: {node: '>=0.10.0'} + dev: true + + /arr-union@3.1.0: + resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==} + engines: {node: '>=0.10.0'} + dev: true + + /array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + is-array-buffer: 3.0.4 + dev: true + + /array-includes@3.1.7: + resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + get-intrinsic: 1.2.4 + is-string: 1.0.7 + dev: true + + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: true + + /array-unique@0.3.2: + resolution: {integrity: sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==} + engines: {node: '>=0.10.0'} + dev: true + + /array.prototype.filter@1.0.3: + resolution: {integrity: sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-array-method-boxes-properly: 1.0.0 + is-string: 1.0.7 + dev: true + + /array.prototype.findlast@1.2.4: + resolution: {integrity: sha512-BMtLxpV+8BD+6ZPFIWmnUBpQoy+A+ujcg4rhp2iwCRJYA7PEh2MS4NL3lz8EiDlLrJPp2hg9qWihr5pd//jcGw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.findlastindex@1.2.4: + resolution: {integrity: sha512-hzvSHUshSpCflDR1QMUBLHGHP1VIEBegT4pix9H/Z92Xw3ySoy6c2qh7lJWTJnRJ8JCZ9bJNCgTyYaJGcJu6xQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flat@1.3.2: + resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.flatmap@1.3.2: + resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.toreversed@1.1.2: + resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-shim-unscopables: 1.0.2 + dev: true + + /array.prototype.tosorted@1.1.3: + resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + es-shim-unscopables: 1.0.2 + dev: true + + /arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.7 + define-properties: 1.2.1 + 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 + + /assign-symbols@1.0.0: + resolution: {integrity: sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==} + engines: {node: '>=0.10.0'} + dev: true + + /asynciterator.prototype@1.0.0: + resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==} + dependencies: + has-symbols: 1.0.3 + dev: true + + /atob@2.1.2: + resolution: {integrity: sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==} + engines: {node: '>= 4.5.0'} + hasBin: true + dev: true + + /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: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + /base@0.11.2: + resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} + engines: {node: '>=0.10.0'} + dependencies: + cache-base: 1.0.1 + class-utils: 0.3.6 + component-emitter: 1.3.1 + define-property: 1.0.0 + isobject: 3.0.1 + mixin-deep: 1.3.2 + pascalcase: 0.1.1 dev: true /brace-expansion@1.1.11: @@ -488,16 +928,317 @@ packages: dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + + /braces@3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + engines: {node: '>=8'} + dependencies: + fill-range: 7.0.1 + dev: true + + /cache-base@1.0.1: + resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==} + engines: {node: '>=0.10.0'} + dependencies: + collection-visit: 1.0.0 + component-emitter: 1.3.1 + get-value: 2.0.6 + has-value: 1.0.0 + isobject: 3.0.1 + set-value: 2.0.1 + to-object-path: 0.3.0 + union-value: 1.0.1 + unset-value: 1.0.0 + dev: true + + /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.4 + set-function-length: 1.2.1 + dev: true + + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + /class-utils@0.3.6: + resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + define-property: 0.2.5 + isobject: 3.0.1 + static-extend: 0.1.2 + dev: true + + /collection-visit@1.0.0: + resolution: {integrity: sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==} + engines: {node: '>=0.10.0'} + dependencies: + map-visit: 1.0.0 + object-visit: 1.0.1 + dev: true + + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + dependencies: + color-name: 1.1.4 + + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + /component-emitter@1.3.1: + resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} dev: true /concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + /copy-descriptor@0.1.1: + resolution: {integrity: sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==} + engines: {node: '>=0.10.0'} dev: true + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.0.0 + dev: true + + /debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + dev: true + + /debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.2 + + /decode-uri-component@0.2.2: + resolution: {integrity: sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==} + engines: {node: '>=0.10'} + dev: true + + /deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + dependencies: + es-define-property: 1.0.0 + es-errors: 1.3.0 + gopd: 1.0.1 + dev: true + + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + dev: true + + /define-property@0.2.5: + resolution: {integrity: sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 0.1.7 + dev: true + + /define-property@1.0.0: + resolution: {integrity: sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.3 + dev: true + + /define-property@2.0.2: + resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-descriptor: 1.0.3 + isobject: 3.0.1 + dev: true + + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + dependencies: + path-type: 4.0.0 + dev: true + + /doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + dependencies: + esutils: 2.0.3 + dev: true + + /doctrine@3.0.0: + resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} + engines: {node: '>=6.0.0'} + dependencies: + esutils: 2.0.3 + + /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.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.4 + get-symbol-description: 1.0.2 + globalthis: 1.0.3 + gopd: 1.0.1 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + 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.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.1 + object-keys: 1.1.1 + 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.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.14 + dev: true + + /es-array-method-boxes-properly@1.0.0: + resolution: {integrity: sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==} + dev: true + + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: true + + /es-iterator-helpers@1.0.17: + resolution: {integrity: sha512-lh7BsUqelv4KUbR5a/ZTaGGIMLCjPGPqJ6q+Oq24YP0RdyptX1uzm4vvaqzk7Zx3bpl/76YLTTDj9L7uYQ92oQ==} + engines: {node: '>= 0.4'} + dependencies: + asynciterator.prototype: 1.0.0 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + es-set-tostringtag: 2.0.3 + function-bind: 1.1.2 + get-intrinsic: 1.2.4 + globalthis: 1.0.3 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + iterator.prototype: 1.1.2 + safe-array-concat: 1.1.0 + dev: true + + /es-set-tostringtag@2.0.3: + resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + has-tostringtag: 1.0.2 + hasown: 2.0.1 + dev: true + + /es-shim-unscopables@1.0.2: + resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} + dependencies: + hasown: 2.0.1 + dev: true + + /es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + dev: true + /esbuild@0.17.19: resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==} engines: {node: '>=12'} @@ -528,10 +1269,542 @@ packages: '@esbuild/win32-x64': 0.17.19 dev: true + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + /eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.29.1): + resolution: {integrity: sha512-WdviM1Eu834zsfjHtcGHtGfcu+F30Od3V7I9Fi57uhBEwPkjDcii7/yW8jAT+gOhn4P/vOxxNAXbFAKsrrc15w==} + engines: {node: '>= 4'} + peerDependencies: + eslint-plugin-import: '>=1.4.0' + dependencies: + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0) + dev: true + + /eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + dependencies: + debug: 3.2.7 + is-core-module: 2.13.1 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-module-utils@2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + dependencies: + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + debug: 3.2.7 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0): + resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + dependencies: + '@typescript-eslint/parser': 7.1.1(eslint@8.57.0)(typescript@5.3.3) + array-includes: 3.1.7 + array.prototype.findlastindex: 1.2.4 + array.prototype.flat: 1.3.2 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 8.57.0 + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) + hasown: 2.0.1 + is-core-module: 2.13.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.7 + object.groupby: 1.0.2 + object.values: 1.1.7 + semver: 6.3.1 + tsconfig-paths: 3.15.0 + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + dev: true + + /eslint-plugin-path-alias@1.0.0(eslint@8.57.0): + resolution: {integrity: sha512-FXus57yC+Zd3sMv46pbloXYwFeNVNHJqlACr9V68FG/IzGFBBokGJpmjDbEjpt8ZCeVSndUubeDWWl2A8sCNVQ==} + peerDependencies: + eslint: ^7 + dependencies: + eslint: 8.57.0 + nanomatch: 1.2.13 + transitivePeerDependencies: + - supports-color + dev: true + + /eslint-plugin-react@7.34.0(eslint@8.57.0): + resolution: {integrity: sha512-MeVXdReleBTdkz/bvcQMSnCXGi+c9kvy51IpinjnJgutl3YTHWsDdke7Z1ufZpGfDG8xduBDKyjtB9JH1eBKIQ==} + engines: {node: '>=4'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + dependencies: + array-includes: 3.1.7 + array.prototype.findlast: 1.2.4 + array.prototype.flatmap: 1.3.2 + array.prototype.toreversed: 1.1.2 + array.prototype.tosorted: 1.1.3 + doctrine: 2.1.0 + es-iterator-helpers: 1.0.17 + eslint: 8.57.0 + estraverse: 5.3.0 + jsx-ast-utils: 3.3.5 + minimatch: 3.1.2 + object.entries: 1.1.7 + object.fromentries: 2.0.7 + object.hasown: 1.1.3 + object.values: 1.1.7 + prop-types: 15.8.1 + resolve: 2.0.0-next.5 + semver: 6.3.1 + string.prototype.matchall: 4.0.10 + dev: true + + /eslint-plugin-simple-import-sort@12.0.0(eslint@8.57.0): + resolution: {integrity: sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==} + peerDependencies: + eslint: '>=5.0.0' + dependencies: + eslint: 8.57.0 + dev: false + + /eslint-plugin-unused-imports@3.1.0(@typescript-eslint/eslint-plugin@7.1.1)(eslint@8.57.0): + resolution: {integrity: sha512-9l1YFCzXKkw1qtAru1RWUtG2EVDZY0a0eChKXcL+EZ5jitG7qxdctu4RnvhOJHv4xfmUf7h+JJPINlVpGhZMrw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/eslint-plugin': 6 - 7 + eslint: '8' + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + dependencies: + '@typescript-eslint/eslint-plugin': 7.1.1(@typescript-eslint/parser@7.1.1)(eslint@8.57.0)(typescript@5.3.3) + eslint: 8.57.0 + eslint-rule-composer: 0.3.0 + dev: true + + /eslint-rule-composer@0.3.0: + resolution: {integrity: sha512-bt+Sh8CtDmn2OajxvNO+BX7Wn4CIWMpTRm3MaiKPCQcnnlm0CS2mhui6QaoeQugs+3Kj2ESKEEGJUdVafwhiCg==} + engines: {node: '>=4.0.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} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + /eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + /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.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 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.1 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + /espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) + eslint-visitor-keys: 3.4.3 + + /esquery@1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + dependencies: + estraverse: 5.3.0 + + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} + dependencies: + is-extendable: 0.1.1 + dev: true + + /extend-shallow@3.0.2: + resolution: {integrity: sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==} + engines: {node: '>=0.10.0'} + dependencies: + assign-symbols: 1.0.0 + is-extendable: 1.0.1 + dev: true + + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: true + + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + /fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} + dependencies: + reusify: 1.0.4 + + /file-entry-cache@6.0.1: + resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flat-cache: 3.2.0 + + /fill-range@7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + engines: {node: '>=8'} + dependencies: + to-regex-range: 5.0.1 + dev: true + + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + rimraf: 3.0.2 + + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} + + /for-each@0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + + /for-in@1.0.2: + resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==} + engines: {node: '>=0.10.0'} + dev: true + + /fragment-cache@0.2.1: + resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==} + engines: {node: '>=0.10.0'} + dependencies: + map-cache: 0.2.2 + dev: true + + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: true + + /function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + dev: true + /fuzzysort@2.0.4: resolution: {integrity: sha512-Api1mJL+Ad7W7vnDZnWq5pGaXJjyencT+iKGia2PlHUcSsSzWwIQ3S1isiMpwpavjYtGd2FzhUIhnnhOULZgDw==} dev: false + /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-proto: 1.0.3 + has-symbols: 1.0.3 + hasown: 2.0.1 + 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.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + dev: true + + /get-value@2.0.6: + resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} + engines: {node: '>=0.10.0'} + dev: true + + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + dependencies: + is-glob: 4.0.3 + dev: true + + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + dependencies: + is-glob: 4.0.3 + + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + + /globalthis@1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.2.1 + dev: true + + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.3.1 + merge2: 1.4.1 + slash: 3.0.0 + dev: true + + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: true + + /graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + /has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + dev: true + + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + dependencies: + es-define-property: 1.0.0 + dev: true + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: true + + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: true + + /has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /has-value@0.3.1: + resolution: {integrity: sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 0.1.4 + isobject: 2.1.0 + dev: true + + /has-value@1.0.0: + resolution: {integrity: sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==} + engines: {node: '>=0.10.0'} + dependencies: + get-value: 2.0.6 + has-values: 1.0.0 + isobject: 3.0.1 + dev: true + + /has-values@0.1.4: + resolution: {integrity: sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==} + engines: {node: '>=0.10.0'} + dev: true + + /has-values@1.0.0: + resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-number: 3.0.0 + kind-of: 4.0.0 + dev: true + + /hasown@2.0.1: + resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: true + + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + engines: {node: '>= 4'} + + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + dependencies: + es-errors: 1.3.0 + hasown: 2.0.1 + side-channel: 1.0.6 + dev: true + /intl-messageformat@10.5.11: resolution: {integrity: sha512-eYq5fkFBVxc7GIFDzpFQkDOZgNayNTQn4Oufe8jw6YY6OHVw70/4pA3FyCsQ0Gb2DnvEJEMmN2tOaXUGByM+kg==} dependencies: @@ -547,10 +1820,332 @@ packages: loose-envify: 1.4.0 dev: true + /is-accessor-descriptor@1.0.1: + resolution: {integrity: sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==} + engines: {node: '>= 0.10'} + dependencies: + hasown: 2.0.1 + dev: true + + /is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-async-function@2.0.0: + resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + dependencies: + has-bigints: 1.0.2 + dev: true + + /is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + dev: true + + /is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + dev: true + + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.1 + dev: true + + /is-data-descriptor@1.0.1: + resolution: {integrity: sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==} + engines: {node: '>= 0.4'} + dependencies: + hasown: 2.0.1 + dev: true + + /is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-descriptor@0.1.7: + resolution: {integrity: sha512-C3grZTvObeN1xud4cRWl366OMXZTj0+HGyk4hvfpx4ZHt1Pb60ANSXqCK7pdOTeUQpRzECBSTphqvD7U+l22Eg==} + engines: {node: '>= 0.4'} + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + dev: true + + /is-descriptor@1.0.3: + resolution: {integrity: sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==} + engines: {node: '>= 0.4'} + dependencies: + is-accessor-descriptor: 1.0.1 + is-data-descriptor: 1.0.1 + dev: true + + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: true + + /is-extendable@1.0.1: + resolution: {integrity: sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==} + engines: {node: '>=0.10.0'} + dependencies: + is-plain-object: 2.0.4 + dev: true + + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + /is-finalizationregistry@1.0.2: + resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-generator-function@1.0.10: + resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + dependencies: + is-extglob: 2.1.1 + + /is-map@2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==} + dev: true + + /is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + dev: true + + /is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-number@3.0.0: + resolution: {integrity: sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: true + + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + has-tostringtag: 1.0.2 + dev: true + + /is-set@2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} + dev: true + + /is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: 1.0.2 + dev: true + + /is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + dependencies: + has-symbols: 1.0.3 + dev: true + + /is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + dependencies: + which-typed-array: 1.1.14 + dev: true + + /is-weakmap@2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==} + dev: true + + /is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + dependencies: + call-bind: 1.0.7 + dev: true + + /is-weakset@2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + dev: true + + /is-windows@1.0.2: + resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} + engines: {node: '>=0.10.0'} + dev: true + + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + dev: true + + /isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + dev: true + + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + /isobject@2.1.0: + resolution: {integrity: sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==} + engines: {node: '>=0.10.0'} + dependencies: + isarray: 1.0.0 + dev: true + + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} + dev: true + + /iterator.prototype@1.1.2: + resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} + dependencies: + define-properties: 1.2.1 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + reflect.getprototypeof: 1.0.5 + set-function-name: 2.0.2 + dev: true + /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} dev: true + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + dependencies: + argparse: 2.0.1 + + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + /json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + /json5@1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} + hasBin: true + dependencies: + minimist: 1.2.8 + dev: true + + /jsx-ast-utils@3.3.5: + resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==} + engines: {node: '>=4.0'} + dependencies: + array-includes: 3.1.7 + array.prototype.flat: 1.3.2 + object.assign: 4.1.5 + object.values: 1.1.7 + dev: true + + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + dependencies: + json-buffer: 3.0.1 + + /kind-of@3.2.2: + resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@4.0.0: + resolution: {integrity: sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==} + engines: {node: '>=0.10.0'} + dependencies: + is-buffer: 1.1.6 + dev: true + + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + dev: true + + /levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + dependencies: + p-locate: 5.0.0 + + /lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -558,27 +2153,679 @@ packages: js-tokens: 4.0.0 dev: true + /lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + dependencies: + yallist: 4.0.0 + dev: true + + /map-cache@0.2.2: + resolution: {integrity: sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==} + engines: {node: '>=0.10.0'} + dev: true + + /map-visit@1.0.0: + resolution: {integrity: sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==} + engines: {node: '>=0.10.0'} + dependencies: + object-visit: 1.0.1 + dev: true + + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: true + + /micromatch@4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + engines: {node: '>=8.6'} + dependencies: + braces: 3.0.2 + picomatch: 2.3.1 + dev: true + /minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} dependencies: brace-expansion: 1.1.11 + + /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@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: true + + /mixin-deep@1.3.2: + resolution: {integrity: sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==} + engines: {node: '>=0.10.0'} + dependencies: + for-in: 1.0.2 + is-extendable: 1.0.1 dev: true /moment@2.22.2: resolution: {integrity: sha512-LRvkBHaJGnrcWvqsElsOhHCzj8mU39wLx5pQ0pc6s153GynCTsPdGdqsVNKAQD9sKnWj11iF7TZx9fpLwdD3fw==} dev: true + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: true + + /ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + /nanomatch@1.2.13: + resolution: {integrity: sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==} + engines: {node: '>=0.10.0'} + dependencies: + arr-diff: 4.0.0 + array-unique: 0.3.2 + define-property: 2.0.2 + extend-shallow: 3.0.2 + fragment-cache: 0.2.1 + is-windows: 1.0.2 + kind-of: 6.0.3 + object.pick: 1.3.0 + regex-not: 1.0.2 + snapdragon: 0.8.2 + to-regex: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: true + + /natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + /nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} dev: true + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + dev: true + + /object-copy@0.1.0: + resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} + engines: {node: '>=0.10.0'} + dependencies: + copy-descriptor: 0.1.1 + define-property: 0.2.5 + kind-of: 3.2.2 + dev: true + + /object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + dev: true + + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: true + + /object-visit@1.0.1: + resolution: {integrity: sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + has-symbols: 1.0.3 + object-keys: 1.1.1 + dev: true + + /object.entries@1.1.7: + resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /object.fromentries@2.0.7: + resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /object.groupby@1.0.2: + resolution: {integrity: sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==} + dependencies: + array.prototype.filter: 1.0.3 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + dev: true + + /object.hasown@1.1.3: + resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==} + dependencies: + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /object.pick@1.3.0: + resolution: {integrity: sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==} + engines: {node: '>=0.10.0'} + dependencies: + isobject: 3.0.1 + dev: true + + /object.values@1.1.7: + resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + dependencies: + wrappy: 1.0.2 + + /optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + dependencies: + yocto-queue: 0.1.0 + + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + dependencies: + p-limit: 3.1.0 + + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + dependencies: + callsites: 3.1.0 + + /pascalcase@0.1.1: + resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==} + engines: {node: '>=0.10.0'} + dev: true + + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: true + + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: true + + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: true + + /possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + dev: true + + /prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + dev: true + + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + dev: true + + /reflect.getprototypeof@1.0.5: + resolution: {integrity: sha512-62wgfC8dJWrmxv44CA36pLDnP6KKl3Vhxb7PL+8+qrrFMMoJij4vgiMP8zV4O8+CBMXY1mHxI5fITGHXFHVmQQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + globalthis: 1.0.3 + which-builtin-type: 1.1.3 + dev: true + + /regex-not@1.0.2: + resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + safe-regex: 1.1.0 + dev: true + + /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.7 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + dev: true + + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + /resolve-url@0.2.1: + resolution: {integrity: sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==} + deprecated: https://github.com/lydell/resolve-url#deprecated + dev: true + + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /resolve@2.0.0-next.5: + resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: true + + /ret@0.1.15: + resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} + engines: {node: '>=0.12'} + dev: true + + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + hasBin: true + dependencies: + glob: 7.2.3 + + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + dependencies: + queue-microtask: 1.2.3 + + /safe-array-concat@1.1.0: + resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} + engines: {node: '>=0.4'} + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + isarray: 2.0.5 + dev: true + + /safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-regex: 1.1.4 + dev: true + + /safe-regex@1.1.0: + resolution: {integrity: sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==} + dependencies: + ret: 0.1.15 + dev: true + + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + 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 + dev: true + + /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 + dev: true + + /set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + dev: true + + /set-value@2.0.1: + resolution: {integrity: sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 2.0.1 + is-extendable: 0.1.1 + is-plain-object: 2.0.4 + split-string: 3.1.0 + dev: true + + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + dependencies: + shebang-regex: 3.0.0 + + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + get-intrinsic: 1.2.4 + object-inspect: 1.13.1 + dev: true + + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: true + + /snapdragon@0.8.2: + resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} + engines: {node: '>=0.10.0'} + dependencies: + base: 0.11.2 + debug: 2.6.9 + define-property: 0.2.5 + extend-shallow: 2.0.1 + map-cache: 0.2.2 + source-map: 0.5.7 + source-map-resolve: 0.5.3 + use: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /source-map-resolve@0.5.3: + resolution: {integrity: sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==} + deprecated: See https://github.com/lydell/source-map-resolve#deprecated + dependencies: + atob: 2.1.2 + decode-uri-component: 0.2.2 + resolve-url: 0.2.1 + source-map-url: 0.4.1 + urix: 0.1.0 + dev: true + + /source-map-url@0.4.1: + resolution: {integrity: sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==} + deprecated: See https://github.com/lydell/source-map-url#deprecated + dev: true + + /source-map@0.5.7: + resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} + engines: {node: '>=0.10.0'} + dev: true + /spitroast@1.4.3: resolution: {integrity: sha512-JdkzAy2tT82ahx+eEtM5ohBeHICqFln/Yzo+vPGnE5sX1LYgPHCU2qcaSIJfR/xNrhI0q+ftwFz0H2aJysv3EA==} dev: false + /split-string@3.1.0: + resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} + engines: {node: '>=0.10.0'} + dependencies: + extend-shallow: 3.0.2 + dev: true + + /static-extend@0.1.2: + resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 0.2.5 + object-copy: 0.1.0 + dev: true + + /string.prototype.matchall@4.0.10: + resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + get-intrinsic: 1.2.4 + has-symbols: 1.0.3 + internal-slot: 1.0.7 + regexp.prototype.flags: 1.5.2 + set-function-name: 2.0.2 + side-channel: 1.0.6 + dev: true + + /string.prototype.trim@1.2.8: + resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + 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.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /string.prototype.trimstart@1.0.7: + resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.22.5 + dev: true + + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + dependencies: + ansi-regex: 5.0.1 + + /strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + dev: true + + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + dependencies: + has-flag: 4.0.0 + + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: true + + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + /to-object-path@0.3.0: + resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==} + engines: {node: '>=0.10.0'} + dependencies: + kind-of: 3.2.2 + dev: true + + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + dependencies: + is-number: 7.0.0 + dev: true + + /to-regex@3.0.2: + resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==} + engines: {node: '>=0.10.0'} + dependencies: + define-property: 2.0.2 + extend-shallow: 3.0.2 + regex-not: 1.0.2 + safe-regex: 1.1.0 + dev: true + + /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 + + /tsconfig-paths@3.15.0: + resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} + dependencies: + '@types/json5': 0.0.29 + json5: 1.0.2 + minimist: 1.2.8 + strip-bom: 3.0.0 + dev: true + /tslib@2.6.2: resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: 1.2.1 + + /type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + /typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + dev: true + + /typed-array-length@1.0.5: + resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + dev: true + /typescript-transform-paths@3.4.7(typescript@5.3.3): resolution: {integrity: sha512-1Us1kdkdfKd2unbkBAOV2HHRmbRBYpSuk9nJ7cLD2hP4QmfToiM/VpxNlhJc1eezVwVqSKSBjNSzZsK/fWR/9A==} peerDependencies: @@ -594,6 +2841,114 @@ packages: hasBin: true dev: true + /unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + dependencies: + 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==} dev: true + + /union-value@1.0.1: + resolution: {integrity: sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==} + engines: {node: '>=0.10.0'} + dependencies: + arr-union: 3.1.0 + get-value: 2.0.6 + is-extendable: 0.1.1 + set-value: 2.0.1 + dev: true + + /unset-value@1.0.0: + resolution: {integrity: sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==} + engines: {node: '>=0.10.0'} + dependencies: + has-value: 0.3.1 + isobject: 3.0.1 + dev: true + + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + dependencies: + punycode: 2.3.1 + + /urix@0.1.0: + resolution: {integrity: sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==} + deprecated: Please see https://github.com/lydell/urix#deprecated + dev: true + + /use@3.1.1: + resolution: {integrity: sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==} + engines: {node: '>=0.10.0'} + dev: true + + /which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.0.7 + is-symbol: 1.0.4 + dev: true + + /which-builtin-type@1.1.3: + resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==} + engines: {node: '>= 0.4'} + dependencies: + function.prototype.name: 1.1.6 + has-tostringtag: 1.0.2 + is-async-function: 2.0.0 + is-date-object: 1.0.5 + is-finalizationregistry: 1.0.2 + is-generator-function: 1.0.10 + is-regex: 1.1.4 + is-weakref: 1.0.2 + isarray: 2.0.5 + which-boxed-primitive: 1.0.2 + which-collection: 1.0.1 + which-typed-array: 1.1.14 + dev: true + + /which-collection@1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==} + dependencies: + is-map: 2.0.2 + is-set: 2.0.2 + is-weakmap: 2.0.1 + is-weakset: 2.0.2 + dev: true + + /which-typed-array@1.1.14: + resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.2 + dev: true + + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + dependencies: + isexe: 2.0.0 + + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + /yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + dev: true + + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} diff --git a/src/core/commands/debug.ts b/src/core/commands/debug.ts index 5e1c421..475579e 100644 --- a/src/core/commands/debug.ts +++ b/src/core/commands/debug.ts @@ -1,7 +1,7 @@ -import { Strings } from "@/core/i18n"; +import { Strings } from "@core/i18n"; +import { ApplicationCommand, ApplicationCommandOptionType } from "@lib/api/commands/types"; import { getDebugInfo } from "@lib/debug"; import { messageUtil } from "@metro/common"; -import { ApplicationCommand, ApplicationCommandOptionType } from "@/lib/api/commands/types"; export default () => { name: "debug", @@ -31,4 +31,4 @@ export default () => { messageUtil.sendMessage(ctx.channel.id, { content }); } } -} \ No newline at end of file +}; diff --git a/src/core/commands/eval.ts b/src/core/commands/eval.ts index 59064ad..24f3506 100644 --- a/src/core/commands/eval.ts +++ b/src/core/commands/eval.ts @@ -1,7 +1,7 @@ -import { findByProps } from "@metro/filters"; +import { Strings } from "@core/i18n"; +import { ApplicationCommand, ApplicationCommandOptionType } from "@lib/api/commands/types"; import { messageUtil } from "@metro/common"; -import { Strings } from "@/core/i18n"; -import { ApplicationCommand, ApplicationCommandOptionType } from "@/lib/api/commands/types"; +import { findByProps } from "@metro/filters"; const util = findByProps("inspect"); const AsyncFunction = (async () => void 0).constructor; @@ -38,4 +38,4 @@ export default () => { messageUtil.sendBotMessage(ctx.channel.id, wrapInJSCodeblock(err?.stack ?? err)); } } -} \ No newline at end of file +}; diff --git a/src/core/commands/plugins.ts b/src/core/commands/plugins.ts index 8db8faa..f6031c8 100644 --- a/src/core/commands/plugins.ts +++ b/src/core/commands/plugins.ts @@ -1,7 +1,7 @@ -import { messageUtil } from "@metro/common"; +import { Strings } from "@core/i18n"; +import { ApplicationCommand, ApplicationCommandOptionType } from "@lib/api/commands/types"; import { plugins as pluginStorage } from "@lib/managers/plugins"; -import { Strings } from "@/core/i18n"; -import { ApplicationCommand, ApplicationCommandOptionType } from "@/lib/api/commands/types"; +import { messageUtil } from "@metro/common"; export default () => { name: "plugins", @@ -38,4 +38,4 @@ export default () => { messageUtil.sendMessage(ctx.channel.id, { content }); } } -} \ No newline at end of file +}; diff --git a/src/core/fixes.ts b/src/core/fixes.ts index 8234566..f5814bd 100644 --- a/src/core/fixes.ts +++ b/src/core/fixes.ts @@ -6,10 +6,10 @@ * - @pylixonly */ -import { FluxDispatcher, moment } from "@metro/common"; import logger from "@lib/utils/logger"; +import { FluxDispatcher, moment } from "@metro/common"; -function onDispatch({ locale }: { locale: string }) { +function onDispatch({ locale }: { locale: string; }) { // Timestamps try { moment.locale(locale.toLowerCase()); @@ -22,5 +22,5 @@ function onDispatch({ locale }: { locale: string }) { } export default () => { - FluxDispatcher.subscribe("I18N_LOAD_SUCCESS", onDispatch) -}; \ No newline at end of file + FluxDispatcher.subscribe("I18N_LOAD_SUCCESS", onDispatch); +}; diff --git a/src/core/i18n/index.ts b/src/core/i18n/index.ts index b0c5ce2..c008ab4 100644 --- a/src/core/i18n/index.ts +++ b/src/core/i18n/index.ts @@ -1,4 +1,5 @@ -import { findByName } from "@/lib/metro/filters"; +import { findByName } from "@lib/metro/filters"; + import langDefault from "./default.json"; const IntlMessageFormat = findByName("MessageFormat") as typeof import("intl-messageformat").default; @@ -11,7 +12,10 @@ export const Strings = new Proxy({}, { } }) as Record; -export function formatString(key: I18nKey, val: Record) { +type FRet = T extends string ? string : string | T | (string | T)[]; + +export function formatString(key: I18nKey, val: Record): FRet { const str = Strings[key]; + // @ts-ignore return new IntlMessageFormat(str).format(val); -} \ No newline at end of file +} diff --git a/src/core/plugins/index.ts b/src/core/plugins/index.ts index 586e9ff..6b24449 100644 --- a/src/core/plugins/index.ts +++ b/src/core/plugins/index.ts @@ -7,4 +7,4 @@ export function initCorePlugins() { }); return () => unloads.forEach(m => typeof m === "function" && m()); -} \ No newline at end of file +} diff --git a/src/core/plugins/quickInstall/forumPost.tsx b/src/core/plugins/quickInstall/forumPost.tsx index 401601e..e90b174 100644 --- a/src/core/plugins/quickInstall/forumPost.tsx +++ b/src/core/plugins/quickInstall/forumPost.tsx @@ -1,14 +1,14 @@ -import { findByName, findByProps } from "@metro/filters"; -import { DISCORD_SERVER_ID, PLUGINS_CHANNEL_ID, THEMES_CHANNEL_ID, HTTP_REGEX_MULTI, PROXY_PREFIX } from "@lib/utils/constants"; +import { formatString, Strings } from "@core/i18n"; +import { getAssetIDByName } from "@lib/api/assets"; +import { isThemeSupported } from "@lib/api/native/loader"; import { after } from "@lib/api/patcher"; +import { useProxy } from "@lib/api/storage"; import { installPlugin, plugins, removePlugin } from "@lib/managers/plugins"; import { installTheme, removeTheme, themes } from "@lib/managers/themes"; import { findInReactTree } from "@lib/utils"; -import { getAssetIDByName } from "@/lib/api/assets"; +import { DISCORD_SERVER_ID, HTTP_REGEX_MULTI, PLUGINS_CHANNEL_ID, PROXY_PREFIX, THEMES_CHANNEL_ID } from "@lib/utils/constants"; +import { findByName, findByProps } from "@metro/filters"; import { showToast } from "@ui/toasts"; -import { useProxy } from "@/lib/api/storage"; -import { isThemeSupported } from "@/lib/api/native/loader"; -import { Strings, formatString } from "@/core/i18n"; type PostType = "Plugin" | "Theme"; @@ -35,7 +35,7 @@ const postMap = { return isInstalled ? removeTheme(url) : installTheme(url); }, } -} +}; function useExtractThreadContent(thread: any, _firstMessage = null, actionSheet = false): ([PostType, string]) | void { if (thread.guild_id !== DISCORD_SERVER_ID) return; @@ -50,7 +50,7 @@ function useExtractThreadContent(thread: any, _firstMessage = null, actionSheet const { firstMessage } = actionSheet ? useFirstForumPostMessage(thread) : { firstMessage: _firstMessage }; - let urls = firstMessage?.content?.match(HTTP_REGEX_MULTI)?.filter(postMap[postType].urlsFilter); + const urls = firstMessage?.content?.match(HTTP_REGEX_MULTI)?.filter(postMap[postType].urlsFilter); if (!urls || !urls[0]) return; // Sync with lib/managers/plugins @@ -82,14 +82,14 @@ function useInstaller(thread: any, firstMessage = null, actionSheet = false): [t } }; - return [false, postType, isInstalled, isInstalling, installOrRemove] + return [false, postType, isInstalled, isInstalling, installOrRemove]; } const actionSheetPatch = () => after("default", ForumPostLongPressActionSheet, ([{ thread }], res) => { const [shouldReturn, postType, installed, loading, installOrRemove] = useInstaller(thread); if (shouldReturn) return; - const actions = findInReactTree(res, (t) => t?.[0]?.key); + const actions = findInReactTree(res, t => t?.[0]?.key); const ActionsSection = actions[0].type; actions.unshift( @@ -118,14 +118,14 @@ const installButtonPatch = () => after("MostCommonForumPostReaction", forumReact icon={getAssetIDByName(installed ? "ic_message_delete" : "DownloadIcon")} style={{ marginLeft: 8 }} /> - + ; }); export default () => { const patches = [ actionSheetPatch(), installButtonPatch() - ] + ]; return () => patches.map(p => p()); -} +}; diff --git a/src/core/plugins/quickInstall/index.ts b/src/core/plugins/quickInstall/index.ts index 13cd533..a687a05 100644 --- a/src/core/plugins/quickInstall/index.ts +++ b/src/core/plugins/quickInstall/index.ts @@ -8,4 +8,4 @@ export default function onLoad() { patches.push(patchUrl()); return () => patches.forEach(p => p()); -}; +} diff --git a/src/core/plugins/quickInstall/url.tsx b/src/core/plugins/quickInstall/url.tsx index 3e1ea94..62148f5 100644 --- a/src/core/plugins/quickInstall/url.tsx +++ b/src/core/plugins/quickInstall/url.tsx @@ -1,16 +1,16 @@ -import { findByProps, find } from "@metro/filters"; -import { ReactNative as RN, channels, url } from "@metro/common"; -import { PROXY_PREFIX, THEMES_CHANNEL_ID } from "@lib/utils/constants"; +import { formatString, Strings } from "@core/i18n"; +import { getAssetIDByName } from "@lib/api/assets"; +import { isThemeSupported } from "@lib/api/native/loader"; import { after, instead } from "@lib/api/patcher"; import { installPlugin } from "@lib/managers/plugins"; import { installTheme } from "@lib/managers/themes"; +import { PROXY_PREFIX, THEMES_CHANNEL_ID } from "@lib/utils/constants"; +import { channels, url } from "@metro/common"; +import { find, findByProps } from "@metro/filters"; import { showConfirmationAlert } from "@ui/alerts"; -import { getAssetIDByName } from "@/lib/api/assets"; import { showToast } from "@ui/toasts"; -import { isThemeSupported } from "@/lib/api/native/loader"; -import { Strings, formatString } from "@/core/i18n"; -const showSimpleActionSheet = find((m) => m?.showSimpleActionSheet && !Object.getOwnPropertyDescriptor(m, "showSimpleActionSheet")?.get); +const showSimpleActionSheet = find(m => m?.showSimpleActionSheet && !Object.getOwnPropertyDescriptor(m, "showSimpleActionSheet")?.get); const handleClick = findByProps("handleClick"); const { openURL } = url; const { getChannelId } = channels; @@ -38,7 +38,7 @@ export default () => { const patches = new Array(); patches.push( - after("showSimpleActionSheet", showSimpleActionSheet, (args) => { + after("showSimpleActionSheet", showSimpleActionSheet, args => { if (args[0].key !== "LongPressUrl") return; const { header: { title: url }, @@ -77,5 +77,5 @@ export default () => { }) ); - return () => patches.forEach((p) => p()); + return () => patches.forEach(p => p()); }; diff --git a/src/core/polyfills.ts b/src/core/polyfills.ts index b3034a1..5a6996d 100644 --- a/src/core/polyfills.ts +++ b/src/core/polyfills.ts @@ -5,4 +5,4 @@ const mapAllSettled = (item: T) => Promise.resolve(item).then(allSettledFulfi export const allSettled = (iterator: T) => Promise.all(Array.from(iterator).map(mapAllSettled)); // @ts-ignore -Promise.allSettled ??= allSettled; \ No newline at end of file +Promise.allSettled ??= allSettled; diff --git a/src/core/ui/components/AddonPage.tsx b/src/core/ui/components/AddonPage.tsx index 988bb11..7b21a7f 100644 --- a/src/core/ui/components/AddonPage.tsx +++ b/src/core/ui/components/AddonPage.tsx @@ -1,34 +1,36 @@ -import { NavigationNative, ReactNative as RN, clipboard } from "@metro/common"; -import { useProxy } from "@/lib/api/storage"; -import { HelpMessage, ErrorBoundary, Search } from "@ui/components"; -import { CardWrapper } from "@/core/ui/components/Card"; +import { formatString, Strings } from "@core/i18n"; +import { CardWrapper } from "@core/ui/components/Card"; +import { getAssetIDByName } from "@lib/api/assets"; +import { useProxy } from "@lib/api/storage"; +import { findByProps } from "@lib/metro/filters"; import { settings } from "@lib/settings"; -import { findByProps } from "@/lib/metro/filters"; -import { HTTP_REGEX_MULTI } from "@/lib/utils/constants"; +import { HTTP_REGEX_MULTI } from "@lib/utils/constants"; +import { clipboard, ReactNative as RN } from "@metro/common"; import { showInputAlert } from "@ui/alerts"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { Strings, formatString } from "@/core/i18n"; +import { ErrorBoundary, HelpMessage, Search } from "@ui/components"; import fuzzysort from "fuzzysort"; interface AddonPageProps { title: string; fetchFunction: (url: string) => Promise; - items: Record; + items: Record; safeModeMessage: string; safeModeExtras?: JSX.Element | JSX.Element[]; card: React.ComponentType>; } -function getItemsByQuery(items: T[], query: string): T[] { +function getItemsByQuery(items: T[], query: string): T[] { if (!query) return items; - return fuzzysort.go(query, items, { keys: [ - "id", - "manifest.name", - "manifest.description", - "manifest.authors.0.name", - "manifest.authors.1.name" - ]}).map(r => r.obj); + return fuzzysort.go(query, items, { + keys: [ + "id", + "manifest.name", + "manifest.description", + "manifest.authors.0.name", + "manifest.authors.1.name" + ] + }).map(r => r.obj); } const reanimated = findByProps("useSharedValue"); @@ -68,13 +70,13 @@ export default function AddonPage({ title, fetchFunction, items, safeModeMess data={getItemsByQuery(Object.values(items), search)} renderItem={({ item, index }) => } /> - { // from ./InstallButton.tsx - clipboard.getString().then((content) => + clipboard.getString().then(content => showInputAlert({ title: formatString("INSTALL_TITLE", { title }), initialValue: content.match(HTTP_REGEX_MULTI)?.[0] ?? "", @@ -83,9 +85,9 @@ export default function AddonPage({ title, fetchFunction, items, safeModeMess confirmText: Strings.INSTALL, cancelText: Strings.CANCEL, }) - ) - }} + ); + }} /> - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/components/AssetDisplay.tsx b/src/core/ui/components/AssetDisplay.tsx index 6b6521b..456c2c0 100644 --- a/src/core/ui/components/AssetDisplay.tsx +++ b/src/core/ui/components/AssetDisplay.tsx @@ -1,9 +1,9 @@ -import { ReactNative as RN, clipboard } from "@metro/common"; -import { showToast } from "@ui/toasts"; +import { Asset } from "@lib/api/assets"; +import { clipboard, ReactNative as RN } from "@metro/common"; import { Forms } from "@ui/components"; -import { Asset } from "@/lib/api/assets"; +import { showToast } from "@ui/toasts"; -interface AssetDisplayProps { asset: Asset } +interface AssetDisplayProps { asset: Asset; } const { FormRow } = Forms; @@ -17,5 +17,5 @@ export default function AssetDisplay({ asset }: AssetDisplayProps) { showToast.showCopyToClipboard(); }} /> - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/components/Card.tsx b/src/core/ui/components/Card.tsx index 25c1f95..5f8caa8 100644 --- a/src/core/ui/components/Card.tsx +++ b/src/core/ui/components/Card.tsx @@ -1,8 +1,8 @@ -import ContextMenu from "@ui/components/ContextMenu"; +import { getAssetIDByName } from "@lib/api/assets"; import { ReactNative as RN, stylesheet } from "@metro/common"; import { findByProps } from "@metro/filters"; -import { getAssetIDByName } from "@/lib/api/assets"; import { semanticColors } from "@ui/color"; +import ContextMenu from "@ui/components/ContextMenu"; const { TableRow, TableRowIcon, TableSwitchRow, TableCheckboxRow, TableRowGroup } = findByProps("TableRow"); @@ -33,7 +33,7 @@ const styles = stylesheet.createThemedStyleSheet({ marginLeft: 5, tintColor: semanticColors?.INTERACTIVE_NORMAL, } -}) +}); interface Action { icon: string; @@ -77,43 +77,43 @@ export default function Card(props: CardProps) { return ( - {props.toggleType && (props.toggleType === "switch" ? - : props.toggleType === "radio" ? - { - pressableState = !pressableState; - props.onToggleChange?.(pressableState) - }} - checked={props.toggleValue} - /> : undefined) || } - - {props.overflowActions && - ({ - label: i.label, - iconSource: getAssetIDByName(i.icon), - action: i.onPress - }))} - align="auto" - title={props.overflowTitle!!} - children={(props) => - - } - /> - } - - } - /> + {props.toggleType && (props.toggleType === "switch" ? + : props.toggleType === "radio" ? + { + pressableState = !pressableState; + props.onToggleChange?.(pressableState); + }} + checked={props.toggleValue} + /> : undefined) || } + + {props.overflowActions && + ({ + label: i.label, + iconSource: getAssetIDByName(i.icon), + action: i.onPress + }))} + align="auto" + title={props.overflowTitle!!} + children={props => + + } + /> + } + + } + /> - ) + ); } diff --git a/src/core/ui/components/InstallButton.tsx b/src/core/ui/components/InstallButton.tsx index b5ddcff..4f84f50 100644 --- a/src/core/ui/components/InstallButton.tsx +++ b/src/core/ui/components/InstallButton.tsx @@ -1,9 +1,9 @@ -import { ReactNative as RN, stylesheet, clipboard } from "@metro/common"; +import { Strings } from "@core/i18n"; +import { getAssetIDByName } from "@lib/api/assets"; import { HTTP_REGEX_MULTI } from "@lib/utils/constants"; +import { clipboard, ReactNative as RN, stylesheet } from "@metro/common"; import { showInputAlert } from "@ui/alerts"; -import { getAssetIDByName } from "@/lib/api/assets"; import { semanticColors } from "@ui/color"; -import { Strings } from "@/core/i18n"; const styles = stylesheet.createThemedStyleSheet({ icon: { @@ -20,7 +20,7 @@ interface InstallButtonProps { export default function InstallButton({ alertTitle, installFunction: fetchFunction }: InstallButtonProps) { return ( - clipboard.getString().then((content) => + clipboard.getString().then(content => showInputAlert({ title: alertTitle, initialValue: content.match(HTTP_REGEX_MULTI)?.[0] ?? "", diff --git a/src/core/ui/components/PluginCard.tsx b/src/core/ui/components/PluginCard.tsx index 2bc5047..a8c50f6 100644 --- a/src/core/ui/components/PluginCard.tsx +++ b/src/core/ui/components/PluginCard.tsx @@ -1,13 +1,13 @@ -import { NavigationNative, clipboard } from "@metro/common"; -import { removePlugin, startPlugin, stopPlugin, getSettings, fetchPlugin, BunnyPlugin } from "@lib/managers/plugins"; +import { formatString, Strings } from "@core/i18n"; +import Card, { CardWrapper } from "@core/ui/components/Card"; +import { getAssetIDByName } from "@lib/api/assets"; import { MMKVManager } from "@lib/api/native/modules"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { showToast } from "@ui/toasts"; +import { useProxy } from "@lib/api/storage"; +import { BunnyPlugin, fetchPlugin, getSettings, removePlugin, startPlugin, stopPlugin } from "@lib/managers/plugins"; +import { ButtonColors } from "@lib/utils/types"; +import { clipboard, NavigationNative } from "@metro/common"; import { showConfirmationAlert } from "@ui/alerts"; -import Card, { CardWrapper } from "@/core/ui/components/Card"; -import { useProxy } from "@/lib/api/storage"; -import { ButtonColors } from "@/lib/utils/types"; -import { Strings, formatString } from "@/core/i18n"; +import { showToast } from "@ui/toasts"; async function stopThenStart(plugin: BunnyPlugin, callback: Function) { if (plugin.enabled) stopPlugin(plugin.id, false); @@ -60,7 +60,7 @@ export default function PluginCard({ item: plugin, index }: CardWrapper { showToast("Failed to refetch plugin!", getAssetIDByName("Small")); - }) + }); }); }, }, @@ -72,7 +72,7 @@ export default function PluginCard({ item: plugin, index }: CardWrapper { @@ -108,7 +108,7 @@ export default function PluginCard({ item: plugin, index }: CardWrapper showConfirmationAlert({ title: Strings.HOLD_UP, - content: formatString("ARE_YOU_SURE_TO_DELETE_PLUGIN", {name: plugin.manifest.name}), + content: formatString("ARE_YOU_SURE_TO_DELETE_PLUGIN", { name: plugin.manifest.name }), confirmText: Strings.DELETE, cancelText: Strings.CANCEL, confirmColor: ButtonColors.RED, @@ -124,5 +124,5 @@ export default function PluginCard({ item: plugin, index }: CardWrapper - ) + ); } diff --git a/src/core/ui/components/SettingsSection.tsx b/src/core/ui/components/SettingsSection.tsx index a2de438..622915f 100644 --- a/src/core/ui/components/SettingsSection.tsx +++ b/src/core/ui/components/SettingsSection.tsx @@ -1,10 +1,10 @@ -import { NavigationNative } from "@metro/common"; -import { useProxy } from "@/lib/api/storage"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { getScreens } from "@/core/ui/settings/data"; -import { ErrorBoundary, Forms } from "@ui/components"; +import { Strings } from "@core/i18n"; +import { getScreens } from "@core/ui/settings/data"; +import { getAssetIDByName } from "@lib/api/assets"; +import { useProxy } from "@lib/api/storage"; import { settings } from "@lib/settings"; -import { Strings } from "@/core/i18n"; +import { NavigationNative } from "@metro/common"; +import { ErrorBoundary, Forms } from "@ui/components"; const { FormRow, FormSection, FormDivider } = Forms; @@ -12,7 +12,7 @@ export default function SettingsSection() { const navigation = NavigationNative.useNavigation(); useProxy(settings); - const screens = getScreens() + const screens = getScreens(); return ( @@ -30,5 +30,5 @@ export default function SettingsSection() { ))} - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/components/ThemeCard.tsx b/src/core/ui/components/ThemeCard.tsx index d9c4f2a..d01bce3 100644 --- a/src/core/ui/components/ThemeCard.tsx +++ b/src/core/ui/components/ThemeCard.tsx @@ -1,14 +1,14 @@ -import { clipboard } from "@metro/common"; -import { Theme, applyTheme, fetchTheme, removeTheme, selectTheme, themes } from "@lib/managers/themes"; -import { useProxy } from "@/lib/api/storage"; +import { formatString, Strings } from "@core/i18n"; +import Card, { CardWrapper } from "@core/ui/components/Card"; +import { getAssetIDByName } from "@lib/api/assets"; import { BundleUpdaterManager } from "@lib/api/native/modules"; -import { getAssetIDByName } from "@/lib/api/assets"; +import { useProxy } from "@lib/api/storage"; +import { applyTheme, fetchTheme, removeTheme, selectTheme, Theme, themes } from "@lib/managers/themes"; +import { settings } from "@lib/settings"; +import { ButtonColors } from "@lib/utils/types"; +import { clipboard } from "@metro/common"; import { showConfirmationAlert } from "@ui/alerts"; import { showToast } from "@ui/toasts"; -import { settings } from "@lib/settings"; -import Card, { CardWrapper } from "@/core/ui/components/Card"; -import { ButtonColors } from "@/lib/utils/types"; -import { Strings, formatString } from "@/core/i18n"; async function selectAndApply(value: boolean, id: string) { try { @@ -18,8 +18,8 @@ async function selectAndApply(value: boolean, id: string) { // TODO: Implement native side reload-less & check if it's applied by 100% showToast(Strings.THEMES_RELOAD_FOR_CHANGES, getAssetIDByName("yellow-alert")); } catch (e: any) { - console.error("Error while selectAndApply,", e) - } + console.error("Error while selectAndApply,", e); + } } export default function ThemeCard({ item: theme, index }: CardWrapper) { @@ -30,7 +30,7 @@ export default function ThemeCard({ item: theme, index }: CardWrapper) { // This is needed because of Reactâ„¢ if (removed) return null; - const authors = theme.data.authors; + const { authors } = theme.data; return ( ) { cancelText: Strings.CANCEL, confirmColor: ButtonColors.RED, onConfirm: () => BundleUpdaterManager.reload(), - }) + }); } else { showToast(Strings.THEME_REFETCH_SUCCESSFUL, getAssetIDByName("toast_image_saved")); } @@ -85,7 +85,7 @@ export default function ThemeCard({ item: theme, index }: CardWrapper) { cancelText: Strings.CANCEL, confirmColor: ButtonColors.RED, onConfirm: () => { - removeTheme(theme.id).then((wasSelected) => { + removeTheme(theme.id).then(wasSelected => { setRemoved(true); if (wasSelected) selectAndApply(false, theme.id); }).catch((e: Error) => { @@ -96,5 +96,5 @@ export default function ThemeCard({ item: theme, index }: CardWrapper) { }, ]} /> - ) + ); } diff --git a/src/core/ui/components/Version.tsx b/src/core/ui/components/Version.tsx index 4f6d789..4ef8742 100644 --- a/src/core/ui/components/Version.tsx +++ b/src/core/ui/components/Version.tsx @@ -1,8 +1,8 @@ +import { getAssetIDByName } from "@lib/api/assets"; +import { findByProps } from "@lib/metro/filters"; import { clipboard } from "@metro/common"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { showToast } from "@ui/toasts"; import { Forms } from "@ui/components"; -import { findByProps } from "@/lib/metro/filters"; +import { showToast } from "@ui/toasts"; interface VersionProps { label: string; @@ -15,7 +15,7 @@ const { TableRow } = findByProps("TableRow"); const { FormText } = Forms; export default function Version({ label, version, icon, padding }: VersionProps) { - return ( + return ( - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/settings/data.tsx b/src/core/ui/settings/data.tsx index 2d41229..9c54c35 100644 --- a/src/core/ui/settings/data.tsx +++ b/src/core/ui/settings/data.tsx @@ -1,23 +1,23 @@ -import { ReactNative as RN, NavigationNative, stylesheet, lodash } from "@metro/common"; +import { Strings } from "@core/i18n"; +import InstallButton from "@core/ui/components/InstallButton"; +import Developer from "@core/ui/settings/pages/Developer"; +import General from "@core/ui/settings/pages/General"; +import Plugins from "@core/ui/settings/pages/Plugins"; +import Themes from "@core/ui/settings/pages/Themes"; +import { getAssetIDByName } from "@lib/api/assets"; +import { isThemeSupported } from "@lib/api/native/loader"; +import { useProxy } from "@lib/api/storage"; import { installPlugin } from "@lib/managers/plugins"; import { installTheme } from "@lib/managers/themes"; +import { findByProps } from "@lib/metro/filters"; +import { settings } from "@lib/settings"; +import { without } from "@lib/utils"; +import { PROXY_PREFIX } from "@lib/utils/constants"; +import { NavigationNative, ReactNative as RN, stylesheet } from "@metro/common"; import { showConfirmationAlert } from "@ui/alerts"; import { semanticColors } from "@ui/color"; -import { showToast } from "@ui/toasts"; -import { without } from "@lib/utils"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { settings } from "@lib/settings"; import ErrorBoundary from "@ui/components/ErrorBoundary"; -import InstallButton from "@/core/ui/components/InstallButton"; -import General from "@/core/ui/settings/pages/General"; -import Plugins from "@/core/ui/settings/pages/Plugins"; -import Themes from "@/core/ui/settings/pages/Themes"; -import Developer from "@/core/ui/settings/pages/Developer"; -import { PROXY_PREFIX } from "@/lib/utils/constants"; -import { findByProps } from "@/lib/metro/filters"; -import { isThemeSupported } from "@/lib/api/native/loader"; -import { Strings } from "@/core/i18n"; -import { useProxy } from "@/lib/api/storage"; +import { showToast } from "@ui/toasts"; const { useSafeAreaInsets } = findByProps("useSafeAreaInsets"); @@ -31,10 +31,10 @@ interface Screen { render: React.ComponentType; } -const useStyles = stylesheet.createStyles({ - container: { +const useStyles = stylesheet.createStyles({ + container: { flex: 1, - backgroundColor: semanticColors.BACKGROUND_MOBILE_PRIMARY + backgroundColor: semanticColors.BACKGROUND_MOBILE_PRIMARY } }); @@ -58,7 +58,7 @@ export const getScreens = (): Screen[] => [ headerRight: () => ( { + installFunction={async input => { if (!input.startsWith(PROXY_PREFIX) && !settings.developerSettings) setImmediate(() => showConfirmationAlert({ title: Strings.MODAL_UNPROXIED_PLUGIN_HEADER, @@ -99,16 +99,16 @@ export const getScreens = (): Screen[] => [ key: "VendettaCustomPage", title: "Vendetta Page", shouldRender: () => false, - render: ({ render: PageView, noErrorBoundary, ...options }: { render: React.ComponentType; noErrorBoundary: boolean } & Record) => { + render: ({ render: PageView, noErrorBoundary, ...options }: { render: React.ComponentType; noErrorBoundary: boolean; } & Record) => { const navigation = NavigationNative.useNavigation(); navigation.addListener("focus", () => navigation.setOptions(without(options, "render", "noErrorBoundary"))); - return noErrorBoundary ? : + return noErrorBoundary ? : ; }, }, ]; -export const getPanelsScreens = () => keyMap(getScreens(), (s) => ({ +export const getPanelsScreens = () => keyMap(getScreens(), s => ({ title: s.title, render: s.render, ...s.options, @@ -128,12 +128,12 @@ export const getYouData = () => { }), titleConfig: keyMap(screens, "title"), relationships: keyMap(screens, null), - rendererConfigs: keyMap(screens, (s) => { + rendererConfigs: keyMap(screens, s => { const WrappedComponent = React.memo(({ navigation, route }: any) => { const styles = useStyles(); const { bottom: paddingBottom } = useSafeAreaInsets(); navigation.addListener("focus", () => navigation.setOptions(s.options)); - return + return ; }); return { @@ -145,7 +145,7 @@ export const getYouData = () => { route: s.key, getComponent: () => WrappedComponent, } - } + }; }), }; }; diff --git a/src/core/ui/settings/index.ts b/src/core/ui/settings/index.ts index 5ca7f93..8956c78 100644 --- a/src/core/ui/settings/index.ts +++ b/src/core/ui/settings/index.ts @@ -1,12 +1,12 @@ // TODO: make settings patches part of the api -import patchPanels from "@/core/ui/settings/patches/panels"; -import patchYou from "@/core/ui/settings/patches/you"; +import patchPanels from "@core/ui/settings/patches/panels"; +import patchYou from "@core/ui/settings/patches/you"; export default function initSettings() { const patches = [ patchPanels(), patchYou(), - ] + ]; return () => patches.forEach(p => p?.()); } diff --git a/src/core/ui/settings/pages/AssetBrowser.tsx b/src/core/ui/settings/pages/AssetBrowser.tsx index 43e3284..268378c 100644 --- a/src/core/ui/settings/pages/AssetBrowser.tsx +++ b/src/core/ui/settings/pages/AssetBrowser.tsx @@ -1,7 +1,7 @@ +import AssetDisplay from "@core/ui/components/AssetDisplay"; +import { all } from "@lib/api/assets"; import { ReactNative as RN } from "@metro/common"; -import { all } from "@/lib/api/assets"; -import { Forms, Search, ErrorBoundary } from "@ui/components"; -import AssetDisplay from "@/core/ui/components/AssetDisplay"; +import { ErrorBoundary, Forms, Search } from "@ui/components"; const { FormDivider } = Forms; @@ -24,5 +24,5 @@ export default function AssetBrowser() { /> - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/settings/pages/Developer.tsx b/src/core/ui/settings/pages/Developer.tsx index 585dafc..9748da3 100644 --- a/src/core/ui/settings/pages/Developer.tsx +++ b/src/core/ui/settings/pages/Developer.tsx @@ -1,14 +1,14 @@ -import { ReactNative as RN, NavigationNative, stylesheet } from "@metro/common"; -import { findByProps } from "@metro/filters"; +import { Strings } from "@core/i18n"; +import AssetBrowser from "@core/ui/settings/pages/AssetBrowser"; +import { getAssetIDByName } from "@lib/api/assets"; +import { getReactDevToolsProp, getReactDevToolsVersion, isLoaderConfigSupported, isReactDevToolsPreloaded } from "@lib/api/native/loader"; +import { useProxy } from "@lib/api/storage"; import { connectToDebugger } from "@lib/debug"; -import { useProxy } from "@/lib/api/storage"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { ErrorBoundary, Forms } from "@ui/components"; -import { settings, loaderConfig } from "@lib/settings"; -import AssetBrowser from "@/core/ui/settings/pages/AssetBrowser"; +import { loaderConfig, settings } from "@lib/settings"; +import { NavigationNative, ReactNative as RN, stylesheet } from "@metro/common"; +import { findByProps } from "@metro/filters"; import { semanticColors } from "@ui/color"; -import { getReactDevToolsProp, getReactDevToolsVersion, isLoaderConfigSupported, isReactDevToolsPreloaded } from "@/lib/api/native/loader"; -import { Strings } from "@/core/i18n"; +import { ErrorBoundary, Forms } from "@ui/components"; const { Stack, TableRow, TableSwitchRow, TableRowGroup, TextInput } = findByProps("TableRow"); const { FormText } = Forms; @@ -99,7 +99,7 @@ export default function Developer() { render: AssetBrowser, })} /> - } @@ -111,7 +111,7 @@ export default function Developer() { onClose: () => hideActionSheet(), }, options: [ - // @ts-expect-error + // @ts-expect-error // Of course, to trigger an error, we need to do something incorrectly. The below will do! { label: Strings.BUNNY, onPress: () => navigation.push("VendettaCustomPage", { render: () => }) }, { label: "Discord", isDestructive: true, onPress: () => navigation.push("VendettaCustomPage", { noErrorBoundary: true }) }, @@ -122,5 +122,5 @@ export default function Developer() { - ) + ); } diff --git a/src/core/ui/settings/pages/General.tsx b/src/core/ui/settings/pages/General.tsx index 2baae30..e06e615 100644 --- a/src/core/ui/settings/pages/General.tsx +++ b/src/core/ui/settings/pages/General.tsx @@ -1,14 +1,14 @@ -import { ReactNative as RN, stylesheet, url } from "@metro/common"; -import { DISCORD_SERVER, GITHUB } from "@lib/utils/constants"; +import { Strings } from "@core/i18n"; +import Version from "@core/ui/components/Version"; +import { getAssetIDByName } from "@lib/api/assets"; +import { useProxy } from "@lib/api/storage"; import { getDebugInfo, toggleSafeMode } from "@lib/debug"; -import { useProxy } from "@/lib/api/storage"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { Summary } from "@ui/components"; -import { settings } from "@lib/settings"; -import Version from "@/core/ui/components/Version"; import { findByProps } from "@lib/metro/filters"; +import { settings } from "@lib/settings"; +import { DISCORD_SERVER, GITHUB } from "@lib/utils/constants"; +import { ReactNative as RN, stylesheet, url } from "@metro/common"; import { semanticColors } from "@ui/color"; -import { Strings } from "@/core/i18n"; +import { Summary } from "@ui/components"; const { Stack, TableRow, TableSwitchRow, TableRowGroup } = findByProps("TableRow"); const debugInfo = getDebugInfo(); @@ -18,7 +18,7 @@ const styles = stylesheet.createThemedStyleSheet({ flex: 1, backgroundColor: semanticColors.BACKGROUND_MOBILE_SECONDARY, } -}) +}); export default function General() { useProxy(settings); @@ -137,5 +137,5 @@ export default function General() { - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/settings/pages/Plugins.tsx b/src/core/ui/settings/pages/Plugins.tsx index 7b5ea8b..e353756 100644 --- a/src/core/ui/settings/pages/Plugins.tsx +++ b/src/core/ui/settings/pages/Plugins.tsx @@ -1,12 +1,12 @@ -import { useProxy } from "@/lib/api/storage"; +import { Strings } from "@core/i18n"; +import AddonPage from "@core/ui/components/AddonPage"; +import PluginCard from "@core/ui/components/PluginCard"; +import { useProxy } from "@lib/api/storage"; import { BunnyPlugin, installPlugin, plugins } from "@lib/managers/plugins"; import { settings } from "@lib/settings"; -import AddonPage from "@/core/ui/components/AddonPage"; -import PluginCard from "@/core/ui/components/PluginCard"; -import { Strings } from "@/core/i18n"; export default function Plugins() { - useProxy(settings) + useProxy(settings); return ( @@ -16,5 +16,5 @@ export default function Plugins() { safeModeMessage={Strings.SAFE_MODE_NOTICE_PLUGINS} card={PluginCard} /> - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/settings/pages/Themes.tsx b/src/core/ui/settings/pages/Themes.tsx index 1e6a0da..59a91ab 100644 --- a/src/core/ui/settings/pages/Themes.tsx +++ b/src/core/ui/settings/pages/Themes.tsx @@ -1,11 +1,11 @@ -import { useProxy } from "@/lib/api/storage"; -import { Theme, installTheme, themes } from "@lib/managers/themes"; -import { Button } from "@ui/components"; +import { Strings } from "@core/i18n"; +import AddonPage from "@core/ui/components/AddonPage"; +import ThemeCard from "@core/ui/components/ThemeCard"; +import { useProxy } from "@lib/api/storage"; +import { installTheme, Theme, themes } from "@lib/managers/themes"; import { settings } from "@lib/settings"; -import AddonPage from "@/core/ui/components/AddonPage"; -import ThemeCard from "@/core/ui/components/ThemeCard"; -import { ButtonColors } from "@/lib/utils/types"; -import { Strings } from "@/core/i18n"; +import { ButtonColors } from "@lib/utils/types"; +import { Button } from "@ui/components"; export default function Themes() { useProxy(settings); @@ -27,5 +27,5 @@ export default function Themes() { /> : undefined} card={ThemeCard} /> - ) -} \ No newline at end of file + ); +} diff --git a/src/core/ui/settings/patches/panels.tsx b/src/core/ui/settings/patches/panels.tsx index d3c3b31..aa4f9df 100644 --- a/src/core/ui/settings/patches/panels.tsx +++ b/src/core/ui/settings/patches/panels.tsx @@ -1,9 +1,9 @@ -import { i18n } from "@metro/common"; -import { findByName } from "@metro/filters"; +import SettingsSection from "@core/ui/components/SettingsSection"; +import { getPanelsScreens } from "@core/ui/settings/data"; import { after } from "@lib/api/patcher"; import { findInReactTree } from "@lib/utils"; -import { getPanelsScreens } from "@/core/ui/settings/data"; -import SettingsSection from "@/core/ui/components/SettingsSection"; +import { i18n } from "@metro/common"; +import { findByName } from "@metro/filters"; const screensModule = findByName("getScreens", false); const settingsModule = findByName("UserSettingsOverviewWrapper", false); @@ -27,9 +27,9 @@ export default function patchPanels() { // TODO: Rewrite this whole patch, the index hasn't been properly found for months now patches.push(after("render", Overview.type.prototype, (_, { props: { children } }) => { - const titles = [i18n.Messages["BILLING_SETTINGS"], i18n.Messages["PREMIUM_SETTINGS"]]; + const titles = [i18n.Messages.BILLING_SETTINGS, i18n.Messages.PREMIUM_SETTINGS]; //! Fix for Android 174201 and iOS 42188 - children = findInReactTree(children, i => i.children?.[1].type?.name === "FormSection").children; + ({ children } = findInReactTree(children, i => i.children?.[1].type?.name === "FormSection")); const index = children.findIndex((c: any) => titles.includes(c?.props.label)); children.splice(index === -1 ? 4 : index, 0, ); })); diff --git a/src/core/ui/settings/patches/you.tsx b/src/core/ui/settings/patches/you.tsx index 76f0059..10c2de6 100644 --- a/src/core/ui/settings/patches/you.tsx +++ b/src/core/ui/settings/patches/you.tsx @@ -1,8 +1,8 @@ -import { findByProps } from "@metro/filters"; +import { Strings } from "@core/i18n"; +import { getScreens, getYouData } from "@core/ui/settings/data"; import { after, before } from "@lib/api/patcher"; -import { getScreens, getYouData } from "@/core/ui/settings/data"; import { i18n } from "@lib/metro/common"; -import { Strings } from "@/core/i18n"; +import { findByProps } from "@metro/filters"; export default function patchYou() { const patches = new Array; @@ -53,7 +53,7 @@ function oldYouPatch(patches: Function[]) { const oldRelationships = miscModule.SETTING_RELATIONSHIPS; const oldRendererConfigs = miscModule.SETTING_RENDERER_CONFIGS; - + miscModule.SETTING_RELATIONSHIPS = { ...oldRelationships, ...data.relationships }; miscModule.SETTING_RENDERER_CONFIGS = { ...oldRendererConfigs, ...data.rendererConfigs }; @@ -78,7 +78,7 @@ function newYouPatch(patches: Function[]) { patches.push(before("type", settingsListComponents.SearchableSettingsList, ([{ sections }]) => manipulateSections(sections, data.getLayout()))); patches.push(after("getSettingListSearchResultItems", gettersModule, (_, ret) => { - ret.forEach((s: any) => screens.some(b => b.key === s.setting) && (s.breadcrumbs = [Strings.BUNNY])) + ret.forEach((s: any) => screens.some(b => b.key === s.setting) && (s.breadcrumbs = [Strings.BUNNY])); })); const oldRendererConfig = settingConstantsModule.SETTING_RENDERER_CONFIG; @@ -102,5 +102,5 @@ function manipulateSections(sections: any[], layout: any) { // Upload Logs button be gone const supportCategory = sections.find((i: any) => isLabel(i, i18n.Messages.SUPPORT)); - if (supportCategory) supportCategory.settings = supportCategory.settings.filter((s: string) => s !== "UPLOAD_DEBUG_LOGS") -} \ No newline at end of file + if (supportCategory) supportCategory.settings = supportCategory.settings.filter((s: string) => s !== "UPLOAD_DEBUG_LOGS"); +} diff --git a/src/core/vendettaObject.ts b/src/core/vendettaObject.ts index 771524c..414d706 100644 --- a/src/core/vendettaObject.ts +++ b/src/core/vendettaObject.ts @@ -1,19 +1,19 @@ -import patcher from "@lib/api/patcher"; +import * as assets from "@lib/api/assets"; +import * as commands from "@lib/api/commands"; import { getVendettaLoaderIdentity } from "@lib/api/native/loader"; -import { settings, loaderConfig } from "@lib/settings"; +import patcher from "@lib/api/patcher"; +import * as storage from "@lib/api/storage"; import * as debug from "@lib/debug"; import * as plugins from "@lib/managers/plugins"; import * as themes from "@lib/managers/themes"; -import * as commands from "@/lib/api/commands"; -import * as storage from "@/lib/api/storage"; -import * as metro from "@metro/filters"; +import { loaderConfig, settings } from "@lib/settings"; +import * as utils from "@lib/utils"; import * as common from "@metro/common"; +import * as metro from "@metro/filters"; +import * as alerts from "@ui/alerts"; +import * as color from "@ui/color"; import * as components from "@ui/components"; import * as toasts from "@ui/toasts"; -import * as alerts from "@ui/alerts"; -import * as assets from "@/lib/api/assets"; -import * as color from "@ui/color"; -import * as utils from "@lib/utils"; export const createVendettaObject = (unloads: any[]): any => ({ patcher: { @@ -21,7 +21,7 @@ export const createVendettaObject = (unloads: any[]): any => ({ after: patcher.after, instead: patcher.instead }, - metro: { + metro: { find: (filter: (m: any) => boolean) => metro.find(filter), findAll: (filter: (m: any) => boolean) => metro.findAll(filter), findByProps: (...props: any) => metro.findByProps(...props), @@ -60,9 +60,9 @@ export const createVendettaObject = (unloads: any[]): any => ({ constants: { DISCORD_SERVER: "https://discord.gg/n9QQ4XhhJP", GITHUB: "https://github.com/vendetta-mod", - PROXY_PREFIX: "https://vd-plugins.github.io/proxy", - HTTP_REGEX: /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/, - HTTP_REGEX_MULTI: /https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g, + PROXY_PREFIX: "https://vd-plugins.github.io/proxy", + HTTP_REGEX: /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/, + HTTP_REGEX_MULTI: /https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&//=]*)/g, DISCORD_SERVER_ID: "1015931589865246730", PLUGINS_CHANNEL_ID: "1091880384561684561", THEMES_CHANNEL_ID: "1091880434939482202", diff --git a/src/entry.ts b/src/entry.ts index 638212a..b96a63b 100644 --- a/src/entry.ts +++ b/src/entry.ts @@ -1,5 +1,5 @@ -import { instead } from "spitroast"; import { version } from "bunny-build"; +import { instead } from "spitroast"; // @ts-ignore - shut up fr globalThis.window = globalThis; @@ -8,11 +8,11 @@ const init = (async () => { try { // This logs in the native logging implementation, e.g. logcat console.log("Hello from Bunny! Pyon!"); - + // Make 'freeze' and 'seal' do nothing Object.freeze = Object.seal = Object; - await import(".").then((m) => m.default()); + await import(".").then(m => m.default()); } catch (e) { const { ClientInfoManager } = require("@lib/api/native/modules"); const stack = e instanceof Error ? e.stack : undefined; @@ -50,14 +50,14 @@ if (typeof globalThis.__r !== "undefined") { unpatch(); originalRequire(0); - callQueue.forEach(arg => - batchedBridge.getCallableModule(arg[0]) + callQueue.forEach(arg => + batchedBridge.getCallableModule(arg[0]) && batchedBridge.__callFunction(...arg)); }; startDiscord(); } - + var _requireFunc: any; // We can't set properties to 'this' during __r set for some reason Object.defineProperties(globalThis, { @@ -71,7 +71,7 @@ if (typeof globalThis.__r !== "undefined") { onceIndexRequired(v); _requireFunc = v; } else return v(a); - } + }; } }, __d: { @@ -83,7 +83,7 @@ if (typeof globalThis.__r !== "undefined") { } return this.value; }, - set(v) { this.value = v } + set(v) { this.value = v; } } }); -} \ No newline at end of file +} diff --git a/src/index.ts b/src/index.ts index 10927cf..d66e63a 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,15 +1,15 @@ +import initFixes from "@core/fixes"; +import { initCorePlugins } from "@core/plugins"; +import initSettings from "@core/ui/settings"; +import { patchAssets } from "@lib/api/assets"; +import { patchCommands } from "@lib/api/commands"; +import { isThemeSupported } from "@lib/api/native/loader"; import { patchLogHook } from "@lib/debug"; -import { patchCommands } from "@/lib/api/commands"; import { initPlugins } from "@lib/managers/plugins"; import { initThemes, patchChatBackground } from "@lib/managers/themes"; -import { patchAssets } from "@/lib/api/assets"; -import initSafeMode from "@ui/safeMode"; -import initSettings from "@/core/ui/settings"; -import initFixes from "@/core/fixes"; import logger from "@lib/utils/logger"; import initWindowObject from "@lib/windowObject"; -import { initCorePlugins } from "./core/plugins"; -import { isThemeSupported } from "./lib/api/native/loader"; +import initSafeMode from "@ui/safeMode"; export default async () => { // Themes @@ -41,4 +41,4 @@ export default async () => { // We good :) logger.log("Bunny is ready!"); -} +}; diff --git a/src/lib/api/assets.ts b/src/lib/api/assets.ts index 431b60f..656b2f6 100644 --- a/src/lib/api/assets.ts +++ b/src/lib/api/assets.ts @@ -1,5 +1,5 @@ -import { assets } from "@metro/common"; import { after } from "@lib/api/patcher"; +import { assets } from "@metro/common"; export const all: Record = {}; @@ -19,7 +19,7 @@ export function patchAssets() { if (!asset) break; if (all[asset.name]) continue; all[asset.name] = { ...asset, id: id }; - }; + } return unpatch; } @@ -27,4 +27,4 @@ export function patchAssets() { export const find = (filter: (a: any) => void): Asset | null | undefined => Object.values(all).find(filter); export const getAssetByName = (name: string): Asset => all[name]; export const getAssetByID = (id: number): Asset => assets.getAssetByID(id); -export const getAssetIDByName = (name: string) => all[name]?.id; \ No newline at end of file +export const getAssetIDByName = (name: string) => all[name]?.id; diff --git a/src/lib/api/commands/index.ts b/src/lib/api/commands/index.ts index f3b3305..2f33207 100644 --- a/src/lib/api/commands/index.ts +++ b/src/lib/api/commands/index.ts @@ -1,6 +1,7 @@ -import { commands as commandsModule } from "@metro/common"; import { after } from "@lib/api/patcher"; -import { ApplicationCommand, ApplicationCommandType, ApplicationCommandInputType } from "./types"; +import { commands as commandsModule } from "@metro/common"; + +import { ApplicationCommand, ApplicationCommandInputType, ApplicationCommandType } from "./types"; let commands: ApplicationCommand[] = []; @@ -11,9 +12,9 @@ export function patchCommands() { // Register core commands [ - // require("@/core/commands/eval"), - require("@/core/commands/debug"), - require("@/core/commands/plugins") + // require("@core/commands/eval"), + require("@core/commands/debug"), + require("@core/commands/plugins") ].forEach(r => registerCommand(r.default())); return () => { diff --git a/src/lib/api/commands/types.ts b/src/lib/api/commands/types.ts index 4029d3d..6dc3971 100644 --- a/src/lib/api/commands/types.ts +++ b/src/lib/api/commands/types.ts @@ -65,4 +65,4 @@ export interface CommandContext { export interface CommandResult { content: string; tts?: boolean; -} \ No newline at end of file +} diff --git a/src/lib/api/index.ts b/src/lib/api/index.ts index e67ed7f..80e1a0e 100644 --- a/src/lib/api/index.ts +++ b/src/lib/api/index.ts @@ -1,5 +1,5 @@ +export * as assets from "./assets"; export * as commands from "./commands"; export * as native from "./native"; +export * as patcher from "./patcher"; export * as storage from "./storage"; -export * as assets from "./assets"; -export * as patcher from "./patcher"; \ No newline at end of file diff --git a/src/lib/api/native/fs.ts b/src/lib/api/native/fs.ts index e4e4ad0..e9cecc2 100644 --- a/src/lib/api/native/fs.ts +++ b/src/lib/api/native/fs.ts @@ -70,4 +70,4 @@ export async function downloadFile(url: string, path: string, prefix = "pyoncord // const data = Buffer.from(arrayBuffer).toString("base64"); // return void await FileManager.writeFile("documents", `${prefix}${path}`, data, "base64"); -// } \ No newline at end of file +// } diff --git a/src/lib/api/native/index.ts b/src/lib/api/native/index.ts index 717425f..5a427db 100644 --- a/src/lib/api/native/index.ts +++ b/src/lib/api/native/index.ts @@ -1,3 +1,3 @@ export * as fs from "./fs"; -export * as modules from "./modules"; export * as loader from "./loader"; +export * as modules from "./modules"; diff --git a/src/lib/api/native/loader.ts b/src/lib/api/native/loader.ts index 5e9a26c..d43f461 100644 --- a/src/lib/api/native/loader.ts +++ b/src/lib/api/native/loader.ts @@ -1,4 +1,4 @@ -import { Theme } from "../../managers/themes"; +import { Theme } from "@lib/managers/themes"; // @ts-ignore const pyonLoaderIdentity = globalThis.__PYON_LOADER__; @@ -15,8 +15,8 @@ export interface VendettaLoaderIdentity { }, themes?: { prop: string; - } - } + }; + }; } export function isVendettaLoader() { @@ -33,13 +33,13 @@ function polyfillVendettaLoaderIdentity() { const loader = { name: pyonLoaderIdentity.loaderName, features: {} as Record - } + }; if (isLoaderConfigSupported()) loader.features.loaderConfig = true; if (isSysColorsSupported()) { loader.features.syscolors = { prop: "__vendetta_syscolors" - } + }; Object.defineProperty(globalThis, "__vendetta_syscolors", { get: () => getSysColors(), @@ -49,7 +49,7 @@ function polyfillVendettaLoaderIdentity() { if (isThemeSupported()) { loader.features.themes = { prop: "__vendetta_theme" - } + }; Object.defineProperty(globalThis, "__vendetta_theme", { get: () => getStoredTheme(), @@ -126,7 +126,7 @@ export function getStoredTheme(): Theme | null { export function getThemeFilePath() { if (isPyonLoader()) { - return "pyoncord/current-theme.json" + return "pyoncord/current-theme.json"; } else if (isVendettaLoader()) { return "vendetta_theme.json"; } @@ -157,7 +157,7 @@ export function getReactDevToolsVersion() { if (!isReactDevToolsPreloaded()) return null; if (isVendettaLoader()) { - return vendettaLoaderIdentity!!.features.devtools!!.version + return vendettaLoaderIdentity!!.features.devtools!!.version; } return null; diff --git a/src/lib/api/native/modules.ts b/src/lib/api/native/modules.ts index b365b0b..c16634b 100644 --- a/src/lib/api/native/modules.ts +++ b/src/lib/api/native/modules.ts @@ -80,5 +80,5 @@ export const FileManager = (nmp.DCDFileManager ?? nmp.RTNFileManager) as FileMan export const ClientInfoManager = nmp.InfoDictionaryManager ?? nmp.RTNClientInfoManager; //! 173.14 renamed this to RTNDeviceManager. export const DeviceManager = nmp.DCDDeviceManager ?? nmp.RTNDeviceManager; -export const BundleUpdaterManager = nmp.BundleUpdaterManager; -export const ThemeManager = nmp.RTNThemeManager ?? nmp.DCDTheme; \ No newline at end of file +export const { BundleUpdaterManager } = nmp; +export const ThemeManager = nmp.RTNThemeManager ?? nmp.DCDTheme; diff --git a/src/lib/api/patcher.ts b/src/lib/api/patcher.ts index fbff9d6..e32dae9 100644 --- a/src/lib/api/patcher.ts +++ b/src/lib/api/patcher.ts @@ -1,4 +1,4 @@ import * as _spitroast from "spitroast"; export * from "spitroast"; -export default { ..._spitroast }; \ No newline at end of file +export default { ..._spitroast }; diff --git a/src/lib/api/storage/backends.ts b/src/lib/api/storage/backends.ts index 325e842..07f7fe6 100644 --- a/src/lib/api/storage/backends.ts +++ b/src/lib/api/storage/backends.ts @@ -1,12 +1,12 @@ +import { FileManager, MMKVManager } from "@lib/api/native/modules"; import { ReactNative as RN } from "@metro/common"; -import { FileManager, MMKVManager } from "../native/modules"; export interface StorageBackend { get: () => unknown | Promise; set: (data: unknown) => void | Promise; } -const ILLEGAL_CHARS_REGEX = /[<>:"\/\\|?*]/g; +const ILLEGAL_CHARS_REGEX = /[<>:"/\\|?*]/g; const filePathFixer = (file: string): string => RN.Platform.select({ default: file, @@ -16,11 +16,11 @@ const filePathFixer = (file: string): string => RN.Platform.select({ const getMMKVPath = (name: string): string => { if (ILLEGAL_CHARS_REGEX.test(name)) { // Replace forbidden characters with hyphens - name = name.replace(ILLEGAL_CHARS_REGEX, '-').replace(/-+/g, '-'); + name = name.replace(ILLEGAL_CHARS_REGEX, "-").replace(/-+/g, "-"); } return `vd_mmkv/${name}`; -} +}; export const purgeStorage = async (store: string) => { if (await MMKVManager.getItem(store)) { @@ -31,7 +31,7 @@ export const purgeStorage = async (store: string) => { if (await FileManager.fileExists(`${FileManager.getConstants().DocumentsDirPath}/${mmkvPath}`)) { await FileManager.removeFile?.("documents", mmkvPath); } -} +}; export const createMMKVBackend = (store: string, defaultData = {}) => { const mmkvPath = getMMKVPath(store); @@ -47,7 +47,7 @@ export const createMMKVBackend = (store: string, defaultData = {}) => { if (oldData === "!!LARGE_VALUE!!") { const cachePath = `${FileManager.getConstants().CacheDirPath}/mmkv/${store}`; if (await FileManager.fileExists(cachePath)) { - oldData = await FileManager.readFile(cachePath, "utf8") + oldData = await FileManager.readFile(cachePath, "utf8"); } else { console.log(`${store}: Experienced data loss :(`); oldData = defaultStr; @@ -67,7 +67,7 @@ export const createMMKVBackend = (store: string, defaultData = {}) => { console.log(`Successfully migrated ${store} store from MMKV storage to fs`); } })()); -} +}; export const createFileBackend = (file: string, defaultData = {}, migratePromise?: Promise): StorageBackend => { return { @@ -86,7 +86,7 @@ export const createFileBackend = (file: string, defaultData = {}, migratePromise await FileManager.writeFile("documents", filePathFixer(file), JSON.stringify(defaultData), "utf8"); return JSON.parse(await FileManager.readFile(path, "utf8")); }, - set: async (data) => { + set: async data => { await migratePromise; await FileManager.writeFile("documents", filePathFixer(file), JSON.stringify(data), "utf8"); } diff --git a/src/lib/api/storage/index.ts b/src/lib/api/storage/index.ts index 1c0af0a..157f18d 100644 --- a/src/lib/api/storage/index.ts +++ b/src/lib/api/storage/index.ts @@ -1,5 +1,5 @@ -import { createEmitter, Emitter } from "@lib/utils/emitter"; import { StorageBackend } from "@lib/api/storage/backends"; +import { createEmitter, Emitter } from "@lib/utils/emitter"; const emitterSymbol = Symbol.for("vendetta.storage.emitter"); const syncAwaitSymbol = Symbol.for("vendetta.storage.accessor"); @@ -59,7 +59,7 @@ export function createProxy(target: any = {}): { proxy: any; emitter: Emitter } export function useProxy(storage: T): T { const emitter = (storage as any)[emitterSymbol] as Emitter; - const [, forceUpdate] = React.useReducer((n) => ~n, 0); + const [, forceUpdate] = React.useReducer(n => ~n, 0); React.useEffect(() => { const listener = () => forceUpdate(); @@ -93,16 +93,16 @@ export function wrapSync>(store: T): Awaited { const awaitQueue: (() => void)[] = []; const awaitInit = (cb: () => void) => (awaited ? cb() : awaitQueue.push(cb)); - store.then((v) => { + store.then(v => { awaited = v; - awaitQueue.forEach((cb) => cb()); + awaitQueue.forEach(cb => cb()); }); return new Proxy({} as Awaited, { ...Object.fromEntries( Object.getOwnPropertyNames(Reflect) // @ts-expect-error - .map((k) => [k, (t: T, ...a: any[]) => Reflect[k](awaited ?? t, ...a)]) + .map(k => [k, (t: T, ...a: any[]) => Reflect[k](awaited ?? t, ...a)]) ), get(target, prop, recv) { if (prop === syncAwaitSymbol) return awaitInit; @@ -111,6 +111,6 @@ export function wrapSync>(store: T): Awaited { }); } -export const awaitSyncWrapper = (store: any) => new Promise((res) => store[syncAwaitSymbol](res)); +export const awaitSyncWrapper = (store: any) => new Promise(res => store[syncAwaitSymbol](res)); export * from "@lib/api/storage/backends"; diff --git a/src/lib/debug.ts b/src/lib/debug.ts index d5c6d2d..465ced2 100644 --- a/src/lib/debug.ts +++ b/src/lib/debug.ts @@ -1,14 +1,14 @@ -import { ReactNative as RN } from "@metro/common"; +import { getAssetIDByName } from "@lib/api/assets"; +import { getLoaderName, isThemeSupported } from "@lib/api/native/loader"; +import { BundleUpdaterManager, ClientInfoManager, DeviceManager } from "@lib/api/native/modules"; import { after } from "@lib/api/patcher"; import { getThemeFromLoader, selectTheme } from "@lib/managers/themes"; -import { ClientInfoManager, DeviceManager, BundleUpdaterManager } from "@lib/api/native/modules"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { showToast } from "@ui/toasts"; import { settings } from "@lib/settings"; import logger from "@lib/utils/logger"; -import { getLoaderName, isThemeSupported } from "./api/native/loader"; -import type { PlatformConstants } from "react-native"; +import { ReactNative as RN } from "@metro/common"; +import { showToast } from "@ui/toasts"; import { version } from "bunny-build"; +import type { PlatformConstants } from "react-native"; export let socket: WebSocket; export interface RNConstants extends PlatformConstants { @@ -30,7 +30,7 @@ export interface RNConstants extends PlatformConstants { } export async function toggleSafeMode() { - settings.safeMode = { ...settings.safeMode, enabled: !settings.safeMode?.enabled } + settings.safeMode = { ...settings.safeMode, enabled: !settings.safeMode?.enabled }; if (isThemeSupported()) { if (getThemeFromLoader()?.id) settings.safeMode!.currentThemeId = getThemeFromLoader()!.id; if (settings.safeMode?.enabled) { @@ -68,7 +68,7 @@ export function connectToDebugger(url: string) { } export function patchLogHook() { - const unpatch = after("nativeLoggingHook", globalThis, (args) => { + const unpatch = after("nativeLoggingHook", globalThis, args => { if (socket?.readyState === WebSocket.OPEN) socket.send(JSON.stringify({ message: args[0], level: args[1] })); logger.log(args[0]); }); @@ -76,7 +76,7 @@ export function patchLogHook() { return () => { socket && socket.close(); unpatch(); - } + }; } export const versionHash = version; @@ -111,7 +111,7 @@ export function getDebugInfo() { }, hermes: { version: hermesVer, - buildType: hermesProps["Build"], + buildType: hermesProps.Build, bytecodeVersion: hermesProps["Bytecode Version"], }, ...RN.Platform.select( @@ -151,5 +151,5 @@ export function getDebugInfo() { } } )! - } + }; } diff --git a/src/lib/managers/plugins.ts b/src/lib/managers/plugins.ts index a3e6c2f..cd10c5b 100644 --- a/src/lib/managers/plugins.ts +++ b/src/lib/managers/plugins.ts @@ -1,9 +1,9 @@ -import { safeFetch } from "@lib/utils"; -import { awaitSyncWrapper, createMMKVBackend, createStorage, purgeStorage, wrapSync } from "@/lib/api/storage"; -import logger, { logModule } from "@lib/utils/logger"; +import { allSettled } from "@core/polyfills"; +import { awaitSyncWrapper, createMMKVBackend, createStorage, purgeStorage, wrapSync } from "@lib/api/storage"; import { settings } from "@lib/settings"; -import { Author } from "../utils/types"; -import { allSettled } from "@/core/polyfills"; +import { safeFetch } from "@lib/utils"; +import logger, { logModule } from "@lib/utils/logger"; +import { Author } from "@lib/utils/types"; type EvaledPlugin = { onLoad?(): void; @@ -53,7 +53,7 @@ export async function fetchPlugin(id: string) { try { // by polymanifest spec, plugins should always specify their main file, but just in case pluginJs = await (await safeFetch(id + (pluginManifest.main || "index.js"), { cache: "no-store" })).text(); - } catch {} // Empty catch, checked below + } catch { } // Empty catch, checked below } if (!pluginJs && !existingPlugin) throw new Error(`Failed to fetch JS for ${id}`); @@ -88,7 +88,7 @@ export async function evalPlugin(plugin: BunnyPlugin) { const pluginString = `vendetta=>{return ${plugin.js}}\n//# sourceURL=${plugin.id}`; const raw = (0, eval)(pluginString)(vendettaForPlugins); - const ret = typeof raw == "function" ? raw() : raw; + const ret = typeof raw === "function" ? raw() : raw; return ret?.default ?? ret ?? {}; } @@ -152,10 +152,10 @@ export async function initPlugins() { if (!settings.safeMode?.enabled) { // Loop over any plugin that is enabled, update it if allowed, then start it. - await allSettled(allIds.filter(pl => plugins[pl].enabled).map(async (pl) => (plugins[pl].update && await fetchPlugin(pl).catch((e: Error) => logger.error(e.message)), await startPlugin(pl)))); + await allSettled(allIds.filter(pl => plugins[pl].enabled).map(async pl => (plugins[pl].update && await fetchPlugin(pl).catch((e: Error) => logger.error(e.message)), await startPlugin(pl)))); // Wait for the above to finish, then update all disabled plugins that are allowed to. allIds.filter(pl => !plugins[pl].enabled && plugins[pl].update).forEach(pl => fetchPlugin(pl)); - }; + } return stopAllPlugins; } diff --git a/src/lib/managers/themes.ts b/src/lib/managers/themes.ts index 5f12fb9..7c9a7d8 100644 --- a/src/lib/managers/themes.ts +++ b/src/lib/managers/themes.ts @@ -1,13 +1,13 @@ // TODO: rewrite most of this -import { ReactNative as RN, chroma } from "@metro/common"; -import { findInReactTree, safeFetch } from "@lib/utils"; -import { find, findByName, findByProps, findByStoreName } from "@metro/filters"; -import { after, before, instead } from "@lib/api/patcher"; -import { createFileBackend, createMMKVBackend, createStorage, wrapSync, awaitSyncWrapper } from "@/lib/api/storage"; -import logger from "@lib/utils/logger"; +import { getStoredTheme, getThemeFilePath } from "@lib/api/native/loader"; import { ThemeManager } from "@lib/api/native/modules"; -import { getStoredTheme, getThemeFilePath } from "../api/native/loader"; -import { Author } from "../utils/types"; +import { after, before, instead } from "@lib/api/patcher"; +import { awaitSyncWrapper, createFileBackend, createMMKVBackend, createStorage, wrapSync } from "@lib/api/storage"; +import { findInReactTree, safeFetch } from "@lib/utils"; +import logger from "@lib/utils/logger"; +import { Author } from "@lib/utils/types"; +import { chroma, ReactNative as RN } from "@metro/common"; +import { find, findByName, findByProps, findByStoreName } from "@metro/filters"; export interface ThemeData { name: string; @@ -24,7 +24,7 @@ export interface ThemeData { * `CHAT_BACKGROUND` of semanticColors alpha value will be ignored when this is specified */ alpha?: number; - } + }; } export interface Theme { @@ -54,7 +54,7 @@ const semanticAlternativeMap: Record = { "BG_SURFACE_OVERLAY": "BACKGROUND_FLOATING", "BG_SURFACE_OVERLAY_TMP": "BACKGROUND_FLOATING", "BG_SURFACE_RAISED": "BACKGROUND_MOBILE_PRIMARY" -} +}; async function writeTheme(theme: Theme | {}) { if (typeof theme !== "object") throw new Error("Theme must be an object"); @@ -78,7 +78,7 @@ export function patchChatBackground() { children: ret, })), after("render", MessagesWrapper.prototype, (_, ret) => { - const Messages = findInReactTree(ret, (x) => "HACK_fixModalInteraction" in x?.props && x?.props?.style); + const Messages = findInReactTree(ret, x => x && "HACK_fixModalInteraction" in x.props && x?.props?.style); if (Messages) Messages.props.style = Object.assign( RN.StyleSheet.flatten(Messages.props.style ?? {}), @@ -100,7 +100,7 @@ function normalizeToHex(colorString: string): string { const color = Number(RN.processColor(colorString)); return chroma.rgb( - color >> 16 & 0xff, // red + color >> 16 & 0xff, // red color >> 8 & 0xff, // green color & 0xff, // blue color >> 24 & 0xff // alpha @@ -110,7 +110,7 @@ function normalizeToHex(colorString: string): string { // Process data for some compatiblity with native side function processData(data: ThemeData) { if (data.semanticColors) { - const semanticColors = data.semanticColors; + const { semanticColors } = data; for (const key in semanticColors) { for (const index in semanticColors[key]) { @@ -120,7 +120,7 @@ function processData(data: ThemeData) { } if (data.rawColors) { - const rawColors = data.rawColors; + const { rawColors } = data; for (const key in rawColors) { data.rawColors[key] = normalizeToHex(rawColors[key]); @@ -227,7 +227,7 @@ function patchColor() { configurable: true, enumerable: true, get: () => { - return enabled ? currentTheme?.data?.rawColors?.[k] ?? origRawColor[k] : origRawColor[k] + return enabled ? currentTheme?.data?.rawColors?.[k] ?? origRawColor[k] : origRawColor[k]; } }); }); @@ -258,7 +258,7 @@ function patchColor() { }); // Prevent setting to real Discord settings - before("set", mmkvStorage, (args) => { + before("set", mmkvStorage, args => { if (!args[1]) return; const key = args[0]; @@ -267,11 +267,11 @@ function patchColor() { const interceptors: Record void> = ({ SelectivelySyncedUserSettingsStore: () => { if (value._state?.appearance?.settings?.theme) { - const { theme } = value._state?.appearance?.settings; + const { theme } = value._state?.appearance?.settings ?? {}; if (isDiscordTheme(theme)) { vdThemeFallback = theme; } else { - value._state.appearance.settings.theme = vdThemeFallback; + value._state.appearance.settings.theme = vdThemeFallback; } } }, @@ -282,8 +282,8 @@ function patchColor() { selectTheme("default"); vdThemeFallback = theme; } else { - value._state.theme = vdThemeFallback; - } + value._state.theme = vdThemeFallback; + } } } }); @@ -299,9 +299,9 @@ function patchColor() { if (args[1] !== vdKey) return orig(...args); const [name, colorDef] = extractInfo(vdThemeFallback, args[1]); - + const themeIndex = vdThemeFallback === "midnight" ? 2 : vdThemeFallback === "light" ? 1 : 0; - + //! As of 192.7, Tabs v2 uses BG_ semantic colors instead of BACKGROUND_ ones const alternativeName = semanticAlternativeMap[name] ?? name; @@ -345,7 +345,7 @@ export function applyTheme(appliedTheme: Theme | null, fallbackTheme?: string, u Object.keys(color.Shadow).forEach(k => color.Shadow[k][vdKey] = color.Shadow[k][fallbackTheme!!]); Object.keys(color.SemanticColor).forEach(k => { - color.SemanticColor[k][vdKey] = { + color.SemanticColor[k][vdKey] = { ...color.SemanticColor[k][fallbackTheme!!], override: appliedTheme?.data?.semanticColors?.[k]?.[0] }; @@ -374,4 +374,4 @@ function extractInfo(themeName: string, colorObj: any): [name: string, colorDef: const colorDef = color.SemanticColor[propName]; return [propName, colorDef[themeName]]; -} \ No newline at end of file +} diff --git a/src/lib/metro/common.ts b/src/lib/metro/common.ts index 84e88aa..e64e89d 100644 --- a/src/lib/metro/common.ts +++ b/src/lib/metro/common.ts @@ -18,11 +18,11 @@ function createThemedStyleSheet>(sheet: T) { for (const key in sheet) { // @ts-ignore sheet[key] = new Proxy(ReactNative.StyleSheet.flatten(sheet[key]), { - get(target, prop, receiver) { + get(target, prop, receiver) { const res = Reflect.get(target, prop, receiver); - return colorResolver.isSemanticColor(res) + return colorResolver.isSemanticColor(res) ? colorResolver.resolveSemanticColor(ThemeStore.theme, res) - : res + : res; } }); } diff --git a/src/lib/metro/filters.ts b/src/lib/metro/filters.ts index 2d6242e..0785232 100644 --- a/src/lib/metro/filters.ts +++ b/src/lib/metro/filters.ts @@ -26,7 +26,7 @@ for (const key in window.modules) { const id = key as MetroModulesIndex; const module = window.modules[id]?.publicModule?.exports; - if (!module || module === window || module["proxygone"] === null) { + if (!module || module === window || module.proxygone === null) { blacklist(id); continue; } @@ -44,9 +44,9 @@ const onModuleCheck = (exports: any) => { } catch { return args[0]; } - }) + }); } -} +}; // Function to filter through modules const filterModules = (modules: MetroModules, single = false) => (filter: (m: any) => boolean) => { @@ -81,13 +81,13 @@ const filterModules = (modules: MetroModules, single = false) => (filter: (m: an } if (!single) return found; -} +}; -export const modules = window.modules; +export const { modules } = window; export const find = filterModules(modules, true); export const findAll = filterModules(modules); -const propsFilter = (props: (string | symbol)[]) => (m: any) => props.every((p) => m[p] !== undefined); +const propsFilter = (props: (string | symbol)[]) => (m: any) => props.every(p => m[p] !== undefined); const nameFilter = (name: string, defaultExp: boolean) => (defaultExp ? (m: any) => m?.name === name : (m: any) => m?.default?.name === name); const dNameFilter = (displayName: string, defaultExp: boolean) => (defaultExp ? (m: any) => m?.displayName === displayName : (m: any) => m?.default?.displayName === displayName); const tNameFilter = (typeName: string, defaultExp: boolean) => (defaultExp ? (m: any) => m?.type?.name === typeName : (m: any) => m?.default?.type?.name === typeName); diff --git a/src/lib/metro/index.ts b/src/lib/metro/index.ts index cfaa07d..4c0681f 100644 --- a/src/lib/metro/index.ts +++ b/src/lib/metro/index.ts @@ -1,3 +1,3 @@ +export * as common from "./common"; export * from "./filters"; export * as filters from "./filters"; -export * as common from "./common"; \ No newline at end of file diff --git a/src/lib/settings.ts b/src/lib/settings.ts index 63e08ea..4ef5972 100644 --- a/src/lib/settings.ts +++ b/src/lib/settings.ts @@ -1,4 +1,5 @@ -import { createFileBackend, createMMKVBackend, createStorage, wrapSync } from "@/lib/api/storage"; +import { createFileBackend, createMMKVBackend, createStorage, wrapSync } from "@lib/api/storage"; + import { getLoaderConfigPath } from "./api/native/loader"; export interface Settings { diff --git a/src/lib/ui/alerts.ts b/src/lib/ui/alerts.ts index 77ca2fd..085eee2 100644 --- a/src/lib/ui/alerts.ts +++ b/src/lib/ui/alerts.ts @@ -1,13 +1,13 @@ +import { ButtonColors } from "@lib/utils/types"; import { findByProps } from "@metro/filters"; import InputAlert, { InputAlertProps } from "@ui/components/InputAlert"; -import { ButtonColors } from "@/lib/utils/types"; const Alerts = findByProps("openLazy", "close"); interface InternalConfirmationAlertOptions extends Omit { content?: ConfirmationAlertOptions["content"]; body?: ConfirmationAlertOptions["content"]; -}; +} export interface ConfirmationAlertOptions { title?: string; @@ -31,7 +31,7 @@ export function showConfirmationAlert(options: ConfirmationAlertOptions) { internalOptions.isDismissable ??= true; return Alerts.show(internalOptions); -}; +} export const showCustomAlert = (component: React.ComponentType, props: any) => Alerts.openLazy({ importer: async () => () => React.createElement(component, props), diff --git a/src/lib/ui/color.ts b/src/lib/ui/color.ts index 0ab1100..6e98a1c 100644 --- a/src/lib/ui/color.ts +++ b/src/lib/ui/color.ts @@ -1,17 +1,17 @@ -import { constants } from "@metro/common"; import { color } from "@lib/managers/themes"; +import { constants } from "@metro/common"; //! This module is only found on 165.0+, under the assumption that iOS 165.0 is the same as Android 165.0. //* In 167.1, most if not all traces of the old color modules were removed. //* In 168.6, Discord restructured EVERYTHING again. SemanticColor on this module no longer works when passed to a stylesheet. We must now use what you see below. //* In 173.10, Discord restructured a lot of the app. These changes included making the color module impossible to early-find. -//? To stop duplication, it is now exported in our theming code. -//? These comments are preserved for historical purposes. +// ? To stop duplication, it is now exported in our theming code. +// ? These comments are preserved for historical purposes. // const colorModule = findByProps("colors", "meta"); -//? SemanticColor and default.colors are effectively ThemeColorMap +// ? SemanticColor and default.colors are effectively ThemeColorMap export const semanticColors = (color?.default?.colors ?? constants?.ThemeColorMap); -//? RawColor and default.unsafe_rawColors are effectively Colors +// ? RawColor and default.unsafe_rawColors are effectively Colors //* Note that constants.Colors does still appear to exist on newer versions despite Discord not internally using it - what the fuck? -export const rawColors = (color?.default?.unsafe_rawColors ?? constants?.Colors); \ No newline at end of file +export const rawColors = (color?.default?.unsafe_rawColors ?? constants?.Colors); diff --git a/src/lib/ui/components/Codeblock.tsx b/src/lib/ui/components/Codeblock.tsx index 3c51001..a6d7c20 100644 --- a/src/lib/ui/components/Codeblock.tsx +++ b/src/lib/ui/components/Codeblock.tsx @@ -1,4 +1,4 @@ -import { ReactNative as RN, stylesheet, constants } from "@metro/common"; +import { constants,ReactNative as RN, stylesheet } from "@metro/common"; import { semanticColors } from "@ui/color"; export interface CodeblockProps { @@ -22,14 +22,14 @@ const styles = stylesheet.createThemedStyleSheet({ }); // iOS doesn't support the selectable property on RN.Text... -const InputBasedCodeblock = ({ style, children }: CodeblockProps) => -const TextBasedCodeblock = ({ selectable, style, children }: CodeblockProps) => {children} +const InputBasedCodeblock = ({ style, children }: CodeblockProps) => ; +const TextBasedCodeblock = ({ selectable, style, children }: CodeblockProps) => {children}; export default function Codeblock({ selectable, style, children }: CodeblockProps) { if (!selectable) return ; - + return RN.Platform.select({ ios: , default: , }); -} \ No newline at end of file +} diff --git a/src/lib/ui/components/ContextMenu.tsx b/src/lib/ui/components/ContextMenu.tsx index 8615587..c6fc708 100644 --- a/src/lib/ui/components/ContextMenu.tsx +++ b/src/lib/ui/components/ContextMenu.tsx @@ -1,6 +1,6 @@ -import { findByProps } from "@lib/metro/filters"; import { instead } from "@lib/api/patcher"; -import { ReactNative } from "@/lib/metro/common"; +import { ReactNative } from "@lib/metro/common"; +import { findByProps } from "@lib/metro/filters"; const { ContextMenu: _ContextMenu } = findByProps("ContextMenu"); const { AccessibilityInfo } = ReactNative; @@ -10,7 +10,7 @@ type ContextMenuItem = { iconSource: import("react-native").ImageSourcePropType, action: () => unknown, [key: string]: any; -} +}; type ContextMenuProps = { triggerOnLongPress: boolean; @@ -19,7 +19,7 @@ type ContextMenuProps = { title: string; children: React.FC; [key: string]: any; -} +}; export default function ContextMenu(props: ContextMenuProps) { const ref = React.useRef(null); @@ -41,12 +41,12 @@ export default function ContextMenu(props: ContextMenuProps) { unpatch(); // and skip this call } }); - } + }; }, []); return <_ContextMenu {...props} /> - -} \ No newline at end of file + ; +} diff --git a/src/lib/ui/components/ErrorBoundary.tsx b/src/lib/ui/components/ErrorBoundary.tsx index 19c4626..1fddeea 100644 --- a/src/lib/ui/components/ErrorBoundary.tsx +++ b/src/lib/ui/components/ErrorBoundary.tsx @@ -1,6 +1,6 @@ -import { Strings } from "@/core/i18n"; +import { Strings } from "@core/i18n"; import { React, ReactNative as RN, stylesheet } from "@metro/common"; -import { Forms, Button, Codeblock } from "@ui/components"; +import { Button, Codeblock, Forms } from "@ui/components"; interface ErrorBoundaryState { hasErr: boolean; @@ -47,6 +47,6 @@ export default class ErrorBoundary extends React.Component - ) + ); } -} \ No newline at end of file +} diff --git a/src/lib/ui/components/InputAlert.tsx b/src/lib/ui/components/InputAlert.tsx index 7ce12f1..6e7be16 100644 --- a/src/lib/ui/components/InputAlert.tsx +++ b/src/lib/ui/components/InputAlert.tsx @@ -1,6 +1,6 @@ -import { ButtonColors } from "@/lib/utils/types"; +import { ButtonColors } from "@lib/utils/types"; import { findByProps } from "@metro/filters"; -import { Forms, Alert } from "@ui/components"; +import { Alert, Forms } from "@ui/components"; const { FormInput } = Forms; const Alerts = findByProps("openLazy", "close"); @@ -21,14 +21,14 @@ export default function InputAlert({ title, confirmText, confirmColor, onConfirm const [error, setError] = React.useState(""); function onConfirmWrapper() { - const asyncOnConfirm = Promise.resolve(onConfirm(value)) + const asyncOnConfirm = Promise.resolve(onConfirm(value)); asyncOnConfirm.then(() => { Alerts.close(); }).catch((e: Error) => { setError(e.message); }); - }; + } return ( { + onChange={(v: string | { text: string; }) => { setValue(typeof v === "string" ? v : v.text); if (error) setError(""); }} @@ -57,4 +57,4 @@ export default function InputAlert({ title, confirmText, confirmColor, onConfirm /> ); -}; \ No newline at end of file +} diff --git a/src/lib/ui/components/Search.tsx b/src/lib/ui/components/Search.tsx index b3acb70..b70c20a 100644 --- a/src/lib/ui/components/Search.tsx +++ b/src/lib/ui/components/Search.tsx @@ -1,8 +1,8 @@ +import { Strings } from "@core/i18n"; +import { getAssetIDByName } from "@lib/api/assets"; import { ReactNative as RN } from "@metro/common"; import { findByProps } from "@metro/filters"; import ErrorBoundary from "@ui/components/ErrorBoundary"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { Strings } from "@/core/i18n"; const { TextInput } = findByProps("TableRow"); @@ -14,16 +14,16 @@ export interface SearchProps { function SearchIcon() { - return + return ; } export default ({ onChangeText, placeholder, style }: SearchProps) => { const [query, setQuery] = React.useState(""); - + const onChange = (value: string) => { setQuery(value); onChangeText?.(value); - } + }; return @@ -38,5 +38,5 @@ export default ({ onChangeText, placeholder, style }: SearchProps) => { value={query} /> - -}; \ No newline at end of file + ; +}; diff --git a/src/lib/ui/components/Summary.tsx b/src/lib/ui/components/Summary.tsx index 378bc28..528a390 100644 --- a/src/lib/ui/components/Summary.tsx +++ b/src/lib/ui/components/Summary.tsx @@ -1,6 +1,6 @@ +import { getAssetIDByName } from "@lib/api/assets"; +import { findByProps } from "@lib/metro/filters"; import { ReactNative as RN } from "@metro/common"; -import { getAssetIDByName } from "@/lib/api/assets"; -import { findByProps } from "@/lib/metro/filters"; const { FormRow } = findByProps("FormRow"); const { TableRow } = findByProps("TableRow"); @@ -30,5 +30,5 @@ export default function Summary({ label, icon, noPadding = false, noAnimation = {children} } - ) -} \ No newline at end of file + ); +} diff --git a/src/lib/ui/components/index.ts b/src/lib/ui/components/index.ts index 874cc7b..874968c 100644 --- a/src/lib/ui/components/index.ts +++ b/src/lib/ui/components/index.ts @@ -1,4 +1,3 @@ -import { ReactNative as RN } from "@metro/common"; import { findByDisplayName, findByName, findByProps } from "@metro/filters"; // Discord @@ -11,7 +10,7 @@ export const HelpMessage = findByName("HelpMessage"); export const SafeAreaView = findByProps("useSafeAreaInsets").SafeAreaView as any; // Vendetta -export { default as Summary } from "@ui/components/Summary"; -export { default as ErrorBoundary } from "@ui/components/ErrorBoundary"; export { default as Codeblock } from "@ui/components/Codeblock"; -export { default as Search } from "@ui/components/Search"; \ No newline at end of file +export { default as ErrorBoundary } from "@ui/components/ErrorBoundary"; +export { default as Search } from "@ui/components/Search"; +export { default as Summary } from "@ui/components/Summary"; diff --git a/src/lib/ui/index.ts b/src/lib/ui/index.ts index 38e5400..1e93d9b 100644 --- a/src/lib/ui/index.ts +++ b/src/lib/ui/index.ts @@ -1,5 +1,4 @@ export * as alerts from "./alerts"; export * as color from "./color"; -export * as toasts from "./toasts"; -export * as settings from "../../core/ui/settings"; export * as components from "./components"; +export * as toasts from "./toasts"; diff --git a/src/lib/ui/safeMode.tsx b/src/lib/ui/safeMode.tsx index 348360d..98ff81a 100644 --- a/src/lib/ui/safeMode.tsx +++ b/src/lib/ui/safeMode.tsx @@ -1,12 +1,12 @@ -import { ReactNative as RN, stylesheet } from "@metro/common"; -import { findByName, findByProps, findByStoreName } from "@metro/filters"; +import { DeviceManager } from "@lib/api/native/modules"; import { after } from "@lib/api/patcher"; import { toggleSafeMode } from "@lib/debug"; -import { DeviceManager } from "@lib/api/native/modules"; +import { settings } from "@lib/settings"; +import { ButtonColors } from "@lib/utils/types"; +import { ReactNative as RN, stylesheet } from "@metro/common"; +import { findByName, findByProps, findByStoreName } from "@metro/filters"; import { semanticColors } from "@ui/color"; import { Button, Codeblock, ErrorBoundary as _ErrorBoundary, SafeAreaView } from "@ui/components"; -import { settings } from "@lib/settings"; -import { ButtonColors } from "@/lib/utils/types"; const ErrorBoundary = findByName("ErrorBoundary"); @@ -80,8 +80,8 @@ export default () => after("render", ErrorBoundary.prototype, function (this: an { text: "Restart Discord", onPress: this.handleReload }, ...!settings.safeMode?.enabled ? [{ text: "Restart in Safe Mode", onPress: toggleSafeMode }] : [], { text: "Retry Render", color: ButtonColors.RED, onPress: () => this.setState({ info: null, error: null }) }, - ] - + ]; + return ( <_ErrorBoundary> @@ -98,7 +98,7 @@ export default () => after("render", ErrorBoundary.prototype, function (this: an { this.setState({ activeTab: tab }) }} + onTabSelected={(tab: string) => { this.setState({ activeTab: tab }); }} /> after("render", ErrorBoundary.prototype, function (this: an size={button.size ?? "small"} onPress={button.onPress} style={DeviceManager.isTablet ? { flex: `0.${buttons.length}`, marginLeft: buttonIndex } : { marginTop: buttonIndex }} - /> + />; })} - ) + ); }); diff --git a/src/lib/ui/toasts.ts b/src/lib/ui/toasts.ts index ef59834..ef56b61 100644 --- a/src/lib/ui/toasts.ts +++ b/src/lib/ui/toasts.ts @@ -1,11 +1,11 @@ -import { findByProps } from "@metro/filters"; +import { getAssetIDByName } from "@lib/api/assets"; import { ReactNative, toasts } from "@metro/common"; -import { getAssetIDByName } from "@/lib/api/assets"; +import { findByProps } from "@metro/filters"; const { uuid4 } = findByProps("uuid4"); export const showToast = (content: string, asset?: number) => toasts.open({ - //? In build 182205/44707, Discord changed their toasts, source is no longer used, rather icon, and a key is needed. + // ? In build 182205/44707, Discord changed their toasts, source is no longer used, rather icon, and a key is needed. // TODO: We could probably have the developer specify a key themselves, but this works to fix toasts key: `vd-toast-${uuid4()}`, content: content, @@ -18,4 +18,4 @@ showToast.showCopyToClipboard = (message = "Copied plugin URL to clipboard.") => if (ReactNative.Platform.OS !== "android" || ReactNative.Platform.Version <= 32) { showToast(message, getAssetIDByName("toast_copy_link")); } -} \ No newline at end of file +}; diff --git a/src/lib/utils/constants.ts b/src/lib/utils/constants.ts index 7688ff6..13deabc 100644 --- a/src/lib/utils/constants.ts +++ b/src/lib/utils/constants.ts @@ -1,10 +1,10 @@ export const DISCORD_SERVER = "https://discord.gg/XjYgWXHb9Q"; export const GITHUB = "https://github.com/pyoncord"; export const PROXY_PREFIX = "https://vd-plugins.github.io/proxy"; -export const HTTP_REGEX = /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&\/=]*)$/; -export const HTTP_REGEX_MULTI = /https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g; +export const HTTP_REGEX = /^https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&/=]*)$/; +export const HTTP_REGEX_MULTI = /https?:\/\/(?:www\.)?[-a-zA-Z0-9@:%._+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}\b(?:[-a-zA-Z0-9()@:%_+.~#?&//=]*)/g; // These are still Vendetta's export const DISCORD_SERVER_ID = "1015931589865246730"; export const PLUGINS_CHANNEL_ID = "1091880384561684561"; -export const THEMES_CHANNEL_ID = "1091880434939482202"; \ No newline at end of file +export const THEMES_CHANNEL_ID = "1091880434939482202"; diff --git a/src/lib/utils/emitter.ts b/src/lib/utils/emitter.ts index c862df9..a4cfa9b 100644 --- a/src/lib/utils/emitter.ts +++ b/src/lib/utils/emitter.ts @@ -2,7 +2,7 @@ export enum Events { GET = "GET", SET = "SET", DEL = "DEL", -}; +} export type EmitterEvent = "SET" | "GET" | "DEL"; diff --git a/src/lib/utils/findInReactTree.ts b/src/lib/utils/findInReactTree.ts index 3708167..66d9850 100644 --- a/src/lib/utils/findInReactTree.ts +++ b/src/lib/utils/findInReactTree.ts @@ -1,6 +1,6 @@ import { findInTree } from "@lib/utils"; -import { SearchFilter } from "./findInTree"; +import { SearchFilter } from "@lib/utils/findInTree"; -export const findInReactTree = (tree: { [key: string]: any }, filter: SearchFilter): any => findInTree(tree, filter, { +export const findInReactTree = (tree: { [key: string]: any; }, filter: SearchFilter): any => findInTree(tree, filter, { walkable: ["props", "children", "child", "sibling"], -}); \ No newline at end of file +}); diff --git a/src/lib/utils/index.ts b/src/lib/utils/index.ts index ae53039..75c5c27 100644 --- a/src/lib/utils/index.ts +++ b/src/lib/utils/index.ts @@ -1,12 +1,11 @@ // Makes mass-importing utils cleaner, chosen over moving utils to one file +export * as constants from "@lib/utils/constants"; +export { createEmitter } from "@lib/utils/emitter"; export { findInReactTree } from "@lib/utils/findInReactTree"; export { findInTree } from "@lib/utils/findInTree"; +export * as logger from "@lib/utils/logger"; export { safeFetch } from "@lib/utils/safeFetch"; +export * as types from "@lib/utils/types"; export { unfreeze } from "@lib/utils/unfreeze"; export { without } from "@lib/utils/without"; -export { createEmitter } from "@lib/utils/emitter"; - -export * as constants from "@lib/utils/constants"; -export * as logger from "@lib/utils/logger"; -export * as types from "@lib/utils/types"; diff --git a/src/lib/utils/logger.ts b/src/lib/utils/logger.ts index 3050037..0ebcfbc 100644 --- a/src/lib/utils/logger.ts +++ b/src/lib/utils/logger.ts @@ -14,4 +14,4 @@ export interface Logger { export const logModule = findByProps("setLogFn").default; const logger: Logger = new logModule("Bunny"); -export default logger; \ No newline at end of file +export default logger; diff --git a/src/lib/utils/safeFetch.ts b/src/lib/utils/safeFetch.ts index 31e2f3f..fa37ca1 100644 --- a/src/lib/utils/safeFetch.ts +++ b/src/lib/utils/safeFetch.ts @@ -1,5 +1,4 @@ // A really basic fetch wrapper which throws on non-ok response codes - export async function safeFetch(input: RequestInfo | URL, options?: RequestInit, timeout = 10000) { const req = await fetch(input, { signal: timeoutSignal(timeout), diff --git a/src/lib/utils/types.ts b/src/lib/utils/types.ts index 830070f..b3feeed 100644 --- a/src/lib/utils/types.ts +++ b/src/lib/utils/types.ts @@ -13,4 +13,4 @@ export enum ButtonColors { LIGHTGREY = "lightgrey", WHITE = "white", LINK = "link" -} \ No newline at end of file +} diff --git a/src/lib/utils/unfreeze.ts b/src/lib/utils/unfreeze.ts index 415520b..43a6a29 100644 --- a/src/lib/utils/unfreeze.ts +++ b/src/lib/utils/unfreeze.ts @@ -3,4 +3,4 @@ export function unfreeze(obj: object) { if (Object.isFrozen(obj)) return Object.assign({}, obj); return obj; -} \ No newline at end of file +} diff --git a/src/lib/utils/without.ts b/src/lib/utils/without.ts index bcba4e7..1703a2c 100644 --- a/src/lib/utils/without.ts +++ b/src/lib/utils/without.ts @@ -1,5 +1,5 @@ export function without(object: O, ...keys: K): Omit { const cloned = { ...object }; - keys.forEach((k) => delete cloned[k]); + keys.forEach(k => delete cloned[k]); return cloned; -} \ No newline at end of file +} diff --git a/src/lib/windowObject.ts b/src/lib/windowObject.ts index b06917a..02f0cef 100644 --- a/src/lib/windowObject.ts +++ b/src/lib/windowObject.ts @@ -1,6 +1,6 @@ -import { createVendettaObject } from "../core/vendettaObject"; - +import { createVendettaObject } from "@core/vendettaObject"; import * as api from "@lib/api"; +import patcher from "@lib/api/patcher"; import * as debug from "@lib/debug"; import * as managers from "@lib/managers"; import * as metro from "@lib/metro"; @@ -8,8 +8,6 @@ import * as settings from "@lib/settings"; import * as ui from "@lib/ui"; import * as utils from "@lib/utils"; -import patcher from "@lib/api/patcher"; - // You may now worry about my mental state. function createBunnyObject(unloads: any[]) { return { @@ -59,7 +57,7 @@ function createBunnyObject(unloads: any[]) { // @ts-expect-error delete window.bunny; }, - } + }; } export type BunnyObject = ReturnType; diff --git a/src/modules.d.ts b/src/modules.d.ts index e66e15c..d667389 100644 --- a/src/modules.d.ts +++ b/src/modules.d.ts @@ -2,4 +2,4 @@ declare module "bunny-build" { const version: string; } -export * from "bunny-build"; \ No newline at end of file +export * from "bunny-build"; diff --git a/tsconfig.json b/tsconfig.json index c84acab..74a5a50 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,8 +16,8 @@ "resolveJsonModule": true, "skipLibCheck": true, "paths": { - "@*": ["src*"], "@lib/*": ["src/lib/*"], + "@core/*": ["src/core/*"], "@metro/*": ["src/lib/metro/*"], "@ui/*": ["src/lib/ui/*"], "@types": ["src/utils/types.ts"],