build: improved DX with autobuild using bun
Some checks are pending
Build / node (22.x) (push) Waiting to run
Build / extension (22.x) (push) Waiting to run
Build / bun (push) Waiting to run
Release / Build Release (push) Waiting to run
Release / create_release (push) Blocked by required conditions

This commit is contained in:
Toil 2026-08-03 00:14:54 +03:00
parent 039ddaef98
commit 2c61a877a1
No known key found for this signature in database
GPG key ID: 57248E2819D32070
24 changed files with 541 additions and 381 deletions

View file

@ -18,18 +18,18 @@ jobs:
node-version: [22.x]
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Setup Node.js ${{ matrix.node-version }} 🛎️
uses: actions/setup-node@v4
uses: actions/setup-node@v7
with:
node-version: ${{ matrix.node-version }}
- name: Install 🔧
shell: bash
run: npm install
- name: Build 🔧
run: npm run build:all
run: npm run build:gm
- name: Upload Artifact 🚀
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: vot-${{ matrix.node-version }}
path: dist/vot*.user.js
@ -41,9 +41,9 @@ jobs:
node-version: [22.x]
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Setup Node.js ${{ matrix.node-version }} 🛎️
uses: actions/setup-node@v4
uses: actions/setup-node@v7
with:
node-version: ${{ matrix.node-version }}
- name: Install 🔧
@ -52,7 +52,7 @@ jobs:
- name: Build extension 🔧
run: npm run build:ext
- name: Upload extension artifacts 🚀
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: vot-extension-${{ matrix.node-version }}
path: |
@ -63,18 +63,18 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Checkout 🛎️
uses: actions/checkout@v4
uses: actions/checkout@v7
- name: Setup Bun.sh 🛎️
uses: oven-sh/setup-bun@v1
uses: oven-sh/setup-bun@v2
with:
bun-version: latest
- name: Install 🔧
shell: bash
run: bun install
- name: Build 🔧
run: bun run build:all
run: bun run build:gm
- name: Upload Artifact 🚀
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: vot-bun
path: dist/vot*.user.js

View file

@ -18,13 +18,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
uses: actions/download-artifact@v8
with:
path: vot
pattern: vot-*
merge-multiple: true
- name: Create release
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@v3
with:
token: ${{ secrets.GITHUB_TOKEN }}
tag_name: ${{ github.ref }}

2
.gitignore vendored
View file

@ -1,4 +1,4 @@
arch*.txt
.output
keys/

View file

@ -189,37 +189,53 @@ bun install
3. Build targets:
3.0. Userscript (regular build):
### Automatic Build
```bash
npm run build
```
Automatic builds are available only when using [Bun.sh][bun-link]:
3.1. Userscript (minified build):
```bash
bun run autobuild
```
```bash
npm run build:min
```
After the build completes, the `.output` directory will contain build artifacts ready for publishing to the Chrome and Firefox extension stores.
3.2. Userscript (both variants):
The `dist-ext` directory contains non-store builds distributed as `.zip` archives (for Chrome) and `.xpi` archives (for Firefox).
```bash
npm run build:all
```
The `dist` directory contains the userscript build, which can be installed using [Tampermonkey][tampermonkey-link] or other userscript managers.
3.3. Native Chrome/Firefox extension packages:
### Manual Build
```bash
npm run build:ext
```
Userscript (standard build):
3.4. Development userscript build with sourcemaps:
```bash
npm run build:gm:default
```
```bash
npm run build:dev
```
Userscript (minified build):
Userscript artifacts are generated in `dist/`, native extension artifacts in `dist-ext/`.
```bash
npm run build:gm:min
```
Userscript (both builds):
```bash
npm run build:gm
```
Native Chrome/Firefox extensions:
```bash
npm run build:ext
```
Development userscript build with source maps:
```bash
npm run build:dev
```
Userscript build artifacts are placed in `dist/`, while native extension builds are placed in `dist-ext/`.
## Customization of appearance:

View file

@ -189,35 +189,51 @@ bun install
3. Сборка расширения:
3.0. Userscript (обычная сборка):
### Автоматическая сборка
```bash
npm run build
```
Автоматическую сборку можно выполнить только с помощью [Bun.sh][bun-link]:
3.1. Userscript (минифицированная сборка):
```bash
bun run autobuild
```
```bash
npm run build:min
```
После завершения в папке `.output` появятся артефакты сборки подготовленные для публикации в магазинах расширений Chrome и Firefox.
3.2. Userscript (обе версии подряд):
В папке `dist-ext` будет находится non-store сборка для распространения в виде `.zip`-архива (для Chrome) и `.xpi`-архива (для Firefox).
```bash
npm run build:all
```
В папке `dist` будет находится сборка в виде юзерскрипта для установки через [Tampermonkey][tampermonkey-link] или другие загрузчики юзерскриптов.
3.3. Нативные расширения Chrome/Firefox:
### Ручная сборка
```bash
npm run build:ext
```
Userscript (обычная сборка):
3.4. Dev-сборка userscript с sourcemap:
```bash
npm run build:gm:default
```
```bash
npm run build:dev
```
Userscript (минифицированная сборка):
```bash
npm run build:gm:min
```
Userscript (обе версии):
```bash
npm run build:gm
```
Нативные расширения Chrome/Firefox:
```bash
npm run build:ext
```
Dev-сборка userscript с sourcemap:
```bash
npm run build:dev
```
Артефакты userscript попадают в `dist/`, сборка нативных расширений — в `dist-ext/`.

105
bun.lock
View file

