refactor: misc. changes

This commit is contained in:
ryan-0324 2024-08-02 04:22:21 -04:00
parent fcb24887b0
commit 8309a42032
31 changed files with 402 additions and 155 deletions

View file

@ -108,5 +108,5 @@ window.VencordNative = {
getSettingsDir: async () => "LocalStorage" getSettingsDir: async () => "LocalStorage"
}, },
pluginHelpers: {} as any, pluginHelpers: {},
}; };

View file

@ -1,6 +1,8 @@
import stylistic from "@stylistic/eslint-plugin"; import stylistic from "@stylistic/eslint-plugin";
// @ts-expect-error: No types // @ts-expect-error: No types
import pathAlias from "eslint-plugin-path-alias"; import pathAlias from "eslint-plugin-path-alias";
// @ts-expect-error: https://github.com/jsx-eslint/eslint-plugin-react/issues/3776
import eslintPluginReact from "eslint-plugin-react";
// @ts-expect-error: No types // @ts-expect-error: No types
import simpleHeader from "eslint-plugin-simple-header"; import simpleHeader from "eslint-plugin-simple-header";
import simpleImportSort from "eslint-plugin-simple-import-sort"; import simpleImportSort from "eslint-plugin-simple-import-sort";
@ -24,10 +26,14 @@ export default tseslint.config(
"@stylistic": stylistic, "@stylistic": stylistic,
"@typescript-eslint": tseslint.plugin, "@typescript-eslint": tseslint.plugin,
"path-alias": pathAlias, "path-alias": pathAlias,
"react": eslintPluginReact,
"simple-header": simpleHeader, "simple-header": simpleHeader,
"simple-import-sort": simpleImportSort, "simple-import-sort": simpleImportSort,
"unused-imports": unusedImports, "unused-imports": unusedImports,
}, },
settings: {
react: { version: "18.2" },
},
rules: { rules: {
// Since it's only been a month and Vencord has already been stolen // Since it's only been a month and Vencord has already been stolen
// by random skids who rebranded it to "AlphaCord" and erased all license // by random skids who rebranded it to "AlphaCord" and erased all license
@ -47,7 +53,7 @@ export default tseslint.config(
"@stylistic/dot-location": ["error", "property"], "@stylistic/dot-location": ["error", "property"],
"@stylistic/eol-last": "error", "@stylistic/eol-last": "error",
"@stylistic/func-call-spacing": "error", "@stylistic/func-call-spacing": "error",
"@stylistic/generator-star-spacing": "error", "@stylistic/generator-star-spacing": ["error", { before: false, after: true }],
"@stylistic/indent": ["error", 4, { "@stylistic/indent": ["error", 4, {
SwitchCase: 1, SwitchCase: 1,
flatTernaryExpressions: true flatTernaryExpressions: true
@ -169,7 +175,6 @@ export default tseslint.config(
}] }]
}], }],
"no-restricted-syntax": ["error", "no-restricted-syntax": ["error",
"JSXOpeningElement[name.name=svg] > JSXAttribute[name.name=xmlns]",
"SequenceExpression:not(.update):matches(:not(.callee), [expressions.length!=2])", "SequenceExpression:not(.update):matches(:not(.callee), [expressions.length!=2])",
"SequenceExpression:not(.update) > :first-child:not(Literal)", "SequenceExpression:not(.update) > :first-child:not(Literal)",
], ],
@ -193,6 +198,11 @@ export default tseslint.config(
"prefer-object-spread": "error", "prefer-object-spread": "error",
"prefer-regex-literals": ["error", { disallowRedundantWrapping: true }], "prefer-regex-literals": ["error", { disallowRedundantWrapping: true }],
"prefer-spread": "error", "prefer-spread": "error",
"react/forbid-dom-props": ["error", {
forbid: ["version", "xlinkActuate", "xlinkArcrole", "xlinkHref", "xlinkRole", "xlinkShow", "xlinkTitle", "xlinkType", "xmlBase", "xmlLang", "xmlns", "xmlnsXlink", "xmlSpace"]
}],
"react/jsx-fragments": "error",
"react/jsx-no-useless-fragment": "error",
"simple-import-sort/exports": "error", "simple-import-sort/exports": "error",
"simple-import-sort/imports": "error", "simple-import-sort/imports": "error",
"unused-imports/no-unused-imports": "error", "unused-imports/no-unused-imports": "error",

View file

@ -44,7 +44,7 @@
"nanoid": "^5.0.7" "nanoid": "^5.0.7"
}, },
"devDependencies": { "devDependencies": {
"@stylistic/eslint-plugin": "^2.6.0", "@stylistic/eslint-plugin": "^2.6.1",
"@stylistic/stylelint-config": "^2.0.0", "@stylistic/stylelint-config": "^2.0.0",
"@stylistic/stylelint-plugin": "^3.0.0", "@stylistic/stylelint-plugin": "^3.0.0",
"@types/chrome": "^0.0.269", "@types/chrome": "^0.0.269",
@ -61,6 +61,7 @@
"esbuild": "^0.23.0", "esbuild": "^0.23.0",
"eslint": "^9.8.0", "eslint": "^9.8.0",
"eslint-plugin-path-alias": "^2.1.0", "eslint-plugin-path-alias": "^2.1.0",
"eslint-plugin-react": "^7.35.0",
"eslint-plugin-simple-header": "^1.1.1", "eslint-plugin-simple-header": "^1.1.1",
"eslint-plugin-simple-import-sort": "^12.1.1", "eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unused-imports": "^4.0.1", "eslint-plugin-unused-imports": "^4.0.1",
@ -72,7 +73,7 @@
"stylelint": "^16.8.1", "stylelint": "^16.8.1",
"stylelint-config-standard": "^36.0.1", "stylelint-config-standard": "^36.0.1",
"ts-patch": "^3.2.1", "ts-patch": "^3.2.1",
"tsx": "^4.16.3", "tsx": "^4.16.5",
"type-fest": "^4.23.0", "type-fest": "^4.23.0",
"typescript": "^5.5.4", "typescript": "^5.5.4",
"typescript-eslint": "^8.0.0", "typescript-eslint": "^8.0.0",
@ -82,7 +83,7 @@
"packageManager": "pnpm@9.6.0", "packageManager": "pnpm@9.6.0",
"pnpm": { "pnpm": {
"patchedDependencies": { "patchedDependencies": {
"@stylistic/eslint-plugin-js@2.6.0": "patches/@stylistic__eslint-plugin-js@2.6.0.patch", "@stylistic/eslint-plugin-js@2.6.1": "patches/@stylistic__eslint-plugin-js@2.6.1.patch",
"eslint-plugin-path-alias@2.1.0": "patches/eslint-plugin-path-alias@2.1.0.patch", "eslint-plugin-path-alias@2.1.0": "patches/eslint-plugin-path-alias@2.1.0.patch",
"eslint@9.8.0": "patches/eslint@9.8.0.patch", "eslint@9.8.0": "patches/eslint@9.8.0.patch",
"standalone-electron-types@1.0.0": "patches/standalone-electron-types@1.0.0.patch" "standalone-electron-types@1.0.0": "patches/standalone-electron-types@1.0.0.patch"
@ -97,6 +98,23 @@
"resolve-url": "*", "resolve-url": "*",
"source-map-url": "*", "source-map-url": "*",
"urix": "*" "urix": "*"
},
"overrides": {
"array-includes": "npm:@nolyfill/array-includes@^1",
"array.prototype.findlast": "npm:@nolyfill/array.prototype.findlast@^1",
"array.prototype.flat": "npm:@nolyfill/array.prototype.flat@^1",
"array.prototype.flatmap": "npm:@nolyfill/array.prototype.flatmap@^1",
"array.prototype.tosorted": "npm:@nolyfill/array.prototype.tosorted@^1",
"es-iterator-helpers": "npm:@nolyfill/es-iterator-helpers@^1",
"hasown": "npm:@nolyfill/hasown@^1",
"is-core-module": "npm:@nolyfill/is-core-module@^1",
"isarray": "npm:@nolyfill/isarray@^1",
"object.assign": "npm:@nolyfill/object.assign@^1",
"object.entries": "npm:@nolyfill/object.entries@^1",
"object.fromentries": "npm:@nolyfill/object.fromentries@^1",
"object.values": "npm:@nolyfill/object.values@^1",
"string.prototype.matchall": "npm:@nolyfill/string.prototype.matchall@^1",
"string.prototype.repeat": "npm:@nolyfill/string.prototype.repeat@^1"
} }
}, },
"webExt": { "webExt": {

View file

@ -30,7 +30,7 @@
"type-fest": "^4.23.0" "type-fest": "^4.23.0"
}, },
"devDependencies": { "devDependencies": {
"@stylistic/eslint-plugin": "^2.6.0", "@stylistic/eslint-plugin": "^2.6.1",
"@types/node": "^20.14.13", "@types/node": "^20.14.13",
"@types/semver": "^7.5.8", "@types/semver": "^7.5.8",
"@typescript-eslint/typescript-estree": "^8.0.0", "@typescript-eslint/typescript-estree": "^8.0.0",
@ -43,7 +43,7 @@
"eslint-plugin-unused-imports": "^4.0.1", "eslint-plugin-unused-imports": "^4.0.1",
"puppeteer-core": "^22.15.0", "puppeteer-core": "^22.15.0",
"semver": "^7.6.3", "semver": "^7.6.3",
"tsx": "^4.16.3", "tsx": "^4.16.5",
"typescript": "^5.5.4", "typescript": "^5.5.4",
"typescript-eslint": "^8.0.0" "typescript-eslint": "^8.0.0"
} }

View file

@ -297,6 +297,9 @@ export default {
// From the API documentation // From the API documentation
ignoredRemovals: [["SPECTATE"]], ignoredRemovals: [["SPECTATE"]],
}, },
MessageReferenceType: {
type: "enum",
},
PollLayoutType: { PollLayoutType: {
type: "enum", type: "enum",
}, },

View file

@ -28,7 +28,7 @@
"devDependencies": { "devDependencies": {
"@types/fs-extra": "^11.0.4", "@types/fs-extra": "^11.0.4",
"fs-extra": "^11.2.0", "fs-extra": "^11.2.0",
"tsx": "^4.16.3", "tsx": "^4.16.5",
"typescript": "^5.5.4" "typescript": "^5.5.4"
} }
} }

