From 7fffdfb500fae9be448716e9642f1cbbf6f51dd2 Mon Sep 17 00:00:00 2001 From: hazre Date: Mon, 20 Jul 2026 19:20:32 +0200 Subject: [PATCH 01/19] feat: add mise support Signed-off-by: hazre --- mise.toml | 7 +++++++ rust-toolchain.toml | 3 +++ 2 files changed, 10 insertions(+) create mode 100644 mise.toml create mode 100644 rust-toolchain.toml diff --git a/mise.toml b/mise.toml new file mode 100644 index 0000000000..04d18ed87f --- /dev/null +++ b/mise.toml @@ -0,0 +1,7 @@ +[settings] +idiomatic_version_file_enable_tools = ["pnpm", "node", "rust"] +experimental = true + +[tools] +cargo-binstall = "1.21.0" +"cargo:knope" = "0.23.0" diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000000..59277fee77 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "1.97.1" +components = ["clippy", "rustfmt"] From 314cb23dcddc1a00b3c3ad7292a94482a40941d2 Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 01:43:28 +0200 Subject: [PATCH 02/19] chore(tauri): update cargo.toml metadata Signed-off-by: hazre --- knope.toml | 2 +- src-tauri/Cargo.lock | 2 +- src-tauri/Cargo.toml | 9 ++++----- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/knope.toml b/knope.toml index 04cc4e690e..24ed9d44cb 100644 --- a/knope.toml +++ b/knope.toml @@ -1,5 +1,5 @@ [package] -versioned_files = ["package.json", "src-tauri/tauri.conf.json"] +versioned_files = ["package.json", "src-tauri/tauri.conf.json", "src-tauri/Cargo.toml"] changelog = "CHANGELOG.md" extra_changelog_sections = [ { name = "Security", types = [ diff --git a/src-tauri/Cargo.lock b/src-tauri/Cargo.lock index abf76250f8..de87db9451 100644 --- a/src-tauri/Cargo.lock +++ b/src-tauri/Cargo.lock @@ -5349,7 +5349,7 @@ checksum = "9774ba4a74de5f7b1c1451ed6cd5285a32eddb5cccb8cc655a4e50009e06477f" [[package]] name = "sable" -version = "0.1.0" +version = "1.20.0" dependencies = [ "aes", "async-stream", diff --git a/src-tauri/Cargo.toml b/src-tauri/Cargo.toml index 5ce3edb089..0a21145489 100644 --- a/src-tauri/Cargo.toml +++ b/src-tauri/Cargo.toml @@ -1,12 +1,11 @@ [package] name = "sable" -version = "0.1.0" +version = "1.20.0" description = "Yet another matrix client but better" -authors = ["you"] -license = "" -repository = "" +authors = ["Sable Maintainers"] +license = "AGPL-3.0-or-later" +repository = "https://github.com/SableClient/Sable" edition = "2021" -rust-version = "1.88.0" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html From bacb087be6c230dd05c53a59348b824bec47b206 Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 01:52:12 +0200 Subject: [PATCH 03/19] chore: move pnpm overrides to pnpm-workspace.yaml Signed-off-by: hazre --- package.json | 7 +------ pnpm-workspace.yaml | 1 + 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ee8ec0799b..4de819eb85 100644 --- a/package.json +++ b/package.json @@ -162,10 +162,5 @@ "node": "24.x", "pnpm": ">=10" }, - "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be", - "pnpm": { - "overrides": { - "jsdom>undici": "^7.28.0" - } - } + "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be" } diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index dd46996060..0b5e9b21ec 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -18,6 +18,7 @@ overrides: brace-expansion: '>=1.1.12' esbuild: '>=0.25.0' flatted: '>=3.4.2' + jsdom>undici: '^7.28.0' lodash: '>=4.17.23' minimatch: '>=10.2.3' rollup: '>=4.59.0' From 612aa2f87e4210161b5ec2f6644a61fc292ce899 Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 01:55:57 +0200 Subject: [PATCH 04/19] chore(scripts): convert shell scripts to cross-platform ESM Signed-off-by: hazre --- scripts/cef-copy-libs.sh | 1 + scripts/cef-package.sh | 1 + scripts/icons/replace.js | 163 +++++++++++++++++++++++++++++++++++++++ scripts/replace-logo.sh | 126 ------------------------------ scripts/tauri.js | 70 ++++++++--------- 5 files changed, 199 insertions(+), 162 deletions(-) create mode 100644 scripts/icons/replace.js delete mode 100755 scripts/replace-logo.sh diff --git a/scripts/cef-copy-libs.sh b/scripts/cef-copy-libs.sh index 99e0261266..30603f8170 100644 --- a/scripts/cef-copy-libs.sh +++ b/scripts/cef-copy-libs.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +#MISE description="Copy CEF runtime libs next to the built binary" # Copy the CEF runtime (libcef.so + resources) next to a built binary so the app # is self-contained: works standalone, when launched by the OS via a sable:// # deep link, or from a release package. Pair with the rpath=$ORIGIN that diff --git a/scripts/cef-package.sh b/scripts/cef-package.sh index aeff0fd11f..440d48644d 100755 --- a/scripts/cef-package.sh +++ b/scripts/cef-package.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +#MISE description="Package CEF build into deb/rpm/AppImage" # Package the Linux CEF build into deb/rpm/AppImage. Used by CI and locally. # Run after the binary is built (pnpm tauri:cef build). # Usage: scripts/cef-package.sh [version] diff --git a/scripts/icons/replace.js b/scripts/icons/replace.js new file mode 100644 index 0000000000..3f02f54150 --- /dev/null +++ b/scripts/icons/replace.js @@ -0,0 +1,163 @@ +#!/usr/bin/env node +//MISE description="Replace logo/icon assets in public/ from SVG inputs via ffmpeg" + +import { execFileSync } from 'node:child_process'; +import { existsSync, mkdirSync, copyFileSync } from 'node:fs'; +import { dirname, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { createInterface } from 'node:readline'; +import { PrefixedLogger, createTextHelpers } from './utils/console-style.js'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const BASE_DIR = resolve(__dirname, '..'); + +const logger = new PrefixedLogger('[replace-logo]'); +const { red } = createTextHelpers({ useColor: logger.useColor }); + +/** + * Display a question on stdin and return the user's trimmed response. + * @param {string} question - The prompt text to display. + * @returns {Promise} The user's input with surrounding whitespace removed. + */ +function prompt(question) { + const rl = createInterface({ input: process.stdin, output: process.stdout }); + return new Promise((resolve_) => { + rl.question(question, (answer) => { + rl.close(); + resolve_(answer.trim()); + }); + }); +} + +/** Print CLI usage instructions to stdout. */ +function usage() { + logger.info(`Usage: run this script and provide four file paths when prompted. +It will replace icons in the repository public/ tree using ffmpeg. + +You will be prompted for: + - maskless (borderless) logo (used for maskable icons) + - circular logo (used for circular icons) + - highlight variant (icon for highlight indicator) + - unread variant (icon for unread indicator) + +Requires: ffmpeg, base64`); +} + +/** + * Render an SVG to a PNG at the given square dimension using ffmpeg. + * Creates the output directory if it doesn't already exist. + * @param {string} input - Absolute path to the source SVG file. + * @param {string} output - Absolute path for the generated PNG. + * @param {string | number} size - Width and height in pixels. + */ +function ffmpegCmd(input, output, size) { + mkdirSync(dirname(output), { recursive: true }); + logger.info(`Generating ${output} (${size} x ${size})`); + execFileSync( + 'ffmpeg', + ['-y', '-width', String(size), '-height', String(size), '-i', input, output], + { + stdio: 'pipe', + } + ); +} + +/** + * Check whether a file path has an SVG extension (case-insensitive). + * @param {string} filePath + * @returns {boolean} + */ +function isSvg(filePath) { + return filePath.toLowerCase().endsWith('.svg'); +} + +/** + * Entry point. Prompts for four SVG logo variants, validates them, + * then renders PNGs at every required size and copies SVGs into public/res/svg/. + * @param {string[]} args - CLI arguments (supports --help / -h). + */ +async function main(args) { + if (args.includes('--help') || args.includes('-h')) { + usage(); + process.exit(0); + } + + const maskless = await prompt('Path to maskless (borderless) logo: '); + const circular = await prompt('Path to circular logo: '); + const highlight = await prompt('Path to highlight variant: '); + const unread = await prompt('Path to unread variant: '); + + for (const f of [maskless, circular, highlight, unread]) { + if (!existsSync(f)) { + logger.error(`${red('File not found:')} ${f}`); + process.exit(2); + } + if (!isSvg(f)) { + logger.error(`${red('Input must be an SVG:')} ${f}`); + process.exit(3); + } + } + + /** @type {[number, string][]} */ + const CIRCULAR_TARGETS = [ + [512, 'public/favicon.png'], + [2560, 'public/full_res_sable.png'], + [144, 'public/res/logo/logo-144x144.png'], + [192, 'public/res/logo/logo-192x192.png'], + [256, 'public/res/logo/logo-256x256.png'], + [36, 'public/res/logo/logo-36x36.png'], + [384, 'public/res/logo/logo-384x384.png'], + [48, 'public/res/logo/logo-48x48.png'], + [512, 'public/res/logo/logo-512x512.png'], + [72, 'public/res/logo/logo-72x72.png'], + [96, 'public/res/logo/logo-96x96.png'], + ]; + + logger.info('Replacing circular icons...'); + for (const [size, out] of CIRCULAR_TARGETS) { + ffmpegCmd(circular, resolve(BASE_DIR, out), size); + } + + /** @type {[number, string][]} */ + const MASKABLE_TARGETS = [ + [114, 'public/res/logo-maskable/logo-maskable-114x114.png'], + [120, 'public/res/logo-maskable/logo-maskable-120x120.png'], + [144, 'public/res/logo-maskable/logo-maskable-144x144.png'], + [152, 'public/res/logo-maskable/logo-maskable-152x152.png'], + [167, 'public/res/logo-maskable/logo-maskable-167x167.png'], + [180, 'public/res/logo-maskable/logo-maskable-180x180.png'], + [192, 'public/res/logo-maskable/logo-maskable-192x192.png'], + [256, 'public/res/logo-maskable/logo-maskable-256x256.png'], + [36, 'public/res/logo-maskable/logo-maskable-36x36.png'], + [384, 'public/res/logo-maskable/logo-maskable-384x384.png'], + [48, 'public/res/logo-maskable/logo-maskable-48x48.png'], + [512, 'public/res/logo-maskable/logo-maskable-512x512.png'], + [57, 'public/res/logo-maskable/logo-maskable-57x57.png'], + [60, 'public/res/logo-maskable/logo-maskable-60x60.png'], + [72, 'public/res/logo-maskable/logo-maskable-72x72.png'], + [76, 'public/res/logo-maskable/logo-maskable-76x76.png'], + [96, 'public/res/logo-maskable/logo-maskable-96x96.png'], + ]; + + logger.info('Replacing maskable icons (using maskless input)...'); + for (const [size, out] of MASKABLE_TARGETS) { + ffmpegCmd(maskless, resolve(BASE_DIR, out), size); + } + + logger.info('Handling SVG assets in public/res/svg/...'); + const svgDir = resolve(BASE_DIR, 'public/res/svg'); + mkdirSync(svgDir, { recursive: true }); + + logger.info(`Copying circular SVG to ${svgDir}/logo.svg`); + copyFileSync(circular, resolve(svgDir, 'logo.svg')); + + logger.info(`Copying maskable SVG to ${svgDir}/logo-maskable.svg`); + copyFileSync(maskless, resolve(svgDir, 'logo-maskable.svg')); + + copyFileSync(highlight, resolve(svgDir, 'highlight.svg')); + copyFileSync(unread, resolve(svgDir, 'unread.svg')); + + logger.info('All done. Please review the generated files.'); +} + +main(process.argv.slice(2)); diff --git a/scripts/replace-logo.sh b/scripts/replace-logo.sh deleted file mode 100755 index 5d92318512..0000000000 --- a/scripts/replace-logo.sh +++ /dev/null @@ -1,126 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail - -readonly BASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" - -usage(){ - cat <&2 - exit 2 - fi - if [[ "${f,,}" != *.svg ]]; then - echo "Input must be an SVG: $f" >&2 - exit 3 - fi -done - -ffmpeg_cmd(){ - local in="$1" out="$2" size="$3" - mkdir -p "$(dirname "$out")" - echo "Generating $out ($size x $size)" - ffmpeg -y -width "$size" -height "$size" -i "$in" "$out" 2>/dev/null -} - -# All inputs are required to be SVG. Use ffmpeg to render SVGs to PNG targets -# and copy SVGs directly to the svg assets directory. - -is_svg(){ - local f="$1" - [[ "${f,,}" == *.svg ]] -} - -echo "Replacing circular icons..." - -declare -a CIRCULAR_TARGETS=( - "512:$BASE_DIR/public/favicon.png" - "2560:$BASE_DIR/public/full_res_sable.png" - "144:$BASE_DIR/public/res/logo/logo-144x144.png" - "192:$BASE_DIR/public/res/logo/logo-192x192.png" - "256:$BASE_DIR/public/res/logo/logo-256x256.png" - "36:$BASE_DIR/public/res/logo/logo-36x36.png" - "384:$BASE_DIR/public/res/logo/logo-384x384.png" - "48:$BASE_DIR/public/res/logo/logo-48x48.png" - "512:$BASE_DIR/public/res/logo/logo-512x512.png" - "72:$BASE_DIR/public/res/logo/logo-72x72.png" - "96:$BASE_DIR/public/res/logo/logo-96x96.png" -) - -for entry in "${CIRCULAR_TARGETS[@]}"; do - size=${entry%%:*} - out=${entry#*:} - ffmpeg_cmd "$CIRCULAR" "$out" "$size" -done - -echo "Replacing maskable icons (using maskless input)..." - -declare -a MASKABLE_TARGETS=( - "114:$BASE_DIR/public/res/logo-maskable/logo-maskable-114x114.png" - "120:$BASE_DIR/public/res/logo-maskable/logo-maskable-120x120.png" - "144:$BASE_DIR/public/res/logo-maskable/logo-maskable-144x144.png" - "152:$BASE_DIR/public/res/logo-maskable/logo-maskable-152x152.png" - "167:$BASE_DIR/public/res/logo-maskable/logo-maskable-167x167.png" - "180:$BASE_DIR/public/res/logo-maskable/logo-maskable-180x180.png" - "192:$BASE_DIR/public/res/logo-maskable/logo-maskable-192x192.png" - "256:$BASE_DIR/public/res/logo-maskable/logo-maskable-256x256.png" - "36:$BASE_DIR/public/res/logo-maskable/logo-maskable-36x36.png" - "384:$BASE_DIR/public/res/logo-maskable/logo-maskable-384x384.png" - "48:$BASE_DIR/public/res/logo-maskable/logo-maskable-48x48.png" - "512:$BASE_DIR/public/res/logo-maskable/logo-maskable-512x512.png" - "57:$BASE_DIR/public/res/logo-maskable/logo-maskable-57x57.png" - "60:$BASE_DIR/public/res/logo-maskable/logo-maskable-60x60.png" - "72:$BASE_DIR/public/res/logo-maskable/logo-maskable-72x72.png" - "76:$BASE_DIR/public/res/logo-maskable/logo-maskable-76x76.png" - "96:$BASE_DIR/public/res/logo-maskable/logo-maskable-96x96.png" -) - -for entry in "${MASKABLE_TARGETS[@]}"; do - size=${entry%%:*} - out=${entry#*:} - ffmpeg_cmd "$MASKLESS" "$out" "$size" -done - -echo "Handling SVG assets in public/res/svg/..." - -SVG_DIR="$BASE_DIR/public/res/svg" -mkdir -p "$SVG_DIR" - -# logo.svg from circular input (inputs are SVG so copy directly) -echo "Copying circular SVG to $SVG_DIR/logo.svg" -cp "$CIRCULAR" "$SVG_DIR/logo.svg" - -# logo-maskable.svg from maskless input -echo "Copying maskable SVG to $SVG_DIR/logo-maskable.svg" -cp "$MASKLESS" "$SVG_DIR/logo-maskable.svg" - -# highlight.svg -cp "$HIGHLIGHT" "$SVG_DIR/highlight.svg" - -# unread.svg -cp "$UNREAD" "$SVG_DIR/unread.svg" - -echo "All done. Please review the generated files." diff --git a/scripts/tauri.js b/scripts/tauri.js index 4ed2803ced..6fe6526345 100644 --- a/scripts/tauri.js +++ b/scripts/tauri.js @@ -1,18 +1,9 @@ #!/usr/bin/env node - -/** - * Script to run tauri commands for a given runtime (wry or cef) with prepended CLI args. - * - * Usage: - * script/tauri [prepended-args...] - * - * Examples: - * script/tauri cef dev --verbose - * script/tauri cef dev -- --verbose - * Both will run: tauri dev --features cef -- --verbose --no-default-features - */ +//MISE description="Run Tauri CLI with platform-specific feature flags" +//USAGE arg "" help="Target" default="wry" choices "wry" "cef" "android" "ios" import { run } from '@tauri-apps/cli'; +import { spawn } from 'node:child_process'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import process from 'node:process'; @@ -27,19 +18,19 @@ const __dirname = dirname(__filename); const cmdlineArgs = process.argv.slice(2); if (cmdlineArgs.length < 2) { - logger.error('Usage: node scripts/tauri [prepended-args...]'); + logger.error('Usage: node scripts/tauri [prepended-args...]'); + logger.error(` ${dim('platform:')} wry, cef, android, or ios`); logger.error(` ${dim('command:')} dev or build`); - logger.error(` ${dim('runtime:')} wry or cef`); - logger.error( - ` ${dim('prepended-args:')} Arguments to prepend to the cargo args (-- separator is optional)` - ); process.exit(1); } -const [runtime, cmd, ...tauriArgs] = cmdlineArgs; +const [platform, cmd, ...tauriArgs] = cmdlineArgs; + +const MOBILE = ['android', 'ios']; +const DESKTOP = ['wry', 'cef']; -if (!['wry', 'cef'].includes(runtime)) { - logger.error(`Invalid runtime: ${runtime}. Must be 'wry' or 'cef'`); +if (![...DESKTOP, ...MOBILE].includes(platform)) { + logger.error(`Invalid platform: ${platform}. Must be wry, cef, android, or ios`); process.exit(1); } if (!['dev', 'build'].includes(cmd)) { @@ -47,23 +38,30 @@ if (!['dev', 'build'].includes(cmd)) { process.exit(1); } -tauriArgs.unshift('--features', `${runtime},updater`); -// tauri's Linux bundler can't package CEF; scripts/cef-package.sh does that. -if (runtime === 'cef' && cmd === 'build' && !tauriArgs.includes('--no-bundle')) { - tauriArgs.unshift('--no-bundle'); -} -if (!tauriArgs.includes('--')) { - tauriArgs.push('--'); -} -tauriArgs.push('--no-default-features'); +process.chdir(join(__dirname, '..')); -const args = [cmd, ...tauriArgs]; +if (MOBILE.includes(platform)) { + logger.info(`${dim('Running:')} tauri ${[platform, cmd, ...tauriArgs].join(' ')}`); + const child = spawn('tauri', [platform, cmd, ...tauriArgs], { + stdio: 'inherit', + shell: true, + }); + child.on('exit', (code) => process.exit(code ?? 1)); +} else { + const args = [cmd, '--features', `${platform},updater`, ...tauriArgs]; + if (!tauriArgs.includes('--')) { + args.push('--'); + } + args.push('--no-default-features'); -process.chdir(join(__dirname, '..')); + if (platform === 'cef' && cmd === 'build' && !tauriArgs.includes('--no-bundle')) { + args.unshift('--no-bundle'); + } -logger.info(`${dim('Running:')} tauri ${args.join(' ')}`); + logger.info(`${dim('Running:')} tauri ${args.join(' ')}`); -run(args, 'tauri').catch((error) => { - logger.error(`Failed to run tauri: ${error?.message ?? error}`); - process.exit(1); -}); + run(args, 'tauri').catch((error) => { + logger.error(`Failed to run tauri: ${error?.message ?? error}`); + process.exit(1); + }); +} From b7b5deb65ecfbd34c43ab5320055daf0e50b4a01 Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 01:55:57 +0200 Subject: [PATCH 05/19] chore(mise): add task definitions and reorganize scripts Signed-off-by: hazre --- .github/workflows/tauri-build.yml | 2 +- mise.toml | 64 ++++++++++++++++++- .../{cef-copy-libs.sh => cef/copy-libs.sh} | 0 scripts/{cef-package.sh => cef/package.sh} | 0 .../symlink.js} | 1 + scripts/install-knope.js | 2 + scripts/normalize-imports.js | 2 + 7 files changed, 67 insertions(+), 4 deletions(-) rename scripts/{cef-copy-libs.sh => cef/copy-libs.sh} (100%) rename scripts/{cef-package.sh => cef/package.sh} (100%) mode change 100755 => 100644 rename scripts/{symlink-tauri-icons.js => icons/symlink.js} (98%) diff --git a/.github/workflows/tauri-build.yml b/.github/workflows/tauri-build.yml index 1158c3db1b..9cbb5ae3ac 100644 --- a/.github/workflows/tauri-build.yml +++ b/.github/workflows/tauri-build.yml @@ -280,7 +280,7 @@ jobs: - name: Build native packages if: matrix.cef shell: bash - run: bash scripts/cef-package.sh "$VERSION" + run: bash scripts/cef/package.sh "$VERSION" - name: Sign the AppImage for the updater if: ${{ matrix.cef && env.TAURI_SIGNING_PRIVATE_KEY != '' }} diff --git a/mise.toml b/mise.toml index 04d18ed87f..3cfa1a944b 100644 --- a/mise.toml +++ b/mise.toml @@ -1,7 +1,65 @@ +[env] +_.path = ["{{config_root}}/node_modules/.bin"] + [settings] idiomatic_version_file_enable_tools = ["pnpm", "node", "rust"] experimental = true -[tools] -cargo-binstall = "1.21.0" -"cargo:knope" = "0.23.0" +[task_config] +includes = ["scripts"] + +[tasks.dev] +description = "Start Vite dev server" +alias = "d" +run = "vite dev" +raw = true + +[tasks.build] +description = "Build frontend with Vite" +alias = "b" +run = "vite build" + +[tasks.preview] +description = "Preview the production build" +alias = "p" +run = "vite preview" + +[tasks.lint] +description = "Run all linting, typechecking, formatting, and dead code checks" +alias = "l" +run = ["tsc", "oxlint .", "oxfmt --check .", "knip"] + +[tasks.lint-fix] +description = "Fix lint issues, format, and run typecheck and dead code checks" +alias = "lf" +run = ["oxlint . --fix", "oxfmt .", "knip --fix"] + +[tasks.test] +description = "Run tests" +alias = "t" +run = "vitest" +raw = true + +[tasks.document-change] +description = "Document a change with knope" +alias = "doc" +run = "knope document-change" + +[tasks."cargo:lint"] +description = "Check Rust formatting and lint with Clippy" +alias = ["cl", "cargo-lint"] +dir = "src-tauri" +run = ["cargo fmt --check", "cargo clippy --all-targets --all-features -- -D warnings"] + +[tasks."cargo:lint-fix"] +description = "Fix Rust formatting and lint issues" +alias = ["clf", "cargo-lint-fix"] +dir = "src-tauri" +run = ["cargo fmt", "cargo clippy --fix --allow-dirty --all-targets --all-features -- -D warnings"] + +[tasks."cargo:test"] +description = "Run Rust tests" +alias = ["ct", "cargo-test"] +dir = "src-tauri" +run = "cargo test" +raw = true diff --git a/scripts/cef-copy-libs.sh b/scripts/cef/copy-libs.sh similarity index 100% rename from scripts/cef-copy-libs.sh rename to scripts/cef/copy-libs.sh diff --git a/scripts/cef-package.sh b/scripts/cef/package.sh old mode 100755 new mode 100644 similarity index 100% rename from scripts/cef-package.sh rename to scripts/cef/package.sh diff --git a/scripts/symlink-tauri-icons.js b/scripts/icons/symlink.js similarity index 98% rename from scripts/symlink-tauri-icons.js rename to scripts/icons/symlink.js index 25674f335c..9387639324 100644 --- a/scripts/symlink-tauri-icons.js +++ b/scripts/icons/symlink.js @@ -1,4 +1,5 @@ #!/usr/bin/env node +//MISE description="Create symlinks for Tauri icons from the source set" /* eslint-disable no-console */ import fs from 'node:fs'; diff --git a/scripts/install-knope.js b/scripts/install-knope.js index 74fd9c2643..ced1f260b6 100644 --- a/scripts/install-knope.js +++ b/scripts/install-knope.js @@ -1,4 +1,6 @@ #!/usr/bin/env node +//MISE hide=true +//MISE description="Install or update knope to the pinned version" import { spawnSync } from 'node:child_process'; import process from 'node:process'; import { chmodSync, existsSync, mkdirSync, realpathSync, writeFileSync } from 'node:fs'; diff --git a/scripts/normalize-imports.js b/scripts/normalize-imports.js index 77af442c38..415e366967 100644 --- a/scripts/normalize-imports.js +++ b/scripts/normalize-imports.js @@ -1,4 +1,6 @@ #!/usr/bin/env node +//MISE hide=true +//MISE description="Normalize import paths across the codebase" /* oxlint-disable no-console */ import fs from 'node:fs/promises'; From 8fe259dacd95e352dd8b846ec5e2d1161088f65a Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 04:01:52 +0200 Subject: [PATCH 06/19] chore(scripts): replace fpm with nfpm for deb/rpm packaging - Add nfpm.yaml declarative config with contents, deps, per-packager overrides - Replace fpm CLI invocations in package.sh with nfpm pkg - Manage appimagetool and nfpm via mise file task tools - Remove manual appimagetool download + sha256 verification - Fix stale paths from scripts/cef/ move (ROOT, copy-libs reference, usage) - Add version extraction guard and appimagetool availability check Signed-off-by: hazre --- nfpm.yaml | 48 +++++++++++++++++++++++++++++ scripts/cef/package.sh | 70 +++++++++++++++++------------------------- 2 files changed, 76 insertions(+), 42 deletions(-) create mode 100644 nfpm.yaml diff --git a/nfpm.yaml b/nfpm.yaml new file mode 100644 index 0000000000..8f44eab705 --- /dev/null +++ b/nfpm.yaml @@ -0,0 +1,48 @@ +# yaml-language-server: $schema=https://nfpm.goreleaser.com/schema.json + +name: sable +arch: amd64 +platform: linux +version: ${PKG_VERSION} +release: ${PKG_RELEASE} +version_schema: semver +section: net +maintainer: SableClient +description: Sable, a Matrix client +homepage: https://sable.moe + +contents: + - src: ${PKGROOT}/opt/sable/ + dst: /opt/sable + type: tree + - src: ${PKGROOT}/usr/ + dst: /usr + type: tree + +overrides: + deb: + depends: + - libgtk-3-0 + - libnss3 + - libnspr4 + - libgbm1 + - libdrm2 + - libxkbcommon0 + - libasound2 + - libcups2 + - xdg-utils + - xwayland + - libayatana-appindicator3-1 + rpm: + depends: + - gtk3 + - nss + - nspr + - mesa-libgbm + - libdrm + - libxkbcommon + - alsa-lib + - cups-libs + - xdg-utils + - xorg-x11-server-Xwayland + - libayatana-appindicator3.so.1()(64bit) diff --git a/scripts/cef/package.sh b/scripts/cef/package.sh index 440d48644d..0523d777f5 100644 --- a/scripts/cef/package.sh +++ b/scripts/cef/package.sh @@ -1,13 +1,15 @@ #!/usr/bin/env bash #MISE description="Package CEF build into deb/rpm/AppImage" +#MISE tools={nfpm="2.47.0", "github:AppImage/appimagetool" = {version = "1.9.1", matching = ".AppImage"}} # Package the Linux CEF build into deb/rpm/AppImage. Used by CI and locally. # Run after the binary is built (pnpm tauri:cef build). -# Usage: scripts/cef-package.sh [version] +# Usage: scripts/cef/package.sh [version] set -euo pipefail -ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" +ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" cd "$ROOT" VERSION="${1:-$(grep -m1 '"version":' src-tauri/tauri.conf.json | sed 's/.*: *"\(.*\)".*/\1/')}" +: "${VERSION:?version not found in src-tauri/tauri.conf.json}" DEB_VERSION="$VERSION" RPM_VERSION="$VERSION" RPM_ITERATION=1 @@ -45,7 +47,7 @@ stage_runtime() { local dest="$1" mkdir -p "$dest" cp "$STAGE/$BIN_NAME" "$dest/sable" - bash scripts/cef-copy-libs.sh release "$dest" + bash scripts/cef/copy-libs.sh release "$dest" } # Bundle the system-tray libraries (Tauri's linuxdeploy path normally does this, @@ -87,8 +89,10 @@ MimeType=x-scheme-handler/sable;x-scheme-handler/moe.sable.app; EOF } -if command -v fpm >/dev/null 2>&1; then +CONFIG="$ROOT/nfpm.yaml" +if command -v nfpm >/dev/null 2>&1; then PKGROOT="$WORK/pkgroot" + export PKGROOT stage_runtime "$PKGROOT/opt/sable" mkdir -p "$PKGROOT/usr/bin" "$PKGROOT/usr/share/applications" cat > "$PKGROOT/usr/bin/sable" <<'EOF' @@ -102,57 +106,39 @@ EOF cp "src-tauri/icons/${size}.png" \ "$PKGROOT/usr/share/icons/hicolor/${size}/apps/sable.png" done - # 128x128@2x is 256x256 mkdir -p "$PKGROOT/usr/share/icons/hicolor/256x256/apps" cp "src-tauri/icons/128x128@2x.png" \ "$PKGROOT/usr/share/icons/hicolor/256x256/apps/sable.png" - COMMON=(-s dir -n sable - --description "Sable, a Matrix client" - --url "https://sable.moe" --maintainer "SableClient" - --category net) - # CEF deps: no WebKitGTK. ALSA/CUPS are NEEDED by libcef.so; - # xwayland because main.rs forces GDK_BACKEND=x11. - DEB_DEPS=(--depends libgtk-3-0 --depends libnss3 --depends libnspr4 - --depends libgbm1 --depends libdrm2 --depends libxkbcommon0 - --depends libasound2 --depends libcups2 --depends xdg-utils - --depends xwayland --depends libayatana-appindicator3-1) - (cd "$OUT/deb" && fpm "${COMMON[@]}" -v "$DEB_VERSION" --iteration 1 \ - -t deb -a amd64 -p "Sable-${VERSION}-linux-x86_64.deb" "${DEB_DEPS[@]}" -C "$PKGROOT" .) + PKG_VERSION="$DEB_VERSION" PKG_RELEASE=1 nfpm pkg -f "$CONFIG" -p deb \ + -t "$OUT/deb/Sable-${VERSION}-linux-x86_64.deb" - RPM_DEPS=(--depends gtk3 --depends nss --depends nspr - --depends mesa-libgbm --depends libdrm --depends libxkbcommon - --depends alsa-lib --depends cups-libs --depends xdg-utils - --depends xorg-x11-server-Xwayland - --depends 'libayatana-appindicator3.so.1()(64bit)') - (cd "$OUT/rpm" && fpm "${COMMON[@]}" -v "$RPM_VERSION" --iteration "$RPM_ITERATION" \ - -t rpm -a x86_64 -p "Sable-${VERSION}-linux-x86_64.rpm" "${RPM_DEPS[@]}" -C "$PKGROOT" .) + PKG_VERSION="$RPM_VERSION" PKG_RELEASE="$RPM_ITERATION" nfpm pkg -f "$CONFIG" -p rpm \ + -t "$OUT/rpm/Sable-${VERSION}-linux-x86_64.rpm" else - echo "fpm not found; skipping deb/rpm (building AppImage only)" + echo "nfpm not found; skipping deb/rpm" fi -APPDIR="$WORK/Sable.AppDir" -stage_runtime "$APPDIR/usr/bin" -stage_appindicator "$APPDIR/usr/bin" -# nosuid AppImage mount: drop setuid chrome-sandbox, use the namespace sandbox. -rm -f "$APPDIR/usr/bin/chrome-sandbox" -write_desktop "$APPDIR/sable.desktop" -cp src-tauri/icons/128x128.png "$APPDIR/sable.png" -cat > "$APPDIR/AppRun" <<'EOF' +if command -v appimagetool >/dev/null 2>&1; then + APPDIR="$WORK/Sable.AppDir" + stage_runtime "$APPDIR/usr/bin" + stage_appindicator "$APPDIR/usr/bin" + # nosuid AppImage mount: drop setuid chrome-sandbox, use the namespace sandbox. + rm -f "$APPDIR/usr/bin/chrome-sandbox" + write_desktop "$APPDIR/sable.desktop" + cp src-tauri/icons/128x128.png "$APPDIR/sable.png" + cat > "$APPDIR/AppRun" <<'EOF' #!/bin/sh HERE="$(dirname "$(readlink -f "$0")")" export LD_LIBRARY_PATH="$HERE/usr/bin${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" exec "$HERE/usr/bin/sable" "$@" EOF -chmod 755 "$APPDIR/AppRun" + chmod 755 "$APPDIR/AppRun" -APPIMAGETOOL_SHA256=ed4ce84f0d9caff66f50bcca6ff6f35aae54ce8135408b3fa33abfc3cb384eb0 -APPIMAGETOOL="$WORK/appimagetool" -curl -fsSL -o "$APPIMAGETOOL" \ - https://github.com/AppImage/appimagetool/releases/download/1.9.1/appimagetool-x86_64.AppImage -echo "${APPIMAGETOOL_SHA256} $APPIMAGETOOL" | sha256sum -c - -chmod +x "$APPIMAGETOOL" -APPIMAGE_EXTRACT_AND_RUN=1 ARCH=x86_64 "$APPIMAGETOOL" "$APPDIR" \ - "$OUT/appimage/Sable-${VERSION}-linux-x86_64.AppImage" + ARCH=x86_64 appimagetool "$APPDIR" \ + "$OUT/appimage/Sable-${VERSION}-linux-x86_64.AppImage" +else + echo "appimagetool not found; skipping AppImage" >&2 +fi echo "Packages in: $OUT" From 3d0b992a1a4d56469488e30500ea22081a766589 Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 05:31:25 +0200 Subject: [PATCH 07/19] chore(ci): update ci to use mise Signed-off-by: hazre --- .github/actions/prepare-tofu/action.yml | 16 +++---- .github/actions/setup/action.yml | 10 ++--- .github/workflows/cloudflare-web-deploy.yml | 24 +++++++++-- .github/workflows/cloudflare-web-dev.yml | 4 +- .github/workflows/codeql.yml | 2 + .github/workflows/docker-publish.yml | 6 ++- .github/workflows/flake-lock-fix.yml | 9 ++-- .github/workflows/prepare-release.yml | 8 ++-- .github/workflows/release.yml | 7 +-- .github/workflows/rust-quality.yml | 20 +++++---- .github/workflows/tauri-build.yml | 47 ++++++++++++--------- .github/zizmor.yml | 4 ++ mise.toml | 38 ++++++++++++++--- 13 files changed, 123 insertions(+), 72 deletions(-) create mode 100644 .github/zizmor.yml diff --git a/.github/actions/prepare-tofu/action.yml b/.github/actions/prepare-tofu/action.yml index c64332e3cd..09e5f92c75 100644 --- a/.github/actions/prepare-tofu/action.yml +++ b/.github/actions/prepare-tofu/action.yml @@ -2,10 +2,6 @@ name: Prepare OpenTofu Deployment description: Prepares OpenTofu in infra/web. inputs: - opentofu-version: - description: The OpenTofu version to install. - required: false - default: '1.11.5' is_release_tag: description: Whether the build is for a release tag. Passed through to VITE_IS_RELEASE_TAG. required: false @@ -27,22 +23,20 @@ runs: SENTRY_ORG: ${{ env.SENTRY_ORG }} SENTRY_PROJECT: ${{ env.SENTRY_PROJECT }} - - name: Setup OpenTofu - uses: opentofu/setup-opentofu@9d84900f3238fab8cd84ce47d658d25dd008be2f # v1.0.8 - with: - tofu_version: ${{ inputs.opentofu-version }} + - name: Setup OpenTofu via mise + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 - name: Check formatting shell: bash working-directory: ${{ github.workspace }}/infra/web - run: tofu fmt -check + run: mise run opentofu -- fmt -check - name: Initialize OpenTofu shell: bash working-directory: ${{ github.workspace }}/infra/web - run: tofu init -input=false -reconfigure + run: mise run opentofu -- init -input=false -reconfigure - name: Validate configuration shell: bash working-directory: ${{ github.workspace }}/infra/web - run: tofu validate -no-color + run: mise run opentofu -- validate -no-color diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 9b4c9acbb3..961db8d82e 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -18,14 +18,10 @@ inputs: runs: using: composite steps: - - name: Setup pnpm - uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4.3.0 - - - name: Setup node - uses: actions/setup-node@53b83947a5a98c8d113130e565377fae1a50d02f # v6.3.0 + - name: Setup tools (mise) + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: - node-version-file: '.node-version' - cache: 'pnpm' + cache: true - name: Install dependencies shell: bash diff --git a/.github/workflows/cloudflare-web-deploy.yml b/.github/workflows/cloudflare-web-deploy.yml index 14d65c869e..5bba6a672e 100644 --- a/.github/workflows/cloudflare-web-deploy.yml +++ b/.github/workflows/cloudflare-web-deploy.yml @@ -55,8 +55,16 @@ jobs: - name: Resolve release version id: version shell: bash + env: + GIT_TAG: ${{ inputs.git_tag }} + REF_NAME: ${{ github.ref_name }} + EVENT_NAME: ${{ github.event_name }} run: | - TAG="${{ github.event_name == 'workflow_dispatch' && inputs.git_tag || github.ref_name }}" + if [[ "$EVENT_NAME" == "workflow_dispatch" && -n "$GIT_TAG" ]]; then + TAG="$GIT_TAG" + else + TAG="$REF_NAME" + fi echo "version=${TAG#v}" >> "$GITHUB_OUTPUT" - name: Prepare OpenTofu deployment @@ -95,8 +103,16 @@ jobs: - name: Resolve release version id: version shell: bash + env: + GIT_TAG: ${{ inputs.git_tag }} + REF_NAME: ${{ github.ref_name }} + EVENT_NAME: ${{ github.event_name }} run: | - TAG="${{ github.event_name == 'workflow_dispatch' && inputs.git_tag || github.ref_name }}" + if [[ "$EVENT_NAME" == "workflow_dispatch" && -n "$GIT_TAG" ]]; then + TAG="$GIT_TAG" + else + TAG="$REF_NAME" + fi echo "version=${TAG#v}" >> "$GITHUB_OUTPUT" - name: Prepare OpenTofu deployment @@ -112,7 +128,7 @@ jobs: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - name: Plan infrastructure - run: tofu plan -input=false -no-color + run: mise run opentofu -- plan -input=false -no-color - name: Apply infrastructure - run: tofu apply -input=false -auto-approve + run: mise run opentofu -- apply -input=false -auto-approve diff --git a/.github/workflows/cloudflare-web-dev.yml b/.github/workflows/cloudflare-web-dev.yml index ef2f711a94..e21bf8388d 100644 --- a/.github/workflows/cloudflare-web-dev.yml +++ b/.github/workflows/cloudflare-web-dev.yml @@ -62,7 +62,7 @@ jobs: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} - name: Plan infrastructure - run: tofu plan -input=false -no-color + run: mise run opentofu -- plan -input=false -no-color - name: Apply infrastructure - run: tofu apply -input=false -auto-approve + run: mise run opentofu -- apply -input=false -auto-approve diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index bdb1d0bd5e..07e14f5034 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -58,6 +58,8 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + with: + persist-credentials: false # Add any setup steps before running the `github/codeql-action/init` action. # This includes steps like installing compilers or runtimes (`actions/setup-node` diff --git a/.github/workflows/docker-publish.yml b/.github/workflows/docker-publish.yml index 7b6ed21bc9..b52dd86b2b 100644 --- a/.github/workflows/docker-publish.yml +++ b/.github/workflows/docker-publish.yml @@ -49,8 +49,8 @@ jobs: id: release_tag shell: bash run: | - if [[ "${{ github.event_name }}" == "workflow_dispatch" && -n "${{ inputs.git_tag }}" ]]; then - TAG="${{ inputs.git_tag }}" + if [[ "${{ github.event_name }}" == "workflow_dispatch" && -n "${INPUTS_GIT_TAG}" ]]; then + TAG="${INPUTS_GIT_TAG}" else TAG="${GITHUB_REF#refs/tags/}" fi @@ -65,6 +65,8 @@ jobs: echo "value=" >> "$GITHUB_OUTPUT" echo "is_release=false" >> "$GITHUB_OUTPUT" fi + env: + INPUTS_GIT_TAG: ${{ inputs.git_tag }} - name: Extract metadata id: meta diff --git a/.github/workflows/flake-lock-fix.yml b/.github/workflows/flake-lock-fix.yml index c7b844e721..fdf800a849 100644 --- a/.github/workflows/flake-lock-fix.yml +++ b/.github/workflows/flake-lock-fix.yml @@ -42,17 +42,20 @@ jobs: - name: Get GitHub App User ID id: get-user-id - run: echo "user-id=$(gh api "/users/${{ steps.app-token.outputs.app-slug }}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" + run: echo "user-id=$(gh api "/users/${STEPS_APP_TOKEN_OUTPUTS_APP_SLUG}[bot]" --jq .id)" >> "$GITHUB_OUTPUT" env: GH_TOKEN: ${{ steps.app-token.outputs.token }} + STEPS_APP_TOKEN_OUTPUTS_APP_SLUG: ${{ steps.app-token.outputs.app-slug }} - name: Configure bot git identity run: | - git config --global user.name '${{ steps.app-token.outputs.app-slug }}[bot]' - git config --global user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com' + git config --global user.name '${STEPS_APP_TOKEN_OUTPUTS_APP_SLUG}[bot]' + git config --global user.email '${STEPS_GET_USER_ID_OUTPUTS_USER_ID}+${STEPS_APP_TOKEN_OUTPUTS_APP_SLUG}[bot]@users.noreply.github.com' gh auth setup-git env: GH_TOKEN: ${{ steps.app-token.outputs.token }} + STEPS_APP_TOKEN_OUTPUTS_APP_SLUG: ${{ steps.app-token.outputs.app-slug }} + STEPS_GET_USER_ID_OUTPUTS_USER_ID: ${{ steps.get-user-id.outputs.user-id }} - name: Commit and push if changed if: steps.check.outcome == 'failure' diff --git a/.github/workflows/prepare-release.yml b/.github/workflows/prepare-release.yml index 60573416bf..29ae03c5d1 100644 --- a/.github/workflows/prepare-release.yml +++ b/.github/workflows/prepare-release.yml @@ -20,6 +20,8 @@ jobs: with: app-id: ${{ secrets.APP_ID }} private-key: ${{ secrets.APP_PRIVATE_KEY }} + permission-contents: write + permission-pull-requests: write - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: @@ -29,12 +31,8 @@ jobs: - uses: fregante/setup-git-user@024bc0b8e177d7e77203b48dab6fb45666854b35 # v2.0.2 - - uses: knope-dev/action@19617851f9f13ab2f27a05989c55efb18aca3675 # v2.1.2 - with: - version: 0.22.3 - - name: Prepare Release - run: knope prepare-release --verbose + run: mise run knope -- prepare-release --verbose env: GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e6e5f9d7f1..6eca8284bc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -20,6 +20,7 @@ jobs: with: app-id: ${{ secrets.APP_ID }} private-key: ${{ secrets.APP_PRIVATE_KEY }} + permission-contents: write - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: @@ -27,11 +28,7 @@ jobs: persist-credentials: true token: ${{ steps.generate-token.outputs.token }} - - uses: knope-dev/action@19617851f9f13ab2f27a05989c55efb18aca3675 # v2.1.2 - with: - version: 0.22.3 - - name: Create Release - run: knope release --verbose + run: mise run knope -- release --verbose env: GITHUB_TOKEN: ${{ steps.generate-token.outputs.token }} diff --git a/.github/workflows/rust-quality.yml b/.github/workflows/rust-quality.yml index f7fdd08f00..98679c0943 100644 --- a/.github/workflows/rust-quality.yml +++ b/.github/workflows/rust-quality.yml @@ -20,17 +20,19 @@ jobs: runs-on: ubuntu-latest permissions: contents: read + env: + CARGO_INCREMENTAL: 0 + CARGO_TERM_COLOR: always steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 with: persist-credentials: false - - name: Setup Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 2c7215f132e9ebf062739d9130488b56d53c060c + - name: Setup mise + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: - toolchain: stable - components: rustfmt + cache: true - name: Check Rust formatting run: cargo fmt --manifest-path src-tauri/Cargo.toml -- --check @@ -40,6 +42,9 @@ jobs: runs-on: ubuntu-22.04 permissions: contents: read + env: + CARGO_INCREMENTAL: 0 + CARGO_TERM_COLOR: always steps: - name: Checkout repository uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 @@ -60,11 +65,10 @@ jobs: libxdo-dev \ pkg-config - - name: Setup Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 2c7215f132e9ebf062739d9130488b56d53c060c + - name: Setup mise + uses: jdx/mise-action@dad1bfd3df957f44999b559dd69dc1671cb4e9ea # v4.2.1 with: - toolchain: stable - components: clippy + cache: true - name: Cache Rust build uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 diff --git a/.github/workflows/tauri-build.yml b/.github/workflows/tauri-build.yml index 9cbb5ae3ac..9cb7cdbf21 100644 --- a/.github/workflows/tauri-build.yml +++ b/.github/workflows/tauri-build.yml @@ -120,7 +120,7 @@ jobs: - name: macOS platform: macos-latest asset-platform: macos-universal - rust-targets: aarch64-apple-darwin,x86_64-apple-darwin + rust-targets: aarch64-apple-darwin x86_64-apple-darwin args: --target universal-apple-darwin bundle_path: src-tauri/target/universal-apple-darwin/release/bundle - name: Windows @@ -145,6 +145,8 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + CARGO_INCREMENTAL: 0 + CARGO_TERM_COLOR: always NODE_OPTIONS: --max-old-space-size=8192 TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} @@ -178,11 +180,10 @@ jobs: - name: Setup app uses: ./.github/actions/setup - - name: Setup Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 2c7215f132e9ebf062739d9130488b56d53c060c - with: - toolchain: stable - targets: ${{ matrix.rust-targets }} + - name: Add Rust targets + if: ${{ matrix.rust-targets != '' }} + shell: bash + run: rustup target add ${{ matrix.rust-targets }} - name: Cache Rust build uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 @@ -339,7 +340,10 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + CARGO_INCREMENTAL: 0 + CARGO_TERM_COLOR: always NODE_OPTIONS: --max-old-space-size=8192 + RUST_TARGETS: aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android ANDROID_KEY_BASE64: ${{ secrets.ANDROID_KEY_BASE64 }} ANDROID_KEY_ALIAS: ${{ secrets.ANDROID_KEY_ALIAS }} ANDROID_KEY_PASSWORD: ${{ secrets.ANDROID_KEY_PASSWORD }} @@ -362,11 +366,9 @@ jobs: - name: Setup Android SDK uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1 - - name: Setup Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 2c7215f132e9ebf062739d9130488b56d53c060c - with: - toolchain: stable - targets: aarch64-linux-android,armv7-linux-androideabi + - name: Add Rust targets + shell: bash + run: rustup target add $RUST_TARGETS - name: Cache Rust build uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 @@ -453,6 +455,9 @@ jobs: SENTRY_AUTH_TOKEN: ${{ secrets.SENTRY_AUTH_TOKEN }} SENTRY_ORG: ${{ secrets.SENTRY_ORG }} SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} + CARGO_INCREMENTAL: 0 + CARGO_TERM_COLOR: always + RUST_TARGETS: aarch64-apple-ios NODE_OPTIONS: --max-old-space-size=8192 steps: - name: Checkout repository @@ -464,11 +469,9 @@ jobs: - name: Setup app uses: ./.github/actions/setup - - name: Setup Rust - uses: dtolnay/rust-toolchain@2c7215f132e9ebf062739d9130488b56d53c060c # 2c7215f132e9ebf062739d9130488b56d53c060c - with: - toolchain: stable - targets: aarch64-apple-ios + - name: Add Rust targets + shell: bash + run: rustup target add $RUST_TARGETS - name: Cache Rust build uses: Swatinem/rust-cache@c19371144df3bb44fab255c43d04cbc2ab54d1c4 # v2.9.1 @@ -522,7 +525,8 @@ jobs: shell: bash env: GH_TOKEN: ${{ github.token }} - run: gh release upload "$TAG" "${{ steps.ipa.outputs.path }}" --clobber + STEPS_IPA_OUTPUTS_PATH: ${{ steps.ipa.outputs.path }} + run: gh release upload "$TAG" "${STEPS_IPA_OUTPUTS_PATH}" --clobber - name: Update AltStore/SideStore source shell: bash @@ -531,8 +535,10 @@ jobs: REPO: ${{ github.repository }} ALTSTORE_VERSION: ${{ steps.ipa.outputs.ipa_version }} ALTSTORE_VERSION_BUILD: ${{ steps.ipa.outputs.ipa_build }} + STEPS_IPA_OUTPUTS_NAME: ${{ steps.ipa.outputs.name }} + STEPS_IPA_OUTPUTS_SIZE: ${{ steps.ipa.outputs.size }} run: | - DOWNLOAD_URL="https://github.com/$REPO/releases/download/$TAG/${{ steps.ipa.outputs.name }}" + DOWNLOAD_URL="https://github.com/$REPO/releases/download/$TAG/${STEPS_IPA_OUTPUTS_NAME}" DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" if gh release download "$TAG" --pattern 'altstore-source.json' --dir . --clobber 2>/dev/null; then echo "Using existing altstore-source.json from release $TAG" @@ -540,7 +546,7 @@ jobs: echo "Using repo altstore-source.json" fi node .github/scripts/update-altstore-source.mjs \ - altstore-source.json "${ALTSTORE_VERSION:-$VERSION}" "${ALTSTORE_VERSION_BUILD:-$VERSION}" "${{ steps.ipa.outputs.size }}" "$DOWNLOAD_URL" "$DATE" "Sable $VERSION" + altstore-source.json "${ALTSTORE_VERSION:-$VERSION}" "${ALTSTORE_VERSION_BUILD:-$VERSION}" "${STEPS_IPA_OUTPUTS_SIZE}" "$DOWNLOAD_URL" "$DATE" "Sable $VERSION" gh release upload "$TAG" altstore-source.json --clobber updater-manifest: @@ -572,8 +578,9 @@ jobs: shell: bash env: GH_TOKEN: ${{ github.token }} + NEEDS_SETUP_RELEASE_OUTPUTS_NIGHTLY: ${{ needs.setup-release.outputs.nightly }} run: | - if [ "${{ needs.setup-release.outputs.nightly }}" = "true" ]; then + if [ "${NEEDS_SETUP_RELEASE_OUTPUTS_NIGHTLY}" = "true" ]; then gh release view "$TAG" --json assets \ | jq -r --arg cutoff "$STARTED_AT" \ '.assets[] | select(.updatedAt <= $cutoff and (.name | endswith(".sig"))) | .name' \ diff --git a/.github/zizmor.yml b/.github/zizmor.yml new file mode 100644 index 0000000000..191a75c29d --- /dev/null +++ b/.github/zizmor.yml @@ -0,0 +1,4 @@ +rules: + cache-poisoning: + remap: + severity: informational diff --git a/mise.toml b/mise.toml index 3cfa1a944b..3d7fafb9de 100644 --- a/mise.toml +++ b/mise.toml @@ -29,7 +29,7 @@ description = "Run all linting, typechecking, formatting, and dead code checks" alias = "l" run = ["tsc", "oxlint .", "oxfmt --check .", "knip"] -[tasks.lint-fix] +[tasks."lint:fix"] description = "Fix lint issues, format, and run typecheck and dead code checks" alias = "lf" run = ["oxlint . --fix", "oxfmt .", "knip --fix"] @@ -40,10 +40,16 @@ alias = "t" run = "vitest" raw = true -[tasks.document-change] +[tasks.knope] +run = "knope" +raw_args = true +hide = true +tools = { "cargo:knope" = "0.23.0", cargo-binstall = "1.20.1" } + +[tasks."knope:document-change"] description = "Document a change with knope" -alias = "doc" -run = "knope document-change" +alias = ["doc", "doc"] +run = { task = "knope", args = ["document-change"] } [tasks."cargo:lint"] description = "Check Rust formatting and lint with Clippy" @@ -51,7 +57,7 @@ alias = ["cl", "cargo-lint"] dir = "src-tauri" run = ["cargo fmt --check", "cargo clippy --all-targets --all-features -- -D warnings"] -[tasks."cargo:lint-fix"] +[tasks."cargo:lint:fix"] description = "Fix Rust formatting and lint issues" alias = ["clf", "cargo-lint-fix"] dir = "src-tauri" @@ -63,3 +69,25 @@ alias = ["ct", "cargo-test"] dir = "src-tauri" run = "cargo test" raw = true + +[tasks."actions:pin"] +description = "Pin GitHub Actions to SHA commit hashes" +run = "pinact run" +tools = { "pinact" = "latest" } + +[tasks."actions:audit"] +description = "Audit GitHub Actions for security issues" +run = "zizmor .github/workflows" +tools = { "zizmor" = "latest" } + +[tasks."actions:update"] +description = "Update pinned GitHub Actions to latest SHAs" +run = "pinact run -u" +tools = { "pinact" = "latest" } + + +[tasks.opentofu] +run = "tofu" +raw_args = true +hide = true +tools = { "opentofu" = "1.11.5" } \ No newline at end of file From fe7a44638120fe013274c576916a147b6df1d926 Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 07:23:34 +0200 Subject: [PATCH 08/19] chore: use devEngines for node version Signed-off-by: hazre --- .node-version | 1 - .npmrc | 0 .nvmrc | 1 - package.json | 5 ++--- 4 files changed, 2 insertions(+), 5 deletions(-) delete mode 100644 .node-version create mode 100644 .npmrc delete mode 100644 .nvmrc diff --git a/.node-version b/.node-version deleted file mode 100644 index 32f8c50de0..0000000000 --- a/.node-version +++ /dev/null @@ -1 +0,0 @@ -24.13.1 diff --git a/.npmrc b/.npmrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index a4a7a41bca..0000000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v24.14.0 diff --git a/package.json b/package.json index 4de819eb85..9c30743b7c 100644 --- a/package.json +++ b/package.json @@ -158,9 +158,8 @@ "vitest": "^4.1.9", "wrangler": "^4.106.0" }, - "engines": { - "node": "24.x", - "pnpm": ">=10" + "devEngines": { + "runtime": { "name": "node", "version": "24.x" } }, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be" } From 12f44f9c269348564c336b445048daf0676b7978 Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 07:37:18 +0200 Subject: [PATCH 09/19] chore: update pnpm lock file Signed-off-by: hazre --- pnpm-lock.yaml | 1233 +++--------------------------------------------- 1 file changed, 70 insertions(+), 1163 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e4457b0829..4ac5e2a67f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -5,7 +5,15 @@ settings: excludeLinksFromLockfile: false overrides: + brace-expansion: '>=1.1.12' + esbuild: '>=0.25.0' + flatted: '>=3.4.2' jsdom>undici: ^7.28.0 + lodash: '>=4.17.23' + minimatch: '>=10.2.3' + rollup: '>=4.59.0' + serialize-javascript: '>=7.0.3' + undici: '>=7.24.0' importers: @@ -252,21 +260,18 @@ importers: '@esbuild-plugins/node-globals-polyfill': specifier: ^0.2.3 version: 0.2.3(esbuild@0.28.1) - '@playwright/test': - specifier: ^1.61.1 - version: 1.61.1 '@rollup/plugin-inject': specifier: ^5.0.5 - version: 5.0.5(rollup@2.80.0) + version: 5.0.5(rollup@4.62.0) '@rollup/plugin-wasm': specifier: ^6.2.2 - version: 6.2.2(rollup@2.80.0) + version: 6.2.2(rollup@4.62.0) '@sableclient/sable-call-embedded': specifier: 1.1.7 version: 1.1.7 '@sentry/vite-plugin': specifier: ^5.3.0 - version: 5.3.0(rollup@2.80.0) + version: 5.3.0(rollup@4.62.0) '@tauri-apps/cli': specifier: 2.11.4 version: 2.11.4 @@ -333,9 +338,6 @@ importers: oxlint-tsgolint: specifier: ^0.24.0 version: 0.24.0 - testcontainers: - specifier: ^12.0.4 - version: 12.0.4 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -344,7 +346,7 @@ importers: version: 7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) vite-plugin-compression2: specifier: ^2.5.3 - version: 2.5.3(rollup@2.80.0) + version: 2.5.3(rollup@4.62.0) vite-plugin-pwa: specifier: ^1.3.0 version: 1.3.0(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0))(workbox-build@7.4.0(@types/babel__core@7.20.5))(workbox-window@7.4.0) @@ -353,10 +355,10 @@ importers: version: 3.4.0(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) vite-plugin-svgr: specifier: 4.5.0 - version: 4.5.0(rollup@2.80.0)(typescript@5.9.3)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + version: 4.5.0(rollup@4.62.0)(typescript@5.9.3)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) vite-plugin-top-level-await: specifier: ^1.6.0 - version: 1.6.0(@swc/helpers@0.5.23)(rollup@2.80.0)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) + version: 1.6.0(@swc/helpers@0.5.23)(rollup@4.62.0)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) vitest: specifier: ^4.1.9 version: 4.1.9(@types/node@24.13.2)(@vitest/coverage-v8@4.1.9)(@vitest/ui@4.1.9)(jsdom@29.1.1(@noble/hashes@2.2.0))(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)) @@ -924,9 +926,6 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} - '@balena/dockerignore@1.0.2': - resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} - '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -1061,7 +1060,7 @@ packages: '@esbuild-plugins/node-globals-polyfill@0.2.3': resolution: {integrity: sha512-r3MIryXDeXDOZh7ih1l/yE9ZLORCd5e8vWg02azWRGj5SPTuoh69A2AIyn0Z31V/kHBfZ4HgWJ+OK3GTTwLmnw==} peerDependencies: - esbuild: '*' + esbuild: '>=0.25.0' '@esbuild/aix-ppc64@0.27.7': resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==} @@ -1390,20 +1389,6 @@ packages: '@fontsource/space-mono@5.2.9': resolution: {integrity: sha512-b61faFOHEISQ/pD25G+cfGY9o/WW6lRv6hBQQfpWvEJ4y1V+S4gmth95EVyBE2VL3qDYHeVQ8nBzrplzdXTDDg==} - '@grpc/grpc-js@1.14.4': - resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} - engines: {node: '>=12.10.0'} - - '@grpc/proto-loader@0.7.15': - resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} - engines: {node: '>=6'} - hasBin: true - - '@grpc/proto-loader@0.8.1': - resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} - engines: {node: '>=6'} - hasBin: true - '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} @@ -1566,10 +1551,6 @@ packages: '@internationalized/string@3.2.9': resolution: {integrity: sha512-kzP/M/mbQxODlmOt4bIQZ2SBVUWUSqMLXooXixnX7noche8WHaQcA+nwFN1K2KCF/cp+LDUhcJsCicwkvhD1pg==} - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} - '@isaacs/cliui@9.0.0': resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} engines: {node: '>=18'} @@ -1596,15 +1577,9 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} - '@js-sdsl/ordered-map@4.4.2': - resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} - '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} - '@kwsites/file-exists@1.1.1': - resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} - '@matrix-org/matrix-sdk-crypto-wasm@18.3.1': resolution: {integrity: sha512-VRjWhE1UgHnPpJ3b9B5+8z71ZC/HICFngPPFIN6ktzmUBKI5RusPujzbAQUoB3CgZ0yU58L99AfSQS4YTztSWw==} engines: {node: '>= 18'} @@ -2211,15 +2186,6 @@ packages: react: '>= 16.8' react-dom: '>= 16.8' - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} - - '@playwright/test@1.61.1': - resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} - engines: {node: '>=18'} - hasBin: true - '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -2232,33 +2198,6 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} - '@protobufjs/aspromise@1.1.2': - resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} - - '@protobufjs/base64@1.1.2': - resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} - - '@protobufjs/codegen@2.0.5': - resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} - - '@protobufjs/eventemitter@1.1.1': - resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} - - '@protobufjs/fetch@1.1.1': - resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} - - '@protobufjs/float@1.0.2': - resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} - - '@protobufjs/path@1.1.2': - resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} - - '@protobufjs/pool@1.1.0': - resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} - - '@protobufjs/utf8@1.1.2': - resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==} - '@react-leaflet/core@2.1.0': resolution: {integrity: sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==} peerDependencies: @@ -2382,7 +2321,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0 '@types/babel__core': ^7.1.9 - rollup: ^1.20.0||^2.0.0 + rollup: '>=4.59.0' peerDependenciesMeta: '@types/babel__core': optional: true @@ -2391,7 +2330,7 @@ packages: resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + rollup: '>=4.59.0' peerDependenciesMeta: rollup: optional: true @@ -2400,7 +2339,7 @@ packages: resolution: {integrity: sha512-tgg6b91pAybXHJQMAAwW9VuWBO6Thi+q7BCNARLwSqlmsHz0XYURtGvh/AuwSADXSI4h/2uHbs7s4FzlZDGSGA==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 + rollup: '>=4.59.0' peerDependenciesMeta: rollup: optional: true @@ -2408,13 +2347,13 @@ packages: '@rollup/plugin-replace@2.4.2': resolution: {integrity: sha512-IGcu+cydlUMZ5En85jxHH4qj2hta/11BHq95iHEyb2sbgiN0eCdzvUcHw5gt9pBL5lTi4JDYJ1acCoMGpTvEZg==} peerDependencies: - rollup: ^1.20.0 || ^2.0.0 + rollup: '>=4.59.0' '@rollup/plugin-terser@0.4.4': resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 + rollup: '>=4.59.0' peerDependenciesMeta: rollup: optional: true @@ -2423,7 +2362,7 @@ packages: resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + rollup: '>=4.59.0' peerDependenciesMeta: rollup: optional: true @@ -2432,7 +2371,7 @@ packages: resolution: {integrity: sha512-gpC4R1G9Ni92ZIRTexqbhX7U+9estZrbhP+9SRb0DW9xpB9g7j34r+J2hqrcW/lRI7dJaU84MxZM0Rt82tqYPQ==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + rollup: '>=4.59.0' peerDependenciesMeta: rollup: optional: true @@ -2441,13 +2380,13 @@ packages: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0 + rollup: '>=4.59.0' '@rollup/pluginutils@5.4.0': resolution: {integrity: sha512-MfPp06CjRLfXQ3wY0R8vJDYBy/MvVcc9OulEfR0B8Iv9ko+GCNaRZ+EpJYFl27LhKsZK0o420sYCRHCjfCgeUg==} engines: {node: '>=14.0.0'} peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + rollup: '>=4.59.0' peerDependenciesMeta: rollup: optional: true @@ -2690,7 +2629,7 @@ packages: resolution: {integrity: sha512-hgPGPYdQJ/G1cGYOxAb7d4z3V+/k/E5/P/5TFPEEBLuIbFFk+JG0CISUDJdzXJjO382Lb99PBJuXGbueBmO79w==} engines: {node: '>= 18'} peerDependencies: - rollup: '>=3.2.0' + rollup: '>=4.59.0' peerDependenciesMeta: rollup: optional: true @@ -3064,12 +3003,6 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} - '@types/docker-modem@3.0.6': - resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} - - '@types/dockerode@4.0.1': - resolution: {integrity: sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q==} - '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} @@ -3091,9 +3024,6 @@ packages: '@types/leaflet@1.9.21': resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} - '@types/node@18.19.130': - resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} - '@types/node@24.13.2': resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} @@ -3114,15 +3044,6 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/ssh2-streams@0.1.13': - resolution: {integrity: sha512-faHyY3brO9oLEA0QlcO8N2wT7R0+1sHWZvQ+y3rMLwdY1ZyS1z0W3t65j9PqT4HmQ6ALzNe7RZlNuCNE0wBSWA==} - - '@types/ssh2@0.5.52': - resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} - - '@types/ssh2@1.15.5': - resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==} - '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -3208,10 +3129,6 @@ packages: '@vitest/utils@4.1.9': resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} - abort-controller@3.0.0: - resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} - engines: {node: '>=6.5'} - acorn@8.17.0: resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} @@ -3231,34 +3148,14 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - archiver-utils@5.0.2: - resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} - engines: {node: '>= 14'} - - archiver@7.0.1: - resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} - engines: {node: '>= 14'} - argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -3281,9 +3178,6 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} - asn1@0.2.6: - resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} - assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -3295,9 +3189,6 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} - async-lock@1.4.1: - resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} - async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -3313,14 +3204,6 @@ packages: resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} engines: {node: '>=6.0.0'} - b4a@1.8.1: - resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} - peerDependencies: - react-native-b4a: '*' - peerDependenciesMeta: - react-native-b4a: - optional: true - babel-plugin-polyfill-corejs2@0.4.17: resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: @@ -3339,50 +3222,10 @@ packages: badwords-list@2.0.1-4: resolution: {integrity: sha512-FxfZUp7B9yCnesNtFQS9v6PvZdxTYa14Q60JR6vhjdQdWI4naTjJIyx22JzoER8ooeT8SAAKoHLjKfCV7XgYUQ==} - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - balanced-match@4.0.4: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} - bare-events@2.9.1: - resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} - peerDependencies: - bare-abort-controller: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - - bare-fs@4.7.4: - resolution: {integrity: sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==} - engines: {bare: '>=1.16.0'} - peerDependencies: - bare-buffer: '*' - peerDependenciesMeta: - bare-buffer: - optional: true - - bare-path@3.1.1: - resolution: {integrity: sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==} - - bare-stream@2.13.3: - resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} - peerDependencies: - bare-abort-controller: '*' - bare-buffer: '*' - bare-events: '*' - peerDependenciesMeta: - bare-abort-controller: - optional: true - bare-buffer: - optional: true - bare-events: - optional: true - - bare-url@2.4.6: - resolution: {integrity: sha512-iQxPClE07hETVpbRoX7JXX3v/ZQViCxe/SYCxylRLzdEx1xJAufPptfiOqR8tqiCtmbtMDANKWszzjLu1PMAZQ==} - base-x@5.0.1: resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} @@ -3394,9 +3237,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - bcrypt-pbkdf@1.0.2: - resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} - bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -3407,18 +3247,12 @@ packages: bind-event-listener@3.0.0: resolution: {integrity: sha512-PJvH288AWQhKs2v9zyfYdPzlPqf5bXbGMmhmUIY9x4dAUGIWgomO771oBQNwJnMQSnUIXhKu6sgzpBRXTlvb8Q==} - bl@4.1.0: - resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} - blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} blurhash@2.0.5: resolution: {integrity: sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==} - brace-expansion@2.1.1: - resolution: {integrity: sha512-WR1cURNjuvBLMZBMbqM0UoE+WAfdUcEV1ccD8PVBVOI+Z3ND4+SZbN8RsfT2bMuG1qwz5RFvPukSZm5fF2D5eA==} - brace-expansion@5.0.6: resolution: {integrity: sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g==} engines: {node: 18 || 20 || >=22} @@ -3438,27 +3272,12 @@ packages: bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} - buffer-crc32@1.0.0: - resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} - engines: {node: '>=8.0.0'} - 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==} - buildcheck@0.0.7: - resolution: {integrity: sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==} - engines: {node: '>=10.0.0'} - - byline@5.0.0: - resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} - engines: {node: '>=0.10.0'} - cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -3494,19 +3313,12 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chownr@1.1.4: - resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} - chroma-js@3.2.0: resolution: {integrity: sha512-os/OippSlX1RlWWr+QDPcGUZs0uoqr32urfxESG9U93lhUfbnlyckte84Q8P1UQY/qth983AS1JONKmLS4T0nw==} classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - cliui@8.0.1: - resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} - engines: {node: '>=12'} - cloudflared@0.7.1: resolution: {integrity: sha512-jJn1Gu9Tf4qnIu8tfiHZ25Hs8rNcRYSVf8zAd97wvYdOCzftm1CTs1S/RPhijjGi8gUT1p9yzfDi9zYlU/0RwA==} hasBin: true @@ -3515,13 +3327,6 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3533,10 +3338,6 @@ packages: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} - compress-commons@6.0.2: - resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} - engines: {node: '>= 14'} - compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} @@ -3557,9 +3358,6 @@ packages: core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -3569,19 +3367,6 @@ packages: typescript: optional: true - cpu-features@0.0.10: - resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} - engines: {node: '>=10.0.0'} - - crc-32@1.2.2: - resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} - engines: {node: '>=0.8'} - hasBin: true - - crc32-stream@6.0.0: - resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} - engines: {node: '>= 14'} - create-web-stream@1.1.3: resolution: {integrity: sha512-ocdWcsi6F8/8f0L/Fsbt3UmPSB+7H5hXR0aRr7Wiu7TXC1Z8vwlwxpeO4+gMgJ8g4TqwM5oTnSid43Jxm2ArwA==} engines: {node: '>=18.9.0'} @@ -3680,18 +3465,6 @@ packages: resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} hasBin: true - docker-compose@1.4.2: - resolution: {integrity: sha512-rPHigTKGaEHpkUmfd69QgaOp+Os5vGJwG/Ry8lcr8W/382AmI+z/D7qoa9BybKIkqNppaIbs8RYeHSevdQjWww==} - engines: {node: '>= 6.0.0'} - - docker-modem@5.0.7: - resolution: {integrity: sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==} - engines: {node: '>= 8.0'} - - dockerode@5.0.1: - resolution: {integrity: sha512-avsq/xk4YPIrn0CgleX5bjT9Y8IT1p9PxrNQ++RBQ2WEyFfHCTDsT9kmyxz+H/axnjAwg8wJWEIuPGOUuNupiA==} - engines: {node: '>= 14.17'} - dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -3728,9 +3501,6 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} @@ -3739,12 +3509,6 @@ packages: electron-to-chromium@1.5.374: resolution: {integrity: sha512-HCF5i7izveksHSGqa7mhDh6tr3Uz9Dar2RAjwuh69bw3QGPVObjQIgLwQWeO/Rxp9/r0KdboKy9RbpQDl97fjg==} - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - emojibase-data@17.0.0: resolution: {integrity: sha512-Yvgb5AWoHViHV/gq1qr5ZAarcBip+B27/ZLRsUJkbgAEaLlZ/fof9g882LTpmEpyhBNEC0m2SEmItljHsTygjA==} peerDependencies: @@ -3754,9 +3518,6 @@ packages: resolution: {integrity: sha512-bXdpf4HPY3p41zK5swVKZdC/VynsMZ4LoLxdYDE+GucqkFwzcM1GVc4ODfYAlwoKaf2U2oNNUoOO78N96ovpBA==} engines: {node: '>=18.12.0'} - end-of-stream@1.4.5: - resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3833,16 +3594,9 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} - event-target-shim@5.0.1: - resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} - engines: {node: '>=6'} - eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} - events-universal@1.0.1: - resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} - events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -3854,9 +3608,6 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-fifo@1.3.2: - resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} - fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -3942,18 +3693,10 @@ packages: react-dom: optional: true - fs-constants@1.0.0: - resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} - 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} @@ -3977,10 +3720,6 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} - get-caller-file@2.0.5: - resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} - engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3988,10 +3727,6 @@ packages: get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - get-port@5.1.1: - resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} - engines: {node: '>=8'} - get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -4007,11 +3742,6 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - glob@10.5.0: - resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} - deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me - hasBin: true - glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} @@ -4124,9 +3854,6 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -4185,10 +3912,6 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -4281,9 +4004,6 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -4302,9 +4022,6 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} - jackspeak@3.4.3: - resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jackspeak@4.2.3: resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} engines: {node: 20 || >=22} @@ -4394,10 +4111,6 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - lazystream@1.0.1: - resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} - engines: {node: '>= 0.6.3'} - leaflet@1.9.4: resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} @@ -4495,9 +4208,6 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} - lodash.camelcase@4.3.0: - resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} - lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -4511,9 +4221,6 @@ packages: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} - long@5.3.2: - resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -4586,26 +4293,10 @@ packages: resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==} engines: {node: 18 || 20 || >=22} - minimatch@5.1.9: - resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==} - engines: {node: '>=10'} - - minimatch@9.0.9: - resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==} - engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.3: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} - mkdirp-classic@0.5.3: - resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} - - mkdirp@3.0.1: - resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} - engines: {node: '>=10'} - hasBin: true - mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -4625,9 +4316,6 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - nan@2.28.0: - resolution: {integrity: sha512-fTsDz99OTq2sVePhGdp4qQhggZFtKr64ZNVyVajRKtMOkJxYekplBh577PiJB12v/D3s2E5cGtOI45LWp6rnLQ==} - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4673,9 +4361,6 @@ packages: resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} engines: {node: '>=12.20.0'} - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -4758,10 +4443,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.11.1: - resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} - engines: {node: '>=16 || 14 >=14.18'} - path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} @@ -4794,16 +4475,6 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} - playwright-core@1.61.1: - resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} - engines: {node: '>=18'} - hasBin: true - - playwright@1.61.1: - resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} - engines: {node: '>=18'} - hasBin: true - possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -4824,13 +4495,6 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - process@0.11.10: - resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} - engines: {node: '>= 0.6.0'} - progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -4838,23 +4502,9 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - proper-lockfile@4.1.2: - resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} - - properties-reader@3.0.1: - resolution: {integrity: sha512-WPn+h9RGEExOKdu4bsF4HksG/uzd3cFq3MFtq8PsFeExPse5Ha/VOjQNyHhjboBFwGXGev6muJYTSPAOkROq2g==} - engines: {node: '>=18'} - - protobufjs@7.6.5: - resolution: {integrity: sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==} - engines: {node: '>=12.0.0'} - proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} - pump@3.0.4: - resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4862,9 +4512,6 @@ packages: raf-schd@4.0.3: resolution: {integrity: sha512-tQkJl2GRWh83ui2DiPTJz9wEiMN20syf+5oKfB03yYP7ioZcJwsIK8FjrtLwH1m7C7e+Tt2yYBlrOpdT+dyeIQ==} - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - react-aria@3.50.0: resolution: {integrity: sha512-S0Os6QZk33fzUAKu1QLT9afoUaCBt1ZNdoiq0n2YMVgKIdNIQS8zxiZ8O9hYE6QyDkHKjD6q39LQZ+qaSAIgjw==} peerDependencies: @@ -4962,20 +4609,6 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readable-stream@4.7.0: - resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - readdir-glob@1.1.3: - resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} - readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -5010,10 +4643,6 @@ packages: resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true - require-directory@2.1.1: - resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} - engines: {node: '>=0.10.0'} - require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -5033,20 +4662,11 @@ packages: engines: {node: '>= 0.4'} hasBin: true - retry@0.12.0: - resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} - engines: {node: '>= 4'} - rolldown@1.0.3: resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@2.80.0: - resolution: {integrity: sha512-cIFJOD1DESzpjOBl763Kp1AH7UE/0fcdHe6rZXUdQ9c50uvgigvW97u3IcSeBwOkgqL/PXPBktBCh0KEu5L8XQ==} - engines: {node: '>=10.0.0'} - hasBin: true - rollup@4.62.0: resolution: {integrity: sha512-nc72Wgq62I7rtDV4izT5/aaS0zxy3kttkinf9586ApknY3jZO9NYsmtc24fUckA0X7Q2v+ML4a15pdUlV5V/jA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -5056,12 +4676,6 @@ packages: resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -5070,9 +4684,6 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -5096,8 +4707,9 @@ packages: engines: {node: '>=10'} hasBin: true - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + serialize-javascript@7.0.7: + resolution: {integrity: sha512-YAy8Od6KV+uuwUuU50np8fGB/Aues6Y0nAhA9y/hId74PlKUcme4pXcBD46NWKr1Q4osN/iseZ17YqO1XfmI8g==} + engines: {node: '>=20.0.0'} set-function-length@1.2.2: resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} @@ -5142,9 +4754,6 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -5205,16 +4814,6 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead - split-ca@1.0.1: - resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} - - ssh-remote-port-forward@1.0.4: - resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} - - ssh2@1.17.0: - resolution: {integrity: sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==} - engines: {node: '>=10.16.0'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -5225,17 +4824,6 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} - streamx@2.28.0: - resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -5252,24 +4840,10 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-object@3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - strip-comments@2.0.1: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} engines: {node: '>=10'} @@ -5309,28 +4883,12 @@ packages: tabbable@6.5.0: resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} - tar-fs@2.1.5: - resolution: {integrity: sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==} - - tar-fs@3.1.3: - resolution: {integrity: sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==} - tar-mini@0.2.0: resolution: {integrity: sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==} - tar-stream@2.2.0: - resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} - engines: {node: '>=6'} - - tar-stream@3.2.0: - resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} - tauri-plugin-android-fs-api@28.4.0: resolution: {integrity: sha512-YOo1P+cRjuaoPbTNZprMhr56ruKO4hIDq7kJOum91NqkN+VWY9F+UPAdjZokhzJSsbkeY0nsb1VDLXb2/h3f3w==} - teex@1.0.1: - resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} - temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -5344,12 +4902,6 @@ packages: engines: {node: '>=10'} hasBin: true - testcontainers@12.0.4: - resolution: {integrity: sha512-QIR/8xF1+F/26cIM+9B4yyxNTbKJxAv3hygZyhPRgZ8Q2AhlPZjDdpXRuk16V37X4bgJRI3hXFhoEICMBA7Adg==} - - text-decoder@1.2.7: - resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} - tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} @@ -5379,10 +4931,6 @@ packages: resolution: {integrity: sha512-A3BDQBeeukYPzB4QdQ1DtdlUmp4x2OCH8n5UVhEWbyANxNep8GavottKzd1xYKFJKjUgMyPT7EzOfnBO55s8Sg==} hasBin: true - tmp@0.2.7: - resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} - engines: {node: '>=14.14'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -5408,9 +4956,6 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - tweetnacl@0.14.5: - resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} - type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} @@ -5454,9 +4999,6 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} - undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} @@ -5464,10 +5006,6 @@ packages: resolution: {integrity: sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA==} engines: {node: '>=20.18.1'} - undici@8.8.0: - resolution: {integrity: sha512-ubshXMXwF3MQIMF1y/WxZdNBnjEKeSg2wF5mcGUtU55YTw34tnVVpKRlLf7ruDXZ5344KokPVX4RBx1wJm64Bw==} - engines: {node: '>=22.19.0'} - unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} @@ -5513,9 +5051,6 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). @@ -5624,7 +5159,7 @@ packages: peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 '@vitejs/devtools': ^0.1.18 - esbuild: ^0.27.0 || ^0.28.0 + esbuild: '>=0.25.0' jiti: '>=1.21.0' less: ^4.0.0 sass: ^1.70.0 @@ -5839,17 +5374,6 @@ packages: '@cloudflare/workers-types': optional: true - wrap-ansi@7.0.0: - resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} - engines: {node: '>=10'} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -5869,10 +5393,6 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} - y18n@5.0.8: - resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} - engines: {node: '>=10'} - yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -5881,14 +5401,6 @@ packages: engines: {node: '>= 14.6'} hasBin: true - yargs-parser@21.1.1: - resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} - engines: {node: '>=12'} - - yargs@17.7.3: - resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} - engines: {node: '>=12'} - yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5899,10 +5411,6 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} - zip-stream@6.0.1: - resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} - engines: {node: '>= 14'} - zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -6634,8 +6142,6 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@balena/dockerignore@1.0.2': {} - '@bcoe/v8-coverage@1.0.2': {} '@bramus/specificity@2.4.2': @@ -6927,25 +6433,6 @@ snapshots: '@fontsource/space-mono@5.2.9': {} - '@grpc/grpc-js@1.14.4': - dependencies: - '@grpc/proto-loader': 0.8.1 - '@js-sdsl/ordered-map': 4.4.2 - - '@grpc/proto-loader@0.7.15': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.6.5 - yargs: 17.7.3 - - '@grpc/proto-loader@0.8.1': - dependencies: - lodash.camelcase: 4.3.0 - long: 5.3.2 - protobufjs: 7.6.5 - yargs: 17.7.3 - '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.34.5': @@ -7054,15 +6541,6 @@ snapshots: dependencies: '@swc/helpers': 0.5.23 - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.2.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 - '@isaacs/cliui@9.0.0': {} '@jridgewell/gen-mapping@0.3.13': @@ -7094,16 +6572,8 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 - '@js-sdsl/ordered-map@4.4.2': {} - '@juggle/resize-observer@3.4.0': {} - '@kwsites/file-exists@1.1.1': - dependencies: - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - '@matrix-org/matrix-sdk-crypto-wasm@18.3.1': {} '@napi-rs/canvas-android-arm64@1.0.2': @@ -7443,13 +6913,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@pkgjs/parseargs@0.11.0': - optional: true - - '@playwright/test@1.61.1': - dependencies: - playwright: 1.61.1 - '@polka/url@1.0.0-next.29': {} '@poppinss/colors@4.1.6': @@ -7464,26 +6927,6 @@ snapshots: '@poppinss/exception@1.2.3': {} - '@protobufjs/aspromise@1.1.2': {} - - '@protobufjs/base64@1.1.2': {} - - '@protobufjs/codegen@2.0.5': {} - - '@protobufjs/eventemitter@1.1.1': {} - - '@protobufjs/fetch@1.1.1': - dependencies: - '@protobufjs/aspromise': 1.1.2 - - '@protobufjs/float@1.0.2': {} - - '@protobufjs/path@1.1.2': {} - - '@protobufjs/pool@1.1.0': {} - - '@protobufjs/utf8@1.1.2': {} - '@react-leaflet/core@2.1.0(leaflet@1.9.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: leaflet: 1.9.4 @@ -7549,73 +6992,73 @@ snapshots: '@rolldown/pluginutils@1.0.1': {} - '@rollup/plugin-babel@5.3.1(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@2.80.0)': + '@rollup/plugin-babel@5.3.1(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.62.0)': dependencies: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 - '@rollup/pluginutils': 3.1.0(rollup@2.80.0) - rollup: 2.80.0 + '@rollup/pluginutils': 3.1.0(rollup@4.62.0) + rollup: 4.62.0 optionalDependencies: '@types/babel__core': 7.20.5 transitivePeerDependencies: - supports-color - '@rollup/plugin-inject@5.0.5(rollup@2.80.0)': + '@rollup/plugin-inject@5.0.5(rollup@4.62.0)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@2.80.0) + '@rollup/pluginutils': 5.4.0(rollup@4.62.0) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 2.80.0 + rollup: 4.62.0 - '@rollup/plugin-node-resolve@15.3.1(rollup@2.80.0)': + '@rollup/plugin-node-resolve@15.3.1(rollup@4.62.0)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@2.80.0) + '@rollup/pluginutils': 5.4.0(rollup@4.62.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.12 optionalDependencies: - rollup: 2.80.0 + rollup: 4.62.0 - '@rollup/plugin-replace@2.4.2(rollup@2.80.0)': + '@rollup/plugin-replace@2.4.2(rollup@4.62.0)': dependencies: - '@rollup/pluginutils': 3.1.0(rollup@2.80.0) + '@rollup/pluginutils': 3.1.0(rollup@4.62.0) magic-string: 0.25.9 - rollup: 2.80.0 + rollup: 4.62.0 - '@rollup/plugin-terser@0.4.4(rollup@2.80.0)': + '@rollup/plugin-terser@0.4.4(rollup@4.62.0)': dependencies: - serialize-javascript: 6.0.2 + serialize-javascript: 7.0.7 smob: 1.6.2 terser: 5.48.0 optionalDependencies: - rollup: 2.80.0 + rollup: 4.62.0 - '@rollup/plugin-virtual@3.0.2(rollup@2.80.0)': + '@rollup/plugin-virtual@3.0.2(rollup@4.62.0)': optionalDependencies: - rollup: 2.80.0 + rollup: 4.62.0 - '@rollup/plugin-wasm@6.2.2(rollup@2.80.0)': + '@rollup/plugin-wasm@6.2.2(rollup@4.62.0)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@2.80.0) + '@rollup/pluginutils': 5.4.0(rollup@4.62.0) optionalDependencies: - rollup: 2.80.0 + rollup: 4.62.0 - '@rollup/pluginutils@3.1.0(rollup@2.80.0)': + '@rollup/pluginutils@3.1.0(rollup@4.62.0)': dependencies: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.2 - rollup: 2.80.0 + rollup: 4.62.0 - '@rollup/pluginutils@5.4.0(rollup@2.80.0)': + '@rollup/pluginutils@5.4.0(rollup@4.62.0)': dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.4 optionalDependencies: - rollup: 2.80.0 + rollup: 4.62.0 '@rollup/rollup-android-arm-eabi@4.62.0': optional: true @@ -7789,20 +7232,20 @@ snapshots: '@sentry/browser-utils': 10.63.0 '@sentry/core': 10.63.0 - '@sentry/rollup-plugin@5.3.0(rollup@2.80.0)': + '@sentry/rollup-plugin@5.3.0(rollup@4.62.0)': dependencies: '@sentry/bundler-plugin-core': 5.3.0 magic-string: 0.30.21 optionalDependencies: - rollup: 2.80.0 + rollup: 4.62.0 transitivePeerDependencies: - encoding - supports-color - '@sentry/vite-plugin@5.3.0(rollup@2.80.0)': + '@sentry/vite-plugin@5.3.0(rollup@4.62.0)': dependencies: '@sentry/bundler-plugin-core': 5.3.0 - '@sentry/rollup-plugin': 5.3.0(rollup@2.80.0) + '@sentry/rollup-plugin': 5.3.0(rollup@4.62.0) transitivePeerDependencies: - encoding - rollup @@ -8133,17 +7576,6 @@ snapshots: '@types/deep-eql@4.0.2': {} - '@types/docker-modem@3.0.6': - dependencies: - '@types/node': 24.13.2 - '@types/ssh2': 1.15.5 - - '@types/dockerode@4.0.1': - dependencies: - '@types/docker-modem': 3.0.6 - '@types/node': 24.13.2 - '@types/ssh2': 1.15.5 - '@types/estree@0.0.39': {} '@types/estree@1.0.9': {} @@ -8160,10 +7592,6 @@ snapshots: dependencies: '@types/geojson': 7946.0.16 - '@types/node@18.19.130': - dependencies: - undici-types: 5.26.5 - '@types/node@24.13.2': dependencies: undici-types: 7.18.2 @@ -8185,19 +7613,6 @@ snapshots: '@types/resolve@1.20.2': {} - '@types/ssh2-streams@0.1.13': - dependencies: - '@types/node': 24.13.2 - - '@types/ssh2@0.5.52': - dependencies: - '@types/node': 24.13.2 - '@types/ssh2-streams': 0.1.13 - - '@types/ssh2@1.15.5': - dependencies: - '@types/node': 18.19.130 - '@types/trusted-types@2.0.7': {} '@use-gesture/core@10.3.1': {} @@ -8374,10 +7789,6 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 - abort-controller@3.0.0: - dependencies: - event-target-shim: 5.0.1 - acorn@8.17.0: {} agent-base@6.0.2: @@ -8397,45 +7808,13 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.2.2: {} - - ansi-styles@4.3.0: - dependencies: - color-convert: 2.0.1 - ansi-styles@5.2.0: {} - ansi-styles@6.2.3: {} - anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.2 - archiver-utils@5.0.2: - dependencies: - glob: 10.5.0 - graceful-fs: 4.2.11 - is-stream: 2.0.1 - lazystream: 1.0.1 - lodash: 4.18.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - - archiver@7.0.1: - dependencies: - archiver-utils: 5.0.2 - async: 3.2.6 - buffer-crc32: 1.0.0 - readable-stream: 4.7.0 - readdir-glob: 1.1.3 - tar-stream: 3.2.0 - zip-stream: 6.0.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - argparse@2.0.1: {} aria-hidden@1.2.6: @@ -8463,10 +7842,6 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 - asn1@0.2.6: - dependencies: - safer-buffer: 2.1.2 - assertion-error@2.0.1: {} ast-v8-to-istanbul@1.0.4: @@ -8477,8 +7852,6 @@ snapshots: async-function@1.0.0: {} - async-lock@1.4.1: {} - async@3.2.6: {} at-least-node@1.0.0: {} @@ -8489,8 +7862,6 @@ snapshots: await-to-js@3.0.0: {} - b4a@1.8.1: {} - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.7 @@ -8517,49 +7888,14 @@ snapshots: badwords-list@2.0.1-4: {} - balanced-match@1.0.2: {} - balanced-match@4.0.4: {} - bare-events@2.9.1: {} - - bare-fs@4.7.4: - dependencies: - bare-events: 2.9.1 - bare-path: 3.1.1 - bare-stream: 2.13.3(bare-events@2.9.1) - bare-url: 2.4.6 - fast-fifo: 1.3.2 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - bare-path@3.1.1: {} - - bare-stream@2.13.3(bare-events@2.9.1): - dependencies: - b4a: 1.8.1 - streamx: 2.28.0 - teex: 1.0.1 - optionalDependencies: - bare-events: 2.9.1 - transitivePeerDependencies: - - react-native-b4a - - bare-url@2.4.6: - dependencies: - bare-path: 3.1.1 - base-x@5.0.1: {} base64-js@1.5.1: {} baseline-browser-mapping@2.10.37: {} - bcrypt-pbkdf@1.0.2: - dependencies: - tweetnacl: 0.14.5 - bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 @@ -8568,20 +7904,10 @@ snapshots: bind-event-listener@3.0.0: {} - bl@4.1.0: - dependencies: - buffer: 5.7.1 - inherits: 2.0.4 - readable-stream: 3.6.2 - blake3-wasm@2.1.5: {} blurhash@2.0.5: {} - brace-expansion@2.1.1: - dependencies: - balanced-match: 1.0.2 - brace-expansion@5.0.6: dependencies: balanced-match: 4.0.4 @@ -8604,25 +7930,13 @@ snapshots: dependencies: base-x: 5.0.1 - buffer-crc32@1.0.0: {} - buffer-from@1.1.2: {} - buffer@5.7.1: - dependencies: - base64-js: 1.5.1 - ieee754: 1.2.1 - buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 - buildcheck@0.0.7: - optional: true - - byline@5.0.0: {} - cac@7.0.0: {} call-bind-apply-helpers@1.0.2: @@ -8662,42 +7976,20 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chownr@1.1.4: {} - chroma-js@3.2.0: {} classnames@2.5.1: {} - cliui@8.0.1: - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - cloudflared@0.7.1: {} clsx@2.1.1: {} - color-convert@2.0.1: - dependencies: - color-name: 1.1.4 - - color-name@1.1.4: {} - commander@2.20.3: {} commander@8.3.0: {} common-tags@1.8.2: {} - compress-commons@6.0.2: - dependencies: - crc-32: 1.2.2 - crc32-stream: 6.0.0 - is-stream: 2.0.1 - normalize-path: 3.0.0 - readable-stream: 4.7.0 - compute-scroll-into-view@3.1.1: {} confbox@0.1.8: {} @@ -8712,8 +8004,6 @@ snapshots: dependencies: browserslist: 4.28.2 - core-util-is@1.0.3: {} - cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 @@ -8723,19 +8013,6 @@ snapshots: optionalDependencies: typescript: 5.9.3 - cpu-features@0.0.10: - dependencies: - buildcheck: 0.0.7 - nan: 2.28.0 - optional: true - - crc-32@1.2.2: {} - - crc32-stream@6.0.0: - dependencies: - crc-32: 1.2.2 - readable-stream: 4.7.0 - create-web-stream@1.1.3: {} cross-fetch@4.0.0: @@ -8822,30 +8099,6 @@ snapshots: direction@1.0.4: {} - docker-compose@1.4.2: - dependencies: - yaml: 2.9.0 - - docker-modem@5.0.7: - dependencies: - debug: 4.4.3 - readable-stream: 3.6.2 - split-ca: 1.0.1 - ssh2: 1.17.0 - transitivePeerDependencies: - - supports-color - - dockerode@5.0.1: - dependencies: - '@balena/dockerignore': 1.0.2 - '@grpc/grpc-js': 1.14.4 - '@grpc/proto-loader': 0.7.15 - docker-modem: 5.0.7 - protobufjs: 7.6.5 - tar-fs: 2.1.5 - transitivePeerDependencies: - - supports-color - dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -8885,28 +8138,18 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - eastasianwidth@0.2.0: {} - ejs@3.1.10: dependencies: jake: 10.9.4 electron-to-chromium@1.5.374: {} - emoji-regex@8.0.0: {} - - emoji-regex@9.2.2: {} - emojibase-data@17.0.0(emojibase@17.0.0): dependencies: emojibase: 17.0.0 emojibase@17.0.0: {} - end-of-stream@1.4.5: - dependencies: - once: 1.4.0 - entities@4.5.0: {} entities@8.0.0: {} @@ -9081,24 +8324,14 @@ snapshots: '@types/node': 24.13.2 require-like: 0.1.2 - event-target-shim@5.0.1: {} - eventemitter3@5.0.4: {} - events-universal@1.0.1: - dependencies: - bare-events: 2.9.1 - transitivePeerDependencies: - - bare-abort-controller - events@3.3.0: {} expect-type@1.3.0: {} fast-deep-equal@3.1.3: {} - fast-fifo@1.3.2: {} - fast-json-stable-stringify@2.1.0: {} fast-uri@3.1.2: {} @@ -9117,7 +8350,7 @@ snapshots: filelist@1.0.6: dependencies: - minimatch: 5.1.9 + minimatch: 10.2.5 fill-range@7.1.1: dependencies: @@ -9173,8 +8406,6 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - fs-constants@1.0.0: {} - fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 @@ -9182,9 +8413,6 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 - fsevents@2.3.2: - optional: true - fsevents@2.3.3: optional: true @@ -9208,8 +8436,6 @@ snapshots: gensync@1.0.0-beta.2: {} - get-caller-file@2.0.5: {} - get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -9225,8 +8451,6 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} - get-port@5.1.1: {} - get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -9246,15 +8470,6 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.5.0: - dependencies: - foreground-child: 3.3.1 - jackspeak: 3.4.3 - minimatch: 9.0.9 - minipass: 7.1.3 - package-json-from-dist: 1.0.1 - path-scurry: 1.11.1 - glob@11.1.0: dependencies: foreground-child: 3.3.1 @@ -9375,8 +8590,6 @@ snapshots: indent-string@4.0.0: {} - inherits@2.0.4: {} - inline-style-parser@0.2.7: {} internal-slot@1.1.0: @@ -9441,8 +8654,6 @@ snapshots: dependencies: call-bound: 1.0.4 - is-fullwidth-code-point@3.0.0: {} - is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -9523,8 +8734,6 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 - isarray@1.0.0: {} - isarray@2.0.5: {} isexe@2.0.0: {} @@ -9542,12 +8751,6 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jackspeak@3.4.3: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jackspeak@4.2.3: dependencies: '@isaacs/cliui': 9.0.0 @@ -9641,10 +8844,6 @@ snapshots: yaml: 2.9.0 zod: 4.4.3 - lazystream@1.0.1: - dependencies: - readable-stream: 2.3.8 - leaflet@1.9.4: {} leven@3.1.0: {} @@ -9711,8 +8910,6 @@ snapshots: dependencies: p-locate: 5.0.0 - lodash.camelcase@4.3.0: {} - lodash.debounce@4.0.8: {} lodash.sortby@4.7.0: {} @@ -9721,8 +8918,6 @@ snapshots: loglevel@1.9.2: {} - long@5.3.2: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -9808,20 +9003,8 @@ snapshots: dependencies: brace-expansion: 5.0.6 - minimatch@5.1.9: - dependencies: - brace-expansion: 2.1.1 - - minimatch@9.0.9: - dependencies: - brace-expansion: 2.1.1 - minipass@7.1.3: {} - mkdirp-classic@0.5.3: {} - - mkdirp@3.0.1: {} - mlly@1.8.2: dependencies: acorn: 8.17.0 @@ -9841,9 +9024,6 @@ snapshots: ms@2.1.3: {} - nan@2.28.0: - optional: true - nanoid@3.3.12: {} no-case@3.0.4: @@ -9876,10 +9056,6 @@ snapshots: obug@2.1.3: {} - once@1.4.0: - dependencies: - wrappy: 1.0.2 - own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -10026,11 +9202,6 @@ snapshots: path-parse@1.0.7: {} - path-scurry@1.11.1: - dependencies: - lru-cache: 10.4.3 - minipass: 7.1.3 - path-scurry@2.0.2: dependencies: lru-cache: 11.5.1 @@ -10058,14 +9229,6 @@ snapshots: mlly: 1.8.2 pathe: 2.0.3 - playwright-core@1.61.1: {} - - playwright@1.61.1: - dependencies: - playwright-core: 1.61.1 - optionalDependencies: - fsevents: 2.3.2 - possible-typed-array-names@1.1.0: {} postcss@8.5.15: @@ -10084,10 +9247,6 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 - process-nextick-args@2.0.1: {} - - process@0.11.10: {} - progress@2.0.3: {} prop-types@15.8.1: @@ -10096,48 +9255,12 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 - proper-lockfile@4.1.2: - dependencies: - graceful-fs: 4.2.11 - retry: 0.12.0 - signal-exit: 3.0.7 - - properties-reader@3.0.1: - dependencies: - '@kwsites/file-exists': 1.1.1 - mkdirp: 3.0.1 - transitivePeerDependencies: - - supports-color - - protobufjs@7.6.5: - dependencies: - '@protobufjs/aspromise': 1.1.2 - '@protobufjs/base64': 1.1.2 - '@protobufjs/codegen': 2.0.5 - '@protobufjs/eventemitter': 1.1.1 - '@protobufjs/fetch': 1.1.1 - '@protobufjs/float': 1.0.2 - '@protobufjs/path': 1.1.2 - '@protobufjs/pool': 1.1.0 - '@protobufjs/utf8': 1.1.2 - '@types/node': 24.13.2 - long: 5.3.2 - proxy-from-env@1.1.0: {} - pump@3.0.4: - dependencies: - end-of-stream: 1.4.5 - once: 1.4.0 - punycode@2.3.1: {} raf-schd@4.0.3: {} - randombytes@2.1.0: - dependencies: - safe-buffer: 5.2.1 - react-aria@3.50.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@internationalized/date': 3.12.2 @@ -10237,34 +9360,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - readable-stream@2.3.8: - dependencies: - core-util-is: 1.0.3 - inherits: 2.0.4 - isarray: 1.0.0 - process-nextick-args: 2.0.1 - safe-buffer: 5.1.2 - string_decoder: 1.1.1 - util-deprecate: 1.0.2 - - readable-stream@3.6.2: - dependencies: - inherits: 2.0.4 - string_decoder: 1.3.0 - util-deprecate: 1.0.2 - - readable-stream@4.7.0: - dependencies: - abort-controller: 3.0.0 - buffer: 6.0.3 - events: 3.3.0 - process: 0.11.10 - string_decoder: 1.3.0 - - readdir-glob@1.1.3: - dependencies: - minimatch: 5.1.9 - readdirp@3.6.0: dependencies: picomatch: 2.3.2 @@ -10315,8 +9410,6 @@ snapshots: dependencies: jsesc: 3.1.0 - require-directory@2.1.1: {} - require-from-string@2.0.2: {} require-like@0.1.2: {} @@ -10332,8 +9425,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - retry@0.12.0: {} - rolldown@1.0.3: dependencies: '@oxc-project/types': 0.133.0 @@ -10355,10 +9446,6 @@ snapshots: '@rolldown/binding-win32-arm64-msvc': 1.0.3 '@rolldown/binding-win32-x64-msvc': 1.0.3 - rollup@2.80.0: - optionalDependencies: - fsevents: 2.3.3 - rollup@4.62.0: dependencies: '@types/estree': 1.0.9 @@ -10398,10 +9485,6 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 - safe-buffer@5.1.2: {} - - safe-buffer@5.2.1: {} - safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -10413,8 +9496,6 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 - safer-buffer@2.1.2: {} - saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -10433,9 +9514,7 @@ snapshots: semver@7.8.4: {} - serialize-javascript@6.0.2: - dependencies: - randombytes: 2.1.0 + serialize-javascript@7.0.7: {} set-function-length@1.2.2: dependencies: @@ -10526,8 +9605,6 @@ snapshots: siginfo@2.0.0: {} - signal-exit@3.0.7: {} - signal-exit@4.1.0: {} sirv@3.0.2: @@ -10591,21 +9668,6 @@ snapshots: sourcemap-codec@1.4.8: {} - split-ca@1.0.1: {} - - ssh-remote-port-forward@1.0.4: - dependencies: - '@types/ssh2': 0.5.52 - ssh2: 1.17.0 - - ssh2@1.17.0: - dependencies: - asn1: 0.2.6 - bcrypt-pbkdf: 1.0.2 - optionalDependencies: - cpu-features: 0.0.10 - nan: 2.28.0 - stackback@0.0.2: {} std-env@4.1.0: {} @@ -10615,27 +9677,6 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 - streamx@2.28.0: - dependencies: - events-universal: 1.0.1 - fast-fifo: 1.3.2 - text-decoder: 1.2.7 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - - string-width@4.2.3: - dependencies: - emoji-regex: 8.0.0 - is-fullwidth-code-point: 3.0.0 - strip-ansi: 6.0.1 - - string-width@5.1.2: - dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.2.0 - string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.9 @@ -10676,28 +9717,12 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.2 - string_decoder@1.1.1: - dependencies: - safe-buffer: 5.1.2 - - string_decoder@1.3.0: - dependencies: - safe-buffer: 5.2.1 - stringify-object@3.3.0: dependencies: get-own-enumerable-property-symbols: 3.0.2 is-obj: 1.0.1 is-regexp: 1.0.0 - strip-ansi@6.0.1: - dependencies: - ansi-regex: 5.0.1 - - strip-ansi@7.2.0: - dependencies: - ansi-regex: 6.2.2 - strip-comments@2.0.1: {} strip-indent@3.0.0: @@ -10728,58 +9753,13 @@ snapshots: tabbable@6.5.0: {} - tar-fs@2.1.5: - dependencies: - chownr: 1.1.4 - mkdirp-classic: 0.5.3 - pump: 3.0.4 - tar-stream: 2.2.0 - - tar-fs@3.1.3: - dependencies: - pump: 3.0.4 - tar-stream: 3.2.0 - optionalDependencies: - bare-fs: 4.7.4 - bare-path: 3.1.1 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tar-mini@0.2.0: {} - tar-stream@2.2.0: - dependencies: - bl: 4.1.0 - end-of-stream: 1.4.5 - fs-constants: 1.0.0 - inherits: 2.0.4 - readable-stream: 3.6.2 - - tar-stream@3.2.0: - dependencies: - b4a: 1.8.1 - bare-fs: 4.7.4 - fast-fifo: 1.3.2 - streamx: 2.28.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - tauri-plugin-android-fs-api@28.4.0: dependencies: '@tauri-apps/api': 2.11.1 create-web-stream: 1.1.3 - teex@1.0.1: - dependencies: - streamx: 2.28.0 - transitivePeerDependencies: - - bare-abort-controller - - react-native-b4a - temp-dir@2.0.0: {} tempy@0.6.0: @@ -10796,35 +9776,6 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 - testcontainers@12.0.4: - dependencies: - '@balena/dockerignore': 1.0.2 - '@types/dockerode': 4.0.1 - archiver: 7.0.1 - async-lock: 1.4.1 - byline: 5.0.0 - debug: 4.4.3 - docker-compose: 1.4.2 - dockerode: 5.0.1 - get-port: 5.1.1 - proper-lockfile: 4.1.2 - properties-reader: 3.0.1 - ssh-remote-port-forward: 1.0.4 - tar-fs: 3.1.3 - tmp: 0.2.7 - undici: 8.8.0 - transitivePeerDependencies: - - bare-abort-controller - - bare-buffer - - react-native-b4a - - supports-color - - text-decoder@1.2.7: - dependencies: - b4a: 1.8.1 - transitivePeerDependencies: - - react-native-b4a - tiny-invariant@1.3.1: {} tinybench@2.9.0: {} @@ -10846,8 +9797,6 @@ snapshots: dependencies: tldts-core: 7.4.3 - tmp@0.2.7: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -10870,8 +9819,6 @@ snapshots: tslib@2.8.1: {} - tweetnacl@0.14.5: {} - type-fest@0.16.0: {} typed-array-buffer@1.0.3: @@ -10928,14 +9875,10 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@5.26.5: {} - undici-types@7.18.2: {} undici@7.28.0: {} - undici@8.8.0: {} - unenv@2.0.0-rc.24: dependencies: pathe: 2.0.3 @@ -10971,8 +9914,6 @@ snapshots: dependencies: react: 18.3.1 - util-deprecate@1.0.2: {} - uuid@10.0.0: {} virtua@0.49.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -11001,9 +9942,9 @@ snapshots: - tsx - yaml - vite-plugin-compression2@2.5.3(rollup@2.80.0): + vite-plugin-compression2@2.5.3(rollup@4.62.0): dependencies: - '@rollup/pluginutils': 5.4.0(rollup@2.80.0) + '@rollup/pluginutils': 5.4.0(rollup@4.62.0) tar-mini: 0.2.0 transitivePeerDependencies: - rollup @@ -11027,9 +9968,9 @@ snapshots: tinyglobby: 0.2.17 vite: 7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) - vite-plugin-svgr@4.5.0(rollup@2.80.0)(typescript@5.9.3)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + vite-plugin-svgr@4.5.0(rollup@4.62.0)(typescript@5.9.3)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): dependencies: - '@rollup/pluginutils': 5.4.0(rollup@2.80.0) + '@rollup/pluginutils': 5.4.0(rollup@4.62.0) '@svgr/core': 8.1.0(typescript@5.9.3) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.9.3)) vite: 7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0) @@ -11038,9 +9979,9 @@ snapshots: - supports-color - typescript - vite-plugin-top-level-await@1.6.0(@swc/helpers@0.5.23)(rollup@2.80.0)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): + vite-plugin-top-level-await@1.6.0(@swc/helpers@0.5.23)(rollup@4.62.0)(vite@7.3.5(@types/node@24.13.2)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.48.0)(yaml@2.9.0)): dependencies: - '@rollup/plugin-virtual': 3.0.2(rollup@2.80.0) + '@rollup/plugin-virtual': 3.0.2(rollup@4.62.0) '@swc/core': 1.15.41(@swc/helpers@0.5.23) '@swc/wasm': 1.15.41 uuid: 10.0.0 @@ -11210,10 +10151,10 @@ snapshots: '@babel/core': 7.29.7 '@babel/preset-env': 7.29.7(@babel/core@7.29.7) '@babel/runtime': 7.29.7 - '@rollup/plugin-babel': 5.3.1(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@2.80.0) - '@rollup/plugin-node-resolve': 15.3.1(rollup@2.80.0) - '@rollup/plugin-replace': 2.4.2(rollup@2.80.0) - '@rollup/plugin-terser': 0.4.4(rollup@2.80.0) + '@rollup/plugin-babel': 5.3.1(@babel/core@7.29.7)(@types/babel__core@7.20.5)(rollup@4.62.0) + '@rollup/plugin-node-resolve': 15.3.1(rollup@4.62.0) + '@rollup/plugin-replace': 2.4.2(rollup@4.62.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.62.0) '@surma/rollup-plugin-off-main-thread': 2.2.3 ajv: 8.20.0 common-tags: 1.8.2 @@ -11222,7 +10163,7 @@ snapshots: glob: 11.1.0 lodash: 4.18.1 pretty-bytes: 5.6.0 - rollup: 2.80.0 + rollup: 4.62.0 source-map: 0.8.0-beta.0 stringify-object: 3.3.0 strip-comments: 2.0.1 @@ -11348,44 +10289,16 @@ snapshots: - bufferutil - utf-8-validate - wrap-ansi@7.0.0: - dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 - - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.3 - string-width: 5.1.2 - strip-ansi: 7.2.0 - - wrappy@1.0.2: {} - ws@8.21.0: {} xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} - y18n@5.0.8: {} - yallist@3.1.1: {} yaml@2.9.0: {} - yargs-parser@21.1.1: {} - - yargs@17.7.3: - dependencies: - cliui: 8.0.1 - escalade: 3.2.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 21.1.1 - yocto-queue@0.1.0: {} youch-core@0.3.3: @@ -11401,10 +10314,4 @@ snapshots: cookie: 1.1.1 youch-core: 0.3.3 - zip-stream@6.0.1: - dependencies: - archiver-utils: 5.0.2 - compress-commons: 6.0.2 - readable-stream: 4.7.0 - zod@4.4.3: {} From 738f139cd38c2bfcdb85dced1a7e5fa76e48d3eb Mon Sep 17 00:00:00 2001 From: hazre Date: Wed, 22 Jul 2026 07:47:07 +0200 Subject: [PATCH 10/19] style: fix formatting Signed-off-by: hazre --- mise.toml | 2 +- package.json | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/mise.toml b/mise.toml index 3d7fafb9de..9112674a1f 100644 --- a/mise.toml +++ b/mise.toml @@ -90,4 +90,4 @@ tools = { "pinact" = "latest" } run = "tofu" raw_args = true hide = true -tools = { "opentofu" = "1.11.5" } \ No newline at end of file +tools = { "opentofu" = "1.11.5" } diff --git a/package.json b/package.json index 9c30743b7c..65ae7fb59a 100644 --- a/package.json +++ b/package.json @@ -159,7 +159,10 @@ "wrangler": "^4.106.0" }, "devEngines": { - "runtime": { "name": "node", "version": "24.x" } + "runtime": { + "name": "node", + "version": "24.x" + } }, "packageManager": "pnpm@10.32.1+sha512.a706938f0e89ac1456b6563eab4edf1d1faf3368d1191fc5c59790e96dc918e4456ab2e67d613de1043d2e8c81f87303e6b40d4ffeca9df15ef1ad567348f2be" } From 11ed5b30dd004b1cfe00cc3d5f69ac972a41a4d6 Mon Sep 17 00:00:00 2001 From: hazre Date: Thu, 23 Jul 2026 00:38:01 +0200 Subject: [PATCH 11/19] fix: knipe issues Signed-off-by: hazre --- knip.json | 2 +- scripts/icons/replace.js | 26 +++++++++++++++++++++++--- scripts/icons/symlink.js | 2 +- 3 files changed, 25 insertions(+), 5 deletions(-) diff --git a/knip.json b/knip.json index 5075b01ce2..6b0e9046d5 100644 --- a/knip.json +++ b/knip.json @@ -13,7 +13,7 @@ "@matrix-org/matrix-sdk-crypto-wasm", "@sableclient/twemoji-font" ], - "ignoreBinaries": ["knope"], + "ignoreBinaries": ["knope", "mise"], "rules": { "exports": "off", "types": "off", diff --git a/scripts/icons/replace.js b/scripts/icons/replace.js index 3f02f54150..bf50c01f73 100644 --- a/scripts/icons/replace.js +++ b/scripts/icons/replace.js @@ -1,16 +1,36 @@ #!/usr/bin/env node //MISE description="Replace logo/icon assets in public/ from SVG inputs via ffmpeg" +//MISE tools={ffmpeg="7.1.1"} import { execFileSync } from 'node:child_process'; import { existsSync, mkdirSync, copyFileSync } from 'node:fs'; -import { dirname, resolve } from 'node:path'; +import { dirname, resolve, join } from 'node:path'; import { fileURLToPath } from 'node:url'; import { createInterface } from 'node:readline'; -import { PrefixedLogger, createTextHelpers } from './utils/console-style.js'; +import { PrefixedLogger, createTextHelpers } from '../utils/console-style.js'; const __dirname = dirname(fileURLToPath(import.meta.url)); const BASE_DIR = resolve(__dirname, '..'); +function resolveBinary(name) { + try { + const root = execFileSync('mise', ['where', name], { encoding: 'utf-8' }).trim(); + const candidates = [ + join(root, 'Library', 'bin', `${name}.exe`), + join(root, 'bin', `${name}.exe`), + join(root, `${name}.exe`), + ]; + for (const exe of candidates) { + if (existsSync(exe)) return exe; + } + } catch { + /* fallback to path */ + } + return name; +} + +const FFMPEG = resolveBinary('ffmpeg'); + const logger = new PrefixedLogger('[replace-logo]'); const { red } = createTextHelpers({ useColor: logger.useColor }); @@ -54,7 +74,7 @@ function ffmpegCmd(input, output, size) { mkdirSync(dirname(output), { recursive: true }); logger.info(`Generating ${output} (${size} x ${size})`); execFileSync( - 'ffmpeg', + FFMPEG, ['-y', '-width', String(size), '-height', String(size), '-i', input, output], { stdio: 'pipe', diff --git a/scripts/icons/symlink.js b/scripts/icons/symlink.js index 9387639324..43c2066b00 100644 --- a/scripts/icons/symlink.js +++ b/scripts/icons/symlink.js @@ -5,7 +5,7 @@ import fs from 'node:fs'; import path from 'node:path'; import process from 'node:process'; -import { createTextHelpers } from './utils/console-style.js'; +import { createTextHelpers } from '../utils/console-style.js'; const ANDROID_ICONS = [ 'mipmap-hdpi', From 8d47de118aece0a3189dfb1b65d3ced1fb4be9da Mon Sep 17 00:00:00 2001 From: hazre Date: Thu, 23 Jul 2026 01:16:28 +0200 Subject: [PATCH 12/19] chore(mise): define tauri packages Signed-off-by: hazre --- .github/actions/setup/action.yml | 10 +++++ .github/workflows/quality-checks.yml | 2 +- .github/workflows/tauri-build.yml | 57 ++++++++++--------------- mise.tauri.toml | 63 ++++++++++++++++++++++++++++ mise.toml | 42 +++++++++++++++---- scripts/icons/replace.js | 2 +- scripts/icons/symlink.js | 2 +- scripts/install-knope.js | 2 +- scripts/tauri.js | 3 +- 9 files changed, 135 insertions(+), 48 deletions(-) create mode 100644 mise.tauri.toml diff --git a/.github/actions/setup/action.yml b/.github/actions/setup/action.yml index 961db8d82e..c3464dc0b2 100644 --- a/.github/actions/setup/action.yml +++ b/.github/actions/setup/action.yml @@ -6,6 +6,10 @@ inputs: description: Command used to install dependencies. required: false default: pnpm install --frozen-lockfile + tauri: + description: Whether to install Tauri build dependencies via mise. + required: false + default: 'false' build: description: Whether to build the app after installing dependencies. required: false @@ -30,6 +34,12 @@ runs: env: INPUTS_INSTALL_COMMAND: ${{ inputs.install-command }} + - name: Install Tauri build dependencies + if: ${{ inputs.tauri == 'true' }} + shell: bash + working-directory: ${{ github.workspace }} + run: mise run tauri:setup + - name: Build app if: ${{ inputs.build == 'true' }} shell: bash diff --git a/.github/workflows/quality-checks.yml b/.github/workflows/quality-checks.yml index a9ac437082..265ecafc67 100644 --- a/.github/workflows/quality-checks.yml +++ b/.github/workflows/quality-checks.yml @@ -40,7 +40,7 @@ jobs: - name: Setup app uses: ./.github/actions/setup - - name: Run ESLint + - name: Run Lint run: pnpm run lint typecheck: diff --git a/.github/workflows/tauri-build.yml b/.github/workflows/tauri-build.yml index 9cb7cdbf21..578a26e009 100644 --- a/.github/workflows/tauri-build.yml +++ b/.github/workflows/tauri-build.yml @@ -157,28 +157,10 @@ jobs: ref: ${{ needs.setup-release.outputs.ref }} persist-credentials: false - - name: Install Linux build dependencies - if: matrix.cef - shell: bash - run: | - sudo apt-get update - sudo apt-get install -y \ - libwebkit2gtk-4.1-dev \ - libgtk-3-dev \ - libayatana-appindicator3-dev \ - librsvg2-dev \ - libsoup-3.0-dev \ - libssl-dev \ - libxdo-dev \ - build-essential \ - file \ - rpm \ - ruby \ - ruby-dev - sudo gem install --no-document fpm - - name: Setup app uses: ./.github/actions/setup + with: + tauri: 'true' - name: Add Rust targets if: ${{ matrix.rust-targets != '' }} @@ -196,8 +178,7 @@ jobs: UPDATER_ENDPOINT: ${{ needs.setup-release.outputs.nightly == 'true' && format('https://github.com/{0}/releases/download/nightly/latest.json', github.repository) || '' }} run: node .github/scripts/set-tauri-version.mjs "$VERSION" "$UPDATER_ENDPOINT" - # --- macOS / Windows: standard wry build via tauri-action --- - - name: Configure desktop build + - name: Configure build args shell: bash env: IS_NIGHTLY: ${{ needs.setup-release.outputs.nightly }} @@ -216,11 +197,22 @@ jobs: echo "TAURI_BUILD_ARGS=${ARGS# }" >> "$GITHUB_ENV" - name: Build desktop bundles - id: tauri if: ${{ !matrix.cef }} - uses: tauri-apps/tauri-action@1deb371b0cd8bd54025b384f1cd735e725c4060f # v1.0.0 - with: - args: ${{ matrix.args }} ${{ env.TAURI_BUILD_ARGS }} + shell: bash + run: pnpm tauri build ${{ matrix.args }} $TAURI_BUILD_ARGS + + - name: Package macOS .app for updater + if: ${{ matrix.name == 'macOS' }} + shell: bash + run: | + macos_dir="${{ matrix.bundle_path }}/macos" + if [ -d "$macos_dir" ]; then + for app in "$macos_dir"/*.app; do + [ -e "$app" ] || continue + echo "Packaging $(basename "$app") into .tar.gz" + tar czf "$app.tar.gz" -C "$macos_dir" "$(basename "$app")" + done + fi - name: Normalize desktop artifact names if: ${{ !matrix.cef }} @@ -281,7 +273,7 @@ jobs: - name: Build native packages if: matrix.cef shell: bash - run: bash scripts/cef/package.sh "$VERSION" + run: mise run cef:package "$VERSION" - name: Sign the AppImage for the updater if: ${{ matrix.cef && env.TAURI_SIGNING_PRIVATE_KEY != '' }} @@ -356,15 +348,8 @@ jobs: - name: Setup app uses: ./.github/actions/setup - - - name: Setup Java - uses: actions/setup-java@03ad4de0992f5dab5e18fcb136590ce7c4a0ac95 # v5.6.0 with: - distribution: temurin - java-version: '17' - - - name: Setup Android SDK - uses: android-actions/setup-android@40fd30fb8d7440372e1316f5d1809ec01dcd3699 # v4.0.1 + tauri: 'true' - name: Add Rust targets shell: bash @@ -468,6 +453,8 @@ jobs: - name: Setup app uses: ./.github/actions/setup + with: + tauri: 'true' - name: Add Rust targets shell: bash diff --git a/mise.tauri.toml b/mise.tauri.toml new file mode 100644 index 0000000000..a3f830a106 --- /dev/null +++ b/mise.tauri.toml @@ -0,0 +1,63 @@ +# Tauri-specific dev tools and system dependencies. +# Loaded via `MISE_ENV=tauri` (set by `mise run setup:tauri` or CI). + +[settings] +idiomatic_version_file_enable_tools = ["pnpm", "node", "rust"] +experimental = true + +[tools] +# Android +java = "temurin-21" +android-sdk = "22.0" + +[bootstrap.packages] +# Debian/Ubuntu +"apt:build-essential" = "latest" +"apt:file" = "latest" +"apt:libayatana-appindicator3-dev" = "latest" +"apt:libgtk-3-dev" = "latest" +"apt:librsvg2-dev" = "latest" +"apt:libsoup-3.0-dev" = "latest" +"apt:libssl-dev" = "latest" +"apt:libwebkit2gtk-4.1-dev" = "latest" +"apt:libxdo-dev" = "latest" +"apt:pkg-config" = "latest" +"apt:curl" = "latest" +"apt:wget" = "latest" + +# Fedora/RHEL +"dnf:webkit2gtk4.1-devel" = "latest" +"dnf:openssl-devel" = "latest" +"dnf:libappindicator-gtk3-devel" = "latest" +"dnf:librsvg2-devel" = "latest" +"dnf:libxdo-devel" = "latest" +"dnf:curl" = "latest" +"dnf:wget" = "latest" +"dnf:file" = "latest" + +# Arch +"pacman:webkit2gtk-4.1" = "latest" +"pacman:base-devel" = "latest" +"pacman:openssl" = "latest" +"pacman:librsvg" = "latest" +"pacman:xdotool" = "latest" +"pacman:curl" = "latest" +"pacman:wget" = "latest" +"pacman:file" = "latest" + +# Alpine +"apk:webkit2gtk-4.1-dev" = "latest" +"apk:build-base" = "latest" +"apk:openssl" = "latest" +"apk:libayatana-appindicator-dev" = "latest" +"apk:librsvg" = "latest" +"apk:curl" = "latest" +"apk:wget" = "latest" +"apk:file" = "latest" + +# macOS +"brew:curl" = "latest" +"brew:wget" = "latest" + +# iOS +"brew:cocoapods" = "latest" diff --git a/mise.toml b/mise.toml index 9112674a1f..b685db0737 100644 --- a/mise.toml +++ b/mise.toml @@ -1,13 +1,22 @@ +min_version = '2026.7.11' + [env] _.path = ["{{config_root}}/node_modules/.bin"] [settings] -idiomatic_version_file_enable_tools = ["pnpm", "node", "rust"] +idiomatic_version_file_enable_tools = ["pnpm", "node"] +minimum_release_age = "1d" experimental = true [task_config] includes = ["scripts"] +[tasks.setup] +description = "Install dependencies with pnpm" +run = 'pnpm install' +sources = ['package.json', 'pnpm-lock.yaml', 'pnpm-workspace.yaml', 'mise.toml'] +outputs = ['node_modules/.pnpm/lock.yaml'] + [tasks.dev] description = "Start Vite dev server" alias = "d" @@ -25,12 +34,12 @@ alias = "p" run = "vite preview" [tasks.lint] -description = "Run all linting, typechecking, formatting, and dead code checks" +description = "Check lint, types, formatting, and dead code" alias = "l" run = ["tsc", "oxlint .", "oxfmt --check .", "knip"] [tasks."lint:fix"] -description = "Fix lint issues, format, and run typecheck and dead code checks" +description = "Fix lint, formatting, and dead code issues" alias = "lf" run = ["oxlint . --fix", "oxfmt .", "knip --fix"] @@ -51,14 +60,32 @@ description = "Document a change with knope" alias = ["doc", "doc"] run = { task = "knope", args = ["document-change"] } +[tasks."tauri:setup"] +description = "Install Tauri tools and system packages" +run = ["mise install", "mise bootstrap packages apply --yes"] +env = { MISE_ENV = "tauri" } + +[tasks."tauri:setup:macos"] +description = "Install Xcode" +confirm = { message = "Install Xcode? (required for Tauri)", default = "no" } +run = "xcode-select --install 2>/dev/null || true" + +[tasks."tauri:setup:windows"] +description = "Install Visual Studio Build Tools + WebView2 runtime" +confirm = { message = "Install Visual Studio Build Tools and WebView2 runtime? (required for Tauri)", default = "no" } +run = [ + "winget install --id Microsoft.VisualStudio.BuildTools --source winget --force --override '--add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --add Microsoft.VisualStudio.Component.Windows11SDK.26100 --addProductLang En-us'", + "winget install --id Microsoft.EdgeWebView2Runtime --source winget", +] + [tasks."cargo:lint"] -description = "Check Rust formatting and lint with Clippy" +description = "Check Rust formatting and Clippy lints" alias = ["cl", "cargo-lint"] dir = "src-tauri" -run = ["cargo fmt --check", "cargo clippy --all-targets --all-features -- -D warnings"] +run = ["cargo fmt --check", "cargo clippy --locked --all-targets --all-features -- -D warnings"] [tasks."cargo:lint:fix"] -description = "Fix Rust formatting and lint issues" +description = "Fix Rust formatting and Clippy issues" alias = ["clf", "cargo-lint-fix"] dir = "src-tauri" run = ["cargo fmt", "cargo clippy --fix --allow-dirty --all-targets --all-features -- -D warnings"] @@ -67,7 +94,7 @@ run = ["cargo fmt", "cargo clippy --fix --allow-dirty --all-targets --all-featur description = "Run Rust tests" alias = ["ct", "cargo-test"] dir = "src-tauri" -run = "cargo test" +run = "cargo test --locked" raw = true [tasks."actions:pin"] @@ -85,7 +112,6 @@ description = "Update pinned GitHub Actions to latest SHAs" run = "pinact run -u" tools = { "pinact" = "latest" } - [tasks.opentofu] run = "tofu" raw_args = true diff --git a/scripts/icons/replace.js b/scripts/icons/replace.js index bf50c01f73..ba35bec148 100644 --- a/scripts/icons/replace.js +++ b/scripts/icons/replace.js @@ -1,5 +1,5 @@ #!/usr/bin/env node -//MISE description="Replace logo/icon assets in public/ from SVG inputs via ffmpeg" +//MISE description="Replace icon assets from SVG inputs" //MISE tools={ffmpeg="7.1.1"} import { execFileSync } from 'node:child_process'; diff --git a/scripts/icons/symlink.js b/scripts/icons/symlink.js index 43c2066b00..4cd200ea44 100644 --- a/scripts/icons/symlink.js +++ b/scripts/icons/symlink.js @@ -1,5 +1,5 @@ #!/usr/bin/env node -//MISE description="Create symlinks for Tauri icons from the source set" +//MISE description="Create Tauri icon symlinks" /* eslint-disable no-console */ import fs from 'node:fs'; diff --git a/scripts/install-knope.js b/scripts/install-knope.js index ced1f260b6..a3bb04045f 100644 --- a/scripts/install-knope.js +++ b/scripts/install-knope.js @@ -1,6 +1,6 @@ #!/usr/bin/env node //MISE hide=true -//MISE description="Install or update knope to the pinned version" +//MISE description="Install knope" import { spawnSync } from 'node:child_process'; import process from 'node:process'; import { chmodSync, existsSync, mkdirSync, realpathSync, writeFileSync } from 'node:fs'; diff --git a/scripts/tauri.js b/scripts/tauri.js index 6fe6526345..0093341b1c 100644 --- a/scripts/tauri.js +++ b/scripts/tauri.js @@ -1,5 +1,6 @@ #!/usr/bin/env node -//MISE description="Run Tauri CLI with platform-specific feature flags" +//MISE description="Run Tauri CLI" +//MISE depends="tauri:setup" //USAGE arg "" help="Target" default="wry" choices "wry" "cef" "android" "ios" import { run } from '@tauri-apps/cli'; From 575ffdcab99b73a843f73d5bae50dc0ee29fec56 Mon Sep 17 00:00:00 2001 From: hazre Date: Thu, 23 Jul 2026 04:01:01 +0200 Subject: [PATCH 13/19] chore: make tauri.js pass through to tauri cli Signed-off-by: hazre --- scripts/tauri.js | 80 ++++++++++++++++++++++++------------------------ 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/scripts/tauri.js b/scripts/tauri.js index 0093341b1c..686004aaa5 100644 --- a/scripts/tauri.js +++ b/scripts/tauri.js @@ -1,10 +1,19 @@ #!/usr/bin/env node //MISE description="Run Tauri CLI" //MISE depends="tauri:setup" -//USAGE arg "" help="Target" default="wry" choices "wry" "cef" "android" "ios" +//MISE raw_args=true + +/** + * Passes through to the Tauri CLI. When the first argument is a desktop runtime + * (`wry` or `cef`) and the second is `dev` or `build`, injects the appropriate + * Cargo feature flags (`--features ,updater --no-default-features`). + * Everything else is forwarded to `tauri` as-is. + * + * script/tauri cef dev --verbose + * → tauri dev --features cef,updater -- --verbose --no-default-features + */ import { run } from '@tauri-apps/cli'; -import { spawn } from 'node:child_process'; import { fileURLToPath } from 'url'; import { dirname, join } from 'path'; import process from 'node:process'; @@ -17,52 +26,43 @@ const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename); const cmdlineArgs = process.argv.slice(2); +process.chdir(join(__dirname, '..')); -if (cmdlineArgs.length < 2) { - logger.error('Usage: node scripts/tauri [prepended-args...]'); - logger.error(` ${dim('platform:')} wry, cef, android, or ios`); - logger.error(` ${dim('command:')} dev or build`); - process.exit(1); -} - -const [platform, cmd, ...tauriArgs] = cmdlineArgs; - -const MOBILE = ['android', 'ios']; const DESKTOP = ['wry', 'cef']; -if (![...DESKTOP, ...MOBILE].includes(platform)) { - logger.error(`Invalid platform: ${platform}. Must be wry, cef, android, or ios`); - process.exit(1); +function runTauri(args) { + logger.info(`${dim('Running:')} tauri ${args.join(' ')}`); + run(args, 'tauri').catch((error) => { + logger.error(`Failed to run tauri: ${error?.message ?? error}`); + process.exit(1); + }); } -if (!['dev', 'build'].includes(cmd)) { - logger.error(`Invalid command: ${cmd}. Must be 'dev' or 'build'`); - process.exit(1); + +if (cmdlineArgs.length === 0 || !DESKTOP.includes(cmdlineArgs[0])) { + runTauri(cmdlineArgs); + process.exit(0); } -process.chdir(join(__dirname, '..')); +const [platform, cmd, ...tauriArgs] = cmdlineArgs; -if (MOBILE.includes(platform)) { - logger.info(`${dim('Running:')} tauri ${[platform, cmd, ...tauriArgs].join(' ')}`); - const child = spawn('tauri', [platform, cmd, ...tauriArgs], { - stdio: 'inherit', - shell: true, - }); - child.on('exit', (code) => process.exit(code ?? 1)); -} else { - const args = [cmd, '--features', `${platform},updater`, ...tauriArgs]; - if (!tauriArgs.includes('--')) { - args.push('--'); - } - args.push('--no-default-features'); +if (!cmd) { + runTauri(cmdlineArgs); + process.exit(0); +} - if (platform === 'cef' && cmd === 'build' && !tauriArgs.includes('--no-bundle')) { - args.unshift('--no-bundle'); - } +if (!['dev', 'build'].includes(cmd)) { + runTauri([cmd, ...tauriArgs]); + process.exit(0); +} - logger.info(`${dim('Running:')} tauri ${args.join(' ')}`); +const args = [cmd, '--features', `${platform},updater`, ...tauriArgs]; +if (!tauriArgs.includes('--')) { + args.push('--'); +} +args.push('--no-default-features'); - run(args, 'tauri').catch((error) => { - logger.error(`Failed to run tauri: ${error?.message ?? error}`); - process.exit(1); - }); +if (platform === 'cef' && cmd === 'build' && !tauriArgs.includes('--no-bundle')) { + args.splice(1, 0, '--no-bundle'); } + +runTauri(args); From 784171e8fbf0f16ca2268919002beddd7b123ada Mon Sep 17 00:00:00 2001 From: hazre Date: Thu, 23 Jul 2026 04:49:24 +0200 Subject: [PATCH 14/19] docs: add mise docs to README Signed-off-by: hazre --- README.md | 33 ++++++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 9 deletions(-) diff --git a/README.md b/README.md index bc361d5b6e..57e39c72df 100644 --- a/README.md +++ b/README.md @@ -120,23 +120,38 @@ Invalid or unknown keys are ignored. * For example, if you want to deploy on `https://sable.moe/app`, then set `base: '/app'`. ## Local development + > [!TIP] -> We recommend using a version manager as versions change quickly. [fnm](https://github.com/Schniz/fnm) is a great cross-platform option (Windows, macOS, and Linux). [NVM on Windows](https://github.com/coreybutler/nvm-windows#installation--upgrades) and [nvm](https://github.com/nvm-sh/nvm) on Linux/macOS are also good choices. Use the version defined in [`.node-version`](.node-version). +> The easiest way to get started is with [mise](https://mise.jdx.dev/getting-started.html), it manages node, pnpm, rust, and other tooling. -Execute the following commands to start a development server: -```sh -fnm use --corepack-enabled # Activates the Node version and enables corepack -# If you not using fnm, install corepack manually: npm install --global corepack@latest -corepack install # Installs the pnpm version specified in package.json -pnpm i # Installs all dependencies -pnpm run dev # Serve a development version +```bash +mise install # Install all required tools +mise run setup # Install dependencies (pnpm install) +mise run dev # Start the Vite dev server ``` +Run `mise tasks` to list all available tasks (build, test, lint, etc.). + To build the app: ```sh -pnpm run build # Compiles the app into the dist/ directory +mise run build ``` +### Desktop & Mobile (Tauri) + +Sable uses [Tauri](https://v2.tauri.app) for native desktop and mobile builds. + +```bash +mise run tauri:setup # Install Rust toolchain + system packages +mise run tauri:setup:macos # Install Xcode (macOS only) +mise run tauri:setup:windows # Install VS Build Tools + WebView2 (Windows only) +mise run tauri wry dev # Dev server with system webview (WebKit/WebView2) +mise run tauri cef build # Production build with Chromium Embedded Framework +mise run tauri --help # Any other args pass through to the Tauri CLI +``` + +When the first argument is `wry` or `cef` and the second is `dev` or `build`, the wrapper injects `--features ,updater --no-default-features`. Everything else is forwarded to `tauri` as-is. + ## Deployment and infrastructure Deployment workflows and infrastructure details live in [`infra/README.md`](infra/README.md). From 65558c43e71cc9ee98abe8ffc0632876dcd0f4ed Mon Sep 17 00:00:00 2001 From: hazre Date: Thu, 23 Jul 2026 05:05:41 +0200 Subject: [PATCH 15/19] chore(mise): add tauri ios setup task Signed-off-by: hazre --- .github/workflows/tauri-build.yml | 4 ++-- mise.toml | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tauri-build.yml b/.github/workflows/tauri-build.yml index 578a26e009..3c66c30679 100644 --- a/.github/workflows/tauri-build.yml +++ b/.github/workflows/tauri-build.yml @@ -469,9 +469,9 @@ jobs: shell: bash run: node .github/scripts/set-tauri-version.mjs "$VERSION" - - name: Setup Xcode + - name: Set up iOS shell: bash - run: pnpm tauri ios init + run: mise -y run tauri:setup:ios - name: Symlink icons to the ios folder shell: bash diff --git a/mise.toml b/mise.toml index b685db0737..69bba1d977 100644 --- a/mise.toml +++ b/mise.toml @@ -68,7 +68,13 @@ env = { MISE_ENV = "tauri" } [tasks."tauri:setup:macos"] description = "Install Xcode" confirm = { message = "Install Xcode? (required for Tauri)", default = "no" } -run = "xcode-select --install 2>/dev/null || true" +run = "xcode-select --install" + +[tasks."tauri:setup:ios"] +description = "Set up iOS Xcode project" +depends = ["tauri:setup:macos"] +confirm = { message = "Set up iOS Xcode project? (required for Tauri)", default = "no" } +run = [{ task = "tauri", args = ["ios", "init"] }] [tasks."tauri:setup:windows"] description = "Install Visual Studio Build Tools + WebView2 runtime" From 37d537bf0b98b7c80e9f66d7bc4f83eb9be08aa7 Mon Sep 17 00:00:00 2001 From: hazre Date: Thu, 23 Jul 2026 05:17:02 +0200 Subject: [PATCH 16/19] fix: invalid script path in package.json Signed-off-by: hazre --- .github/workflows/tauri-build.yml | 2 +- package.json | 2 +- scripts/icons/symlink.js | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/tauri-build.yml b/.github/workflows/tauri-build.yml index 3c66c30679..81f99cf2a3 100644 --- a/.github/workflows/tauri-build.yml +++ b/.github/workflows/tauri-build.yml @@ -475,7 +475,7 @@ jobs: - name: Symlink icons to the ios folder shell: bash - run: pnpm run setup:tauri-icons --write --force + run: mise run icons:symlink --write --force - name: Build unsigned IPA id: ipa diff --git a/package.json b/package.json index 65ae7fb59a..ab63531984 100644 --- a/package.json +++ b/package.json @@ -34,7 +34,7 @@ "document-change": "knope document-change", "postinstall": "node scripts/install-knope.js", "setup:knope": "node scripts/install-knope.js", - "setup:tauri-icons": "node scripts/symlink-tauri-icons.js", + "setup:tauri-icons": "node scripts/icons/symlink.js", "lint:normalize-imports": "node scripts/normalize-imports.js" }, "dependencies": { diff --git a/scripts/icons/symlink.js b/scripts/icons/symlink.js index 4cd200ea44..1f0c4ae8f2 100644 --- a/scripts/icons/symlink.js +++ b/scripts/icons/symlink.js @@ -1,5 +1,6 @@ #!/usr/bin/env node //MISE description="Create Tauri icon symlinks" +//MISE raw_args=true /* eslint-disable no-console */ import fs from 'node:fs'; From 989a83bb5f44c2d1a74faa0a30d9a9583371c496 Mon Sep 17 00:00:00 2001 From: hazre Date: Thu, 23 Jul 2026 06:15:16 +0200 Subject: [PATCH 17/19] fix: tauri script being unreliable through mise Signed-off-by: hazre --- scripts/tauri.js | 53 +++++++++++++++++++++++++----------------------- 1 file changed, 28 insertions(+), 25 deletions(-) diff --git a/scripts/tauri.js b/scripts/tauri.js index 686004aaa5..3d89ef1119 100644 --- a/scripts/tauri.js +++ b/scripts/tauri.js @@ -28,41 +28,44 @@ const __dirname = dirname(__filename); const cmdlineArgs = process.argv.slice(2); process.chdir(join(__dirname, '..')); -const DESKTOP = ['wry', 'cef']; +const DESKTOP = new Set(['wry', 'cef']); -function runTauri(args) { +async function runTauri(args) { logger.info(`${dim('Running:')} tauri ${args.join(' ')}`); - run(args, 'tauri').catch((error) => { + try { + await run(args, 'tauri'); + } catch (error) { logger.error(`Failed to run tauri: ${error?.message ?? error}`); process.exit(1); - }); + } } -if (cmdlineArgs.length === 0 || !DESKTOP.includes(cmdlineArgs[0])) { - runTauri(cmdlineArgs); - process.exit(0); -} +async function main() { + if (cmdlineArgs.length === 0 || !DESKTOP.has(cmdlineArgs[0])) { + return runTauri(cmdlineArgs); + } -const [platform, cmd, ...tauriArgs] = cmdlineArgs; + const [platform, cmd, ...tauriArgs] = cmdlineArgs; -if (!cmd) { - runTauri(cmdlineArgs); - process.exit(0); -} + if (!cmd) { + return runTauri(cmdlineArgs); + } -if (!['dev', 'build'].includes(cmd)) { - runTauri([cmd, ...tauriArgs]); - process.exit(0); -} + if (!['dev', 'build'].includes(cmd)) { + return runTauri([cmd, ...tauriArgs]); + } -const args = [cmd, '--features', `${platform},updater`, ...tauriArgs]; -if (!tauriArgs.includes('--')) { - args.push('--'); -} -args.push('--no-default-features'); + const args = [cmd, '--features', `${platform},updater`, ...tauriArgs]; + if (!tauriArgs.includes('--')) { + args.push('--'); + } + args.push('--no-default-features'); + + if (platform === 'cef' && cmd === 'build' && !tauriArgs.includes('--no-bundle')) { + args.splice(1, 0, '--no-bundle'); + } -if (platform === 'cef' && cmd === 'build' && !tauriArgs.includes('--no-bundle')) { - args.splice(1, 0, '--no-bundle'); + return runTauri(args); } -runTauri(args); +main(); From 43a1e4cfe0a55b7a32584aab751823b95746c6c0 Mon Sep 17 00:00:00 2001 From: Erwan Leboucher Date: Thu, 23 Jul 2026 11:30:17 +0200 Subject: [PATCH 18/19] perf(android): cache gradle, pin NDK, use lld linker --- .github/workflows/tauri-build.yml | 11 ++++++++--- mise.tauri.toml | 3 +++ mise.toml | 9 +++++++++ src-tauri/build.rs | 5 +++++ 4 files changed, 25 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tauri-build.yml b/.github/workflows/tauri-build.yml index 81f99cf2a3..90c2c3e898 100644 --- a/.github/workflows/tauri-build.yml +++ b/.github/workflows/tauri-build.yml @@ -334,6 +334,7 @@ jobs: SENTRY_PROJECT: ${{ secrets.SENTRY_PROJECT }} CARGO_INCREMENTAL: 0 CARGO_TERM_COLOR: always + MISE_ENV: tauri NODE_OPTIONS: --max-old-space-size=8192 RUST_TARGETS: aarch64-linux-android armv7-linux-androideabi i686-linux-android x86_64-linux-android ANDROID_KEY_BASE64: ${{ secrets.ANDROID_KEY_BASE64 }} @@ -351,6 +352,10 @@ jobs: with: tauri: 'true' + - name: Setup Android SDK + NDK + shell: bash + run: mise run tauri:setup:android + - name: Add Rust targets shell: bash run: rustup target add $RUST_TARGETS @@ -360,13 +365,13 @@ jobs: with: workspaces: src-tauri - - name: Cache Gradle - uses: gradle/actions/setup-gradle@748248ddd2a24f49513d8f472f81c3a07d4d50e1 # v4.4.4 + - name: Setup Gradle + uses: gradle/actions/setup-gradle@3f131e8634966bd73d06cc69884922b02e6faf92 # v6.2.0 - name: Resolve NDK shell: bash run: | - echo "NDK_HOME=$ANDROID_HOME/ndk/$(ls -1 "$ANDROID_HOME/ndk" | sort -V | tail -n1)" >> "$GITHUB_ENV" + echo "NDK_HOME=$ANDROID_HOME/ndk/$ANDROID_NDK_VERSION" >> "$GITHUB_ENV" - name: Stamp release version into tauri.conf.json shell: bash diff --git a/mise.tauri.toml b/mise.tauri.toml index a3f830a106..9362bb0b01 100644 --- a/mise.tauri.toml +++ b/mise.tauri.toml @@ -1,6 +1,9 @@ # Tauri-specific dev tools and system dependencies. # Loaded via `MISE_ENV=tauri` (set by `mise run setup:tauri` or CI). +[env] +ANDROID_NDK_VERSION = "29.0.14206865" + [settings] idiomatic_version_file_enable_tools = ["pnpm", "node", "rust"] experimental = true diff --git a/mise.toml b/mise.toml index 69bba1d977..a951554dba 100644 --- a/mise.toml +++ b/mise.toml @@ -65,6 +65,15 @@ description = "Install Tauri tools and system packages" run = ["mise install", "mise bootstrap packages apply --yes"] env = { MISE_ENV = "tauri" } +[tasks."tauri:setup:android"] +description = "Install Android SDK packages + NDK (no Android Studio needed)" +depends = ["tauri:setup"] +env = { MISE_ENV = "tauri" } +run = [ + "yes | sdkmanager --licenses", + 'sdkmanager "platform-tools" "platforms;android-36" "build-tools;35.0.0" "ndk;{{env.ANDROID_NDK_VERSION}}"', +] + [tasks."tauri:setup:macos"] description = "Install Xcode" confirm = { message = "Install Xcode? (required for Tauri)", default = "no" } diff --git a/src-tauri/build.rs b/src-tauri/build.rs index f51d01ff68..27a87ba03d 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -26,6 +26,11 @@ fn main() { println!("cargo:rustc-link-arg-bins=-Wl,-rpath,/usr/lib/swift"); } + // Use the NDK's lld linker for faster Android linking. + if std::env::var("CARGO_CFG_TARGET_OS").as_deref() == Ok("android") { + println!("cargo:rustc-link-arg=-fuse-ld=lld"); + } + tauri_typegen::BuildSystem::generate_at_build_time() .expect("Failed to generate TypeScript bindings"); From 1f2a43b6563fa9ffc0516e61e44d03b886a95c6f Mon Sep 17 00:00:00 2001 From: 7w1 Date: Fri, 24 Jul 2026 20:02:46 -0500 Subject: [PATCH 19/19] Update pnpm-lock.yaml --- pnpm-lock.yaml | 1050 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1050 insertions(+) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4ac5e2a67f..3f742b21cf 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -260,6 +260,9 @@ importers: '@esbuild-plugins/node-globals-polyfill': specifier: ^0.2.3 version: 0.2.3(esbuild@0.28.1) + '@playwright/test': + specifier: ^1.61.1 + version: 1.61.1 '@rollup/plugin-inject': specifier: ^5.0.5 version: 5.0.5(rollup@4.62.0) @@ -338,6 +341,9 @@ importers: oxlint-tsgolint: specifier: ^0.24.0 version: 0.24.0 + testcontainers: + specifier: ^12.0.4 + version: 12.0.4 typescript: specifier: ^5.9.3 version: 5.9.3 @@ -926,6 +932,9 @@ packages: resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} engines: {node: '>=6.9.0'} + '@balena/dockerignore@1.0.2': + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + '@bcoe/v8-coverage@1.0.2': resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} engines: {node: '>=18'} @@ -1389,6 +1398,20 @@ packages: '@fontsource/space-mono@5.2.9': resolution: {integrity: sha512-b61faFOHEISQ/pD25G+cfGY9o/WW6lRv6hBQQfpWvEJ4y1V+S4gmth95EVyBE2VL3qDYHeVQ8nBzrplzdXTDDg==} + '@grpc/grpc-js@1.14.4': + resolution: {integrity: sha512-k9Dj3DV/itK9D06Y8f190Qgop7/Ui+D0njFV3LHMPwPT75DpXLQohE9Wmz0QElrJnzsjB7KPWiKJbOl7IPDArQ==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.15': + resolution: {integrity: sha512-tMXdRCfYVixjuFK+Hk0Q1s38gV9zDiDJfWL3h1rv4Qc39oILCu1TRTDt7+fGUI8K4G1Fj125Hx/ru3azECWTyQ==} + engines: {node: '>=6'} + hasBin: true + + '@grpc/proto-loader@0.8.1': + resolution: {integrity: sha512-wtF6h+DY6M3YaDBPAmvuuA6jV8Sif9MjtOI5euKFWRgCDl5PeDpPsHR9u2l6St5ceY8AZgoNDww5+HvEsXFsGg==} + engines: {node: '>=6'} + hasBin: true + '@img/colour@1.1.0': resolution: {integrity: sha512-Td76q7j57o/tLVdgS746cYARfSyxk8iEfRxewL9h4OMzYhbW4TAcppl0mT4eyqXddh6L/jwoM75mo7ixa/pCeQ==} engines: {node: '>=18'} @@ -1551,6 +1574,10 @@ packages: '@internationalized/string@3.2.9': resolution: {integrity: sha512-kzP/M/mbQxODlmOt4bIQZ2SBVUWUSqMLXooXixnX7noche8WHaQcA+nwFN1K2KCF/cp+LDUhcJsCicwkvhD1pg==} + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + '@isaacs/cliui@9.0.0': resolution: {integrity: sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==} engines: {node: '>=18'} @@ -1577,9 +1604,15 @@ packages: '@jridgewell/trace-mapping@0.3.9': resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + '@juggle/resize-observer@3.4.0': resolution: {integrity: sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA==} + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + '@matrix-org/matrix-sdk-crypto-wasm@18.3.1': resolution: {integrity: sha512-VRjWhE1UgHnPpJ3b9B5+8z71ZC/HICFngPPFIN6ktzmUBKI5RusPujzbAQUoB3CgZ0yU58L99AfSQS4YTztSWw==} engines: {node: '>= 18'} @@ -2186,6 +2219,15 @@ packages: react: '>= 16.8' react-dom: '>= 16.8' + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@playwright/test@1.61.1': + resolution: {integrity: sha512-8nKv6+0RJSL9FE4jYOEGXnPeM/Hg12qZpmqzZjRh3qM0Y7c3z1mrOTfFLids72RDQYVh9WpLEfR5WdpNX4fkig==} + engines: {node: '>=18'} + hasBin: true + '@polka/url@1.0.0-next.29': resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} @@ -2198,6 +2240,33 @@ packages: '@poppinss/exception@1.2.3': resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==} + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.5': + resolution: {integrity: sha512-zgXFLzW3Ap33e6d0Wlj4MGIm6Ce8O89n/apUaGNB/jx+hw+ruWEp7EwGUshdLKVRCxZW12fp9r40E1mQrf/34g==} + + '@protobufjs/eventemitter@1.1.1': + resolution: {integrity: sha512-vW1GmwMZNnL+gMRaovlh9yZX74kc+TTU3FObkkurpMaRtBfLP3ldjS9KQWlwZgraRE0+dheEEoAxdzcJQ8eXZg==} + + '@protobufjs/fetch@1.1.1': + resolution: {integrity: sha512-GpptLrs57adMSuHi3VNj0mAF8dwh36LMaYF6XyJ6JMWlVsc+t42tm1HSEDmOs3A8fC9yyeisgLhsTVQokOZ0zw==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.2': + resolution: {integrity: sha512-b1UQwcEZ4yCnMCD8DAL1VlbvBJE9/IX4FTIp7BG1xYpf29SLazLSrqUkj4w7Y5y7cCVP6E5tcqqcI0xemPkHug==} + '@react-leaflet/core@2.1.0': resolution: {integrity: sha512-Qk7Pfu8BSarKGqILj4x7bCSZ1pjuAPZ+qmRwH5S7mDS91VSbVVsJSrW4qA+GPrro8t69gFYVMWb1Zc4yFmPiVg==} peerDependencies: @@ -3003,6 +3072,12 @@ packages: '@types/deep-eql@4.0.2': resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} + '@types/docker-modem@3.0.6': + resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} + + '@types/dockerode@4.0.1': + resolution: {integrity: sha512-cmUpB+dPN955PxBEuXE3f6lKO1hHiIGYJA46IVF3BJpNsZGvtBDcRnlrHYHtOH/B6vtDOyl2kZ2ShAu3mgc27Q==} + '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} @@ -3024,6 +3099,9 @@ packages: '@types/leaflet@1.9.21': resolution: {integrity: sha512-TbAd9DaPGSnzp6QvtYngntMZgcRk+igFELwR2N99XZn7RXUdKgsXMR+28bUO0rPsWp8MIu/f47luLIQuSLYv/w==} + '@types/node@18.19.130': + resolution: {integrity: sha512-GRaXQx6jGfL8sKfaIDD6OupbIHBr9jv7Jnaml9tB7l4v068PAOXqfcujMMo5PhbIs6ggR1XODELqahT2R8v0fg==} + '@types/node@24.13.2': resolution: {integrity: sha512-fRa09kZTgu8o71KFcDjUFuc7F+dEbZYZmkI0mg5YBTRs0yMKjYHsq/c0urDKeDb+D5qVgXOdFcuu+DZPKOITwA==} @@ -3044,6 +3122,15 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/ssh2-streams@0.1.13': + resolution: {integrity: sha512-faHyY3brO9oLEA0QlcO8N2wT7R0+1sHWZvQ+y3rMLwdY1ZyS1z0W3t65j9PqT4HmQ6ALzNe7RZlNuCNE0wBSWA==} + + '@types/ssh2@0.5.52': + resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} + + '@types/ssh2@1.15.5': + resolution: {integrity: sha512-N1ASjp/nXH3ovBHddRJpli4ozpk6UdDYIX4RJWFa9L1YKnzdhTlVmiGHm4DZnj/jLbqZpes4aeR30EFGQtvhQQ==} + '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -3129,6 +3216,10 @@ packages: '@vitest/utils@4.1.9': resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==} + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + acorn@8.17.0: resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==} engines: {node: '>=0.4.0'} @@ -3148,14 +3239,34 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} + ansi-regex@6.2.2: + resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + ansi-styles@5.2.0: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} + ansi-styles@6.2.3: + resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} + engines: {node: '>=12'} + anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -3178,6 +3289,9 @@ packages: resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} engines: {node: '>= 0.4'} + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + assertion-error@2.0.1: resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} engines: {node: '>=12'} @@ -3189,6 +3303,9 @@ packages: resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} engines: {node: '>= 0.4'} + async-lock@1.4.1: + resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + async@3.2.6: resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} @@ -3204,6 +3321,14 @@ packages: resolution: {integrity: sha512-zJAaP9zxTcvTHRlejau3ZOY4V7SRpiByf3/dxx2uyKxxor19tpmpV2QRsTKikckwhaPmr2dVpxxMr7jOCYVp5g==} engines: {node: '>=6.0.0'} + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + babel-plugin-polyfill-corejs2@0.4.17: resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} peerDependencies: @@ -3226,6 +3351,43 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + bare-events@2.9.1: + resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.7.4: + resolution: {integrity: sha512-y1kC+ffIx/tPLdTE693uNjHfzTfr+ravR5tvWlMXe25nELbkqV400S71qHDwbkAQ1FVEZobB1NFRzFbCCcyBCQ==} + engines: {bare: '>=1.16.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-path@3.1.1: + resolution: {integrity: sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==} + + bare-stream@2.13.3: + resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.4.6: + resolution: {integrity: sha512-iQxPClE07hETVpbRoX7JXX3v/ZQViCxe/SYCxylRLzdEx1xJAufPptfiOqR8tqiCtmbtMDANKWszzjLu1PMAZQ==} + base-x@5.0.1: resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} @@ -3237,6 +3399,9 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + bidi-js@1.0.3: resolution: {integrity: sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw==} @@ -3247,6 +3412,9 @@ packages: bind-event-listener@3.0.0: resolution: {integrity: sha512-PJvH288AWQhKs2v9zyfYdPzlPqf5bXbGMmhmUIY9x4dAUGIWgomO771oBQNwJnMQSnUIXhKu6sgzpBRXTlvb8Q==} + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + blake3-wasm@2.1.5: resolution: {integrity: sha512-F1+K8EbfOZE49dtoPtmxUQrpXaBIl3ICvasLh+nJta0xkz+9kF/7uet9fLnwKqhDrmj6g+6K3Tw9yQPUg2ka5g==} @@ -3272,12 +3440,27 @@ packages: bs58@6.0.0: resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + 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==} + buildcheck@0.0.7: + resolution: {integrity: sha512-lHblz4ahamxpTmnsk+MNTRWsjYKv965MwOrSJyeD588rR3Jcu7swE+0wN5F+PbL5cjgu/9ObkhfzEPuofEMwLA==} + engines: {node: '>=10.0.0'} + + byline@5.0.0: + resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} + engines: {node: '>=0.10.0'} + cac@7.0.0: resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==} engines: {node: '>=20.19.0'} @@ -3313,12 +3496,19 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chroma-js@3.2.0: resolution: {integrity: sha512-os/OippSlX1RlWWr+QDPcGUZs0uoqr32urfxESG9U93lhUfbnlyckte84Q8P1UQY/qth983AS1JONKmLS4T0nw==} classnames@2.5.1: resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + cloudflared@0.7.1: resolution: {integrity: sha512-jJn1Gu9Tf4qnIu8tfiHZ25Hs8rNcRYSVf8zAd97wvYdOCzftm1CTs1S/RPhijjGi8gUT1p9yzfDi9zYlU/0RwA==} hasBin: true @@ -3327,6 +3517,13 @@ packages: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3338,6 +3535,10 @@ packages: resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} engines: {node: '>=4.0.0'} + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + compute-scroll-into-view@3.1.1: resolution: {integrity: sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw==} @@ -3358,6 +3559,9 @@ packages: core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cosmiconfig@8.3.6: resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} @@ -3367,6 +3571,19 @@ packages: typescript: optional: true + cpu-features@0.0.10: + resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} + engines: {node: '>=10.0.0'} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + create-web-stream@1.1.3: resolution: {integrity: sha512-ocdWcsi6F8/8f0L/Fsbt3UmPSB+7H5hXR0aRr7Wiu7TXC1Z8vwlwxpeO4+gMgJ8g4TqwM5oTnSid43Jxm2ArwA==} engines: {node: '>=18.9.0'} @@ -3465,6 +3682,18 @@ packages: resolution: {integrity: sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==} hasBin: true + docker-compose@1.4.2: + resolution: {integrity: sha512-rPHigTKGaEHpkUmfd69QgaOp+Os5vGJwG/Ry8lcr8W/382AmI+z/D7qoa9BybKIkqNppaIbs8RYeHSevdQjWww==} + engines: {node: '>= 6.0.0'} + + docker-modem@5.0.7: + resolution: {integrity: sha512-XJgGhoR/CLpqshm4d3L7rzH6t8NgDFUIIpztYlLHIApeJjMZKYJMz2zxPsYxnejq5h3ELYSw/RBsi3t5h7gNTA==} + engines: {node: '>= 8.0'} + + dockerode@5.0.1: + resolution: {integrity: sha512-avsq/xk4YPIrn0CgleX5bjT9Y8IT1p9PxrNQ++RBQ2WEyFfHCTDsT9kmyxz+H/axnjAwg8wJWEIuPGOUuNupiA==} + engines: {node: '>= 14.17'} + dom-accessibility-api@0.5.16: resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==} @@ -3501,6 +3730,9 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ejs@3.1.10: resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} engines: {node: '>=0.10.0'} @@ -3509,6 +3741,12 @@ packages: electron-to-chromium@1.5.374: resolution: {integrity: sha512-HCF5i7izveksHSGqa7mhDh6tr3Uz9Dar2RAjwuh69bw3QGPVObjQIgLwQWeO/Rxp9/r0KdboKy9RbpQDl97fjg==} + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + emojibase-data@17.0.0: resolution: {integrity: sha512-Yvgb5AWoHViHV/gq1qr5ZAarcBip+B27/ZLRsUJkbgAEaLlZ/fof9g882LTpmEpyhBNEC0m2SEmItljHsTygjA==} peerDependencies: @@ -3518,6 +3756,9 @@ packages: resolution: {integrity: sha512-bXdpf4HPY3p41zK5swVKZdC/VynsMZ4LoLxdYDE+GucqkFwzcM1GVc4ODfYAlwoKaf2U2oNNUoOO78N96ovpBA==} engines: {node: '>=18.12.0'} + end-of-stream@1.4.5: + resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} + entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -3594,9 +3835,16 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -3608,6 +3856,9 @@ packages: fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -3693,10 +3944,18 @@ packages: react-dom: optional: true + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} + 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} @@ -3720,6 +3979,10 @@ packages: resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} engines: {node: '>=6.9.0'} + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -3727,6 +3990,10 @@ packages: get-own-enumerable-property-symbols@3.0.2: resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -3742,6 +4009,11 @@ packages: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} + glob@10.5.0: + resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==} + deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me + hasBin: true + glob@11.1.0: resolution: {integrity: sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==} engines: {node: 20 || >=22} @@ -3854,6 +4126,9 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} @@ -3912,6 +4187,10 @@ packages: resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} engines: {node: '>= 0.4'} + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + is-generator-function@1.1.2: resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==} engines: {node: '>= 0.4'} @@ -4004,6 +4283,9 @@ packages: resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} engines: {node: '>= 0.4'} + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} @@ -4022,6 +4304,9 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.2.3: resolution: {integrity: sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==} engines: {node: 20 || >=22} @@ -4111,6 +4396,10 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + leaflet@1.9.4: resolution: {integrity: sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==} @@ -4208,6 +4497,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + lodash.debounce@4.0.8: resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} @@ -4221,6 +4513,9 @@ packages: resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} engines: {node: '>= 0.6.0'} + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -4297,6 +4592,14 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mlly@1.8.2: resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==} @@ -4316,6 +4619,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nan@2.28.0: + resolution: {integrity: sha512-fTsDz99OTq2sVePhGdp4qQhggZFtKr64ZNVyVajRKtMOkJxYekplBh577PiJB12v/D3s2E5cGtOI45LWp6rnLQ==} + nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4361,6 +4667,9 @@ packages: resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==} engines: {node: '>=12.20.0'} + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + own-keys@1.0.1: resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} engines: {node: '>= 0.4'} @@ -4443,6 +4752,10 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.2: resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} engines: {node: 18 || 20 || >=22} @@ -4475,6 +4788,16 @@ packages: pkg-types@1.3.1: resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + playwright-core@1.61.1: + resolution: {integrity: sha512-h7Qlt6m4REp25qvIdvbDtVmD4LqVXfpRxhORv9L0jzETM05p4fuPJ3dKyuSXQxDSbXnmS79HAgi9589lGSpLkg==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.61.1: + resolution: {integrity: sha512-DWnY5o3YbLWK4GovuAVwpqL+1VwGNdUGrRr++8j8PtQQzvAVZUIMjKQ90fY689sEJZJBbZVw1rXaOKSTitkzPQ==} + engines: {node: '>=18'} + hasBin: true + possible-typed-array-names@1.1.0: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} @@ -4495,6 +4818,13 @@ packages: resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -4502,9 +4832,23 @@ packages: prop-types@15.8.1: resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + properties-reader@3.0.1: + resolution: {integrity: sha512-WPn+h9RGEExOKdu4bsF4HksG/uzd3cFq3MFtq8PsFeExPse5Ha/VOjQNyHhjboBFwGXGev6muJYTSPAOkROq2g==} + engines: {node: '>=18'} + + protobufjs@7.6.5: + resolution: {integrity: sha512-/FPD0nUc9jH6rfFjji9IBqOz4pcSE3CsT1m7Ep6Mdb0LxSUMj8hgl6GomOvZzpNpAqqGaXA0P3VSrZLFzIhQrw==} + engines: {node: '>=12.0.0'} + proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@3.0.4: + resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -4609,6 +4953,20 @@ packages: resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} engines: {node: '>=0.10.0'} + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + + readable-stream@4.7.0: + resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -4643,6 +5001,10 @@ packages: resolution: {integrity: sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==} hasBin: true + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + require-from-string@2.0.2: resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} engines: {node: '>=0.10.0'} @@ -4662,6 +5024,10 @@ packages: engines: {node: '>= 0.4'} hasBin: true + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + rolldown@1.0.3: resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} engines: {node: ^20.19.0 || >=22.12.0} @@ -4676,6 +5042,12 @@ packages: resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==} engines: {node: '>=0.4'} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + safe-push-apply@1.0.0: resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} engines: {node: '>= 0.4'} @@ -4684,6 +5056,9 @@ packages: resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} engines: {node: '>= 0.4'} + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -4754,6 +5129,9 @@ packages: siginfo@2.0.0: resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + signal-exit@4.1.0: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} @@ -4814,6 +5192,16 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead + split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + + ssh-remote-port-forward@1.0.4: + resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} + + ssh2@1.17.0: + resolution: {integrity: sha512-wPldCk3asibAjQ/kziWQQt1Wh3PgDFpC0XpwclzKcdT1vql6KeYxf5LIt4nlFkUeR8WuphYMKqUA56X4rjbfgQ==} + engines: {node: '>=10.16.0'} + stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -4824,6 +5212,17 @@ packages: resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} engines: {node: '>= 0.4'} + streamx@2.28.0: + resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + string.prototype.matchall@4.0.12: resolution: {integrity: sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==} engines: {node: '>= 0.4'} @@ -4840,10 +5239,24 @@ packages: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + stringify-object@3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.2.0: + resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} + engines: {node: '>=12'} + strip-comments@2.0.1: resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==} engines: {node: '>=10'} @@ -4883,12 +5296,28 @@ packages: tabbable@6.5.0: resolution: {integrity: sha512-wieBHXygIm7OyQOu5hQlkk62/WyCFYGlWg7L6/ZCUZwx0o398Zkn4pVmMyfYhfMG8kGrj/Krt8eIk6UKC6VzwA==} + tar-fs@2.1.5: + resolution: {integrity: sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==} + + tar-fs@3.1.3: + resolution: {integrity: sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==} + tar-mini@0.2.0: resolution: {integrity: sha512-+qfUHz700DWnRutdUsxRRVZ38G1Qr27OetwaMYTdg8hcPxf46U0S1Zf76dQMWRBmusOt2ZCK5kbIaiLkoGO7WQ==} + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.2.0: + resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} + tauri-plugin-android-fs-api@28.4.0: resolution: {integrity: sha512-YOo1P+cRjuaoPbTNZprMhr56ruKO4hIDq7kJOum91NqkN+VWY9F+UPAdjZokhzJSsbkeY0nsb1VDLXb2/h3f3w==} + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + temp-dir@2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} engines: {node: '>=8'} @@ -4902,6 +5331,12 @@ packages: engines: {node: '>=10'} hasBin: true + testcontainers@12.0.4: + resolution: {integrity: sha512-QIR/8xF1+F/26cIM+9B4yyxNTbKJxAv3hygZyhPRgZ8Q2AhlPZjDdpXRuk16V37X4bgJRI3hXFhoEICMBA7Adg==} + + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + tiny-invariant@1.3.1: resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==} @@ -4931,6 +5366,10 @@ packages: resolution: {integrity: sha512-A3BDQBeeukYPzB4QdQ1DtdlUmp4x2OCH8n5UVhEWbyANxNep8GavottKzd1xYKFJKjUgMyPT7EzOfnBO55s8Sg==} hasBin: true + tmp@0.2.7: + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} + engines: {node: '>=14.14'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -4956,6 +5395,9 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + type-fest@0.16.0: resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==} engines: {node: '>=10'} @@ -4999,6 +5441,9 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} + undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@7.18.2: resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} @@ -5051,6 +5496,9 @@ packages: peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + uuid@10.0.0: resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} deprecated: uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028). @@ -5374,6 +5822,17 @@ packages: '@cloudflare/workers-types': optional: true + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + ws@8.21.0: resolution: {integrity: sha512-Vsp28b7DRcimFQvrqu2Wek3z1iYxDCWqHYB8Qsnk/S4RfaCQzPGPyBNuVjJV3cd6UiKtUtp6sNM77gWvzcCH+g==} engines: {node: '>=10.0.0'} @@ -5393,6 +5852,10 @@ packages: xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -5401,6 +5864,14 @@ packages: engines: {node: '>= 14.6'} hasBin: true + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs@17.7.3: + resolution: {integrity: sha512-GZtjxm/J/4TSxuL3FNYjCmLktBTnIw/rVmKSIyKeYAZpmJB2ig9VauCC5xsa82GNKVKDAqpOn3KVzNt0zmrU0g==} + engines: {node: '>=12'} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -5411,6 +5882,10 @@ packages: youch@4.1.0-beta.10: resolution: {integrity: sha512-rLfVLB4FgQneDr0dv1oddCVZmKjcJ6yX6mS4pU82Mq/Dt9a3cLZQ62pDBL4AUO+uVrCvtWz3ZFUL2HFAFJ/BXQ==} + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + zod@4.4.3: resolution: {integrity: sha512-ytENFjIJFl2UwYglde2jchW2Hwm4GJFLDiSXWdTrJQBIN9Fcyp7n4DhxJEiWNAJMV1/BqWfW/kkg71UDcHJyTQ==} @@ -6142,6 +6617,8 @@ snapshots: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 + '@balena/dockerignore@1.0.2': {} + '@bcoe/v8-coverage@1.0.2': {} '@bramus/specificity@2.4.2': @@ -6433,6 +6910,25 @@ snapshots: '@fontsource/space-mono@5.2.9': {} + '@grpc/grpc-js@1.14.4': + dependencies: + '@grpc/proto-loader': 0.8.1 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.15': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.6.5 + yargs: 17.7.3 + + '@grpc/proto-loader@0.8.1': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.6.5 + yargs: 17.7.3 + '@img/colour@1.1.0': {} '@img/sharp-darwin-arm64@0.34.5': @@ -6541,6 +7037,15 @@ snapshots: dependencies: '@swc/helpers': 0.5.23 + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.2.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + '@isaacs/cliui@9.0.0': {} '@jridgewell/gen-mapping@0.3.13': @@ -6572,8 +7077,16 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.5 + '@js-sdsl/ordered-map@4.4.2': {} + '@juggle/resize-observer@3.4.0': {} + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + '@matrix-org/matrix-sdk-crypto-wasm@18.3.1': {} '@napi-rs/canvas-android-arm64@1.0.2': @@ -6913,6 +7426,13 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + '@pkgjs/parseargs@0.11.0': + optional: true + + '@playwright/test@1.61.1': + dependencies: + playwright: 1.61.1 + '@polka/url@1.0.0-next.29': {} '@poppinss/colors@4.1.6': @@ -6927,6 +7447,26 @@ snapshots: '@poppinss/exception@1.2.3': {} + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.5': {} + + '@protobufjs/eventemitter@1.1.1': {} + + '@protobufjs/fetch@1.1.1': + dependencies: + '@protobufjs/aspromise': 1.1.2 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.2': {} + '@react-leaflet/core@2.1.0(leaflet@1.9.4)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: leaflet: 1.9.4 @@ -7576,6 +8116,17 @@ snapshots: '@types/deep-eql@4.0.2': {} + '@types/docker-modem@3.0.6': + dependencies: + '@types/node': 24.13.2 + '@types/ssh2': 1.15.5 + + '@types/dockerode@4.0.1': + dependencies: + '@types/docker-modem': 3.0.6 + '@types/node': 24.13.2 + '@types/ssh2': 1.15.5 + '@types/estree@0.0.39': {} '@types/estree@1.0.9': {} @@ -7592,6 +8143,10 @@ snapshots: dependencies: '@types/geojson': 7946.0.16 + '@types/node@18.19.130': + dependencies: + undici-types: 5.26.5 + '@types/node@24.13.2': dependencies: undici-types: 7.18.2 @@ -7613,6 +8168,19 @@ snapshots: '@types/resolve@1.20.2': {} + '@types/ssh2-streams@0.1.13': + dependencies: + '@types/node': 24.13.2 + + '@types/ssh2@0.5.52': + dependencies: + '@types/node': 24.13.2 + '@types/ssh2-streams': 0.1.13 + + '@types/ssh2@1.15.5': + dependencies: + '@types/node': 18.19.130 + '@types/trusted-types@2.0.7': {} '@use-gesture/core@10.3.1': {} @@ -7789,6 +8357,10 @@ snapshots: convert-source-map: 2.0.0 tinyrainbow: 3.1.0 + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + acorn@8.17.0: {} agent-base@6.0.2: @@ -7808,13 +8380,45 @@ snapshots: ansi-regex@5.0.1: {} + ansi-regex@6.2.2: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + ansi-styles@5.2.0: {} + ansi-styles@6.2.3: {} + anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.2 + archiver-utils@5.0.2: + dependencies: + glob: 10.5.0 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.18.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.6 + buffer-crc32: 1.0.0 + readable-stream: 4.7.0 + readdir-glob: 1.1.3 + tar-stream: 3.2.0 + zip-stream: 6.0.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + argparse@2.0.1: {} aria-hidden@1.2.6: @@ -7842,6 +8446,10 @@ snapshots: get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + assertion-error@2.0.1: {} ast-v8-to-istanbul@1.0.4: @@ -7852,6 +8460,8 @@ snapshots: async-function@1.0.0: {} + async-lock@1.4.1: {} + async@3.2.6: {} at-least-node@1.0.0: {} @@ -7862,6 +8472,8 @@ snapshots: await-to-js@3.0.0: {} + b4a@1.8.1: {} + babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.7): dependencies: '@babel/compat-data': 7.29.7 @@ -7890,12 +8502,45 @@ snapshots: balanced-match@4.0.4: {} + bare-events@2.9.1: {} + + bare-fs@4.7.4: + dependencies: + bare-events: 2.9.1 + bare-path: 3.1.1 + bare-stream: 2.13.3(bare-events@2.9.1) + bare-url: 2.4.6 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-path@3.1.1: {} + + bare-stream@2.13.3(bare-events@2.9.1): + dependencies: + b4a: 1.8.1 + streamx: 2.28.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.4.6: + dependencies: + bare-path: 3.1.1 + base-x@5.0.1: {} base64-js@1.5.1: {} baseline-browser-mapping@2.10.37: {} + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + bidi-js@1.0.3: dependencies: require-from-string: 2.0.2 @@ -7904,6 +8549,12 @@ snapshots: bind-event-listener@3.0.0: {} + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + blake3-wasm@2.1.5: {} blurhash@2.0.5: {} @@ -7930,13 +8581,25 @@ snapshots: dependencies: base-x: 5.0.1 + buffer-crc32@1.0.0: {} + buffer-from@1.1.2: {} + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@6.0.3: dependencies: base64-js: 1.5.1 ieee754: 1.2.1 + buildcheck@0.0.7: + optional: true + + byline@5.0.0: {} + cac@7.0.0: {} call-bind-apply-helpers@1.0.2: @@ -7976,20 +8639,42 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@1.1.4: {} + chroma-js@3.2.0: {} classnames@2.5.1: {} + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + cloudflared@0.7.1: {} clsx@2.1.1: {} + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.4: {} + commander@2.20.3: {} commander@8.3.0: {} common-tags@1.8.2: {} + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.7.0 + compute-scroll-into-view@3.1.1: {} confbox@0.1.8: {} @@ -8004,6 +8689,8 @@ snapshots: dependencies: browserslist: 4.28.2 + core-util-is@1.0.3: {} + cosmiconfig@8.3.6(typescript@5.9.3): dependencies: import-fresh: 3.3.1 @@ -8013,6 +8700,19 @@ snapshots: optionalDependencies: typescript: 5.9.3 + cpu-features@0.0.10: + dependencies: + buildcheck: 0.0.7 + nan: 2.28.0 + optional: true + + crc-32@1.2.2: {} + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.7.0 + create-web-stream@1.1.3: {} cross-fetch@4.0.0: @@ -8099,6 +8799,30 @@ snapshots: direction@1.0.4: {} + docker-compose@1.4.2: + dependencies: + yaml: 2.9.0 + + docker-modem@5.0.7: + dependencies: + debug: 4.4.3 + readable-stream: 3.6.2 + split-ca: 1.0.1 + ssh2: 1.17.0 + transitivePeerDependencies: + - supports-color + + dockerode@5.0.1: + dependencies: + '@balena/dockerignore': 1.0.2 + '@grpc/grpc-js': 1.14.4 + '@grpc/proto-loader': 0.7.15 + docker-modem: 5.0.7 + protobufjs: 7.6.5 + tar-fs: 2.1.5 + transitivePeerDependencies: + - supports-color + dom-accessibility-api@0.5.16: {} dom-accessibility-api@0.6.3: {} @@ -8138,18 +8862,28 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 + eastasianwidth@0.2.0: {} + ejs@3.1.10: dependencies: jake: 10.9.4 electron-to-chromium@1.5.374: {} + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + emojibase-data@17.0.0(emojibase@17.0.0): dependencies: emojibase: 17.0.0 emojibase@17.0.0: {} + end-of-stream@1.4.5: + dependencies: + once: 1.4.0 + entities@4.5.0: {} entities@8.0.0: {} @@ -8324,14 +9058,24 @@ snapshots: '@types/node': 24.13.2 require-like: 0.1.2 + event-target-shim@5.0.1: {} + eventemitter3@5.0.4: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - bare-abort-controller + events@3.3.0: {} expect-type@1.3.0: {} fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-json-stable-stringify@2.1.0: {} fast-uri@3.1.2: {} @@ -8406,6 +9150,8 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + fs-constants@1.0.0: {} + fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 @@ -8413,6 +9159,9 @@ snapshots: jsonfile: 6.2.1 universalify: 2.0.1 + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -8436,6 +9185,8 @@ snapshots: gensync@1.0.0-beta.2: {} + get-caller-file@2.0.5: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -8451,6 +9202,8 @@ snapshots: get-own-enumerable-property-symbols@3.0.2: {} + get-port@5.1.1: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -8470,6 +9223,15 @@ snapshots: dependencies: is-glob: 4.0.3 + glob@10.5.0: + dependencies: + foreground-child: 3.3.1 + jackspeak: 3.4.3 + minimatch: 10.2.5 + minipass: 7.1.3 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + glob@11.1.0: dependencies: foreground-child: 3.3.1 @@ -8590,6 +9352,8 @@ snapshots: indent-string@4.0.0: {} + inherits@2.0.4: {} + inline-style-parser@0.2.7: {} internal-slot@1.1.0: @@ -8654,6 +9418,8 @@ snapshots: dependencies: call-bound: 1.0.4 + is-fullwidth-code-point@3.0.0: {} + is-generator-function@1.1.2: dependencies: call-bound: 1.0.4 @@ -8734,6 +9500,8 @@ snapshots: call-bound: 1.0.4 get-intrinsic: 1.3.0 + isarray@1.0.0: {} + isarray@2.0.5: {} isexe@2.0.0: {} @@ -8751,6 +9519,12 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + jackspeak@4.2.3: dependencies: '@isaacs/cliui': 9.0.0 @@ -8844,6 +9618,10 @@ snapshots: yaml: 2.9.0 zod: 4.4.3 + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + leaflet@1.9.4: {} leven@3.1.0: {} @@ -8910,6 +9688,8 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.camelcase@4.3.0: {} + lodash.debounce@4.0.8: {} lodash.sortby@4.7.0: {} @@ -8918,6 +9698,8 @@ snapshots: loglevel@1.9.2: {} + long@5.3.2: {} + loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -9005,6 +9787,10 @@ snapshots: minipass@7.1.3: {} + mkdirp-classic@0.5.3: {} + + mkdirp@3.0.1: {} + mlly@1.8.2: dependencies: acorn: 8.17.0 @@ -9024,6 +9810,9 @@ snapshots: ms@2.1.3: {} + nan@2.28.0: + optional: true + nanoid@3.3.12: {} no-case@3.0.4: @@ -9056,6 +9845,10 @@ snapshots: obug@2.1.3: {} + once@1.4.0: + dependencies: + wrappy: 1.0.2 + own-keys@1.0.1: dependencies: get-intrinsic: 1.3.0 @@ -9202,6 +9995,11 @@ snapshots: path-parse@1.0.7: {} + path-scurry@1.11.1: + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.3 + path-scurry@2.0.2: dependencies: lru-cache: 11.5.1 @@ -9229,6 +10027,14 @@ snapshots: mlly: 1.8.2 pathe: 2.0.3 + playwright-core@1.61.1: {} + + playwright@1.61.1: + dependencies: + playwright-core: 1.61.1 + optionalDependencies: + fsevents: 2.3.2 + possible-typed-array-names@1.1.0: {} postcss@8.5.15: @@ -9247,6 +10053,10 @@ snapshots: ansi-styles: 5.2.0 react-is: 17.0.2 + process-nextick-args@2.0.1: {} + + process@0.11.10: {} + progress@2.0.3: {} prop-types@15.8.1: @@ -9255,8 +10065,40 @@ snapshots: object-assign: 4.1.1 react-is: 16.13.1 + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + properties-reader@3.0.1: + dependencies: + '@kwsites/file-exists': 1.1.1 + mkdirp: 3.0.1 + transitivePeerDependencies: + - supports-color + + protobufjs@7.6.5: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.5 + '@protobufjs/eventemitter': 1.1.1 + '@protobufjs/fetch': 1.1.1 + '@protobufjs/float': 1.0.2 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.2 + '@types/node': 24.13.2 + long: 5.3.2 + proxy-from-env@1.1.0: {} + pump@3.0.4: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + punycode@2.3.1: {} raf-schd@4.0.3: {} @@ -9360,6 +10202,34 @@ snapshots: dependencies: loose-envify: 1.4.0 + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.2: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.7.0: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 10.2.5 + readdirp@3.6.0: dependencies: picomatch: 2.3.2 @@ -9410,6 +10280,8 @@ snapshots: dependencies: jsesc: 3.1.0 + require-directory@2.1.1: {} + require-from-string@2.0.2: {} require-like@0.1.2: {} @@ -9425,6 +10297,8 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + retry@0.12.0: {} + rolldown@1.0.3: dependencies: '@oxc-project/types': 0.133.0 @@ -9485,6 +10359,10 @@ snapshots: has-symbols: 1.1.0 isarray: 2.0.5 + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + safe-push-apply@1.0.0: dependencies: es-errors: 1.3.0 @@ -9496,6 +10374,8 @@ snapshots: es-errors: 1.3.0 is-regex: 1.2.1 + safer-buffer@2.1.2: {} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -9605,6 +10485,8 @@ snapshots: siginfo@2.0.0: {} + signal-exit@3.0.7: {} + signal-exit@4.1.0: {} sirv@3.0.2: @@ -9668,6 +10550,21 @@ snapshots: sourcemap-codec@1.4.8: {} + split-ca@1.0.1: {} + + ssh-remote-port-forward@1.0.4: + dependencies: + '@types/ssh2': 0.5.52 + ssh2: 1.17.0 + + ssh2@1.17.0: + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.28.0 + stackback@0.0.2: {} std-env@4.1.0: {} @@ -9677,6 +10574,27 @@ snapshots: es-errors: 1.3.0 internal-slot: 1.1.0 + streamx@2.28.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.2.0 + string.prototype.matchall@4.0.12: dependencies: call-bind: 1.0.9 @@ -9717,12 +10635,28 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.2 + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + stringify-object@3.3.0: dependencies: get-own-enumerable-property-symbols: 3.0.2 is-obj: 1.0.1 is-regexp: 1.0.0 + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.2.0: + dependencies: + ansi-regex: 6.2.2 + strip-comments@2.0.1: {} strip-indent@3.0.0: @@ -9753,13 +10687,58 @@ snapshots: tabbable@6.5.0: {} + tar-fs@2.1.5: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.4 + tar-stream: 2.2.0 + + tar-fs@3.1.3: + dependencies: + pump: 3.0.4 + tar-stream: 3.2.0 + optionalDependencies: + bare-fs: 4.7.4 + bare-path: 3.1.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + tar-mini@0.2.0: {} + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + + tar-stream@3.2.0: + dependencies: + b4a: 1.8.1 + bare-fs: 4.7.4 + fast-fifo: 1.3.2 + streamx: 2.28.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + tauri-plugin-android-fs-api@28.4.0: dependencies: '@tauri-apps/api': 2.11.1 create-web-stream: 1.1.3 + teex@1.0.1: + dependencies: + streamx: 2.28.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + temp-dir@2.0.0: {} tempy@0.6.0: @@ -9776,6 +10755,35 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + testcontainers@12.0.4: + dependencies: + '@balena/dockerignore': 1.0.2 + '@types/dockerode': 4.0.1 + archiver: 7.0.1 + async-lock: 1.4.1 + byline: 5.0.0 + debug: 4.4.3 + docker-compose: 1.4.2 + dockerode: 5.0.1 + get-port: 5.1.1 + proper-lockfile: 4.1.2 + properties-reader: 3.0.1 + ssh-remote-port-forward: 1.0.4 + tar-fs: 3.1.3 + tmp: 0.2.7 + undici: 7.28.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + - supports-color + + text-decoder@1.2.7: + dependencies: + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a + tiny-invariant@1.3.1: {} tinybench@2.9.0: {} @@ -9797,6 +10805,8 @@ snapshots: dependencies: tldts-core: 7.4.3 + tmp@0.2.7: {} + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -9819,6 +10829,8 @@ snapshots: tslib@2.8.1: {} + tweetnacl@0.14.5: {} + type-fest@0.16.0: {} typed-array-buffer@1.0.3: @@ -9875,6 +10887,8 @@ snapshots: has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 + undici-types@5.26.5: {} + undici-types@7.18.2: {} undici@7.28.0: {} @@ -9914,6 +10928,8 @@ snapshots: dependencies: react: 18.3.1 + util-deprecate@1.0.2: {} + uuid@10.0.0: {} virtua@0.49.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1): @@ -10289,16 +11305,44 @@ snapshots: - bufferutil - utf-8-validate + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.3 + string-width: 5.1.2 + strip-ansi: 7.2.0 + + wrappy@1.0.2: {} + ws@8.21.0: {} xml-name-validator@5.0.0: {} xmlchars@2.2.0: {} + y18n@5.0.8: {} + yallist@3.1.1: {} yaml@2.9.0: {} + yargs-parser@21.1.1: {} + + yargs@17.7.3: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + yocto-queue@0.1.0: {} youch-core@0.3.3: @@ -10314,4 +11358,10 @@ snapshots: cookie: 1.1.1 youch-core: 0.3.3 + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.7.0 + zod@4.4.3: {}