@ -6,14 +6,15 @@
"name": "voice-over-translation",
"dependencies": {
"@toil/gm-types": "^1.0.5",
"@vot.js/core": "^3.0.0",
"@vot.js/ext": "^3.0.0",
"@vot.js/shared": "^3.0.0",
"@vot.js/core": "^3.0.1",
"@vot.js/ext": "^3.0.1",
"@vot.js/shared": "^3.0.1",
"bowser": "^2.14.1",
"chaimu": "^1.1.0",
"lit-html": "^3.3.3",
},
"devDependencies": {
"@biomejs/biome": "^2.5.6",
"@crxjs/vite-plugin": "^2.7.1",
"@toil/translate": "^1.10.0",
"@types/bun": "^1.3.14",
@ -27,55 +28,73 @@
},
},
"packages": {
"@biomejs/biome": ["@biomejs/biome@2.5.6", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.5.6", "@biomejs/cli-darwin-x64": "2.5.6", "@biomejs/cli-linux-arm64": "2.5.6", "@biomejs/cli-linux-arm64-musl": "2.5.6", "@biomejs/cli-linux-x64": "2.5.6", "@biomejs/cli-linux-x64-musl": "2.5.6", "@biomejs/cli-win32-arm64": "2.5.6", "@biomejs/cli-win32-x64": "2.5.6" }, "bin": { "biome": "bin/biome" } }, "sha512-lxVNjv7UF6KfhMJfL9gaUHbWdJdHbsAj6OSmwSYNdhRuG67NxNQ4Xdvh3TUxsSK9sBzJBQhEJj3AopmmNJ5pSA=="],
"@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.5.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-zMOLZP4oMrjh6m1zcSj1ud2awUPgTuMVbmQhYYWL7J8HwCnbHHBvTm7VBTRuY7epT5bez76IpKYQ11ZAqHFlnw=="],
"@biomejs/cli-darwin-x64": ["@biomejs/cli-darwin-x64@2.5.6", "", { "os": "darwin", "cpu": "x64" }, "sha512-JAC1VqzvO7Th5ZplU0G2uGfkZbxEe9uDDektPAhF0JLusoz1w+T4okp2bkykI0bbaO2vslKiRfj4gU43JaGreA=="],
"@biomejs/cli-linux-arm64": ["@biomejs/cli-linux-arm64@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-6XsYwCFkp5sMxl85ffhgeGpGgs6A7dRYFnkceZ7WVxvycuTnGdD5xa534Z3xfrBQ0JCMK/mujT6ZNPJoghedwg=="],
"@biomejs/cli-linux-arm64-musl": ["@biomejs/cli-linux-arm64-musl@2.5.6", "", { "os": "linux", "cpu": "arm64" }, "sha512-eUa3jeeYvfMt19LBeh6E5PUZpxnTC4JqNWo+EDjTtQjAr2xLGnWaxACtVU1DQqmHYbvThlJzLX+ZsYgrqh2qVw=="],
"@biomejs/cli-linux-x64": ["@biomejs/cli-linux-x64@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-Pop9VXCFUhFTMfFefZ39S+u2rOPyNp5iHlxbZRwXGACHLy2r0jjiRgJHmaEKJzL3SyxlVeGShXhvvElvWowonA=="],
"@biomejs/cli-linux-x64-musl": ["@biomejs/cli-linux-x64-musl@2.5.6", "", { "os": "linux", "cpu": "x64" }, "sha512-2Vp13QdKysH3HIWLaYLhUUwbK+jbZonJD1K+Lr0d0RO4wH7mkYd43vJixEDm8cUWrowoRz4UUHF1nm9Ae7ym8A=="],
"@biomejs/cli-win32-arm64": ["@biomejs/cli-win32-arm64@2.5.6", "", { "os": "win32", "cpu": "arm64" }, "sha512-tDGshcm6BdkZOCGnTDX0Y8/U4IfBSlnUU7T56nNDuPEfed+aHg+u8G36NB43fJVl0Os6+QURXIE1yuD7AaEofA=="],
"@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.5.6", "", { "os": "win32", "cpu": "x64" }, "sha512-WN05KwXnTO/2J45RQPvzZMXf7tZUIofHoR35xIPfCo7pQ2RFidxI8sfb5mGsaTxdMmEOzHzOPRCdA5/fCpc7xQ=="],
"@bufbuild/protobuf": ["@bufbuild/protobuf@2.2.3", "", {}, "sha512-tFQoXHJdkEOSwj5tRIZSPNUuXK3RaR7T1nUrPgbYX1pUbvqqaaZAsfo+NXBPsz5rZMSKVFrgK1WL8Q/MSLvprg=="],
"@crxjs/vite-plugin": ["@crxjs/vite-plugin@2.7.1", "", { "dependencies": { "@webcomponents/custom-elements": "^1.5.0", "acorn-walk": "^8.3.5", "convert-source-map": "^2.0.0", "debug": "^4.4.3", "es-module-lexer": "^0.10.0", "fs-extra": "^11.3.5", "jsesc": "^3.0.2", "magic-string": "^0.30.12", "node-html-parser": "^7.1.0", "pathe": "^2.0.1", "picocolors": "^1.1.1", "rollup": "2.80.0", "rxjs": "7.5.7", "tinyglobby": "^0.2.17" }, "peerDependencies": { "vite": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0" } }, "sha512-mn77Lc1ilIvbO7ZqijjNy+AnRgc8srkfHOtV6HrGrYZgRe8YI3aIcSjHJCU5Kq75SejEZGrdAoHdn3gBGeKpEA=="],
"@emnapi/core": ["@emnapi/core@1.11.1", "", { "dependencies": { "@emnapi/wasi-threads": "1.2.2", "tslib": "^2.4.0" } }, "sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ=="],
"@emnapi/core": ["@emnapi/core@2.0.0-alpha.3", "", { "dependencies": { "@emnapi/wasi-threads": "2.0.1", "tslib": "^2.4.0" } }, "sha512-AZypUeJ/yByuxyS7BlSNRDOMLMlROYtjYdIAuBmJssVz1UJDSeYxLrdizhXCFYhedC5bqd/ASy8EuNXbVVXp9g=="],
"@emnapi/runtime": ["@emnapi/runtime@1.11.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw=="],
"@emnapi/runtime": ["@emnapi/runtime@2.0.0-alpha.3", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-hFPAhMUjJD9BSyCANEISPOogeXC9Zo9ZQl7L6vKnaVsMkCtzznaW/naYypeyl0Gv5rYfWYsZbpixTMpjDJzQeA=="],
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@1.2.2", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA=="],
"@emnapi/wasi-threads": ["@emnapi/wasi-threads@2.0.1", "", { "dependencies": { "tslib": "^2.4.0" } }, "sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ=="],
"@jridgewell/sourcemap-codec": ["@jridgewell/sourcemap-codec@1.5.5", "", {}, "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="],
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.1.6", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1", "@emnapi/runtime": "^1.7.1" } }, "sha512-ZLv/JdUfkvOy9eCnnBaGfiO+XimbjebAeO+MRQqD/B+FR1tnRN0tpKSJHRbE8sFfS6aqsXZ67TQjfwfsxULVbg=="],
"@napi-rs/wasm-runtime": ["@napi-rs/wasm-runtime@1.2.2", "", { "dependencies": { "@tybys/wasm-util": "^0.10.3" }, "peerDependencies": { "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.3", "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.3" } }, "sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw=="],
"@oxc-project/types": ["@oxc-project/types@0.139.0", "", {}, "sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw=="],
"@oxc-project/types": ["@oxc-project/types@0.142.0", "", {}, "sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ=="],
"@parcel/watcher": ["@parcel/watcher@2.5.0", "", { "dependencies": { "detect-libc": "^1.0.3", "is-glob": "^4.0.3", "micromatch": "^4.0.5", "node-addon-api": "^7.0.0" }, "optionalDependencies": { "@parcel/watcher-win32-x64": "2.5.0" } }, ""],
"@parcel/watcher-win32-x64": ["@parcel/watcher-win32-x64@2.5.0", "", { "os": "win32", "cpu": "x64" }, ""],
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.1.5", "", { "os": "android", "cpu": "arm64" }, "sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ=="],
"@rolldown/binding-android-arm64": ["@rolldown/binding-android-arm64@1.2.1", "", { "os": "android", "cpu": "arm64" }, "sha512-02hOeOSryYxVrOIphmLAsqnCJWxwlzFk+pEt/N/i6OgT3lShHO7xGCU5cpgchRDHboAEbSjzgGh+O/u1GswQmA=="],
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.1.5", "", { "os": "darwin", "cpu": "arm64" }, "sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw=="],
"@rolldown/binding-darwin-arm64": ["@rolldown/binding-darwin-arm64@1.2.1", "", { "os": "darwin", "cpu": "arm64" }, "sha512-fMsTOnN0OjFm3CyppWPitKnc8UlliVARUULW6cfU6AIqjdtgmSFWSk9vecHzZduv/yMWIHDlRhM1e8Iff9uAfA=="],
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.1.5", "", { "os": "darwin", "cpu": "x64" }, "sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g=="],
"@rolldown/binding-darwin-x64": ["@rolldown/binding-darwin-x64@1.2.1", "", { "os": "darwin", "cpu": "x64" }, "sha512-1wjKdz/XLGKHaTNHjQveQ/B23TKx4ItAqm1JbyVuvNPc4Ze0Fb48s49TAd/2zcplPl8okE/UbTgmlVfwT7eFeQ=="],
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.1.5", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA=="],
"@rolldown/binding-freebsd-x64": ["@rolldown/binding-freebsd-x64@1.2.1", "", { "os": "freebsd", "cpu": "x64" }, "sha512-Fa0jHR07E7YBN4vOEsbVf2briYNsuOowfLJaXULZM0ldMlaCaj2LJgLMbMe4iacRyZmvR8efFhgR9wKuGclQUg=="],
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.1.5", "", { "os": "linux", "cpu": "arm" }, "sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw=="],
"@rolldown/binding-linux-arm-gnueabihf": ["@rolldown/binding-linux-arm-gnueabihf@1.2.1", "", { "os": "linux", "cpu": "arm" }, "sha512-pzkgu1SSHGgRRyRZ4fbmSgmajbVt+epaLP99NDjFft69v/ypfTi6swBMiVdh2EkQ0OSnHE1lZDM7DRGkyAzUpA=="],
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q=="],
"@rolldown/binding-linux-arm64-gnu": ["@rolldown/binding-linux-arm64-gnu@1.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-QI5SEDY8cbiYWHx0VO4vIc3UlS6a32vXHjU8Qy/17adEmZIPuByJg13UEvo9c/UCiUkdcVWY83C+b+JrwnNyUg=="],
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.1.5", "", { "os": "linux", "cpu": "arm64" }, "sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA=="],
"@rolldown/binding-linux-arm64-musl": ["@rolldown/binding-linux-arm64-musl@1.2.1", "", { "os": "linux", "cpu": "arm64" }, "sha512-Sm41FyCeXqmYcERoYOCbGIL5hNfd8w9LQ7Y61Bev48HkcjaJqV/iiVOaiDxjVTRMS+QKrZmD8cfPt4uMVnvM+A=="],
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.1.5", "", { "os": "linux", "cpu": "ppc64" }, "sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg=="],
"@rolldown/binding-linux-ppc64-gnu": ["@rolldown/binding-linux-ppc64-gnu@1.2.1", "", { "os": "linux", "cpu": "ppc64" }, "sha512-2x+WhXTGl9yJYPbltW/BSEPTVz9OIWQyER4N+gJEDWkkn904eRcBzELqh/Hf7K0w/ubGbKNMv0ZC+94QK/IFEg=="],
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.1.5", "", { "os": "linux", "cpu": "s390x" }, "sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA=="],
"@rolldown/binding-linux-s390x-gnu": ["@rolldown/binding-linux-s390x-gnu@1.2.1", "", { "os": "linux", "cpu": "s390x" }, "sha512-eEjmQpuRQayHPWWnywaWHkFT3ToPbP3RYy42VVd/B9aBGDA+Ol25EIWHxKQST3IiWJjikCWUF7KtbfqwZrzVwQ=="],
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ=="],
"@rolldown/binding-linux-x64-gnu": ["@rolldown/binding-linux-x64-gnu@1.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-/Orga1fZYkLc/56jBICcHrKchl8Z2UKdDSr3LG9ToWO1lQ6a4Livk9Xz+9WN91zsz5QR3XQz2NNoSDEvP6qadw=="],
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.1.5", "", { "os": "linux", "cpu": "x64" }, "sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg=="],
"@rolldown/binding-linux-x64-musl": ["@rolldown/binding-linux-x64-musl@1.2.1", "", { "os": "linux", "cpu": "x64" }, "sha512-xxBJRL+0q0Kce7orznGWLuylHDY65vuARXZRpX+hPdv+DqK2c3NlCsVA98tlWzWNEE7yPqA/1NQ5nnCrj49Y5A=="],
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.1.5", "", { "os": "none", "cpu": "arm64" }, "sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw=="],
"@rolldown/binding-openharmony-arm64": ["@rolldown/binding-openharmony-arm64@1.2.1", "", { "os": "none", "cpu": "arm64" }, "sha512-M6AdXIXw3s+/8XpKMzdGDEXGS1S7kwUsy+rcTIUIOx5Ge4nXKCtAFHFV9YKkXvGcC5WMoTjAteLzlsQROVI0Yw=="],
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.1.5", "", { "dependencies": { "@emnapi/core": "1.11.1", "@emnapi/runtime": "1.11.1", "@napi-rs/wasm-runtime": "^1.1.6" }, "cpu": "none" }, "sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA=="],
"@rolldown/binding-wasm32-wasi": ["@rolldown/binding-wasm32-wasi@1.2.1", "", { "dependencies": { "@emnapi/core": "2.0.0-alpha.3", "@emnapi/runtime": "2.0.0-alpha.3", "@napi-rs/wasm-runtime": "^1.2.0" } }, "sha512-/TX0SoRGojHzSAHpfVBbavRVSazg5U3h3Y3VXfcc0cdugq6kxdqw8LPGFiPr+/7gE/60zRcsOY2Vi9b9eT0jww=="],
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.1.5", "", { "os": "win32", "cpu": "arm64" }, "sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw=="],
"@rolldown/binding-win32-arm64-msvc": ["@rolldown/binding-win32-arm64-msvc@1.2.1", "", { "os": "win32", "cpu": "arm64" }, "sha512-EvRrivJieyHG+AO9lleZWgq+g0+S7oV2C51yuqlcyU/R9net+sI4Pj0F+lUoP2bEr6TWX3SqFaaS0SzfLxSzkw=="],
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.1.5", "", { "os": "win32", "cpu": "x64" }, "sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA=="],
"@rolldown/binding-win32-x64-msvc": ["@rolldown/binding-win32-x64-msvc@1.2.1", "", { "os": "win32", "cpu": "x64" }, "sha512-Z4eCmn5QJ/5+azF9knpLWKfVd9aidn0mAe9TpJgvBLId9Ax3t0+JVxBmT25Bv7NBbVW1TZyKjQjQReouMeH5UQ=="],
"@rolldown/pluginutils": ["@rolldown/pluginutils@1.0.1", "", {}, "sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw=="],
@ -91,11 +110,11 @@
"@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, ""],
"@vot.js/core": ["@vot.js/core@3.0.1", "", { "dependencies": { "@vot.js/shared": "^3.0.1" }, "peerDependencies": { "typescript": "^6.0.0" } }, "sha512-mwNV6MG0VAZU5hgcvjUpphMZvX/bEl2HVI3VtRCneNuQv0FwZ+PmjfaX6ULGjei2/QoYpD1hoabrkE/+1oUEGw=="],
"@vot.js/core": ["@vot.js/core@3.0.2", "", { "dependencies": { "@vot.js/shared": "^3.0.2" }, "peerDependencies": { "typescript": "^6.0.0" } }, "sha512-MzvV31J++VTIc+OWv/vXh52cPtKBnfuOfelI7O4kaEHCPtn36XAMqPyaI7CjidugB54kIfD9mBvLnJaBWYhtkA=="],
"@vot.js/ext": ["@vot.js/ext@3.0.1", "", { "dependencies": { "@vot.js/core": "^3.0.1", "@vot.js/shared": "^3.0.1" }, "peerDependencies": { "typescript": "^6.0.0" } }, "sha512-s44ZyagvldLyTfjhtg1uxQ3j9qPpSfmVuQaDbEOcUPZSthb18RsW0JU0FD3ac0znR6IH/Z5BIwgBirC8TTDVyQ=="],
"@vot.js/ext": ["@vot.js/ext@3.0.2", "", { "dependencies": { "@vot.js/core": "^3.0.2", "@vot.js/shared": "^3.0.2" }, "peerDependencies": { "typescript": "^6.0.0" } }, "sha512-8S0s7ABCYSEszOUkVFoxDP07dew26z3XF6LMMdbDxEHwD2IfuKVhPJwa+0dG5dN2rcwb6AJW1lig8cgkl7AkNg=="],
"@vot.js/shared": ["@vot.js/shared@3.0.1", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0" }, "peerDependencies": { "typescript": "^6.0.0" } }, "sha512-zuOHMBXJyw3T7whdsv4Vx9ybrQxoDqMRtBsJwrNwoMaKVmIdmTGZCBf5eIwZyJpYvzsldaDbBIG4WsOOb2BteQ=="],
"@vot.js/shared": ["@vot.js/shared@3.0.2", "", { "dependencies": { "@bufbuild/protobuf": "^2.0.0" }, "peerDependencies": { "typescript": "^6.0.0" } }, "sha512-FvAM7TDlNyUrGio+uu0FYRO8rkN++3gTtEqKRjG2gqBs5ceeGQYBTr5j83qxjsNp3HcwJp0qJiL867ehW5F46g=="],
"@webcomponents/custom-elements": ["@webcomponents/custom-elements@1.6.0", "", {}, "sha512-CqTpxOlUCPWRNUPZDxT5v2NnHXA4oox612iUGnmTUGQFhZ1Gkj8kirtl/2wcF6MqX7+PqqicZzOCBKKfIn0dww=="],
@ -193,29 +212,29 @@
"lefthook-windows-x64": ["lefthook-windows-x64@2.1.10", "", { "os": "win32", "cpu": "x64" }, "sha512-c/XH8YZtylG4XaxzqFfXluvq2LXq2W/p54Bnzn3+Z7E5X2Fk3JlFJAibulMbIt2+w8T7UI/r97ok5GqE4kGaeA=="],
"lightningcss": ["lightningcss@1.32.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.32.0", "lightningcss-darwin-arm64": "1.32.0", "lightningcss-darwin-x64": "1.32.0", "lightningcss-freebsd-x64": "1.32.0", "lightningcss-linux-arm-gnueabihf": "1.32.0", "lightningcss-linux-arm64-gnu": "1.32.0", "lightningcss-linux-arm64-musl": "1.32.0", "lightningcss-linux-x64-gnu": "1.32.0", "lightningcss-linux-x64-musl": "1.32.0", "lightningcss-win32-arm64-msvc": "1.32.0", "lightningcss-win32-x64-msvc": "1.32.0" } }, "sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ=="],
"lightningcss": ["lightningcss@1.33.0", "", { "dependencies": { "detect-libc": "^2.0.3" }, "optionalDependencies": { "lightningcss-android-arm64": "1.33.0", "lightningcss-darwin-arm64": "1.33.0", "lightningcss-darwin-x64": "1.33.0", "lightningcss-freebsd-x64": "1.33.0", "lightningcss-linux-arm-gnueabihf": "1.33.0", "lightningcss-linux-arm64-gnu": "1.33.0", "lightningcss-linux-arm64-musl": "1.33.0", "lightningcss-linux-x64-gnu": "1.33.0", "lightningcss-linux-x64-musl": "1.33.0", "lightningcss-win32-arm64-msvc": "1.33.0", "lightningcss-win32-x64-msvc": "1.33.0" } }, "sha512-WkUDrojuJs0xkgGf2udWxa3yGBRxPtxUkB79i6aCZLRgc7PM8fZe9TosfPDcvEpQZbuFASnHYmRLBLUbmLOIIA=="],
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.32.0", "", { "os": "android", "cpu": "arm64" }, "sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg=="],
"lightningcss-android-arm64": ["lightningcss-android-arm64@1.33.0", "", { "os": "android", "cpu": "arm64" }, "sha512-gEpRTalKdosp4Bb8qWtc2iOgE5SeIHlpS1up9bFq2wAyYhl1UdTObYiHe98zEM9SQvSoqQZ1IQD0JNpg3Ml5pg=="],
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.32.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ=="],
"lightningcss-darwin-arm64": ["lightningcss-darwin-arm64@1.33.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-Sciaz8eenNTKn9b3t7+xr0ipTp9YxKQY4npwQ3mrRuL0BAVHBLyZxofhaKBAVtzmtRZ/zTyo0/to4B1uWG/Djg=="],
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.32.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w=="],
"lightningcss-darwin-x64": ["lightningcss-darwin-x64@1.33.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Z5UPAxzrjlWNNyGy6i65cJzzvgJ5D3T6wMvs+gWpY9d7qRhANrxqAp6LhxIgZhWEw18RfJTGcRxjuLIBr+m8XQ=="],
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.32.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig=="],
"lightningcss-freebsd-x64": ["lightningcss-freebsd-x64@1.33.0", "", { "os": "freebsd", "cpu": "x64" }, "sha512-QQM/Ti/hQajJwCY+RiWuCZ9sdtI/XQk7nDK5vC8kkdwixezOlDgvDx7+RT+QjK6FcFT4MpsuoBnHIo/O3StRRg=="],
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.32.0", "", { "os": "linux", "cpu": "arm" }, "sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw=="],
"lightningcss-linux-arm-gnueabihf": ["lightningcss-linux-arm-gnueabihf@1.33.0", "", { "os": "linux", "cpu": "arm" }, "sha512-N7FVBe6iS24MlM6R/4RBTxGhQheZGs7tiQ9U32UtF75NzP5Q7xWPRqLBCKxlRQRk3rY1jCIPLzx7WzOhuUIRLQ=="],
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ=="],
"lightningcss-linux-arm64-gnu": ["lightningcss-linux-arm64-gnu@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-j2v/itmy4HlNxlc6voKXYgBqNi0Ng2LShg4z7GufpEgs05P+2suBVyi9I6YHq5uoVFx9ETin3eCEhLVyXGQnKg=="],
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.32.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg=="],
"lightningcss-linux-arm64-musl": ["lightningcss-linux-arm64-musl@1.33.0", "", { "os": "linux", "cpu": "arm64" }, "sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ=="],
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA=="],
"lightningcss-linux-x64-gnu": ["lightningcss-linux-x64-gnu@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg=="],
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.32.0", "", { "os": "linux", "cpu": "x64" }, "sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg=="],
"lightningcss-linux-x64-musl": ["lightningcss-linux-x64-musl@1.33.0", "", { "os": "linux", "cpu": "x64" }, "sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw=="],
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.32.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw=="],
"lightningcss-win32-arm64-msvc": ["lightningcss-win32-arm64-msvc@1.33.0", "", { "os": "win32", "cpu": "arm64" }, "sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA=="],
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.32.0", "", { "os": "win32", "cpu": "x64" }, "sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q=="],
"lightningcss-win32-x64-msvc": ["lightningcss-win32-x64-msvc@1.33.0", "", { "os": "win32", "cpu": "x64" }, "sha512-OlEICDx/Xl0FqSp4bry8zFnCvGpig3Gl4gCquvYwHuqJKEC1+n9NgDniFvqHGmMv1ZkqDJrDqKKSykTDX+ehuA=="],
"lit-html": ["lit-html@3.3.3", "", { "dependencies": { "@types/trusted-types": "^2.0.2" } }, "sha512-el8M6jK2o3RXBnrSHX3ZKrsN8zEV63pSExTO1wYJz7QndGYZ8353e2a5PPX+qHe2aGayfnchQmkAojaWAREOIA=="],
@ -229,7 +248,7 @@
"ms": ["ms@2.1.3", "", {}, "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="],
"nanoid": ["nanoid@3.3.12", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ=="],
"nanoid": ["nanoid@3.3.16", "", { "bin": { "nanoid": "bin/nanoid.cjs" } }, "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q=="],
"node-addon-api": ["node-addon-api@7.1.1", "", {}, ""],
@ -251,13 +270,13 @@
"pidtree": ["pidtree@1.0.0", "", { "bin": { "pidtree": "bin/pidtree.js" } }, "sha512-avfAvjB9Dd0wdj3rjJX//yS+G79OO0KrS5pJHFJENjYGX6N4SMgEDBBI/yFy0lloOYSaC6XQxzpOAMPfSYFV/Q=="],
"postcss": ["postcss@8.5.19", "", { "dependencies": { "nanoid": "^3.3.12", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-Mz8SaolMd8nB+G13WkORcxQKHZ/NE4xXevtkJHVuG+guo9/wYKlIMTKAqGdEmYOXR2ijPjTYNHssizdaVSUNdQ=="],
"postcss": ["postcss@8.5.25", "", { "dependencies": { "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" } }, "sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw=="],
"read-package-json-fast": ["read-package-json-fast@6.0.0", "", { "dependencies": { "json-parse-even-better-errors": "^6.0.0", "npm-normalize-package-bin": "^6.0.0" } }, "sha512-PNaGjoCnw9DBA2Kl8D+8po957z778q/HOPuY2u3Bkw/JO3eC8MDx7jn/PgMtSgpcBbs+6UOjDbwReGpXmRvs0g=="],
"readdirp": ["readdirp@5.0.0", "", {}, "sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ=="],
"rolldown": ["rolldown@1.1.5", "", { "dependencies": { "@oxc-project/types": "=0.139.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.1.5", "@rolldown/binding-darwin-arm64": "1.1.5", "@rolldown/binding-darwin-x64": "1.1.5", "@rolldown/binding-freebsd-x64": "1.1.5", "@rolldown/binding-linux-arm-gnueabihf": "1.1.5", "@rolldown/binding-linux-arm64-gnu": "1.1.5", "@rolldown/binding-linux-arm64-musl": "1.1.5", "@rolldown/binding-linux-ppc64-gnu": "1.1.5", "@rolldown/binding-linux-s390x-gnu": "1.1.5", "@rolldown/binding-linux-x64-gnu": "1.1.5", "@rolldown/binding-linux-x64-musl": "1.1.5", "@rolldown/binding-openharmony-arm64": "1.1.5", "@rolldown/binding-wasm32-wasi": "1.1.5", "@rolldown/binding-win32-arm64-msvc": "1.1.5", "@rolldown/binding-win32-x64-msvc": "1.1.5" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA=="],
"rolldown": ["rolldown@1.2.1", "", { "dependencies": { "@oxc-project/types": "=0.142.0", "@rolldown/pluginutils": "^1.0.0" }, "optionalDependencies": { "@rolldown/binding-android-arm64": "1.2.1", "@rolldown/binding-darwin-arm64": "1.2.1", "@rolldown/binding-darwin-x64": "1.2.1", "@rolldown/binding-freebsd-x64": "1.2.1", "@rolldown/binding-linux-arm-gnueabihf": "1.2.1", "@rolldown/binding-linux-arm64-gnu": "1.2.1", "@rolldown/binding-linux-arm64-musl": "1.2.1", "@rolldown/binding-linux-ppc64-gnu": "1.2.1", "@rolldown/binding-linux-s390x-gnu": "1.2.1", "@rolldown/binding-linux-x64-gnu": "1.2.1", "@rolldown/binding-linux-x64-musl": "1.2.1", "@rolldown/binding-openharmony-arm64": "1.2.1", "@rolldown/binding-wasm32-wasi": "1.2.1", "@rolldown/binding-win32-arm64-msvc": "1.2.1", "@rolldown/binding-win32-x64-msvc": "1.2.1" }, "bin": { "rolldown": "./bin/cli.mjs" } }, "sha512-4FKJhg8d3OiyQOA6Q1Q0hoFFpW9/OoX+VsHzpECsdsIZoOArrAK90gl59YK/Z+gnDel45bgJZK03ozH/9bCqEw=="],
"rollup": ["rollup@2.80.0", "", { "optionalDependencies": { "fsevents": "~2.3.2" }, "bin": { "rollup": "dist/bin/rollup" } }, "sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ=="],
@ -287,12 +306,10 @@
"universalify": ["universalify@2.0.1", "", {}, "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw=="],
"vite": ["vite@8.1.5", "", { "dependencies": { "lightningcss": "^1.32.0", "picomatch": "^4.0.5", "postcss": "^8.5.17", "rolldown": "~1.1.5", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.3.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw=="],
"vite": ["vite@8.2.0", "", { "dependencies": { "lightningcss": "^1.33.0", "picomatch": "^4.0.5", "postcss": "^8.5.23", "rolldown": "~1.2.0", "tinyglobby": "^0.2.17" }, "optionalDependencies": { "fsevents": "~2.3.3" }, "peerDependencies": { "@types/node": "^20.19.0 || >=22.12.0", "@vitejs/devtools": "^0.4.0", "esbuild": "^0.27.0 || ^0.28.0", "jiti": ">=1.21.0", "less": "^4.0.0", "sass": "^1.70.0", "sass-embedded": "^1.70.0", "stylus": ">=0.54.8", "sugarss": "^5.0.0", "terser": "^5.16.0", "tsx": "^4.8.1", "yaml": "^2.4.2" }, "optionalPeers": ["@types/node", "@vitejs/devtools", "esbuild", "jiti", "less", "sass", "sass-embedded", "stylus", "sugarss", "terser", "tsx", "yaml"], "bin": { "vite": "bin/vite.js" } }, "sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ=="],
"which": ["which@7.0.0", "", { "dependencies": { "isexe": "^4.0.0" }, "bin": { "node-which": "bin/which.js" } }, "sha512-RancgH2dmbLdHl6LRhEqvklWMgl/Hdnun0Y90KhBOLkMefg8Qa7/Zel8Sm+8HEcP6DEjzsWzpkuBQEZok58isA=="],
"yaml": ["yaml@2.9.0", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA=="],
"zip-a-folder": ["zip-a-folder@6.1.3", "", { "dependencies": { "lzma": "^2.3.2", "tinyglobby": "^0.2.17" }, "bin": { "zip-a-folder": "dist/cli.mjs" } }, "sha512-6A4bKRyxLv9oVZwcBuF8zkV9YOdGD0XCVUgCKWiuK9lBXTQ3WSDYzGsA0ROSFfX2alGfvpf+zYtrfof2DFOGzg=="],
"cross-spawn/which": ["which@2.0.2", "", { "dependencies": { "isexe": "^2.0.0" }, "bin": { "node-which": "bin/node-which" } }, ""],

View file

@ -1,6 +1,6 @@
<?xml version='1.0' encoding='UTF-8'?>
<gupdate xmlns='http://www.google.com/update2/response' protocol='2.0'>
<app appid='dnioaagdjgpcokckfpokpndoblenmfcg'>
<updatecheck codebase='https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/dist-ext/vot-extension-chrome.zip' version='1.11.7' />
<updatecheck codebase='https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/dist-ext/vot-extension-chrome.zip' version='1.11.8' />
</app>
</gupdate>

Binary file not shown.

View file

@ -3,7 +3,7 @@
"vot-ext@firefox": {
"updates": [
{
"version": "1.11.7",
"version": "1.11.8",
"update_link": "https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/dist-ext/vot-extension-firefox.xpi"
}
]

Binary file not shown.

113
dist/vot-min.user.js vendored

File diff suppressed because one or more lines are too long

356
dist/vot.user.js vendored
View file

@ -222,7 +222,6 @@
// @connect raw.githubusercontent.com
// @connect vimeo.com
// @connect toil.cc
// @connect deno.dev
// @connect onrender.com
// @connect workers.dev
// @connect eu.cc
@ -285,7 +284,7 @@ var vot = (function(exports) {
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
@ -1114,12 +1113,13 @@ var vot = (function(exports) {
hostWorker: "vot-worker.toil.cc",
mediaProxy: "media-proxy.transly.eu.cc",
userAgent: "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/148.0.0.0 YaBrowser/26.6.0.0 Safari/537.36",
componentVersion: "26.6.3.870",
componentVersion: "26.6.4.760",
chromiumRevision: "760",
hmac: "bt8xH3VOlb4mqf0nqAibnDOoiPlXsisf",
defaultDuration: 310,
minChunkSize: 5295308,
loggerLevel: 1,
version: "3.0.1"
version: "3.0.2"
};
//#endregion
//#region node_modules/@vot.js/shared/dist/types/logger.js
@ -3216,14 +3216,14 @@ var vot = (function(exports) {
deviceId: void 0,
firstRequest: false,
duration: 0,
unknown0: 0,
unknown0: false,
language: "",
forceSourceLang: false,
unknown1: 0,
unknown1: false,
translationHelp: [],
wasStream: false,
responseLanguage: "",
unknown2: 0,
unknown2: false,
unknown3: 0,
bypassCache: false,
useLivelyVoice: false,
@ -3236,14 +3236,14 @@ var vot = (function(exports) {
if (message.deviceId !== void 0) writer.uint32(34).string(message.deviceId);
if (message.firstRequest !== false) writer.uint32(40).bool(message.firstRequest);
if (message.duration !== 0) writer.uint32(49).double(message.duration);
if (message.unknown0 !== 0) writer.uint32(56).int32(message.unknown0);
if (message.unknown0 !== false) writer.uint32(56).bool(message.unknown0);
if (message.language !== "") writer.uint32(66).string(message.language);
if (message.forceSourceLang !== false) writer.uint32(72).bool(message.forceSourceLang);
if (message.unknown1 !== 0) writer.uint32(80).int32(message.unknown1);
if (message.unknown1 !== false) writer.uint32(80).bool(message.unknown1);
for (const v of message.translationHelp) VideoTranslationHelpObject.encode(v, writer.uint32(90).fork()).join();
if (message.wasStream !== false) writer.uint32(104).bool(message.wasStream);
if (message.responseLanguage !== "") writer.uint32(114).string(message.responseLanguage);
if (message.unknown2 !== 0) writer.uint32(120).int32(message.unknown2);
if (message.unknown2 !== false) writer.uint32(120).bool(message.unknown2);
if (message.unknown3 !== 0) writer.uint32(128).int32(message.unknown3);
if (message.bypassCache !== false) writer.uint32(136).bool(message.bypassCache);
if (message.useLivelyVoice !== false) writer.uint32(144).bool(message.useLivelyVoice);
@ -3275,7 +3275,7 @@ var vot = (function(exports) {
continue;
case 7:
if (tag !== 56) break;
message.unknown0 = reader.int32();
message.unknown0 = reader.bool();
continue;
case 8:
if (tag !== 66) break;
@ -3287,7 +3287,7 @@ var vot = (function(exports) {
continue;
case 10:
if (tag !== 80) break;
message.unknown1 = reader.int32();
message.unknown1 = reader.bool();
continue;
case 11:
if (tag !== 90) break;
@ -3303,7 +3303,7 @@ var vot = (function(exports) {
continue;
case 15:
if (tag !== 120) break;
message.unknown2 = reader.int32();
message.unknown2 = reader.bool();
continue;
case 16:
if (tag !== 128) break;
@ -3333,14 +3333,14 @@ var vot = (function(exports) {
deviceId: isSet(object.deviceId) ? globalThis.String(object.deviceId) : void 0,
firstRequest: isSet(object.firstRequest) ? globalThis.Boolean(object.firstRequest) : false,
duration: isSet(object.duration) ? globalThis.Number(object.duration) : 0,
unknown0: isSet(object.unknown0) ? globalThis.Number(object.unknown0) : 0,
unknown0: isSet(object.unknown0) ? globalThis.Boolean(object.unknown0) : false,
language: isSet(object.language) ? globalThis.String(object.language) : "",
forceSourceLang: isSet(object.forceSourceLang) ? globalThis.Boolean(object.forceSourceLang) : false,
unknown1: isSet(object.unknown1) ? globalThis.Number(object.unknown1) : 0,
unknown1: isSet(object.unknown1) ? globalThis.Boolean(object.unknown1) : false,
translationHelp: globalThis.Array.isArray(object?.translationHelp) ? object.translationHelp.map((e) => VideoTranslationHelpObject.fromJSON(e)) : [],
wasStream: isSet(object.wasStream) ? globalThis.Boolean(object.wasStream) : false,
responseLanguage: isSet(object.responseLanguage) ? globalThis.String(object.responseLanguage) : "",
unknown2: isSet(object.unknown2) ? globalThis.Number(object.unknown2) : 0,
unknown2: isSet(object.unknown2) ? globalThis.Boolean(object.unknown2) : false,
unknown3: isSet(object.unknown3) ? globalThis.Number(object.unknown3) : 0,
bypassCache: isSet(object.bypassCache) ? globalThis.Boolean(object.bypassCache) : false,
useLivelyVoice: isSet(object.useLivelyVoice) ? globalThis.Boolean(object.useLivelyVoice) : false,
@ -3353,14 +3353,14 @@ var vot = (function(exports) {
if (message.deviceId !== void 0) obj.deviceId = message.deviceId;
if (message.firstRequest !== false) obj.firstRequest = message.firstRequest;
if (message.duration !== 0) obj.duration = message.duration;
if (message.unknown0 !== 0) obj.unknown0 = Math.round(message.unknown0);
if (message.unknown0 !== false) obj.unknown0 = message.unknown0;
if (message.language !== "") obj.language = message.language;
if (message.forceSourceLang !== false) obj.forceSourceLang = message.forceSourceLang;
if (message.unknown1 !== 0) obj.unknown1 = Math.round(message.unknown1);
if (message.unknown1 !== false) obj.unknown1 = message.unknown1;
if (message.translationHelp?.length) obj.translationHelp = message.translationHelp.map((e) => VideoTranslationHelpObject.toJSON(e));
if (message.wasStream !== false) obj.wasStream = message.wasStream;
if (message.responseLanguage !== "") obj.responseLanguage = message.responseLanguage;
if (message.unknown2 !== 0) obj.unknown2 = Math.round(message.unknown2);
if (message.unknown2 !== false) obj.unknown2 = message.unknown2;
if (message.unknown3 !== 0) obj.unknown3 = Math.round(message.unknown3);
if (message.bypassCache !== false) obj.bypassCache = message.bypassCache;
if (message.useLivelyVoice !== false) obj.useLivelyVoice = message.useLivelyVoice;
@ -3376,14 +3376,14 @@ var vot = (function(exports) {
message.deviceId = object.deviceId ?? void 0;
message.firstRequest = object.firstRequest ?? false;
message.duration = object.duration ?? 0;
message.unknown0 = object.unknown0 ?? 0;
message.unknown0 = object.unknown0 ?? false;
message.language = object.language ?? "";
message.forceSourceLang = object.forceSourceLang ?? false;
message.unknown1 = object.unknown1 ?? 0;
message.unknown1 = object.unknown1 ?? false;
message.translationHelp = object.translationHelp?.map((e) => VideoTranslationHelpObject.fromPartial(e)) || [];
message.wasStream = object.wasStream ?? false;
message.responseLanguage = object.responseLanguage ?? "";
message.unknown2 = object.unknown2 ?? 0;
message.unknown2 = object.unknown2 ?? false;
message.unknown3 = object.unknown3 ?? 0;
message.bypassCache = object.bypassCache ?? false;
message.useLivelyVoice = object.useLivelyVoice ?? false;
@ -3402,7 +3402,7 @@ var vot = (function(exports) {
language: void 0,
message: void 0,
isLivelyVoice: false,
unknown2: void 0,
allowToTranslateVideo: void 0,
shouldRetry: void 0,
unknown3: void 0
};
@ -3418,7 +3418,7 @@ var vot = (function(exports) {
if (message.language !== void 0) writer.uint32(66).string(message.language);
if (message.message !== void 0) writer.uint32(74).string(message.message);
if (message.isLivelyVoice !== false) writer.uint32(80).bool(message.isLivelyVoice);
if (message.unknown2 !== void 0) writer.uint32(88).int32(message.unknown2);
if (message.allowToTranslateVideo !== void 0) writer.uint32(88).bool(message.allowToTranslateVideo);
if (message.shouldRetry !== void 0) writer.uint32(96).int32(message.shouldRetry);
if (message.unknown3 !== void 0) writer.uint32(104).int32(message.unknown3);
return writer;
@ -3468,7 +3468,7 @@ var vot = (function(exports) {
continue;
case 11:
if (tag !== 88) break;
message.unknown2 = reader.int32();
message.allowToTranslateVideo = reader.bool();
continue;
case 12:
if (tag !== 96) break;
@ -3495,7 +3495,7 @@ var vot = (function(exports) {
language: isSet(object.language) ? globalThis.String(object.language) : void 0,
message: isSet(object.message) ? globalThis.String(object.message) : void 0,
isLivelyVoice: isSet(object.isLivelyVoice) ? globalThis.Boolean(object.isLivelyVoice) : false,
unknown2: isSet(object.unknown2) ? globalThis.Number(object.unknown2) : void 0,
allowToTranslateVideo: isSet(object.allowToTranslateVideo) ? globalThis.Boolean(object.allowToTranslateVideo) : void 0,
shouldRetry: isSet(object.shouldRetry) ? globalThis.Number(object.shouldRetry) : void 0,
unknown3: isSet(object.unknown3) ? globalThis.Number(object.unknown3) : void 0
};
@ -3511,7 +3511,7 @@ var vot = (function(exports) {
if (message.language !== void 0) obj.language = message.language;
if (message.message !== void 0) obj.message = message.message;
if (message.isLivelyVoice !== false) obj.isLivelyVoice = message.isLivelyVoice;
if (message.unknown2 !== void 0) obj.unknown2 = Math.round(message.unknown2);
if (message.allowToTranslateVideo !== void 0) obj.allowToTranslateVideo = message.allowToTranslateVideo;
if (message.shouldRetry !== void 0) obj.shouldRetry = Math.round(message.shouldRetry);
if (message.unknown3 !== void 0) obj.unknown3 = Math.round(message.unknown3);
return obj;
@ -3530,7 +3530,7 @@ var vot = (function(exports) {
message.language = object.language ?? void 0;
message.message = object.message ?? void 0;
message.isLivelyVoice = object.isLivelyVoice ?? false;
message.unknown2 = object.unknown2 ?? void 0;
message.allowToTranslateVideo = object.allowToTranslateVideo ?? void 0;
message.shouldRetry = object.shouldRetry ?? void 0;
message.unknown3 = object.unknown3 ?? void 0;
return message;
@ -3541,7 +3541,8 @@ var vot = (function(exports) {
status: 0,
remainingTime: void 0,
message: void 0,
unknown0: void 0
unknown0: void 0,
flags: []
};
}
var VideoTranslationCacheItem = {
@ -3550,6 +3551,9 @@ var vot = (function(exports) {
if (message.remainingTime !== void 0) writer.uint32(16).int32(message.remainingTime);
if (message.message !== void 0) writer.uint32(26).string(message.message);
if (message.unknown0 !== void 0) writer.uint32(32).int32(message.unknown0);
writer.uint32(42).fork();
for (const v of message.flags) writer.int32(v);
writer.join();
return writer;
},
decode(input, length) {
@ -3575,6 +3579,16 @@ var vot = (function(exports) {
if (tag !== 32) break;
message.unknown0 = reader.int32();
continue;
case 5:
if (tag === 40) {
message.flags.push(reader.int32());
continue;
}
if (tag === 42) {
const end2 = reader.uint32() + reader.pos;
while (reader.pos < end2) message.flags.push(reader.int32());
continue;
}
}
if ((tag & 7) === 4 || tag === 0) break;
reader.skip(tag & 7);
@ -3586,7 +3600,8 @@ var vot = (function(exports) {
status: isSet(object.status) ? globalThis.Number(object.status) : 0,
remainingTime: isSet(object.remainingTime) ? globalThis.Number(object.remainingTime) : void 0,
message: isSet(object.message) ? globalThis.String(object.message) : void 0,
unknown0: isSet(object.unknown0) ? globalThis.Number(object.unknown0) : void 0
unknown0: isSet(object.unknown0) ? globalThis.Number(object.unknown0) : void 0,
flags: globalThis.Array.isArray(object?.flags) ? object.flags.map((e) => globalThis.Number(e)) : []
};
},
toJSON(message) {
@ -3595,6 +3610,7 @@ var vot = (function(exports) {
if (message.remainingTime !== void 0) obj.remainingTime = Math.round(message.remainingTime);
if (message.message !== void 0) obj.message = message.message;
if (message.unknown0 !== void 0) obj.unknown0 = Math.round(message.unknown0);
if (message.flags?.length) obj.flags = message.flags.map((e) => Math.round(e));
return obj;
},
create(base) {
@ -3606,6 +3622,7 @@ var vot = (function(exports) {
message.remainingTime = object.remainingTime ?? void 0;
message.message = object.message ?? void 0;
message.unknown0 = object.unknown0 ?? void 0;
message.flags = object.flags?.map((e) => e) || [];
return message;
}
};
@ -4171,22 +4188,22 @@ var vot = (function(exports) {
return {
language: "",
url: "",
unknown0: 0,
hasTranslation: false,
translatedLanguage: "",
translatedUrl: "",
unknown1: 0,
unknown2: 0
unknown1: false,
subtitleId: 0
};
}
var SubtitlesObject = {
encode(message, writer = new BinaryWriter()) {
if (message.language !== "") writer.uint32(10).string(message.language);
if (message.url !== "") writer.uint32(18).string(message.url);
if (message.unknown0 !== 0) writer.uint32(24).int32(message.unknown0);
if (message.hasTranslation !== false) writer.uint32(24).bool(message.hasTranslation);
if (message.translatedLanguage !== "") writer.uint32(34).string(message.translatedLanguage);
if (message.translatedUrl !== "") writer.uint32(42).string(message.translatedUrl);
if (message.unknown1 !== 0) writer.uint32(48).int32(message.unknown1);
if (message.unknown2 !== 0) writer.uint32(56).int32(message.unknown2);
if (message.unknown1 !== false) writer.uint32(48).bool(message.unknown1);
if (message.subtitleId !== 0) writer.uint32(56).uint32(message.subtitleId);
return writer;
},
decode(input, length) {
@ -4206,7 +4223,7 @@ var vot = (function(exports) {
continue;
case 3:
if (tag !== 24) break;
message.unknown0 = reader.int32();
message.hasTranslation = reader.bool();
continue;
case 4:
if (tag !== 34) break;
@ -4218,11 +4235,11 @@ var vot = (function(exports) {
continue;
case 6:
if (tag !== 48) break;
message.unknown1 = reader.int32();
message.unknown1 = reader.bool();
continue;
case 7:
if (tag !== 56) break;
message.unknown2 = reader.int32();
message.subtitleId = reader.uint32();
continue;
}
if ((tag & 7) === 4 || tag === 0) break;
@ -4234,22 +4251,22 @@ var vot = (function(exports) {
return {
language: isSet(object.language) ? globalThis.String(object.language) : "",
url: isSet(object.url) ? globalThis.String(object.url) : "",
unknown0: isSet(object.unknown0) ? globalThis.Number(object.unknown0) : 0,
hasTranslation: isSet(object.hasTranslation) ? globalThis.Boolean(object.hasTranslation) : false,
translatedLanguage: isSet(object.translatedLanguage) ? globalThis.String(object.translatedLanguage) : "",
translatedUrl: isSet(object.translatedUrl) ? globalThis.String(object.translatedUrl) : "",
unknown1: isSet(object.unknown1) ? globalThis.Number(object.unknown1) : 0,
unknown2: isSet(object.unknown2) ? globalThis.Number(object.unknown2) : 0
unknown1: isSet(object.unknown1) ? globalThis.Boolean(object.unknown1) : false,
subtitleId: isSet(object.subtitleId) ? globalThis.Number(object.subtitleId) : 0
};
},
toJSON(message) {
const obj = {};
if (message.language !== "") obj.language = message.language;
if (message.url !== "") obj.url = message.url;
if (message.unknown0 !== 0) obj.unknown0 = Math.round(message.unknown0);
if (message.hasTranslation !== false) obj.hasTranslation = message.hasTranslation;
if (message.translatedLanguage !== "") obj.translatedLanguage = message.translatedLanguage;
if (message.translatedUrl !== "") obj.translatedUrl = message.translatedUrl;
if (message.unknown1 !== 0) obj.unknown1 = Math.round(message.unknown1);
if (message.unknown2 !== 0) obj.unknown2 = Math.round(message.unknown2);
if (message.unknown1 !== false) obj.unknown1 = message.unknown1;
if (message.subtitleId !== 0) obj.subtitleId = Math.round(message.subtitleId);
return obj;
},
create(base) {
@ -4259,11 +4276,11 @@ var vot = (function(exports) {
const message = createBaseSubtitlesObject();
message.language = object.language ?? "";
message.url = object.url ?? "";
message.unknown0 = object.unknown0 ?? 0;
message.hasTranslation = object.hasTranslation ?? false;
message.translatedLanguage = object.translatedLanguage ?? "";
message.translatedUrl = object.translatedUrl ?? "";
message.unknown1 = object.unknown1 ?? 0;
message.unknown2 = object.unknown2 ?? 0;
message.unknown1 = object.unknown1 ?? false;
message.subtitleId = object.subtitleId ?? 0;
return message;
}
};
@ -5985,7 +6002,7 @@ var vot = (function(exports) {
}));
//#endregion
//#region node_modules/@vot.js/shared/dist/secure.js
var { componentVersion } = config_default$1;
var { componentVersion, chromiumRevision } = config_default$1;
async function getCrypto() {
if (typeof window !== "undefined" && window.crypto) return window.crypto;
return await Promise.resolve().then(() => (init_nodeCrypto(), nodeCrypto_exports));
@ -6039,7 +6056,7 @@ var vot = (function(exports) {
}
var browserSecHeaders = {
"sec-ch-ua": `"Chromium";v="148", "YaBrowser";v="${componentVersion.slice(0, 5)}", "Not?A_Brand";v="99", "Yowser";v="2.5"`,
"sec-ch-ua-full-version-list": `"Chromium";v="148.0.7778.870", "YaBrowser";v="${componentVersion}", "Not?A_Brand";v="99.0.0.0", "Yowser";v="2.5"`,
"sec-ch-ua-full-version-list": `"Chromium";v="148.0.7778.${chromiumRevision}", "YaBrowser";v="${componentVersion}", "Not?A_Brand";v="99.0.0.0", "Yowser";v="2.5"`,
"Sec-Fetch-Mode": "no-cors"
};
//#endregion
@ -11337,14 +11354,14 @@ var vot = (function(exports) {
url,
firstRequest,
duration,
unknown0: 1,
unknown0: true,
language: requestLang,
forceSourceLang,
unknown1: 0,
unknown1: false,
translationHelp: translationHelp ?? [],
responseLanguage: responseLang,
wasStream,
unknown2: 1,
unknown2: true,
unknown3: 2,
bypassCache,
useLivelyVoice,
@ -11449,6 +11466,52 @@ var vot = (function(exports) {
decodeSessionResponse
};
//#endregion
//#region node_modules/@vot.js/core/dist/client.js
var VOTJSError = class extends Error {
data;
constructor(message, data = void 0) {
super(message);
this.data = data;
this.name = "VOTJSError";
}
};
var VOTClient$1 = class {
provider;
constructor({ provider, host, fetchFn, fetchOpts, requestLang = "en", responseLang = "ru", apiToken, headers } = {}) {
const ProviderClass = provider ?? YandexProvider;
this.provider = new ProviderClass({
host,
fetchFn,
fetchOpts,
headers,
apiToken,
requestLang,
responseLang
});
}
async translateVideo(opts) {
return await this.provider.translateVideo(opts);
}
async translateStream(opts) {
return await this.provider.translateStream(opts);
}
async getSubtitles(opts) {
return await this.provider.getSubtitles(opts);
}
get requestLang() {
return this.provider.requestLang;
}
set requestLang(lang) {
this.provider.requestLang = lang;
}
get responseLang() {
return this.provider.responseLang;
}
set responseLang(lang) {
this.provider.responseLang = lang;
}
};
//#endregion
//#region node_modules/@vot.js/core/dist/types/yandex.js
var VideoTranslationStatus;
(function(VideoTranslationStatus) {
@ -11471,6 +11534,10 @@ var vot = (function(exports) {
AudioDownloadType["WEB_API_SLOW"] = "web_api_slow";
AudioDownloadType["WEB_API_STEAL_SIG_AND_N"] = "web_api_steal_sig_and_n";
AudioDownloadType["WEB_API_COMBINED"] = "web_api_get_all_generating_urls_data_from_iframe,web_api_steal_sig_and_n";
AudioDownloadType["WEB_ABR"] = "web_abr";
AudioDownloadType["WEB_SABR"] = "web_sabr";
AudioDownloadType["WEB_MSE_PROXY"] = "web_mse_proxy";
AudioDownloadType["EMPTY_PLUG"] = "empty_plug";
})(AudioDownloadType || (AudioDownloadType = {}));
//#endregion
//#region node_modules/@vot.js/core/dist/providers/yandex.js
@ -11698,49 +11765,60 @@ var vot = (function(exports) {
}
};
//#endregion
//#region node_modules/@vot.js/core/dist/client.js
var VOTJSError = class extends Error {
data;
constructor(message, data = void 0) {
super(message);
this.data = data;
this.name = "VOTJSError";
//#region node_modules/@vot.js/core/dist/providers/votworker.js
var VOTWorkerProvider = class extends YandexProvider {
constructor(opts = {}) {
opts.host = opts.host ?? config_default$1.hostWorker;
super(opts);
}
};
var VOTClient$1 = class {
provider;
constructor({ provider, host, fetchFn, fetchOpts, requestLang = "en", responseLang = "ru", apiToken, headers } = {}) {
const ProviderClass = provider ?? YandexProvider;
this.provider = new ProviderClass({
host,
fetchFn,
fetchOpts,
headers,
apiToken,
requestLang,
responseLang
});
async request(path, body, headers = {}, method = "POST") {
const options = this.getOpts(JSON.stringify({
headers: {
...this.headers,
...headers
},
body: Array.from(body)
}), { "Content-Type": "application/json" }, method);
try {
const res = await this.fetch(`${this.schema}://${this.host}${path}`, options);
const data = await res.arrayBuffer();
return {
success: res.status === 200,
data
};
} catch (err) {
return {
success: false,
data: err?.message
};
}
}
async translateVideo(opts) {
return await this.provider.translateVideo(opts);
}
async translateStream(opts) {
return await this.provider.translateStream(opts);
}
async getSubtitles(opts) {
return await this.provider.getSubtitles(opts);
}
get requestLang() {
return this.provider.requestLang;
}
set requestLang(lang) {
this.provider.requestLang = lang;
}
get responseLang() {
return this.provider.responseLang;
}
set responseLang(lang) {
this.provider.responseLang = lang;
async requestJSON(path, body = null, headers = {}, method = "POST") {
const options = this.getOpts(JSON.stringify({
headers: {
...this.headers,
"Content-Type": "application/json",
Accept: "application/json",
...headers
},
body
}), {
Accept: "application/json",
"Content-Type": "application/json"
}, method);
try {
const res = await this.fetch(`${this.schema}://${this.host}${path}`, options);
const data = await res.json();
return {
success: res.status === 200,
data
};
} catch (err) {
return {
success: false,
data: err?.message
};
}
}
};
//#endregion
@ -11759,20 +11837,20 @@ var vot = (function(exports) {
}
};
//#endregion
//#region ../../chaimu/dist/config.js
//#region node_modules/chaimu/dist/config.js
var config_default = {
version: "1.1.0",
debug: false,
fetchFn: fetch.bind(window)
};
//#endregion
//#region ../../chaimu/dist/debug.js
//#region node_modules/chaimu/dist/debug.js
var debug_default = { log: (...text) => {
if (!config_default.debug) return;
return console.log(`%c✦ chaimu.js v${config_default.version} ✦`, "background: #000; color: #fff; padding: 0 8px", ...text);
} };
//#endregion
//#region ../../chaimu/dist/player.js
//#region node_modules/chaimu/dist/player.js
var videoLipSyncEvents = [
"playing",
"ratechange",
@ -12319,7 +12397,7 @@ var vot = (function(exports) {
}
};
//#endregion
//#region ../../chaimu/dist/client.js
//#region node_modules/chaimu/dist/client.js
var Chaimu = class {
_debug = false;
audioContext;
@ -12401,7 +12479,7 @@ var vot = (function(exports) {
};
//#endregion
//#region src/core/cacheManager.ts
var YANDEX_TTL_MS = 7200 * 1e3;
var YANDEX_TTL_MS = 72e5;
var VOT_SESSION_STORAGE_KEY = "VOTSession";
function getCurrentUnixTimestampSeconds() {
return Math.floor(Date.now() / 1e3);
@ -13332,9 +13410,7 @@ var vot = (function(exports) {
case "downloadedPartialAudio":
this.onDownloadedPartialAudio.addListener(listener);
break;
case "downloadAudioError":
this.onDownloadAudioError.addListener(listener);
break;
case "downloadAudioError": this.onDownloadAudioError.addListener(listener);
}
return this;
}
@ -13346,9 +13422,7 @@ var vot = (function(exports) {
case "downloadedPartialAudio":
this.onDownloadedPartialAudio.removeListener(listener);
break;
case "downloadAudioError":
this.onDownloadAudioError.removeListener(listener);
break;
case "downloadAudioError": this.onDownloadAudioError.removeListener(listener);
}
return this;
}
@ -17644,11 +17718,7 @@ var vot = (function(exports) {
case "bottom-left":
anchorX = elementWidth / 2;
break;
case "bottom-right":
anchorX = anchorBox.w - elementWidth / 2;
break;
case "bottom-center":
case "custom": break;
case "bottom-right": anchorX = anchorBox.w - elementWidth / 2;
}
return clampAnchorWithinBox({
anchorX,
@ -19869,9 +19939,8 @@ var vot = (function(exports) {
updateAdaptiveVerticalAlign() {
const viewportHeight = globalThis.visualViewport?.height ?? globalThis.innerHeight;
if (!viewportHeight || viewportHeight <= 0) return;
const marginPx = 16;
const centerMaxPx = Math.max(160, Math.round(viewportHeight * .75));
const topMaxPx = Math.max(160, Math.round(viewportHeight - marginPx * 2));
const topMaxPx = Math.max(160, Math.round(viewportHeight - 32));
const contentHeightPx = this.contentWrapper.scrollHeight;
const currentlyTop = this.box.dataset.verticalAlign === "top";
const enterTopThresholdPx = centerMaxPx - 8;
@ -20690,8 +20759,8 @@ var vot = (function(exports) {
if (!this.isOpen) return;
const rootRect = this.layoutRoot.getBoundingClientRect();
const gap = 8;
const maxRootWidth = Math.max(160, rootRect.width - gap * 2);
const maxRootHeight = Math.max(96, rootRect.height - gap * 2);
const maxRootWidth = Math.max(160, rootRect.width - 16);
const maxRootHeight = Math.max(96, rootRect.height - 16);
this.container.style.setProperty("--vot-voice-popover-max-width", `${Math.min(310, maxRootWidth)}px`);
this.container.style.setProperty("--vot-voice-popover-max-height", `${maxRootHeight}px`);
const buttonContainer = anchor.closest("[data-direction]") ?? anchor;
@ -26596,63 +26665,6 @@ var vot = (function(exports) {
return { nextVideo };
}
//#endregion
//#region node_modules/@vot.js/core/dist/providers/votworker.js
var VOTWorkerProvider = class extends YandexProvider {
constructor(opts = {}) {
opts.host = opts.host ?? config_default$1.hostWorker;
super(opts);
}
async request(path, body, headers = {}, method = "POST") {
const options = this.getOpts(JSON.stringify({
headers: {
...this.headers,
...headers
},
body: Array.from(body)
}), { "Content-Type": "application/json" }, method);
try {
const res = await this.fetch(`${this.schema}://${this.host}${path}`, options);
const data = await res.arrayBuffer();
return {
success: res.status === 200,
data
};
} catch (err) {
return {
success: false,
data: err?.message
};
}
}
async requestJSON(path, body = null, headers = {}, method = "POST") {
const options = this.getOpts(JSON.stringify({
headers: {
...this.headers,
"Content-Type": "application/json",
Accept: "application/json",
...headers
},
body
}), {
Accept: "application/json",
"Content-Type": "application/json"
}, method);
try {
const res = await this.fetch(`${this.schema}://${this.host}${path}`, options);
const data = await res.json();
return {
success: res.status === 200,
data
};
} catch (err) {
return {
success: false,
data: err?.message
};
}
}
};
//#endregion
//#region src/VideoHandler.ts
var RESOLVED_VOID_PROMISE = Promise.resolve();
var TRANSLATION_LOADING_MESSAGES = /* @__PURE__ */ new Set([
@ -27617,8 +27629,6 @@ var vot = (function(exports) {
*/
releaseExtraEvents = releaseExtraEvents;
};
//#endregion
//#region src/index.ts
var videoObserver = new VideoObserver(createIntervalIdleChecker());
var videosWrappers = /* @__PURE__ */ new WeakMap();
var servicesCache = null;

View file

@ -15,6 +15,7 @@
"voice-over-translation"
],
"devDependencies": {
"@biomejs/biome": "^2.5.6",
"@crxjs/vite-plugin": "^2.7.1",
"@toil/translate": "^1.10.0",
"@types/bun": "^1.3.14",
@ -22,7 +23,7 @@
"npm-run-all2": "^9.0.3",
"sass": "^1.102.0",
"typescript": "^6.0.3",
"vite": "^8.1.5",
"vite": "^8.2.0",
"zip-a-folder": "^6.1.3"
},
"scripts": {
@ -30,9 +31,9 @@
"test:unit": "bun test",
"test:unit:watch": "bun test --watch",
"test:ui": "vite build --config vite/vite.test-ui.config.ts",
"build": "vite build --config vite/vite.config.ts",
"build:min": "vite build --mode minify --config vite/vite.config.ts",
"build:all": "run-p build build:min",
"build:gm:default": "vite build --config vite/vite.config.ts",
"build:gm:min": "vite build --mode minify --config vite/vite.config.ts",
"build:gm": "run-p build:gm:default build:gm:min",
"build:ext": "run-p build:chrome build:firefox",
"build:chrome": "vite build --config vite/vite.extension.crxjs.config.ts",
"build:firefox": "vite build --config vite/vite.extension.config.ts",
@ -40,15 +41,17 @@
"dev": "vite build --watch --mode development --config vite/vite.config.ts",
"format": "bunx @biomejs/biome check --write --unsafe ./src ./vite ./scripts",
"lint": "bunx @biomejs/biome lint ./src ./vite ./scripts",
"check": "bunx tsc --noEmit",
"check": "bunx tsc --noEmit && bunx tsc -p src/tsconfig.json --noEmit",
"gen:wiki": "bun run ./scripts/wiki-gen/index.js",
"autobuild": "bun run ./scripts/autobuild.ts",
"zip:source": "bun ./scripts/zip/get-source.ts",
"localize": "bunx \"@toil/localize-tui\""
},
"dependencies": {
"@toil/gm-types": "^1.0.5",
"@vot.js/ext": "^3.0.1",
"@vot.js/core": "^3.0.1",
"@vot.js/shared": "^3.0.1",
"@vot.js/ext": "^3.0.2",
"@vot.js/core": "^3.0.2",
"@vot.js/shared": "^3.0.2",
"bowser": "^2.14.1",
"chaimu": "^1.1.0",
"lit-html": "^3.3.3"

47
scripts/autobuild.ts Normal file
View file

@ -0,0 +1,47 @@
import { $ } from "bun";
import headers from "../src/headers.json";
const EXTENSION_NAME = "vot-extension";
const FIREFOX_EXTENSION_NAME = `${EXTENSION_NAME}-firefox`;
const CHROME_EXTENSION_NAME = `${EXTENSION_NAME}-chrome`;
const OUTPUT_EXTENSION_FIREFOX_NAME = `${EXTENSION_NAME}-${headers.version}-firefox`;
const OUTPUT_EXTENSION_CHROME_NAME = `${EXTENSION_NAME}-${headers.version}-chrome`;
async function main() {
console.log("Starting autobuild...");
console.log("Clearing output directory...");
await $`rm -rf .output`.quiet(false);
await $`mkdir -p .output`.quiet(false);
console.log("Building extension source zip...");
await $`bun zip:source`.quiet(false);
console.log("Building extension as an userscript...");
await $`bun build:gm`.quiet(false);
console.log("Building extension in store mode...");
await $`IS_STORE_BUILD=true bun build:ext`.quiet(false);
console.log("Copying store build to output directory...");
await $`cp dist-ext/${FIREFOX_EXTENSION_NAME}.xpi .output/${OUTPUT_EXTENSION_FIREFOX_NAME}-store.xpi`.quiet(
false,
);
await $`cp dist-ext/${CHROME_EXTENSION_NAME}.zip .output/${OUTPUT_EXTENSION_CHROME_NAME}-store.zip`.quiet(
false,
);
console.log("Building extension in non-store mode...");
await $`IS_STORE_BUILD=false bun build:ext`.quiet(false);
console.log("Copying non-store firefox build to output directory...");
await $`cp dist-ext/${FIREFOX_EXTENSION_NAME}.xpi .output/${OUTPUT_EXTENSION_FIREFOX_NAME}.xpi`.quiet(
false,
);
await $`bunx @biomejs/biome check --write --unsafe dist-ext/${FIREFOX_EXTENSION_NAME}-updates.json`.quiet(
false,
);
}
await main();

59
scripts/zip/get-source.ts Normal file
View file

@ -0,0 +1,59 @@
import fs from "node:fs/promises";
import path from "node:path";
import headers from "../../src/headers.json";
import { zipDir } from "./utils";
const ROOT_PATH = path.join(__dirname, "..", "..");
const DIST_EXT_PATH = path.join(ROOT_PATH, ".output");
const OUTPUT_FILENAME = `vot-extension-${headers.version}-firefox-source.zip`;
const OUTPUT_PATH = path.join(DIST_EXT_PATH, OUTPUT_FILENAME);
const SOURCE_PATHS = [
"src",
"vite",
"scripts",
"README.md",
"README-EN.md",
"tsconfig.json",
"biome.json",
"bun.lock",
"package.json",
].map((p) => path.join(ROOT_PATH, p));
async function main() {
console.log(`Zipping source code as ${OUTPUT_FILENAME}...`);
if (await fs.exists(OUTPUT_PATH)) {
console.log("Removing existing zip file...");
await fs.rm(OUTPUT_PATH);
}
if (!(await fs.exists(DIST_EXT_PATH))) {
console.log("Creating output directory...");
await fs.mkdir(DIST_EXT_PATH, { recursive: true });
}
const tmpdir = await fs.mkdtemp(path.join(DIST_EXT_PATH, "tmp-"));
try {
for (const sourcePath of SOURCE_PATHS) {
const destPath = path.join(tmpdir, path.relative(ROOT_PATH, sourcePath));
await fs.mkdir(path.dirname(destPath), { recursive: true });
await fs.cp(sourcePath, destPath, { recursive: true });
}
await zipDir(tmpdir, OUTPUT_PATH);
console.log(`Source code zipped successfully: ${OUTPUT_PATH}`);
} catch {
console.error("Error occurred while zipping source code");
} finally {
console.log("Cleaning up temporary files...");
await fs.rm(tmpdir, { recursive: true, force: true });
console.log("Temporary files cleaned up");
}
process.exit(0);
}
if (import.meta.main) {
await main();
}
export { main as getSourceZip };

16
scripts/zip/utils.ts Normal file
View file

@ -0,0 +1,16 @@
import fs from "node:fs/promises";
import path from "node:path";
import { COMPRESSION_LEVEL, zip } from "zip-a-folder";
export async function zipDir(
sourceDirPath: string,
outZipPath: string,
): Promise<void> {
await fs.rm(outZipPath, { force: true });
await fs.mkdir(path.dirname(outZipPath), { recursive: true });
await zip(sourceDirPath, outZipPath, {
compression: COMPRESSION_LEVEL.high,
zlib: { level: 9 },
});
}

7
src/tsconfig.json Normal file
View file

@ -0,0 +1,7 @@
{
"extends": "../tsconfig.json",
"compilerOptions": {
"types": ["@toil/gm-types/v3", "@toil/gm-types/v4", "vite/client"]
},
"include": ["./**/*.ts", "./**/*.tsx", "./**/*.d.ts"]
}

View file

@ -1,6 +1,6 @@
{
"compilerOptions": {
"types": ["@toil/gm-types/v3", "@toil/gm-types/v4"],
"types": ["bun"],
"target": "ES2024",
"module": "ESNext",
"lib": ["DOM", "DOM.Iterable", "ESNext"],
@ -11,5 +11,5 @@
"skipLibCheck": true,
"resolveJsonModule": true
},
"include": ["src/**/*.ts", "src/**/*.d.ts"]
"include": ["scripts/**/*.ts", "vite/**/*.ts"]
}

View file

@ -1,6 +1,6 @@
import fs from "node:fs/promises";
import path from "node:path";
import { COMPRESSION_LEVEL, zip } from "zip-a-folder";
import { zipDir } from "../../../scripts/zip/utils";
import type { BuildConfig } from "../env";
import { distExtDir } from "../paths";
@ -8,18 +8,6 @@ const GITHUB_DIST_EXT_RAW_BASE =
"https://raw.githubusercontent.com/ilyhalight/voice-over-translation/master/dist-ext";
const CHROME_CRX_RAW_URL = `${GITHUB_DIST_EXT_RAW_BASE}/vot-extension-chrome.zip`;
async function zipDir(
sourceDirPath: string,
outZipPath: string,
): Promise<void> {
await fs.rm(outZipPath, { force: true });
await fs.mkdir(path.dirname(outZipPath), { recursive: true });
await zip(sourceDirPath, outZipPath, {
compression: COMPRESSION_LEVEL.high,
zlib: { level: 9 },
});
}
export async function writeChromeUpdatesManifest({
version,
extensionId,

View file

@ -1,7 +1,7 @@
import fs from "node:fs/promises";
import path from "node:path";
import { type UserConfig, build as viteBuild } from "vite";
import { COMPRESSION_LEVEL, zip } from "zip-a-folder";
import { type InlineConfig, type UserConfig, build as viteBuild } from "vite";
import { zipDir } from "../../../scripts/zip/utils";
import { type BuildConfig, type BuildEnvMeta, buildDefine } from "../env";
import {
distExtDir,
@ -148,7 +148,7 @@ export async function getFirefoxBuildEnv(
function createExtensionEntryConfig(
entry: ExtensionEntry,
define: UserConfig["define"],
): UserConfig {
): InlineConfig {
const baseConfig = createBaseViteConfig({
cacheName: "firefox-extension-bundles",
});
@ -421,18 +421,6 @@ async function writeFirefoxUpdatesManifest({
return updatesManifestPath;
}
async function zipDir(
sourceDirPath: string,
outZipPath: string,
): Promise<void> {
await fs.rm(outZipPath, { force: true });
await fs.mkdir(path.dirname(outZipPath), { recursive: true });
await zip(sourceDirPath, outZipPath, {
compression: COMPRESSION_LEVEL.high,
zlib: { level: 9 },
});
}
// ----------------------------------------------------------------
// Firefox verification
// ----------------------------------------------------------------

View file

@ -53,5 +53,4 @@ export function createViteConfig(
};
}
export type { ViteDefine } from "./define";
export { defineConstants } from "./define";
export { defineConstants, type ViteDefine } from "./define";

View file

@ -1,5 +1,5 @@
import path from "node:path";
import { defineConfig } from "vite";
import { defineConfig, type UserConfig } from "vite";
import { buildDefine } from "./lib/env";
import { distDir, singleFileBuildOptions, srcDir } from "./lib/paths";
import {
@ -99,5 +99,5 @@ export default defineConfig(async ({ command, mode }) => {
},
},
},
};
} satisfies UserConfig;
});

View file

@ -1,10 +1,5 @@
import { defineConfig, type Plugin } from "vite";
import {
type BuildConfig,
buildDefine,
getBuildConfig,
isStoreBuild,
} from "./lib/env";
import { type BuildConfig, buildDefine, getBuildConfig } from "./lib/env";
import {
buildExtensionBundles,
cleanupExtensionTmpDir,

View file

@ -1,6 +1,6 @@
import path from "node:path";
import { crx } from "@crxjs/vite-plugin";
import { defineConfig, type Plugin } from "vite";
import { defineConfig, type Plugin, type UserConfig } from "vite";
import { type BuildConfig, buildDefine, getBuildConfig } from "./lib/env";
import {
finalizeChromeBuild,
@ -57,5 +57,5 @@ export default defineConfig(async ({ mode }) => {
sourcemap: false,
minify: "oxc",
},
};
} satisfies UserConfig;
});