View file

@ -4,10 +4,27 @@ settings:
autoInstallPeers: true autoInstallPeers: true
excludeLinksFromLockfile: false excludeLinksFromLockfile: false
overrides:
array-includes: npm:@nolyfill/array-includes@^1
array.prototype.findlast: npm:@nolyfill/array.prototype.findlast@^1
array.prototype.flat: npm:@nolyfill/array.prototype.flat@^1
array.prototype.flatmap: npm:@nolyfill/array.prototype.flatmap@^1
array.prototype.tosorted: npm:@nolyfill/array.prototype.tosorted@^1
es-iterator-helpers: npm:@nolyfill/es-iterator-helpers@^1
hasown: npm:@nolyfill/hasown@^1
is-core-module: npm:@nolyfill/is-core-module@^1
isarray: npm:@nolyfill/isarray@^1
object.assign: npm:@nolyfill/object.assign@^1
object.entries: npm:@nolyfill/object.entries@^1
object.fromentries: npm:@nolyfill/object.fromentries@^1
object.values: npm:@nolyfill/object.values@^1
string.prototype.matchall: npm:@nolyfill/string.prototype.matchall@^1
string.prototype.repeat: npm:@nolyfill/string.prototype.repeat@^1
patchedDependencies: patchedDependencies:
'@stylistic/eslint-plugin-js@2.6.0': '@stylistic/eslint-plugin-js@2.6.1':
hash: svxcf2j6uikn7di5a4erf5bw5y hash: svxcf2j6uikn7di5a4erf5bw5y
path: patches/@stylistic__eslint-plugin-js@2.6.0.patch path: patches/@stylistic__eslint-plugin-js@2.6.1.patch
eslint-plugin-path-alias@2.1.0: eslint-plugin-path-alias@2.1.0:
hash: japuwsqfkulviwgkm4kd2oi3ky hash: japuwsqfkulviwgkm4kd2oi3ky
path: patches/eslint-plugin-path-alias@2.1.0.patch path: patches/eslint-plugin-path-alias@2.1.0.patch
@ -45,8 +62,8 @@ importers:
version: 5.0.7 version: 5.0.7
devDependencies: devDependencies:
'@stylistic/eslint-plugin': '@stylistic/eslint-plugin':
specifier: ^2.6.0 specifier: ^2.6.1
version: 2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4) version: 2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)
'@stylistic/stylelint-config': '@stylistic/stylelint-config':
specifier: ^2.0.0 specifier: ^2.0.0
version: 2.0.0(stylelint@16.8.1(typescript@5.5.4)) version: 2.0.0(stylelint@16.8.1(typescript@5.5.4))
@ -95,6 +112,9 @@ importers:
eslint-plugin-path-alias: eslint-plugin-path-alias:
specifier: ^2.1.0 specifier: ^2.1.0
version: 2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) version: 2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
eslint-plugin-react:
specifier: ^7.35.0
version: 7.35.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
eslint-plugin-simple-header: eslint-plugin-simple-header:
specifier: ^1.1.1 specifier: ^1.1.1
version: 1.1.1 version: 1.1.1
@ -129,8 +149,8 @@ importers:
specifier: ^3.2.1 specifier: ^3.2.1
version: 3.2.1 version: 3.2.1
tsx: tsx:
specifier: ^4.16.3 specifier: ^4.16.5
version: 4.16.3 version: 4.16.5
type-fest: type-fest:
specifier: ^4.23.0 specifier: ^4.23.0
version: 4.23.0 version: 4.23.0
@ -175,8 +195,8 @@ importers:
version: 4.23.0 version: 4.23.0
devDependencies: devDependencies:
'@stylistic/eslint-plugin': '@stylistic/eslint-plugin':
specifier: ^2.6.0 specifier: ^2.6.1
version: 2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4) version: 2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)
'@types/node': '@types/node':
specifier: ^20.14.13 specifier: ^20.14.13
version: 20.14.13 version: 20.14.13
@ -214,8 +234,8 @@ importers:
specifier: ^7.6.3 specifier: ^7.6.3
version: 7.6.3 version: 7.6.3
tsx: tsx:
specifier: ^4.16.3 specifier: ^4.16.5
version: 4.16.3 version: 4.16.5
typescript: typescript:
specifier: ^5.5.4 specifier: ^5.5.4
version: 5.5.4 version: 5.5.4
@ -257,8 +277,8 @@ importers:
specifier: ^11.2.0 specifier: ^11.2.0
version: 11.2.0 version: 11.2.0
tsx: tsx:
specifier: ^4.16.3 specifier: ^4.16.5
version: 4.16.3 version: 4.16.5
typescript: typescript:
specifier: ^5.5.4 specifier: ^5.5.4
version: 5.5.4 version: 5.5.4
@ -656,6 +676,75 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'} engines: {node: '>= 8'}
'@nolyfill/array-includes@1.0.28':
resolution: {integrity: sha512-3LFZArKSQTQu//UvQXb4lBHWvhxmiZ5h2v50WIXfWb5UPNgeLpeGP8WgsfTePCpZgNlxt5JVFDdv5zLRa7cQXw==}
engines: {node: '>=12.4.0'}
'@nolyfill/array.prototype.findlast@1.0.24':
resolution: {integrity: sha512-yFCyZLs0iNNubzYnBINcOCJAiGtusxiR2F1DnwkOB1HQbWXl/zltkDIWIXO3cJxhQdngDlmM4ysTfyAfoB297g==}
engines: {node: '>=12.4.0'}
'@nolyfill/array.prototype.flat@1.0.28':
resolution: {integrity: sha512-bvBWaZDCWV7+jD70tJCy3Olp03Qx9svHN2KmC2j0CYvqfYRet5+iOb09nzb6QULqGrj7O8DQJ03ZQk6gih9J3g==}
engines: {node: '>=12.4.0'}
'@nolyfill/array.prototype.flatmap@1.0.28':
resolution: {integrity: sha512-Ui/aMijqnYISchzIG0MbRiRh2DKWORJW2s//nw6rJ5jFp6x+nmFCQ5U2be3+id36VsmTxXiv+qLAHxdfXz8g8g==}
engines: {node: '>=12.4.0'}
'@nolyfill/array.prototype.tosorted@1.0.24':
resolution: {integrity: sha512-lVo8TVDqaslOaOvEH7iL7glu/WdlX7ZrB+7FZY4BL25hg8TLHvg3e9pxafCp8vAQ96IOL+tdgBdfeoC7qLeQYg==}
engines: {node: '>=12.4.0'}
'@nolyfill/es-iterator-helpers@1.0.21':
resolution: {integrity: sha512-i326KeE0nhW4STobcUhkxpXzZUddedCmfh7b/IyXR9kW0CFHiNNT80C3JSEy33mUlhZtk/ezX47nymcFxyBigg==}
engines: {node: '>=12.4.0'}
'@nolyfill/hasown@1.0.29':
resolution: {integrity: sha512-9h/nxZqmCy26r9VXGUz+Q77vq3eINXOYgE4st3dj6DoE7tulfJueCLw5d4hfDy3S8mKg4cFXaP+KxYQ+txvMzw==}
engines: {node: '>=12.4.0'}
'@nolyfill/is-core-module@1.0.39':
resolution: {integrity: sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==}
engines: {node: '>=12.4.0'}
'@nolyfill/isarray@1.0.29':
resolution: {integrity: sha512-YXk/GW1mquC9LpdjrwhY/RjGWp3ud4JZopFjU0XDHHOCy1h1lzMaiUzH8cjLDrbgSDe3yuk2wL4DNPgpkypulA==}
engines: {node: '>=12.4.0'}
'@nolyfill/object.assign@1.0.28':
resolution: {integrity: sha512-rrtnXgU2XJvUF9jFMwRbyvLdAlCIJOKtecflza4xWDom6u8UPliTOS0OQ6kvhql7/hpv9b8x9p0s467BVY58xg==}
engines: {node: '>=12.4.0'}
'@nolyfill/object.entries@1.0.28':
resolution: {integrity: sha512-2t4PayP6Sx7Z20HJjcf8XhhPBO8/H31bwMdP0yEdDcxSXeEhl90Ibb9E3XKzSlcsGf43nXyfabHNrnfvdWE4Ng==}
engines: {node: '>=12.4.0'}
'@nolyfill/object.fromentries@1.0.28':
resolution: {integrity: sha512-EUt70p38p+xdHDi2i8pIgw6HjrI3y9zndVhAZdEQsAvatKGKRpe3XWZRleEwYRZjkbeAG53Pz30j4tE1IJjvQQ==}
engines: {node: '>=12.4.0'}
'@nolyfill/object.values@1.0.28':
resolution: {integrity: sha512-W6CdQv4Y/19aA5tenUhRELqlBoD92D4Uh1TDp5uHXD7s9zEHgcDCPCdA8ak6y4I66fR//Fir6C1mAQWv1QLnXw==}
engines: {node: '>=12.4.0'}
'@nolyfill/shared@1.0.21':
resolution: {integrity: sha512-qDc/NoaFU23E0hhiDPeUrvWzTXIPE+RbvRQtRWSeHHNmCIgYI9HS1jKzNYNJxv4jvZ/1VmM3L6rNVxbj+LBMNA==}
'@nolyfill/shared@1.0.24':
resolution: {integrity: sha512-TGCpg3k5N7jj9AgU/1xFw9K1g4AC1vEE5ZFkW77oPNNLzprxT17PvFaNr/lr3BkkT5fJ5LNMntaTIq+pyWaeEA==}
'@nolyfill/shared@1.0.28':
resolution: {integrity: sha512-UJTshFMDgugBcYXGLopbL1enYpGREOEfjUMQKLPLeJqWfbfElGtYbGbUcucCENa7cicGo3M5u/DnPiZe/PYQyw==}
'@nolyfill/string.prototype.matchall@1.0.28':
resolution: {integrity: sha512-k74WKi7WmtRV847QWlY1ndg6XU1loeAyO9+NVoXrd7RL5lEjBtovp4CPZkifipBMBrZrZu2WwrQqkGrvLNZYpw==}
engines: {node: '>=12.4.0'}
'@nolyfill/string.prototype.repeat@1.0.28':
resolution: {integrity: sha512-8ww39xe0r4qki8HwAaXTRamO0KpkHHyYoG+PCOFGaBZ8rrlAKcGQcJhu5aB2axauggqsnUfU25j5snEC0aJvYg==}
engines: {node: '>=12.4.0'}
'@puppeteer/browsers@2.3.0': '@puppeteer/browsers@2.3.0':
resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==} resolution: {integrity: sha512-ioXoq9gPxkss4MYhD+SFaU9p1IHFUX0ILAWFPyjGaBdjLsYAlZw6j1iLA0N/m12uVHLFDfSYNF7EQccjinIMDA==}
engines: {node: '>=18'} engines: {node: '>=18'}
@ -664,31 +753,31 @@ packages:
'@sapphi-red/web-noise-suppressor@0.3.5': '@sapphi-red/web-noise-suppressor@0.3.5':
resolution: {integrity: sha512-jh3+V9yM+zxLriQexoGm0GatoPaJWjs6ypFIbFYwQp+AoUb55eUXrjKtKQyuC5zShzzeAQUl0M5JzqB7SSrsRA==} resolution: {integrity: sha512-jh3+V9yM+zxLriQexoGm0GatoPaJWjs6ypFIbFYwQp+AoUb55eUXrjKtKQyuC5zShzzeAQUl0M5JzqB7SSrsRA==}
'@stylistic/eslint-plugin-js@2.6.0': '@stylistic/eslint-plugin-js@2.6.1':
resolution: {integrity: sha512-6oN0Djdy8gTRhx2qS1m4P+CeDKqmZZwc4ibgzzJS+8iBW3Ts1c2mAvi+OH6TN4bt0AHm0FnDv2+KtTqqueMATw==} resolution: {integrity: sha512-iLOiVzcvqzDGD9U0EuVOX680v+XOPiPAjkxWj+Q6iV2GLOM5NB27tKVOpJY7AzBhidwpRbaLTgg3T4UzYx09jw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: '>=8.40.0' eslint: '>=8.40.0'
'@stylistic/eslint-plugin-jsx@2.6.0': '@stylistic/eslint-plugin-jsx@2.6.1':
resolution: {integrity: sha512-Hm7YODwBwAsYtacY9hR5ONiBS7K9og4YZFjBr8mfqsmlCYVFje1HsOKG+tylePkwcu0Qhi+lY86cP3rlV4PhAA==} resolution: {integrity: sha512-5qHLXqxfY6jubAQfDqrifv41fx7gaqA9svDaChxMI6JiHpEBfh+PXxmm3g+B8gJCYVBTC62Rjl0Ny5QabK58bw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: '>=8.40.0' eslint: '>=8.40.0'
'@stylistic/eslint-plugin-plus@2.6.0': '@stylistic/eslint-plugin-plus@2.6.1':
resolution: {integrity: sha512-9GfLF08zx/pNFpQQlNMz6f4IixoS8zdSBFdJLWLTorMilNUjd4dDuA5ej4Z32+mTZf4u6lduzQcUrAYiGKTLTg==} resolution: {integrity: sha512-z/IYu/q8ipApzNam5utSU+BrXg4pK/Gv9xNbr4eWv/bZppvTWJU62xCO4nw/6r2dHNPnqc7uCHEC7GMlBnPY0A==}
peerDependencies: peerDependencies:
eslint: '*' eslint: '*'
'@stylistic/eslint-plugin-ts@2.6.0': '@stylistic/eslint-plugin-ts@2.6.1':
resolution: {integrity: sha512-9ooVm+BRNqdyI/p10eKGAdbdLKU5lllc7mX4Xqp76hKDsh5cCxmZM6zMgK3CLKkYrW0RUunFORkg8dAnmc1qIA==} resolution: {integrity: sha512-Mxl1VMorEG1Hc6oBYPD0+KIJOWkjEF1R0liL7wWgKfwpqOkgmnh5lVdZBrYyfRKOE4RlGcwEFTNai1IW6orgVg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: '>=8.40.0' eslint: '>=8.40.0'
'@stylistic/eslint-plugin@2.6.0': '@stylistic/eslint-plugin@2.6.1':
resolution: {integrity: sha512-BYzdgwz/4WgDTGmkPMKXFLRBKnYNVnmgD4NDsDCGJulqLFLF6sW1gr6gAJSFnkxwsdhEg+GApF4m5e3OMDpd6g==} resolution: {integrity: sha512-UT0f4t+3sQ/GKW7875NiIIjZJ1Bh4gd7JNfoIkwIQyWqO7wGd0Pqzu0Ho30Ka8MNF5lm++SkVeqAk26vGxoUpg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies: peerDependencies:
eslint: '>=8.40.0' eslint: '>=8.40.0'
@ -1194,6 +1283,10 @@ packages:
discord-types@1.3.3: discord-types@1.3.3:
resolution: {integrity: sha512-6LGLIw8RBWKdio7FoIfwExSZQuej2XXDKgT7mfR3qMOpEspknVDFQJcfhPuiD1iy2NdcAygvvVfJMliYwiUwqw==} resolution: {integrity: sha512-6LGLIw8RBWKdio7FoIfwExSZQuej2XXDKgT7mfR3qMOpEspknVDFQJcfhPuiD1iy2NdcAygvvVfJMliYwiUwqw==}
doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
engines: {node: '>=0.10.0'}
doctrine@3.0.0: doctrine@3.0.0:
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
engines: {node: '>=6.0.0'} engines: {node: '>=6.0.0'}
@ -1268,6 +1361,12 @@ packages:
peerDependencies: peerDependencies:
eslint: ^8.0.0 eslint: ^8.0.0
eslint-plugin-react@7.35.0:
resolution: {integrity: sha512-v501SSMOWv8gerHkk+IIQBkcGRGrO2nfybfj5pLxuJNFTPxxA3PSryhXTK+9pNbtkggheDdsC0E9Q8CuPk6JKA==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
eslint-plugin-simple-header@1.1.1: eslint-plugin-simple-header@1.1.1:
resolution: {integrity: sha512-xFK54pYcSEC2uULHTeo2aEgmTmdhZ9ry3zIV9OspLaEPb/Xg1oaFmOcmoNhk9WNJPwzUKrAmYyA8s4YDBfbD+g==} resolution: {integrity: sha512-xFK54pYcSEC2uULHTeo2aEgmTmdhZ9ry3zIV9OspLaEPb/Xg1oaFmOcmoNhk9WNJPwzUKrAmYyA8s4YDBfbD+g==}
@ -1443,9 +1542,6 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin] os: [darwin]
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
get-caller-file@2.0.5: get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*} engines: {node: 6.* || 8.* || >= 10.*}
@ -1538,10 +1634,6 @@ packages:
resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==} resolution: {integrity: sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
hasown@2.0.2:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
highlight.js@11.8.0: highlight.js@11.8.0:
resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==} resolution: {integrity: sha512-MedQhoqVdr0U6SSnWPzfiadUcDHfN/Wzq25AkXiQv9oiOO/sG0S7XkvpFIqWBl9Yq1UYyYOOVORs5UW2XlPyzg==}
engines: {node: '>=12.0.0'} engines: {node: '>=12.0.0'}
@ -1616,10 +1708,6 @@ packages:
resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
engines: {node: '>=6'} engines: {node: '>=6'}
is-core-module@2.14.0:
resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==}
engines: {node: '>= 0.4'}
is-data-descriptor@0.1.4: is-data-descriptor@0.1.4:
resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==} resolution: {integrity: sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -1682,9 +1770,6 @@ packages:
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
isexe@2.0.0: isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
@ -1736,6 +1821,10 @@ packages:
jsonfile@6.1.0: jsonfile@6.1.0:
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
jsx-ast-utils@3.3.5:
resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
engines: {node: '>=4.0'}
jszip@2.7.0: jszip@2.7.0:
resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==} resolution: {integrity: sha512-JIsRKRVC3gTRo2vM4Wy9WBC3TRcfnIZU8k65Phi3izkvPH975FowRYtKGT6PxevA0XnJ/yO8b0QwV0ydVyQwfw==}
@ -1782,6 +1871,10 @@ packages:
lodash.truncate@4.4.2: lodash.truncate@4.4.2:
resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
loose-envify@1.4.0:
resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
hasBin: true
lower-case@2.0.2: lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
@ -1888,6 +1981,10 @@ packages:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
object-assign@4.1.1:
resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
engines: {node: '>=0.10.0'}
object-copy@0.1.0: object-copy@0.1.0:
resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==} resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@ -2021,6 +2118,9 @@ packages:
resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==}
engines: {node: '>=0.4.0'} engines: {node: '>=0.4.0'}
prop-types@15.8.1:
resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
proxy-agent@6.4.0: proxy-agent@6.4.0:
resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==} resolution: {integrity: sha512-u0piLU+nCOHMgGjRbimiXmA9kM/L9EHh3zL81xCdp7m+Y2pHIsnmbdDoEDoAz5geaonNR6q6+yOPQs6n4T6sBQ==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
@ -2053,6 +2153,9 @@ packages:
queue-tick@1.0.1: queue-tick@1.0.1:
resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
read-pkg-up@7.0.1: read-pkg-up@7.0.1:
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
engines: {node: '>=8'} engines: {node: '>=8'}
@ -2108,6 +2211,10 @@ packages:
resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==}
hasBin: true hasBin: true
resolve@2.0.0-next.5:
resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==}
hasBin: true
ret@0.1.15: ret@0.1.15:
resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==} resolution: {integrity: sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==}
engines: {node: '>=0.12'} engines: {node: '>=0.12'}
@ -2126,6 +2233,10 @@ packages:
resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==}
hasBin: true hasBin: true
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
semver@7.6.3: semver@7.6.3:
resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
engines: {node: '>=10'} engines: {node: '>=10'}
@ -2337,8 +2448,8 @@ packages:
tslib@2.6.2: tslib@2.6.2:
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
tsx@4.16.3: tsx@4.16.5:
resolution: {integrity: sha512-MP8AEUxVnboD2rCC6kDLxnpDBNWN9k3BSVU/0/nNxgm70bPBnfn+yCKcnOsIVPQwdkbKYoFOlKjjWZWJ2XCXUg==} resolution: {integrity: sha512-ArsiAQHEW2iGaqZ8fTA1nX0a+lN5mNTyuGRRO6OW3H/Yno1y9/t1f9YOI1Cfoqz63VAthn++ZYcbDP7jPflc+A==}
engines: {node: '>=18.0.0'} engines: {node: '>=18.0.0'}
hasBin: true hasBin: true
@ -2729,6 +2840,66 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5 '@nodelib/fs.scandir': 2.1.5
fastq: 1.13.0 fastq: 1.13.0
'@nolyfill/array-includes@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/array.prototype.findlast@1.0.24':
dependencies:
'@nolyfill/shared': 1.0.24
'@nolyfill/array.prototype.flat@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/array.prototype.flatmap@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/array.prototype.tosorted@1.0.24':
dependencies:
'@nolyfill/shared': 1.0.24
'@nolyfill/es-iterator-helpers@1.0.21':
dependencies:
'@nolyfill/shared': 1.0.21
'@nolyfill/hasown@1.0.29': {}
'@nolyfill/is-core-module@1.0.39': {}
'@nolyfill/isarray@1.0.29': {}
'@nolyfill/object.assign@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/object.entries@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/object.fromentries@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/object.values@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/shared@1.0.21': {}
'@nolyfill/shared@1.0.24': {}
'@nolyfill/shared@1.0.28': {}
'@nolyfill/string.prototype.matchall@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@nolyfill/string.prototype.repeat@1.0.28':
dependencies:
'@nolyfill/shared': 1.0.28
'@puppeteer/browsers@2.3.0': '@puppeteer/browsers@2.3.0':
dependencies: dependencies:
debug: 4.3.6 debug: 4.3.6
@ -2744,7 +2915,7 @@ snapshots:
'@sapphi-red/web-noise-suppressor@0.3.5': {} '@sapphi-red/web-noise-suppressor@0.3.5': {}
'@stylistic/eslint-plugin-js@2.6.0(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))': '@stylistic/eslint-plugin-js@2.6.1(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))':
dependencies: dependencies:
'@types/eslint': 9.6.0 '@types/eslint': 9.6.0
acorn: 8.12.1 acorn: 8.12.1
@ -2752,15 +2923,15 @@ snapshots:
eslint-visitor-keys: 4.0.0 eslint-visitor-keys: 4.0.0
espree: 10.1.0 espree: 10.1.0
'@stylistic/eslint-plugin-jsx@2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))': '@stylistic/eslint-plugin-jsx@2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))':
dependencies: dependencies:
'@stylistic/eslint-plugin-js': 2.6.0(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) '@stylistic/eslint-plugin-js': 2.6.1(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
'@types/eslint': 9.6.0 '@types/eslint': 9.6.0
eslint: 9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint: 9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
estraverse: 5.3.0 estraverse: 5.3.0
picomatch: 4.0.2 picomatch: 4.0.2
'@stylistic/eslint-plugin-plus@2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)': '@stylistic/eslint-plugin-plus@2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)':
dependencies: dependencies:
'@types/eslint': 9.6.0 '@types/eslint': 9.6.0
'@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4) '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)
@ -2769,9 +2940,9 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@stylistic/eslint-plugin-ts@2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)': '@stylistic/eslint-plugin-ts@2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)':
dependencies: dependencies:
'@stylistic/eslint-plugin-js': 2.6.0(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) '@stylistic/eslint-plugin-js': 2.6.1(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
'@types/eslint': 9.6.0 '@types/eslint': 9.6.0
'@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4) '@typescript-eslint/utils': 8.0.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)
eslint: 9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint: 9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
@ -2779,12 +2950,12 @@ snapshots:
- supports-color - supports-color
- typescript - typescript
'@stylistic/eslint-plugin@2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)': '@stylistic/eslint-plugin@2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)':
dependencies: dependencies:
'@stylistic/eslint-plugin-js': 2.6.0(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) '@stylistic/eslint-plugin-js': 2.6.1(patch_hash=svxcf2j6uikn7di5a4erf5bw5y)(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
'@stylistic/eslint-plugin-jsx': 2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)) '@stylistic/eslint-plugin-jsx': 2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))
'@stylistic/eslint-plugin-plus': 2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4) '@stylistic/eslint-plugin-plus': 2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)
'@stylistic/eslint-plugin-ts': 2.6.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4) '@stylistic/eslint-plugin-ts': 2.6.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi))(typescript@5.5.4)
'@types/eslint': 9.6.0 '@types/eslint': 9.6.0
eslint: 9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi) eslint: 9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
transitivePeerDependencies: transitivePeerDependencies:
@ -3323,6 +3494,10 @@ snapshots:
'@types/react': 17.0.2 '@types/react': 17.0.2
moment: 2.29.4 moment: 2.29.4
doctrine@2.1.0:
dependencies:
esutils: 2.0.3
doctrine@3.0.0: doctrine@3.0.0:
dependencies: dependencies:
esutils: 2.0.3 esutils: 2.0.3
@ -3418,7 +3593,7 @@ snapshots:
eslint-import-resolver-node@0.3.9: eslint-import-resolver-node@0.3.9:
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
is-core-module: 2.14.0 is-core-module: '@nolyfill/is-core-module@1.0.39'
resolve: 1.22.8 resolve: 1.22.8
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -3455,6 +3630,28 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-react@7.35.0(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)):
dependencies:
array-includes: '@nolyfill/array-includes@1.0.28'
array.prototype.findlast: '@nolyfill/array.prototype.findlast@1.0.24'
array.prototype.flatmap: '@nolyfill/array.prototype.flatmap@1.0.28'
array.prototype.tosorted: '@nolyfill/array.prototype.tosorted@1.0.24'
doctrine: 2.1.0
es-iterator-helpers: '@nolyfill/es-iterator-helpers@1.0.21'
eslint: 9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)
estraverse: 5.3.0
hasown: '@nolyfill/hasown@1.0.29'
jsx-ast-utils: 3.3.5
minimatch: 3.1.2
object.entries: '@nolyfill/object.entries@1.0.28'
object.fromentries: '@nolyfill/object.fromentries@1.0.28'
object.values: '@nolyfill/object.values@1.0.28'
prop-types: 15.8.1
resolve: 2.0.0-next.5
semver: 6.3.1
string.prototype.matchall: '@nolyfill/string.prototype.matchall@1.0.28'
string.prototype.repeat: '@nolyfill/string.prototype.repeat@1.0.28'
eslint-plugin-simple-header@1.1.1: {} eslint-plugin-simple-header@1.1.1: {}
eslint-plugin-simple-import-sort@12.1.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)): eslint-plugin-simple-import-sort@12.1.1(eslint@9.8.0(patch_hash=wy5a2dwvtxac2ygzwebqqjurgi)):
@ -3668,8 +3865,6 @@ snapshots:
fsevents@2.3.3: fsevents@2.3.3:
optional: true optional: true
function-bind@1.1.2: {}
get-caller-file@2.0.5: {} get-caller-file@2.0.5: {}
get-stream@5.2.0: get-stream@5.2.0:
@ -3767,10 +3962,6 @@ snapshots:
is-number: 3.0.0 is-number: 3.0.0
kind-of: 4.0.0 kind-of: 4.0.0
hasown@2.0.2:
dependencies:
function-bind: 1.1.2
highlight.js@11.8.0: {} highlight.js@11.8.0: {}
homedir-polyfill@1.0.3: homedir-polyfill@1.0.3:
@ -3841,10 +4032,6 @@ snapshots:
dependencies: dependencies:
builtin-modules: 3.3.0 builtin-modules: 3.3.0
is-core-module@2.14.0:
dependencies:
hasown: 2.0.2
is-data-descriptor@0.1.4: is-data-descriptor@0.1.4:
dependencies: dependencies:
kind-of: 3.2.2 kind-of: 3.2.2
@ -3895,13 +4082,11 @@ snapshots:
is-windows@1.0.2: {} is-windows@1.0.2: {}
isarray@1.0.0: {}
isexe@2.0.0: {} isexe@2.0.0: {}
isobject@2.1.0: isobject@2.1.0:
dependencies: dependencies:
isarray: 1.0.0 isarray: '@nolyfill/isarray@1.0.29'
isobject@3.0.1: {} isobject@3.0.1: {}
@ -3935,6 +4120,13 @@ snapshots:
optionalDependencies: optionalDependencies:
graceful-fs: 4.2.11 graceful-fs: 4.2.11
jsx-ast-utils@3.3.5:
dependencies:
array-includes: '@nolyfill/array-includes@1.0.28'
array.prototype.flat: '@nolyfill/array.prototype.flat@1.0.28'
object.assign: '@nolyfill/object.assign@1.0.28'
object.values: '@nolyfill/object.values@1.0.28'
jszip@2.7.0: jszip@2.7.0:
dependencies: dependencies:
pako: 1.0.11 pako: 1.0.11
@ -3976,6 +4168,10 @@ snapshots:
lodash.truncate@4.4.2: {} lodash.truncate@4.4.2: {}
loose-envify@1.4.0:
dependencies:
js-tokens: 4.0.0
lower-case@2.0.2: lower-case@2.0.2:
dependencies: dependencies:
tslib: 2.6.2 tslib: 2.6.2
@ -4072,6 +4268,8 @@ snapshots:
normalize-path@3.0.0: {} normalize-path@3.0.0: {}
object-assign@4.1.1: {}
object-copy@0.1.0: object-copy@0.1.0:
dependencies: dependencies:
copy-descriptor: 0.1.1 copy-descriptor: 0.1.1
@ -4203,6 +4401,12 @@ snapshots:
progress@2.0.3: {} progress@2.0.3: {}
prop-types@15.8.1:
dependencies:
loose-envify: 1.4.0
object-assign: 4.1.1
react-is: 16.13.1
proxy-agent@6.4.0: proxy-agent@6.4.0:
dependencies: dependencies:
agent-base: 7.1.1 agent-base: 7.1.1
@ -4243,6 +4447,8 @@ snapshots:
queue-tick@1.0.1: {} queue-tick@1.0.1: {}
react-is@16.13.1: {}
read-pkg-up@7.0.1: read-pkg-up@7.0.1:
dependencies: dependencies:
find-up: 4.1.0 find-up: 4.1.0
@ -4288,7 +4494,13 @@ snapshots:
resolve@1.22.8: resolve@1.22.8:
dependencies: dependencies:
is-core-module: 2.14.0 is-core-module: '@nolyfill/is-core-module@1.0.39'
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
resolve@2.0.0-next.5:
dependencies:
is-core-module: '@nolyfill/is-core-module@1.0.39'
path-parse: 1.0.7 path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0 supports-preserve-symlinks-flag: 1.0.0
@ -4306,6 +4518,8 @@ snapshots:
semver@5.7.1: {} semver@5.7.1: {}
semver@6.3.1: {}
semver@7.6.3: {} semver@7.6.3: {}
set-value@2.0.1: set-value@2.0.1:
@ -4583,7 +4797,7 @@ snapshots:
tslib@2.6.2: {} tslib@2.6.2: {}
tsx@4.16.3: tsx@4.16.5:
dependencies: dependencies:
esbuild: 0.21.5 esbuild: 0.21.5
get-tsconfig: 4.7.5 get-tsconfig: 4.7.5

