diff --git a/.github/ISSUE_TEMPLATE/blank.yml b/.github/ISSUE_TEMPLATE/blank.yml
index 2439d86a7..89588f3d8 100644
--- a/.github/ISSUE_TEMPLATE/blank.yml
+++ b/.github/ISSUE_TEMPLATE/blank.yml
@@ -2,30 +2,24 @@ name: Blank Issue
description: Create a blank issue. ALWAYS FIRST USE OUR SUPPORT CHANNEL! ONLY USE THIS FORM IF YOU ARE A CONTRIBUTOR OR WERE TOLD TO DO SO IN THE SUPPORT CHANNEL.
body:
- - type: markdown
- attributes:
- value: |
- # READ THIS BEFORE OPENING AN ISSUE
+ - type: markdown
+ attributes:
+ value: |
+ 
- This form is ONLY FOR DEVELOPERS. YOUR ISSUE WILL BE CLOSED AND YOU WILL POSSIBLY BE BLOCKED FROM THE REPOSITORY IF YOU IGNORE THIS.
-
- DO NOT USE THIS FORM, unless
- - you are a vencord contributor
- - you were given explicit permission to use this form by a moderator in our support server
-
- DO NOT USE THIS FORM FOR SECURITY RELATED ISSUES. [CREATE A SECURITY ADVISORY INSTEAD.](https://github.com/Vendicated/Vencord/security/advisories/new)
+ GitHub Issues are for development, not support! Please use our [support server](https://vencord.dev/discord) unless you are a Vencord Developer.
- - type: textarea
- id: content
- attributes:
- label: Content
- validations:
- required: true
-
- - type: checkboxes
- id: agreement-check
- attributes:
- label: Request Agreement
- options:
- - label: I have read the requirements for opening an issue above
+ - type: textarea
+ id: content
+ attributes:
+ label: Content
+ validations:
required: true
+
+ - type: checkboxes
+ id: agreement-check
+ attributes:
+ label: Request Agreement
+ options:
+ - label: I have read the requirements for opening an issue above
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index d79f5e490..c08f46357 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -4,78 +4,63 @@ labels: [bug]
title: "[Bug]
"
body:
- - type: markdown
- attributes:
- value: |
- # READ THIS BEFORE OPENING AN ISSUE
+ - type: markdown
+ attributes:
+ value: |
+ 
- This form is ONLY FOR DEVELOPERS. YOUR ISSUE WILL BE CLOSED AND YOU WILL POSSIBLY BE BLOCKED FROM THE REPOSITORY IF YOU IGNORE THIS.
-
- DO NOT USE THIS FORM, unless
- - you are a vencord contributor
- - you were given explicit permission to use this form by a moderator in our support server
-
- DO NOT USE THIS FORM FOR SECURITY RELATED ISSUES. [CREATE A SECURITY ADVISORY INSTEAD.](https://github.com/Vendicated/Vencord/security/advisories/new)
-
- - type: input
- id: discord
- attributes:
- label: Discord Account
- description: Who on Discord is making this request? Not required but encouraged for easier follow-up
- placeholder: username#0000
- validations:
- required: false
+ GitHub Issues are for development, not support! Please use our [support server](https://vencord.dev/discord) unless you are a Vencord Developer.
- - type: textarea
- id: bug-description
- attributes:
- label: What happens when the bug or crash occurs?
- description: Where does this bug or crash occur, when does it occur, etc.
- placeholder: The bug/crash happens sometimes when I do ..., causing this to not work/the app to crash. I think it happens because of ...
- validations:
- required: true
-
- - type: textarea
- id: expected-behaviour
- attributes:
- label: What is the expected behaviour?
- description: Simply detail what the expected behaviour is.
- placeholder: I expect Vencord/Discord to open the ... page instead of ..., it prevents me from doing ...
- validations:
- required: true
-
- - type: textarea
- id: steps-to-take
- attributes:
- label: How do you recreate this bug or crash?
- description: Give us a list of steps in order to recreate the bug or crash.
- placeholder: |
- 1. Do ...
- 2. Then ...
- 3. Do this ..., ... and then ...
- 4. Observe "the bug" or "the crash"
- validations:
- required: true
-
- - type: textarea
- id: crash-log
- attributes:
- label: Errors
- description: Open the Developer Console with Ctrl/Cmd + Shift + i. Then look for any red errors (Ignore network errors like Failed to load resource) and paste them between the "```".
- value: |
- ```
- Replace this text with your crash-log.
- ```
- validations:
- required: false
-
- - type: checkboxes
- id: agreement-check
- attributes:
- label: Request Agreement
- description: We only accept reports for bugs that happen on Discord Stable. Canary and PTB are Development branches and may be unstable
- options:
- - label: I am using Discord Stable or tried on Stable and this bug happens there as well
+ - type: textarea
+ id: bug-description
+ attributes:
+ label: What happens when the bug or crash occurs?
+ description: Where does this bug or crash occur, when does it occur, etc.
+ placeholder: The bug/crash happens sometimes when I do ..., causing this to not work/the app to crash. I think it happens because of ...
+ validations:
required: true
- - label: I have read the requirements for opening an issue above
+
+ - type: textarea
+ id: expected-behaviour
+ attributes:
+ label: What is the expected behaviour?
+ description: Simply detail what the expected behaviour is.
+ placeholder: I expect Vencord/Discord to open the ... page instead of ..., it prevents me from doing ...
+ validations:
required: true
+
+ - type: textarea
+ id: steps-to-take
+ attributes:
+ label: How do you recreate this bug or crash?
+ description: Give us a list of steps in order to recreate the bug or crash.
+ placeholder: |
+ 1. Do ...
+ 2. Then ...
+ 3. Do this ..., ... and then ...
+ 4. Observe "the bug" or "the crash"
+ validations:
+ required: true
+
+ - type: textarea
+ id: crash-log
+ attributes:
+ label: Errors
+ description: Open the Developer Console with Ctrl/Cmd + Shift + i. Then look for any red errors (Ignore network errors like Failed to load resource) and paste them between the "```".
+ value: |
+ ```
+ Replace this text with your crash-log.
+ ```
+ validations:
+ required: false
+
+ - type: checkboxes
+ id: agreement-check
+ attributes:
+ label: Request Agreement
+ description: We only accept reports for bugs that happen on Discord Stable. Canary and PTB are Development branches and may be unstable
+ options:
+ - label: I am using Discord Stable or tried on Stable and this bug happens there as well
+ required: true
+ - label: I am a Vencord Developer
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/developer-banner.png b/.github/ISSUE_TEMPLATE/developer-banner.png
new file mode 100644
index 000000000..5fa12fc37
Binary files /dev/null and b/.github/ISSUE_TEMPLATE/developer-banner.png differ
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ba22b1230..b1cbc3028 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -42,7 +42,7 @@ jobs:
- name: Clean up obsolete files
run: |
- rm -rf dist/*-unpacked dist/monaco Vencord.user.css vencordDesktopRenderer.css vencordDesktopRenderer.css.map
+ rm -rf dist/*-unpacked dist/vendor Vencord.user.css vencordDesktopRenderer.css vencordDesktopRenderer.css.map
- name: Get some values needed for the release
id: release_values
diff --git a/browser/manifest.json b/browser/manifest.json
index 357312b09..3463e46cf 100644
--- a/browser/manifest.json
+++ b/browser/manifest.json
@@ -36,7 +36,7 @@
"web_accessible_resources": [
{
- "resources": ["dist/*", "third-party/*"],
+ "resources": ["dist/*", "vendor/*"],
"matches": ["*://*.discord.com/*"]
}
],
diff --git a/browser/monaco.ts b/browser/monaco.ts
index ead061d65..dc243df7d 100644
--- a/browser/monaco.ts
+++ b/browser/monaco.ts
@@ -15,7 +15,7 @@ declare global {
const getTheme: () => string;
}
-const BASE = "/dist/monaco/vs";
+const BASE = "/vendor/monaco/vs";
self.MonacoEnvironment = {
getWorkerUrl(_moduleId: unknown, label: string) {
diff --git a/browser/monacoWin.html b/browser/monacoWin.html
index a55b0e547..12523d455 100644
--- a/browser/monacoWin.html
+++ b/browser/monacoWin.html
@@ -24,12 +24,12 @@
diff --git a/eslint.config.mjs b/eslint.config.mjs
index 67327b938..d59c37532 100644
--- a/eslint.config.mjs
+++ b/eslint.config.mjs
@@ -134,7 +134,7 @@ export default tseslint.config(
"no-unsafe-optional-chaining": "error",
"no-useless-backreference": "error",
"use-isnan": "error",
- "prefer-const": "error",
+ "prefer-const": ["error", { destructuring: "all" }],
"prefer-spread": "error",
// Plugin Rules
diff --git a/package.json b/package.json
index dca52a16f..f251aeda7 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "vencord",
"private": "true",
- "version": "1.11.4",
+ "version": "1.11.5",
"description": "The cutest Discord client mod",
"homepage": "https://github.com/Vendicated/Vencord#readme",
"bugs": {
@@ -24,19 +24,18 @@
"dev": "pnpm watch",
"watchWeb": "pnpm buildWeb --watch",
"generatePluginJson": "tsx scripts/generatePluginList.ts",
- "generateTypes": "tspc --emitDeclarationOnly --declaration --outDir packages/vencord-types",
+ "generateTypes": "tspc --emitDeclarationOnly --declaration --outDir packages/vencord-types --allowJs false",
"inject": "node scripts/runInstaller.mjs",
"uninject": "node scripts/runInstaller.mjs",
"lint": "eslint",
"lint-styles": "stylelint \"src/**/*.css\" --ignore-pattern src/userplugins",
"lint:fix": "pnpm lint --fix",
- "test": "pnpm buildStandalone && pnpm lint && pnpm lint-styles && pnpm testTsc && pnpm generatePluginJson",
+ "test": "pnpm buildStandalone && pnpm testTsc && pnpm lint && pnpm lint-styles && pnpm generatePluginJson",
"testWeb": "pnpm lint && pnpm buildWeb && pnpm testTsc",
"testTsc": "tsc --noEmit"
},
"dependencies": {
"@intrnl/xxhash64": "^0.1.2",
- "@sapphi-red/web-noise-suppressor": "0.3.5",
"@vap/core": "0.0.12",
"@vap/shiki": "0.10.5",
"fflate": "^0.8.2",
@@ -46,31 +45,31 @@
"virtual-merge": "^1.0.1"
},
"devDependencies": {
- "@stylistic/eslint-plugin": "^2.12.1",
- "@types/chrome": "^0.0.287",
- "@types/diff": "^6.0.0",
+ "@stylistic/eslint-plugin": "^4.0.0",
+ "@types/chrome": "^0.0.304",
+ "@types/diff": "^7.0.1",
"@types/lodash": "^4.17.14",
"@types/node": "^22.10.5",
- "@types/react": "^19.0.2",
- "@types/react-dom": "^19.0.2",
+ "@types/react": "^19.0.10",
+ "@types/react-dom": "^19.0.4",
"@types/yazl": "^2.4.5",
"diff": "^7.0.0",
"discord-types": "^1.3.26",
- "esbuild": "^0.15.18",
- "eslint": "^9.17.0",
+ "esbuild": "^0.25.0",
+ "eslint": "^9.20.1",
"eslint-import-resolver-alias": "^1.1.2",
"eslint-plugin-path-alias": "2.1.0",
"eslint-plugin-react": "^7.37.3",
"eslint-plugin-simple-header": "^1.2.1",
"eslint-plugin-simple-import-sort": "^12.1.1",
"eslint-plugin-unused-imports": "^4.1.4",
- "highlight.js": "11.7.0",
+ "highlight.js": "11.11.1",
"html-minifier-terser": "^7.2.0",
"moment": "^2.22.2",
- "puppeteer-core": "^23.11.1",
- "standalone-electron-types": "^1.0.0",
+ "puppeteer-core": "^24.2.1",
+ "standalone-electron-types": "^34.2.0",
"stylelint": "^16.12.0",
- "stylelint-config-standard": "^36.0.1",
+ "stylelint-config-standard": "^37.0.0",
"ts-patch": "^3.3.0",
"ts-pattern": "^5.6.0",
"tsx": "^4.19.2",
@@ -80,10 +79,10 @@
"typescript-transform-paths": "^3.5.3",
"zip-local": "^0.3.5"
},
- "packageManager": "pnpm@9.1.0",
+ "packageManager": "pnpm@10.4.1",
"pnpm": {
"patchedDependencies": {
- "eslint@9.17.0": "patches/eslint@9.17.0.patch",
+ "eslint@9.20.1": "patches/eslint@9.20.1.patch",
"eslint-plugin-path-alias@2.1.0": "patches/eslint-plugin-path-alias@2.1.0.patch"
},
"peerDependencyRules": {
@@ -96,18 +95,14 @@
"source-map-resolve": "*",
"resolve-url": "*",
"source-map-url": "*",
- "urix": "*"
- }
- },
- "webExt": {
- "artifactsDir": "./dist",
- "build": {
- "overwriteDest": true
+ "urix": "*",
+ "q": "*"
},
- "sourceDir": "./dist/firefox-unpacked"
+ "onlyBuiltDependencies": [
+ "esbuild"
+ ]
},
"engines": {
- "node": ">=18",
- "pnpm": ">=9"
+ "node": ">=18"
}
}
diff --git a/packages/vencord-types/package.json b/packages/vencord-types/package.json
index 8f9d852e4..b3bbe315e 100644
--- a/packages/vencord-types/package.json
+++ b/packages/vencord-types/package.json
@@ -1,7 +1,7 @@
{
"name": "@vencord/types",
"private": false,
- "version": "0.1.3",
+ "version": "1.11.5",
"description": "",
"types": "index.d.ts",
"scripts": {
@@ -13,16 +13,16 @@
"license": "GPL-3.0",
"devDependencies": {
"@types/fs-extra": "^11.0.4",
- "fs-extra": "^11.2.0",
- "tsx": "^3.12.6"
+ "fs-extra": "^11.3.0",
+ "tsx": "^4.19.2"
},
"dependencies": {
- "@types/lodash": "^4.14.191",
- "@types/node": "^18.11.18",
- "@types/react": "^18.2.0",
- "@types/react-dom": "^18.0.10",
+ "@types/lodash": "4.17.15",
+ "@types/node": "^22.13.4",
+ "@types/react": "18.3.1",
+ "@types/react-dom": "18.3.1",
"discord-types": "^1.3.26",
- "standalone-electron-types": "^1.0.0",
- "type-fest": "^3.5.3"
+ "standalone-electron-types": "^34.2.0",
+ "type-fest": "^4.35.0"
}
}
diff --git a/patches/eslint@9.17.0.patch b/patches/eslint@9.20.1.patch
similarity index 100%
rename from patches/eslint@9.17.0.patch
rename to patches/eslint@9.20.1.patch
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index a49df467b..77680a806 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,11 +6,11 @@ settings:
patchedDependencies:
eslint-plugin-path-alias@2.1.0:
- hash: japuwsqfkulviwgkm4kd2oi3ky
+ hash: 87545cb13985b338c8fa2ea7b0a3c75c57ad7fbc81c56b38d6c9438329957727
path: patches/eslint-plugin-path-alias@2.1.0.patch
- eslint@9.17.0:
- hash: xm46kqcmdgzlmm4aifkfpxaho4
- path: patches/eslint@9.17.0.patch
+ eslint@9.20.1:
+ hash: 4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215
+ path: patches/eslint@9.20.1.patch
importers:
@@ -19,9 +19,6 @@ importers:
'@intrnl/xxhash64':
specifier: ^0.1.2
version: 0.1.2
- '@sapphi-red/web-noise-suppressor':
- specifier: 0.3.5
- version: 0.3.5
'@vap/core':
specifier: 0.0.12
version: 0.0.12
@@ -39,35 +36,35 @@ importers:
version: 0.52.2
nanoid:
specifier: ^5.0.9
- version: 5.0.9
+ version: 5.1.0
virtual-merge:
specifier: ^1.0.1
- version: 1.0.1
+ version: 1.0.2
devDependencies:
'@stylistic/eslint-plugin':
- specifier: ^2.12.1
- version: 2.12.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
+ specifier: ^4.0.0
+ version: 4.0.0(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
'@types/chrome':
- specifier: ^0.0.287
- version: 0.0.287
+ specifier: ^0.0.304
+ version: 0.0.304
'@types/diff':
- specifier: ^6.0.0
- version: 6.0.0
+ specifier: ^7.0.1
+ version: 7.0.1
'@types/lodash':
specifier: ^4.17.14
- version: 4.17.14
+ version: 4.17.15
'@types/node':
specifier: ^22.10.5
- version: 22.10.5
+ version: 22.13.4
'@types/react':
- specifier: ^19.0.2
- version: 19.0.2
+ specifier: ^19.0.10
+ version: 19.0.10
'@types/react-dom':
- specifier: ^19.0.2
- version: 19.0.2(@types/react@19.0.2)
+ specifier: ^19.0.4
+ version: 19.0.4(@types/react@19.0.10)
'@types/yazl':
specifier: ^2.4.5
- version: 2.4.5
+ version: 2.4.6
diff:
specifier: ^7.0.0
version: 7.0.0
@@ -75,32 +72,32 @@ importers:
specifier: ^1.3.26
version: 1.3.26
esbuild:
- specifier: ^0.15.18
- version: 0.15.18
+ specifier: ^0.25.0
+ version: 0.25.0
eslint:
- specifier: ^9.17.0
- version: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ specifier: ^9.20.1
+ version: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
eslint-import-resolver-alias:
specifier: ^1.1.2
- version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)))
+ version: 1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)))
eslint-plugin-path-alias:
specifier: 2.1.0
- version: 2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ version: 2.1.0(patch_hash=87545cb13985b338c8fa2ea7b0a3c75c57ad7fbc81c56b38d6c9438329957727)(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
eslint-plugin-react:
specifier: ^7.37.3
- version: 7.37.3(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ version: 7.37.4(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
eslint-plugin-simple-header:
specifier: ^1.2.1
- version: 1.2.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ version: 1.2.2(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
eslint-plugin-simple-import-sort:
specifier: ^12.1.1
- version: 12.1.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ version: 12.1.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
eslint-plugin-unused-imports:
specifier: ^4.1.4
- version: 4.1.4(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ version: 4.1.4(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
highlight.js:
- specifier: 11.7.0
- version: 11.7.0
+ specifier: 11.11.1
+ version: 11.11.1
html-minifier-terser:
specifier: ^7.2.0
version: 7.2.0
@@ -108,38 +105,38 @@ importers:
specifier: ^2.22.2
version: 2.30.1
puppeteer-core:
- specifier: ^23.11.1
- version: 23.11.1
+ specifier: ^24.2.1
+ version: 24.2.1
standalone-electron-types:
- specifier: ^1.0.0
- version: 1.0.0
+ specifier: ^34.2.0
+ version: 34.2.0
stylelint:
specifier: ^16.12.0
- version: 16.12.0(typescript@5.7.2)
+ version: 16.14.1(typescript@5.7.3)
stylelint-config-standard:
- specifier: ^36.0.1
- version: 36.0.1(stylelint@16.12.0(typescript@5.7.2))
+ specifier: ^37.0.0
+ version: 37.0.0(stylelint@16.14.1(typescript@5.7.3))
ts-patch:
specifier: ^3.3.0
version: 3.3.0
ts-pattern:
specifier: ^5.6.0
- version: 5.6.0
+ version: 5.6.2
tsx:
specifier: ^4.19.2
version: 4.19.2
type-fest:
specifier: ^4.31.0
- version: 4.31.0
+ version: 4.35.0
typescript:
specifier: ^5.7.2
- version: 5.7.2
+ version: 5.7.3
typescript-eslint:
specifier: ^8.19.0
- version: 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
+ version: 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
typescript-transform-paths:
specifier: ^3.5.3
- version: 3.5.3(typescript@5.7.2)
+ version: 3.5.3(typescript@5.7.3)
zip-local:
specifier: ^0.3.5
version: 0.3.5
@@ -147,36 +144,36 @@ importers:
packages/vencord-types:
dependencies:
'@types/lodash':
- specifier: ^4.14.191
- version: 4.14.194
+ specifier: 4.17.15
+ version: 4.17.15
'@types/node':
- specifier: ^18.11.18
- version: 18.16.3
+ specifier: ^22.13.4
+ version: 22.13.4
'@types/react':
- specifier: ^18.2.0
- version: 18.2.0
+ specifier: 18.3.1
+ version: 18.3.1
'@types/react-dom':
- specifier: ^18.0.10
- version: 18.2.1
+ specifier: 18.3.1
+ version: 18.3.1
discord-types:
specifier: ^1.3.26
version: 1.3.26
standalone-electron-types:
- specifier: ^1.0.0
- version: 1.0.0
+ specifier: ^34.2.0
+ version: 34.2.0
type-fest:
- specifier: ^3.5.3
- version: 3.9.0
+ specifier: ^4.35.0
+ version: 4.35.0
devDependencies:
'@types/fs-extra':
specifier: ^11.0.4
version: 11.0.4
fs-extra:
- specifier: ^11.2.0
- version: 11.2.0
+ specifier: ^11.3.0
+ version: 11.3.0
tsx:
- specifier: ^3.12.6
- version: 3.12.7
+ specifier: ^4.19.2
+ version: 4.19.2
packages:
@@ -214,26 +211,17 @@ packages:
'@dual-bundle/import-meta-resolve@4.1.0':
resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==}
- '@esbuild-kit/cjs-loader@2.4.2':
- resolution: {integrity: sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==}
-
- '@esbuild-kit/core-utils@3.1.0':
- resolution: {integrity: sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==}
-
- '@esbuild-kit/esm-loader@2.5.5':
- resolution: {integrity: sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==}
-
'@esbuild/aix-ppc64@0.23.1':
resolution: {integrity: sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
- '@esbuild/android-arm64@0.17.19':
- resolution: {integrity: sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
+ '@esbuild/aix-ppc64@0.25.0':
+ resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
'@esbuild/android-arm64@0.23.1':
resolution: {integrity: sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==}
@@ -241,16 +229,10 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm@0.15.18':
- resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-arm@0.17.19':
- resolution: {integrity: sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==}
- engines: {node: '>=12'}
- cpu: [arm]
+ '@esbuild/android-arm64@0.25.0':
+ resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [android]
'@esbuild/android-arm@0.23.1':
@@ -259,10 +241,10 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-x64@0.17.19':
- resolution: {integrity: sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==}
- engines: {node: '>=12'}
- cpu: [x64]
+ '@esbuild/android-arm@0.25.0':
+ resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==}
+ engines: {node: '>=18'}
+ cpu: [arm]
os: [android]
'@esbuild/android-x64@0.23.1':
@@ -271,11 +253,11 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/darwin-arm64@0.17.19':
- resolution: {integrity: sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
+ '@esbuild/android-x64@0.25.0':
+ resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
'@esbuild/darwin-arm64@0.23.1':
resolution: {integrity: sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==}
@@ -283,10 +265,10 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-x64@0.17.19':
- resolution: {integrity: sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==}
- engines: {node: '>=12'}
- cpu: [x64]
+ '@esbuild/darwin-arm64@0.25.0':
+ resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [darwin]
'@esbuild/darwin-x64@0.23.1':
@@ -295,11 +277,11 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/freebsd-arm64@0.17.19':
- resolution: {integrity: sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
+ '@esbuild/darwin-x64@0.25.0':
+ resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
'@esbuild/freebsd-arm64@0.23.1':
resolution: {integrity: sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==}
@@ -307,10 +289,10 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.17.19':
- resolution: {integrity: sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==}
- engines: {node: '>=12'}
- cpu: [x64]
+ '@esbuild/freebsd-arm64@0.25.0':
+ resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [freebsd]
'@esbuild/freebsd-x64@0.23.1':
@@ -319,11 +301,11 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/linux-arm64@0.17.19':
- resolution: {integrity: sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
+ '@esbuild/freebsd-x64@0.25.0':
+ resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
'@esbuild/linux-arm64@0.23.1':
resolution: {integrity: sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==}
@@ -331,10 +313,10 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm@0.17.19':
- resolution: {integrity: sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==}
- engines: {node: '>=12'}
- cpu: [arm]
+ '@esbuild/linux-arm64@0.25.0':
+ resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [linux]
'@esbuild/linux-arm@0.23.1':
@@ -343,10 +325,10 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-ia32@0.17.19':
- resolution: {integrity: sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==}
- engines: {node: '>=12'}
- cpu: [ia32]
+ '@esbuild/linux-arm@0.25.0':
+ resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==}
+ engines: {node: '>=18'}
+ cpu: [arm]
os: [linux]
'@esbuild/linux-ia32@0.23.1':
@@ -355,16 +337,10 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-loong64@0.15.18':
- resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==}
- engines: {node: '>=12'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-loong64@0.17.19':
- resolution: {integrity: sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==}
- engines: {node: '>=12'}
- cpu: [loong64]
+ '@esbuild/linux-ia32@0.25.0':
+ resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
os: [linux]
'@esbuild/linux-loong64@0.23.1':
@@ -373,10 +349,10 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-mips64el@0.17.19':
- resolution: {integrity: sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==}
- engines: {node: '>=12'}
- cpu: [mips64el]
+ '@esbuild/linux-loong64@0.25.0':
+ resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
os: [linux]
'@esbuild/linux-mips64el@0.23.1':
@@ -385,10 +361,10 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-ppc64@0.17.19':
- resolution: {integrity: sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==}
- engines: {node: '>=12'}
- cpu: [ppc64]
+ '@esbuild/linux-mips64el@0.25.0':
+ resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
os: [linux]
'@esbuild/linux-ppc64@0.23.1':
@@ -397,10 +373,10 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-riscv64@0.17.19':
- resolution: {integrity: sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==}
- engines: {node: '>=12'}
- cpu: [riscv64]
+ '@esbuild/linux-ppc64@0.25.0':
+ resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
os: [linux]
'@esbuild/linux-riscv64@0.23.1':
@@ -409,10 +385,10 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-s390x@0.17.19':
- resolution: {integrity: sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==}
- engines: {node: '>=12'}
- cpu: [s390x]
+ '@esbuild/linux-riscv64@0.25.0':
+ resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
os: [linux]
'@esbuild/linux-s390x@0.23.1':
@@ -421,10 +397,10 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-x64@0.17.19':
- resolution: {integrity: sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==}
- engines: {node: '>=12'}
- cpu: [x64]
+ '@esbuild/linux-s390x@0.25.0':
+ resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
os: [linux]
'@esbuild/linux-x64@0.23.1':
@@ -433,10 +409,16 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/netbsd-x64@0.17.19':
- resolution: {integrity: sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==}
- engines: {node: '>=12'}
+ '@esbuild/linux-x64@0.25.0':
+ resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==}
+ engines: {node: '>=18'}
cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.25.0':
+ resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [netbsd]
'@esbuild/netbsd-x64@0.23.1':
@@ -445,16 +427,22 @@ packages:
cpu: [x64]
os: [netbsd]
+ '@esbuild/netbsd-x64@0.25.0':
+ resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
'@esbuild/openbsd-arm64@0.23.1':
resolution: {integrity: sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.17.19':
- resolution: {integrity: sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==}
- engines: {node: '>=12'}
- cpu: [x64]
+ '@esbuild/openbsd-arm64@0.25.0':
+ resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [openbsd]
'@esbuild/openbsd-x64@0.23.1':
@@ -463,11 +451,11 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/sunos-x64@0.17.19':
- resolution: {integrity: sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==}
- engines: {node: '>=12'}
+ '@esbuild/openbsd-x64@0.25.0':
+ resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==}
+ engines: {node: '>=18'}
cpu: [x64]
- os: [sunos]
+ os: [openbsd]
'@esbuild/sunos-x64@0.23.1':
resolution: {integrity: sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==}
@@ -475,11 +463,11 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/win32-arm64@0.17.19':
- resolution: {integrity: sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
+ '@esbuild/sunos-x64@0.25.0':
+ resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
'@esbuild/win32-arm64@0.23.1':
resolution: {integrity: sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==}
@@ -487,10 +475,10 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-ia32@0.17.19':
- resolution: {integrity: sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==}
- engines: {node: '>=12'}
- cpu: [ia32]
+ '@esbuild/win32-arm64@0.25.0':
+ resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
os: [win32]
'@esbuild/win32-ia32@0.23.1':
@@ -499,10 +487,10 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-x64@0.17.19':
- resolution: {integrity: sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==}
- engines: {node: '>=12'}
- cpu: [x64]
+ '@esbuild/win32-ia32@0.25.0':
+ resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
os: [win32]
'@esbuild/win32-x64@0.23.1':
@@ -511,6 +499,12 @@ packages:
cpu: [x64]
os: [win32]
+ '@esbuild/win32-x64@0.25.0':
+ resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
'@eslint-community/eslint-utils@4.4.1':
resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -521,28 +515,32 @@ packages:
resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
- '@eslint/config-array@0.19.1':
- resolution: {integrity: sha512-fo6Mtm5mWyKjA/Chy1BYTdn5mGJoDNjC7C64ug20ADsRDGrA85bN3uK3MaKbeRkRuuIEAR5N33Jr1pbm411/PA==}
+ '@eslint/config-array@0.19.2':
+ resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/core@0.9.1':
- resolution: {integrity: sha512-GuUdqkyyzQI5RMIWkHhvTWLCyLo1jNK3vzkSyaExH5kHPDHcuL2VOpHjmMY+y3+NC69qAKToBqldTBgYeLSr9Q==}
+ '@eslint/core@0.10.0':
+ resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.11.0':
+ resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@eslint/eslintrc@3.2.0':
resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/js@9.17.0':
- resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==}
+ '@eslint/js@9.20.0':
+ resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/object-schema@2.1.5':
- resolution: {integrity: sha512-o0bhxnL89h5Bae5T318nFoFzGy+YE5i/gGkoPAgkmTVdRKTiv3p8JHevPiPaMwoloKfEiiaHlawCqaZMqRm+XQ==}
+ '@eslint/object-schema@2.1.6':
+ resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@eslint/plugin-kit@0.2.4':
- resolution: {integrity: sha512-zSkKow6H5Kdm0ZUQUB2kV5JIXqoG0+uH5YADhaEHswm664N9Db8dXSi0nMJpacpMf+MyyglF1vnZohpEg5yUtg==}
+ '@eslint/plugin-kit@0.2.5':
+ resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@humanfs/core@0.19.1':
@@ -589,6 +587,9 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@keyv/serialize@1.0.3':
+ resolution: {integrity: sha512-qnEovoOp5Np2JDGonIDL6Ayihw0RhnRh6vxPuHo4RDn1UOzwEo4AeIfpL6UGIrsceWrCMiVPgwRjbHu4vYFc3g==}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -601,31 +602,28 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@puppeteer/browsers@2.6.1':
- resolution: {integrity: sha512-aBSREisdsGH890S2rQqK82qmQYU3uFpSH8wcZWHgHzl3LfzsxAKbLNiAG9mO8v1Y0UICBeClICxPJvyr0rcuxg==}
+ '@puppeteer/browsers@2.7.1':
+ resolution: {integrity: sha512-MK7rtm8JjaxPN7Mf1JdZIZKPD2Z+W7osvrC1vjpvfOX1K0awDIHYbNi89f7eotp7eMUn2shWnt03HwVbriXtKQ==}
engines: {node: '>=18'}
hasBin: true
'@rtsao/scc@1.1.0':
resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==}
- '@sapphi-red/web-noise-suppressor@0.3.5':
- resolution: {integrity: sha512-jh3+V9yM+zxLriQexoGm0GatoPaJWjs6ypFIbFYwQp+AoUb55eUXrjKtKQyuC5zShzzeAQUl0M5JzqB7SSrsRA==}
-
- '@stylistic/eslint-plugin@2.12.1':
- resolution: {integrity: sha512-fubZKIHSPuo07FgRTn6S4Nl0uXPRPYVNpyZzIDGfp7Fny6JjNus6kReLD7NI380JXi4HtUTSOZ34LBuNPO1XLQ==}
+ '@stylistic/eslint-plugin@4.0.0':
+ resolution: {integrity: sha512-3US6mWvUrb7xrKs5TR6Ak3Mw8ghSu8gx/lOOkqxUWm1Bw89A9N6PsOUFd4N7aVmlr4VugOqgOdHfBKyt3BsEig==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- eslint: '>=8.40.0'
+ eslint: '>=9.0.0'
'@tootallnate/quickjs-emscripten@0.23.0':
resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==}
- '@types/chrome@0.0.287':
- resolution: {integrity: sha512-wWhBNPNXZHwycHKNYnexUcpSbrihVZu++0rdp6GEk5ZgAglenLx+RwdEouh6FrHS0XQiOxSd62yaujM1OoQlZQ==}
+ '@types/chrome@0.0.304':
+ resolution: {integrity: sha512-ms9CLILU+FEMK7gcmgz/Mtn2E81YQWiMIzCFF8ktp98EVNIIfoqaDTD4+ailOCq1sGjbnEmfJxQ1FAsQtk5M3A==}
- '@types/diff@6.0.0':
- resolution: {integrity: sha512-dhVCYGv3ZSbzmQaBSagrv1WJ6rXCdkyTcDyoNu1MD8JohI7pR7k8wdZEm+mvdxRKXyHVwckFzWU1vJc+Z29MlA==}
+ '@types/diff@7.0.1':
+ resolution: {integrity: sha512-R/BHQFripuhW6XPXy05hIvXJQdQ4540KnTvEFHSLjXfHYM41liOLKgIJEyYYiQe796xpaMHfe4Uj/p7Uvng2vA==}
'@types/estree@1.0.6':
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
@@ -651,123 +649,83 @@ packages:
'@types/jsonfile@6.1.4':
resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==}
- '@types/lodash@4.14.194':
- resolution: {integrity: sha512-r22s9tAS7imvBt2lyHC9B8AGwWnXaYb1tY09oyLkXDs4vArpYJzw09nj8MLx5VfciBPGIb+ZwG0ssYnEPJxn/g==}
+ '@types/lodash@4.17.15':
+ resolution: {integrity: sha512-w/P33JFeySuhN6JLkysYUK2gEmy9kHHFN7E8ro0tkfmlDOgxBDzWEZ/J8cWA+fHqFevpswDTFZnDx+R9lbL6xw==}
- '@types/lodash@4.17.14':
- resolution: {integrity: sha512-jsxagdikDiDBeIRaPYtArcT8my4tN1og7MtMRquFT3XNA6axxyHDRUemqDz/taRDdOUn0GnGHRCuff4q48sW9A==}
-
- '@types/node@18.16.3':
- resolution: {integrity: sha512-OPs5WnnT1xkCBiuQrZA4+YAV4HEJejmHneyraIaxsbev5yCEr6KMwINNFP9wQeFIw8FWcoTqF3vQsa5CDaI+8Q==}
-
- '@types/node@18.19.69':
- resolution: {integrity: sha512-ECPdY1nlaiO/Y6GUnwgtAAhLNaQ53AyIVz+eILxpEo5OvuqE6yWkqWBIb5dU0DqhKQtMeny+FBD3PK6lm7L5xQ==}
-
- '@types/node@22.10.5':
- resolution: {integrity: sha512-F8Q+SeGimwOo86fiovQh8qiXfFEh2/ocYv7tU5pJ3EXMSSxk1Joj5wefpFK2fHTf/N6HKGSxIDBT9f3gCxXPkQ==}
+ '@types/node@22.13.4':
+ resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==}
'@types/prop-types@15.7.14':
resolution: {integrity: sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==}
- '@types/prop-types@15.7.5':
- resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+ '@types/react-dom@18.3.1':
+ resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==}
- '@types/react-dom@18.2.1':
- resolution: {integrity: sha512-8QZEV9+Kwy7tXFmjJrp3XUKQSs9LTnE0KnoUb0YCguWBiNW0Yfb2iBMYZ08WPg35IR6P3Z0s00B15SwZnO26+w==}
-
- '@types/react-dom@19.0.2':
- resolution: {integrity: sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg==}
+ '@types/react-dom@19.0.4':
+ resolution: {integrity: sha512-4fSQ8vWFkg+TGhePfUzVmat3eC14TXYSsiiDSLI0dVLsrm9gZFABjPy/Qu6TKgl1tq1Bu1yDsuQgY3A3DOjCcg==}
peerDependencies:
'@types/react': ^19.0.0
'@types/react@17.0.2':
resolution: {integrity: sha512-Xt40xQsrkdvjn1EyWe1Bc0dJLcil/9x2vAuW7ya+PuQip4UYUaXyhzWmAbwRsdMgwOFHpfp7/FFZebDU6Y8VHA==}
- '@types/react@18.2.0':
- resolution: {integrity: sha512-0FLj93y5USLHdnhIhABk83rm8XEGA7kH3cr+YUlvxoUGp1xNt/DINUMvqPxLyOQMzLmZe8i4RTHbvb8MC7NmrA==}
+ '@types/react@18.3.1':
+ resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==}
- '@types/react@19.0.2':
- resolution: {integrity: sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg==}
-
- '@types/scheduler@0.16.3':
- resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
+ '@types/react@19.0.10':
+ resolution: {integrity: sha512-JuRQ9KXLEjaUNjTWpzuR231Z2WpIwczOkBEIvbHNCzQefFIT0L8IqE6NV6ULLyC1SI/i234JnDoMkfg+RjQj2g==}
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
- '@types/yazl@2.4.5':
- resolution: {integrity: sha512-qpmPfx32HS7vlGJf7EsoM9qJnLZhXJBf1KH0hzfdc+D794rljQWh4H0I/UrZy+6Nhqn0l2jdBZXBGZtR1vnHqw==}
+ '@types/yazl@2.4.6':
+ resolution: {integrity: sha512-/ifFjQtcKaoZOjl5NNCQRR0fAKafB3Foxd7J/WvFPTMea46zekapcR30uzkwIkKAAuq5T6d0dkwz754RFH27hg==}
- '@typescript-eslint/eslint-plugin@8.19.0':
- resolution: {integrity: sha512-NggSaEZCdSrFddbctrVjkVZvFC6KGfKfNK0CU7mNK/iKHGKbzT4Wmgm08dKpcZECBu9f5FypndoMyRHkdqfT1Q==}
+ '@typescript-eslint/eslint-plugin@8.24.1':
+ resolution: {integrity: sha512-ll1StnKtBigWIGqvYDVuDmXJHVH4zLVot1yQ4fJtLpL7qacwkxJc1T0bptqw+miBQ/QfUbhl1TcQ4accW5KUyA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
'@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/parser@8.19.0':
- resolution: {integrity: sha512-6M8taKyOETY1TKHp0x8ndycipTVgmp4xtg5QpEZzXxDhNvvHOJi5rLRkLr8SK3jTgD5l4fTlvBiRdfsuWydxBw==}
+ '@typescript-eslint/parser@8.24.1':
+ resolution: {integrity: sha512-Tqoa05bu+t5s8CTZFaGpCH2ub3QeT9YDkXbPd3uQ4SfsLoh1/vv2GEYAioPoxCWJJNsenXlC88tRjwoHNts1oQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/scope-manager@8.18.1':
- resolution: {integrity: sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==}
+ '@typescript-eslint/scope-manager@8.24.1':
+ resolution: {integrity: sha512-OdQr6BNBzwRjNEXMQyaGyZzgg7wzjYKfX2ZBV3E04hUCBDv3GQCHiz9RpqdUIiVrMgJGkXm3tcEh4vFSHreS2Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/scope-manager@8.19.0':
- resolution: {integrity: sha512-hkoJiKQS3GQ13TSMEiuNmSCvhz7ujyqD1x3ShbaETATHrck+9RaDdUbt+osXaUuns9OFwrDTTrjtwsU8gJyyRA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@typescript-eslint/type-utils@8.19.0':
- resolution: {integrity: sha512-TZs0I0OSbd5Aza4qAMpp1cdCYVnER94IziudE3JU328YUHgWu9gwiwhag+fuLeJ2LkWLXI+F/182TbG+JaBdTg==}
+ '@typescript-eslint/type-utils@8.24.1':
+ resolution: {integrity: sha512-/Do9fmNgCsQ+K4rCz0STI7lYB4phTtEXqqCAs3gZW0pnK7lWNkvWd5iW545GSmApm4AzmQXmSqXPO565B4WVrw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/types@8.18.1':
- resolution: {integrity: sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==}
+ '@typescript-eslint/types@8.24.1':
+ resolution: {integrity: sha512-9kqJ+2DkUXiuhoiYIUvIYjGcwle8pcPpdlfkemGvTObzgmYfJ5d0Qm6jwb4NBXP9W1I5tss0VIAnWFumz3mC5A==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/types@8.19.0':
- resolution: {integrity: sha512-8XQ4Ss7G9WX8oaYvD4OOLCjIQYgRQxO+qCiR2V2s2GxI9AUpo7riNwo6jDhKtTcaJjT8PY54j2Yb33kWtSJsmA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@typescript-eslint/typescript-estree@8.18.1':
- resolution: {integrity: sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==}
+ '@typescript-eslint/typescript-estree@8.24.1':
+ resolution: {integrity: sha512-UPyy4MJ/0RE648DSKQe9g0VDSehPINiejjA6ElqnFaFIhI6ZEiZAkUI0D5MCk0bQcTf/LVqZStvQ6K4lPn/BRg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/typescript-estree@8.19.0':
- resolution: {integrity: sha512-WW9PpDaLIFW9LCbucMSdYUuGeFUz1OkWYS/5fwZwTA+l2RwlWFdJvReQqMUMBw4yJWJOfqd7An9uwut2Oj8sLw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <5.8.0'
-
- '@typescript-eslint/utils@8.18.1':
- resolution: {integrity: sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==}
+ '@typescript-eslint/utils@8.24.1':
+ resolution: {integrity: sha512-OOcg3PMMQx9EXspId5iktsI3eMaXVwlhC8BvNnX6B5w9a4dVgpkQZuU8Hy67TolKcl+iFWq0XX+jbDGN4xWxjQ==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <5.8.0'
- '@typescript-eslint/utils@8.19.0':
- resolution: {integrity: sha512-PTBG+0oEMPH9jCZlfg07LCB2nYI0I317yyvXGfxnvGvw4SHIOuRnQ3kadyyXY6tGdChusIHIbM5zfIbp4M6tCg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0
- typescript: '>=4.8.4 <5.8.0'
-
- '@typescript-eslint/visitor-keys@8.18.1':
- resolution: {integrity: sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@typescript-eslint/visitor-keys@8.19.0':
- resolution: {integrity: sha512-mCFtBbFBJDCNCWUl5y6sZSCHXw1DEFEk3c/M3nRK2a4XUB8StGFtmcEMizdjKuBzB6e/smJAAWYug3VrdLMr1w==}
+ '@typescript-eslint/visitor-keys@8.24.1':
+ resolution: {integrity: sha512-EwVHlp5l+2vp8CoqJm9KikPZgi3gbdZAtabKT9KPShGeOcJhsv4Zdo3oc8T8I0uKEmYoU4ItyxbptjF08enaxg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@vap/core@0.0.12':
@@ -815,10 +773,6 @@ packages:
resolution: {integrity: sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==}
engines: {node: '>=0.10.0'}
- array-buffer-byte-length@1.0.1:
- resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==}
- engines: {node: '>= 0.4'}
-
array-buffer-byte-length@1.0.2:
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
engines: {node: '>= 0.4'}
@@ -871,6 +825,10 @@ packages:
resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==}
engines: {node: '>=8'}
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
async@1.5.2:
resolution: {integrity: sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==}
@@ -892,20 +850,30 @@ packages:
balanced-match@2.0.0:
resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==}
- bare-events@2.5.0:
- resolution: {integrity: sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==}
+ bare-events@2.5.4:
+ resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==}
- bare-fs@2.3.5:
- resolution: {integrity: sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==}
+ bare-fs@4.0.1:
+ resolution: {integrity: sha512-ilQs4fm/l9eMfWY2dY0WCIUplSUp7U0CT1vrqMg1MUdeZl4fypu5UP0XcDBK5WBQPJAKP1b7XEodISmekH/CEg==}
+ engines: {bare: '>=1.7.0'}
- bare-os@2.4.4:
- resolution: {integrity: sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==}
+ bare-os@3.4.0:
+ resolution: {integrity: sha512-9Ous7UlnKbe3fMi7Y+qh0DwAup6A1JkYgPnjvMDNOlmnxNRQvQ/7Nst+OnUQKzk0iAT0m9BisbDVp9gCv8+ETA==}
+ engines: {bare: '>=1.6.0'}
- bare-path@2.1.3:
- resolution: {integrity: sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==}
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
- bare-stream@2.6.1:
- resolution: {integrity: sha512-eVZbtKM+4uehzrsj49KtCy3Pbg7kO1pJ3SKZ1SFrIH/0pnj9scuGGgUlNDf/7qS8WKtGdiJY5Kyhs/ivYPTB/g==}
+ bare-stream@2.6.5:
+ resolution: {integrity: sha512-jSmxKJNJmHySi6hC42zlZnq00rga4jjxcgNZjY9N5WlOe/iOoGRtdwGsHzQv2RlH2KOYMwGUXhf2zXd32BA9RA==}
+ peerDependencies:
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
@@ -934,15 +902,18 @@ packages:
buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- buffer@5.7.1:
- resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
cache-base@1.0.1:
resolution: {integrity: sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==}
engines: {node: '>=0.10.0'}
- call-bind-apply-helpers@1.0.1:
- resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
+ cacheable@1.8.8:
+ resolution: {integrity: sha512-OE1/jlarWxROUIpd0qGBSKFLkNsotY8pt4GeiVErUYh/NUeTNrT+SBksUgllQv4m6a0W/VZsLuiHb88maavqEw==}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
engines: {node: '>= 0.4'}
call-bind@1.0.8:
@@ -964,8 +935,8 @@ packages:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
engines: {node: '>=10'}
- chromium-bidi@0.11.0:
- resolution: {integrity: sha512-6CJWHkNRoyZyjV9Rwv2lYONZf1Xm0IuDyNq97nwSsxxP3wf5Bwy15K5rOvVKMtJ127jJBmxFUanSAOjgFRxgrA==}
+ chromium-bidi@1.3.0:
+ resolution: {integrity: sha512-G3x1bkST13kmbL7+dT/oRkNH/7C4UqG+0YQpmySrzXspyOhYgDNc6lhSGpj3cuexvH25WTENhTYq2Tt9JRXtbw==}
peerDependencies:
devtools-protocol: '*'
@@ -1038,9 +1009,6 @@ packages:
engines: {node: '>=4'}
hasBin: true
- csstype@3.1.2:
- resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==}
-
csstype@3.1.3:
resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==}
@@ -1048,18 +1016,10 @@ packages:
resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==}
engines: {node: '>= 14'}
- data-view-buffer@1.0.1:
- resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==}
- engines: {node: '>= 0.4'}
-
data-view-buffer@1.0.2:
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
engines: {node: '>= 0.4'}
- data-view-byte-length@1.0.1:
- resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==}
- engines: {node: '>= 0.4'}
-
data-view-byte-length@1.0.2:
resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
engines: {node: '>= 0.4'}
@@ -1124,8 +1084,8 @@ packages:
resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==}
engines: {node: '>= 14'}
- devtools-protocol@0.0.1367902:
- resolution: {integrity: sha512-XxtPuC3PGakY6PD7dG66/o8KwJ/LkH2/EKe19Dcw58w53dv4/vSQEkn/SzuyhHE2q4zPgCkxQBxus3VV4ql+Pg==}
+ devtools-protocol@0.0.1402036:
+ resolution: {integrity: sha512-JwAYQgEvm3yD45CHB+RmF5kMbWtXBaOGwuxa87sZogHcLCv8c/IqnThaoQ1y60d7pXWjSKWQphPEc+1rAScVdg==}
diff@7.0.0:
resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==}
@@ -1166,10 +1126,6 @@ packages:
error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
- es-abstract@1.23.6:
- resolution: {integrity: sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==}
- engines: {node: '>= 0.4'}
-
es-abstract@1.23.9:
resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
engines: {node: '>= 0.4'}
@@ -1186,160 +1142,32 @@ packages:
resolution: {integrity: sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==}
engines: {node: '>= 0.4'}
- es-object-atoms@1.0.0:
- resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==}
- engines: {node: '>= 0.4'}
-
- es-set-tostringtag@2.0.3:
- resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==}
+ es-object-atoms@1.1.1:
+ resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
engines: {node: '>= 0.4'}
es-set-tostringtag@2.1.0:
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
engines: {node: '>= 0.4'}
- es-shim-unscopables@1.0.2:
- resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==}
+ es-shim-unscopables@1.1.0:
+ resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
+ engines: {node: '>= 0.4'}
es-to-primitive@1.3.0:
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
engines: {node: '>= 0.4'}
- esbuild-android-64@0.15.18:
- resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [android]
-
- esbuild-android-arm64@0.15.18:
- resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [android]
-
- esbuild-darwin-64@0.15.18:
- resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [darwin]
-
- esbuild-darwin-arm64@0.15.18:
- resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [darwin]
-
- esbuild-freebsd-64@0.15.18:
- resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [freebsd]
-
- esbuild-freebsd-arm64@0.15.18:
- resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [freebsd]
-
- esbuild-linux-32@0.15.18:
- resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [linux]
-
- esbuild-linux-64@0.15.18:
- resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [linux]
-
- esbuild-linux-arm64@0.15.18:
- resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [linux]
-
- esbuild-linux-arm@0.15.18:
- resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==}
- engines: {node: '>=12'}
- cpu: [arm]
- os: [linux]
-
- esbuild-linux-mips64le@0.15.18:
- resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==}
- engines: {node: '>=12'}
- cpu: [mips64el]
- os: [linux]
-
- esbuild-linux-ppc64le@0.15.18:
- resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==}
- engines: {node: '>=12'}
- cpu: [ppc64]
- os: [linux]
-
- esbuild-linux-riscv64@0.15.18:
- resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==}
- engines: {node: '>=12'}
- cpu: [riscv64]
- os: [linux]
-
- esbuild-linux-s390x@0.15.18:
- resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==}
- engines: {node: '>=12'}
- cpu: [s390x]
- os: [linux]
-
- esbuild-netbsd-64@0.15.18:
- resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [netbsd]
-
- esbuild-openbsd-64@0.15.18:
- resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [openbsd]
-
- esbuild-sunos-64@0.15.18:
- resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [sunos]
-
- esbuild-windows-32@0.15.18:
- resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==}
- engines: {node: '>=12'}
- cpu: [ia32]
- os: [win32]
-
- esbuild-windows-64@0.15.18:
- resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==}
- engines: {node: '>=12'}
- cpu: [x64]
- os: [win32]
-
- esbuild-windows-arm64@0.15.18:
- resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==}
- engines: {node: '>=12'}
- cpu: [arm64]
- os: [win32]
-
- esbuild@0.15.18:
- resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==}
- engines: {node: '>=12'}
- hasBin: true
-
- esbuild@0.17.19:
- resolution: {integrity: sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==}
- engines: {node: '>=12'}
- hasBin: true
-
esbuild@0.23.1:
resolution: {integrity: sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==}
engines: {node: '>=18'}
hasBin: true
+ esbuild@0.25.0:
+ resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
escalade@3.2.0:
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
engines: {node: '>=6'}
@@ -1398,14 +1226,14 @@ packages:
peerDependencies:
eslint: ^8.0.0
- eslint-plugin-react@7.37.3:
- resolution: {integrity: sha512-DomWuTQPFYZwF/7c9W2fkKkStqZmBd3uugfqBYLdkZ3Hii23WzZuOLUskGxB8qkSKqftxEeGL1TB2kMhrce0jA==}
+ eslint-plugin-react@7.37.4:
+ resolution: {integrity: sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==}
engines: {node: '>=4'}
peerDependencies:
eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7
- eslint-plugin-simple-header@1.2.1:
- resolution: {integrity: sha512-l9eEOpBkd4T6yVE09WADLVPU6eKHjQ7QjowMChsbYwsge+98NxyIlqvYpQQJWVxakgW7uooFGNVEFdFWzEMcVg==}
+ eslint-plugin-simple-header@1.2.2:
+ resolution: {integrity: sha512-LO4PejdYPraY5GKd9hutst82yAAL21MGIiFbHKIpoPDOWOW8zz3ZaDdQB3vx/yQGjWd5GifyQ/AGfNkr5c9kPw==}
peerDependencies:
eslint: '>=8.41.0'
@@ -1435,8 +1263,8 @@ packages:
resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- eslint@9.17.0:
- resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==}
+ eslint@9.20.1:
+ resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
hasBin: true
peerDependencies:
@@ -1496,8 +1324,8 @@ packages:
fast-fifo@1.3.2:
resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
- fast-glob@3.3.2:
- resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
fast-json-stable-stringify@2.1.0:
@@ -1506,15 +1334,15 @@ packages:
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
- fast-uri@3.0.3:
- resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==}
+ fast-uri@3.0.6:
+ resolution: {integrity: sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw==}
fastest-levenshtein@1.0.16:
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
engines: {node: '>= 4.9.1'}
- fastq@1.17.1:
- resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
+ fastq@1.19.0:
+ resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
fd-slicer@1.1.0:
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
@@ -1522,14 +1350,13 @@ packages:
fflate@0.8.2:
resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==}
+ file-entry-cache@10.0.6:
+ resolution: {integrity: sha512-0wvv16mVo9nN0Md3k7DMjgAPKG/TY4F/gYMBVb/wMThFRJvzrpaqBFqF6km9wf8QfYTN+mNg5aeaBLfy8k35uA==}
+
file-entry-cache@8.0.0:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
- file-entry-cache@9.1.0:
- resolution: {integrity: sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==}
- engines: {node: '>=18'}
-
fill-range@7.1.1:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
@@ -1550,15 +1377,15 @@ packages:
resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
engines: {node: '>=16'}
- flat-cache@5.0.0:
- resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==}
- engines: {node: '>=18'}
+ flat-cache@6.1.6:
+ resolution: {integrity: sha512-F+CKgSwp0pzLx67u+Zy1aCueVWFAHWbXepvXlZ+bWVTaASbm5SyCnSJ80Fp1ePEmS57wU+Bf6cx6525qtMZ4lQ==}
- flatted@3.3.2:
- resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==}
+ flatted@3.3.3:
+ resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==}
- for-each@0.3.3:
- resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
for-in@1.0.2:
resolution: {integrity: sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==}
@@ -1568,15 +1395,10 @@ packages:
resolution: {integrity: sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==}
engines: {node: '>=0.10.0'}
- fs-extra@11.2.0:
- resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==}
+ fs-extra@11.3.0:
+ resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==}
engines: {node: '>=14.14'}
- fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
fsevents@2.3.3:
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
@@ -1585,10 +1407,6 @@ packages:
function-bind@1.1.2:
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
- function.prototype.name@1.1.7:
- resolution: {integrity: sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==}
- engines: {node: '>= 0.4'}
-
function.prototype.name@1.1.8:
resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
engines: {node: '>= 0.4'}
@@ -1600,10 +1418,6 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
- get-intrinsic@1.2.6:
- resolution: {integrity: sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==}
- engines: {node: '>= 0.4'}
-
get-intrinsic@1.2.7:
resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
engines: {node: '>= 0.4'}
@@ -1620,6 +1434,9 @@ packages:
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
engines: {node: '>= 0.4'}
+ get-tsconfig@4.10.0:
+ resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==}
+
get-tsconfig@4.8.1:
resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==}
@@ -1731,14 +1548,17 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
- highlight.js@11.7.0:
- resolution: {integrity: sha512-1rRqesRFhMO/PRF+G86evnyJkCgaZFOI+Z6kdj15TA18funfoqJXvgPCLSf0SWq3SRfg1j3HlDs8o4s3EGq1oQ==}
+ highlight.js@11.11.1:
+ resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==}
engines: {node: '>=12.0.0'}
homedir-polyfill@1.0.3:
resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==}
engines: {node: '>=0.10.0'}
+ hookified@1.7.1:
+ resolution: {integrity: sha512-OXcdHsXeOiD7OJ5zvWj8Oy/6RCdLwntAX+wUrfemNcMGn6sux4xbEHi2QXwqePYhjQ/yvxxq2MvCRirdlHscBw==}
+
html-minifier-terser@7.2.0:
resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==}
engines: {node: ^14.13.1 || >=16.0.0}
@@ -1763,12 +1583,12 @@ packages:
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
engines: {node: '>= 4'}
- ignore@6.0.2:
- resolution: {integrity: sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==}
+ ignore@7.0.3:
+ resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==}
engines: {node: '>= 4'}
- import-fresh@3.3.0:
- resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
imurmurhash@0.1.4:
@@ -1801,16 +1621,16 @@ packages:
is-arrayish@0.2.1:
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
- is-async-function@2.0.0:
- resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
engines: {node: '>= 0.4'}
is-bigint@1.1.0:
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
engines: {node: '>= 0.4'}
- is-boolean-object@1.2.1:
- resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==}
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
engines: {node: '>= 0.4'}
is-buffer@1.1.6:
@@ -1868,8 +1688,8 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
- is-generator-function@1.0.10:
- resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
+ is-generator-function@1.1.0:
+ resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
engines: {node: '>= 0.4'}
is-glob@4.0.3:
@@ -1880,10 +1700,6 @@ packages:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
- is-negative-zero@2.0.3:
- resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
- engines: {node: '>= 0.4'}
-
is-number-object@1.1.1:
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
engines: {node: '>= 0.4'}
@@ -1932,8 +1748,8 @@ packages:
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
engines: {node: '>= 0.4'}
- is-weakref@1.1.0:
- resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==}
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
engines: {node: '>= 0.4'}
is-weakset@2.0.4:
@@ -2014,6 +1830,9 @@ packages:
keyv@4.5.4:
resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+ keyv@5.2.3:
+ resolution: {integrity: sha512-AGKecUfzrowabUv0bH1RIR5Vf7w+l4S3xtQAypKaUpTdIR1EbrAcTxHCrpo9Q+IWeUlFE2palRtgIQcgm+PQJw==}
+
kind-of@3.2.2:
resolution: {integrity: sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==}
engines: {node: '>=0.10.0'}
@@ -2121,8 +1940,8 @@ packages:
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
hasBin: true
- nanoid@5.0.9:
- resolution: {integrity: sha512-Aooyr6MXU6HpvvWXKoVoXwKMs/KyVakWwg7xQfv5/S/RIgJMy0Ifa45H9qqYy7pTCszrHzP21Uk4PZq2HpEM8Q==}
+ nanoid@5.1.0:
+ resolution: {integrity: sha512-zDAl/llz8Ue/EblwSYwdxGBYfj46IM1dhjVi8dyp9LQffoIGxJEAHj2oeZ4uNcgycSRcQ83CnfcZqEJzVDLcDw==}
engines: {node: ^18 || >=20}
hasBin: true
@@ -2152,8 +1971,8 @@ packages:
resolution: {integrity: sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==}
engines: {node: '>=0.10.0'}
- object-inspect@1.13.3:
- resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
object-keys@1.1.1:
@@ -2269,8 +2088,8 @@ packages:
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
engines: {node: '>=12'}
- possible-typed-array-names@1.0.0:
- resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
engines: {node: '>= 0.4'}
postcss-resolve-nested-selector@0.1.6:
@@ -2282,15 +2101,15 @@ packages:
peerDependencies:
postcss: ^8.4.31
- postcss-selector-parser@7.0.0:
- resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==}
+ postcss-selector-parser@7.1.0:
+ resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==}
engines: {node: '>=4'}
postcss-value-parser@4.2.0:
resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
- postcss@8.4.49:
- resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
+ postcss@8.5.2:
+ resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==}
engines: {node: ^10 || ^12 || >=14}
prelude-ls@1.2.1:
@@ -2318,8 +2137,8 @@ packages:
resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
engines: {node: '>=6'}
- puppeteer-core@23.11.1:
- resolution: {integrity: sha512-3HZ2/7hdDKZvZQ7dhhITOUg4/wOrDRjyK2ZBllRB0ZCOi9u0cwq1ACHDjBB+nX+7+kltHjQvBRdeY7+W0T+7Gg==}
+ puppeteer-core@24.2.1:
+ resolution: {integrity: sha512-bCypUh3WXzETafv1TCFAjIUnI8BiQ/d+XvEfEXDLcIMm9CAvROqnBmbt79yBjwasoDZsgfXnUmIJU7Y27AalVQ==}
engines: {node: '>=18'}
q@1.5.1:
@@ -2333,24 +2152,17 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
- queue-tick@1.0.1:
- resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
-
react-is@16.13.1:
resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
- reflect.getprototypeof@1.0.9:
- resolution: {integrity: sha512-r0Ay04Snci87djAsI4U+WNRcSw5S4pOH7qFjd/veA5gC7TbqESR3tcj28ia95L/fYUDw11JKP7uqUKUAfVvV5Q==}
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
regex-not@1.0.2:
resolution: {integrity: sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==}
engines: {node: '>=0.10.0'}
- regexp.prototype.flags@1.5.3:
- resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==}
- engines: {node: '>= 0.4'}
-
regexp.prototype.flags@1.5.4:
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
engines: {node: '>= 0.4'}
@@ -2430,6 +2242,11 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ semver@7.7.1:
+ resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
set-function-length@1.2.2:
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
engines: {node: '>= 0.4'}
@@ -2494,8 +2311,8 @@ packages:
resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==}
engines: {node: '>= 14'}
- socks@2.8.3:
- resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
+ socks@2.8.4:
+ resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
source-map-js@1.2.1:
@@ -2528,15 +2345,15 @@ packages:
sprintf-js@1.1.3:
resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==}
- standalone-electron-types@1.0.0:
- resolution: {integrity: sha512-0HOi/tlTz3mjWhsAz4uRbpQcHMZ+ifj1JzWW9nugykOHClBBG77ps8QinrzX1eow4Iw2pnC+RFaSYRgufF4BOg==}
+ standalone-electron-types@34.2.0:
+ resolution: {integrity: sha512-+BIrNe0TdZBBBRS3G/F7cPbuBipSZylSjSrJu9+sjw84+vz36a5oZ7l9NeH7aXgMWmPzPZKsTm+K0nOIvhENJQ==}
static-extend@0.1.2:
resolution: {integrity: sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==}
engines: {node: '>=0.10.0'}
- streamx@2.21.1:
- resolution: {integrity: sha512-PhP9wUnFLa+91CPy3N6tiQsK+gnYyUNuk15S3YG/zjYE7RuPeCjJngqnzpC31ow0lzBHQ+QGO4cNJnd0djYUsw==}
+ streamx@2.22.0:
+ resolution: {integrity: sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw==}
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
@@ -2573,20 +2390,20 @@ packages:
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
engines: {node: '>=8'}
- stylelint-config-recommended@14.0.1:
- resolution: {integrity: sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==}
+ stylelint-config-recommended@15.0.0:
+ resolution: {integrity: sha512-9LejMFsat7L+NXttdHdTq94byn25TD+82bzGRiV1Pgasl99pWnwipXS5DguTpp3nP1XjvLXVnEJIuYBfsRjRkA==}
engines: {node: '>=18.12.0'}
peerDependencies:
- stylelint: ^16.1.0
+ stylelint: ^16.13.0
- stylelint-config-standard@36.0.1:
- resolution: {integrity: sha512-8aX8mTzJ6cuO8mmD5yon61CWuIM4UD8Q5aBcWKGSf6kg+EC3uhB+iOywpTK4ca6ZL7B49en8yanOFtUW0qNzyw==}
+ stylelint-config-standard@37.0.0:
+ resolution: {integrity: sha512-+6eBlbSTrOn/il2RlV0zYGQwRTkr+WtzuVSs1reaWGObxnxLpbcspCUYajVQHonVfxVw2U+h42azGhrBvcg8OA==}
engines: {node: '>=18.12.0'}
peerDependencies:
- stylelint: ^16.1.0
+ stylelint: ^16.13.0
- stylelint@16.12.0:
- resolution: {integrity: sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==}
+ stylelint@16.14.1:
+ resolution: {integrity: sha512-oqCL7AC3786oTax35T/nuLL8p2C3k/8rHKAooezrPGRvUX0wX+qqs5kMWh5YYT4PHQgVDobHT4tw55WgpYG6Sw==}
engines: {node: '>=18.12.0'}
hasBin: true
@@ -2594,8 +2411,8 @@ packages:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
engines: {node: '>=8'}
- supports-hyperlinks@3.1.0:
- resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==}
+ supports-hyperlinks@3.2.0:
+ resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==}
engines: {node: '>=14.18'}
supports-preserve-symlinks-flag@1.0.0:
@@ -2609,8 +2426,8 @@ packages:
resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==}
engines: {node: '>=10.0.0'}
- tar-fs@3.0.6:
- resolution: {integrity: sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==}
+ tar-fs@3.0.8:
+ resolution: {integrity: sha512-ZoROL70jptorGAlgAYiLoBLItEKw/fUxg9BSYK/dF/GAGYFJOJJJMvjPAKDJraCXFwadD456FCuvLWgfhMsPwg==}
tar-stream@3.1.7:
resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==}
@@ -2623,9 +2440,6 @@ packages:
text-decoder@1.2.3:
resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==}
- through@2.3.8:
- resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==}
-
to-object-path@0.3.0:
resolution: {integrity: sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==}
engines: {node: '>=0.10.0'}
@@ -2638,18 +2452,18 @@ packages:
resolution: {integrity: sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==}
engines: {node: '>=0.10.0'}
- ts-api-utils@1.4.3:
- resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==}
- engines: {node: '>=16'}
+ ts-api-utils@2.0.1:
+ resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==}
+ engines: {node: '>=18.12'}
peerDependencies:
- typescript: '>=4.2.0'
+ typescript: '>=4.8.4'
ts-patch@3.3.0:
resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==}
hasBin: true
- ts-pattern@5.6.0:
- resolution: {integrity: sha512-SL8u60X5+LoEy9tmQHWCdPc2hhb2pKI6I1tU5Jue3v8+iRqZdcT3mWPwKKJy1fMfky6uha82c8ByHAE8PMhKHw==}
+ ts-pattern@5.6.2:
+ resolution: {integrity: sha512-d4IxJUXROL5NCa3amvMg6VQW2HVtZYmUTPfvVtO7zJWGYLJ+mry9v2OmYm+z67aniQoQ8/yFNadiEwtNS9qQiw==}
tsconfig-paths@3.15.0:
resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==}
@@ -2657,10 +2471,6 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
- tsx@3.12.7:
- resolution: {integrity: sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==}
- hasBin: true
-
tsx@4.19.2:
resolution: {integrity: sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==}
engines: {node: '>=18.0.0'}
@@ -2670,12 +2480,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- type-fest@3.9.0:
- resolution: {integrity: sha512-hR8JP2e8UiH7SME5JZjsobBlEiatFoxpzCP+R3ZeCo7kAaG1jXQE5X/buLzogM6GJu8le9Y4OcfNuIQX0rZskA==}
- engines: {node: '>=14.16'}
-
- type-fest@4.31.0:
- resolution: {integrity: sha512-yCxltHW07Nkhv/1F6wWBr8kz+5BGMfP+RbRSYFnegVb0qV/UMT0G0ElBloPVerqn4M2ZV80Ir1FtCcYv1cT6vQ==}
+ type-fest@4.35.0:
+ resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==}
engines: {node: '>=16'}
typed-array-buffer@1.0.3:
@@ -2697,8 +2503,8 @@ packages:
typed-query-selector@2.12.0:
resolution: {integrity: sha512-SbklCd1F0EiZOyPiW192rrHZzZ5sBijB6xM+cpmrwDqObvdtunOHHIk9fCGsoK5JVIYXoyEp4iEdE3upFH3PAg==}
- typescript-eslint@8.19.0:
- resolution: {integrity: sha512-Ni8sUkVWYK4KAcTtPjQ/UTiRk6jcsuDhPpxULapUDi8A/l8TSBk+t1GtJA1RsCzIJg0q6+J7bf35AwQigENWRQ==}
+ typescript-eslint@8.24.1:
+ resolution: {integrity: sha512-cw3rEdzDqBs70TIcb0Gdzbt6h11BSs2pS0yaq7hDWDBtCCSei1pPSUXE9qUdQ/Wm9NgFg8mKtMt1b8fTHIl1jA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
eslint: ^8.57.0 || ^9.0.0
@@ -2709,8 +2515,8 @@ packages:
peerDependencies:
typescript: '>=3.6.5'
- typescript@5.7.2:
- resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
+ typescript@5.7.3:
+ resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
engines: {node: '>=14.17'}
hasBin: true
@@ -2718,12 +2524,6 @@ packages:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
- unbzip2-stream@1.4.3:
- resolution: {integrity: sha512-mlExGW4w71ebDJviH16lQLtZS32VKqsSfk80GCfUlwT/4/hNRFsoscrF/c++9xinkMzECL1uL9DDwXqFWkruPg==}
-
- undici-types@5.26.5:
- resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
-
undici-types@6.20.0:
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
@@ -2753,8 +2553,8 @@ packages:
util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- virtual-merge@1.0.1:
- resolution: {integrity: sha512-h7rzV6n5fZJbDu2lP4iu+IOtsZ00uqECFUxFePK1uY0pz/S5B7FNDJpmdDVfyGL7poyJECEHfTaIpJaknNkU0Q==}
+ virtual-merge@1.0.2:
+ resolution: {integrity: sha512-5hxklfyTUWMKYaLuoriOf9Xqmt3oWtfAiZw0M3ITeeNmVdKhcnys7rYyfBHqvy/hlELP0hQ4u7o1r5HBXbm6sg==}
vscode-oniguruma@1.7.0:
resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
@@ -2841,8 +2641,8 @@ packages:
zip-local@0.3.5:
resolution: {integrity: sha512-GRV3D5TJY+/PqyeRm5CYBs7xVrKTKzljBoEXvocZu0HJ7tPEcgpSOYa2zFIsCZWgKWMuc4U3yMFgFkERGFIB9w==}
- zod@3.23.8:
- resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+ zod@3.24.2:
+ resolution: {integrity: sha512-lY7CDW43ECgW9u1TcT3IoXHflywfVqDYze4waEz812jR/bZ8FHDsl7pFQoSZTz5N+2NqRXs8GBwnAwo3ZNxqhQ==}
snapshots:
@@ -2865,187 +2665,179 @@ snapshots:
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
'@csstools/css-tokenizer': 3.0.3
- '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.0.0)':
+ '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)':
dependencies:
- postcss-selector-parser: 7.0.0
+ postcss-selector-parser: 7.1.0
'@dual-bundle/import-meta-resolve@4.1.0': {}
- '@esbuild-kit/cjs-loader@2.4.2':
- dependencies:
- '@esbuild-kit/core-utils': 3.1.0
- get-tsconfig: 4.8.1
-
- '@esbuild-kit/core-utils@3.1.0':
- dependencies:
- esbuild: 0.17.19
- source-map-support: 0.5.21
-
- '@esbuild-kit/esm-loader@2.5.5':
- dependencies:
- '@esbuild-kit/core-utils': 3.1.0
- get-tsconfig: 4.8.1
-
'@esbuild/aix-ppc64@0.23.1':
optional: true
- '@esbuild/android-arm64@0.17.19':
+ '@esbuild/aix-ppc64@0.25.0':
optional: true
'@esbuild/android-arm64@0.23.1':
optional: true
- '@esbuild/android-arm@0.15.18':
- optional: true
-
- '@esbuild/android-arm@0.17.19':
+ '@esbuild/android-arm64@0.25.0':
optional: true
'@esbuild/android-arm@0.23.1':
optional: true
- '@esbuild/android-x64@0.17.19':
+ '@esbuild/android-arm@0.25.0':
optional: true
'@esbuild/android-x64@0.23.1':
optional: true
- '@esbuild/darwin-arm64@0.17.19':
+ '@esbuild/android-x64@0.25.0':
optional: true
'@esbuild/darwin-arm64@0.23.1':
optional: true
- '@esbuild/darwin-x64@0.17.19':
+ '@esbuild/darwin-arm64@0.25.0':
optional: true
'@esbuild/darwin-x64@0.23.1':
optional: true
- '@esbuild/freebsd-arm64@0.17.19':
+ '@esbuild/darwin-x64@0.25.0':
optional: true
'@esbuild/freebsd-arm64@0.23.1':
optional: true
- '@esbuild/freebsd-x64@0.17.19':
+ '@esbuild/freebsd-arm64@0.25.0':
optional: true
'@esbuild/freebsd-x64@0.23.1':
optional: true
- '@esbuild/linux-arm64@0.17.19':
+ '@esbuild/freebsd-x64@0.25.0':
optional: true
'@esbuild/linux-arm64@0.23.1':
optional: true
- '@esbuild/linux-arm@0.17.19':
+ '@esbuild/linux-arm64@0.25.0':
optional: true
'@esbuild/linux-arm@0.23.1':
optional: true
- '@esbuild/linux-ia32@0.17.19':
+ '@esbuild/linux-arm@0.25.0':
optional: true
'@esbuild/linux-ia32@0.23.1':
optional: true
- '@esbuild/linux-loong64@0.15.18':
- optional: true
-
- '@esbuild/linux-loong64@0.17.19':
+ '@esbuild/linux-ia32@0.25.0':
optional: true
'@esbuild/linux-loong64@0.23.1':
optional: true
- '@esbuild/linux-mips64el@0.17.19':
+ '@esbuild/linux-loong64@0.25.0':
optional: true
'@esbuild/linux-mips64el@0.23.1':
optional: true
- '@esbuild/linux-ppc64@0.17.19':
+ '@esbuild/linux-mips64el@0.25.0':
optional: true
'@esbuild/linux-ppc64@0.23.1':
optional: true
- '@esbuild/linux-riscv64@0.17.19':
+ '@esbuild/linux-ppc64@0.25.0':
optional: true
'@esbuild/linux-riscv64@0.23.1':
optional: true
- '@esbuild/linux-s390x@0.17.19':
+ '@esbuild/linux-riscv64@0.25.0':
optional: true
'@esbuild/linux-s390x@0.23.1':
optional: true
- '@esbuild/linux-x64@0.17.19':
+ '@esbuild/linux-s390x@0.25.0':
optional: true
'@esbuild/linux-x64@0.23.1':
optional: true
- '@esbuild/netbsd-x64@0.17.19':
+ '@esbuild/linux-x64@0.25.0':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.25.0':
optional: true
'@esbuild/netbsd-x64@0.23.1':
optional: true
+ '@esbuild/netbsd-x64@0.25.0':
+ optional: true
+
'@esbuild/openbsd-arm64@0.23.1':
optional: true
- '@esbuild/openbsd-x64@0.17.19':
+ '@esbuild/openbsd-arm64@0.25.0':
optional: true
'@esbuild/openbsd-x64@0.23.1':
optional: true
- '@esbuild/sunos-x64@0.17.19':
+ '@esbuild/openbsd-x64@0.25.0':
optional: true
'@esbuild/sunos-x64@0.23.1':
optional: true
- '@esbuild/win32-arm64@0.17.19':
+ '@esbuild/sunos-x64@0.25.0':
optional: true
'@esbuild/win32-arm64@0.23.1':
optional: true
- '@esbuild/win32-ia32@0.17.19':
+ '@esbuild/win32-arm64@0.25.0':
optional: true
'@esbuild/win32-ia32@0.23.1':
optional: true
- '@esbuild/win32-x64@0.17.19':
+ '@esbuild/win32-ia32@0.25.0':
optional: true
'@esbuild/win32-x64@0.23.1':
optional: true
- '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))':
+ '@esbuild/win32-x64@0.25.0':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))':
dependencies:
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.12.1': {}
- '@eslint/config-array@0.19.1':
+ '@eslint/config-array@0.19.2':
dependencies:
- '@eslint/object-schema': 2.1.5
+ '@eslint/object-schema': 2.1.6
debug: 4.4.0
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
- '@eslint/core@0.9.1':
+ '@eslint/core@0.10.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/core@0.11.0':
dependencies:
'@types/json-schema': 7.0.15
@@ -3056,19 +2848,20 @@ snapshots:
espree: 10.3.0
globals: 14.0.0
ignore: 5.3.2
- import-fresh: 3.3.0
+ import-fresh: 3.3.1
js-yaml: 4.1.0
minimatch: 3.1.2
strip-json-comments: 3.1.1
transitivePeerDependencies:
- supports-color
- '@eslint/js@9.17.0': {}
+ '@eslint/js@9.20.0': {}
- '@eslint/object-schema@2.1.5': {}
+ '@eslint/object-schema@2.1.6': {}
- '@eslint/plugin-kit@0.2.4':
+ '@eslint/plugin-kit@0.2.5':
dependencies:
+ '@eslint/core': 0.10.0
levn: 0.4.1
'@humanfs/core@0.19.1': {}
@@ -3108,6 +2901,10 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.0
+ '@keyv/serialize@1.0.3':
+ dependencies:
+ buffer: 6.0.3
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -3118,29 +2915,27 @@ snapshots:
'@nodelib/fs.walk@1.2.8':
dependencies:
'@nodelib/fs.scandir': 2.1.5
- fastq: 1.17.1
+ fastq: 1.19.0
- '@puppeteer/browsers@2.6.1':
+ '@puppeteer/browsers@2.7.1':
dependencies:
debug: 4.4.0
extract-zip: 2.0.1
progress: 2.0.3
proxy-agent: 6.5.0
- semver: 7.6.3
- tar-fs: 3.0.6
- unbzip2-stream: 1.4.3
+ semver: 7.7.1
+ tar-fs: 3.0.8
yargs: 17.7.2
transitivePeerDependencies:
+ - bare-buffer
- supports-color
'@rtsao/scc@1.1.0': {}
- '@sapphi-red/web-noise-suppressor@0.3.5': {}
-
- '@stylistic/eslint-plugin@2.12.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)':
+ '@stylistic/eslint-plugin@4.0.0(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/utils': 8.18.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
eslint-visitor-keys: 4.2.0
espree: 10.3.0
estraverse: 5.3.0
@@ -3151,12 +2946,12 @@ snapshots:
'@tootallnate/quickjs-emscripten@0.23.0': {}
- '@types/chrome@0.0.287':
+ '@types/chrome@0.0.304':
dependencies:
'@types/filesystem': 0.0.36
'@types/har-format': 1.2.16
- '@types/diff@6.0.0': {}
+ '@types/diff@7.0.1': {}
'@types/estree@1.0.6': {}
@@ -3169,7 +2964,7 @@ snapshots:
'@types/fs-extra@11.0.4':
dependencies:
'@types/jsonfile': 6.1.4
- '@types/node': 18.16.3
+ '@types/node': 22.13.4
'@types/har-format@1.2.16': {}
@@ -3179,172 +2974,122 @@ snapshots:
'@types/jsonfile@6.1.4':
dependencies:
- '@types/node': 18.16.3
+ '@types/node': 22.13.4
- '@types/lodash@4.14.194': {}
+ '@types/lodash@4.17.15': {}
- '@types/lodash@4.17.14': {}
-
- '@types/node@18.16.3': {}
-
- '@types/node@18.19.69':
- dependencies:
- undici-types: 5.26.5
-
- '@types/node@22.10.5':
+ '@types/node@22.13.4':
dependencies:
undici-types: 6.20.0
'@types/prop-types@15.7.14': {}
- '@types/prop-types@15.7.5': {}
-
- '@types/react-dom@18.2.1':
+ '@types/react-dom@18.3.1':
dependencies:
- '@types/react': 18.2.0
+ '@types/react': 18.3.1
- '@types/react-dom@19.0.2(@types/react@19.0.2)':
+ '@types/react-dom@19.0.4(@types/react@19.0.10)':
dependencies:
- '@types/react': 19.0.2
+ '@types/react': 19.0.10
'@types/react@17.0.2':
dependencies:
'@types/prop-types': 15.7.14
csstype: 3.1.3
- '@types/react@18.2.0':
+ '@types/react@18.3.1':
dependencies:
- '@types/prop-types': 15.7.5
- '@types/scheduler': 0.16.3
- csstype: 3.1.2
+ '@types/prop-types': 15.7.14
+ csstype: 3.1.3
- '@types/react@19.0.2':
+ '@types/react@19.0.10':
dependencies:
csstype: 3.1.3
- '@types/scheduler@0.16.3': {}
-
'@types/yauzl@2.10.3':
dependencies:
- '@types/node': 22.10.5
+ '@types/node': 22.13.4
optional: true
- '@types/yazl@2.4.5':
+ '@types/yazl@2.4.6':
dependencies:
- '@types/node': 22.10.5
+ '@types/node': 22.13.4
- '@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)':
+ '@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)':
dependencies:
'@eslint-community/regexpp': 4.12.1
- '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- '@typescript-eslint/scope-manager': 8.19.0
- '@typescript-eslint/type-utils': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- '@typescript-eslint/visitor-keys': 8.19.0
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ '@typescript-eslint/scope-manager': 8.24.1
+ '@typescript-eslint/type-utils': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.24.1
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
graphemer: 1.4.0
ignore: 5.3.2
natural-compare: 1.4.0
- ts-api-utils: 1.4.3(typescript@5.7.2)
- typescript: 5.7.2
+ ts-api-utils: 2.0.1(typescript@5.7.3)
+ typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)':
+ '@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.19.0
- '@typescript-eslint/types': 8.19.0
- '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
- '@typescript-eslint/visitor-keys': 8.19.0
+ '@typescript-eslint/scope-manager': 8.24.1
+ '@typescript-eslint/types': 8.24.1
+ '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
+ '@typescript-eslint/visitor-keys': 8.24.1
debug: 4.4.0
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
- typescript: 5.7.2
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
+ typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.18.1':
+ '@typescript-eslint/scope-manager@8.24.1':
dependencies:
- '@typescript-eslint/types': 8.18.1
- '@typescript-eslint/visitor-keys': 8.18.1
+ '@typescript-eslint/types': 8.24.1
+ '@typescript-eslint/visitor-keys': 8.24.1
- '@typescript-eslint/scope-manager@8.19.0':
+ '@typescript-eslint/type-utils@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/types': 8.19.0
- '@typescript-eslint/visitor-keys': 8.19.0
-
- '@typescript-eslint/type-utils@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)':
- dependencies:
- '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
- '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
+ '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
debug: 4.4.0
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
- ts-api-utils: 1.4.3(typescript@5.7.2)
- typescript: 5.7.2
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
+ ts-api-utils: 2.0.1(typescript@5.7.3)
+ typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.18.1': {}
+ '@typescript-eslint/types@8.24.1': {}
- '@typescript-eslint/types@8.19.0': {}
-
- '@typescript-eslint/typescript-estree@8.18.1(typescript@5.7.2)':
+ '@typescript-eslint/typescript-estree@8.24.1(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/types': 8.18.1
- '@typescript-eslint/visitor-keys': 8.18.1
+ '@typescript-eslint/types': 8.24.1
+ '@typescript-eslint/visitor-keys': 8.24.1
debug: 4.4.0
- fast-glob: 3.3.2
+ fast-glob: 3.3.3
is-glob: 4.0.3
minimatch: 9.0.5
- semver: 7.6.3
- ts-api-utils: 1.4.3(typescript@5.7.2)
- typescript: 5.7.2
+ semver: 7.7.1
+ ts-api-utils: 2.0.1(typescript@5.7.3)
+ typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/typescript-estree@8.19.0(typescript@5.7.2)':
+ '@typescript-eslint/utils@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)':
dependencies:
- '@typescript-eslint/types': 8.19.0
- '@typescript-eslint/visitor-keys': 8.19.0
- debug: 4.4.0
- fast-glob: 3.3.2
- is-glob: 4.0.3
- minimatch: 9.0.5
- semver: 7.6.3
- ts-api-utils: 1.4.3(typescript@5.7.2)
- typescript: 5.7.2
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
+ '@typescript-eslint/scope-manager': 8.24.1
+ '@typescript-eslint/types': 8.24.1
+ '@typescript-eslint/typescript-estree': 8.24.1(typescript@5.7.3)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
+ typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.18.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)':
+ '@typescript-eslint/visitor-keys@8.24.1':
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
- '@typescript-eslint/scope-manager': 8.18.1
- '@typescript-eslint/types': 8.18.1
- '@typescript-eslint/typescript-estree': 8.18.1(typescript@5.7.2)
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
- typescript: 5.7.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/utils@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)':
- dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
- '@typescript-eslint/scope-manager': 8.19.0
- '@typescript-eslint/types': 8.19.0
- '@typescript-eslint/typescript-estree': 8.19.0(typescript@5.7.2)
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
- typescript: 5.7.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/visitor-keys@8.18.1':
- dependencies:
- '@typescript-eslint/types': 8.18.1
- eslint-visitor-keys: 4.2.0
-
- '@typescript-eslint/visitor-keys@8.19.0':
- dependencies:
- '@typescript-eslint/types': 8.19.0
+ '@typescript-eslint/types': 8.24.1
eslint-visitor-keys: 4.2.0
'@vap/core@0.0.12':
@@ -3375,7 +3120,7 @@ snapshots:
ajv@8.17.1:
dependencies:
fast-deep-equal: 3.1.3
- fast-uri: 3.0.3
+ fast-uri: 3.0.6
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
@@ -3391,11 +3136,6 @@ snapshots:
arr-union@3.1.0: {}
- array-buffer-byte-length@1.0.1:
- dependencies:
- call-bind: 1.0.8
- is-array-buffer: 3.0.5
-
array-buffer-byte-length@1.0.2:
dependencies:
call-bound: 1.0.3
@@ -3405,9 +3145,9 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.6
- es-object-atoms: 1.0.0
- get-intrinsic: 1.2.6
+ es-abstract: 1.23.9
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.2.7
is-string: 1.1.1
array-union@2.1.0: {}
@@ -3418,10 +3158,10 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.6
+ es-abstract: 1.23.9
es-errors: 1.3.0
- es-object-atoms: 1.0.0
- es-shim-unscopables: 1.0.2
+ es-object-atoms: 1.1.1
+ es-shim-unscopables: 1.1.0
array.prototype.findlastindex@1.2.5:
dependencies:
@@ -3429,39 +3169,39 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
- es-object-atoms: 1.0.0
- es-shim-unscopables: 1.0.2
+ es-object-atoms: 1.1.1
+ es-shim-unscopables: 1.1.0
array.prototype.flat@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.6
- es-shim-unscopables: 1.0.2
+ es-abstract: 1.23.9
+ es-shim-unscopables: 1.1.0
array.prototype.flatmap@1.3.3:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.6
- es-shim-unscopables: 1.0.2
+ es-abstract: 1.23.9
+ es-shim-unscopables: 1.1.0
array.prototype.tosorted@1.1.4:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.6
+ es-abstract: 1.23.9
es-errors: 1.3.0
- es-shim-unscopables: 1.0.2
+ es-shim-unscopables: 1.1.0
arraybuffer.prototype.slice@1.0.4:
dependencies:
- array-buffer-byte-length: 1.0.1
+ array-buffer-byte-length: 1.0.2
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.6
+ es-abstract: 1.23.9
es-errors: 1.3.0
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
is-array-buffer: 3.0.5
assign-symbols@1.0.0: {}
@@ -3472,13 +3212,15 @@ snapshots:
astral-regex@2.0.0: {}
+ async-function@1.0.0: {}
+
async@1.5.2: {}
atob@2.1.2: {}
available-typed-arrays@1.0.7:
dependencies:
- possible-typed-array-names: 1.0.0
+ possible-typed-array-names: 1.1.0
b4a@1.6.7: {}
@@ -3486,27 +3228,31 @@ snapshots:
balanced-match@2.0.0: {}
- bare-events@2.5.0:
+ bare-events@2.5.4:
optional: true
- bare-fs@2.3.5:
+ bare-fs@4.0.1:
dependencies:
- bare-events: 2.5.0
- bare-path: 2.1.3
- bare-stream: 2.6.1
+ bare-events: 2.5.4
+ bare-path: 3.0.0
+ bare-stream: 2.6.5(bare-events@2.5.4)
+ transitivePeerDependencies:
+ - bare-buffer
optional: true
- bare-os@2.4.4:
+ bare-os@3.4.0:
optional: true
- bare-path@2.1.3:
+ bare-path@3.0.0:
dependencies:
- bare-os: 2.4.4
+ bare-os: 3.4.0
optional: true
- bare-stream@2.6.1:
+ bare-stream@2.6.5(bare-events@2.5.4):
dependencies:
- streamx: 2.21.1
+ streamx: 2.22.0
+ optionalDependencies:
+ bare-events: 2.5.4
optional: true
base64-js@1.5.1: {}
@@ -3540,7 +3286,7 @@ snapshots:
buffer-from@1.1.2: {}
- buffer@5.7.1:
+ buffer@6.0.3:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
@@ -3557,21 +3303,26 @@ snapshots:
union-value: 1.0.1
unset-value: 1.0.0
- call-bind-apply-helpers@1.0.1:
+ cacheable@1.8.8:
+ dependencies:
+ hookified: 1.7.1
+ keyv: 5.2.3
+
+ call-bind-apply-helpers@1.0.2:
dependencies:
es-errors: 1.3.0
function-bind: 1.1.2
call-bind@1.0.8:
dependencies:
- call-bind-apply-helpers: 1.0.1
+ call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
set-function-length: 1.2.2
call-bound@1.0.3:
dependencies:
- call-bind-apply-helpers: 1.0.1
+ call-bind-apply-helpers: 1.0.2
get-intrinsic: 1.2.7
callsites@3.1.0: {}
@@ -3586,11 +3337,11 @@ snapshots:
ansi-styles: 4.3.0
supports-color: 7.2.0
- chromium-bidi@0.11.0(devtools-protocol@0.0.1367902):
+ chromium-bidi@1.3.0(devtools-protocol@0.0.1402036):
dependencies:
- devtools-protocol: 0.0.1367902
+ devtools-protocol: 0.0.1402036
mitt: 3.0.1
- zod: 3.23.8
+ zod: 3.24.2
class-utils@0.3.6:
dependencies:
@@ -3632,14 +3383,14 @@ snapshots:
copy-descriptor@0.1.1: {}
- cosmiconfig@9.0.0(typescript@5.7.2):
+ cosmiconfig@9.0.0(typescript@5.7.3):
dependencies:
env-paths: 2.2.1
- import-fresh: 3.3.0
+ import-fresh: 3.3.1
js-yaml: 4.1.0
parse-json: 5.2.0
optionalDependencies:
- typescript: 5.7.2
+ typescript: 5.7.3
cross-spawn@7.0.6:
dependencies:
@@ -3656,30 +3407,16 @@ snapshots:
cssesc@3.0.0: {}
- csstype@3.1.2: {}
-
csstype@3.1.3: {}
data-uri-to-buffer@6.0.2: {}
- data-view-buffer@1.0.1:
- dependencies:
- call-bind: 1.0.8
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
data-view-buffer@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
is-data-view: 1.0.2
- data-view-byte-length@1.0.1:
- dependencies:
- call-bind: 1.0.8
- es-errors: 1.3.0
- is-data-view: 1.0.2
-
data-view-byte-length@1.0.2:
dependencies:
call-bound: 1.0.3
@@ -3739,7 +3476,7 @@ snapshots:
escodegen: 2.1.0
esprima: 4.0.1
- devtools-protocol@0.0.1367902: {}
+ devtools-protocol@0.0.1402036: {}
diff@7.0.0: {}
@@ -3763,7 +3500,7 @@ snapshots:
dunder-proto@1.0.1:
dependencies:
- call-bind-apply-helpers: 1.0.1
+ call-bind-apply-helpers: 1.0.2
es-errors: 1.3.0
gopd: 1.2.0
@@ -3781,57 +3518,6 @@ snapshots:
dependencies:
is-arrayish: 0.2.1
- es-abstract@1.23.6:
- dependencies:
- array-buffer-byte-length: 1.0.1
- arraybuffer.prototype.slice: 1.0.4
- available-typed-arrays: 1.0.7
- call-bind: 1.0.8
- call-bound: 1.0.3
- data-view-buffer: 1.0.1
- data-view-byte-length: 1.0.1
- data-view-byte-offset: 1.0.1
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.0.0
- es-set-tostringtag: 2.0.3
- es-to-primitive: 1.3.0
- function.prototype.name: 1.1.7
- get-intrinsic: 1.2.6
- get-symbol-description: 1.1.0
- globalthis: 1.0.4
- gopd: 1.2.0
- has-property-descriptors: 1.0.2
- has-proto: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- internal-slot: 1.1.0
- is-array-buffer: 3.0.5
- is-callable: 1.2.7
- is-data-view: 1.0.2
- is-negative-zero: 2.0.3
- is-regex: 1.2.1
- is-shared-array-buffer: 1.0.4
- is-string: 1.1.1
- is-typed-array: 1.1.15
- is-weakref: 1.1.0
- math-intrinsics: 1.1.0
- object-inspect: 1.13.3
- object-keys: 1.1.1
- object.assign: 4.1.7
- regexp.prototype.flags: 1.5.3
- safe-array-concat: 1.1.3
- safe-regex-test: 1.1.0
- string.prototype.trim: 1.2.10
- string.prototype.trimend: 1.0.9
- string.prototype.trimstart: 1.0.8
- typed-array-buffer: 1.0.3
- typed-array-byte-length: 1.0.3
- typed-array-byte-offset: 1.0.4
- typed-array-length: 1.0.7
- unbox-primitive: 1.1.0
- which-typed-array: 1.1.18
-
es-abstract@1.23.9:
dependencies:
array-buffer-byte-length: 1.0.2
@@ -3844,7 +3530,7 @@ snapshots:
data-view-byte-offset: 1.0.1
es-define-property: 1.0.1
es-errors: 1.3.0
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
es-set-tostringtag: 2.1.0
es-to-primitive: 1.3.0
function.prototype.name: 1.1.8
@@ -3865,9 +3551,9 @@ snapshots:
is-shared-array-buffer: 1.0.4
is-string: 1.1.1
is-typed-array: 1.1.15
- is-weakref: 1.1.0
+ is-weakref: 1.1.1
math-intrinsics: 1.1.0
- object-inspect: 1.13.3
+ object-inspect: 1.13.4
object-keys: 1.1.1
object.assign: 4.1.7
own-keys: 1.0.1
@@ -3909,16 +3595,10 @@ snapshots:
iterator.prototype: 1.1.5
safe-array-concat: 1.1.3
- es-object-atoms@1.0.0:
+ es-object-atoms@1.1.1:
dependencies:
es-errors: 1.3.0
- es-set-tostringtag@2.0.3:
- dependencies:
- get-intrinsic: 1.2.6
- has-tostringtag: 1.0.2
- hasown: 2.0.2
-
es-set-tostringtag@2.1.0:
dependencies:
es-errors: 1.3.0
@@ -3926,7 +3606,7 @@ snapshots:
has-tostringtag: 1.0.2
hasown: 2.0.2
- es-shim-unscopables@1.0.2:
+ es-shim-unscopables@1.1.0:
dependencies:
hasown: 2.0.2
@@ -3936,116 +3616,6 @@ snapshots:
is-date-object: 1.1.0
is-symbol: 1.1.1
- esbuild-android-64@0.15.18:
- optional: true
-
- esbuild-android-arm64@0.15.18:
- optional: true
-
- esbuild-darwin-64@0.15.18:
- optional: true
-
- esbuild-darwin-arm64@0.15.18:
- optional: true
-
- esbuild-freebsd-64@0.15.18:
- optional: true
-
- esbuild-freebsd-arm64@0.15.18:
- optional: true
-
- esbuild-linux-32@0.15.18:
- optional: true
-
- esbuild-linux-64@0.15.18:
- optional: true
-
- esbuild-linux-arm64@0.15.18:
- optional: true
-
- esbuild-linux-arm@0.15.18:
- optional: true
-
- esbuild-linux-mips64le@0.15.18:
- optional: true
-
- esbuild-linux-ppc64le@0.15.18:
- optional: true
-
- esbuild-linux-riscv64@0.15.18:
- optional: true
-
- esbuild-linux-s390x@0.15.18:
- optional: true
-
- esbuild-netbsd-64@0.15.18:
- optional: true
-
- esbuild-openbsd-64@0.15.18:
- optional: true
-
- esbuild-sunos-64@0.15.18:
- optional: true
-
- esbuild-windows-32@0.15.18:
- optional: true
-
- esbuild-windows-64@0.15.18:
- optional: true
-
- esbuild-windows-arm64@0.15.18:
- optional: true
-
- esbuild@0.15.18:
- optionalDependencies:
- '@esbuild/android-arm': 0.15.18
- '@esbuild/linux-loong64': 0.15.18
- esbuild-android-64: 0.15.18
- esbuild-android-arm64: 0.15.18
- esbuild-darwin-64: 0.15.18
- esbuild-darwin-arm64: 0.15.18
- esbuild-freebsd-64: 0.15.18
- esbuild-freebsd-arm64: 0.15.18
- esbuild-linux-32: 0.15.18
- esbuild-linux-64: 0.15.18
- esbuild-linux-arm: 0.15.18
- esbuild-linux-arm64: 0.15.18
- esbuild-linux-mips64le: 0.15.18
- esbuild-linux-ppc64le: 0.15.18
- esbuild-linux-riscv64: 0.15.18
- esbuild-linux-s390x: 0.15.18
- esbuild-netbsd-64: 0.15.18
- esbuild-openbsd-64: 0.15.18
- esbuild-sunos-64: 0.15.18
- esbuild-windows-32: 0.15.18
- esbuild-windows-64: 0.15.18
- esbuild-windows-arm64: 0.15.18
-
- esbuild@0.17.19:
- optionalDependencies:
- '@esbuild/android-arm': 0.17.19
- '@esbuild/android-arm64': 0.17.19
- '@esbuild/android-x64': 0.17.19
- '@esbuild/darwin-arm64': 0.17.19
- '@esbuild/darwin-x64': 0.17.19
- '@esbuild/freebsd-arm64': 0.17.19
- '@esbuild/freebsd-x64': 0.17.19
- '@esbuild/linux-arm': 0.17.19
- '@esbuild/linux-arm64': 0.17.19
- '@esbuild/linux-ia32': 0.17.19
- '@esbuild/linux-loong64': 0.17.19
- '@esbuild/linux-mips64el': 0.17.19
- '@esbuild/linux-ppc64': 0.17.19
- '@esbuild/linux-riscv64': 0.17.19
- '@esbuild/linux-s390x': 0.17.19
- '@esbuild/linux-x64': 0.17.19
- '@esbuild/netbsd-x64': 0.17.19
- '@esbuild/openbsd-x64': 0.17.19
- '@esbuild/sunos-x64': 0.17.19
- '@esbuild/win32-arm64': 0.17.19
- '@esbuild/win32-ia32': 0.17.19
- '@esbuild/win32-x64': 0.17.19
-
esbuild@0.23.1:
optionalDependencies:
'@esbuild/aix-ppc64': 0.23.1
@@ -4073,6 +3643,34 @@ snapshots:
'@esbuild/win32-ia32': 0.23.1
'@esbuild/win32-x64': 0.23.1
+ esbuild@0.25.0:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.25.0
+ '@esbuild/android-arm': 0.25.0
+ '@esbuild/android-arm64': 0.25.0
+ '@esbuild/android-x64': 0.25.0
+ '@esbuild/darwin-arm64': 0.25.0
+ '@esbuild/darwin-x64': 0.25.0
+ '@esbuild/freebsd-arm64': 0.25.0
+ '@esbuild/freebsd-x64': 0.25.0
+ '@esbuild/linux-arm': 0.25.0
+ '@esbuild/linux-arm64': 0.25.0
+ '@esbuild/linux-ia32': 0.25.0
+ '@esbuild/linux-loong64': 0.25.0
+ '@esbuild/linux-mips64el': 0.25.0
+ '@esbuild/linux-ppc64': 0.25.0
+ '@esbuild/linux-riscv64': 0.25.0
+ '@esbuild/linux-s390x': 0.25.0
+ '@esbuild/linux-x64': 0.25.0
+ '@esbuild/netbsd-arm64': 0.25.0
+ '@esbuild/netbsd-x64': 0.25.0
+ '@esbuild/openbsd-arm64': 0.25.0
+ '@esbuild/openbsd-x64': 0.25.0
+ '@esbuild/sunos-x64': 0.25.0
+ '@esbuild/win32-arm64': 0.25.0
+ '@esbuild/win32-ia32': 0.25.0
+ '@esbuild/win32-x64': 0.25.0
+
escalade@3.2.0: {}
escape-string-regexp@4.0.0: {}
@@ -4085,9 +3683,9 @@ snapshots:
optionalDependencies:
source-map: 0.6.1
- eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))):
+ eslint-import-resolver-alias@1.1.2(eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))):
dependencies:
- eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
eslint-import-resolver-node@0.3.9:
dependencies:
@@ -4097,17 +3695,17 @@ snapshots:
transitivePeerDependencies:
- supports-color
- eslint-module-utils@2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)):
+ eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)):
dependencies:
debug: 3.2.7
optionalDependencies:
- '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
eslint-import-resolver-node: 0.3.9
transitivePeerDependencies:
- supports-color
- eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)):
+ eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)):
dependencies:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -4116,9 +3714,9 @@ snapshots:
array.prototype.flatmap: 1.3.3
debug: 3.2.7
doctrine: 2.1.0
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
hasown: 2.0.2
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -4130,22 +3728,22 @@ snapshots:
string.prototype.trimend: 1.0.9
tsconfig-paths: 3.15.0
optionalDependencies:
- '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
+ '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
transitivePeerDependencies:
- eslint-import-resolver-typescript
- eslint-import-resolver-webpack
- supports-color
- eslint-plugin-path-alias@2.1.0(patch_hash=japuwsqfkulviwgkm4kd2oi3ky)(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)):
+ eslint-plugin-path-alias@2.1.0(patch_hash=87545cb13985b338c8fa2ea7b0a3c75c57ad7fbc81c56b38d6c9438329957727)(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)):
dependencies:
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
find-pkg: 2.0.0
get-tsconfig: 4.8.1
nanomatch: 1.2.13
transitivePeerDependencies:
- supports-color
- eslint-plugin-react@7.37.3(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)):
+ eslint-plugin-react@7.37.4(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)):
dependencies:
array-includes: 3.1.8
array.prototype.findlast: 1.2.5
@@ -4153,7 +3751,7 @@ snapshots:
array.prototype.tosorted: 1.1.4
doctrine: 2.1.0
es-iterator-helpers: 1.2.1
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
estraverse: 5.3.0
hasown: 2.0.2
jsx-ast-utils: 3.3.5
@@ -4167,19 +3765,19 @@ snapshots:
string.prototype.matchall: 4.0.12
string.prototype.repeat: 1.0.0
- eslint-plugin-simple-header@1.2.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)):
+ eslint-plugin-simple-header@1.2.2(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)):
dependencies:
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
- eslint-plugin-simple-import-sort@12.1.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)):
+ eslint-plugin-simple-import-sort@12.1.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)):
dependencies:
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
- eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)):
+ eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)):
dependencies:
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
optionalDependencies:
- '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
+ '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
eslint-scope@8.2.0:
dependencies:
@@ -4190,15 +3788,15 @@ snapshots:
eslint-visitor-keys@4.2.0: {}
- eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4):
+ eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215):
dependencies:
- '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))
+ '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))
'@eslint-community/regexpp': 4.12.1
- '@eslint/config-array': 0.19.1
- '@eslint/core': 0.9.1
+ '@eslint/config-array': 0.19.2
+ '@eslint/core': 0.11.0
'@eslint/eslintrc': 3.2.0
- '@eslint/js': 9.17.0
- '@eslint/plugin-kit': 0.2.4
+ '@eslint/js': 9.20.0
+ '@eslint/plugin-kit': 0.2.5
'@humanfs/node': 0.16.6
'@humanwhocodes/module-importer': 1.0.1
'@humanwhocodes/retry': 0.4.1
@@ -4278,7 +3876,7 @@ snapshots:
fast-fifo@1.3.2: {}
- fast-glob@3.3.2:
+ fast-glob@3.3.3:
dependencies:
'@nodelib/fs.stat': 2.0.5
'@nodelib/fs.walk': 1.2.8
@@ -4290,11 +3888,11 @@ snapshots:
fast-levenshtein@2.0.6: {}
- fast-uri@3.0.3: {}
+ fast-uri@3.0.6: {}
fastest-levenshtein@1.0.16: {}
- fastq@1.17.1:
+ fastq@1.19.0:
dependencies:
reusify: 1.0.4
@@ -4304,14 +3902,14 @@ snapshots:
fflate@0.8.2: {}
+ file-entry-cache@10.0.6:
+ dependencies:
+ flat-cache: 6.1.6
+
file-entry-cache@8.0.0:
dependencies:
flat-cache: 4.0.1
- file-entry-cache@9.1.0:
- dependencies:
- flat-cache: 5.0.0
-
fill-range@7.1.1:
dependencies:
to-regex-range: 5.0.1
@@ -4331,17 +3929,18 @@ snapshots:
flat-cache@4.0.1:
dependencies:
- flatted: 3.3.2
+ flatted: 3.3.3
keyv: 4.5.4
- flat-cache@5.0.0:
+ flat-cache@6.1.6:
dependencies:
- flatted: 3.3.2
- keyv: 4.5.4
+ cacheable: 1.8.8
+ flatted: 3.3.3
+ hookified: 1.7.1
- flatted@3.3.2: {}
+ flatted@3.3.3: {}
- for-each@0.3.3:
+ for-each@0.3.5:
dependencies:
is-callable: 1.2.7
@@ -4351,28 +3950,17 @@ snapshots:
dependencies:
map-cache: 0.2.2
- fs-extra@11.2.0:
+ fs-extra@11.3.0:
dependencies:
graceful-fs: 4.2.11
jsonfile: 6.1.0
universalify: 2.0.1
- fsevents@2.3.2:
- optional: true
-
fsevents@2.3.3:
optional: true
function-bind@1.1.2: {}
- function.prototype.name@1.1.7:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- functions-have-names: 1.2.3
- hasown: 2.0.2
- is-callable: 1.2.7
-
function.prototype.name@1.1.8:
dependencies:
call-bind: 1.0.8
@@ -4386,25 +3974,12 @@ snapshots:
get-caller-file@2.0.5: {}
- get-intrinsic@1.2.6:
- dependencies:
- call-bind-apply-helpers: 1.0.1
- dunder-proto: 1.0.1
- es-define-property: 1.0.1
- es-errors: 1.3.0
- es-object-atoms: 1.0.0
- function-bind: 1.1.2
- gopd: 1.2.0
- has-symbols: 1.1.0
- hasown: 2.0.2
- math-intrinsics: 1.1.0
-
get-intrinsic@1.2.7:
dependencies:
- call-bind-apply-helpers: 1.0.1
+ call-bind-apply-helpers: 1.0.2
es-define-property: 1.0.1
es-errors: 1.3.0
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
function-bind: 1.1.2
get-proto: 1.0.1
gopd: 1.2.0
@@ -4415,7 +3990,7 @@ snapshots:
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
get-stream@5.2.0:
dependencies:
@@ -4425,7 +4000,11 @@ snapshots:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
+
+ get-tsconfig@4.10.0:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
get-tsconfig@4.8.1:
dependencies:
@@ -4492,7 +4071,7 @@ snapshots:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
- fast-glob: 3.3.2
+ fast-glob: 3.3.3
ignore: 5.3.2
merge2: 1.4.1
slash: 3.0.0
@@ -4546,12 +4125,14 @@ snapshots:
dependencies:
function-bind: 1.1.2
- highlight.js@11.7.0: {}
+ highlight.js@11.11.1: {}
homedir-polyfill@1.0.3:
dependencies:
parse-passwd: 1.0.0
+ hookified@1.7.1: {}
+
html-minifier-terser@7.2.0:
dependencies:
camel-case: 4.1.2
@@ -4582,9 +4163,9 @@ snapshots:
ignore@5.3.2: {}
- ignore@6.0.2: {}
+ ignore@7.0.3: {}
- import-fresh@3.3.0:
+ import-fresh@3.3.1:
dependencies:
parent-module: 1.0.1
resolve-from: 4.0.0
@@ -4614,19 +4195,23 @@ snapshots:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
is-arrayish@0.2.1: {}
- is-async-function@2.0.0:
+ is-async-function@2.1.1:
dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.3
+ get-proto: 1.0.1
has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
is-bigint@1.1.0:
dependencies:
has-bigints: 1.1.0
- is-boolean-object@1.2.1:
+ is-boolean-object@1.2.2:
dependencies:
call-bound: 1.0.3
has-tostringtag: 1.0.2
@@ -4650,7 +4235,7 @@ snapshots:
is-data-view@1.0.2:
dependencies:
call-bound: 1.0.3
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
is-typed-array: 1.1.15
is-date-object@1.1.0:
@@ -4682,9 +4267,12 @@ snapshots:
is-fullwidth-code-point@3.0.0: {}
- is-generator-function@1.0.10:
+ is-generator-function@1.1.0:
dependencies:
+ call-bound: 1.0.3
+ get-proto: 1.0.1
has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
is-glob@4.0.3:
dependencies:
@@ -4692,8 +4280,6 @@ snapshots:
is-map@2.0.3: {}
- is-negative-zero@2.0.3: {}
-
is-number-object@1.1.1:
dependencies:
call-bound: 1.0.3
@@ -4741,14 +4327,14 @@ snapshots:
is-weakmap@2.0.2: {}
- is-weakref@1.1.0:
+ is-weakref@1.1.1:
dependencies:
call-bound: 1.0.3
is-weakset@2.0.4:
dependencies:
call-bound: 1.0.3
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
is-windows@1.0.2: {}
@@ -4769,7 +4355,7 @@ snapshots:
iterator.prototype@1.1.5:
dependencies:
define-data-property: 1.1.4
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
get-intrinsic: 1.2.7
get-proto: 1.0.1
has-symbols: 1.1.0
@@ -4820,6 +4406,10 @@ snapshots:
dependencies:
json-buffer: 3.0.1
+ keyv@5.2.3:
+ dependencies:
+ '@keyv/serialize': 1.0.3
+
kind-of@3.2.2:
dependencies:
is-buffer: 1.1.6
@@ -4905,7 +4495,7 @@ snapshots:
nanoid@3.3.8: {}
- nanoid@5.0.9: {}
+ nanoid@5.1.0: {}
nanomatch@1.2.13:
dependencies:
@@ -4942,7 +4532,7 @@ snapshots:
define-property: 0.2.5
kind-of: 3.2.2
- object-inspect@1.13.3: {}
+ object-inspect@1.13.4: {}
object-keys@1.1.1: {}
@@ -4955,7 +4545,7 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
has-symbols: 1.1.0
object-keys: 1.1.1
@@ -4963,14 +4553,14 @@ snapshots:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
object.fromentries@2.0.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-abstract: 1.23.6
- es-object-atoms: 1.0.0
+ es-abstract: 1.23.9
+ es-object-atoms: 1.1.1
object.groupby@1.0.3:
dependencies:
@@ -4987,7 +4577,7 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
once@1.4.0:
dependencies:
@@ -5077,22 +4667,22 @@ snapshots:
picomatch@4.0.2: {}
- possible-typed-array-names@1.0.0: {}
+ possible-typed-array-names@1.1.0: {}
postcss-resolve-nested-selector@0.1.6: {}
- postcss-safe-parser@7.0.1(postcss@8.4.49):
+ postcss-safe-parser@7.0.1(postcss@8.5.2):
dependencies:
- postcss: 8.4.49
+ postcss: 8.5.2
- postcss-selector-parser@7.0.0:
+ postcss-selector-parser@7.1.0:
dependencies:
cssesc: 3.0.0
util-deprecate: 1.0.2
postcss-value-parser@4.2.0: {}
- postcss@8.4.49:
+ postcss@8.5.2:
dependencies:
nanoid: 3.3.8
picocolors: 1.1.1
@@ -5130,15 +4720,16 @@ snapshots:
punycode@2.3.1: {}
- puppeteer-core@23.11.1:
+ puppeteer-core@24.2.1:
dependencies:
- '@puppeteer/browsers': 2.6.1
- chromium-bidi: 0.11.0(devtools-protocol@0.0.1367902)
+ '@puppeteer/browsers': 2.7.1
+ chromium-bidi: 1.3.0(devtools-protocol@0.0.1402036)
debug: 4.4.0
- devtools-protocol: 0.0.1367902
+ devtools-protocol: 0.0.1402036
typed-query-selector: 2.12.0
ws: 8.18.0
transitivePeerDependencies:
+ - bare-buffer
- bufferutil
- supports-color
- utf-8-validate
@@ -5147,19 +4738,17 @@ snapshots:
queue-microtask@1.2.3: {}
- queue-tick@1.0.1: {}
-
react-is@16.13.1: {}
- reflect.getprototypeof@1.0.9:
+ reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- dunder-proto: 1.0.1
- es-abstract: 1.23.6
+ es-abstract: 1.23.9
es-errors: 1.3.0
- get-intrinsic: 1.2.6
- gopd: 1.2.0
+ es-object-atoms: 1.1.1
+ get-intrinsic: 1.2.7
+ get-proto: 1.0.1
which-builtin-type: 1.2.1
regex-not@1.0.2:
@@ -5167,13 +4756,6 @@ snapshots:
extend-shallow: 3.0.2
safe-regex: 1.1.0
- regexp.prototype.flags@1.5.3:
- dependencies:
- call-bind: 1.0.8
- define-properties: 1.2.1
- es-errors: 1.3.0
- set-function-name: 2.0.2
-
regexp.prototype.flags@1.5.4:
dependencies:
call-bind: 1.0.8
@@ -5210,7 +4792,7 @@ snapshots:
resolve@2.0.0-next.5:
dependencies:
- is-core-module: 2.16.0
+ is-core-module: 2.16.1
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
@@ -5226,7 +4808,7 @@ snapshots:
dependencies:
call-bind: 1.0.8
call-bound: 1.0.3
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
has-symbols: 1.1.0
isarray: 2.0.5
@@ -5249,12 +4831,14 @@ snapshots:
semver@7.6.3: {}
+ semver@7.7.1: {}
+
set-function-length@1.2.2:
dependencies:
define-data-property: 1.1.4
es-errors: 1.3.0
function-bind: 1.1.2
- get-intrinsic: 1.2.6
+ get-intrinsic: 1.2.7
gopd: 1.2.0
has-property-descriptors: 1.0.2
@@ -5269,7 +4853,7 @@ snapshots:
dependencies:
dunder-proto: 1.0.1
es-errors: 1.3.0
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
set-value@2.0.1:
dependencies:
@@ -5287,27 +4871,27 @@ snapshots:
side-channel-list@1.0.0:
dependencies:
es-errors: 1.3.0
- object-inspect: 1.13.3
+ object-inspect: 1.13.4
side-channel-map@1.0.1:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.6
- object-inspect: 1.13.3
+ get-intrinsic: 1.2.7
+ object-inspect: 1.13.4
side-channel-weakmap@1.0.2:
dependencies:
call-bound: 1.0.3
es-errors: 1.3.0
- get-intrinsic: 1.2.6
- object-inspect: 1.13.3
+ get-intrinsic: 1.2.7
+ object-inspect: 1.13.4
side-channel-map: 1.0.1
side-channel@1.1.0:
dependencies:
es-errors: 1.3.0
- object-inspect: 1.13.3
+ object-inspect: 1.13.4
side-channel-list: 1.0.0
side-channel-map: 1.0.1
side-channel-weakmap: 1.0.2
@@ -5341,11 +4925,11 @@ snapshots:
dependencies:
agent-base: 7.1.3
debug: 4.4.0
- socks: 2.8.3
+ socks: 2.8.4
transitivePeerDependencies:
- supports-color
- socks@2.8.3:
+ socks@2.8.4:
dependencies:
ip-address: 9.0.5
smart-buffer: 4.2.0
@@ -5377,22 +4961,21 @@ snapshots:
sprintf-js@1.1.3: {}
- standalone-electron-types@1.0.0:
+ standalone-electron-types@34.2.0:
dependencies:
- '@types/node': 18.19.69
+ '@types/node': 22.13.4
static-extend@0.1.2:
dependencies:
define-property: 0.2.5
object-copy: 0.1.0
- streamx@2.21.1:
+ streamx@2.22.0:
dependencies:
fast-fifo: 1.3.2
- queue-tick: 1.0.1
text-decoder: 1.2.3
optionalDependencies:
- bare-events: 2.5.0
+ bare-events: 2.5.4
string-width@4.2.3:
dependencies:
@@ -5407,7 +4990,7 @@ snapshots:
define-properties: 1.2.1
es-abstract: 1.23.9
es-errors: 1.3.0
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
get-intrinsic: 1.2.7
gopd: 1.2.0
has-symbols: 1.1.0
@@ -5419,7 +5002,7 @@ snapshots:
string.prototype.repeat@1.0.0:
dependencies:
define-properties: 1.2.1
- es-abstract: 1.23.6
+ es-abstract: 1.23.9
string.prototype.trim@1.2.10:
dependencies:
@@ -5427,8 +5010,8 @@ snapshots:
call-bound: 1.0.3
define-data-property: 1.1.4
define-properties: 1.2.1
- es-abstract: 1.23.6
- es-object-atoms: 1.0.0
+ es-abstract: 1.23.9
+ es-object-atoms: 1.1.1
has-property-descriptors: 1.0.2
string.prototype.trimend@1.0.9:
@@ -5436,13 +5019,13 @@ snapshots:
call-bind: 1.0.8
call-bound: 1.0.3
define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
string.prototype.trimstart@1.0.8:
dependencies:
call-bind: 1.0.8
define-properties: 1.2.1
- es-object-atoms: 1.0.0
+ es-object-atoms: 1.1.1
strip-ansi@6.0.1:
dependencies:
@@ -5452,36 +5035,36 @@ snapshots:
strip-json-comments@3.1.1: {}
- stylelint-config-recommended@14.0.1(stylelint@16.12.0(typescript@5.7.2)):
+ stylelint-config-recommended@15.0.0(stylelint@16.14.1(typescript@5.7.3)):
dependencies:
- stylelint: 16.12.0(typescript@5.7.2)
+ stylelint: 16.14.1(typescript@5.7.3)
- stylelint-config-standard@36.0.1(stylelint@16.12.0(typescript@5.7.2)):
+ stylelint-config-standard@37.0.0(stylelint@16.14.1(typescript@5.7.3)):
dependencies:
- stylelint: 16.12.0(typescript@5.7.2)
- stylelint-config-recommended: 14.0.1(stylelint@16.12.0(typescript@5.7.2))
+ stylelint: 16.14.1(typescript@5.7.3)
+ stylelint-config-recommended: 15.0.0(stylelint@16.14.1(typescript@5.7.3))
- stylelint@16.12.0(typescript@5.7.2):
+ stylelint@16.14.1(typescript@5.7.3):
dependencies:
'@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3)
'@csstools/css-tokenizer': 3.0.3
'@csstools/media-query-list-parser': 4.0.2(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)
- '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.0.0)
+ '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0)
'@dual-bundle/import-meta-resolve': 4.1.0
balanced-match: 2.0.0
colord: 2.9.3
- cosmiconfig: 9.0.0(typescript@5.7.2)
+ cosmiconfig: 9.0.0(typescript@5.7.3)
css-functions-list: 3.2.3
css-tree: 3.1.0
debug: 4.4.0
- fast-glob: 3.3.2
+ fast-glob: 3.3.3
fastest-levenshtein: 1.0.16
- file-entry-cache: 9.1.0
+ file-entry-cache: 10.0.6
global-modules: 2.0.0
globby: 11.1.0
globjoin: 0.1.4
html-tags: 3.3.1
- ignore: 6.0.2
+ ignore: 7.0.3
imurmurhash: 0.1.4
is-plain-object: 5.0.0
known-css-properties: 0.35.0
@@ -5490,14 +5073,14 @@ snapshots:
micromatch: 4.0.8
normalize-path: 3.0.0
picocolors: 1.1.1
- postcss: 8.4.49
+ postcss: 8.5.2
postcss-resolve-nested-selector: 0.1.6
- postcss-safe-parser: 7.0.1(postcss@8.4.49)
- postcss-selector-parser: 7.0.0
+ postcss-safe-parser: 7.0.1(postcss@8.5.2)
+ postcss-selector-parser: 7.1.0
postcss-value-parser: 4.2.0
resolve-from: 5.0.0
string-width: 4.2.3
- supports-hyperlinks: 3.1.0
+ supports-hyperlinks: 3.2.0
svg-tags: 1.0.0
table: 6.9.0
write-file-atomic: 5.0.1
@@ -5509,7 +5092,7 @@ snapshots:
dependencies:
has-flag: 4.0.0
- supports-hyperlinks@3.1.0:
+ supports-hyperlinks@3.2.0:
dependencies:
has-flag: 4.0.0
supports-color: 7.2.0
@@ -5526,19 +5109,21 @@ snapshots:
string-width: 4.2.3
strip-ansi: 6.0.1
- tar-fs@3.0.6:
+ tar-fs@3.0.8:
dependencies:
pump: 3.0.2
tar-stream: 3.1.7
optionalDependencies:
- bare-fs: 2.3.5
- bare-path: 2.1.3
+ bare-fs: 4.0.1
+ bare-path: 3.0.0
+ transitivePeerDependencies:
+ - bare-buffer
tar-stream@3.1.7:
dependencies:
b4a: 1.6.7
fast-fifo: 1.3.2
- streamx: 2.21.1
+ streamx: 2.22.0
terser@5.37.0:
dependencies:
@@ -5551,8 +5136,6 @@ snapshots:
dependencies:
b4a: 1.6.7
- through@2.3.8: {}
-
to-object-path@0.3.0:
dependencies:
kind-of: 3.2.2
@@ -5568,9 +5151,9 @@ snapshots:
regex-not: 1.0.2
safe-regex: 1.1.0
- ts-api-utils@1.4.3(typescript@5.7.2):
+ ts-api-utils@2.0.1(typescript@5.7.3):
dependencies:
- typescript: 5.7.2
+ typescript: 5.7.3
ts-patch@3.3.0:
dependencies:
@@ -5581,7 +5164,7 @@ snapshots:
semver: 7.6.3
strip-ansi: 6.0.1
- ts-pattern@5.6.0: {}
+ ts-pattern@5.6.2: {}
tsconfig-paths@3.15.0:
dependencies:
@@ -5592,18 +5175,10 @@ snapshots:
tslib@2.8.1: {}
- tsx@3.12.7:
- dependencies:
- '@esbuild-kit/cjs-loader': 2.4.2
- '@esbuild-kit/core-utils': 3.1.0
- '@esbuild-kit/esm-loader': 2.5.5
- optionalDependencies:
- fsevents: 2.3.2
-
tsx@4.19.2:
dependencies:
esbuild: 0.23.1
- get-tsconfig: 4.8.1
+ get-tsconfig: 4.10.0
optionalDependencies:
fsevents: 2.3.3
@@ -5611,9 +5186,7 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- type-fest@3.9.0: {}
-
- type-fest@4.31.0: {}
+ type-fest@4.35.0: {}
typed-array-buffer@1.0.3:
dependencies:
@@ -5624,7 +5197,7 @@ snapshots:
typed-array-byte-length@1.0.3:
dependencies:
call-bind: 1.0.8
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
@@ -5633,39 +5206,39 @@ snapshots:
dependencies:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
has-proto: 1.2.0
is-typed-array: 1.1.15
- reflect.getprototypeof: 1.0.9
+ reflect.getprototypeof: 1.0.10
typed-array-length@1.0.7:
dependencies:
call-bind: 1.0.8
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
is-typed-array: 1.1.15
- possible-typed-array-names: 1.0.0
- reflect.getprototypeof: 1.0.9
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
typed-query-selector@2.12.0: {}
- typescript-eslint@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2):
+ typescript-eslint@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3):
dependencies:
- '@typescript-eslint/eslint-plugin': 8.19.0(@typescript-eslint/parser@8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2))(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- '@typescript-eslint/parser': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- '@typescript-eslint/utils': 8.19.0(eslint@9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4))(typescript@5.7.2)
- eslint: 9.17.0(patch_hash=xm46kqcmdgzlmm4aifkfpxaho4)
- typescript: 5.7.2
+ '@typescript-eslint/eslint-plugin': 8.24.1(@typescript-eslint/parser@8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3))(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ '@typescript-eslint/parser': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ '@typescript-eslint/utils': 8.24.1(eslint@9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215))(typescript@5.7.3)
+ eslint: 9.20.1(patch_hash=4f22e92770bf528b2448fbec0984b9c0761dd588ed0e83dcc41edfc9af711215)
+ typescript: 5.7.3
transitivePeerDependencies:
- supports-color
- typescript-transform-paths@3.5.3(typescript@5.7.2):
+ typescript-transform-paths@3.5.3(typescript@5.7.3):
dependencies:
minimatch: 9.0.5
- typescript: 5.7.2
+ typescript: 5.7.3
- typescript@5.7.2: {}
+ typescript@5.7.3: {}
unbox-primitive@1.1.0:
dependencies:
@@ -5674,13 +5247,6 @@ snapshots:
has-symbols: 1.1.0
which-boxed-primitive: 1.1.1
- unbzip2-stream@1.4.3:
- dependencies:
- buffer: 5.7.1
- through: 2.3.8
-
- undici-types@5.26.5: {}
-
undici-types@6.20.0: {}
union-value@1.0.1:
@@ -5707,7 +5273,7 @@ snapshots:
util-deprecate@1.0.2: {}
- virtual-merge@1.0.1: {}
+ virtual-merge@1.0.2: {}
vscode-oniguruma@1.7.0: {}
@@ -5716,7 +5282,7 @@ snapshots:
which-boxed-primitive@1.1.1:
dependencies:
is-bigint: 1.1.0
- is-boolean-object: 1.2.1
+ is-boolean-object: 1.2.2
is-number-object: 1.1.1
is-string: 1.1.1
is-symbol: 1.1.1
@@ -5724,14 +5290,14 @@ snapshots:
which-builtin-type@1.2.1:
dependencies:
call-bound: 1.0.3
- function.prototype.name: 1.1.7
+ function.prototype.name: 1.1.8
has-tostringtag: 1.0.2
- is-async-function: 2.0.0
+ is-async-function: 2.1.1
is-date-object: 1.1.0
is-finalizationregistry: 1.1.1
- is-generator-function: 1.0.10
+ is-generator-function: 1.1.0
is-regex: 1.2.1
- is-weakref: 1.1.0
+ is-weakref: 1.1.1
isarray: 2.0.5
which-boxed-primitive: 1.1.1
which-collection: 1.0.2
@@ -5749,7 +5315,7 @@ snapshots:
available-typed-arrays: 1.0.7
call-bind: 1.0.8
call-bound: 1.0.3
- for-each: 0.3.3
+ for-each: 0.3.5
gopd: 1.2.0
has-tostringtag: 1.0.2
@@ -5810,4 +5376,4 @@ snapshots:
jszip: 2.7.0
q: 1.5.1
- zod@3.23.8: {}
+ zod@3.24.2: {}
diff --git a/scripts/build/build.mjs b/scripts/build/build.mjs
index 623f9f940..9c2b49708 100755
--- a/scripts/build/build.mjs
+++ b/scripts/build/build.mjs
@@ -17,38 +17,41 @@
* along with this program. If not, see .
*/
-import esbuild from "esbuild";
+// @ts-check
+
import { readdir } from "fs/promises";
import { join } from "path";
-import { BUILD_TIMESTAMP, commonOpts, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, resolvePluginName, VERSION, commonRendererPlugins, watch } from "./common.mjs";
+import { BUILD_TIMESTAMP, commonOpts, exists, globPlugins, IS_DEV, IS_REPORTER, IS_STANDALONE, IS_UPDATER_DISABLED, resolvePluginName, VERSION, commonRendererPlugins, watch, buildOrWatchAll, stringifyValues } from "./common.mjs";
-const defines = {
+const defines = stringifyValues({
IS_STANDALONE,
IS_DEV,
IS_REPORTER,
IS_UPDATER_DISABLED,
IS_WEB: false,
IS_EXTENSION: false,
- VERSION: JSON.stringify(VERSION),
+ VERSION,
BUILD_TIMESTAMP
-};
+});
-if (defines.IS_STANDALONE === false)
+if (defines.IS_STANDALONE === "false") {
// If this is a local build (not standalone), optimize
// for the specific platform we're on
defines["process.platform"] = JSON.stringify(process.platform);
+}
/**
- * @type {esbuild.BuildOptions}
+ * @type {import("esbuild").BuildOptions}
*/
const nodeCommonOpts = {
...commonOpts,
+ define: defines,
format: "cjs",
platform: "node",
target: ["esnext"],
- external: ["electron", "original-fs", "~pluginNatives", ...commonOpts.external],
- define: defines
+ // @ts-ignore this is never undefined
+ external: ["electron", "original-fs", "~pluginNatives", ...commonOpts.external]
};
const sourceMapFooter = s => watch ? "" : `//# sourceMappingURL=vencord://${s}.js.map`;
@@ -102,25 +105,27 @@ const globNativesPlugin = {
}
};
-await Promise.all([
+/** @type {import("esbuild").BuildOptions[]} */
+const buildConfigs = ([
// Discord Desktop main & renderer & preload
- esbuild.build({
+ {
...nodeCommonOpts,
entryPoints: ["src/main/index.ts"],
outfile: "dist/patcher.js",
footer: { js: "//# sourceURL=VencordPatcher\n" + sourceMapFooter("patcher") },
sourcemap,
- define: {
- ...defines,
- IS_DISCORD_DESKTOP: true,
- IS_VESKTOP: false
- },
plugins: [
+ // @ts-ignore this is never undefined
...nodeCommonOpts.plugins,
globNativesPlugin
- ]
- }),
- esbuild.build({
+ ],
+ define: {
+ ...defines,
+ IS_DISCORD_DESKTOP: "true",
+ IS_VESKTOP: "false"
+ }
+ },
+ {
...commonOpts,
entryPoints: ["src/Vencord.ts"],
outfile: "dist/renderer.js",
@@ -135,11 +140,11 @@ await Promise.all([
],
define: {
...defines,
- IS_DISCORD_DESKTOP: true,
- IS_VESKTOP: false
+ IS_DISCORD_DESKTOP: "true",
+ IS_VESKTOP: "false"
}
- }),
- esbuild.build({
+ },
+ {
...nodeCommonOpts,
entryPoints: ["src/preload.ts"],
outfile: "dist/preload.js",
@@ -147,29 +152,29 @@ await Promise.all([
sourcemap,
define: {
...defines,
- IS_DISCORD_DESKTOP: true,
- IS_VESKTOP: false
+ IS_DISCORD_DESKTOP: "true",
+ IS_VESKTOP: "false"
}
- }),
+ },
// Vencord Desktop main & renderer & preload
- esbuild.build({
+ {
...nodeCommonOpts,
entryPoints: ["src/main/index.ts"],
outfile: "dist/vencordDesktopMain.js",
footer: { js: "//# sourceURL=VencordDesktopMain\n" + sourceMapFooter("vencordDesktopMain") },
sourcemap,
- define: {
- ...defines,
- IS_DISCORD_DESKTOP: false,
- IS_VESKTOP: true
- },
plugins: [
...nodeCommonOpts.plugins,
globNativesPlugin
- ]
- }),
- esbuild.build({
+ ],
+ define: {
+ ...defines,
+ IS_DISCORD_DESKTOP: "false",
+ IS_VESKTOP: "true"
+ }
+ },
+ {
...commonOpts,
entryPoints: ["src/Vencord.ts"],
outfile: "dist/vencordDesktopRenderer.js",
@@ -184,11 +189,11 @@ await Promise.all([
],
define: {
...defines,
- IS_DISCORD_DESKTOP: false,
- IS_VESKTOP: true
+ IS_DISCORD_DESKTOP: "false",
+ IS_VESKTOP: "true"
}
- }),
- esbuild.build({
+ },
+ {
...nodeCommonOpts,
entryPoints: ["src/preload.ts"],
outfile: "dist/vencordDesktopPreload.js",
@@ -196,14 +201,10 @@ await Promise.all([
sourcemap,
define: {
...defines,
- IS_DISCORD_DESKTOP: false,
- IS_VESKTOP: true
+ IS_DISCORD_DESKTOP: "false",
+ IS_VESKTOP: "true"
}
- }),
-]).catch(err => {
- console.error("Build failed");
- console.error(err.message);
- // make ci fail
- if (!commonOpts.watch)
- process.exitCode = 1;
-});
+ }
+]);
+
+await buildOrWatchAll(buildConfigs);
diff --git a/scripts/build/buildWeb.mjs b/scripts/build/buildWeb.mjs
index 4602661d0..3e7637285 100644
--- a/scripts/build/buildWeb.mjs
+++ b/scripts/build/buildWeb.mjs
@@ -17,29 +17,30 @@
* along with this program. If not, see .
*/
-import esbuild from "esbuild";
+// @ts-check
+
import { readFileSync } from "fs";
import { appendFile, mkdir, readdir, readFile, rm, writeFile } from "fs/promises";
import { join } from "path";
import Zip from "zip-local";
-import { BUILD_TIMESTAMP, commonOpts, globPlugins, IS_DEV, IS_REPORTER, VERSION, commonRendererPlugins } from "./common.mjs";
+import { BUILD_TIMESTAMP, commonOpts, globPlugins, IS_DEV, IS_REPORTER, VERSION, commonRendererPlugins, buildOrWatchAll, stringifyValues } from "./common.mjs";
/**
- * @type {esbuild.BuildOptions}
+ * @type {import("esbuild").BuildOptions}
*/
const commonOptions = {
...commonOpts,
entryPoints: ["browser/Vencord.ts"],
- globalName: "Vencord",
format: "iife",
+ globalName: "Vencord",
external: ["~plugins", "~git-hash", "/assets/*"],
+ target: ["esnext"],
plugins: [
globPlugins("web"),
...commonRendererPlugins
],
- target: ["esnext"],
- define: {
+ define: stringifyValues({
IS_WEB: true,
IS_EXTENSION: false,
IS_STANDALONE: true,
@@ -48,9 +49,9 @@ const commonOptions = {
IS_DISCORD_DESKTOP: false,
IS_VESKTOP: false,
IS_UPDATER_DISABLED: true,
- VERSION: JSON.stringify(VERSION),
+ VERSION,
BUILD_TIMESTAMP
- }
+ })
};
const MonacoWorkerEntryPoints = [
@@ -58,70 +59,59 @@ const MonacoWorkerEntryPoints = [
"vs/editor/editor.worker.js"
];
-const RnNoiseFiles = [
- "dist/rnnoise.wasm",
- "dist/rnnoise_simd.wasm",
- "dist/rnnoise/workletProcessor.js",
- "LICENSE"
+/** @type {import("esbuild").BuildOptions[]} */
+const buildConfigs = [
+ {
+ entryPoints: MonacoWorkerEntryPoints.map(entry => `node_modules/monaco-editor/esm/${entry}`),
+ bundle: true,
+ minify: true,
+ format: "iife",
+ outbase: "node_modules/monaco-editor/esm/",
+ outdir: "dist/vendor/monaco"
+ },
+ {
+ entryPoints: ["browser/monaco.ts"],
+ bundle: true,
+ minify: true,
+ format: "iife",
+ outfile: "dist/vendor/monaco/index.js",
+ loader: {
+ ".ttf": "file"
+ }
+ },
+ {
+ ...commonOptions,
+ outfile: "dist/browser.js",
+ footer: { js: "//# sourceURL=VencordWeb" }
+ },
+ {
+ ...commonOptions,
+ outfile: "dist/extension.js",
+ define: {
+ ...commonOptions.define,
+ IS_EXTENSION: "true"
+ },
+ footer: { js: "//# sourceURL=VencordWeb" }
+ },
+ {
+ ...commonOptions,
+ inject: ["browser/GMPolyfill.js", ...(commonOptions?.inject || [])],
+ define: {
+ ...commonOptions.define,
+ window: "unsafeWindow",
+ },
+ outfile: "dist/Vencord.user.js",
+ banner: {
+ js: readFileSync("browser/userscript.meta.js", "utf-8").replace("%version%", `${VERSION}.${new Date().getTime()}`)
+ },
+ footer: {
+ // UserScripts get wrapped in an iife, so define Vencord prop on window that returns our local
+ js: "Object.defineProperty(unsafeWindow,'Vencord',{get:()=>Vencord});"
+ }
+ }
];
-await Promise.all(
- [
- esbuild.build({
- entryPoints: MonacoWorkerEntryPoints.map(entry => `node_modules/monaco-editor/esm/${entry}`),
- bundle: true,
- minify: true,
- format: "iife",
- outbase: "node_modules/monaco-editor/esm/",
- outdir: "dist/monaco"
- }),
- esbuild.build({
- entryPoints: ["browser/monaco.ts"],
- bundle: true,
- minify: true,
- format: "iife",
- outfile: "dist/monaco/index.js",
- loader: {
- ".ttf": "file"
- }
- }),
- esbuild.build({
- ...commonOptions,
- outfile: "dist/browser.js",
- footer: { js: "//# sourceURL=VencordWeb" }
- }),
- esbuild.build({
- ...commonOptions,
- outfile: "dist/extension.js",
- define: {
- ...commonOptions?.define,
- IS_EXTENSION: true,
- },
- footer: { js: "//# sourceURL=VencordWeb" }
- }),
- esbuild.build({
- ...commonOptions,
- inject: ["browser/GMPolyfill.js", ...(commonOptions?.inject || [])],
- define: {
- ...(commonOptions?.define),
- window: "unsafeWindow",
- },
- outfile: "dist/Vencord.user.js",
- banner: {
- js: readFileSync("browser/userscript.meta.js", "utf-8").replace("%version%", `${VERSION}.${new Date().getTime()}`)
- },
- footer: {
- // UserScripts get wrapped in an iife, so define Vencord prop on window that returns our local
- js: "Object.defineProperty(unsafeWindow,'Vencord',{get:()=>Vencord});"
- }
- })
- ]
-).catch(err => {
- console.error("Build failed");
- console.error(err.message);
- if (!commonOpts.watch)
- process.exit(1);
-});;
+await buildOrWatchAll(buildConfigs);
/**
* @type {(dir: string) => Promise}
@@ -155,16 +145,13 @@ async function buildExtension(target, files) {
const entries = {
"dist/Vencord.js": await readFile("dist/extension.js"),
"dist/Vencord.css": await readFile("dist/extension.css"),
- ...await loadDir("dist/monaco"),
- ...Object.fromEntries(await Promise.all(RnNoiseFiles.map(async file =>
- [`third-party/rnnoise/${file.replace(/^dist\//, "")}`, await readFile(`node_modules/@sapphi-red/web-noise-suppressor/${file}`)]
- ))),
+ ...await loadDir("dist/vendor/monaco", "dist/"),
...Object.fromEntries(await Promise.all(files.map(async f => {
let content = await readFile(join("browser", f));
if (f.startsWith("manifest")) {
const json = JSON.parse(content.toString("utf-8"));
json.version = VERSION;
- content = new TextEncoder().encode(JSON.stringify(json));
+ content = Buffer.from(new TextEncoder().encode(JSON.stringify(json)));
}
return [
@@ -208,7 +195,6 @@ if (!process.argv.includes("--skip-extension")) {
Zip.sync.zip("dist/firefox-unpacked").compress().save("dist/extension-firefox.zip");
console.info("Packed Firefox Extension written to dist/extension-firefox.zip");
-
} else {
await appendCssRuntime;
}
diff --git a/scripts/build/common.mjs b/scripts/build/common.mjs
index 3c6e1f298..4a765c71d 100644
--- a/scripts/build/common.mjs
+++ b/scripts/build/common.mjs
@@ -16,11 +16,13 @@
* along with this program. If not, see .
*/
+// @ts-check
+
import "../suppressExperimentalWarnings.js";
import "../checkNodeVersion.js";
import { exec, execSync } from "child_process";
-import esbuild from "esbuild";
+import esbuild, { build, context } from "esbuild";
import { constants as FsConstants, readFileSync } from "fs";
import { access, readdir, readFile } from "fs/promises";
import { minify as minifyHtml } from "html-minifier-terser";
@@ -31,7 +33,7 @@ import { getPluginTarget } from "../utils.mjs";
import { builtinModules } from "module";
/** @type {import("../../package.json")} */
-const PackageJSON = JSON.parse(readFileSync("package.json"));
+const PackageJSON = JSON.parse(readFileSync("package.json", "utf-8"));
export const VERSION = PackageJSON.version;
// https://reproducible-builds.org/docs/source-date-epoch/
@@ -54,6 +56,34 @@ export const banner = {
`.trim()
};
+/**
+ * JSON.stringify all values in an object
+ * @type {(obj: Record) => Record}
+ */
+export function stringifyValues(obj) {
+ for (const key in obj) {
+ obj[key] = JSON.stringify(obj[key]);
+ }
+ return obj;
+}
+
+/**
+ * @param {import("esbuild").BuildOptions[]} buildConfigs
+ */
+export async function buildOrWatchAll(buildConfigs) {
+ if (watch) {
+ await Promise.all(buildConfigs.map(cfg =>
+ context(cfg).then(ctx => ctx.watch())
+ ));
+ } else {
+ await Promise.all(buildConfigs.map(cfg => build(cfg)))
+ .catch(error => {
+ console.error(error.message);
+ process.exit(1); // exit immediately to skip the rest of the builds
+ });
+ }
+}
+
const PluginDefinitionNameMatcher = /definePlugin\(\{\s*(["'])?name\1:\s*(["'`])(.+?)\2/;
/**
* @param {string} base
@@ -311,18 +341,16 @@ export const banImportPlugin = (filter, message) => ({
export const commonOpts = {
logLevel: "info",
bundle: true,
- watch,
minify: !watch && !IS_REPORTER,
- sourcemap: watch ? "inline" : "",
+ sourcemap: watch ? "inline" : "external",
legalComments: "linked",
banner,
plugins: [fileUrlPlugin, gitHashPlugin, gitRemotePlugin, stylePlugin],
external: ["~plugins", "~git-hash", "~git-remote", "/assets/*"],
inject: ["./scripts/build/inject/react.mjs"],
+ jsx: "transform",
jsxFactory: "VencordCreateElement",
- jsxFragment: "VencordFragment",
- // Work around https://github.com/evanw/esbuild/issues/2460
- tsconfig: "./scripts/build/tsconfig.esbuild.json"
+ jsxFragment: "VencordFragment"
};
const escapedBuiltinModules = builtinModules
@@ -335,5 +363,6 @@ export const commonRendererPlugins = [
banImportPlugin(/^react$/, "Cannot import from react. React and hooks should be imported from @webpack/common"),
banImportPlugin(/^electron(\/.*)?$/, "Cannot import electron in browser code. You need to use a native.ts file"),
banImportPlugin(/^ts-pattern$/, "Cannot import from ts-pattern. match and P should be imported from @webpack/common"),
+ // @ts-ignore this is never undefined
...commonOpts.plugins
];
diff --git a/scripts/build/tsconfig.esbuild.json b/scripts/build/tsconfig.esbuild.json
deleted file mode 100644
index e3e28a14d..000000000
--- a/scripts/build/tsconfig.esbuild.json
+++ /dev/null
@@ -1,7 +0,0 @@
-// Work around https://github.com/evanw/esbuild/issues/2460
-{
- "extends": "../../tsconfig.json",
- "compilerOptions": {
- "jsx": "react"
- }
-}
diff --git a/scripts/generateReport.ts b/scripts/generateReport.ts
index 5cab1b46e..9502d382e 100644
--- a/scripts/generateReport.ts
+++ b/scripts/generateReport.ts
@@ -16,11 +16,7 @@
* along with this program. If not, see .
*/
-/* eslint-disable no-fallthrough */
-
-// eslint-disable-next-line spaced-comment
///
-// eslint-disable-next-line spaced-comment
///
import { createHmac } from "crypto";
@@ -58,14 +54,17 @@ async function maybeGetError(handle: JSHandle): Promise {
.catch(() => undefined);
}
+interface PatchInfo {
+ plugin: string;
+ type: string;
+ id: string;
+ match: string;
+ error?: string;
+};
+
const report = {
- badPatches: [] as {
- plugin: string;
- type: string;
- id: string;
- match: string;
- error?: string;
- }[],
+ badPatches: [] as PatchInfo[],
+ slowPatches: [] as PatchInfo[],
badStarts: [] as {
plugin: string;
error: string;
@@ -136,53 +135,67 @@ async function printReport() {
console.log();
if (process.env.WEBHOOK_URL) {
+ const patchesToEmbed = (title: string, patches: PatchInfo[], color: number) => ({
+ title,
+ color,
+ description: patches.map(p => {
+ const lines = [
+ `**__${p.plugin} (${p.type}):__**`,
+ `ID: \`${p.id}\``,
+ `Match: ${toCodeBlock(p.match, "Match: ".length, true)}`
+ ];
+ if (p.error) lines.push(`Error: ${toCodeBlock(p.error, "Error: ".length, true)}`);
+
+ return lines.join("\n");
+ }).join("\n\n"),
+ });
+
+ const embeds = [
+ {
+ author: {
+ name: `Discord ${CANARY ? "Canary" : "Stable"} (${metaData.buildNumber})`,
+ url: `https://nelly.tools/builds/app/${metaData.buildHash}`,
+ icon_url: CANARY ? "https://cdn.discordapp.com/emojis/1252721945699549327.png?size=128" : "https://cdn.discordapp.com/emojis/1252721943463985272.png?size=128"
+ },
+ color: CANARY ? 0xfbb642 : 0x5865f2
+ },
+ report.badPatches.length > 0 && patchesToEmbed("Bad Patches", report.badPatches, 0xff0000),
+ report.slowPatches.length > 0 && patchesToEmbed("Slow Patches", report.slowPatches, 0xf0b232),
+ report.badWebpackFinds.length > 0 && {
+ title: "Bad Webpack Finds",
+ description: report.badWebpackFinds.map(f => toCodeBlock(f, 0, true)).join("\n") || "None",
+ color: 0xff0000
+ },
+ report.badStarts.length > 0 && {
+ title: "Bad Starts",
+ description: report.badStarts.map(p => {
+ const lines = [
+ `**__${p.plugin}:__**`,
+ toCodeBlock(p.error, 0, true)
+ ];
+ return lines.join("\n");
+ }
+ ).join("\n\n") || "None",
+ color: 0xff0000
+ },
+ report.otherErrors.length > 0 && {
+ title: "Discord Errors",
+ description: report.otherErrors.length ? toCodeBlock(report.otherErrors.join("\n"), 0, true) : "None",
+ color: 0xff0000
+ }
+ ].filter(Boolean);
+
+ if (embeds.length === 1) {
+ embeds.push({
+ title: "No issues found",
+ description: "Seems like everything is working fine (for now) <:shipit:1330992641466433556>",
+ color: 0x00ff00
+ });
+ }
+
const body = JSON.stringify({
username: "Vencord Reporter" + (CANARY ? " (Canary)" : ""),
- embeds: [
- {
- author: {
- name: `Discord ${CANARY ? "Canary" : "Stable"} (${metaData.buildNumber})`,
- url: `https://nelly.tools/builds/app/${metaData.buildHash}`,
- icon_url: CANARY ? "https://cdn.discordapp.com/emojis/1252721945699549327.png?size=128" : "https://cdn.discordapp.com/emojis/1252721943463985272.png?size=128"
- },
- color: CANARY ? 0xfbb642 : 0x5865f2
- },
- {
- title: "Bad Patches",
- description: report.badPatches.map(p => {
- const lines = [
- `**__${p.plugin} (${p.type}):__**`,
- `ID: \`${p.id}\``,
- `Match: ${toCodeBlock(p.match, "Match: ".length, true)}`
- ];
- if (p.error) lines.push(`Error: ${toCodeBlock(p.error, "Error: ".length, true)}`);
- return lines.join("\n");
- }).join("\n\n") || "None",
- color: report.badPatches.length ? 0xff0000 : 0x00ff00
- },
- {
- title: "Bad Webpack Finds",
- description: report.badWebpackFinds.map(f => toCodeBlock(f, 0, true)).join("\n") || "None",
- color: report.badWebpackFinds.length ? 0xff0000 : 0x00ff00
- },
- {
- title: "Bad Starts",
- description: report.badStarts.map(p => {
- const lines = [
- `**__${p.plugin}:__**`,
- toCodeBlock(p.error, 0, true)
- ];
- return lines.join("\n");
- }
- ).join("\n\n") || "None",
- color: report.badStarts.length ? 0xff0000 : 0x00ff00
- },
- {
- title: "Discord Errors",
- description: report.otherErrors.length ? toCodeBlock(report.otherErrors.join("\n"), 0, true) : "None",
- color: report.otherErrors.length ? 0xff0000 : 0x00ff00
- }
- ]
+ embeds
});
const headers = {
@@ -249,14 +262,17 @@ page.on("console", async e => {
switch (tag) {
case "WebpackInterceptor:":
- const patchFailMatch = message.match(/Patch by (.+?) (had no effect|errored|found no module|took [\d.]+?ms) \(Module id is (.+?)\): (.+)/)!;
- if (!patchFailMatch) break;
+ const patchFailMatch = message.match(/Patch by (.+?) (had no effect|errored|found no module) \(Module id is (.+?)\): (.+)/);
+ const patchSlowMatch = message.match(/Patch by (.+?) (took [\d.]+?ms) \(Module id is (.+?)\): (.+)/);
+ const match = patchFailMatch ?? patchSlowMatch;
+ if (!match) break;
logStderr(await getText());
process.exitCode = 1;
- const [, plugin, type, id, regex] = patchFailMatch;
- report.badPatches.push({
+ const [, plugin, type, id, regex] = match;
+ const list = patchFailMatch ? report.badPatches : report.slowPatches;
+ list.push({
plugin,
type,
id,
diff --git a/src/VencordNative.ts b/src/VencordNative.ts
index 42e697452..3bed5a592 100644
--- a/src/VencordNative.ts
+++ b/src/VencordNative.ts
@@ -4,11 +4,11 @@
* SPDX-License-Identifier: GPL-3.0-or-later
*/
+import type { Settings } from "@api/Settings";
import { PluginIpcMappings } from "@main/ipcPlugins";
import type { UserThemeHeader } from "@main/themes";
import { IpcEvents } from "@shared/IpcEvents";
import { IpcRes } from "@utils/types";
-import type { Settings } from "api/Settings";
import { ipcRenderer } from "electron";
function invoke(event: IpcEvents, ...args: any[]) {
diff --git a/src/components/VencordSettings/PatchHelperTab.tsx b/src/components/VencordSettings/PatchHelperTab.tsx
index f3a8e1ddf..f930a40d2 100644
--- a/src/components/VencordSettings/PatchHelperTab.tsx
+++ b/src/components/VencordSettings/PatchHelperTab.tsx
@@ -65,7 +65,7 @@ function ReplacementComponent({ module, match, replacement, setReplacementError
}
const canonicalMatch = canonicalizeMatch(new RegExp(match));
try {
- const canonicalReplace = canonicalizeReplace(replacement, "YourPlugin");
+ const canonicalReplace = canonicalizeReplace(replacement, 'Vencord.Plugins.plugins["YourPlugin"]');
var patched = src.replace(canonicalMatch, canonicalReplace as string);
setReplacementError(void 0);
} catch (e) {
diff --git a/src/debug/loadLazyChunks.ts b/src/debug/loadLazyChunks.ts
index 212078553..f8c71caea 100644
--- a/src/debug/loadLazyChunks.ts
+++ b/src/debug/loadLazyChunks.ts
@@ -8,7 +8,7 @@ import { Logger } from "@utils/Logger";
import { canonicalizeMatch } from "@utils/patches";
import * as Webpack from "@webpack";
import { wreq } from "@webpack";
-import { AnyModuleFactory, ModuleFactory } from "webpack";
+import { AnyModuleFactory, ModuleFactory } from "@webpack/wreq.d";
export async function loadLazyChunks() {
const LazyChunkLoaderLogger = new Logger("LazyChunkLoader");
@@ -20,8 +20,7 @@ export async function loadLazyChunks() {
const invalidChunks = new Set();
const deferredRequires = new Set();
- let chunksSearchingResolve: (value: void) => void;
- const chunksSearchingDone = new Promise(r => chunksSearchingResolve = r);
+ const { promise: chunksSearchingDone, resolve: chunksSearchingResolve } = Promise.withResolvers();
// True if resolved, false otherwise
const chunksSearchPromises = [] as Array<() => boolean>;
@@ -69,7 +68,7 @@ export async function loadLazyChunks() {
const isWorkerAsset = await fetch(wreq.p + wreq.u(id))
.then(r => r.text())
- .then(t => t.includes("importScripts("));
+ .then(t => /importScripts\(|self\.postMessage/.test(t));
if (isWorkerAsset) {
invalidChunks.add(id);
@@ -140,8 +139,8 @@ export async function loadLazyChunks() {
}
Webpack.factoryListeners.add(factoryListener);
- for (const factoryId in wreq.m) {
- factoryListener(wreq.m[factoryId]);
+ for (const moduleId in wreq.m) {
+ factoryListener(wreq.m[moduleId]);
}
await chunksSearchingDone;
@@ -175,7 +174,7 @@ export async function loadLazyChunks() {
await Promise.all(chunksLeft.map(async id => {
const isWorkerAsset = await fetch(wreq.p + wreq.u(id))
.then(r => r.text())
- .then(t => t.includes("importScripts("));
+ .then(t => /importScripts\(|self\.postMessage/.test(t));
// Loads the chunk. Currently this only happens with the language packs which are loaded differently
if (!isWorkerAsset) {
diff --git a/src/debug/runReporter.ts b/src/debug/runReporter.ts
index 8d4194bc4..2ca83b7fa 100644
--- a/src/debug/runReporter.ts
+++ b/src/debug/runReporter.ts
@@ -6,9 +6,9 @@
import { Logger } from "@utils/Logger";
import * as Webpack from "@webpack";
-import { addPatch, patches } from "plugins";
-import { getBuildNumber } from "webpack/patchWebpack";
+import { getBuildNumber, patchTimings } from "@webpack/patcher";
+import { addPatch, patches } from "../plugins";
import { loadLazyChunks } from "./loadLazyChunks";
async function runReporter() {
@@ -17,8 +17,7 @@ async function runReporter() {
try {
ReporterLogger.log("Starting test...");
- let loadLazyChunksResolve: (value: void) => void;
- const loadLazyChunksDone = new Promise(r => loadLazyChunksResolve = r);
+ const { promise: loadLazyChunksDone, resolve: loadLazyChunksResolve } = Promise.withResolvers();
// The main patch for starting the reporter chunk loading
addPatch({
@@ -51,7 +50,7 @@ async function runReporter() {
}
}
- for (const [plugin, moduleId, match, totalTime] of Vencord.WebpackPatcher.patchTimings) {
+ for (const [plugin, moduleId, match, totalTime] of patchTimings) {
if (totalTime > 5) {
new Logger("WebpackInterceptor").warn(`Patch by ${plugin} took ${Math.round(totalTime * 100) / 100}ms (Module id is ${String(moduleId)}): ${match}`);
}
@@ -79,9 +78,9 @@ async function runReporter() {
result = await Webpack.extractAndLoadChunks(code, matcher);
if (result === false) result = null;
} else if (method === "mapMangledModule") {
- const [code, mapper] = args;
+ const [code, mapper, includeBlacklistedExports] = args;
- result = Webpack.mapMangledModule(code, mapper);
+ result = Webpack.mapMangledModule(code, mapper, includeBlacklistedExports);
if (Object.keys(result).length !== Object.keys(mapper).length) throw new Error("Webpack Find Fail");
} else {
// @ts-ignore
diff --git a/src/plugins/_api/dynamicImageModalApi.ts b/src/plugins/_api/dynamicImageModalApi.ts
index 2ce51400d..4d74cff24 100644
--- a/src/plugins/_api/dynamicImageModalApi.ts
+++ b/src/plugins/_api/dynamicImageModalApi.ts
@@ -16,8 +16,8 @@ export default definePlugin({
{
find: "SCALE_DOWN:",
replacement: {
- match: /!\(null==(\i)\|\|0===\i\|\|null==(\i)\|\|0===\i\)/,
- replace: (_, width, height) => `!((null == ${width} || 0 === ${width}) && (null == ${height} || 0 === ${height}))`
+ match: /(?<="IMAGE"===\i\?)\i(?=\?)/,
+ replace: "true"
}
}
]
diff --git a/src/plugins/_core/noTrack.ts b/src/plugins/_core/noTrack.ts
index 58d8d42a3..30920a067 100644
--- a/src/plugins/_core/noTrack.ts
+++ b/src/plugins/_core/noTrack.ts
@@ -20,7 +20,7 @@ import { definePluginSettings } from "@api/Settings";
import { Devs } from "@utils/constants";
import { Logger } from "@utils/Logger";
import definePlugin, { OptionType, StartAt } from "@utils/types";
-import { WebpackRequire } from "webpack";
+import { WebpackRequire } from "@webpack/wreq.d";
const settings = definePluginSettings({
disableAnalytics: {
diff --git a/src/plugins/_core/settings.tsx b/src/plugins/_core/settings.tsx
index f48f38e03..a9e34f784 100644
--- a/src/plugins/_core/settings.tsx
+++ b/src/plugins/_core/settings.tsx
@@ -158,6 +158,9 @@ export default definePlugin({
aboveActivity: getIntlMessage("ACTIVITY_SETTINGS")
};
+ if (!names[settingsLocation] || names[settingsLocation].endsWith("_SETTINGS"))
+ return firstChild === "PREMIUM";
+
return header === names[settingsLocation];
} catch {
return firstChild === "PREMIUM";
diff --git a/src/plugins/accountPanelServerProfile/index.tsx b/src/plugins/accountPanelServerProfile/index.tsx
index a2fed5d79..c347cc982 100644
--- a/src/plugins/accountPanelServerProfile/index.tsx
+++ b/src/plugins/accountPanelServerProfile/index.tsx
@@ -85,7 +85,7 @@ export default definePlugin({
replace: "$&onRequestClose:$self.onPopoutClose,"
},
{
- match: /(?<=\.avatarWrapper,)/,
+ match: /(?<=#{intl::SET_STATUS}\),)/,
replace: "ref:$self.accountPanelRef,onContextMenu:$self.openAccountPanelContextMenu,"
}
]
diff --git a/src/plugins/betterFolders/index.tsx b/src/plugins/betterFolders/index.tsx
index 39c109656..ded8b6114 100644
--- a/src/plugins/betterFolders/index.tsx
+++ b/src/plugins/betterFolders/index.tsx
@@ -185,8 +185,8 @@ export default definePlugin({
{
// Decide if we should render the expanded folder background if we are rendering the Better Folders sidebar
predicate: () => settings.store.showFolderIcon !== FolderIconDisplay.Always,
- match: /(?<=\.isExpanded\),children:\[)/,
- replace: "$self.shouldShowFolderIconAndBackground(!!arguments[0]?.isBetterFolders,arguments[0]?.betterFoldersExpandedIds)&&"
+ match: /\.isExpanded\),.{0,30}children:\[/,
+ replace: "$&$self.shouldShowFolderIconAndBackground(!!arguments[0]?.isBetterFolders,arguments[0]?.betterFoldersExpandedIds)&&"
},
{
// Decide if we should render the expanded folder icon if we are rendering the Better Folders sidebar
diff --git a/src/plugins/betterUploadButton/index.ts b/src/plugins/betterUploadButton/index.ts
index c08d43282..29827a5e9 100644
--- a/src/plugins/betterUploadButton/index.ts
+++ b/src/plugins/betterUploadButton/index.ts
@@ -26,10 +26,18 @@ export default definePlugin({
patches: [
{
find: '"ChannelAttachButton"',
- replacement: {
- match: /\.attachButtonInner,"aria-label":.{0,50},onDoubleClick:(.+?:void 0),.{0,30}?\.\.\.(\i),/,
- replace: "$&onClick:$1,onContextMenu:$2.onClick,",
- },
+ replacement: [
+ {
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
+ match: /\.attachButtonInner,"aria-label":.{0,50},onDoubleClick:(.+?:void 0),.{0,30}?\.\.\.(\i),/,
+ replace: "$&onClick:$1,onContextMenu:$2.onClick,",
+ noWarn: true
+ },
+ {
+ match: /\.attachButtonInner,"aria-label":.{0,50},onDoubleClick:(.+?:void 0),.{0,100}\},(\i)\).{0,100}children:\i/,
+ replace: "$&,onClick:$1,onContextMenu:$2.onClick,",
+ },
+ ]
},
],
});
diff --git a/src/plugins/decor/index.tsx b/src/plugins/decor/index.tsx
index 69a7a1a59..4801cf753 100644
--- a/src/plugins/decor/index.tsx
+++ b/src/plugins/decor/index.tsx
@@ -50,12 +50,24 @@ export default definePlugin({
find: ".decorationGridItem,",
replacement: [
{
- match: /(?<==)\i=>{let{children.{20,100}decorationGridItem/,
- replace: "$self.DecorationGridItem=$&"
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
+ match: /(?<==)\i=>{let{children.{20,200}decorationGridItem/,
+ replace: "$self.DecorationGridItem=$&",
+ noWarn: true
},
{
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
match: /(?<==)\i=>{let{user:\i,avatarDecoration/,
- replace: "$self.DecorationGridDecoration=$&"
+ replace: "$self.DecorationGridDecoration=$&",
+ noWarn: true
+ },
+ {
+ match: /(?<==)\i=>{var{children.{20,200}decorationGridItem/,
+ replace: "$self.DecorationGridItem=$&",
+ },
+ {
+ match: /(?<==)\i=>{var{user:\i,avatarDecoration/,
+ replace: "$self.DecorationGridDecoration=$&",
},
// Remove NEW label from decor avatar decorations
{
diff --git a/src/plugins/decor/ui/components/DecorationContextMenu.tsx b/src/plugins/decor/ui/components/DecorationContextMenu.tsx
index 7451bb229..7c1542f65 100644
--- a/src/plugins/decor/ui/components/DecorationContextMenu.tsx
+++ b/src/plugins/decor/ui/components/DecorationContextMenu.tsx
@@ -5,7 +5,7 @@
*/
import { CopyIcon, DeleteIcon } from "@components/Icons";
-import { Alerts, Clipboard, ContextMenuApi, Menu, UserStore } from "webpack/common";
+import { Alerts, Clipboard, ContextMenuApi, Menu, UserStore } from "@webpack/common";
import { Decoration } from "../../lib/api";
import { useCurrentUserDecorationsStore } from "../../lib/stores/CurrentUserDecorationsStore";
diff --git a/src/plugins/devCompanion.dev/index.tsx b/src/plugins/devCompanion.dev/index.tsx
index d6a56fe69..4ac2e993d 100644
--- a/src/plugins/devCompanion.dev/index.tsx
+++ b/src/plugins/devCompanion.dev/index.tsx
@@ -173,7 +173,7 @@ function initWs(isManual = false) {
try {
const matcher = canonicalizeMatch(parseNode(match));
- const replacement = canonicalizeReplace(parseNode(replace), "PlaceHolderPluginName");
+ const replacement = canonicalizeReplace(parseNode(replace), 'Vencord.Plugins.plugins["PlaceHolderPluginName"]');
const newSource = src.replace(matcher, replacement as string);
diff --git a/src/plugins/fixSpotifyEmbeds.desktop/native.ts b/src/plugins/fixSpotifyEmbeds.desktop/native.ts
index e15e4a441..79602609c 100644
--- a/src/plugins/fixSpotifyEmbeds.desktop/native.ts
+++ b/src/plugins/fixSpotifyEmbeds.desktop/native.ts
@@ -9,7 +9,7 @@ import { app } from "electron";
app.on("browser-window-created", (_, win) => {
win.webContents.on("frame-created", (_, { frame }) => {
- frame.once("dom-ready", () => {
+ frame?.once("dom-ready", () => {
if (frame.url.startsWith("https://open.spotify.com/embed/")) {
const settings = RendererSettings.store.plugins?.FixSpotifyEmbeds;
if (!settings?.enabled) return;
diff --git a/src/plugins/fixYoutubeEmbeds.desktop/native.ts b/src/plugins/fixYoutubeEmbeds.desktop/native.ts
index 003cba9e3..950940b06 100644
--- a/src/plugins/fixYoutubeEmbeds.desktop/native.ts
+++ b/src/plugins/fixYoutubeEmbeds.desktop/native.ts
@@ -9,7 +9,7 @@ import { app } from "electron";
app.on("browser-window-created", (_, win) => {
win.webContents.on("frame-created", (_, { frame }) => {
- frame.once("dom-ready", () => {
+ frame?.once("dom-ready", () => {
if (frame.url.startsWith("https://www.youtube.com/")) {
const settings = RendererSettings.store.plugins?.FixYoutubeEmbeds;
if (!settings?.enabled) return;
diff --git a/src/plugins/friendInvites/index.ts b/src/plugins/friendInvites/index.ts
index 3c5a324fd..0af611bc9 100644
--- a/src/plugins/friendInvites/index.ts
+++ b/src/plugins/friendInvites/index.ts
@@ -31,7 +31,7 @@ export default definePlugin({
{
name: "create friend invite",
description: "Generates a friend invite link.",
- inputType: ApplicationCommandInputType.BOT,
+ inputType: ApplicationCommandInputType.BUILT_IN,
execute: async (args, ctx) => {
const invite = await FriendInvites.createFriendInvite();
@@ -48,7 +48,7 @@ export default definePlugin({
{
name: "view friend invites",
description: "View a list of all generated friend invites.",
- inputType: ApplicationCommandInputType.BOT,
+ inputType: ApplicationCommandInputType.BUILT_IN,
execute: async (_, ctx) => {
const invites = await FriendInvites.getAllFriendInvites();
const friendInviteList = invites.map(i =>
@@ -67,7 +67,7 @@ export default definePlugin({
{
name: "revoke friend invites",
description: "Revokes all generated friend invites.",
- inputType: ApplicationCommandInputType.BOT,
+ inputType: ApplicationCommandInputType.BUILT_IN,
execute: async (_, ctx) => {
await FriendInvites.revokeFriendInvites();
diff --git a/src/plugins/ignoreActivities/index.tsx b/src/plugins/ignoreActivities/index.tsx
index d21f05799..9e9610f6a 100644
--- a/src/plugins/ignoreActivities/index.tsx
+++ b/src/plugins/ignoreActivities/index.tsx
@@ -12,7 +12,7 @@ import { Devs } from "@utils/constants";
import { Margins } from "@utils/margins";
import definePlugin, { OptionType } from "@utils/types";
import { findStoreLazy } from "@webpack";
-import { Button, Forms, showToast, TextInput, Toasts, Tooltip, useEffect, useState } from "webpack/common";
+import { Button, Forms, showToast, TextInput, Toasts, Tooltip, useEffect, useState } from "@webpack/common";
const enum ActivitiesTypes {
Game,
diff --git a/src/plugins/implicitRelationships/index.ts b/src/plugins/implicitRelationships/index.ts
index cfc3818dd..f0be9ee54 100644
--- a/src/plugins/implicitRelationships/index.ts
+++ b/src/plugins/implicitRelationships/index.ts
@@ -34,7 +34,7 @@ export default definePlugin({
{
find: "#{intl::FRIENDS_ALL_HEADER}",
replacement: {
- match: /toString\(\)\}\);case (\i\.\i)\.BLOCKED/,
+ match: /toString\(\)\}\);case (\i\.\i)\.PENDING/,
replace: 'toString()});case $1.IMPLICIT:return "Implicit — "+arguments[1];case $1.BLOCKED'
},
},
@@ -50,7 +50,7 @@ export default definePlugin({
{
find: "#{intl::FRIENDS_SECTION_ONLINE}",
replacement: {
- match: /,{id:(\i\.\i)\.BLOCKED,show:.+?className:(\i\.item)/,
+ match: /,{id:(\i\.\i)\.PENDING,show:.+?className:(\i\.item)/,
replace: (rest, relationShipTypes, className) => `,{id:${relationShipTypes}.IMPLICIT,show:true,className:${className},content:"Implicit"}${rest}`
}
},
@@ -58,7 +58,7 @@ export default definePlugin({
{
find: '"FriendsStore"',
replacement: {
- match: /(?<=case (\i\.\i)\.BLOCKED:return (\i)\.type===\i\.\i\.BLOCKED)/,
+ match: /(?<=case (\i\.\i)\.SUGGESTIONS:return \d+===(\i)\.type)/,
replace: ";case $1.IMPLICIT:return $2.type===5"
},
},
diff --git a/src/plugins/index.ts b/src/plugins/index.ts
index e1899b743..4a2688681 100644
--- a/src/plugins/index.ts
+++ b/src/plugins/index.ts
@@ -31,6 +31,7 @@ import { Logger } from "@utils/Logger";
import { canonicalizeFind, canonicalizeReplacement } from "@utils/patches";
import { Patch, Plugin, PluginDef, ReporterTestable, StartAt } from "@utils/types";
import { FluxDispatcher } from "@webpack/common";
+import { patches } from "@webpack/patcher";
import { FluxEvents } from "@webpack/types";
import Plugins from "~plugins";
@@ -41,7 +42,7 @@ const logger = new Logger("PluginManager", "#a6d189");
export const PMLogger = logger;
export const plugins = Plugins;
-export const patches = [] as Patch[];
+export { patches };
/** Whether we have subscribed to flux events of all the enabled plugins when FluxDispatcher was ready */
let enabledPluginsSubscribedFlux = false;
diff --git a/src/plugins/memberCount/index.tsx b/src/plugins/memberCount/index.tsx
index 67bbc4ce8..ad7491cc3 100644
--- a/src/plugins/memberCount/index.tsx
+++ b/src/plugins/memberCount/index.tsx
@@ -65,10 +65,18 @@ export default definePlugin({
patches: [
{
find: "{isSidebarVisible:",
- replacement: {
- match: /(?<=let\{className:(\i),.+?children):\[(\i\.useMemo[^}]+"aria-multiselectable")/,
- replace: ":[$1?.startsWith('members')?$self.render():null,$2"
- },
+ replacement: [
+ {
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
+ match: /(?<=let\{className:(\i),.+?children):\[(\i\.useMemo[^}]+"aria-multiselectable")/,
+ replace: ":[$1?.startsWith('members')?$self.render():null,$2",
+ noWarn: true
+ },
+ {
+ match: /(?<=var\{className:(\i),.+?children):\[(\i\.useMemo[^}]+"aria-multiselectable")/,
+ replace: ":[$1?.startsWith('members')?$self.render():null,$2",
+ },
+ ],
predicate: () => settings.store.memberList
},
{
diff --git a/src/plugins/roleColorEverywhere/index.tsx b/src/plugins/roleColorEverywhere/index.tsx
index 7b7bcc44d..ffa2b5a25 100644
--- a/src/plugins/roleColorEverywhere/index.tsx
+++ b/src/plugins/roleColorEverywhere/index.tsx
@@ -84,8 +84,14 @@ export default definePlugin({
find: ".USER_MENTION)",
replacement: [
{
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
match: /onContextMenu:\i,color:\i,\.\.\.\i(?=,children:)(?<=user:(\i),channel:(\i).{0,500}?)/,
- replace: "$&,color:$self.getColorInt($1?.id,$2?.id)"
+ replace: "$&,color:$self.getColorInt($1?.id,$2?.id)",
+ noWarn: true
+ },
+ {
+ match: /(?<=onContextMenu:\i,color:)\i(?=\},\i\),\{children)(?<=user:(\i),channel:(\i).{0,500}?)/,
+ replace: "$self.getColorInt($1?.id,$2?.id)",
}
],
predicate: () => settings.store.chatMentions
diff --git a/src/plugins/shikiCodeblocks.desktop/shiki.css b/src/plugins/shikiCodeblocks.desktop/shiki.css
index 3f43b4c42..32bf1c2e9 100644
--- a/src/plugins/shikiCodeblocks.desktop/shiki.css
+++ b/src/plugins/shikiCodeblocks.desktop/shiki.css
@@ -96,6 +96,6 @@
.vc-shiki-root .vc-shiki-table-cell:last-child {
padding-left: 8px;
- word-break: break-word;
+ overflow-wrap: break-word;
width: 100%;
}
diff --git a/src/plugins/showHiddenChannels/index.tsx b/src/plugins/showHiddenChannels/index.tsx
index ccaff2ad8..7a38bb123 100644
--- a/src/plugins/showHiddenChannels/index.tsx
+++ b/src/plugins/showHiddenChannels/index.tsx
@@ -173,7 +173,7 @@ export default definePlugin({
replacement: [
// Make the channel appear as muted if it's hidden
{
- match: /{channel:(\i),name:\i,muted:(\i).+?;/,
+ match: /\.subtitle,.+?;(?=return\(0,\i\.jsxs?\))(?<={channel:(\i),name:\i,muted:(\i).+?;)/,
replace: (m, channel, muted) => `${m}${muted}=$self.isHiddenChannel(${channel})?true:${muted};`
},
// Add the hidden eye icon if the channel is hidden
@@ -204,7 +204,7 @@ export default definePlugin({
{
// Hide unreads
predicate: () => settings.store.hideUnreads === true,
- match: /{channel:(\i),name:\i,.+?unread:(\i).+?;/,
+ match: /\.subtitle,.+?;(?=return\(0,\i\.jsxs?\))(?<={channel:(\i),name:\i,.+?unread:(\i).+?)/,
replace: (m, channel, unread) => `${m}${unread}=$self.isHiddenChannel(${channel})?false:${unread};`
}
]
@@ -485,7 +485,7 @@ export default definePlugin({
}
},
{
- find: '="NowPlayingViewStore",',
+ find: '"NowPlayingViewStore"',
replacement: {
// Make active now voice states on hidden channels
match: /(getVoiceStateForUser.{0,150}?)&&\i\.\i\.canWithPartialContext.{0,20}VIEW_CHANNEL.+?}\)(?=\?)/,
diff --git a/src/plugins/spotifyControls/SpotifyStore.ts b/src/plugins/spotifyControls/SpotifyStore.ts
index 5c0c5fe4e..65ee2c154 100644
--- a/src/plugins/spotifyControls/SpotifyStore.ts
+++ b/src/plugins/spotifyControls/SpotifyStore.ts
@@ -77,7 +77,7 @@ export const SpotifyStore = proxyLazyWebpack(() => {
class SpotifyStore extends Store {
public mPosition = 0;
- private start = 0;
+ public _start = 0;
public track: Track | null = null;
public device: Device | null = null;
@@ -100,26 +100,26 @@ export const SpotifyStore = proxyLazyWebpack(() => {
public get position(): number {
let pos = this.mPosition;
if (this.isPlaying) {
- pos += Date.now() - this.start;
+ pos += Date.now() - this._start;
}
return pos;
}
public set position(p: number) {
this.mPosition = p;
- this.start = Date.now();
+ this._start = Date.now();
}
prev() {
- this.req("post", "/previous");
+ this._req("post", "/previous");
}
next() {
- this.req("post", "/next");
+ this._req("post", "/next");
}
setVolume(percent: number) {
- this.req("put", "/volume", {
+ this._req("put", "/volume", {
query: {
volume_percent: Math.round(percent)
}
@@ -131,17 +131,17 @@ export const SpotifyStore = proxyLazyWebpack(() => {
}
setPlaying(playing: boolean) {
- this.req("put", playing ? "/play" : "/pause");
+ this._req("put", playing ? "/play" : "/pause");
}
setRepeat(state: Repeat) {
- this.req("put", "/repeat", {
+ this._req("put", "/repeat", {
query: { state }
});
}
setShuffle(state: boolean) {
- this.req("put", "/shuffle", {
+ this._req("put", "/shuffle", {
query: { state }
}).then(() => {
this.shuffle = state;
@@ -154,7 +154,7 @@ export const SpotifyStore = proxyLazyWebpack(() => {
this.isSettingPosition = true;
- return this.req("put", "/seek", {
+ return this._req("put", "/seek", {
query: {
position_ms: Math.round(ms)
}
@@ -164,7 +164,7 @@ export const SpotifyStore = proxyLazyWebpack(() => {
});
}
- private req(method: "post" | "get" | "put", route: string, data: any = {}) {
+ _req(method: "post" | "get" | "put", route: string, data: any = {}) {
if (this.device?.is_active)
(data.query ??= {}).device_id = this.device.id;
diff --git a/src/plugins/startupTimings/index.tsx b/src/plugins/startupTimings/index.tsx
index aabc786a4..ac7f3f0c8 100644
--- a/src/plugins/startupTimings/index.tsx
+++ b/src/plugins/startupTimings/index.tsx
@@ -27,12 +27,22 @@ export default definePlugin({
authors: [Devs.Megu],
patches: [{
find: "#{intl::ACTIVITY_SETTINGS}",
- replacement: {
- match: /(?<=}\)([,;])(\i\.settings)\.forEach.+?(\i)\.push.+}\)}\))/,
- replace: (_, commaOrSemi, settings, elements) => "" +
- `${commaOrSemi}${settings}?.[0]==="CHANGELOG"` +
- `&&${elements}.push({section:"StartupTimings",label:"Startup Timings",element:$self.StartupTimingPage})`
- }
+ replacement: [
+ {
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
+ match: /(?<=}\)([,;])(\i\.settings)\.forEach.+?(\i)\.push.+}\)}\))/,
+ replace: (_, commaOrSemi, settings, elements) => "" +
+ `${commaOrSemi}${settings}?.[0]==="CHANGELOG"` +
+ `&&${elements}.push({section:"StartupTimings",label:"Startup Timings",element:$self.StartupTimingPage})`,
+ noWarn: true
+ },
+ {
+ match: /(?<=}\)([,;])(\i\.settings)\.forEach.+?(\i)\.push.+\)\)\}\))(?=\)\})/,
+ replace: (_, commaOrSemi, settings, elements) => "" +
+ `${commaOrSemi}${settings}?.[0]==="CHANGELOG"` +
+ `&&${elements}.push({section:"StartupTimings",label:"Startup Timings",element:$self.StartupTimingPage})`,
+ },
+ ]
}],
StartupTimingPage
});
diff --git a/src/plugins/userMessagesPronouns/index.ts b/src/plugins/userMessagesPronouns/index.ts
index 27b162b90..1699251ee 100644
--- a/src/plugins/userMessagesPronouns/index.ts
+++ b/src/plugins/userMessagesPronouns/index.ts
@@ -41,11 +41,20 @@ export default definePlugin({
},
{
find: '="SYSTEM_TAG"',
- replacement: {
- // Add next to username (compact mode)
- match: /className:\i\(\)\(\i\.className(?:,\i\.clickable)?,\i\)}\),(?=\i)/g,
- replace: "$&$self.CompactPronounsChatComponentWrapper(arguments[0]),"
- }
+ replacement: [
+ {
+ // Add next to username (compact mode)
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
+ match: /className:\i\(\)\(\i\.className(?:,\i\.clickable)?,\i\)}\),(?=\i)/g,
+ replace: "$&$self.CompactPronounsChatComponentWrapper(arguments[0]),",
+ noWarn: true
+ },
+ {
+ // Add next to username (compact mode)
+ match: /className:\i\(\)\(\i\.className(?:,\i\.clickable)?,\i\)}\)\),(?=\i)/g,
+ replace: "$&$self.CompactPronounsChatComponentWrapper(arguments[0]),",
+ },
+ ]
}
],
diff --git a/src/plugins/userVoiceShow/components.tsx b/src/plugins/userVoiceShow/components.tsx
index 4666bb907..9029cdc58 100644
--- a/src/plugins/userVoiceShow/components.tsx
+++ b/src/plugins/userVoiceShow/components.tsx
@@ -128,7 +128,7 @@ function VoiceChannelTooltip({ channel, isLocked }: VoiceChannelTooltipProps) {
);
}
-interface VoiceChannelIndicatorProps {
+export interface VoiceChannelIndicatorProps {
userId: string;
isActionButton?: boolean;
shouldHighlight?: boolean;
diff --git a/src/plugins/viewIcons/index.tsx b/src/plugins/viewIcons/index.tsx
index 12ee18e14..afd9d48c5 100644
--- a/src/plugins/viewIcons/index.tsx
+++ b/src/plugins/viewIcons/index.tsx
@@ -193,10 +193,18 @@ export default definePlugin({
// Avatar component used in User DMs "User Profile" popup in the right and Profiles Modal pfp
{
find: ".overlay:void 0,status:",
- replacement: {
- match: /avatarSrc:(\i),eventHandlers:(\i).+?"div",{...\2,/,
- replace: "$&style:{cursor:\"pointer\"},onClick:()=>{$self.openAvatar($1)},"
- },
+ replacement: [
+ {
+ // FIXME(Bundler spread transform related): Remove old compatiblity once enough time has passed, if they don't revert
+ match: /avatarSrc:(\i),eventHandlers:(\i).+?"div",{...\2,/,
+ replace: "$&style:{cursor:\"pointer\"},onClick:()=>{$self.openAvatar($1)},",
+ noWarn: true
+ },
+ {
+ match: /avatarSrc:(\i),eventHandlers:(\i).+?"div",.{0,100}className:\i,/,
+ replace: "$&style:{cursor:\"pointer\"},onClick:()=>{$self.openAvatar($1)},",
+ }
+ ],
all: true
},
// Banners
diff --git a/src/plugins/youtubeAdblock.desktop/native.ts b/src/plugins/youtubeAdblock.desktop/native.ts
index 8cc6a3232..ae05d6462 100644
--- a/src/plugins/youtubeAdblock.desktop/native.ts
+++ b/src/plugins/youtubeAdblock.desktop/native.ts
@@ -10,7 +10,7 @@ import adguard from "file://adguard.js?minify";
app.on("browser-window-created", (_, win) => {
win.webContents.on("frame-created", (_, { frame }) => {
- frame.once("dom-ready", () => {
+ frame?.once("dom-ready", () => {
if (!RendererSettings.store.plugins?.YoutubeAdblock?.enabled) return;
if (frame.url.includes("youtube.com/embed/") || (frame.url.includes("discordsays") && frame.url.includes("youtube.com"))) {
diff --git a/src/utils/discord.css b/src/utils/discord.css
index 12d15694b..746fb564b 100644
--- a/src/utils/discord.css
+++ b/src/utils/discord.css
@@ -17,7 +17,6 @@
@media(width <= 485px) {
.vc-image-modal {
- display: relative;
overflow: visible;
overflow: initial;
}
diff --git a/src/utils/lazy.ts b/src/utils/lazy.ts
index e46e44ad7..526c5514b 100644
--- a/src/utils/lazy.ts
+++ b/src/utils/lazy.ts
@@ -20,9 +20,9 @@ export function makeLazy(factory: () => T, attempts = 5): () => T {
let tries = 0;
let cache: T;
return () => {
- if (!cache && attempts > tries++) {
+ if (cache === undefined && attempts > tries++) {
cache = factory();
- if (!cache && attempts === tries)
+ if (cache === undefined && attempts === tries)
console.error("Lazy factory failed:", factory);
}
return cache;
diff --git a/src/utils/types.ts b/src/utils/types.ts
index 9b66b5c22..05f9afddb 100644
--- a/src/utils/types.ts
+++ b/src/utils/types.ts
@@ -42,7 +42,12 @@ export interface PatchReplacement {
match: string | RegExp;
/** The replacement string or function which returns the string for the patch replacement */
replace: string | ReplaceFn;
- /** A function which returns whether this patch replacement should be applied */
+ /** Do not warn if this replacement did no changes */
+ noWarn?: boolean;
+ /**
+ * A function which returns whether this patch replacement should be applied.
+ * This is ran before patches are registered, so if this returns false, the patch will never be registered.
+ */
predicate?(): boolean;
/** The minimum build number for this patch to be applied */
fromBuild?: number;
@@ -62,7 +67,10 @@ export interface Patch {
noWarn?: boolean;
/** Only apply this set of replacements if all of them succeed. Use this if your replacements depend on each other */
group?: boolean;
- /** A function which returns whether this patch should be applied */
+ /**
+ * A function which returns whether this patch replacement should be applied.
+ * This is ran before patches are registered, so if this returns false, the patch will never be registered.
+ */
predicate?(): boolean;
/** The minimum build number for this patch to be applied */
fromBuild?: number;
diff --git a/src/webpack/common/components.ts b/src/webpack/common/components.ts
index e31e167e8..2681d51d3 100644
--- a/src/webpack/common/components.ts
+++ b/src/webpack/common/components.ts
@@ -41,7 +41,7 @@ export const Switch = waitForComponent("Switch", filters.componentByCo
const Tooltips = mapMangledModuleLazy(".tooltipTop,bottom:", {
Tooltip: filters.componentByCode("this.renderTooltip()]"),
- TooltipContainer: filters.componentByCode('="div",')
+ TooltipContainer: filters.componentByCode('="div"')
}) as {
Tooltip: t.Tooltip,
TooltipContainer: t.TooltipContainer;
diff --git a/src/webpack/common/stores.ts b/src/webpack/common/stores.ts
index 9e5dad159..a59ae2130 100644
--- a/src/webpack/common/stores.ts
+++ b/src/webpack/common/stores.ts
@@ -29,7 +29,7 @@ export type GenericStore = t.FluxStore & Record;
export const DraftType = findByPropsLazy("ChannelMessage", "SlashCommand");
-export let MessageStore: Omit & {
+export let MessageStore: Omit & GenericStore & {
getMessages(chanId: string): any;
};
diff --git a/src/webpack/common/types/components.d.ts b/src/webpack/common/types/components.d.ts
index 8113e826a..469cd4289 100644
--- a/src/webpack/common/types/components.d.ts
+++ b/src/webpack/common/types/components.d.ts
@@ -496,7 +496,7 @@ export type Avatar = ComponentType>;
type FocusLock = ComponentType;
+ containerRef: Ref;
}>>;
export type Icon = ComponentType.
*/
-import { DraftType } from "@webpack/common";
import { Channel, Guild, Role } from "discord-types/general";
import { FluxDispatcher, FluxEvents } from "./utils";
@@ -234,7 +233,7 @@ export class PopoutWindowStore extends FluxStore {
}
export type useStateFromStores = (
- stores: t.FluxStore[],
+ stores: any[],
mapper: () => T,
dependencies?: any,
isEqual?: (old: T, newer: T) => boolean
diff --git a/src/webpack/common/utils.ts b/src/webpack/common/utils.ts
index fe0668885..fd555c217 100644
--- a/src/webpack/common/utils.ts
+++ b/src/webpack/common/utils.ts
@@ -16,7 +16,6 @@
* along with this program. If not, see .
*/
-import { runtimeHashMessageKey } from "@utils/intlHash";
import type { Channel } from "discord-types/general";
// eslint-disable-next-line path-alias/no-relative
@@ -58,9 +57,9 @@ export const { match, P }: Pick = ma
export const lodash: typeof import("lodash") = findByPropsLazy("debounce", "cloneDeep");
export const i18n = mapMangledModuleLazy('defaultLocale:"en-US"', {
- intl: filters.byProps("string", "format"),
- t: filters.byProps(runtimeHashMessageKey("DISCORD"))
-});
+ t: m => m?.[Symbol.toStringTag] === "IntlMessagesProxy",
+ intl: m => m != null && Object.getPrototypeOf(m)?.withFormatters != null
+}, true);
export let SnowflakeUtils: t.SnowflakeUtils;
waitFor(["fromTimestamp", "extractTimestamp"], m => SnowflakeUtils = m);
diff --git a/src/webpack/patchWebpack.ts b/src/webpack/patchWebpack.ts
index 870362373..9b66a5b4e 100644
--- a/src/webpack/patchWebpack.ts
+++ b/src/webpack/patchWebpack.ts
@@ -9,63 +9,63 @@ import { makeLazy } from "@utils/lazy";
import { Logger } from "@utils/Logger";
import { interpolateIfDefined } from "@utils/misc";
import { canonicalizeReplacement } from "@utils/patches";
-import { PatchReplacement } from "@utils/types";
+import { Patch, PatchReplacement } from "@utils/types";
import { traceFunctionWithResults } from "../debug/Tracer";
-import { patches } from "../plugins";
-import { _initWebpack, _shouldIgnoreModule, AnyModuleFactory, AnyWebpackRequire, factoryListeners, findModuleId, MaybeWrappedModuleFactory, ModuleExports, moduleListeners, waitForSubscriptions, WebpackRequire, WrappedModuleFactory, wreq } from ".";
+import { _blacklistBadModules, _initWebpack, factoryListeners, findModuleFactory, moduleListeners, waitForSubscriptions, wreq } from "./webpack";
+import { AnyModuleFactory, AnyWebpackRequire, MaybePatchedModuleFactory, PatchedModuleFactory, WebpackRequire } from "./wreq.d";
+export const patches = [] as Patch[];
+
+export const SYM_IS_PROXIED_FACTORY = Symbol("WebpackPatcher.isProxiedFactory");
export const SYM_ORIGINAL_FACTORY = Symbol("WebpackPatcher.originalFactory");
export const SYM_PATCHED_SOURCE = Symbol("WebpackPatcher.patchedSource");
export const SYM_PATCHED_BY = Symbol("WebpackPatcher.patchedBy");
-/** A set with all the Webpack instances */
export const allWebpackInstances = new Set();
-export const patchTimings = [] as Array<[plugin: string, moduleId: PropertyKey, match: string | RegExp, totalTime: number]>;
-const logger = new Logger("WebpackInterceptor", "#8caaee");
-/** Whether we tried to fallback to factory WebpackRequire, or disabled patches */
-let wreqFallbackApplied = false;
-/** Whether we should be patching factories.
- *
- * This should be disabled if we start searching for the module to get the build number, and then resumed once it's done.
- * */
-let shouldPatchFactories = true;
+export const patchTimings = [] as Array<[plugin: string, moduleId: PropertyKey, match: PatchReplacement["match"], totalTime: number]>;
export const getBuildNumber = makeLazy(() => {
try {
- shouldPatchFactories = false;
-
- try {
- if (wreq.m[128014]?.toString().includes("Trying to open a changelog for an invalid build number")) {
- const hardcodedGetBuildNumber = wreq(128014).b as () => number;
-
- if (typeof hardcodedGetBuildNumber === "function" && typeof hardcodedGetBuildNumber() === "number") {
- return hardcodedGetBuildNumber();
- }
+ function matchBuildNumber(factoryStr: string) {
+ const buildNumberMatch = factoryStr.match(/.concat\("(\d+?)"\)/);
+ if (buildNumberMatch == null) {
+ return -1;
}
- } catch { }
- const moduleId = findModuleId("Trying to open a changelog for an invalid build number");
- if (moduleId == null) {
- return -1;
+ return Number(buildNumberMatch[1]);
}
- const exports = Object.values(wreq(moduleId));
- if (exports.length !== 1 || typeof exports[0] !== "function") {
- return -1;
+ const hardcodedFactoryStr = String(wreq.m[128014]);
+ if (hardcodedFactoryStr.includes("Trying to open a changelog for an invalid build number")) {
+ const hardcodedBuildNumber = matchBuildNumber(hardcodedFactoryStr);
+
+ if (hardcodedBuildNumber !== -1) {
+ return hardcodedBuildNumber;
+ }
}
- const buildNumber = exports[0]();
- return typeof buildNumber === "number" ? buildNumber : -1;
+ const moduleFactory = findModuleFactory("Trying to open a changelog for an invalid build number");
+ return matchBuildNumber(String(moduleFactory));
} catch {
return -1;
- } finally {
- shouldPatchFactories = true;
}
});
-type Define = typeof Reflect.defineProperty;
-const define: Define = (target, p, attributes) => {
+export function getFactoryPatchedSource(moduleId: PropertyKey, webpackRequire = wreq as AnyWebpackRequire) {
+ return webpackRequire.m[moduleId]?.[SYM_PATCHED_SOURCE];
+}
+
+export function getFactoryPatchedBy(moduleId: PropertyKey, webpackRequire = wreq as AnyWebpackRequire) {
+ return webpackRequire.m[moduleId]?.[SYM_PATCHED_BY];
+}
+
+const logger = new Logger("WebpackInterceptor", "#8caaee");
+
+/** Whether we tried to fallback to the WebpackRequire of the factory, or disabled patches */
+let wreqFallbackApplied = false;
+
+const define: typeof Reflect.defineProperty = (target, p, attributes) => {
if (Object.hasOwn(attributes, "value")) {
attributes.writable = true;
}
@@ -77,22 +77,18 @@ const define: Define = (target, p, attributes) => {
});
};
-export function getOriginalFactory(id: PropertyKey, webpackRequire = wreq as AnyWebpackRequire) {
- const moduleFactory = webpackRequire.m[id];
- return (moduleFactory?.[SYM_ORIGINAL_FACTORY] ?? moduleFactory) as AnyModuleFactory | undefined;
-}
+// wreq.m is the Webpack object containing module factories. It is pre-populated with factories, and is also populated via webpackGlobal.push
+// We use this setter to intercept when wreq.m is defined and setup our setters which decide whether we should patch these module factories
+// and the Webpack instance where they are being defined.
-export function getFactoryPatchedSource(id: PropertyKey, webpackRequire = wreq as AnyWebpackRequire) {
- return webpackRequire.m[id]?.[SYM_PATCHED_SOURCE];
-}
+// Factories can be patched in two ways. Eagerly or lazily.
+// If we are patching eagerly, pre-populated factories are patched immediately and new factories are patched when set.
+// Else, we only patch them when called.
-export function getFactoryPatchedBy(id: PropertyKey, webpackRequire = wreq as AnyWebpackRequire) {
- return webpackRequire.m[id]?.[SYM_PATCHED_BY];
-}
+// Factories are always wrapped in a proxy, which allows us to intercept the call to them, patch if they werent eagerly patched,
+// and call them with our wrapper which notifies our listeners.
-// wreq.m is the Webpack object containing module factories. It is pre-populated with module factories, and is also populated via webpackGlobal.push
-// We use this setter to intercept when wreq.m is defined and apply the patching in its module factories.
-// We wrap wreq.m with our proxy, which is responsible for patching the module factories when they are set, or defining getters for the patched versions.
+// wreq.m is also wrapped in a proxy to intercept when new factories are set, patch them eargely, if enabled, and wrap them in the factory proxy.
// If this is the main Webpack, we also set up the internal references to WebpackRequire.
define(Function.prototype, "m", {
@@ -101,7 +97,7 @@ define(Function.prototype, "m", {
set(this: AnyWebpackRequire, originalModules: AnyWebpackRequire["m"]) {
define(this, "m", { value: originalModules });
- // Ensure this is one of Discord main Webpack instances.
+ // Ensure this is likely one of Discord main Webpack instances.
// We may catch Discord bundled libs, React Devtools or other extensions Webpack instances here.
const { stack } = new Error();
if (!stack?.includes("http") || stack.match(/at \d+? \(/) || !String(this).includes("exports:{}")) {
@@ -109,53 +105,108 @@ define(Function.prototype, "m", {
}
const fileName = stack.match(/\/assets\/(.+?\.js)/)?.[1];
- logger.info("Found Webpack module factories" + interpolateIfDefined` in ${fileName}`);
- allWebpackInstances.add(this);
-
- // Define a setter for the ensureChunk property of WebpackRequire. Only the main Webpack (which is the only that includes chunk loading) has this property.
- // So if the setter is called, this means we can initialize the internal references to WebpackRequire.
- define(this, "e", {
+ // Define a setter for the bundlePath property of WebpackRequire. Only Webpack instances which include chunk loading functionality,
+ // like the main Discord Webpack, have this property.
+ // So if the setter is called with the Discord bundlePath, this means we should patch this instance and initialize the internal references to WebpackRequire.
+ define(this, "p", {
enumerable: false,
- set(this: WebpackRequire, ensureChunk: WebpackRequire["e"]) {
- define(this, "e", { value: ensureChunk });
- clearTimeout(setterTimeout);
+ set(this: AnyWebpackRequire, bundlePath: NonNullable) {
+ define(this, "p", { value: bundlePath });
+ clearTimeout(bundlePathTimeout);
- logger.info("Main WebpackInstance found" + interpolateIfDefined` in ${fileName}` + ", initializing internal references to WebpackRequire");
- _initWebpack(this);
+ if (bundlePath !== "/assets/") {
+ return;
+ }
+
+ if (wreq == null && this.c != null) {
+ logger.info("Main WebpackInstance found" + interpolateIfDefined` in ${fileName}` + ", initializing internal references to WebpackRequire");
+ _initWebpack(this as WebpackRequire);
+ }
+
+ patchThisInstance();
}
});
- // setImmediate to clear this property setter if this is not the main Webpack.
- // If this is the main Webpack, wreq.e will always be set before the timeout runs.
- const setterTimeout = setTimeout(() => Reflect.deleteProperty(this, "e"), 0);
- // Patch the pre-populated factories
- for (const id in originalModules) {
- if (updateExistingFactory(originalModules, id, originalModules[id], true)) {
- continue;
+ // In the past, the sentry Webpack instance which we also wanted to patch used to rely on chunks being loaded before initting sentry.
+ // This Webpack instance did not include actual chunk loading, and only awaited for them to be loaded, which means it did not include the bundlePath property.
+ // To keep backwards compability, in case this is ever the case again, and keep patching this type of instance, we explicity patch instances which include wreq.O and not wreq.p.
+ // Since we cannot check what is the bundlePath of the instance to filter for the Discord bundlePath, we only patch it if wreq.p is not included,
+ // which means the instance relies on another instance which does chunk loading, and that makes it very likely to only target Discord Webpack instances like the old sentry.
+
+ // Instead of patching when wreq.O is defined, wait for when wreq.O.j is defined, since that will be one of the last things to happen,
+ // which can assure wreq.p could have already been defined before.
+ define(this, "O", {
+ enumerable: false,
+
+ set(this: AnyWebpackRequire, onChunksLoaded: NonNullable) {
+ define(this, "O", { value: onChunksLoaded });
+ clearTimeout(onChunksLoadedTimeout);
+
+ const wreq = this;
+ define(onChunksLoaded, "j", {
+ enumerable: false,
+
+ set(this: NonNullable, j: NonNullable["j"]) {
+ define(this, "j", { value: j });
+
+ if (wreq.p == null) {
+ patchThisInstance();
+ }
+ }
+ });
}
-
- notifyFactoryListeners(originalModules[id]);
- defineModulesFactoryGetter(id, Settings.eagerPatches && shouldPatchFactories ? wrapAndPatchFactory(id, originalModules[id]) : originalModules[id]);
- }
-
- define(originalModules, Symbol.toStringTag, {
- value: "ModuleFactories",
- enumerable: false
});
- // The proxy responsible for patching the module factories when they are set, or defining getters for the patched versions
- const proxiedModuleFactories = new Proxy(originalModules, moduleFactoriesHandler);
- /*
- If Webpack ever decides to set module factories using the variable of the modules object directly, instead of wreq.m, switch the proxy to the prototype
- Reflect.setPrototypeOf(originalModules, new Proxy(originalModules, moduleFactoriesHandler));
- */
+ // If neither of these properties setters were triggered, delete them as they are not needed anymore.
+ const bundlePathTimeout = setTimeout(() => Reflect.deleteProperty(this, "p"), 0);
+ const onChunksLoadedTimeout = setTimeout(() => Reflect.deleteProperty(this, "O"), 0);
- define(this, "m", { value: proxiedModuleFactories });
+ /**
+ * Patch the current Webpack instance assigned to `this` context.
+ * This should only be called if this instance was later found to be one we need to patch.
+ */
+ const patchThisInstance = () => {
+ logger.info("Found Webpack module factories" + interpolateIfDefined` in ${fileName}`);
+ allWebpackInstances.add(this);
+
+ // Proxy (and maybe patch) pre-populated factories
+ for (const moduleId in originalModules) {
+ updateExistingOrProxyFactory(originalModules, moduleId, originalModules[moduleId], originalModules, true);
+ }
+
+ define(originalModules, Symbol.toStringTag, {
+ value: "ModuleFactories",
+ enumerable: false
+ });
+
+ const proxiedModuleFactories = new Proxy(originalModules, moduleFactoriesHandler);
+ /*
+ If Webpack ever decides to set module factories using the variable of the modules object directly, instead of wreq.m, switch the proxy to the prototype
+ Reflect.setPrototypeOf(originalModules, new Proxy(originalModules, moduleFactoriesHandler));
+ */
+
+ define(this, "m", { value: proxiedModuleFactories });
+
+ // Overwrite Webpack's defineExports function to define the export descriptors configurable.
+ // This is needed so we can later blacklist specific exports from Webpack search by making them non-enumerable
+ this.d = function (exports, definition) {
+ for (const key in definition) {
+ if (Object.hasOwn(definition, key) && !Object.hasOwn(exports, key)) {
+ Object.defineProperty(exports, key, {
+ enumerable: true,
+ configurable: true,
+ get: definition[key],
+ });
+ }
+ }
+ };
+ };
}
});
+// The proxy for patching eagerly and/or wrapping factories in their proxy.
const moduleFactoriesHandler: ProxyHandler = {
/*
If Webpack ever decides to set module factories using the variable of the modules object directly instead of wreq.m, we need to switch the proxy to the prototype
@@ -172,71 +223,127 @@ const moduleFactoriesHandler: ProxyHandler = {
},
*/
- // The set trap for patching or defining getters for the module factories when new module factories are loaded
- set(target, p, newValue, receiver) {
- if (updateExistingFactory(target, p, newValue)) {
+ set: updateExistingOrProxyFactory
+};
+
+// The proxy for patching lazily and/or running factories with our wrapper.
+const moduleFactoryHandler: ProxyHandler = {
+ apply(target, thisArg: unknown, argArray: Parameters) {
+ // SYM_ORIGINAL_FACTORY means the factory has already been patched
+ if (target[SYM_ORIGINAL_FACTORY] != null) {
+ return runFactoryWithWrap(target as PatchedModuleFactory, thisArg, argArray);
+ }
+
+ // SAFETY: Factories have `name` as their key in the module factories object, and that is always their module id
+ const moduleId: string = target.name;
+
+ const patchedFactory = patchFactory(moduleId, target);
+ return runFactoryWithWrap(patchedFactory, thisArg, argArray);
+ },
+
+ get(target, p, receiver) {
+ if (p === SYM_IS_PROXIED_FACTORY) {
return true;
}
- notifyFactoryListeners(newValue);
- defineModulesFactoryGetter(p, Settings.eagerPatches && shouldPatchFactories ? wrapAndPatchFactory(p, newValue) : newValue);
+ const originalFactory: AnyModuleFactory = target[SYM_ORIGINAL_FACTORY] ?? target;
- return true;
+ // Redirect these properties to the original factory, including making `toString` return the original factory `toString`
+ if (p === "toString" || p === SYM_PATCHED_SOURCE || p === SYM_PATCHED_BY) {
+ const v = Reflect.get(originalFactory, p, originalFactory);
+ return p === "toString" ? v.bind(originalFactory) : v;
+ }
+
+ return Reflect.get(target, p, receiver);
}
};
+function updateExistingOrProxyFactory(moduleFactories: AnyWebpackRequire["m"], moduleId: PropertyKey, newFactory: AnyModuleFactory, receiver: any, ignoreExistingInTarget = false) {
+ if (updateExistingFactory(moduleFactories, moduleId, newFactory, receiver, ignoreExistingInTarget)) {
+ return true;
+ }
+
+ notifyFactoryListeners(moduleId, newFactory);
+
+ const proxiedFactory = new Proxy(Settings.eagerPatches ? patchFactory(moduleId, newFactory) : newFactory, moduleFactoryHandler);
+ return Reflect.set(moduleFactories, moduleId, proxiedFactory, receiver);
+}
+
/**
- * Update a factory that exists in any Webpack instance with a new original factory.
+ * Update a duplicated factory that exists in any of the Webpack instances we track with a new original factory.
*
- * @target The module factories where this new original factory is being set
- * @param id The id of the module
+ * @param moduleFactories The module factories where this new original factory is being set
+ * @param moduleId The id of the module
* @param newFactory The new original factory
- * @param ignoreExistingInTarget Whether to ignore checking if the factory already exists in the moduleFactoriesTarget
- * @returns Whether the original factory was updated, or false if it doesn't exist in any Webpack instance
+ * @param receiver The receiver of the factory
+ * @param ignoreExistingInTarget Whether to ignore checking if the factory already exists in the moduleFactories where it is being set
+ * @returns Whether the original factory was updated, or false if it doesn't exist in any of the tracked Webpack instances
*/
-function updateExistingFactory(moduleFactoriesTarget: AnyWebpackRequire["m"], id: PropertyKey, newFactory: AnyModuleFactory, ignoreExistingInTarget: boolean = false) {
- let existingFactory: TypedPropertyDescriptor | undefined;
+function updateExistingFactory(moduleFactories: AnyWebpackRequire["m"], moduleId: PropertyKey, newFactory: AnyModuleFactory, receiver: any, ignoreExistingInTarget) {
+ let existingFactory: AnyModuleFactory | undefined;
let moduleFactoriesWithFactory: AnyWebpackRequire["m"] | undefined;
for (const wreq of allWebpackInstances) {
- if (ignoreExistingInTarget && wreq.m === moduleFactoriesTarget) continue;
+ if (ignoreExistingInTarget && wreq.m === moduleFactories) {
+ continue;
+ }
- if (Object.hasOwn(wreq.m, id)) {
- existingFactory = Reflect.getOwnPropertyDescriptor(wreq.m, id);
+ if (Object.hasOwn(wreq.m, moduleId)) {
+ existingFactory = wreq.m[moduleId];
moduleFactoriesWithFactory = wreq.m;
break;
}
}
if (existingFactory != null) {
- // If existingFactory exists in any Webpack instance, it's either wrapped in defineModuleFactoryGetter, or it has already been required.
- // So define the descriptor of it on this current Webpack instance (if it doesn't exist already), call Reflect.set with the new original,
- // and let the correct logic apply (normal set, or defineModuleFactoryGetter setter)
-
- if (moduleFactoriesWithFactory !== moduleFactoriesTarget) {
- Reflect.defineProperty(moduleFactoriesTarget, id, existingFactory);
+ // If existingFactory exists in any of the Webpack instances we track, it's either wrapped in our proxy, or it has already been required.
+ // In the case it is wrapped in our proxy, and the instance we are setting does not already have it, we need to make sure the instance contains our proxy too.
+ if (moduleFactoriesWithFactory !== moduleFactories && existingFactory[SYM_IS_PROXIED_FACTORY]) {
+ Reflect.set(moduleFactories, moduleId, existingFactory, receiver);
+ }
+ // Else, if it is not wrapped in our proxy, set this new original factory in all the instances
+ else {
+ defineInWebpackInstances(moduleId, newFactory);
}
- // Persist patched source and patched by in the new original factory, if the patched one has already been required
- if (IS_DEV && existingFactory.value != null) {
- newFactory[SYM_PATCHED_SOURCE] = existingFactory.value[SYM_PATCHED_SOURCE];
- newFactory[SYM_PATCHED_BY] = existingFactory.value[SYM_PATCHED_BY];
+ // Update existingFactory with the new original, if it does have a current original factory
+ if (existingFactory[SYM_ORIGINAL_FACTORY] != null) {
+ existingFactory[SYM_ORIGINAL_FACTORY] = newFactory;
}
- return Reflect.set(moduleFactoriesTarget, id, newFactory, moduleFactoriesTarget);
+ // Persist patched source and patched by in the new original factory
+ if (IS_DEV) {
+ newFactory[SYM_PATCHED_SOURCE] = existingFactory[SYM_PATCHED_SOURCE];
+ newFactory[SYM_PATCHED_BY] = existingFactory[SYM_PATCHED_BY];
+ }
+
+ return true;
}
return false;
}
+/**
+ * Define a module factory in all the Webpack instances we track.
+ *
+ * @param moduleId The id of the module
+ * @param factory The factory
+ */
+function defineInWebpackInstances(moduleId: PropertyKey, factory: AnyModuleFactory) {
+ for (const wreq of allWebpackInstances) {
+ define(wreq.m, moduleId, { value: factory });
+ }
+}
+
/**
* Notify all factory listeners.
*
+ * @param moduleId The id of the module
* @param factory The original factory to notify for
*/
-function notifyFactoryListeners(factory: AnyModuleFactory) {
+function notifyFactoryListeners(moduleId: PropertyKey, factory: AnyModuleFactory) {
for (const factoryListener of factoryListeners) {
try {
- factoryListener(factory);
+ factoryListener(factory, moduleId);
} catch (err) {
logger.error("Error in Webpack factory listener:\n", err, factoryListener);
}
@@ -244,213 +351,148 @@ function notifyFactoryListeners(factory: AnyModuleFactory) {
}
/**
- * Define the getter for returning the patched version of the module factory.
+ * Run a (possibly) patched module factory with a wrapper which notifies our listeners.
*
- * If eagerPatches is enabled, the factory argument should already be the patched version, else it will be the original
- * and only be patched when accessed for the first time.
- *
- * @param id The id of the module
- * @param factory The original or patched module factory
+ * @param patchedFactory The (possibly) patched module factory
+ * @param thisArg The `value` of the call to the factory
+ * @param argArray The arguments of the call to the factory
*/
-function defineModulesFactoryGetter(id: PropertyKey, factory: MaybeWrappedModuleFactory) {
- const descriptor: PropertyDescriptor = {
- get() {
- // SYM_ORIGINAL_FACTORY means the factory is already patched
- if (!shouldPatchFactories || factory[SYM_ORIGINAL_FACTORY] != null) {
- return factory;
- }
+function runFactoryWithWrap(patchedFactory: PatchedModuleFactory, thisArg: unknown, argArray: Parameters) {
+ const originalFactory = patchedFactory[SYM_ORIGINAL_FACTORY];
- return (factory = wrapAndPatchFactory(id, factory));
- },
- set(newFactory: MaybeWrappedModuleFactory) {
- if (IS_DEV) {
- newFactory[SYM_PATCHED_SOURCE] = factory[SYM_PATCHED_SOURCE];
- newFactory[SYM_PATCHED_BY] = factory[SYM_PATCHED_BY];
- }
-
- if (factory[SYM_ORIGINAL_FACTORY] != null) {
- factory.toString = newFactory.toString.bind(newFactory);
- factory[SYM_ORIGINAL_FACTORY] = newFactory;
- } else {
- factory = newFactory;
- }
- }
- };
-
- // Define the getter in all the module factories objects. Patches are only executed once, so make sure all module factories object
- // have the patched version
- for (const wreq of allWebpackInstances) {
- define(wreq.m, id, descriptor);
+ if (patchedFactory === originalFactory) {
+ // @ts-expect-error Clear up ORIGINAL_FACTORY if the factory did not have any patch applied
+ delete patchedFactory[SYM_ORIGINAL_FACTORY];
}
-}
-/**
- * Wraps and patches a module factory.
- *
- * @param id The id of the module
- * @param factory The original or patched module factory
- * @returns The wrapper for the patched module factory
- */
-function wrapAndPatchFactory(id: PropertyKey, originalFactory: AnyModuleFactory) {
- const [patchedFactory, patchedSource, patchedBy] = patchFactory(id, originalFactory);
+ let [module, exports, require] = argArray;
- const wrappedFactory: WrappedModuleFactory = function (...args) {
- // Restore the original factory in all the module factories objects. We want to make sure the original factory is restored properly, no matter what is the Webpack instance
- for (const wreq of allWebpackInstances) {
- define(wreq.m, id, { value: wrappedFactory[SYM_ORIGINAL_FACTORY] });
- }
+ // Restore the original factory in all the module factories objects, discarding our proxy and allowing it to be garbage collected
+ defineInWebpackInstances(module.id, originalFactory);
- // eslint-disable-next-line prefer-const
- let [module, exports, require] = args;
+ if (wreq == null) {
+ if (!wreqFallbackApplied) {
+ wreqFallbackApplied = true;
- if (wreq == null) {
- if (!wreqFallbackApplied) {
- wreqFallbackApplied = true;
+ // Make sure the require argument is actually the WebpackRequire function
+ if (typeof require === "function" && require.m != null && require.c != null) {
+ const { stack } = new Error();
+ const webpackInstanceFileName = stack?.match(/\/assets\/(.+?\.js)/)?.[1];
- // Make sure the require argument is actually the WebpackRequire function
- if (typeof require === "function" && require.m != null) {
- const { stack } = new Error();
- const webpackInstanceFileName = stack?.match(/\/assets\/(.+?\.js)/)?.[1];
+ logger.warn(
+ "WebpackRequire was not initialized, falling back to WebpackRequire passed to the first called wrapped module factory (" +
+ `id: ${String(module.id)}` + interpolateIfDefined`, WebpackInstance origin: ${webpackInstanceFileName}` +
+ ")"
+ );
- logger.warn(
- "WebpackRequire was not initialized, falling back to WebpackRequire passed to the first called patched module factory (" +
- `id: ${String(id)}` + interpolateIfDefined`, WebpackInstance origin: ${webpackInstanceFileName}` +
- ")"
- );
-
- _initWebpack(require as WebpackRequire);
- } else if (IS_DEV) {
- logger.error("WebpackRequire was not initialized, running modules without patches instead.");
- return wrappedFactory[SYM_ORIGINAL_FACTORY].apply(this, args);
- }
+ // Could technically be wrong, but it's better than nothing
+ _initWebpack(require as WebpackRequire);
} else if (IS_DEV) {
- return wrappedFactory[SYM_ORIGINAL_FACTORY].apply(this, args);
+ logger.error("WebpackRequire was not initialized, running modules without patches instead.");
+ return originalFactory.apply(thisArg, argArray);
}
+ } else if (IS_DEV) {
+ return originalFactory.apply(thisArg, argArray);
+ }
+ }
+
+ let factoryReturn: unknown;
+ try {
+ factoryReturn = patchedFactory.apply(thisArg, argArray);
+ } catch (err) {
+ // Just re-throw Discord errors
+ if (patchedFactory === originalFactory) {
+ throw err;
}
- let factoryReturn: unknown;
- try {
- // Call the patched factory
- factoryReturn = patchedFactory.apply(this, args);
- } catch (err) {
- // Just re-throw Discord errors
- if (patchedFactory === wrappedFactory[SYM_ORIGINAL_FACTORY]) {
- throw err;
- }
+ logger.error("Error in patched module factory:\n", err);
+ return originalFactory.apply(thisArg, argArray);
+ }
- logger.error("Error in patched module factory:\n", err);
- return wrappedFactory[SYM_ORIGINAL_FACTORY].apply(this, args);
- }
+ exports = module.exports;
- exports = module.exports;
- if (exports == null) {
+ if (typeof require === "function" && require.c) {
+ if (_blacklistBadModules(require.c, exports, module.id)) {
return factoryReturn;
}
-
- if (typeof require === "function") {
- const shouldIgnoreModule = _shouldIgnoreModule(exports);
-
- if (shouldIgnoreModule) {
- if (require.c != null) {
- Object.defineProperty(require.c, id, {
- value: require.c[id],
- enumerable: false,
- configurable: true,
- writable: true
- });
- }
-
- return factoryReturn;
- }
- }
-
- for (const callback of moduleListeners) {
- try {
- callback(exports, id);
- } catch (err) {
- logger.error("Error in Webpack module listener:\n", err, callback);
- }
- }
-
- for (const [filter, callback] of waitForSubscriptions) {
- try {
- if (filter(exports)) {
- waitForSubscriptions.delete(filter);
- callback(exports, id);
- continue;
- }
-
- if (typeof exports !== "object") {
- continue;
- }
-
- for (const exportKey in exports) {
- const exportValue = exports[exportKey];
-
- if (exportValue != null && filter(exportValue)) {
- waitForSubscriptions.delete(filter);
- callback(exportValue, id);
- break;
- }
- }
- } catch (err) {
- logger.error("Error while firing callback for Webpack waitFor subscription:\n", err, filter, callback);
- }
- }
-
- return factoryReturn;
- };
-
- wrappedFactory.toString = originalFactory.toString.bind(originalFactory);
- wrappedFactory[SYM_ORIGINAL_FACTORY] = originalFactory;
-
- if (IS_DEV && patchedFactory !== originalFactory) {
- wrappedFactory[SYM_PATCHED_SOURCE] = patchedSource;
- wrappedFactory[SYM_PATCHED_BY] = patchedBy;
- originalFactory[SYM_PATCHED_SOURCE] = patchedSource;
- originalFactory[SYM_PATCHED_BY] = patchedBy;
}
- // @ts-expect-error Allow GC to get into action, if possible
- originalFactory = undefined;
- return wrappedFactory;
+ if (exports == null) {
+ return factoryReturn;
+ }
+
+ for (const callback of moduleListeners) {
+ try {
+ callback(exports, module.id);
+ } catch (err) {
+ logger.error("Error in Webpack module listener:\n", err, callback);
+ }
+ }
+
+ for (const [filter, callback] of waitForSubscriptions) {
+ try {
+ if (filter(exports)) {
+ waitForSubscriptions.delete(filter);
+ callback(exports, module.id);
+ continue;
+ }
+
+ if (typeof exports !== "object") {
+ continue;
+ }
+
+ for (const exportKey in exports) {
+ const exportValue = exports[exportKey];
+
+ if (exportValue != null && filter(exportValue)) {
+ waitForSubscriptions.delete(filter);
+ callback(exportValue, module.id);
+ break;
+ }
+ }
+ } catch (err) {
+ logger.error("Error while firing callback for Webpack waitFor subscription:\n", err, filter, callback);
+ }
+ }
+
+ return factoryReturn;
}
/**
* Patches a module factory.
*
- * @param id The id of the module
- * @param factory The original module factory
- * @returns The patched module factory, the patched source of it, and the plugins that patched it
+ * @param moduleId The id of the module
+ * @param originalFactory The original module factory
+ * @returns The patched module factory
*/
-function patchFactory(id: PropertyKey, factory: AnyModuleFactory): [patchedFactory: AnyModuleFactory, patchedSource: string, patchedBy: Set] {
+function patchFactory(moduleId: PropertyKey, originalFactory: AnyModuleFactory): PatchedModuleFactory {
// 0, prefix to turn it into an expression: 0,function(){} would be invalid syntax without the 0,
- let code: string = "0," + String(factory);
+ let code: string = "0," + String(originalFactory);
let patchedSource = code;
- let patchedFactory = factory;
+ let patchedFactory = originalFactory;
const patchedBy = new Set();
for (let i = 0; i < patches.length; i++) {
const patch = patches[i];
- const moduleMatches = typeof patch.find === "string"
- ? code.includes(patch.find)
- : (patch.find.global && (patch.find.lastIndex = 0), patch.find.test(code));
-
- if (!moduleMatches) {
- continue;
- }
-
- // Reporter eagerly patches and cannot retrieve the build number because this code runs before the module for it is loaded
- const buildNumber = IS_REPORTER ? -1 : getBuildNumber();
- const shouldCheckBuildNumber = !Settings.eagerPatches && buildNumber !== -1;
+ const buildNumber = getBuildNumber();
+ const shouldCheckBuildNumber = buildNumber !== -1;
if (
shouldCheckBuildNumber &&
(patch.fromBuild != null && buildNumber < patch.fromBuild) ||
(patch.toBuild != null && buildNumber > patch.toBuild)
) {
+ patches.splice(i--, 1);
+ continue;
+ }
+
+ const moduleMatches = typeof patch.find === "string"
+ ? code.includes(patch.find)
+ : (patch.find.global && (patch.find.lastIndex = 0), patch.find.test(code));
+
+ if (!moduleMatches) {
continue;
}
@@ -463,7 +505,7 @@ function patchFactory(id: PropertyKey, factory: AnyModuleFactory): [patchedFacto
});
const previousCode = code;
- const previousFactory = factory;
+ const previousFactory = originalFactory;
let markedAsPatched = false;
// We change all patch.replacement to array in plugins/index
@@ -482,18 +524,18 @@ function patchFactory(id: PropertyKey, factory: AnyModuleFactory): [patchedFacto
}
const lastCode = code;
- const lastFactory = factory;
+ const lastFactory = originalFactory;
try {
const [newCode, totalTime] = executePatch(replacement.match, replacement.replace as string);
if (IS_REPORTER) {
- patchTimings.push([patch.plugin, id, replacement.match, totalTime]);
+ patchTimings.push([patch.plugin, moduleId, replacement.match, totalTime]);
}
if (newCode === code) {
- if (!patch.noWarn) {
- logger.warn(`Patch by ${patch.plugin} had no effect (Module id is ${String(id)}): ${replacement.match}`);
+ if (!(patch.noWarn || replacement.noWarn)) {
+ logger.warn(`Patch by ${patch.plugin} had no effect (Module id is ${String(moduleId)}): ${replacement.match}`);
if (IS_DEV) {
logger.debug("Function Source:\n", code);
}
@@ -514,8 +556,13 @@ function patchFactory(id: PropertyKey, factory: AnyModuleFactory): [patchedFacto
continue;
}
+ const pluginsList = [...patchedBy];
+ if (!patchedBy.has(patch.plugin)) {
+ pluginsList.push(patch.plugin);
+ }
+
code = newCode;
- patchedSource = `// Webpack Module ${String(id)} - Patched by ${[...patchedBy, patch.plugin].join(", ")}\n${newCode}\n//# sourceURL=WebpackModule${String(id)}`;
+ patchedSource = `// Webpack Module ${String(moduleId)} - Patched by ${pluginsList.join(", ")}\n${newCode}\n//# sourceURL=WebpackModule${String(moduleId)}`;
patchedFactory = (0, eval)(patchedSource);
if (!patchedBy.has(patch.plugin)) {
@@ -523,7 +570,7 @@ function patchFactory(id: PropertyKey, factory: AnyModuleFactory): [patchedFacto
markedAsPatched = true;
}
} catch (err) {
- logger.error(`Patch by ${patch.plugin} errored (Module id is ${String(id)}): ${replacement.match}\n`, err);
+ logger.error(`Patch by ${patch.plugin} errored (Module id is ${String(moduleId)}): ${replacement.match}\n`, err);
if (IS_DEV) {
diffErroredPatch(code, lastCode, lastCode.match(replacement.match)!);
@@ -550,7 +597,14 @@ function patchFactory(id: PropertyKey, factory: AnyModuleFactory): [patchedFacto
}
}
- return [patchedFactory, patchedSource, patchedBy];
+ patchedFactory[SYM_ORIGINAL_FACTORY] = originalFactory;
+
+ if (IS_DEV && patchedFactory !== originalFactory) {
+ originalFactory[SYM_PATCHED_SOURCE] = patchedSource;
+ originalFactory[SYM_PATCHED_BY] = patchedBy;
+ }
+
+ return patchedFactory as PatchedModuleFactory;
}
function diffErroredPatch(code: string, lastCode: string, match: RegExpMatchArray) {
diff --git a/src/webpack/webpack.ts b/src/webpack/webpack.ts
index 8d5b3c688..3a7fe2a52 100644
--- a/src/webpack/webpack.ts
+++ b/src/webpack/webpack.ts
@@ -22,7 +22,8 @@ import { Logger } from "@utils/Logger";
import { canonicalizeMatch } from "@utils/patches";
import { traceFunction } from "../debug/Tracer";
-import { AnyModuleFactory, ModuleExports, WebpackRequire } from "./wreq";
+import { Flux } from "./common";
+import { AnyModuleFactory, AnyWebpackRequire, ModuleExports, WebpackRequire } from "./wreq";
const logger = new Logger("Webpack");
@@ -90,17 +91,13 @@ export const filters = {
};
export type CallbackFn = (module: ModuleExports, id: PropertyKey) => void;
-export type FactoryListernFn = (factory: AnyModuleFactory) => void;
+export type FactoryListernFn = (factory: AnyModuleFactory, moduleId: PropertyKey) => void;
export const waitForSubscriptions = new Map();
export const moduleListeners = new Set();
export const factoryListeners = new Set();
export function _initWebpack(webpackRequire: WebpackRequire) {
- if (webpackRequire.c == null) {
- return;
- }
-
wreq = webpackRequire;
cache = webpackRequire.c;
@@ -115,18 +112,38 @@ export function _initWebpack(webpackRequire: WebpackRequire) {
// Credits to Zerebos for implementing this in BD, thus giving the idea for us to implement it too
const TypedArray = Object.getPrototypeOf(Int8Array);
-function _shouldIgnoreValue(value: any) {
+const PROXY_CHECK = "is this a proxy that returns values for any key?";
+function shouldIgnoreValue(value: any) {
if (value == null) return true;
if (value === window) return true;
if (value === document || value === document.documentElement) return true;
- if (value[Symbol.toStringTag] === "DOMTokenList") return true;
+ if (value[Symbol.toStringTag] === "DOMTokenList" || value[Symbol.toStringTag] === "IntlMessagesProxy") return true;
+ // Discord might export a Proxy that returns non-null values for any property key which would pass all findByProps filters.
+ // One example of this is their i18n Proxy. However, that is already covered by the IntlMessagesProxy check above.
+ // As a fallback if they ever change the name or add a new Proxy, use a unique string to detect such proxies and ignore them
+ if (value[PROXY_CHECK] !== void 0) {
+ // their i18n Proxy "caches" by setting each accessed property to the return, so try to delete
+ Reflect.deleteProperty(value, PROXY_CHECK);
+ return true;
+ }
if (value instanceof TypedArray) return true;
return false;
}
-export function _shouldIgnoreModule(exports: any) {
- if (_shouldIgnoreValue(exports)) {
+function makePropertyNonEnumerable(target: Record, key: PropertyKey) {
+ const descriptor = Object.getOwnPropertyDescriptor(target, key);
+ if (descriptor == null) return;
+
+ Reflect.defineProperty(target, key, {
+ ...descriptor,
+ enumerable: false
+ });
+}
+
+export function _blacklistBadModules(requireCache: NonNullable, exports: ModuleExports, moduleId: PropertyKey) {
+ if (shouldIgnoreValue(exports)) {
+ makePropertyNonEnumerable(requireCache, moduleId);
return true;
}
@@ -134,14 +151,16 @@ export function _shouldIgnoreModule(exports: any) {
return false;
}
- let allNonEnumerable = true;
+ let hasOnlyBadProperties = true;
for (const exportKey in exports) {
- if (!_shouldIgnoreValue(exports[exportKey])) {
- allNonEnumerable = false;
+ if (shouldIgnoreValue(exports[exportKey])) {
+ makePropertyNonEnumerable(exports, exportKey);
+ } else {
+ hasOnlyBadProperties = false;
}
}
- return allNonEnumerable;
+ return hasOnlyBadProperties;
}
let devToolsOpen = false;
@@ -409,7 +428,10 @@ export function findByCodeLazy(...code: CodeFilter) {
* Find a store by its displayName
*/
export function findStore(name: StoreNameFilter) {
- const res = find(filters.byStoreName(name), { isIndirect: true });
+ const res = Flux.Store.getAll
+ ? Flux.Store.getAll().find(filters.byStoreName(name))
+ : find(filters.byStoreName(name), { isIndirect: true });
+
if (!res)
handleModuleNotFound("findStore", name);
return res;
@@ -477,12 +499,27 @@ export function findExportedComponentLazy(...props: Prop
});
}
+function getAllPropertyNames(object: Record, includeNonEnumerable: boolean) {
+ const names = new Set();
+
+ const getKeys = includeNonEnumerable ? Object.getOwnPropertyNames : Object.keys;
+ do {
+ getKeys(object).forEach(name => name !== "__esModule" && names.add(name));
+ object = Object.getPrototypeOf(object);
+ } while (object != null);
+
+ return names;
+}
+
/**
* Finds a mangled module by the provided code "code" (must be unique and can be anywhere in the module)
* then maps it into an easily usable module via the specified mappers.
*
* @param code The code to look for
* @param mappers Mappers to create the non mangled exports
+ * @param includeBlacklistedExports Whether to include blacklisted exports in the search.
+ * These exports are dangerous. Accessing properties on them may throw errors
+ * or always return values (so a byProps filter will always return true)
* @returns Unmangled exports as specified in mappers
*
* @example mapMangledModule("headerIdIsManaged:", {
@@ -490,7 +527,7 @@ export function findExportedComponentLazy(...props: Prop
* closeModal: filters.byCode("key==")
* })
*/
-export const mapMangledModule = traceFunction("mapMangledModule", function mapMangledModule(code: string | RegExp | CodeFilter, mappers: Record): Record {
+export const mapMangledModule = traceFunction("mapMangledModule", function mapMangledModule(code: string | RegExp | CodeFilter, mappers: Record, includeBlacklistedExports = false): Record {
const exports = {} as Record;
const id = findModuleId(...Array.isArray(code) ? code : [code]);
@@ -498,8 +535,9 @@ export const mapMangledModule = traceFunction("mapMangledModule", function mapMa
return exports;
const mod = wreq(id as any);
+ const keys = getAllPropertyNames(mod, includeBlacklistedExports);
outer:
- for (const key in mod) {
+ for (const key of keys) {
const member = mod[key];
for (const newName in mappers) {
// if the current mapper matches this module
@@ -513,24 +551,13 @@ export const mapMangledModule = traceFunction("mapMangledModule", function mapMa
});
/**
- * {@link mapMangledModule}, lazy.
-
- * Finds a mangled module by the provided code "code" (must be unique and can be anywhere in the module)
- * then maps it into an easily usable module via the specified mappers.
- *
- * @param code The code to look for
- * @param mappers Mappers to create the non mangled exports
- * @returns Unmangled exports as specified in mappers
- *
- * @example mapMangledModule("headerIdIsManaged:", {
- * openModal: filters.byCode("headerIdIsManaged:"),
- * closeModal: filters.byCode("key==")
- * })
+ * lazy mapMangledModule
+ * @see {@link mapMangledModule}
*/
-export function mapMangledModuleLazy(code: string | RegExp | CodeFilter, mappers: Record): Record {
- if (IS_REPORTER) lazyWebpackSearchHistory.push(["mapMangledModule", [code, mappers]]);
+export function mapMangledModuleLazy(code: string | RegExp | CodeFilter, mappers: Record, includeBlacklistedExports = false): Record {
+ if (IS_REPORTER) lazyWebpackSearchHistory.push(["mapMangledModule", [code, mappers, includeBlacklistedExports]]);
- return proxyLazy(() => mapMangledModule(code, mappers));
+ return proxyLazy(() => mapMangledModule(code, mappers, includeBlacklistedExports));
}
export const DefaultExtractAndLoadChunksRegex = /(?:(?:Promise\.all\(\[)?(\i\.e\("?[^)]+?"?\)[^\]]*?)(?:\]\))?|Promise\.resolve\(\))\.then\(\i\.bind\(\i,"?([^)]+?)"?\)\)/;
diff --git a/src/webpack/wreq.d.ts b/src/webpack/wreq.d.ts
index dbc451054..2b356f9d1 100644
--- a/src/webpack/wreq.d.ts
+++ b/src/webpack/wreq.d.ts
@@ -17,14 +17,11 @@ export type Module = {
/** exports can be anything, however initially it is always an empty object */
export type ModuleFactory = (this: ModuleExports, module: Module, exports: ModuleExports, require: WebpackRequire) => void;
-export type WebpackQueues = unique symbol | "__webpack_queues__";
-export type WebpackExports = unique symbol | "__webpack_exports__";
-export type WebpackError = unique symbol | "__webpack_error__";
-
+/** Keys here can be symbols too, but we can't properly type them */
export type AsyncModulePromise = Promise & {
- [WebpackQueues]: (fnQueue: ((queue: any[]) => any)) => any;
- [WebpackExports]: ModuleExports;
- [WebpackError]?: any;
+ "__webpack_queues__": (fnQueue: ((queue: any[]) => any)) => any;
+ "__webpack_exports__": ModuleExports;
+ "__webpack_error__"?: any;
};
export type AsyncModuleBody = (
@@ -33,27 +30,45 @@ export type AsyncModuleBody = (
asyncResult: (error?: any) => void
) => Promise;
-export type ChunkHandlers = {
+export type EnsureChunkHandlers = {
/**
* Ensures the js file for this chunk is loaded, or starts to load if it's not.
* @param chunkId The chunk id
* @param promises The promises array to add the loading promise to
*/
- j: (this: ChunkHandlers, chunkId: PropertyKey, promises: Promise) => void,
+ j: (this: EnsureChunkHandlers, chunkId: PropertyKey, promises: Promise) => void;
/**
* Ensures the css file for this chunk is loaded, or starts to load if it's not.
* @param chunkId The chunk id
* @param promises The promises array to add the loading promise to. This array will likely contain the promise of the js file too
*/
- css: (this: ChunkHandlers, chunkId: PropertyKey, promises: Promise) => void,
+ css: (this: EnsureChunkHandlers, chunkId: PropertyKey, promises: Promise) => void;
+ /**
+ * Trigger for prefetching next chunks. This is called after ensuring a chunk is loaded and internally looks up
+ * a map to see if the chunk that just loaded has next chunks to prefetch.
+ *
+ * Note that this does not add an extra promise to the promises array, and instead only executes the prefetching after
+ * calling Promise.all on the promises array.
+ * @param chunkId The chunk id
+ * @param promises The promises array of ensuring the chunk is loaded
+ */
+ prefetch: (this: EnsureChunkHandlers, chunkId: PropertyKey, promises: Promise) => void;
+};
+
+export type PrefetchChunkHandlers = {
+ /**
+ * Prefetches the js file for this chunk.
+ * @param chunkId The chunk id
+ */
+ j: (this: PrefetchChunkHandlers, chunkId: PropertyKey) => void;
};
export type ScriptLoadDone = (event: Event) => void;
-// export type OnChunksLoaded = ((this: WebpackRequire, result: any, chunkIds: PropertyKey[] | undefined | null, callback: () => any, priority: number) => any) & {
-// /** Check if a chunk has been loaded */
-// j: (this: OnChunksLoaded, chunkId: PropertyKey) => boolean;
-// };
+export type OnChunksLoaded = ((this: WebpackRequire, result: any, chunkIds: PropertyKey[] | undefined | null, callback: () => any, priority: number) => any) & {
+ /** Check if a chunk has been loaded */
+ j: (this: OnChunksLoaded, chunkId: PropertyKey) => boolean;
+};
export type WebpackRequire = ((moduleId: PropertyKey) => ModuleExports) & {
/** The module factories, where all modules that have been loaded are stored (pre-loaded or loaded by lazy chunks) */
@@ -134,14 +149,21 @@ export type WebpackRequire = ((moduleId: PropertyKey) => ModuleExports) & {
* }
* // exports is now { exportName: someExportedValue } (but each value is actually a getter)
*/
- d: (this: WebpackRequire, exports: AnyRecord, definiton: AnyRecord) => void;
- /** The chunk handlers, which are used to ensure the files of the chunks are loaded, or load if necessary */
- f: ChunkHandlers;
+ d: (this: WebpackRequire, exports: Record, definiton: Record ModuleExports>) => void;
+ /** The ensure chunk handlers, which are used to ensure the files of the chunks are loaded, or load if necessary */
+ f: EnsureChunkHandlers;
/**
* The ensure chunk function, it ensures a chunk is loaded, or loads if needed.
* Internally it uses the handlers in {@link WebpackRequire.f} to load/ensure the chunk is loaded.
*/
e: (this: WebpackRequire, chunkId: PropertyKey) => Promise;
+ /** The prefetch chunk handlers, which are used to prefetch the files of the chunks */
+ F: PrefetchChunkHandlers;
+ /**
+ * The prefetch chunk function.
+ * Internally it uses the handlers in {@link WebpackRequire.F} to prefetch a chunk.
+ */
+ E: (this: WebpackRequire, chunkId: PropertyKey) => void;
/** Get the filename for the css part of a chunk */
k: (this: WebpackRequire, chunkId: PropertyKey) => string;
/** Get the filename for the js part of a chunk */
@@ -162,18 +184,18 @@ export type WebpackRequire = ((moduleId: PropertyKey) => ModuleExports) & {
r: (this: WebpackRequire, exports: ModuleExports) => void;
/** Node.js module decorator. Decorates a module as a Node.js module */
nmd: (this: WebpackRequire, module: Module) => any;
- // /**
- // * Register deferred code which will be executed when the passed chunks are loaded.
- // *
- // * If chunkIds is defined, it defers the execution of the callback and returns undefined.
- // *
- // * If chunkIds is undefined, and no deferred code exists or can be executed, it returns the value of the result argument.
- // *
- // * If chunkIds is undefined, and some deferred code can already be executed, it returns the result of the callback function of the last deferred code.
- // *
- // * When (priority & 1) it will wait for all other handlers with lower priority to be executed before itself is executed.
- // */
- // O: OnChunksLoaded;
+ /**
+ * Register deferred code which will be executed when the passed chunks are loaded.
+ *
+ * If chunkIds is defined, it defers the execution of the callback and returns undefined.
+ *
+ * If chunkIds is undefined, and no deferred code exists or can be executed, it returns the value of the result argument.
+ *
+ * If chunkIds is undefined, and some deferred code can already be executed, it returns the result of the callback function of the last deferred code.
+ *
+ * When (priority & 1) it will wait for all other handlers with lower priority to be executed before itself is executed.
+ */
+ O: OnChunksLoaded;
/**
* Instantiate a wasm instance with source using "wasmModuleHash", and importObject "importsObj", and then assign the exports of its instance to "exports".
* @returns The exports argument, but now assigned with the exports of the wasm instance
@@ -185,6 +207,13 @@ export type WebpackRequire = ((moduleId: PropertyKey) => ModuleExports) & {
j: string;
/** Document baseURI or WebWorker location.href */
b: string;
+
+ /* rspack only */
+
+ /** rspack version */
+ rv: (this: WebpackRequire) => string;
+ /** rspack unique id */
+ ruid: string;
};
// Utility section for Vencord
@@ -200,12 +229,10 @@ export type AnyModuleFactory = ((this: ModuleExports, module: Module, exports: M
[SYM_PATCHED_BY]?: Set;
};
-export type WrappedModuleFactory = AnyModuleFactory & {
+export type PatchedModuleFactory = AnyModuleFactory & {
[SYM_ORIGINAL_FACTORY]: AnyModuleFactory;
[SYM_PATCHED_SOURCE]?: string;
[SYM_PATCHED_BY]?: Set;
};
-export type MaybeWrappedModuleFactory = AnyModuleFactory | WrappedModuleFactory;
-
-export type WrappedModuleFactories = Record;
+export type MaybePatchedModuleFactory = PatchedModuleFactory | AnyModuleFactory;
diff --git a/tsconfig.json b/tsconfig.json
index db6d0918d..d2a42bd57 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -29,7 +29,9 @@
"@shared/*": ["./shared/*"],
"@webpack/types": ["./webpack/common/types"],
"@webpack/common": ["./webpack/common"],
- "@webpack": ["./webpack/webpack"]
+ "@webpack": ["./webpack/webpack"],
+ "@webpack/patcher": ["./webpack/patchWebpack"],
+ "@webpack/wreq.d": ["./webpack/wreq.d"],
},
"plugins": [