Merge branch 'dev' into modules-proxy-patches
This commit is contained in:
commit
f345484e5b
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"root": true,
|
"root": true,
|
||||||
"parser": "@typescript-eslint/parser",
|
"parser": "@typescript-eslint/parser",
|
||||||
"ignorePatterns": ["dist", "browser"],
|
"ignorePatterns": ["dist", "browser", "packages/vencord-types"],
|
||||||
"plugins": [
|
"plugins": [
|
||||||
"@typescript-eslint",
|
"@typescript-eslint",
|
||||||
"simple-header",
|
"simple-header",
|
||||||
|
|
|
@ -19,8 +19,8 @@
|
||||||
/// <reference path="../src/modules.d.ts" />
|
/// <reference path="../src/modules.d.ts" />
|
||||||
/// <reference path="../src/globals.d.ts" />
|
/// <reference path="../src/globals.d.ts" />
|
||||||
|
|
||||||
import monacoHtmlLocal from "~fileContent/monacoWin.html";
|
import monacoHtmlLocal from "file://monacoWin.html?minify";
|
||||||
import monacoHtmlCdn from "~fileContent/../src/main/monacoWin.html";
|
import monacoHtmlCdn from "file://../src/main/monacoWin.html?minify";
|
||||||
import * as DataStore from "../src/api/DataStore";
|
import * as DataStore from "../src/api/DataStore";
|
||||||
import { debounce } from "../src/utils";
|
import { debounce } from "../src/utils";
|
||||||
import { EXTENSION_BASE_URL } from "../src/utils/web-metadata";
|
import { EXTENSION_BASE_URL } from "../src/utils/web-metadata";
|
||||||
|
|
|
@ -18,8 +18,9 @@
|
||||||
},
|
},
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/build.mjs",
|
"build": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/build.mjs",
|
||||||
|
"buildStandalone": "pnpm build --standalone",
|
||||||
"buildWeb": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/buildWeb.mjs",
|
"buildWeb": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/buildWeb.mjs",
|
||||||
"watch": "node --require=./scripts/suppressExperimentalWarnings.js scripts/build/build.mjs --watch",
|
"watch": "pnpm build --watch",
|
||||||
"generatePluginJson": "tsx scripts/generatePluginList.ts",
|
"generatePluginJson": "tsx scripts/generatePluginList.ts",
|
||||||
"generateTypes": "tspc --emitDeclarationOnly --declaration --outDir packages/vencord-types",
|
"generateTypes": "tspc --emitDeclarationOnly --declaration --outDir packages/vencord-types",
|
||||||
"inject": "node scripts/runInstaller.mjs",
|
"inject": "node scripts/runInstaller.mjs",
|
||||||
|
@ -27,7 +28,7 @@
|
||||||
"lint": "eslint . --ext .js,.jsx,.ts,.tsx --ignore-pattern src/userplugins",
|
"lint": "eslint . --ext .js,.jsx,.ts,.tsx --ignore-pattern src/userplugins",
|
||||||
"lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins",
|
"lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins",
|
||||||
"lint:fix": "pnpm lint --fix",
|
"lint:fix": "pnpm lint --fix",
|
||||||
"test": "pnpm build && pnpm lint && pnpm lint-styles && pnpm testTsc && pnpm generatePluginJson",
|
"test": "pnpm buildStandalone && pnpm lint && pnpm lint-styles && pnpm testTsc && pnpm generatePluginJson",
|
||||||
"testWeb": "pnpm lint && pnpm buildWeb && pnpm testTsc",
|
"testWeb": "pnpm lint && pnpm buildWeb && pnpm testTsc",
|
||||||
"testTsc": "tsc --noEmit"
|
"testTsc": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
|
@ -61,6 +62,7 @@
|
||||||
"eslint-plugin-simple-import-sort": "^10.0.0",
|
"eslint-plugin-simple-import-sort": "^10.0.0",
|
||||||
"eslint-plugin-unused-imports": "^2.0.0",
|
"eslint-plugin-unused-imports": "^2.0.0",
|
||||||
"highlight.js": "10.6.0",
|
"highlight.js": "10.6.0",
|
||||||
|
"html-minifier-terser": "^7.2.0",
|
||||||
"moment": "^2.29.4",
|
"moment": "^2.29.4",
|
||||||
"puppeteer-core": "^19.11.1",
|
"puppeteer-core": "^19.11.1",
|
||||||
"standalone-electron-types": "^1.0.0",
|
"standalone-electron-types": "^1.0.0",
|
||||||
|
|
156
pnpm-lock.yaml
156
pnpm-lock.yaml
|
@ -98,6 +98,9 @@ importers:
|
||||||
highlight.js:
|
highlight.js:
|
||||||
specifier: 10.6.0
|
specifier: 10.6.0
|
||||||
version: 10.6.0
|
version: 10.6.0
|
||||||
|
html-minifier-terser:
|
||||||
|
specifier: ^7.2.0
|
||||||
|
version: 7.2.0
|
||||||
moment:
|
moment:
|
||||||
specifier: ^2.29.4
|
specifier: ^2.29.4
|
||||||
version: 2.29.4
|
version: 2.29.4
|
||||||
|
@ -393,6 +396,27 @@ packages:
|
||||||
'@humanwhocodes/object-schema@1.2.1':
|
'@humanwhocodes/object-schema@1.2.1':
|
||||||
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
|
resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
|
||||||
|
|
||||||
|
'@jridgewell/gen-mapping@0.3.5':
|
||||||
|
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
|
||||||
|
engines: {node: '>=6.0.0'}
|
||||||
|
|
||||||
|
'@jridgewell/resolve-uri@3.1.2':
|
||||||
|
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
|
||||||
|
engines: {node: '>=6.0.0'}
|
||||||
|
|
||||||
|
'@jridgewell/set-array@1.2.1':
|
||||||
|
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
|
||||||
|
engines: {node: '>=6.0.0'}
|
||||||
|
|
||||||
|
'@jridgewell/source-map@0.3.6':
|
||||||
|
resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
|
||||||
|
|
||||||
|
'@jridgewell/sourcemap-codec@1.4.15':
|
||||||
|
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
|
||||||
|
|
||||||
|
'@jridgewell/trace-mapping@0.3.25':
|
||||||
|
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
|
||||||
|
|
||||||
'@nodelib/fs.scandir@2.1.5':
|
'@nodelib/fs.scandir@2.1.5':
|
||||||
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
|
||||||
engines: {node: '>= 8'}
|
engines: {node: '>= 8'}
|
||||||
|
@ -688,6 +712,9 @@ packages:
|
||||||
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
camel-case@4.1.2:
|
||||||
|
resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==}
|
||||||
|
|
||||||
camelcase-keys@6.2.2:
|
camelcase-keys@6.2.2:
|
||||||
resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
|
resolution: {integrity: sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
@ -716,6 +743,10 @@ packages:
|
||||||
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
|
resolution: {integrity: sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
|
||||||
|
clean-css@5.3.3:
|
||||||
|
resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==}
|
||||||
|
engines: {node: '>= 10.0'}
|
||||||
|
|
||||||
cliui@8.0.1:
|
cliui@8.0.1:
|
||||||
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
|
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
|
||||||
engines: {node: '>=12'}
|
engines: {node: '>=12'}
|
||||||
|
@ -740,6 +771,13 @@ packages:
|
||||||
colord@2.9.3:
|
colord@2.9.3:
|
||||||
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
|
resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==}
|
||||||
|
|
||||||
|
commander@10.0.1:
|
||||||
|
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
|
||||||
|
engines: {node: '>=14'}
|
||||||
|
|
||||||
|
commander@2.20.3:
|
||||||
|
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
|
||||||
|
|
||||||
component-emitter@1.3.0:
|
component-emitter@1.3.0:
|
||||||
resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==}
|
resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==}
|
||||||
|
|
||||||
|
@ -871,12 +909,19 @@ packages:
|
||||||
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
|
resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
|
||||||
engines: {node: '>=6.0.0'}
|
engines: {node: '>=6.0.0'}
|
||||||
|
|
||||||
|
dot-case@3.0.4:
|
||||||
|
resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==}
|
||||||
|
|
||||||
emoji-regex@8.0.0:
|
emoji-regex@8.0.0:
|
||||||
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
|
||||||
|
|
||||||
end-of-stream@1.4.4:
|
end-of-stream@1.4.4:
|
||||||
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
|
resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==}
|
||||||
|
|
||||||
|
entities@4.5.0:
|
||||||
|
resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
|
||||||
|
engines: {node: '>=0.12'}
|
||||||
|
|
||||||
error-ex@1.3.2:
|
error-ex@1.3.2:
|
||||||
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
|
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
|
||||||
|
|
||||||
|
@ -1402,6 +1447,11 @@ packages:
|
||||||
resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
|
resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
|
||||||
|
html-minifier-terser@7.2.0:
|
||||||
|
resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==}
|
||||||
|
engines: {node: ^14.13.1 || >=16.0.0}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
html-tags@3.3.1:
|
html-tags@3.3.1:
|
||||||
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
|
resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
@ -1673,6 +1723,9 @@ packages:
|
||||||
lodash.truncate@4.4.2:
|
lodash.truncate@4.4.2:
|
||||||
resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
|
resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==}
|
||||||
|
|
||||||
|
lower-case@2.0.2:
|
||||||
|
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
|
||||||
|
|
||||||
lru-cache@6.0.0:
|
lru-cache@6.0.0:
|
||||||
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
|
||||||
engines: {node: '>=10'}
|
engines: {node: '>=10'}
|
||||||
|
@ -1770,6 +1823,9 @@ packages:
|
||||||
natural-compare@1.4.0:
|
natural-compare@1.4.0:
|
||||||
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
|
||||||
|
|
||||||
|
no-case@3.0.4:
|
||||||
|
resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==}
|
||||||
|
|
||||||
node-fetch@2.6.7:
|
node-fetch@2.6.7:
|
||||||
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
|
resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==}
|
||||||
engines: {node: 4.x || >=6.0.0}
|
engines: {node: 4.x || >=6.0.0}
|
||||||
|
@ -1855,6 +1911,9 @@ packages:
|
||||||
pako@1.0.11:
|
pako@1.0.11:
|
||||||
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
|
resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==}
|
||||||
|
|
||||||
|
param-case@3.0.4:
|
||||||
|
resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
|
||||||
|
|
||||||
parent-module@1.0.1:
|
parent-module@1.0.1:
|
||||||
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
|
resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
@ -1863,6 +1922,9 @@ packages:
|
||||||
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
|
resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
|
||||||
engines: {node: '>=8'}
|
engines: {node: '>=8'}
|
||||||
|
|
||||||
|
pascal-case@3.1.2:
|
||||||
|
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
|
||||||
|
|
||||||
pascalcase@0.1.1:
|
pascalcase@0.1.1:
|
||||||
resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
|
resolution: {integrity: sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
@ -1985,6 +2047,10 @@ packages:
|
||||||
resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
|
resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==}
|
||||||
engines: {node: '>= 0.4'}
|
engines: {node: '>= 0.4'}
|
||||||
|
|
||||||
|
relateurl@0.2.7:
|
||||||
|
resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==}
|
||||||
|
engines: {node: '>= 0.10'}
|
||||||
|
|
||||||
require-directory@2.1.1:
|
require-directory@2.1.1:
|
||||||
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
|
resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==}
|
||||||
engines: {node: '>=0.10.0'}
|
engines: {node: '>=0.10.0'}
|
||||||
|
@ -2228,6 +2294,11 @@ packages:
|
||||||
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
|
resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==}
|
||||||
engines: {node: '>=6'}
|
engines: {node: '>=6'}
|
||||||
|
|
||||||
|
terser@5.31.0:
|
||||||
|
resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==}
|
||||||
|
engines: {node: '>=10'}
|
||||||
|
hasBin: true
|
||||||
|
|
||||||
text-table@0.2.0:
|
text-table@0.2.0:
|
||||||
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
|
||||||
|
|
||||||
|
@ -2263,6 +2334,9 @@ packages:
|
||||||
tslib@1.14.1:
|
tslib@1.14.1:
|
||||||
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
|
resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==}
|
||||||
|
|
||||||
|
tslib@2.6.2:
|
||||||
|
resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
|
||||||
|
|
||||||
tsutils@3.21.0:
|
tsutils@3.21.0:
|
||||||
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
|
resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==}
|
||||||
engines: {node: '>= 6'}
|
engines: {node: '>= 6'}
|
||||||
|
@ -2599,6 +2673,28 @@ snapshots:
|
||||||
|
|
||||||
'@humanwhocodes/object-schema@1.2.1': {}
|
'@humanwhocodes/object-schema@1.2.1': {}
|
||||||
|
|
||||||
|
'@jridgewell/gen-mapping@0.3.5':
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/set-array': 1.2.1
|
||||||
|
'@jridgewell/sourcemap-codec': 1.4.15
|
||||||
|
'@jridgewell/trace-mapping': 0.3.25
|
||||||
|
|
||||||
|
'@jridgewell/resolve-uri@3.1.2': {}
|
||||||
|
|
||||||
|
'@jridgewell/set-array@1.2.1': {}
|
||||||
|
|
||||||
|
'@jridgewell/source-map@0.3.6':
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/gen-mapping': 0.3.5
|
||||||
|
'@jridgewell/trace-mapping': 0.3.25
|
||||||
|
|
||||||
|
'@jridgewell/sourcemap-codec@1.4.15': {}
|
||||||
|
|
||||||
|
'@jridgewell/trace-mapping@0.3.25':
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/resolve-uri': 3.1.2
|
||||||
|
'@jridgewell/sourcemap-codec': 1.4.15
|
||||||
|
|
||||||
'@nodelib/fs.scandir@2.1.5':
|
'@nodelib/fs.scandir@2.1.5':
|
||||||
dependencies:
|
dependencies:
|
||||||
'@nodelib/fs.stat': 2.0.5
|
'@nodelib/fs.stat': 2.0.5
|
||||||
|
@ -2958,6 +3054,11 @@ snapshots:
|
||||||
|
|
||||||
callsites@3.1.0: {}
|
callsites@3.1.0: {}
|
||||||
|
|
||||||
|
camel-case@4.1.2:
|
||||||
|
dependencies:
|
||||||
|
pascal-case: 3.1.2
|
||||||
|
tslib: 2.6.2
|
||||||
|
|
||||||
camelcase-keys@6.2.2:
|
camelcase-keys@6.2.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
camelcase: 5.3.1
|
camelcase: 5.3.1
|
||||||
|
@ -2991,6 +3092,10 @@ snapshots:
|
||||||
isobject: 3.0.1
|
isobject: 3.0.1
|
||||||
static-extend: 0.1.2
|
static-extend: 0.1.2
|
||||||
|
|
||||||
|
clean-css@5.3.3:
|
||||||
|
dependencies:
|
||||||
|
source-map: 0.6.1
|
||||||
|
|
||||||
cliui@8.0.1:
|
cliui@8.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
string-width: 4.2.3
|
string-width: 4.2.3
|
||||||
|
@ -3016,6 +3121,10 @@ snapshots:
|
||||||
|
|
||||||
colord@2.9.3: {}
|
colord@2.9.3: {}
|
||||||
|
|
||||||
|
commander@10.0.1: {}
|
||||||
|
|
||||||
|
commander@2.20.3: {}
|
||||||
|
|
||||||
component-emitter@1.3.0: {}
|
component-emitter@1.3.0: {}
|
||||||
|
|
||||||
concat-map@0.0.1: {}
|
concat-map@0.0.1: {}
|
||||||
|
@ -3139,12 +3248,19 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
esutils: 2.0.3
|
esutils: 2.0.3
|
||||||
|
|
||||||
|
dot-case@3.0.4:
|
||||||
|
dependencies:
|
||||||
|
no-case: 3.0.4
|
||||||
|
tslib: 2.6.2
|
||||||
|
|
||||||
emoji-regex@8.0.0: {}
|
emoji-regex@8.0.0: {}
|
||||||
|
|
||||||
end-of-stream@1.4.4:
|
end-of-stream@1.4.4:
|
||||||
dependencies:
|
dependencies:
|
||||||
once: 1.4.0
|
once: 1.4.0
|
||||||
|
|
||||||
|
entities@4.5.0: {}
|
||||||
|
|
||||||
error-ex@1.3.2:
|
error-ex@1.3.2:
|
||||||
dependencies:
|
dependencies:
|
||||||
is-arrayish: 0.2.1
|
is-arrayish: 0.2.1
|
||||||
|
@ -3733,6 +3849,16 @@ snapshots:
|
||||||
dependencies:
|
dependencies:
|
||||||
lru-cache: 6.0.0
|
lru-cache: 6.0.0
|
||||||
|
|
||||||
|
html-minifier-terser@7.2.0:
|
||||||
|
dependencies:
|
||||||
|
camel-case: 4.1.2
|
||||||
|
clean-css: 5.3.3
|
||||||
|
commander: 10.0.1
|
||||||
|
entities: 4.5.0
|
||||||
|
param-case: 3.0.4
|
||||||
|
relateurl: 0.2.7
|
||||||
|
terser: 5.31.0
|
||||||
|
|
||||||
html-tags@3.3.1: {}
|
html-tags@3.3.1: {}
|
||||||
|
|
||||||
https-proxy-agent@5.0.1:
|
https-proxy-agent@5.0.1:
|
||||||
|
@ -3974,6 +4100,10 @@ snapshots:
|
||||||
|
|
||||||
lodash.truncate@4.4.2: {}
|
lodash.truncate@4.4.2: {}
|
||||||
|
|
||||||
|
lower-case@2.0.2:
|
||||||
|
dependencies:
|
||||||
|
tslib: 2.6.2
|
||||||
|
|
||||||
lru-cache@6.0.0:
|
lru-cache@6.0.0:
|
||||||
dependencies:
|
dependencies:
|
||||||
yallist: 4.0.0
|
yallist: 4.0.0
|
||||||
|
@ -4071,6 +4201,11 @@ snapshots:
|
||||||
|
|
||||||
natural-compare@1.4.0: {}
|
natural-compare@1.4.0: {}
|
||||||
|
|
||||||
|
no-case@3.0.4:
|
||||||
|
dependencies:
|
||||||
|
lower-case: 2.0.2
|
||||||
|
tslib: 2.6.2
|
||||||
|
|
||||||
node-fetch@2.6.7:
|
node-fetch@2.6.7:
|
||||||
dependencies:
|
dependencies:
|
||||||
whatwg-url: 5.0.0
|
whatwg-url: 5.0.0
|
||||||
|
@ -4168,6 +4303,11 @@ snapshots:
|
||||||
|
|
||||||
pako@1.0.11: {}
|
pako@1.0.11: {}
|
||||||
|
|
||||||
|
param-case@3.0.4:
|
||||||
|
dependencies:
|
||||||
|
dot-case: 3.0.4
|
||||||
|
tslib: 2.6.2
|
||||||
|
|
||||||
parent-module@1.0.1:
|
parent-module@1.0.1:
|
||||||
dependencies:
|
dependencies:
|
||||||
callsites: 3.1.0
|
callsites: 3.1.0
|
||||||
|
@ -4179,6 +4319,11 @@ snapshots:
|
||||||
json-parse-even-better-errors: 2.3.1
|
json-parse-even-better-errors: 2.3.1
|
||||||
lines-and-columns: 1.2.4
|
lines-and-columns: 1.2.4
|
||||||
|
|
||||||
|
pascal-case@3.1.2:
|
||||||
|
dependencies:
|
||||||
|
no-case: 3.0.4
|
||||||
|
tslib: 2.6.2
|
||||||
|
|
||||||
pascalcase@0.1.1: {}
|
pascalcase@0.1.1: {}
|
||||||
|
|
||||||
path-exists@4.0.0: {}
|
path-exists@4.0.0: {}
|
||||||
|
@ -4296,6 +4441,8 @@ snapshots:
|
||||||
es-errors: 1.3.0
|
es-errors: 1.3.0
|
||||||
set-function-name: 2.0.2
|
set-function-name: 2.0.2
|
||||||
|
|
||||||
|
relateurl@0.2.7: {}
|
||||||
|
|
||||||
require-directory@2.1.1: {}
|
require-directory@2.1.1: {}
|
||||||
|
|
||||||
require-from-string@2.0.2: {}
|
require-from-string@2.0.2: {}
|
||||||
|
@ -4605,6 +4752,13 @@ snapshots:
|
||||||
inherits: 2.0.4
|
inherits: 2.0.4
|
||||||
readable-stream: 3.6.2
|
readable-stream: 3.6.2
|
||||||
|
|
||||||
|
terser@5.31.0:
|
||||||
|
dependencies:
|
||||||
|
'@jridgewell/source-map': 0.3.6
|
||||||
|
acorn: 8.10.0
|
||||||
|
commander: 2.20.3
|
||||||
|
source-map-support: 0.5.21
|
||||||
|
|
||||||
text-table@0.2.0: {}
|
text-table@0.2.0: {}
|
||||||
|
|
||||||
through@2.3.8: {}
|
through@2.3.8: {}
|
||||||
|
@ -4646,6 +4800,8 @@ snapshots:
|
||||||
|
|
||||||
tslib@1.14.1: {}
|
tslib@1.14.1: {}
|
||||||
|
|
||||||
|
tslib@2.6.2: {}
|
||||||
|
|
||||||
tsutils@3.21.0(typescript@5.4.5):
|
tsutils@3.21.0(typescript@5.4.5):
|
||||||
dependencies:
|
dependencies:
|
||||||
tslib: 1.14.1
|
tslib: 1.14.1
|
||||||
|
|
|
@ -20,8 +20,10 @@ import "../suppressExperimentalWarnings.js";
|
||||||
import "../checkNodeVersion.js";
|
import "../checkNodeVersion.js";
|
||||||
|
|
||||||
import { exec, execSync } from "child_process";
|
import { exec, execSync } from "child_process";
|
||||||
|
import esbuild from "esbuild";
|
||||||
import { constants as FsConstants, readFileSync } from "fs";
|
import { constants as FsConstants, readFileSync } from "fs";
|
||||||
import { access, readdir, readFile } from "fs/promises";
|
import { access, readdir, readFile } from "fs/promises";
|
||||||
|
import { minify as minifyHtml } from "html-minifier-terser";
|
||||||
import { join, relative } from "path";
|
import { join, relative } from "path";
|
||||||
import { promisify } from "util";
|
import { promisify } from "util";
|
||||||
|
|
||||||
|
@ -161,21 +163,60 @@ export const gitRemotePlugin = {
|
||||||
/**
|
/**
|
||||||
* @type {import("esbuild").Plugin}
|
* @type {import("esbuild").Plugin}
|
||||||
*/
|
*/
|
||||||
export const fileIncludePlugin = {
|
export const fileUrlPlugin = {
|
||||||
name: "file-include-plugin",
|
name: "file-uri-plugin",
|
||||||
setup: build => {
|
setup: build => {
|
||||||
const filter = /^~fileContent\/.+$/;
|
const filter = /^file:\/\/.+$/;
|
||||||
build.onResolve({ filter }, args => ({
|
build.onResolve({ filter }, args => ({
|
||||||
namespace: "include-file",
|
namespace: "file-uri",
|
||||||
path: args.path,
|
path: args.path,
|
||||||
pluginData: {
|
pluginData: {
|
||||||
path: join(args.resolveDir, args.path.slice("include-file/".length))
|
uri: args.path,
|
||||||
|
path: join(args.resolveDir, args.path.slice("file://".length).split("?")[0])
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
build.onLoad({ filter, namespace: "include-file" }, async ({ pluginData: { path } }) => {
|
build.onLoad({ filter, namespace: "file-uri" }, async ({ pluginData: { path, uri } }) => {
|
||||||
const [name, format] = path.split(";");
|
const { searchParams } = new URL(uri);
|
||||||
|
const base64 = searchParams.has("base64");
|
||||||
|
const minify = isStandalone === "true" && searchParams.has("minify");
|
||||||
|
const noTrim = searchParams.get("trim") === "false";
|
||||||
|
|
||||||
|
const encoding = base64 ? "base64" : "utf-8";
|
||||||
|
|
||||||
|
let content;
|
||||||
|
if (!minify) {
|
||||||
|
content = await readFile(path, encoding);
|
||||||
|
if (!noTrim) content = content.trimEnd();
|
||||||
|
} else {
|
||||||
|
if (path.endsWith(".html")) {
|
||||||
|
content = await minifyHtml(await readFile(path, "utf-8"), {
|
||||||
|
collapseWhitespace: true,
|
||||||
|
removeComments: true,
|
||||||
|
minifyCSS: true,
|
||||||
|
minifyJS: true,
|
||||||
|
removeEmptyAttributes: true,
|
||||||
|
removeRedundantAttributes: true,
|
||||||
|
removeScriptTypeAttributes: true,
|
||||||
|
removeStyleLinkTypeAttributes: true,
|
||||||
|
useShortDoctype: true
|
||||||
|
});
|
||||||
|
} else if (/[mc]?[jt]sx?$/.test(path)) {
|
||||||
|
const res = await esbuild.build({
|
||||||
|
entryPoints: [path],
|
||||||
|
write: false,
|
||||||
|
minify: true
|
||||||
|
});
|
||||||
|
content = res.outputFiles[0].text;
|
||||||
|
} else {
|
||||||
|
throw new Error(`Don't know how to minify file type: ${path}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (base64)
|
||||||
|
content = Buffer.from(content).toString("base64");
|
||||||
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
contents: `export default ${JSON.stringify(await readFile(name, format ?? "utf-8"))}`
|
contents: `export default ${JSON.stringify(content)}`
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -217,7 +258,7 @@ export const commonOpts = {
|
||||||
sourcemap: watch ? "inline" : "",
|
sourcemap: watch ? "inline" : "",
|
||||||
legalComments: "linked",
|
legalComments: "linked",
|
||||||
banner,
|
banner,
|
||||||
plugins: [fileIncludePlugin, gitHashPlugin, gitRemotePlugin, stylePlugin],
|
plugins: [fileUrlPlugin, gitHashPlugin, gitRemotePlugin, stylePlugin],
|
||||||
external: ["~plugins", "~git-hash", "~git-remote", "/assets/*"],
|
external: ["~plugins", "~git-hash", "~git-remote", "/assets/*"],
|
||||||
inject: ["./scripts/build/inject/react.mjs"],
|
inject: ["./scripts/build/inject/react.mjs"],
|
||||||
jsxFactory: "VencordCreateElement",
|
jsxFactory: "VencordCreateElement",
|
||||||
|
|
|
@ -23,12 +23,11 @@ import "./settings";
|
||||||
import { debounce } from "@shared/debounce";
|
import { debounce } from "@shared/debounce";
|
||||||
import { IpcEvents } from "@shared/IpcEvents";
|
import { IpcEvents } from "@shared/IpcEvents";
|
||||||
import { BrowserWindow, ipcMain, shell, systemPreferences } from "electron";
|
import { BrowserWindow, ipcMain, shell, systemPreferences } from "electron";
|
||||||
|
import monacoHtml from "file://monacoWin.html?minify&base64";
|
||||||
import { FSWatcher, mkdirSync, watch, writeFileSync } from "fs";
|
import { FSWatcher, mkdirSync, watch, writeFileSync } from "fs";
|
||||||
import { open, readdir, readFile } from "fs/promises";
|
import { open, readdir, readFile } from "fs/promises";
|
||||||
import { join, normalize } from "path";
|
import { join, normalize } from "path";
|
||||||
|
|
||||||
import monacoHtml from "~fileContent/monacoWin.html;base64";
|
|
||||||
|
|
||||||
import { getThemeInfo, stripBOM, UserThemeHeader } from "./themes";
|
import { getThemeInfo, stripBOM, UserThemeHeader } from "./themes";
|
||||||
import { ALLOWED_PROTOCOLS, QUICKCSS_PATH, THEMES_DIR } from "./utils/constants";
|
import { ALLOWED_PROTOCOLS, QUICKCSS_PATH, THEMES_DIR } from "./utils/constants";
|
||||||
import { makeLinksOpenExternally } from "./utils/externalLinks";
|
import { makeLinksOpenExternally } from "./utils/externalLinks";
|
||||||
|
|
2
src/modules.d.ts
vendored
2
src/modules.d.ts
vendored
|
@ -38,7 +38,7 @@ declare module "~git-remote" {
|
||||||
export default remote;
|
export default remote;
|
||||||
}
|
}
|
||||||
|
|
||||||
declare module "~fileContent/*" {
|
declare module "file://*" {
|
||||||
const content: string;
|
const content: string;
|
||||||
export default content;
|
export default content;
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,7 +18,7 @@ export default definePlugin({
|
||||||
type: OptionType.SELECT,
|
type: OptionType.SELECT,
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
label: "Ctrl+Enter (Enter or Shift+Enter for new line)",
|
label: "Ctrl+Enter (Enter or Shift+Enter for new line) (cmd+enter on macOS)",
|
||||||
value: "ctrl+enter"
|
value: "ctrl+enter"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
@ -54,7 +54,7 @@ export default definePlugin({
|
||||||
result = event.shiftKey;
|
result = event.shiftKey;
|
||||||
break;
|
break;
|
||||||
case "ctrl+enter":
|
case "ctrl+enter":
|
||||||
result = event.ctrlKey;
|
result = navigator.platform.includes("Mac") ? event.metaKey : event.ctrlKey;
|
||||||
break;
|
break;
|
||||||
case "enter":
|
case "enter":
|
||||||
result = !event.shiftKey && !event.ctrlKey;
|
result = !event.shiftKey && !event.ctrlKey;
|
||||||
|
|
|
@ -813,7 +813,7 @@ export default definePlugin({
|
||||||
},
|
},
|
||||||
|
|
||||||
canUseEmote(e: Emoji, channelId: string) {
|
canUseEmote(e: Emoji, channelId: string) {
|
||||||
if (e.type === "UNICODE") return true;
|
if (e.type === 0) return true;
|
||||||
if (e.available === false) return false;
|
if (e.available === false) return false;
|
||||||
|
|
||||||
const isUnusableRoleSubEmoji = RoleSubscriptionEmojiUtils.isUnusableRoleSubscriptionEmojiOriginal ?? RoleSubscriptionEmojiUtils.isUnusableRoleSubscriptionEmoji;
|
const isUnusableRoleSubEmoji = RoleSubscriptionEmojiUtils.isUnusableRoleSubscriptionEmojiOriginal ?? RoleSubscriptionEmojiUtils.isUnusableRoleSubscriptionEmoji;
|
||||||
|
|
|
@ -52,6 +52,8 @@ export default definePlugin({
|
||||||
|
|
||||||
getFriendSince(userId: string) {
|
getFriendSince(userId: string) {
|
||||||
try {
|
try {
|
||||||
|
if (!RelationshipStore.isFriend(userId)) return null;
|
||||||
|
|
||||||
return RelationshipStore.getSince(userId);
|
return RelationshipStore.getSince(userId);
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
new Logger("FriendsSince").error(err);
|
new Logger("FriendsSince").error(err);
|
||||||
|
@ -60,6 +62,8 @@ export default definePlugin({
|
||||||
},
|
},
|
||||||
|
|
||||||
friendsSince: ErrorBoundary.wrap(({ userId, textClassName }: { userId: string; textClassName?: string; }) => {
|
friendsSince: ErrorBoundary.wrap(({ userId, textClassName }: { userId: string; textClassName?: string; }) => {
|
||||||
|
if (!RelationshipStore.isFriend(userId)) return null;
|
||||||
|
|
||||||
const friendsSince = RelationshipStore.getSince(userId);
|
const friendsSince = RelationshipStore.getSince(userId);
|
||||||
if (!friendsSince) return null;
|
if (!friendsSince) return null;
|
||||||
|
|
||||||
|
|
|
@ -97,6 +97,9 @@ export default definePlugin({
|
||||||
// Message wasn't received through gateway
|
// Message wasn't received through gateway
|
||||||
if (!isNonNullish(nonce)) return null;
|
if (!isNonNullish(nonce)) return null;
|
||||||
|
|
||||||
|
// Bots basically never send a nonce, and if someone does do it then it's usually not a snowflake
|
||||||
|
if (message.bot) return null;
|
||||||
|
|
||||||
let isDiscordKotlin = false;
|
let isDiscordKotlin = false;
|
||||||
let delta = SnowflakeUtils.extractTimestamp(id) - SnowflakeUtils.extractTimestamp(nonce); // milliseconds
|
let delta = SnowflakeUtils.extractTimestamp(id) - SnowflakeUtils.extractTimestamp(nonce); // milliseconds
|
||||||
if (!showMillis) {
|
if (!showMillis) {
|
||||||
|
|
|
@ -37,7 +37,7 @@ const settings = definePluginSettings({
|
||||||
});
|
});
|
||||||
|
|
||||||
function search(src: string, engine: string) {
|
function search(src: string, engine: string) {
|
||||||
open(engine + encodeURIComponent(src), "_blank");
|
open(engine + encodeURIComponent(src.trim()), "_blank");
|
||||||
}
|
}
|
||||||
|
|
||||||
function makeSearchItem(src: string) {
|
function makeSearchItem(src: string) {
|
||||||
|
|
7
src/plugins/seeSummaries/README.md
Normal file
7
src/plugins/seeSummaries/README.md
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
# Summaries
|
||||||
|
|
||||||
|
Enables Discord's experimental Summaries feature on every server, displaying AI generated summaries of conversations.
|
||||||
|
|
||||||
|
Note that this plugin can't fetch old summaries, it can only display ones created while your Discord is running with the plugin enabled.
|
||||||
|
|
||||||
|
![](https://github.com/Vendicated/Vencord/assets/45497981/bd931b0c-2e85-4c10-9f7c-8ba01eb55745)
|
114
src/plugins/seeSummaries/index.tsx
Normal file
114
src/plugins/seeSummaries/index.tsx
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
/*
|
||||||
|
* Vencord, a Discord client mod
|
||||||
|
* Copyright (c) 2024 Vendicated and contributors
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { DataStore } from "@api/index";
|
||||||
|
import { definePluginSettings } from "@api/Settings";
|
||||||
|
import { Devs } from "@utils/constants";
|
||||||
|
import definePlugin, { OptionType } from "@utils/types";
|
||||||
|
import { findByPropsLazy } from "@webpack";
|
||||||
|
import { ChannelStore, GuildStore } from "@webpack/common";
|
||||||
|
|
||||||
|
const SummaryStore = findByPropsLazy("allSummaries", "findSummary");
|
||||||
|
const { createSummaryFromServer } = findByPropsLazy("createSummaryFromServer");
|
||||||
|
|
||||||
|
const settings = definePluginSettings({
|
||||||
|
summaryExpiryThresholdDays: {
|
||||||
|
type: OptionType.SLIDER,
|
||||||
|
description: "The time in days before a summary is removed. Note that only up to 50 summaries are kept per channel",
|
||||||
|
markers: [1, 3, 5, 7, 10, 15, 20, 25, 30],
|
||||||
|
stickToMarkers: false,
|
||||||
|
default: 3,
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
interface Summary {
|
||||||
|
count: number;
|
||||||
|
end_id: string;
|
||||||
|
id: string;
|
||||||
|
message_ids: string[];
|
||||||
|
people: string[];
|
||||||
|
source: number;
|
||||||
|
start_id: string;
|
||||||
|
summ_short: string;
|
||||||
|
topic: string;
|
||||||
|
type: number;
|
||||||
|
unsafe: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ChannelSummaries {
|
||||||
|
type: string;
|
||||||
|
channel_id: string;
|
||||||
|
guild_id: string;
|
||||||
|
summaries: Summary[];
|
||||||
|
|
||||||
|
// custom property
|
||||||
|
time?: number;
|
||||||
|
}
|
||||||
|
|
||||||
|
export default definePlugin({
|
||||||
|
name: "Summaries",
|
||||||
|
description: "Enables Discord's experimental Summaries feature on every server, displaying AI generated summaries of conversations",
|
||||||
|
authors: [Devs.mantikafasi],
|
||||||
|
settings,
|
||||||
|
patches: [
|
||||||
|
{
|
||||||
|
find: "ChannelTypesSets.SUMMARIZEABLE.has",
|
||||||
|
replacement: {
|
||||||
|
match: /\i\.hasFeature\(\i\.GuildFeatures\.SUMMARIES_ENABLED\w+?\)/g,
|
||||||
|
replace: "true"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
find: "RECEIVE_CHANNEL_SUMMARY(",
|
||||||
|
replacement: {
|
||||||
|
match: /shouldFetch\((\i),\i\){/,
|
||||||
|
replace: "$& if(!$self.shouldFetch($1)) return false;"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
flux: {
|
||||||
|
CONVERSATION_SUMMARY_UPDATE(data) {
|
||||||
|
const incomingSummaries: ChannelSummaries[] = data.summaries.map((summary: any) => ({ ...createSummaryFromServer(summary), time: Date.now() }));
|
||||||
|
|
||||||
|
// idk if this is good for performance but it doesnt seem to be a problem in my experience
|
||||||
|
DataStore.update("summaries-data", summaries => {
|
||||||
|
summaries ??= {};
|
||||||
|
summaries[data.channel_id] ? summaries[data.channel_id].unshift(...incomingSummaries) : (summaries[data.channel_id] = incomingSummaries);
|
||||||
|
if (summaries[data.channel_id].length > 50)
|
||||||
|
summaries[data.channel_id] = summaries[data.channel_id].slice(0, 50);
|
||||||
|
|
||||||
|
return summaries;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
async start() {
|
||||||
|
await DataStore.update("summaries-data", summaries => {
|
||||||
|
for (const key of Object.keys(summaries)) {
|
||||||
|
for (let i = summaries[key].length - 1; i >= 0; i--) {
|
||||||
|
if (summaries[key][i].time < Date.now() - 1000 * 60 * 60 * 24 * settings.store.summaryExpiryThresholdDays) {
|
||||||
|
summaries[key].splice(i, 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (summaries[key].length === 0) {
|
||||||
|
delete summaries[key];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Object.assign(SummaryStore.allSummaries(), summaries);
|
||||||
|
return summaries;
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
shouldFetch(channelId: string) {
|
||||||
|
const channel = ChannelStore.getChannel(channelId);
|
||||||
|
// SUMMARIES_ENABLED feature is not in discord-types
|
||||||
|
const guild = GuildStore.getGuild(channel.guild_id);
|
||||||
|
// @ts-ignore
|
||||||
|
return guild.hasFeature("SUMMARIES_ENABLED_GA");
|
||||||
|
}
|
||||||
|
});
|
|
@ -21,8 +21,7 @@ import "./shiki.css";
|
||||||
import { enableStyle } from "@api/Styles";
|
import { enableStyle } from "@api/Styles";
|
||||||
import { Devs } from "@utils/constants";
|
import { Devs } from "@utils/constants";
|
||||||
import definePlugin from "@utils/types";
|
import definePlugin from "@utils/types";
|
||||||
|
import previewExampleText from "file://previewExample.tsx";
|
||||||
import previewExampleText from "~fileContent/previewExample.tsx";
|
|
||||||
|
|
||||||
import { shiki } from "./api/shiki";
|
import { shiki } from "./api/shiki";
|
||||||
import { createHighlighter } from "./components/Highlighter";
|
import { createHighlighter } from "./components/Highlighter";
|
||||||
|
|
6
src/plugins/watchTogetherAdblock.desktop/README.md
Normal file
6
src/plugins/watchTogetherAdblock.desktop/README.md
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# WatchTogetherAdblock
|
||||||
|
|
||||||
|
Block ads in the YouTube WatchTogether activity via AdGuard
|
||||||
|
|
||||||
|
Note that this only works for yourself, other users in the activity will still see ads.
|
||||||
|
Powered by a modified version of [Adguard's BlockYoutubeAdsShortcut](https://github.com/AdguardTeam/BlockYouTubeAdsShortcut)
|
262
src/plugins/watchTogetherAdblock.desktop/adguard.js
Normal file
262
src/plugins/watchTogetherAdblock.desktop/adguard.js
Normal file
|
@ -0,0 +1,262 @@
|
||||||
|
/* eslint-disable */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This file is part of AdGuard's Block YouTube Ads (https://github.com/AdguardTeam/BlockYouTubeAdsShortcut).
|
||||||
|
*
|
||||||
|
* Copyright (C) AdGuard Team
|
||||||
|
*
|
||||||
|
* AdGuard's Block YouTube Ads is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* AdGuard's Block YouTube Ads is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with AdGuard's Block YouTube Ads. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
const LOGO_ID = "block-youtube-ads-logo";
|
||||||
|
const hiddenCSS = [
|
||||||
|
"#__ffYoutube1",
|
||||||
|
"#__ffYoutube2",
|
||||||
|
"#__ffYoutube3",
|
||||||
|
"#__ffYoutube4",
|
||||||
|
"#feed-pyv-container",
|
||||||
|
"#feedmodule-PRO",
|
||||||
|
"#homepage-chrome-side-promo",
|
||||||
|
"#merch-shelf",
|
||||||
|
"#offer-module",
|
||||||
|
'#pla-shelf > ytd-pla-shelf-renderer[class="style-scope ytd-watch"]',
|
||||||
|
"#pla-shelf",
|
||||||
|
"#premium-yva",
|
||||||
|
"#promo-info",
|
||||||
|
"#promo-list",
|
||||||
|
"#promotion-shelf",
|
||||||
|
"#related > ytd-watch-next-secondary-results-renderer > #items > ytd-compact-promoted-video-renderer.ytd-watch-next-secondary-results-renderer",
|
||||||
|
"#search-pva",
|
||||||
|
"#shelf-pyv-container",
|
||||||
|
"#video-masthead",
|
||||||
|
"#watch-branded-actions",
|
||||||
|
"#watch-buy-urls",
|
||||||
|
"#watch-channel-brand-div",
|
||||||
|
"#watch7-branded-banner",
|
||||||
|
"#YtKevlarVisibilityIdentifier",
|
||||||
|
"#YtSparklesVisibilityIdentifier",
|
||||||
|
".carousel-offer-url-container",
|
||||||
|
".companion-ad-container",
|
||||||
|
".GoogleActiveViewElement",
|
||||||
|
'.list-view[style="margin: 7px 0pt;"]',
|
||||||
|
".promoted-sparkles-text-search-root-container",
|
||||||
|
".promoted-videos",
|
||||||
|
".searchView.list-view",
|
||||||
|
".sparkles-light-cta",
|
||||||
|
".watch-extra-info-column",
|
||||||
|
".watch-extra-info-right",
|
||||||
|
".ytd-carousel-ad-renderer",
|
||||||
|
".ytd-compact-promoted-video-renderer",
|
||||||
|
".ytd-companion-slot-renderer",
|
||||||
|
".ytd-merch-shelf-renderer",
|
||||||
|
".ytd-player-legacy-desktop-watch-ads-renderer",
|
||||||
|
".ytd-promoted-sparkles-text-search-renderer",
|
||||||
|
".ytd-promoted-video-renderer",
|
||||||
|
".ytd-search-pyv-renderer",
|
||||||
|
".ytd-video-masthead-ad-v3-renderer",
|
||||||
|
".ytp-ad-action-interstitial-background-container",
|
||||||
|
".ytp-ad-action-interstitial-slot",
|
||||||
|
".ytp-ad-image-overlay",
|
||||||
|
".ytp-ad-overlay-container",
|
||||||
|
".ytp-ad-progress",
|
||||||
|
".ytp-ad-progress-list",
|
||||||
|
'[class*="ytd-display-ad-"]',
|
||||||
|
'[layout*="display-ad-"]',
|
||||||
|
'a[href^="http://www.youtube.com/cthru?"]',
|
||||||
|
'a[href^="https://www.youtube.com/cthru?"]',
|
||||||
|
"ytd-action-companion-ad-renderer",
|
||||||
|
"ytd-banner-promo-renderer",
|
||||||
|
"ytd-compact-promoted-video-renderer",
|
||||||
|
"ytd-companion-slot-renderer",
|
||||||
|
"ytd-display-ad-renderer",
|
||||||
|
"ytd-promoted-sparkles-text-search-renderer",
|
||||||
|
"ytd-promoted-sparkles-web-renderer",
|
||||||
|
"ytd-search-pyv-renderer",
|
||||||
|
"ytd-single-option-survey-renderer",
|
||||||
|
"ytd-video-masthead-ad-advertiser-info-renderer",
|
||||||
|
"ytd-video-masthead-ad-v3-renderer",
|
||||||
|
"YTM-PROMOTED-VIDEO-RENDERER",
|
||||||
|
];
|
||||||
|
/**
|
||||||
|
* Adds CSS to the page
|
||||||
|
*/
|
||||||
|
const hideElements = () => {
|
||||||
|
const selectors = hiddenCSS;
|
||||||
|
if (!selectors) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const rule = selectors.join(", ") + " { display: none!important; }";
|
||||||
|
const style = document.createElement("style");
|
||||||
|
style.innerHTML = rule;
|
||||||
|
document.head.appendChild(style);
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Calls the "callback" function on every DOM change, but not for the tracked events
|
||||||
|
* @param {Function} callback callback function
|
||||||
|
*/
|
||||||
|
const observeDomChanges = callback => {
|
||||||
|
const domMutationObserver = new MutationObserver(mutations => {
|
||||||
|
callback(mutations);
|
||||||
|
});
|
||||||
|
domMutationObserver.observe(document.documentElement, {
|
||||||
|
childList: true,
|
||||||
|
subtree: true,
|
||||||
|
});
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* This function is supposed to be called on every DOM change
|
||||||
|
*/
|
||||||
|
const hideDynamicAds = () => {
|
||||||
|
const elements = document.querySelectorAll("#contents > ytd-rich-item-renderer ytd-display-ad-renderer");
|
||||||
|
if (elements.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
elements.forEach(el => {
|
||||||
|
if (el.parentNode && el.parentNode.parentNode) {
|
||||||
|
const parent = el.parentNode.parentNode;
|
||||||
|
if (parent.localName === "ytd-rich-item-renderer") {
|
||||||
|
parent.style.display = "none";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* This function checks if the video ads are currently running
|
||||||
|
* and auto-clicks the skip button.
|
||||||
|
*/
|
||||||
|
const autoSkipAds = () => {
|
||||||
|
// If there's a video that plays the ad at this moment, scroll this ad
|
||||||
|
if (document.querySelector(".ad-showing")) {
|
||||||
|
const video = document.querySelector("video");
|
||||||
|
if (video && video.duration) {
|
||||||
|
video.currentTime = video.duration;
|
||||||
|
// Skip button should appear after that,
|
||||||
|
// now simply click it automatically
|
||||||
|
setTimeout(() => {
|
||||||
|
const skipBtn = document.querySelector("button.ytp-ad-skip-button");
|
||||||
|
if (skipBtn) {
|
||||||
|
skipBtn.click();
|
||||||
|
}
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* This function overrides a property on the specified object.
|
||||||
|
*
|
||||||
|
* @param {object} obj object to look for properties in
|
||||||
|
* @param {string} propertyName property to override
|
||||||
|
* @param {*} overrideValue value to set
|
||||||
|
*/
|
||||||
|
const overrideObject = (obj, propertyName, overrideValue) => {
|
||||||
|
if (!obj) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
let overriden = false;
|
||||||
|
for (const key in obj) {
|
||||||
|
// eslint-disable-next-line no-prototype-builtins
|
||||||
|
if (obj.hasOwnProperty(key) && key === propertyName) {
|
||||||
|
obj[key] = overrideValue;
|
||||||
|
overriden = true;
|
||||||
|
// eslint-disable-next-line no-prototype-builtins
|
||||||
|
} else if (obj.hasOwnProperty(key) && typeof obj[key] === "object") {
|
||||||
|
if (overrideObject(obj[key], propertyName, overrideValue)) {
|
||||||
|
overriden = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return overriden;
|
||||||
|
};
|
||||||
|
/**
|
||||||
|
* Overrides JSON.parse and Response.json functions.
|
||||||
|
* Examines these functions arguments, looks for properties with the specified name there
|
||||||
|
* and if it exists, changes it's value to what was specified.
|
||||||
|
*
|
||||||
|
* @param {string} propertyName name of the property
|
||||||
|
* @param {*} overrideValue new value for the property
|
||||||
|
*/
|
||||||
|
const jsonOverride = (propertyName, overrideValue) => {
|
||||||
|
const nativeJSONParse = JSON.parse;
|
||||||
|
JSON.parse = (...args) => {
|
||||||
|
const obj = nativeJSONParse.apply(this, args);
|
||||||
|
// Override it's props and return back to the caller
|
||||||
|
overrideObject(obj, propertyName, overrideValue);
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
// Override Response.prototype.json
|
||||||
|
const nativeResponseJson = Response.prototype.json;
|
||||||
|
Response.prototype.json = new Proxy(nativeResponseJson, {
|
||||||
|
apply(...args) {
|
||||||
|
// Call the target function, get the original Promise
|
||||||
|
const promise = Reflect.apply(...args);
|
||||||
|
// Create a new one and override the JSON inside
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
promise.then(data => {
|
||||||
|
overrideObject(data, propertyName, overrideValue);
|
||||||
|
resolve(data);
|
||||||
|
}).catch(error => reject(error));
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
};
|
||||||
|
const addAdGuardLogoStyle = () => { };
|
||||||
|
const addAdGuardLogo = () => {
|
||||||
|
if (document.getElementById(LOGO_ID)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
const logo = document.createElement("span");
|
||||||
|
logo.innerHTML = "__logo_text__";
|
||||||
|
logo.setAttribute("id", LOGO_ID);
|
||||||
|
if (window.location.hostname === "m.youtube.com") {
|
||||||
|
const btn = document.querySelector("header.mobile-topbar-header > button");
|
||||||
|
if (btn) {
|
||||||
|
btn.parentNode?.insertBefore(logo, btn.nextSibling);
|
||||||
|
addAdGuardLogoStyle();
|
||||||
|
}
|
||||||
|
} else if (window.location.hostname === "www.youtube.com") {
|
||||||
|
const code = document.getElementById("country-code");
|
||||||
|
if (code) {
|
||||||
|
code.innerHTML = "";
|
||||||
|
code.appendChild(logo);
|
||||||
|
addAdGuardLogoStyle();
|
||||||
|
}
|
||||||
|
} else if (window.location.hostname === "music.youtube.com") {
|
||||||
|
const el = document.querySelector(".ytmusic-nav-bar#left-content");
|
||||||
|
if (el) {
|
||||||
|
el.appendChild(logo);
|
||||||
|
addAdGuardLogoStyle();
|
||||||
|
}
|
||||||
|
} else if (window.location.hostname === "www.youtube-nocookie.com") {
|
||||||
|
const code = document.querySelector("#yt-masthead #logo-container .content-region");
|
||||||
|
if (code) {
|
||||||
|
code.innerHTML = "";
|
||||||
|
code.appendChild(logo);
|
||||||
|
addAdGuardLogoStyle();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
// Removes ads metadata from YouTube XHR requests
|
||||||
|
jsonOverride("adPlacements", []);
|
||||||
|
jsonOverride("playerAds", []);
|
||||||
|
// Applies CSS that hides YouTube ad elements
|
||||||
|
hideElements();
|
||||||
|
// Some changes should be re-evaluated on every page change
|
||||||
|
addAdGuardLogo();
|
||||||
|
hideDynamicAds();
|
||||||
|
autoSkipAds();
|
||||||
|
observeDomChanges(() => {
|
||||||
|
addAdGuardLogo();
|
||||||
|
hideDynamicAds();
|
||||||
|
autoSkipAds();
|
||||||
|
});
|
15
src/plugins/watchTogetherAdblock.desktop/index.ts
Normal file
15
src/plugins/watchTogetherAdblock.desktop/index.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
/*
|
||||||
|
* Vencord, a Discord client mod
|
||||||
|
* Copyright (c) 2023 Vendicated and contributors
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { Devs } from "@utils/constants";
|
||||||
|
import definePlugin from "@utils/types";
|
||||||
|
|
||||||
|
// The entire code of this plugin can be found in native.ts
|
||||||
|
export default definePlugin({
|
||||||
|
name: "WatchTogetherAdblock",
|
||||||
|
description: "Block ads in the YouTube WatchTogether activity via AdGuard",
|
||||||
|
authors: [Devs.ImLvna],
|
||||||
|
});
|
21
src/plugins/watchTogetherAdblock.desktop/native.ts
Normal file
21
src/plugins/watchTogetherAdblock.desktop/native.ts
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/*
|
||||||
|
* Vencord, a Discord client mod
|
||||||
|
* Copyright (c) 2023 Vendicated and contributors
|
||||||
|
* SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { RendererSettings } from "@main/settings";
|
||||||
|
import { app } from "electron";
|
||||||
|
import adguard from "file://adguard.js?minify";
|
||||||
|
|
||||||
|
app.on("browser-window-created", (_, win) => {
|
||||||
|
win.webContents.on("frame-created", (_, { frame }) => {
|
||||||
|
frame.once("dom-ready", () => {
|
||||||
|
if (frame.url.includes("discordsays") && frame.url.includes("youtube.com")) {
|
||||||
|
if (!RendererSettings.store.plugins?.WatchTogetherAdblock?.enabled) return;
|
||||||
|
|
||||||
|
frame.executeJavaScript(adguard);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
2
src/webpack/common/types/fluxEvents.d.ts
vendored
2
src/webpack/common/types/fluxEvents.d.ts
vendored
File diff suppressed because one or more lines are too long
4
src/webpack/common/types/stores.d.ts
vendored
4
src/webpack/common/types/stores.d.ts
vendored
|
@ -63,7 +63,7 @@ export interface CustomEmoji {
|
||||||
originalName?: string;
|
originalName?: string;
|
||||||
require_colons: boolean;
|
require_colons: boolean;
|
||||||
roles: string[];
|
roles: string[];
|
||||||
type: "GUILD_EMOJI";
|
type: 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface UnicodeEmoji {
|
export interface UnicodeEmoji {
|
||||||
|
@ -75,7 +75,7 @@ export interface UnicodeEmoji {
|
||||||
};
|
};
|
||||||
index: number;
|
index: number;
|
||||||
surrogates: string;
|
surrogates: string;
|
||||||
type: "UNICODE";
|
type: 0;
|
||||||
uniqueName: string;
|
uniqueName: string;
|
||||||
useSpriteSheet: boolean;
|
useSpriteSheet: boolean;
|
||||||
get allNamesString(): string;
|
get allNamesString(): string;
|
||||||
|
|
Loading…
Reference in a new issue