View file

@ -11,7 +11,7 @@ import { Logger } from "@utils/Logger";
import type { ChannelRecord } from "@vencord/discord-types"; import type { ChannelRecord } from "@vencord/discord-types";
import { waitFor } from "@webpack"; import { waitFor } from "@webpack";
import { Button, ButtonLooks, ButtonWrapperClasses, Tooltip } from "@webpack/common"; import { Button, ButtonLooks, ButtonWrapperClasses, Tooltip } from "@webpack/common";
import type { HTMLProps, JSX, MouseEventHandler, ReactNode } from "react"; import type { ComponentType, HTMLProps, MouseEventHandler, ReactNode } from "react";
let ChannelTextAreaClasses: Record<"button" | "buttonContainer", string> | undefined; let ChannelTextAreaClasses: Record<"button" | "buttonContainer", string> | undefined;
waitFor(["buttonContainer", "channelTextArea"], m => { ChannelTextAreaClasses = m; }); waitFor(["buttonContainer", "channelTextArea"], m => { ChannelTextAreaClasses = m; });
@ -74,7 +74,7 @@ export interface ChatBarProps {
}; };
} }
export type ChatBarButton = (props: ChatBarProps & { isMainChat: boolean; }) => JSX.Element | null; export type ChatBarButton = ComponentType<ChatBarProps & { isMainChat: boolean; }>;
const buttonFactories = new Map<string, ChatBarButton>(); const buttonFactories = new Map<string, ChatBarButton>();
const logger = new Logger("ChatButtons"); const logger = new Logger("ChatButtons");

