diff --git a/package.json b/package.json index c3e605a..ade0fcf 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "crypto-js": "^4.2.0", "dayjs": "^1.11.13", "dexie": "^4.0.10", + "eslint-linter-browserify": "^7.32.0", "eventemitter3": "^5.0.1", "i18next": "^23.16.4", "monaco-editor": "^0.52.2", @@ -64,12 +65,13 @@ "eslint": "^9.24.0", "eslint-plugin-react": "^7.37.4", "eslint-plugin-react-hooks": "^5.2.0", - "eslint-plugin-userscripts": "^0.5.6", + "eslint-plugin-userscripts": "^0.2.12", "fake-indexeddb": "^6.0.0", "globals": "^16.0.0", "jsdom": "^25.0.1", "jszip": "^3.10.1", "mock-xmlhttprequest": "^8.4.1", + "node-polyfill-webpack-plugin": "^3.0.0", "postcss": "^8.4.49", "postcss-loader": "^8.1.1", "prettier": "^3.5.3", diff --git a/eslint/compat-grant.js b/packages/eslint/compat-grant.js similarity index 93% rename from eslint/compat-grant.js rename to packages/eslint/compat-grant.js index d30d7c4..ce11b66 100644 --- a/eslint/compat-grant.js +++ b/packages/eslint/compat-grant.js @@ -14,6 +14,7 @@ const compatMap = { GM_addElement: [ { type: "tampermonkey", versionConstraint: ">=4.11.6113" }, { type: "violentmonkey", versionConstraint: ">=2.13.0-beta.3" }, + { type: "scriptcat", versionConstraint: "*" }, ], "GM.addStyle": [ { type: "tampermonkey", versionConstraint: ">=4.5" }, @@ -24,15 +25,19 @@ const compatMap = { { type: "violentmonkey", versionConstraint: "*" }, { type: "greasemonkey", versionConstraint: ">=0.6.1.4 <4" }, ], - "GM.addValueChangeListener": [ - { type: "tampermonkey", versionConstraint: ">=4.5" }, - ], + "GM.addValueChangeListener": [{ type: "tampermonkey", versionConstraint: ">=4.5" }], GM_addValueChangeListener: [ { type: "tampermonkey", versionConstraint: ">=2.3.2607" }, { type: "violentmonkey", versionConstraint: ">=2.12.0" }, ], - "GM.cookie": [{ type: "tampermonkey", versionConstraint: ">=4.8" }], - GM_cookie: [{ type: "tampermonkey", versionConstraint: ">=4.8" }], + "GM.cookie": [ + { type: "tampermonkey", versionConstraint: ">=4.8" }, + { type: "scriptcat", versionConstraint: "*" }, + ], + GM_cookie: [ + { type: "tampermonkey", versionConstraint: ">=4.8" }, + { type: "scriptcat", versionConstraint: "*" }, + ], "GM.deleteValue": [ { type: "tampermonkey", versionConstraint: ">=4.5" }, { type: "violentmonkey", versionConstraint: ">=2.12.0" }, @@ -54,9 +59,7 @@ const compatMap = { { type: "violentmonkey", versionConstraint: "*" }, { type: "greasemonkey", versionConstraint: ">=0.8.20080609.0 <4" }, ], - "GM.getResourceURL": [ - { type: "violentmonkey", versionConstraint: ">=2.12.0 <2.13.0.10" }, - ], + "GM.getResourceURL": [{ type: "violentmonkey", versionConstraint: ">=2.12.0 <2.13.0.10" }], GM_getResourceURL: [ { type: "tampermonkey", versionConstraint: "*" }, { type: "violentmonkey", versionConstraint: "*" }, @@ -139,9 +142,7 @@ const compatMap = { { type: "violentmonkey", versionConstraint: "*" }, { type: "greasemonkey", versionConstraint: ">=0.2.5 <4" }, ], - "GM.removeValueChangeListener": [ - { type: "tampermonkey", versionConstraint: ">=4.5" }, - ], + "GM.removeValueChangeListener": [{ type: "tampermonkey", versionConstraint: ">=4.5" }], GM_removeValueChangeListener: [ { type: "tampermonkey", versionConstraint: ">=2.3.2607" }, { type: "violentmonkey", versionConstraint: ">=2.12.0" }, @@ -168,9 +169,7 @@ const compatMap = { { type: "violentmonkey", versionConstraint: "*" }, { type: "greasemonkey", versionConstraint: ">=0.3-beta <4" }, ], - "GM.unregisterMenuCommand": [ - { type: "tampermonkey", versionConstraint: ">=4.5" }, - ], + "GM.unregisterMenuCommand": [{ type: "tampermonkey", versionConstraint: ">=4.5" }], GM_unregisterMenuCommand: [ { type: "tampermonkey", versionConstraint: ">=3.6.3737" }, { type: "violentmonkey", versionConstraint: ">=2.9.4" }, diff --git a/eslint/compat-headers.js b/packages/eslint/compat-headers.js similarity index 99% rename from eslint/compat-headers.js rename to packages/eslint/compat-headers.js index 7961c8c..147b469 100644 --- a/eslint/compat-headers.js +++ b/packages/eslint/compat-headers.js @@ -195,6 +195,7 @@ const compatMap = { exportValue: [], exportCookie: [], scriptUrl: [], + storageName: [], }, }; diff --git a/eslint/linter-config.ts b/packages/eslint/linter-config.ts similarity index 82% rename from eslint/linter-config.ts rename to packages/eslint/linter-config.ts index 8d97833..5f3b91e 100644 --- a/eslint/linter-config.ts +++ b/packages/eslint/linter-config.ts @@ -19,26 +19,26 @@ const userscriptsConfig = { }, }; -// const userscriptsRules = Object.fromEntries( -// Object.keys(userscriptsConfig.rules).map((name) => { -// const ruleName = name.split("/")[1]; -// // eslint-disable-next-line import/no-dynamic-require, global-require -// const ruleMeta = require(`eslint-plugin-userscripts/lib/rules/${ruleName}.js`); -// return [ -// name, -// { -// ...ruleMeta, -// meta: { -// ...ruleMeta.meta, -// docs: { -// ...ruleMeta.meta.docs, -// url: `https://yash-singh1.github.io/eslint-plugin-userscripts/#/rules/${ruleName}`, -// }, -// }, -// }, -// ]; -// }) -// ); +const userscriptsRules = Object.fromEntries( + Object.keys(userscriptsConfig.rules).map((name) => { + const ruleName = name.split("/")[1]; + // eslint-disable-next-line import/no-dynamic-require, global-require + const ruleMeta = require(`eslint-plugin-userscripts/lib/rules/${ruleName}.js`); + return [ + name, + { + ...ruleMeta, + meta: { + ...ruleMeta.meta, + docs: { + ...ruleMeta.meta.docs, + url: `https://yash-singh1.github.io/eslint-plugin-userscripts/#/rules/${ruleName}`, + }, + }, + }, + ]; + }) +); // 默认规则 const config = { @@ -126,6 +126,6 @@ const config = { }; // 以文本形式导出默认规则 -const defaultConfig = JSON.stringify(config); +const defaultConfig = JSON.stringify(config, null, 2); -export { defaultConfig, userscriptsConfig }; +export { defaultConfig, userscriptsConfig, userscriptsRules }; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b8a6286..736ad9c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,6 +35,9 @@ importers: dexie: specifier: ^4.0.10 version: 4.0.10 + eslint-linter-browserify: + specifier: ^7.32.0 + version: 7.32.0 eventemitter3: specifier: ^5.0.1 version: 5.0.1 @@ -145,8 +148,8 @@ importers: specifier: ^5.2.0 version: 5.2.0(eslint@9.24.0(jiti@1.21.7)) eslint-plugin-userscripts: - specifier: ^0.5.6 - version: 0.5.6(eslint@9.24.0(jiti@1.21.7)) + specifier: ^0.2.12 + version: 0.2.13(eslint@9.24.0(jiti@1.21.7)) fake-indexeddb: specifier: ^6.0.0 version: 6.0.0 @@ -162,6 +165,9 @@ importers: mock-xmlhttprequest: specifier: ^8.4.1 version: 8.4.1 + node-polyfill-webpack-plugin: + specifier: ^3.0.0 + version: 3.0.0(webpack@5.96.1(esbuild@0.23.1)) postcss: specifier: ^8.4.49 version: 8.4.49 @@ -976,46 +982,55 @@ packages: resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==} cpu: [arm] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.24.4': resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==} cpu: [arm] os: [linux] + libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.24.4': resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.24.4': resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==} cpu: [arm64] os: [linux] + libc: [musl] '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==} cpu: [ppc64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-riscv64-gnu@4.24.4': resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==} cpu: [riscv64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-s390x-gnu@4.24.4': resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==} cpu: [s390x] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.24.4': resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==} cpu: [x64] os: [linux] + libc: [glibc] '@rollup/rollup-linux-x64-musl@4.24.4': resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==} cpu: [x64] os: [linux] + libc: [musl] '@rollup/rollup-win32-arm64-msvc@4.24.4': resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==} @@ -1080,6 +1095,7 @@ packages: resolution: {integrity: sha512-nJzY+Ur6FxWM0xc+G2tY1TQu3s6qgolxXb5K2VLIDHSPqDAjqRc35ypQc9Tz3rUPb8HVh+X7YLIZxA0hE4eQOg==} cpu: [arm64] os: [linux] + libc: [glibc] '@rspack/binding-linux-arm64-musl@1.0.14': resolution: {integrity: sha512-qgybhxI/nnoa8CUz7zKTC0Oh37NZt9uRxsSV7+ZYrfxqbrVCoNVuutPpY724uUHy1M6W34kVEm1uT1N4Ka5cZg==} @@ -1091,6 +1107,7 @@ packages: resolution: {integrity: sha512-sRi77ccO/oOfyBNq3FgW2pDtXcgMzslLokOby8NpD/kv/SxtOE4ORoLZKzdJyGNh2WDPbtSwIDWPes2x4MKASQ==} cpu: [arm64] os: [linux] + libc: [musl] '@rspack/binding-linux-x64-gnu@1.0.14': resolution: {integrity: sha512-5vzaDRw3/sGKo3ax/1cU3/cxqNjajwlt2LU288vXNe1/n8oe/pcDfYcTugpOe/A1DqzadanudJszLpFcKsaFtQ==} @@ -1102,6 +1119,7 @@ packages: resolution: {integrity: sha512-KnrFQUj6SKJFGXqJW9Kgdv+mRGcPCirQesuwXtW+9YejT6MzLRRdJ4NDQdfcmfLZK9+ap+l73bLXAyMiIBZiOw==} cpu: [x64] os: [linux] + libc: [glibc] '@rspack/binding-linux-x64-musl@1.0.14': resolution: {integrity: sha512-4U6QD9xVS1eGme52DuJr6Fg/KdcUfJ+iKwH49Up460dZ/fLvGylnVGA+V0mzPlKi8gfy7NwFuYXZdu3Pwi1YYg==} @@ -1113,6 +1131,7 @@ packages: resolution: {integrity: sha512-ZcTl4LBgxp5Bfyu9x7NhYRAR4qWPwhhxzwXmiQ1ya7DsdqiYaiCr59dPQx7ZaExXckeHGly75B3aTn1II9Vexw==} cpu: [x64] os: [linux] + libc: [musl] '@rspack/binding-win32-arm64-msvc@1.0.14': resolution: {integrity: sha512-SjeYw7qqRHYZ5RPClu+ffKZsShQdU3amA1OwC3M0AS6dbfEcji8482St3Y8Z+QSzYRapCEZij9LMM/9ypEhISg==} @@ -1661,6 +1680,10 @@ packages: '@xtuc/long@4.2.2': resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + accepts@1.3.8: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} @@ -1799,9 +1822,15 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + asn1@0.2.6: resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -1848,6 +1877,12 @@ packages: bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + bn.js@4.12.1: + resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==} + + bn.js@5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -1868,6 +1903,29 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + + browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + + browserify-rsa@4.1.1: + resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} + engines: {node: '>= 0.10'} + + browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} + + browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + browserslist@4.24.2: resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -1884,9 +1942,18 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + builtin-status-codes@3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + bundle-name@4.1.0: resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} engines: {node: '>=18'} @@ -1961,6 +2028,10 @@ packages: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} + cipher-base@1.0.6: + resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + engines: {node: '>= 0.10'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2034,6 +2105,12 @@ packages: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} + console-browserify@1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + + constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + content-disposition@0.5.4: resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} engines: {node: '>= 0.6'} @@ -2075,6 +2152,15 @@ packages: crc@3.8.0: resolution: {integrity: sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==} + create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + create-require@1.1.1: resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} @@ -2102,6 +2188,10 @@ packages: crypt@0.0.2: resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + crypto-browserify@3.12.1: + resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} + engines: {node: '>= 0.10'} + crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} @@ -2236,6 +2326,9 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + destr@2.0.3: resolution: {integrity: sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ==} @@ -2256,6 +2349,9 @@ packages: resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} + diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + dns-packet@5.6.1: resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} engines: {node: '>=6'} @@ -2267,6 +2363,10 @@ packages: dom-helpers@5.2.1: resolution: {integrity: sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA==} + domain-browser@4.22.0: + resolution: {integrity: sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==} + engines: {node: '>=10'} + dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -2286,6 +2386,9 @@ packages: electron-to-chromium@1.5.67: resolution: {integrity: sha512-nz88NNBsD7kQSAGGJyp8hS6xSPtWwqNogA0mjtc2nUYeEf3nURK9qpV18TuBdDmEDgVWotS8Wkzf+V52dSQ/LQ==} + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2400,6 +2503,9 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} + eslint-linter-browserify@7.32.0: + resolution: {integrity: sha512-yFLWaJYfsPk2B5VD9VKkxsEs36X4CS9U9bIwZ6VGWSb92obY2hmLymty1ca83U0dP1Yq9UOwQv1LIuE5c1TdMQ==} + eslint-plugin-react-hooks@5.0.0: resolution: {integrity: sha512-hIOwI+5hYGpJEc4uPRmz2ulCjAGD/N13Lukkh8cLV0i2IRk/bdZDYjgLVHj+U9Z704kLIdIO6iueGvxNur0sgw==} engines: {node: '>=10'} @@ -2424,11 +2530,11 @@ packages: peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-userscripts@0.5.6: - resolution: {integrity: sha512-/DXb8UKyEkNCzXOA6j4E4rCWn2mLCUw2TMxrzSoz3spi4cyANlE0JNmtRleAmzc1HTUmZXr5fIMCQxyLS73DZQ==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-plugin-userscripts@0.2.13: + resolution: {integrity: sha512-IubA8DsbVlsYAZhW5ovmLZjyEn62xzgDN7zQEl58tkGu6DjuYRIZ4qfUj3NtPqbm6f+NhKxygqCY+jNyTYoMLg==} + engines: {node: '>=14.0.0 <21.0.0'} peerDependencies: - eslint: '>=8.40.0 <11' + eslint: '>=6.0.0 <9' eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} @@ -2512,6 +2618,10 @@ packages: resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} @@ -2522,6 +2632,9 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -2800,10 +2913,20 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} + hash-base@3.0.5: + resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} + engines: {node: '>= 0.10'} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + hot-patcher@2.0.1: resolution: {integrity: sha512-ECg1JFG0YzehicQaogenlcs2qg6WsXQsxtnbr1i696u5tLUjtJdQAh0u2g0Q5YV45f263Ta1GnUJsc8WIfJf4Q==} @@ -2854,6 +2977,9 @@ packages: resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} engines: {node: '>=8.0.0'} + https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + https-proxy-agent@7.0.5: resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} engines: {node: '>= 14'} @@ -2931,6 +3057,10 @@ packages: resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} engines: {node: '>= 10'} + is-arguments@1.2.0: + resolution: {integrity: sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==} + engines: {node: '>= 0.4'} + is-array-buffer@3.0.4: resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} engines: {node: '>= 0.4'} @@ -3042,6 +3172,10 @@ packages: resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} engines: {node: '>= 0.4'} + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + is-negative-zero@2.0.3: resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} engines: {node: '>= 0.4'} @@ -3326,6 +3460,9 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + md5@2.3.0: resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} @@ -3362,6 +3499,10 @@ packages: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + mime-db@1.52.0: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} @@ -3386,6 +3527,9 @@ packages: minimalistic-assert@1.0.1: resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} @@ -3467,6 +3611,12 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} + node-polyfill-webpack-plugin@3.0.0: + resolution: {integrity: sha512-QpG496dDBiaelQZu9wDcVvpLbtk7h9Ctz693RaUMZBgl8DUoFToO90ZTLKq57gP7rwKqYtGbMBXkcEgLSag2jQ==} + engines: {node: '>=14'} + peerDependencies: + webpack: '>=5' + node-releases@2.0.18: resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} @@ -3506,6 +3656,10 @@ packages: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} engines: {node: '>= 0.4'} + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + object-keys@1.1.1: resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} engines: {node: '>= 0.4'} @@ -3567,6 +3721,9 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -3607,6 +3764,10 @@ packages: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} + parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.10'} + parse-json@5.2.0: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} @@ -3618,6 +3779,9 @@ packages: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -3657,6 +3821,10 @@ packages: resolution: {integrity: sha512-XDF38WCH3z5OV/OVa8GKUNtLAyneuzbCisx7QUCF8Q6Nutx0WnJrQe5O+kOtBlLfRNUws98Y58Lblp+NJG5T4Q==} hasBin: true + pbkdf2@3.1.2: + resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} + engines: {node: '>=0.12'} + perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -3723,6 +3891,10 @@ packages: process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} @@ -3733,6 +3905,12 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3741,6 +3919,10 @@ packages: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} + querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + querystringify@2.2.0: resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} @@ -3750,6 +3932,9 @@ packages: randombytes@2.1.0: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + range-parser@1.2.1: resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} engines: {node: '>= 0.6'} @@ -3882,6 +4067,10 @@ packages: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -3921,6 +4110,10 @@ packages: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} + requireindex@1.2.0: + resolution: {integrity: sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==} + engines: {node: '>=0.10.5'} + requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} @@ -3961,6 +4154,9 @@ packages: resolution: {integrity: sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==} hasBin: true + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + rollup@4.24.4: resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -4101,6 +4297,10 @@ packages: setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sha.js@2.4.11: + resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} + hasBin: true + shallowequal@1.1.0: resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} @@ -4198,6 +4398,12 @@ packages: std-env@3.7.0: resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + stream-http@3.2.0: + resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} + string-width@4.2.3: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} @@ -4321,6 +4527,10 @@ packages: thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} @@ -4431,6 +4641,9 @@ packages: engines: {node: '>=18.0.0'} hasBin: true + tty-browserify@0.0.1: + resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + turbo-stream@2.4.0: resolution: {integrity: sha512-FHncC10WpBd2eOmGwpmQsWLDoK4cqsA/UT/GqNoaKOQnT8uzhtCbg3EoUDMvqpOSAI0S26mr0rkjzbOO6S3v1g==} @@ -4568,6 +4781,10 @@ packages: url-parse@1.5.10: resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} + use-callback-ref@1.3.2: resolution: {integrity: sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==} engines: {node: '>=10'} @@ -4596,6 +4813,9 @@ packages: util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + utils-merge@1.0.1: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} @@ -4676,6 +4896,9 @@ packages: jsdom: optional: true + vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + void-elements@3.1.0: resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} engines: {node: '>=0.10.0'} @@ -4893,6 +5116,10 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5330,7 +5557,6 @@ snapshots: '@jridgewell/set-array': 1.2.1 '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 - optional: true '@jridgewell/resolve-uri@3.1.2': {} @@ -5340,7 +5566,6 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - optional: true '@jridgewell/sourcemap-codec@1.5.0': {} @@ -5775,18 +6000,15 @@ snapshots: dependencies: '@types/eslint': 9.6.1 '@types/estree': 1.0.7 - optional: true '@types/eslint@9.6.1': dependencies: '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 - optional: true '@types/estree@1.0.6': {} - '@types/estree@1.0.7': - optional: true + '@types/estree@1.0.7': {} '@types/express-serve-static-core@4.19.6': dependencies: @@ -5840,7 +6062,6 @@ snapshots: '@types/node@22.14.0': dependencies: undici-types: 6.21.0 - optional: true '@types/node@22.8.1': dependencies: @@ -6350,26 +6571,20 @@ snapshots: dependencies: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - optional: true - '@webassemblyjs/floating-point-hex-parser@1.13.2': - optional: true + '@webassemblyjs/floating-point-hex-parser@1.13.2': {} - '@webassemblyjs/helper-api-error@1.13.2': - optional: true + '@webassemblyjs/helper-api-error@1.13.2': {} - '@webassemblyjs/helper-buffer@1.14.1': - optional: true + '@webassemblyjs/helper-buffer@1.14.1': {} '@webassemblyjs/helper-numbers@1.13.2': dependencies: '@webassemblyjs/floating-point-hex-parser': 1.13.2 '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - optional: true - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - optional: true + '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} '@webassemblyjs/helper-wasm-section@1.14.1': dependencies: @@ -6377,20 +6592,16 @@ snapshots: '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/wasm-gen': 1.14.1 - optional: true '@webassemblyjs/ieee754@1.13.2': dependencies: '@xtuc/ieee754': 1.2.0 - optional: true '@webassemblyjs/leb128@1.13.2': dependencies: '@xtuc/long': 4.2.2 - optional: true - '@webassemblyjs/utf8@1.13.2': - optional: true + '@webassemblyjs/utf8@1.13.2': {} '@webassemblyjs/wasm-edit@1.14.1': dependencies: @@ -6402,7 +6613,6 @@ snapshots: '@webassemblyjs/wasm-opt': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wast-printer': 1.14.1 - optional: true '@webassemblyjs/wasm-gen@1.14.1': dependencies: @@ -6411,7 +6621,6 @@ snapshots: '@webassemblyjs/ieee754': 1.13.2 '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - optional: true '@webassemblyjs/wasm-opt@1.14.1': dependencies: @@ -6419,7 +6628,6 @@ snapshots: '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/wasm-gen': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - optional: true '@webassemblyjs/wasm-parser@1.14.1': dependencies: @@ -6429,19 +6637,19 @@ snapshots: '@webassemblyjs/ieee754': 1.13.2 '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - optional: true '@webassemblyjs/wast-printer@1.14.1': dependencies: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - optional: true - '@xtuc/ieee754@1.2.0': - optional: true + '@xtuc/ieee754@1.2.0': {} - '@xtuc/long@4.2.2': - optional: true + '@xtuc/long@4.2.2': {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 accepts@1.3.8: dependencies: @@ -6479,7 +6687,6 @@ snapshots: ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - optional: true ajv-keywords@5.1.0(ajv@8.17.1): dependencies: @@ -6624,10 +6831,24 @@ snapshots: get-intrinsic: 1.2.7 is-array-buffer: 3.0.5 + asn1.js@4.10.1: + dependencies: + bn.js: 4.12.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + asn1@0.2.6: dependencies: safer-buffer: 2.1.2 + assert@2.1.0: + dependencies: + call-bind: 1.0.8 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.7 + util: 0.12.5 + assertion-error@2.0.1: {} async@2.6.4: @@ -6670,6 +6891,10 @@ snapshots: inherits: 2.0.4 readable-stream: 3.6.2 + bn.js@4.12.1: {} + + bn.js@5.2.1: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -6710,6 +6935,53 @@ snapshots: dependencies: fill-range: 7.1.1 + brorand@1.1.0: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.6 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-cipher@1.0.1: + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + + browserify-des@1.0.2: + dependencies: + cipher-base: 1.0.6 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-rsa@4.1.1: + dependencies: + bn.js: 5.2.1 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + browserify-sign@4.2.3: + dependencies: + bn.js: 5.2.1 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.6.1 + hash-base: 3.0.5 + inherits: 2.0.4 + parse-asn1: 5.1.7 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + browserify-zlib@0.2.0: + dependencies: + pako: 1.0.11 + browserslist@4.24.2: dependencies: caniuse-lite: 1.0.30001712 @@ -6723,18 +6995,25 @@ snapshots: electron-to-chromium: 1.5.132 node-releases: 2.0.19 update-browserslist-db: 1.1.3(browserslist@4.24.4) - optional: true buffer-crc32@0.2.13: {} - buffer-from@1.1.2: - optional: true + buffer-from@1.1.2: {} + + buffer-xor@1.0.3: {} buffer@5.7.1: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + builtin-status-codes@3.0.0: {} + bundle-name@4.1.0: dependencies: run-applescript: 7.0.0 @@ -6812,8 +7091,12 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chrome-trace-event@1.0.4: - optional: true + chrome-trace-event@1.0.4: {} + + cipher-base@1.0.6: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 cliui@8.0.1: dependencies: @@ -6900,6 +7183,10 @@ snapshots: consola@3.2.3: {} + console-browserify@1.2.0: {} + + constants-browserify@1.0.0: {} + content-disposition@0.5.4: dependencies: safe-buffer: 5.2.1 @@ -6934,6 +7221,28 @@ snapshots: dependencies: buffer: 5.7.1 + create-ecdh@4.0.4: + dependencies: + bn.js: 4.12.1 + elliptic: 6.6.1 + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.6 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.11 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.6 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + create-require@1.1.1: {} cron@3.2.1: @@ -6966,6 +7275,21 @@ snapshots: crypt@0.0.2: {} + crypto-browserify@3.12.1: + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.3 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + hash-base: 3.0.5 + inherits: 2.0.4 + pbkdf2: 3.1.2 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + crypto-js@4.2.0: {} css-tree@3.0.1: @@ -7081,6 +7405,11 @@ snapshots: depd@2.0.0: {} + des.js@1.1.0: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + destr@2.0.3: {} destroy@1.2.0: {} @@ -7093,6 +7422,12 @@ snapshots: diff@4.0.2: {} + diffie-hellman@5.0.3: + dependencies: + bn.js: 4.12.1 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + dns-packet@5.6.1: dependencies: '@leichtgewicht/ip-codec': 2.0.5 @@ -7106,6 +7441,8 @@ snapshots: '@babel/runtime': 7.26.0 csstype: 3.1.3 + domain-browser@4.22.0: {} + dunder-proto@1.0.1: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7118,11 +7455,20 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.132: - optional: true + electron-to-chromium@1.5.132: {} electron-to-chromium@1.5.67: {} + elliptic@6.6.1: + dependencies: + bn.js: 4.12.1 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} @@ -7139,7 +7485,6 @@ snapshots: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 - optional: true entities@4.5.0: {} @@ -7302,8 +7647,7 @@ snapshots: iterator.prototype: 1.1.5 safe-array-concat: 1.1.3 - es-module-lexer@1.6.0: - optional: true + es-module-lexer@1.6.0: {} es-object-atoms@1.0.0: dependencies: @@ -7397,6 +7741,8 @@ snapshots: escape-string-regexp@4.0.0: {} + eslint-linter-browserify@7.32.0: {} + eslint-plugin-react-hooks@5.0.0(eslint@9.13.0): dependencies: eslint: 9.13.0 @@ -7449,16 +7795,16 @@ snapshots: string.prototype.matchall: 4.0.12 string.prototype.repeat: 1.0.0 - eslint-plugin-userscripts@0.5.6(eslint@9.24.0(jiti@1.21.7)): + eslint-plugin-userscripts@0.2.13(eslint@9.24.0(jiti@1.21.7)): dependencies: eslint: 9.24.0(jiti@1.21.7) + requireindex: 1.2.0 semver: 7.6.3 eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - optional: true eslint-scope@8.1.0: dependencies: @@ -7578,8 +7924,7 @@ snapshots: dependencies: estraverse: 5.3.0 - estraverse@4.3.0: - optional: true + estraverse@4.3.0: {} estraverse@5.3.0: {} @@ -7593,12 +7938,18 @@ snapshots: etag@1.8.1: {} + event-target-shim@5.0.1: {} + eventemitter3@4.0.7: {} eventemitter3@5.0.1: {} - events@3.3.0: - optional: true + events@3.3.0: {} + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 execa@5.1.1: dependencies: @@ -7878,8 +8229,7 @@ snapshots: dependencies: is-glob: 4.0.3 - glob-to-regexp@0.4.1: - optional: true + glob-to-regexp@0.4.1: {} glob@10.4.5: dependencies: @@ -7948,10 +8298,26 @@ snapshots: dependencies: has-symbols: 1.1.0 + hash-base@3.0.5: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + hasown@2.0.2: dependencies: function-bind: 1.1.2 + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + hot-patcher@2.0.1: {} hpack.js@2.1.6: @@ -8019,6 +8385,8 @@ snapshots: transitivePeerDependencies: - debug + https-browserify@1.0.0: {} + https-proxy-agent@7.0.5: dependencies: agent-base: 7.1.1 @@ -8096,6 +8464,11 @@ snapshots: ipaddr.js@2.2.0: {} + is-arguments@1.2.0: + dependencies: + call-bound: 1.0.3 + has-tostringtag: 1.0.2 + is-array-buffer@3.0.4: dependencies: call-bind: 1.0.7 @@ -8200,6 +8573,11 @@ snapshots: is-map@2.0.3: {} + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + is-negative-zero@2.0.3: {} is-network-error@1.1.0: {} @@ -8344,7 +8722,6 @@ snapshots: '@types/node': 22.14.0 merge-stream: 2.0.0 supports-color: 8.1.1 - optional: true jiti@1.21.6: {} @@ -8445,8 +8822,7 @@ snapshots: load-tsconfig@0.2.5: {} - loader-runner@4.3.0: - optional: true + loader-runner@4.3.0: {} local-pkg@0.5.1: dependencies: @@ -8503,6 +8879,12 @@ snapshots: math-intrinsics@1.1.0: {} + md5.js@1.3.5: + dependencies: + hash-base: 3.0.5 + inherits: 2.0.4 + safe-buffer: 5.2.1 + md5@2.3.0: dependencies: charenc: 0.0.2 @@ -8540,6 +8922,11 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 + miller-rabin@4.0.1: + dependencies: + bn.js: 4.12.1 + brorand: 1.1.0 + mime-db@1.52.0: {} mime-db@1.54.0: {} @@ -8554,6 +8941,8 @@ snapshots: minimalistic-assert@1.0.1: {} + minimalistic-crypto-utils@1.0.1: {} + minimatch@3.1.2: dependencies: brace-expansion: 1.1.11 @@ -8598,8 +8987,7 @@ snapshots: negotiator@0.6.4: {} - neo-async@2.6.2: - optional: true + neo-async@2.6.2: {} nested-property@4.0.0: {} @@ -8615,10 +9003,37 @@ snapshots: node-forge@1.3.1: {} + node-polyfill-webpack-plugin@3.0.0(webpack@5.96.1(esbuild@0.23.1)): + dependencies: + assert: 2.1.0 + browserify-zlib: 0.2.0 + buffer: 6.0.3 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + crypto-browserify: 3.12.1 + domain-browser: 4.22.0 + events: 3.3.0 + https-browserify: 1.0.0 + os-browserify: 0.3.0 + path-browserify: 1.0.1 + process: 0.11.10 + punycode: 2.3.1 + querystring-es3: 0.2.1 + readable-stream: 4.7.0 + stream-browserify: 3.0.0 + stream-http: 3.2.0 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.1 + type-fest: 4.31.0 + url: 0.11.4 + util: 0.12.5 + vm-browserify: 1.1.2 + webpack: 5.96.1(esbuild@0.23.1) + node-releases@2.0.18: {} - node-releases@2.0.19: - optional: true + node-releases@2.0.19: {} node-rsa@1.1.1: dependencies: @@ -8642,6 +9057,11 @@ snapshots: object-inspect@1.13.4: {} + object-is@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + object-keys@1.1.1: {} object.assign@4.1.5: @@ -8726,6 +9146,8 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + os-browserify@0.3.0: {} + own-keys@1.0.1: dependencies: get-intrinsic: 1.2.7 @@ -8769,6 +9191,15 @@ snapshots: dependencies: callsites: 3.1.0 + parse-asn1@5.1.7: + dependencies: + asn1.js: 4.10.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + hash-base: 3.0.5 + pbkdf2: 3.1.2 + safe-buffer: 5.2.1 + parse-json@5.2.0: dependencies: '@babel/code-frame': 7.26.2 @@ -8782,6 +9213,8 @@ snapshots: parseurl@1.3.3: {} + path-browserify@1.0.1: {} + path-exists@4.0.0: {} path-is-absolute@1.0.1: {} @@ -8810,6 +9243,14 @@ snapshots: ieee754: 1.2.1 resolve-protobuf-schema: 2.1.0 + pbkdf2@3.1.2: + dependencies: + create-hash: 1.2.0 + create-hmac: 1.1.7 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.11 + perfect-debounce@1.0.0: {} picocolors@1.1.1: {} @@ -8862,6 +9303,8 @@ snapshots: process-nextick-args@2.0.1: {} + process@0.11.10: {} + prop-types@15.8.1: dependencies: loose-envify: 1.4.0 @@ -8875,12 +9318,25 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + public-encrypt@4.0.3: + dependencies: + bn.js: 4.12.1 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + parse-asn1: 5.1.7 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + punycode@1.4.1: {} + punycode@2.3.1: {} qs@6.13.0: dependencies: side-channel: 1.1.0 + querystring-es3@0.2.1: {} + querystringify@2.2.0: {} queue-microtask@1.2.3: {} @@ -8888,7 +9344,11 @@ snapshots: randombytes@2.1.0: dependencies: safe-buffer: 5.2.1 - optional: true + + randomfill@1.0.4: + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 range-parser@1.2.1: {} @@ -9037,6 +9497,14 @@ snapshots: string_decoder: 1.3.0 util-deprecate: 1.0.2 + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + readdirp@3.6.0: dependencies: picomatch: 2.3.1 @@ -9085,6 +9553,8 @@ snapshots: require-from-string@2.0.2: {} + requireindex@1.2.0: {} + requires-port@1.0.0: {} reselect@5.1.1: {} @@ -9119,6 +9589,11 @@ snapshots: dependencies: glob: 10.4.5 + ripemd160@2.0.2: + dependencies: + hash-base: 3.0.5 + inherits: 2.0.4 + rollup@4.24.4: dependencies: '@types/estree': 1.0.6 @@ -9211,7 +9686,6 @@ snapshots: '@types/json-schema': 7.0.15 ajv: 6.12.6 ajv-keywords: 3.5.2(ajv@6.12.6) - optional: true schema-utils@4.2.0: dependencies: @@ -9267,7 +9741,6 @@ snapshots: serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - optional: true serve-index@1.9.1: dependencies: @@ -9320,6 +9793,11 @@ snapshots: setprototypeof@1.2.0: {} + sha.js@2.4.11: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + shallowequal@1.1.0: {} shebang-command@2.0.0: @@ -9401,10 +9879,8 @@ snapshots: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - optional: true - source-map@0.6.1: - optional: true + source-map@0.6.1: {} spdy-transport@3.0.0: dependencies: @@ -9437,6 +9913,18 @@ snapshots: std-env@3.7.0: {} + stream-browserify@3.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.2 + + stream-http@3.2.0: + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + xtend: 4.0.2 + string-width@4.2.3: dependencies: emoji-regex: 8.0.0 @@ -9550,14 +10038,12 @@ snapshots: supports-color@8.1.1: dependencies: has-flag: 4.0.0 - optional: true supports-preserve-symlinks-flag@1.0.0: {} symbol-tree@3.2.4: {} - tapable@2.2.1: - optional: true + tapable@2.2.1: {} tar-stream@2.2.0: dependencies: @@ -9577,7 +10063,6 @@ snapshots: webpack: 5.96.1(esbuild@0.23.1) optionalDependencies: esbuild: 0.23.1 - optional: true terser@5.39.0: dependencies: @@ -9585,7 +10070,6 @@ snapshots: acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 - optional: true test-exclude@7.0.1: dependencies: @@ -9605,6 +10089,10 @@ snapshots: thunky@1.1.0: {} + timers-browserify@2.0.12: + dependencies: + setimmediate: 1.0.5 + tinybench@2.9.0: {} tinyexec@0.3.1: {} @@ -9725,6 +10213,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + tty-browserify@0.0.1: {} + turbo-stream@2.4.0: {} type-check@0.4.0: @@ -9856,8 +10346,7 @@ snapshots: undici-types@6.20.0: {} - undici-types@6.21.0: - optional: true + undici-types@6.21.0: {} unocss@0.65.0-beta.2(@unocss/webpack@0.65.0-beta.2(rollup@4.24.4)(webpack@5.96.1(esbuild@0.23.1)))(postcss@8.4.49)(rollup@4.24.4)(vite@5.4.10(@types/node@22.10.2)(terser@5.39.0))(vue@3.5.13(typescript@5.7.3)): dependencies: @@ -9906,7 +10395,6 @@ snapshots: browserslist: 4.24.4 escalade: 3.2.0 picocolors: 1.1.1 - optional: true uri-js@4.4.1: dependencies: @@ -9919,6 +10407,11 @@ snapshots: querystringify: 2.2.0 requires-port: 1.0.0 + url@0.11.4: + dependencies: + punycode: 1.4.1 + qs: 6.13.0 + use-callback-ref@1.3.2(@types/react@18.3.12)(react@18.3.1): dependencies: react: 18.3.1 @@ -9940,6 +10433,14 @@ snapshots: util-deprecate@1.0.2: {} + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.2.0 + is-generator-function: 1.0.10 + is-typed-array: 1.1.15 + which-typed-array: 1.1.18 + utils-merge@1.0.1: {} uuid@11.0.3: {} @@ -10074,6 +10575,8 @@ snapshots: - supports-color - terser + vm-browserify@1.1.2: {} + void-elements@3.1.0: {} vue-flow-layout@0.1.1(vue@3.5.13(typescript@5.7.3)): @@ -10098,7 +10601,6 @@ snapshots: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - optional: true wbuf@1.7.3: dependencies: @@ -10253,8 +10755,7 @@ snapshots: - supports-color - utf-8-validate - webpack-sources@3.2.3: - optional: true + webpack-sources@3.2.3: {} webpack-virtual-modules@0.6.2: optional: true @@ -10288,7 +10789,6 @@ snapshots: - '@swc/core' - esbuild - uglify-js - optional: true websocket-driver@0.7.4: dependencies: @@ -10415,6 +10915,8 @@ snapshots: xmlchars@2.2.0: {} + xtend@4.0.2: {} + y18n@5.0.8: {} yaml@2.6.1: {} diff --git a/rspack.config.ts b/rspack.config.ts index 3e19e1c..c3c8051 100644 --- a/rspack.config.ts +++ b/rspack.config.ts @@ -3,6 +3,8 @@ import { defineConfig } from "@rspack/cli"; import { rspack } from "@rspack/core"; import { version } from "./package.json"; +const NodePolyfillPlugin = require("node-polyfill-webpack-plugin"); + const isDev = process.env.NODE_ENV === "development"; const isBeta = version.includes("-"); @@ -36,6 +38,7 @@ export default defineConfig({ options: `${src}/pages/options/main.tsx`, "editor.worker": "monaco-editor/esm/vs/editor/editor.worker.js", "ts.worker": "monaco-editor/esm/vs/language/typescript/ts.worker.js", + "linter.worker": `${src}/linter.worker.ts`, }, output: { path: `${dist}/ext/src`, @@ -47,6 +50,9 @@ export default defineConfig({ alias: { "@App": path.resolve(__dirname, "src/"), "@Packages": path.resolve(__dirname, "packages/"), + // 改写eslint-plugin-userscripts以适配脚本猫,打包时重定义模块路径 + "../data/compat-grant": path.resolve(__dirname, "./packages/eslint/compat-grant"), + "../data/compat-headers": path.resolve(__dirname, "./packages/eslint/compat-headers"), }, fallback: { child_process: false, @@ -175,6 +181,7 @@ export default defineConfig({ minify: true, chunks: ["sandbox"], }), + new NodePolyfillPlugin(), ].filter(Boolean), optimization: { minimizer: [ diff --git a/src/linter.worker.ts b/src/linter.worker.ts new file mode 100644 index 0000000..767237e --- /dev/null +++ b/src/linter.worker.ts @@ -0,0 +1,92 @@ +//@ts-ignore +import { Linter } from "eslint-linter-browserify"; +import { userscriptsRules } from "../packages/eslint/linter-config"; + +// eslint语法检查,使用webworker + +const linter = new Linter(); + +// 额外定义 userscripts 规则 +linter.defineRules(userscriptsRules); + +const rules = linter.getRules(); + +const severityMap = { + 2: 8, // 2 for ESLint is error + 1: 4, // 1 for ESLint is warning +}; + +function getTextBlock(text: string, startPosition: number, endPosition: number) { + if (startPosition > endPosition || startPosition < 0 || endPosition > text.length) { + throw new Error("Invalid positions provided"); + } + + let startLineNumber = 1; + let startColumn = 1; + let endLineNumber = 1; + let endColumn = 1; + + for (let i = 0, currentLine = 1, currentColumn = 1; i < text.length; i += 1) { + if (i === startPosition) { + startLineNumber = currentLine; + startColumn = currentColumn; + } + + if (i === endPosition) { + endLineNumber = currentLine; + endColumn = currentColumn; + break; + } + + if (text[i] === "\n") { + currentLine += 1; + currentColumn = 0; + } + + currentColumn += 1; + } + + return { + startLineNumber, + startColumn, + endLineNumber, + endColumn, + }; +} + +self.addEventListener("message", (event) => { + const { code, id, config } = event.data; + const errs = linter.verify(code, config); + const markers = errs.map((err: any) => { + const rule = rules.get(err.ruleId); + let target = ""; + if (rule) { + target = rule.meta.docs.url; + } + let fix: any; + if (err.fix) { + fix = { + range: getTextBlock(code, err.fix.range[0], err.fix.range[1]), + text: err.fix.text, + }; + } + return { + code: { + value: err.ruleId || "", + target, + }, + startLineNumber: err.line, + endLineNumber: err.endLine || err.line, + startColumn: err.column, + endColumn: err.endColumn || err.column, + message: err.message, + // 设置错误的等级,此处ESLint与monaco的存在差异,做一层映射 + // @ts-ignore + severity: severityMap[err.severity], + source: "ESLint", + fix, + }; + }); + // 发回主进程 + self.postMessage({ markers, id }); +}); diff --git a/src/pages/components/CodeEditor/index.tsx b/src/pages/components/CodeEditor/index.tsx index ca935aa..cdd69d3 100644 --- a/src/pages/components/CodeEditor/index.tsx +++ b/src/pages/components/CodeEditor/index.tsx @@ -3,6 +3,7 @@ import { LinterWorker } from "@App/pkg/utils/monaco-editor"; import { useAppSelector } from "@App/pages/store/hooks"; import { editor, Range } from "monaco-editor"; import React, { useEffect, useImperativeHandle, useRef, useState } from "react"; +import { globalCache, systemConfig } from "@App/pages/store/global"; type Props = { className?: string; @@ -18,10 +19,26 @@ const CodeEditor: React.ForwardRefRenderFunction<{ editor: editor.IStandaloneCod ) => { const settings = useAppSelector((state) => state.setting); const [monacoEditor, setEditor] = useState(); + const [enableEslint, setEnableEslint] = useState(false); + const [eslintConfig, setEslintConfig] = useState(""); + const div = useRef(null); useImperativeHandle(ref, () => ({ editor: monacoEditor, })); + + useEffect(() => { + const loadConfigs = async () => { + const [eslintConfig, enableEslint] = await Promise.all([ + systemConfig.getEslintConfig(), + systemConfig.getEnableEslint(), + ]); + setEslintConfig(eslintConfig); + setEnableEslint(enableEslint); + }; + loadConfigs(); + }, []); + useEffect(() => { if (diffCode === undefined || code === undefined || !div.current) { return () => {}; @@ -70,8 +87,7 @@ const CodeEditor: React.ForwardRefRenderFunction<{ editor: editor.IStandaloneCod }, [div, code, diffCode, editable, id]); useEffect(() => { - return () => {}; - if (!settings.eslint.enable) { + if (!enableEslint) { return () => {}; } if (!monacoEditor) { @@ -89,7 +105,7 @@ const CodeEditor: React.ForwardRefRenderFunction<{ editor: editor.IStandaloneCod LinterWorker.sendLinterMessage({ code: model.getValue(), id, - config: JSON.parse(settings.eslint.config), + config: JSON.parse(eslintConfig), }); }, 500); }; @@ -183,7 +199,7 @@ const CodeEditor: React.ForwardRefRenderFunction<{ editor: editor.IStandaloneCod } } ); - Cache.getInstance().set("eslint-fix", fix); + globalCache.set("eslint-fix", fix); // 在行号旁显示ESLint错误/警告图标 const formatMarkers = message.markers.map( @@ -203,7 +219,7 @@ const CodeEditor: React.ForwardRefRenderFunction<{ editor: editor.IStandaloneCod return () => { LinterWorker.hook.removeListener("message", handler); }; - }, [id, monacoEditor, settings.eslint.config, settings.eslint.enable]); + }, [id, monacoEditor, enableEslint, eslintConfig]); return (
{ - format(eslintConfig, { - parser: "json", - plugins: [babel], - }) + prettier + .format(eslintConfig, { + parser: "json", + plugins: [prettierPluginEstree, babel], + }) .then((res) => { systemConfig.setEslintConfig(v.target.value); }) diff --git a/src/pages/store/global.ts b/src/pages/store/global.ts index a0c6132..df6357e 100644 --- a/src/pages/store/global.ts +++ b/src/pages/store/global.ts @@ -5,3 +5,4 @@ import { MessageQueue } from "@Packages/message/message_queue"; export const message = new ExtensionMessage(); export const messageQueue = new MessageQueue(); export const systemConfig = new SystemConfig(messageQueue); +export const globalCache = new Map(); diff --git a/src/pkg/config/config.ts b/src/pkg/config/config.ts index 756630f..8da73e0 100644 --- a/src/pkg/config/config.ts +++ b/src/pkg/config/config.ts @@ -1,6 +1,6 @@ import { Message } from "@arco-design/web-react"; import ChromeStorage from "./chrome_storage"; -import { defaultConfig } from "../../../eslint/linter-config"; +import { defaultConfig } from "../../../packages/eslint/linter-config"; import { FileSystemType } from "@Packages/filesystem/factory"; import { MessageQueue } from "@Packages/message/message_queue"; diff --git a/src/pkg/utils/monaco-editor.ts b/src/pkg/utils/monaco-editor.ts index 1a0650f..4afb070 100644 --- a/src/pkg/utils/monaco-editor.ts +++ b/src/pkg/utils/monaco-editor.ts @@ -1,8 +1,10 @@ +import { globalCache } from "@App/pages/store/global"; import dts from "@App/template/scriptcat.d.tpl"; +import EventEmitter from "eventemitter3"; import { languages } from "monaco-editor"; // 注册eslint -// const linterWorker = new Worker("/src/linter.worker.js"); +const linterWorker = new Worker("/src/linter.worker.js"); export default function registerEditor() { window.MonacoEnvironment = { @@ -59,74 +61,74 @@ export default function registerEditor() { }, }); - // // 处理quick fix - // languages.registerCodeActionProvider("javascript", { - // provideCodeActions: (model /** ITextModel */, range /** Range */, context /** CodeActionContext */) => { - // // const actions: languages.CodeAction[] = []; - // // const eslintFix = >Cache.getInstance().get("eslint-fix"); - // // for (let i = 0; i < context.markers.length; i += 1) { - // // // 判断有没有修复方案 - // // const val = context.markers[i]; - // // const code = typeof val.code === "string" ? val.code : val.code!.value; - // // const fix = eslintFix.get( - // // `${code}|${val.startLineNumber}|${val.endLineNumber}|${val.startColumn}|${val.endColumn}` - // // ); - // // if (fix) { - // // const edit: languages.IWorkspaceTextEdit = { - // // resource: model.uri, - // // textEdit: { - // // range: fix.range, - // // text: fix.text, - // // }, - // // versionId: undefined, - // // }; - // // actions.push({ - // // title: `修复 ${code} 问题`, - // // diagnostics: [val], - // // kind: "quickfix", - // // edit: { - // // edits: [edit], - // // }, - // // isPreferred: true, - // // }); - // // } - // // } + // 处理quick fix + languages.registerCodeActionProvider("javascript", { + provideCodeActions: (model /** ITextModel */, range /** Range */, context /** CodeActionContext */) => { + const actions: languages.CodeAction[] = []; + const eslintFix = >globalCache.get("eslint-fix"); + for (let i = 0; i < context.markers.length; i += 1) { + // 判断有没有修复方案 + const val = context.markers[i]; + const code = typeof val.code === "string" ? val.code : val.code!.value; + const fix = eslintFix.get( + `${code}|${val.startLineNumber}|${val.endLineNumber}|${val.startColumn}|${val.endColumn}` + ); + if (fix) { + const edit: languages.IWorkspaceTextEdit = { + resource: model.uri, + textEdit: { + range: fix.range, + text: fix.text, + }, + versionId: undefined, + }; + actions.push({ + title: `修复 ${code} 问题`, + diagnostics: [val], + kind: "quickfix", + edit: { + edits: [edit], + }, + isPreferred: true, + }); + } + } - // // const actions = context.markers.map((error) => { - // // const edit: languages.IWorkspaceTextEdit = { - // // resource: model.uri, - // // textEdit: { - // // range, - // // text: "console.log(1)", - // // }, - // // versionId: undefined, - // // }; - // // return { - // // title: ``, - // // diagnostics: [error], - // // kind: "quickfix", - // // edit: { - // // edits: [edit], - // // }, - // // isPreferred: true, - // // }; - // // }); - // return { - // actions, - // dispose: () => {}, - // }; - // }, - // }); + // const actions = context.markers.map((error) => { + // const edit: languages.IWorkspaceTextEdit = { + // resource: model.uri, + // textEdit: { + // range, + // text: "console.log(1)", + // }, + // versionId: undefined, + // }; + // return { + // title: ``, + // diagnostics: [error], + // kind: "quickfix", + // edit: { + // edits: [edit], + // }, + // isPreferred: true, + // }; + // }); + return { + actions, + dispose: () => {}, + }; + }, + }); } -// export class LinterWorker { -// static hook = new EventEmitter(); +export class LinterWorker { + static hook = new EventEmitter(); -// static sendLinterMessage(data: unknown) { -// linterWorker.postMessage(data); -// } -// } + static sendLinterMessage(data: unknown) { + linterWorker.postMessage(data); + } +} -// linterWorker.onmessage = (event) => { -// LinterWorker.hook.emit("message", event.data); -// }; +linterWorker.onmessage = (event) => { + LinterWorker.hook.emit("message", event.data); +};