View file

@ -17,7 +17,7 @@
*/ */
import type { ChannelRecord, UserRecord } from "@vencord/discord-types"; import type { ChannelRecord, UserRecord } from "@vencord/discord-types";
import type { JSX } from "react"; import type { FunctionComponent } from "react";
interface DecoratorProps { interface DecoratorProps {
activities: any[]; activities: any[];
@ -39,7 +39,7 @@ interface DecoratorProps {
user: UserRecord; user: UserRecord;
[key: string]: any; [key: string]: any;
} }
export type Decorator = (props: DecoratorProps) => JSX.Element | null; export type Decorator = FunctionComponent<DecoratorProps>;
type OnlyIn = "guilds" | "dms"; type OnlyIn = "guilds" | "dms";
export const decorators = new Map<string, { decorator: Decorator; onlyIn?: OnlyIn; }>(); export const decorators = new Map<string, { decorator: Decorator; onlyIn?: OnlyIn; }>();

View file

@ -16,9 +16,9 @@
* along with this program. If not, see <https://www.gnu.org/licenses/>. * along with this program. If not, see <https://www.gnu.org/licenses/>.
*/ */
import type { JSX } from "react"; import type { ReactNode } from "react";
export type AccessoryCallback = (props: Record<string, any>) => (JSX.Element | null)[] | JSX.Element | null; export type AccessoryCallback = (props: Record<string, any>) => ReactNode;
export type Accessory = { export type Accessory = {
callback: AccessoryCallback; callback: AccessoryCallback;
position?: number; position?: number;
@ -42,17 +42,13 @@ export function removeAccessory(identifier: string) {
} }
export function _modifyAccessories( export function _modifyAccessories(
elements: JSX.Element[], elements: ReactNode[],
props: Record<string, any> props: Record<string, any>
) { ) {
for (const accessory of accessories.values()) { for (const accessory of accessories.values()) {
let accessories = accessory.callback(props); const accessories = accessory.callback(props);
if (accessories == null) // Exclude accessories that won't be rendered
continue; if (accessories == null || typeof accessories === "boolean")
if (!Array.isArray(accessories))
accessories = [accessories];
else if (accessories.length === 0)
continue; continue;
elements.splice( elements.splice(
@ -62,9 +58,23 @@ export function _modifyAccessories(
: accessory.position : accessory.position
: elements.length, : elements.length,
0, 0,
...accessories.filter(e => e != null) // Don't iterate over strings
...typeof accessories === "object" && Symbol.iterator in accessories
// Exclude accessories that won't be rendered
? filterIterable(accessories, a => a != null && typeof a !== "boolean")
: [accessories]
); );
} }
return elements; return elements;
} }
type Values<T extends Iterable<unknown>> = T extends Iterable<infer U> ? U : never;
function filterIterable<T extends Iterable<unknown>, S extends Values<T>>(iterable: T, predicate: (value: Values<T>) => value is S): T & Iterable<S>;
function filterIterable<T extends Iterable<unknown>>(iterable: T, predicate: (value: Values<T>) => unknown): T;
function* filterIterable<T>(iterable: Iterable<T>, predicate: (value: T) => unknown) {
for (const value of iterable)
if (predicate(value))
yield value;
}

View file

@ -17,7 +17,7 @@
*/ */
import type { ChannelRecord, MessageRecord } from "@vencord/discord-types"; import type { ChannelRecord, MessageRecord } from "@vencord/discord-types";
import type { JSX } from "react"; import type { FunctionComponent, ReactNode } from "react";
interface DecorationProps { interface DecorationProps {
author: { author: {
@ -36,16 +36,16 @@ interface DecorationProps {
/** /**
* Element for the [BOT] tag if there is one * Element for the [BOT] tag if there is one
*/ */
0: JSX.Element | null; 0: ReactNode;
/** /**
* Other decorations (including ones added with this api) * Other decorations (including ones added with this api)
*/ */
1: JSX.Element[]; 1: ReactNode[];
}; };
message: MessageRecord; message: MessageRecord;
[key: string]: any; [key: string]: any;
} }
export type Decoration = (props: DecorationProps) => JSX.Element | null; export type Decoration = FunctionComponent<DecorationProps>;
export const decorations = new Map<string, Decoration>(); export const decorations = new Map<string, Decoration>();

View file

@ -17,7 +17,7 @@
*/ */
import { Logger } from "@utils/Logger"; import { Logger } from "@utils/Logger";
import type { JSX } from "react"; import type { ReactNode } from "react";
const logger = new Logger("ServerListAPI"); const logger = new Logger("ServerListAPI");
@ -26,23 +26,23 @@ export const enum ServerListRenderPosition {
In, In,
} }
const renderFunctionsAbove = new Set<(...args: unknown[]) => any>(); const renderFunctionsAbove = new Set<(...args: any[]) => ReactNode>();
const renderFunctionsIn = new Set<(...args: unknown[]) => any>(); const renderFunctionsIn = new Set<(...args: any[]) => ReactNode>();
function getRenderFunctions(position: ServerListRenderPosition) { function getRenderFunctions(position: ServerListRenderPosition) {
return position === ServerListRenderPosition.Above ? renderFunctionsAbove : renderFunctionsIn; return position === ServerListRenderPosition.Above ? renderFunctionsAbove : renderFunctionsIn;
} }
export function addServerListElement(position: ServerListRenderPosition, renderFunction: (...args: unknown[]) => any) { export function addServerListElement(position: ServerListRenderPosition, renderFunction: (...args: any[]) => ReactNode) {
getRenderFunctions(position).add(renderFunction); getRenderFunctions(position).add(renderFunction);
} }
export function removeServerListElement(position: ServerListRenderPosition, renderFunction: (...args: unknown[]) => any) { export function removeServerListElement(position: ServerListRenderPosition, renderFunction: (...args: any[]) => ReactNode) {
getRenderFunctions(position).delete(renderFunction); getRenderFunctions(position).delete(renderFunction);
} }
export const renderAll = (position: ServerListRenderPosition) => { export const renderAll = (position: ServerListRenderPosition) => {
const ret: JSX.Element[] = []; const ret: ReactNode[] = [];
for (const renderFunction of getRenderFunctions(position)) { for (const renderFunction of getRenderFunctions(position)) {
try { try {

View file

@ -35,7 +35,7 @@ import { useAwaiter } from "@utils/react";
import type { Plugin } from "@utils/types"; import type { Plugin } from "@utils/types";
import { findByPropsLazy } from "@webpack"; import { findByPropsLazy } from "@webpack";
import { AlertActionCreators, Button, Card, Forms, lodash, MarkupUtils, Select, Text, TextInput, Toasts, Tooltip, useEffect, useMemo, useState } from "@webpack/common"; import { AlertActionCreators, Button, Card, Forms, lodash, MarkupUtils, Select, Text, TextInput, Toasts, Tooltip, useEffect, useMemo, useState } from "@webpack/common";
import type { HTMLProps, JSX } from "react"; import type { HTMLProps, ReactElement } from "react";
import Plugins, { ExcludedPlugins } from "~plugins"; import Plugins, { ExcludedPlugins } from "~plugins";
@ -287,8 +287,8 @@ export default function PluginSettings() {
return lodash.isEqual(newPlugins, sortedPluginNames) ? [] : newPlugins; return lodash.isEqual(newPlugins, sortedPluginNames) ? [] : newPlugins;
})); }));
const plugins: JSX.Element[] = []; const plugins: ReactElement[] = [];
const requiredPlugins: JSX.Element[] = []; const requiredPlugins: ReactElement[] = [];
const showApi = searchValue.value.includes("API"); const showApi = searchValue.value.includes("API");
for (const p of sortedPlugins) { for (const p of sortedPlugins) {

View file

@ -34,7 +34,7 @@ import { makeCodeblock } from "@utils/text";
import definePlugin from "@utils/types"; import definePlugin from "@utils/types";
import { checkForUpdates, isOutdated, update } from "@utils/updater"; import { checkForUpdates, isOutdated, update } from "@utils/updater";
import { AlertActionCreators, Button, Card, ChannelStore, Forms, GuildMemberStore, MarkupUtils, RelationshipStore, showToast, Text, Toasts, UserStore } from "@webpack/common"; import { AlertActionCreators, Button, Card, ChannelStore, Forms, GuildMemberStore, MarkupUtils, RelationshipStore, showToast, Text, Toasts, UserStore } from "@webpack/common";
import type { JSX } from "react"; import type { ReactElement } from "react";
import gitHash from "~git-hash"; import gitHash from "~git-hash";
import plugins, { PluginMeta } from "~plugins"; import plugins, { PluginMeta } from "~plugins";
@ -260,7 +260,7 @@ export default definePlugin({
start() { start() {
addAccessory("vencord-debug", props => { addAccessory("vencord-debug", props => {
const buttons: JSX.Element[] = []; const buttons: ReactElement[] = [];
const shouldAddUpdateButton = const shouldAddUpdateButton =
!IS_UPDATER_DISABLED !IS_UPDATER_DISABLED

View file

@ -148,12 +148,10 @@ export default definePlugin({
reporterTestable: ReporterTestable.None, reporterTestable: ReporterTestable.None,
settingsAboutComponent: () => ( settingsAboutComponent: () => (
<>
<Forms.FormText> <Forms.FormText>
For the customizable activity format strings, you can use several special strings to include track data in activities!{" "} For the customizable activity format strings, you can use several special strings to include track data in activities!{" "}
<code>{"{name}"}</code> is replaced with the track name; <code>{"{artist}"}</code> is replaced with the artist(s)' name(s); and <code>{"{album}"}</code> is replaced with the album name. <code>{"{name}"}</code> is replaced with the track name; <code>{"{artist}"}</code> is replaced with the artist(s)' name(s); and <code>{"{album}"}</code> is replaced with the album name.
</Forms.FormText> </Forms.FormText>
</>
), ),
settings, settings,

View file

@ -20,7 +20,7 @@ interface UserDecorationData {
interface UsersDecorationsState { interface UsersDecorationsState {
usersDecorations: Map<string, UserDecorationData>; usersDecorations: Map<string, UserDecorationData>;
fetchQueue: Set<string>; fetchQueue: Set<string>;
bulkFetch: () => Promise<void>; bulkFetch: () => void;
fetch: (userId: string, force?: boolean) => void; fetch: (userId: string, force?: boolean) => void;
fetchMany: (userIds: string[]) => void; fetchMany: (userIds: string[]) => void;
get: (userId: string) => UserDecorationData | undefined; get: (userId: string) => UserDecorationData | undefined;

View file

@ -5,12 +5,12 @@
*/ */
import { React } from "@webpack/common"; import { React } from "@webpack/common";
import type { JSX } from "react"; import type { ReactElement } from "react";
import { cl } from "../"; import { cl } from "../";
export interface GridProps<ItemT> { export interface GridProps<ItemT> {
renderItem: (item: ItemT) => JSX.Element; renderItem: (item: ItemT) => ReactElement;
getItemKey: (item: ItemT) => string; getItemKey: (item: ItemT) => string;
itemKeyPrefix?: string; itemKeyPrefix?: string;
items: ItemT[]; items: ItemT[];

View file

@ -6,7 +6,7 @@
import { classes } from "@utils/misc"; import { classes } from "@utils/misc";
import { findByPropsLazy } from "@webpack"; import { findByPropsLazy } from "@webpack";
import type { JSX } from "react"; import type { ReactElement } from "react";
import { cl } from "../"; import { cl } from "../";
import Grid, { type GridProps } from "./Grid"; import Grid, { type GridProps } from "./Grid";
@ -18,7 +18,7 @@ type Section<SectionT, ItemT> = SectionT & {
}; };
interface SectionedGridListProps<ItemT, SectionT, SectionU = Section<SectionT, ItemT>> extends Omit<GridProps<ItemT>, "items"> { interface SectionedGridListProps<ItemT, SectionT, SectionU = Section<SectionT, ItemT>> extends Omit<GridProps<ItemT>, "items"> {
renderSectionHeader: (section: SectionU) => JSX.Element; renderSectionHeader: (section: SectionU) => ReactElement;
getSectionKey: (section: SectionU) => string; getSectionKey: (section: SectionU) => string;
sections: SectionU[]; sections: SectionU[];
} }

View file

@ -176,9 +176,9 @@ function initWs(isManual = false) {
try { try {
const matcher = canonicalizeMatch(parseNode(match)); const matcher = canonicalizeMatch(parseNode(match));
const replacement = canonicalizeReplace(parseNode(replace), "PlaceHolderPluginName"); const replacement = canonicalizeReplace<string>(parseNode(replace), "PlaceHolderPluginName");
const newSource = src.replace(matcher, replacement as string); const newSource = src.replace(matcher, replacement);
if (src === newSource) throw "Had no effect"; if (src === newSource) throw "Had no effect";
Function(newSource); Function(newSource);
@ -195,7 +195,7 @@ function initWs(isManual = false) {
} }
case "testFind": { case "testFind": {
const { type, args } = data as FindData; const { type, args } = data as FindData;
let parsedArgs: any; let parsedArgs: any[];
try { try {
parsedArgs = args.map(parseNode); parsedArgs = args.map(parseNode);
} catch (err) { } catch (err) {

View file

@ -76,7 +76,7 @@ export default definePlugin({
const s = str(k); const s = str(k);
return prev + ( return prev + (
s !== null s != null
? (prev !== "" ? (prev !== ""
? (showMillis ? k === "milliseconds" : k === "seconds") ? (showMillis ? k === "milliseconds" : k === "seconds")
? " and " ? " and "

View file

@ -41,7 +41,7 @@ import {
Text, Text,
UserStore UserStore
} from "@webpack/common"; } from "@webpack/common";
import type { JSX } from "react"; import type { ReactElement } from "react";
const messageCache = new Map<string, { const messageCache = new Map<string, {
message?: MessageRecord; message?: MessageRecord;
@ -221,8 +221,8 @@ function withEmbeddedBy(message: MessageRecord, embeddedBy: string[]) {
return new Proxy(message, { return new Proxy(message, {
get(_, prop) { get(_, prop) {
if (prop === "vencordEmbeddedBy") return embeddedBy; if (prop === "vencordEmbeddedBy") return embeddedBy;
// @ts-ignore ts so bad // https://github.com/microsoft/TypeScript/issues/29055
return Reflect.get(...arguments); return Reflect.get(...arguments as any as Parameters<ProxyHandler<MessageRecord>["get"] & {}>);
} }
}); });
} }
@ -230,7 +230,7 @@ function withEmbeddedBy(message: MessageRecord, embeddedBy: string[]) {
function MessageEmbedAccessory({ message }: { message: MessageRecord & { vencordEmbeddedBy?: string[]; }; }) { function MessageEmbedAccessory({ message }: { message: MessageRecord & { vencordEmbeddedBy?: string[]; }; }) {
const embeddedBy: string[] = message.vencordEmbeddedBy ?? []; const embeddedBy: string[] = message.vencordEmbeddedBy ?? [];
const accessories: (JSX.Element | null)[] = []; const accessories: ReactElement[] = [];
for (const [_, channelId, messageId] of message.content.matchAll(messageLinkRegex)) { for (const [_, channelId, messageId] of message.content.matchAll(messageLinkRegex)) {
if (embeddedBy.includes(messageId!) || embeddedBy.length > 2) { if (embeddedBy.includes(messageId!) || embeddedBy.length > 2) {
@ -276,7 +276,7 @@ function MessageEmbedAccessory({ message }: { message: MessageRecord & { vencord
); );
} }
return accessories.length ? <>{accessories}</> : null; return accessories;
} }
function getChannelLabelAndIconUrl(channel: ChannelRecord) { function getChannelLabelAndIconUrl(channel: ChannelRecord) {

View file

@ -176,9 +176,7 @@ export default definePlugin({
(oldMsg, newMsg) => oldMsg?.editHistory === newMsg?.editHistory (oldMsg, newMsg) => oldMsg?.editHistory === newMsg?.editHistory
)!; )!;
return Settings.plugins.MessageLogger!.inlineEdits && ( return Settings.plugins.MessageLogger!.inlineEdits && message.editHistory?.map(edit => (
<>
{message.editHistory?.map(edit => (
<div className="messagelogger-edited"> <div className="messagelogger-edited">
{parseEditContent(edit.content, message)} {parseEditContent(edit.content, message)}
<Timestamp <Timestamp
@ -189,9 +187,7 @@ export default definePlugin({
<span className={styles.edited}>{" "}({i18n.Messages.MESSAGE_EDITED})</span> <span className={styles.edited}>{" "}({i18n.Messages.MESSAGE_EDITED})</span>
</Timestamp> </Timestamp>
</div> </div>
))} ));
</>
);
}, { noop: true }), }, { noop: true }),
makeEdit: (newMessage: MessageJSON, oldMessage: MessageJSON) => ({ makeEdit: (newMessage: MessageJSON, oldMessage: MessageJSON) => ({

View file

@ -17,7 +17,7 @@
*/ */
import { ClipboardUtils } from "@webpack/common"; import { ClipboardUtils } from "@webpack/common";
import type { JSX } from "react"; import type { ReactElement } from "react";
import { cl } from "../utils/misc"; import { cl } from "../utils/misc";
import { CopyButton } from "./CopyButton"; import { CopyButton } from "./CopyButton";
@ -28,7 +28,7 @@ export interface ButtonRowProps {
} }
export function ButtonRow({ content, theme }: ButtonRowProps) { export function ButtonRow({ content, theme }: ButtonRowProps) {
const buttons: JSX.Element[] = []; const buttons: ReactElement[] = [];
if (ClipboardUtils.SUPPORTS_COPY) { if (ClipboardUtils.SUPPORTS_COPY) {
buttons.push( buttons.push(

View file

@ -18,7 +18,7 @@
import type { IThemedToken } from "@vap/shiki"; import type { IThemedToken } from "@vap/shiki";
import { hljs } from "@webpack/common"; import { hljs } from "@webpack/common";
import type { JSX } from "react"; import type { ReactElement } from "react";
import { cl } from "../utils/misc"; import { cl } from "../utils/misc";
import type { ThemeBase } from "./Highlighter"; import type { ThemeBase } from "./Highlighter";
@ -38,7 +38,7 @@ export function Code({
content, content,
tokens, tokens,
}: CodeProps) { }: CodeProps) {
let lines: JSX.Element[]; let lines: ReactElement[];
if (useHljs) { if (useHljs) {
try { try {

View file

@ -45,7 +45,7 @@ export const TranslateChatBarIcon: ChatBarButton = ({ isMainChat }) => {
const [showTooltip, $setShowTooltip] = useState(false); const [showTooltip, $setShowTooltip] = useState(false);
useEffect(() => { useEffect(() => {
setShowTooltip = $setShowTooltip; setShowTooltip = $setShowTooltip;
return () => setShowTooltip = undefined; return () => { setShowTooltip = undefined; };
}, []); }, []);
if (!isMainChat || !showChatBarButton) return null; if (!isMainChat || !showChatBarButton) return null;

View file

@ -124,8 +124,7 @@ function MentionWrapper({ data, UserMention, RoleMention, parse, props }: Mentio
> >
<span <span
onMouseEnter={() => { onMouseEnter={() => {
// @ts-expect-error const mention = (children as any)?.[0]?.props?.children;
const mention = children?.[0]?.props?.children;
if (typeof mention !== "string") return; if (typeof mention !== "string") return;
const id = mention.match(/<@!?(\d+)>/)?.[1]; const id = mention.match(/<@!?(\d+)>/)?.[1];

View file

@ -134,7 +134,7 @@ function ToolboxFragmentWrapper({ children }: { children: ReactNode[]; }) {
</ErrorBoundary> </ErrorBoundary>
); );
return <>{children}</>; return children;
} }
export default definePlugin({ export default definePlugin({

View file

@ -23,11 +23,11 @@
* @param func The function to wrap * @param func The function to wrap
* @param delay The delay in milliseconds * @param delay The delay in milliseconds
*/ */
export function debounce<T extends (...args: any[]) => unknown>(func: T, delay = 300): T { export function debounce<T extends (...args: never[]) => unknown>(func: T, delay = 300) {
// is number when this runs in the render process // is number when this runs in the render process
let timeout: NodeJS.Timeout; let timeout: NodeJS.Timeout;
return function (...args: any[]) { return function (...args: Parameters<T>) {
clearTimeout(timeout); clearTimeout(timeout);
timeout = setTimeout(() => { func(...args); }, delay); timeout = setTimeout(() => { func(...args); }, delay);
} as any; };
} }

View file

@ -19,7 +19,7 @@
import type { Command } from "@api/Commands"; import type { Command } from "@api/Commands";
import type { NavContextMenuPatchCallback } from "@api/ContextMenu"; import type { NavContextMenuPatchCallback } from "@api/ContextMenu";
import type { FluxActionHandlerMap } from "@vencord/discord-types"; import type { FluxActionHandlerMap } from "@vencord/discord-types";
import type { ComponentType, JSX } from "react"; import type { ComponentType, FunctionComponent } from "react";
import type Electron from "standalone-electron-types"; import type Electron from "standalone-electron-types";
import type { Promisable } from "type-fest"; import type { Promisable } from "type-fest";
@ -284,7 +284,7 @@ export interface IPluginOptionComponentProps {
export interface PluginSettingComponentDef { export interface PluginSettingComponentDef {
type: OptionType.COMPONENT; type: OptionType.COMPONENT;
component: (props: IPluginOptionComponentProps) => JSX.Element; component: FunctionComponent<IPluginOptionComponentProps>;
} }
/** Maps a `PluginSettingDef` to its value type */ /** Maps a `PluginSettingDef` to its value type */

View file

@ -51,8 +51,7 @@ Object.defineProperty(window, WEBPACK_CHUNK, {
logger.info(`Patching ${WEBPACK_CHUNK}.push`); logger.info(`Patching ${WEBPACK_CHUNK}.push`);
patchPush(v); patchPush(v);
// @ts-expect-error delete (window as any)[WEBPACK_CHUNK];
delete window[WEBPACK_CHUNK];
window[WEBPACK_CHUNK] = v; window[WEBPACK_CHUNK] = v;
} }
} }