From d8a4f5ceb7f3690016766774a556f5bc574fe9b0 Mon Sep 17 00:00:00 2001 From: arabcoders Date: Fri, 19 Dec 2025 20:53:27 +0300 Subject: [PATCH 1/4] Refactor: support building watchstate in gitea. Update tests to account for difference in test env --- .github/workflows/build.yml | 10 ++++++---- src/Libs/helpers.php | 2 +- tests/Libs/ConfigFileTest.php | 12 ++++++------ tests/Libs/HelpersTest.php | 6 ++++++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index a3b307fa..8441772b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -141,22 +141,22 @@ jobs: run: pnpm run generate - name: Set up Python - if: github.event_name != 'pull_request' + if: env.REGISTRY == '' && github.event_name != 'pull_request' uses: actions/setup-python@v5 with: python-version: "3.13" - name: Install GitPython - if: github.event_name != 'pull_request' + if: env.REGISTRY == '' && github.event_name != 'pull_request' run: pip install gitpython - name: Generate CHANGELOG.json - if: github.event_name != 'pull_request' + if: env.REGISTRY == '' && github.event_name != 'pull_request' run: | python3 .github/scripts/generate_changelog.py -p . -f ./frontend/exported/CHANGELOG.json - name: Upload frontend build - if: github.event_name != 'pull_request' + if: env.REGISTRY == '' && github.event_name != 'pull_request' uses: actions/upload-artifact@v4 with: name: frontend-build @@ -180,6 +180,7 @@ jobs: fetch-depth: 0 - name: Download frontend build + if: env.REGISTRY == '' uses: actions/download-artifact@v4 with: name: frontend-build @@ -277,6 +278,7 @@ jobs: fetch-depth: 0 - name: Download frontend build + if: env.REGISTRY == '' uses: actions/download-artifact@v4 with: name: frontend-build diff --git a/src/Libs/helpers.php b/src/Libs/helpers.php index df8eaad3..010ee204 100644 --- a/src/Libs/helpers.php +++ b/src/Libs/helpers.php @@ -1194,7 +1194,7 @@ function inContainer(): bool return true; } - if (true === @file_exists('/.dockerenv') || true === @file_exists('/run/.containerenv')) { + if (!env('ONLY_ENV') && true === (@file_exists('/.dockerenv') || @file_exists('/run/.containerenv'))) { return true; } diff --git a/tests/Libs/ConfigFileTest.php b/tests/Libs/ConfigFileTest.php index f44b3450..240677a2 100644 --- a/tests/Libs/ConfigFileTest.php +++ b/tests/Libs/ConfigFileTest.php @@ -44,8 +44,8 @@ public function test_constructor() { $this->checkException( closure: fn() => new ConfigFile( - 'nonexistent.json', - 'json', + file: 'nonexistent.json', + type: 'json', autoSave: false, autoCreate: false, autoBackup: false @@ -57,8 +57,8 @@ public function test_constructor() $this->checkException( closure: fn() => new ConfigFile( - 'nonexistent.json', - 'php', + file: 'nonexistent.json', + type: 'php', autoSave: false, autoCreate: false, autoBackup: false @@ -70,8 +70,8 @@ public function test_constructor() $this->checkException( closure: fn() => new ConfigFile( - '/root/test.json', - 'json', + file: '/sys/' . uniqid('testfile_', true) . '/test.json', + type: 'json', autoSave: false, autoCreate: true, autoBackup: false diff --git a/tests/Libs/HelpersTest.php b/tests/Libs/HelpersTest.php index 9941e778..1ecbbb35 100644 --- a/tests/Libs/HelpersTest.php +++ b/tests/Libs/HelpersTest.php @@ -37,6 +37,7 @@ class HelpersTest extends TestCase protected function setUp(): void { + $_ENV['ONLY_ENV'] = false; parent::setUp(); $this->cache = new class implements CacheInterface { public array $cache = []; @@ -972,6 +973,9 @@ public function test_getClientIp_SERVER(): void public function test_inContainer() { + $_ENV['ONLY_ENV'] = true; + $_ENV['IN_CONTAINER'] = false; + $this->assertFalse(inContainer(), 'When not in container, false is returned.'); $_ENV['IN_CONTAINER'] = true; @@ -1385,6 +1389,7 @@ public function test_getEnvSpec() public function test_isTaskWorkerRunning() { + $_ENV['ONLY_ENV'] = true; $_ENV['IN_CONTAINER'] = false; $d = isSchedulerRunning(); $this->assertTrue($d['status'], 'When not in container, and $ignoreContainer is false, it should return true.'); @@ -1666,6 +1671,7 @@ public function test_lw() public function test_commandContext() { + $_ENV['ONLY_ENV'] = true; $_ENV['IN_CONTAINER'] = true; $this->assertSame( 'docker exec -ti watchstate console', From 8ff660ca7b7a1ab7d63ed8d574e1faac7c01a187 Mon Sep 17 00:00:00 2001 From: arabcoders Date: Wed, 24 Dec 2025 17:17:46 +0300 Subject: [PATCH 2/4] Fix: issue related to scoping issue with variable naming --- mago.toml | 49 ++++++++++++++++ src/Listeners/ProcessProgressEvent.php | 78 +++++++------------------- 2 files changed, 70 insertions(+), 57 deletions(-) create mode 100644 mago.toml diff --git a/mago.toml b/mago.toml new file mode 100644 index 00000000..bec4cb48 --- /dev/null +++ b/mago.toml @@ -0,0 +1,49 @@ +php-version = "8.4.0" + +[source] +workspace = "." +paths = ["src", "tests"] +includes = ["vendor"] +excludes = [] + +[formatter] +print-width = 120 +tab-width = 4 +use-tabs = false + +[linter] +integrations = ["symfony", "phpunit"] + +[linter.rules] +ambiguous-function-call = { enabled = false } +literal-named-argument = { enabled = false } +halstead = { enabled = false } +assertion-style = { enabled = false } +no-empty = { enabled = false } +kan-defect = { enabled = false } +cyclomatic-complexity = { enabled = false } +prefer-static-closure = { enabled = false } +too-many-methods = { enabled = false } +no-error-control-operator = { enabled = false } +no-boolean-flag-parameter = { enabled = false } +no-else-clause = { enabled = false } +assert-description = { enabled = false } +no-ini-set = { enabled = false } +no-multi-assignments = { enabled = false } +excessive-parameter-list = { enabled = false } +function-name = { camel = true, either = true } +no-literal-password = { enabled = false } +class-name = { enabled = false } + +[analyzer] +find-unused-definitions = true +find-unused-expressions = false +analyze-dead-code = false +memoize-properties = true +allow-possibly-undefined-array-keys = true +check-throws = false +perform-heuristic-checks = true +strict-list-index-checks = false +no-boolean-literal-comparison = false +check-missing-type-hints = false +register-super-globals = true diff --git a/src/Listeners/ProcessProgressEvent.php b/src/Listeners/ProcessProgressEvent.php index b612ab48..2700159f 100644 --- a/src/Listeners/ProcessProgressEvent.php +++ b/src/Listeners/ProcessProgressEvent.php @@ -43,32 +43,32 @@ public function __construct( ini_set('memory_limit', '-1'); } - public function __invoke(DataEvent $e): DataEvent + public function __invoke(DataEvent $event): DataEvent { - $writer = function (Level $level, string $message, array $context = []) use ($e) { - $e->addLog($level->getName() . ': ' . r($message, $context)); + $writer = function (Level $level, string $message, array $context = []) use ($event) { + $event->addLog($level->getName() . ': ' . r($message, $context)); $this->logger->log($level, $message, $context); }; - $e->stopPropagation(); + $event->stopPropagation(); - $user = ag($e->getOptions(), Options::CONTEXT_USER, 'main'); + $user = ag($event->getOptions(), Options::CONTEXT_USER, 'main'); try { $userContext = getUserContext(user: $user, mapper: $this->mapper, logger: $this->logger); } catch (RuntimeException $ex) { $writer(Level::Error, $ex->getMessage()); - return $e; + return $event; } - $options = $e->getOptions(); + $options = $event->getOptions(); - if (null === ($item = $userContext->db->get(Container::get(iState::class)::fromArray($e->getData())))) { + if (null === ($item = $userContext->db->get(Container::get(iState::class)::fromArray($event->getData())))) { $writer(Level::Error, "'{user}' item '{id}' is not referenced locally yet.", [ 'user' => $userContext->name, - 'id' => ag($e->getData(), 'id', '?'), + 'id' => ag($event->getData(), 'id', '?'), ]); - return $e; + return $event; } if ($item->isWatched()) { @@ -90,7 +90,7 @@ public function __invoke(DataEvent $e): DataEvent ]) : 'watch progress sync for played items is disabled.', ] ); - return $e; + return $event; } } @@ -100,7 +100,7 @@ public function __invoke(DataEvent $e): DataEvent 'title' => $item->title, 'user' => $userContext->name, ]); - return $e; + return $event; } $list = []; @@ -146,7 +146,7 @@ public function __invoke(DataEvent $e): DataEvent if (empty($list)) { $writer(Level::Warning, 'There are no backends to send the events to.'); - return $e; + return $event; } foreach ($list as $name => &$backend) { @@ -170,29 +170,17 @@ public function __invoke(DataEvent $e): DataEvent UserContext::class => $userContext, ]); $backend['class']->progress(entities: [$item->id => $item], queue: $this->queue); - } catch (UnexpectedVersionException|NotImplementedException $e) { + } catch (UnexpectedVersionException|NotImplementedException $ex) { $writer( Level::Notice, "This feature is not available for '{user}@{backend}'. '{error.message}' at '{error.file}:{error.line}'.", [ 'user' => $userContext->name, 'backend' => $name, - 'error' => [ - 'kind' => $e::class, - 'line' => $e->getLine(), - 'message' => $e->getMessage(), - 'file' => after($e->getFile(), ROOT_PATH), - ], - 'exception' => [ - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'kind' => get_class($e), - 'message' => $e->getMessage(), - 'trace' => $e->getTrace(), - ], + ...exception_log($ex), ] ); - } catch (Throwable $e) { + } catch (Throwable $ex) { $writer( Level::Error, "Exception '{error.kind}' was thrown unhandled during '{user}@{backend}' request to sync '#{id}: {title}' progress. '{error.message}' at '{error.file}:{error.line}'.", @@ -201,19 +189,7 @@ public function __invoke(DataEvent $e): DataEvent 'backend' => $name, 'title' => $item->getName(), 'user' => $userContext->name, - 'error' => [ - 'kind' => $e::class, - 'line' => $e->getLine(), - 'message' => $e->getMessage(), - 'file' => after($e->getFile(), ROOT_PATH), - ], - 'exception' => [ - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'kind' => $e::class, - 'message' => $e->getMessage(), - 'trace' => $e->getTrace(), - ], + ...exception_log($ex), ] ); } @@ -223,7 +199,7 @@ public function __invoke(DataEvent $e): DataEvent if (count($this->queue) < 1) { $writer(Level::Notice, "Backend clients didn't queue items to be updated."); - return $e; + return $event; } $progress = formatDuration($item->getPlayProgress()); @@ -275,31 +251,19 @@ public function __invoke(DataEvent $e): DataEvent 'status_code' => $response->getStatusCode(), ] ); - } catch (Throwable $e) { + } catch (Throwable $ex) { $writer( level: Level::Error, message: "Exception '{error.kind}' was thrown unhandled during '{user}@{backend}' request to change watch progress of {item.type} '#{id}: {item.title}'. '{error.message}' at '{error.file}:{error.line}'.", context: [ 'id' => $item->id, - 'error' => [ - 'kind' => $e::class, - 'line' => $e->getLine(), - 'message' => $e->getMessage(), - 'file' => after($e->getFile(), ROOT_PATH), - ], - 'exception' => [ - 'file' => $e->getFile(), - 'line' => $e->getLine(), - 'kind' => get_class($e), - 'message' => $e->getMessage(), - 'trace' => $e->getTrace(), - ], + ...exception_log($ex), ...$context, ] ); } } - return $e; + return $event; } } From c2000e798a0853db6943f5c049bc36c1d01d8adb Mon Sep 17 00:00:00 2001 From: arabcoders Date: Sat, 27 Dec 2025 00:00:35 +0300 Subject: [PATCH 3/4] Feat: Use proper shell parsing for console commands --- src/API/System/Command.php | 18 +- src/Libs/Shlex.php | 307 +++++++++++++++++++++++++++ tests/Libs/ShlexTest.php | 424 +++++++++++++++++++++++++++++++++++++ 3 files changed, 746 insertions(+), 3 deletions(-) create mode 100644 src/Libs/Shlex.php create mode 100644 tests/Libs/ShlexTest.php diff --git a/src/API/System/Command.php b/src/API/System/Command.php index e7137887..8f5f4c40 100644 --- a/src/API/System/Command.php +++ b/src/API/System/Command.php @@ -10,6 +10,7 @@ use App\Libs\DataUtil; use App\Libs\Enums\Http\Status; use App\Libs\Extends\Date; +use App\Libs\Shlex; use App\Libs\StreamedBody; use DateInterval; use Psr\Http\Message\ResponseInterface as iResponse; @@ -98,12 +99,22 @@ public function stream(string $token): iResponse $cwd = $data->get('cwd', Config::get('path', fn() => getcwd())); try { - $userCommand = "{$path}/bin/console -n {$command}"; if (true === (bool)Config::get('console.enable.all') && str_starts_with($command, '$')) { $userCommand = trim(after($command, '$')); + $cmd = ['sh', '-c', $userCommand]; + } else { + try { + $cmd = Shlex::split("{$path}/bin/console -n " . trim(after($command, 'console'))); + } catch (\InvalidArgumentException $e) { + $this->write('error', "Failed to parse command: {$e->getMessage()}"); + $this->write('exit_code', '1'); + $this->write('close', (string)makeDate()); + return; + } } - $process = Process::fromShellCommandline( - command: $userCommand, + + $process = new Process( + command: $cmd, cwd: $cwd, env: array_replace_recursive([ 'LANG' => 'en_US.UTF-8', @@ -115,6 +126,7 @@ public function stream(string $token): iResponse timeout: $data->get('timeout', 7200), ); + $this->write('cmd', (string)json_encode($cmd)); $this->write('cwd', (string)$cwd); $process->setPty(true); diff --git a/src/Libs/Shlex.php b/src/Libs/Shlex.php new file mode 100644 index 00000000..093a82e3 --- /dev/null +++ b/src/Libs/Shlex.php @@ -0,0 +1,307 @@ +`'; + + private readonly string $input; + private int $pos = 0; + private readonly bool $posix; + private readonly string $wordchars; + private readonly string $whitespace; + private readonly string $quotes; + private readonly string $escape; + private readonly string $escapedquotes; + private string|null $state = ' '; + private string $token = ''; + + /** + * Initialize the lexical analyzer. + * + * @param string $input String to parse + * @param bool $posix Enable POSIX mode (proper quote/escape handling) + */ + public function __construct(string $input, bool $posix = true) + { + $this->input = $input; + $this->posix = $posix; + $this->whitespace = self::DEFAULT_WHITESPACE; + $this->quotes = self::DEFAULT_QUOTES; + $this->escape = self::DEFAULT_ESCAPE; + $this->escapedquotes = '"'; + $this->wordchars = self::WORDCHARS_BASE . self::WORDCHARS_EXTRA . ($posix ? self::WORDCHARS_UNICODE : ''); + } + + /** + * Get the next character from input. + * + * @return string The character or empty string at EOF + */ + private function readChar(): string + { + if ($this->pos >= strlen($this->input)) { + return ''; + } + return $this->input[$this->pos++]; + } + + /** + * Get the next token from the input. + * + * @return string|null The next token or null at EOF + * @throws InvalidArgumentException On unclosed quotes or incomplete escape sequences + */ + public function nextToken(): string|null + { + $quoted = false; + $escapedstate = ' '; + + while (true) { + $nextchar = $this->readChar(); + + if (null === $this->state) { + $this->token = ''; + break; + } + + if (' ' === $this->state) { + if ('' === $nextchar) { + $this->state = null; + break; + } + + if ($this->inCharset($nextchar, $this->whitespace)) { + if ('' !== $this->token || ($this->posix && $quoted)) { + break; + } + continue; + } + + if ($this->posix && $this->inCharset($nextchar, $this->escape)) { + $escapedstate = 'a'; + $this->state = $nextchar; + continue; + } + + if ($this->inCharset($nextchar, $this->wordchars)) { + $this->token = $nextchar; + $this->state = 'a'; + continue; + } + + if ($this->inCharset($nextchar, $this->quotes)) { + if (!$this->posix) { + $this->token = $nextchar; + } + $this->state = $nextchar; + continue; + } + + $this->token = $nextchar; + $this->state = 'a'; + continue; + } + + if ($this->inCharset($this->state, $this->quotes)) { + $quoted = true; + if ('' === $nextchar) { + throw new InvalidArgumentException('No closing quotation'); + } + + if ($nextchar === $this->state) { + if (!$this->posix) { + $this->token .= $nextchar; + $this->state = ' '; + break; + } + $this->state = 'a'; + continue; + } + + if ( + $this->posix && + $this->inCharset($nextchar, $this->escape) && + $this->inCharset($this->state, $this->escapedquotes) + ) { + $escapedstate = $this->state; + $this->state = $nextchar; + continue; + } + + $this->token .= $nextchar; + continue; + } + + if ($this->inCharset($this->state, $this->escape)) { + if ('' === $nextchar) { + throw new InvalidArgumentException('No closing quotation'); + } + + if ( + $this->inCharset($escapedstate, $this->quotes) && + $nextchar !== $this->state && + $nextchar !== $escapedstate + ) { + $this->token .= $this->state; + } + + $this->token .= $nextchar; + $this->state = $escapedstate; + continue; + } + + if ('a' === $this->state) { + if ('' === $nextchar) { + $this->state = null; + break; + } + + if ($this->inCharset($nextchar, $this->whitespace)) { + $this->state = ' '; + if ('' !== $this->token || ($this->posix && $quoted)) { + break; + } + continue; + } + + if ($this->posix && $this->inCharset($nextchar, $this->quotes)) { + $this->state = $nextchar; + continue; + } + + if ($this->posix && $this->inCharset($nextchar, $this->escape)) { + $escapedstate = 'a'; + $this->state = $nextchar; + continue; + } + + if ($this->inCharset($nextchar, $this->wordchars) || $this->inCharset($nextchar, $this->quotes)) { + $this->token .= $nextchar; + continue; + } + + // Non-word character, push back and end token + $this->pos--; + $this->state = ' '; + if ('' !== $this->token || ($this->posix && $quoted)) { + break; + } + // Will pick up the character on next iteration + $this->pos++; + $this->token = $nextchar; + $this->state = 'a'; + continue; + } + } + + $result = $this->token; + $this->token = ''; + + if ($this->posix && !$quoted && '' === $result) { + return null; + } + + return $result; + } + + /** + * Check if a character exists in a character set. + * + * @param string $ch The character to check + * @param string $set The character set to search in + * @return bool True if character is in set, false otherwise + */ + private function inCharset(string $ch, string $set): bool + { + if ('' === $ch) { + return false; + } + return str_contains($set, $ch); + } + + /** + * Split the string using shell-like syntax. + * + * This is the main entry point for secure command parsing. + * + * @param string $s The string to split + * @param bool $posix Whether to use POSIX mode (default: true) + * @return array Array of parsed tokens + * @throws InvalidArgumentException On unclosed quotes or incomplete escape sequences + */ + public static function split(string $s, bool $posix = true): array + { + $lex = new self($s, $posix); + $out = []; + + while (true) { + $tok = $lex->nextToken(); + if (null === $tok) { + break; + } + $out[] = $tok; + } + + return $out; + } + + /** + * Join an array of strings into a shell-escaped command line. + * + * @param array $split_command Array of command arguments + * @return string The joined and properly escaped command line + */ + public static function join(array $split_command): string + { + return implode(' ', array_map(self::quote(...), $split_command)); + } + + /** + * Return a shell-escaped version of the string (POSIX-ish). + * + * Safe characters (alphanumeric, underscore, etc.) are returned as-is. + * Other strings are single-quoted with proper handling of embedded quotes. + * + * @param string $s The string to quote + * @return string The shell-escaped string + */ + public static function quote(string $s): string + { + if ('' === $s) { + return "''"; + } + + // If ASCII and only safe chars: no quoting needed + // Safe chars: %+,-./0-9:=@A-Z_a-z + if (1 === preg_match('~^[%+\-,./0-9:=@A-Z_a-z]+$~', $s)) { + return $s; + } + + // Single-quote strategy: ' becomes '"'"' + return "'" . str_replace("'", "'\"'\"'", $s) . "'"; + } +} + diff --git a/tests/Libs/ShlexTest.php b/tests/Libs/ShlexTest.php new file mode 100644 index 00000000..148c1ad2 --- /dev/null +++ b/tests/Libs/ShlexTest.php @@ -0,0 +1,424 @@ +assertSame(['hello', 'world'], $result); + } + + public function test_empty_string(): void + { + $result = Shlex::split(''); + $this->assertSame([], $result); + } + + public function test_single_word(): void + { + $result = Shlex::split('hello'); + $this->assertSame(['hello'], $result); + } + + public function test_multiple_spaces(): void + { + $result = Shlex::split('hello world foo'); + $this->assertSame(['hello', 'world', 'foo'], $result); + } + + public function test_tabs_and_spaces(): void + { + $result = Shlex::split("hello\tworld \t foo"); + $this->assertSame(['hello', 'world', 'foo'], $result); + } + + // ==================== Quote Handling Tests ==================== + + public function test_single_quotes(): void + { + $result = Shlex::split("'hello world'"); + $this->assertSame(['hello world'], $result); + } + + public function test_double_quotes(): void + { + $result = Shlex::split('"hello world"'); + $this->assertSame(['hello world'], $result); + } + + public function test_mixed_quotes(): void + { + $result = Shlex::split('hello "world foo" bar'); + $this->assertSame(['hello', 'world foo', 'bar'], $result); + } + + public function test_nested_quotes_single_in_double(): void + { + $result = Shlex::split('"hello \'world\' foo"'); + $this->assertSame(["hello 'world' foo"], $result); + } + + public function test_nested_quotes_double_in_single(): void + { + $result = Shlex::split('\'hello "world" foo\''); + $this->assertSame(['hello "world" foo'], $result); + } + + public function test_empty_quotes(): void + { + $result = Shlex::split('hello "" world'); + $this->assertSame(['hello', '', 'world'], $result); + } + + public function test_adjacent_quotes(): void + { + $result = Shlex::split('"hello""world"'); + $this->assertSame(['helloworld'], $result); + } + + // ==================== Escape Sequence Tests ==================== + + public function test_backslash_escape(): void + { + $result = Shlex::split('hello\\ world'); + $this->assertSame(['hello world'], $result); + } + + public function test_escaped_quote_in_double_quotes(): void + { + $result = Shlex::split('"hello \\"world\\" foo"'); + $this->assertSame(['hello "world" foo'], $result); + } + + public function test_escaped_backslash(): void + { + $result = Shlex::split('hello\\\\ world'); + $this->assertSame(['hello\\', 'world'], $result); + } + + public function test_escape_special_chars(): void + { + $result = Shlex::split('hello\\;world\\|test'); + $this->assertSame(['hello;world|test'], $result); + } + + // ==================== Command Injection Attack Tests ==================== + + public function test_injection_semicolon(): void + { + // Attacker tries: state:export --backend=test; rm -rf ./var + $result = Shlex::split('state:export --backend=test; rm -rf ./var'); + $this->assertSame(['state:export', '--backend=test;', 'rm', '-rf', './var'], $result); + // Each part is separate token - semicolon attached to backend param + } + + public function test_injection_pipe(): void + { + // Attacker tries: state:export --backend=test | cat /etc/passwd + $result = Shlex::split('state:export --backend=test | cat /etc/passwd'); + $this->assertSame(['state:export', '--backend=test', '|', 'cat', '/etc/passwd'], $result); + // Pipe is separate token, won't be interpreted by Process array constructor + } + + public function test_injection_ampersand(): void + { + // Attacker tries: state:export --backend=test && evil-command + $result = Shlex::split('state:export --backend=test && evil-command'); + $this->assertSame(['state:export', '--backend=test', '&&', 'evil-command'], $result); + // && is separate token + } + + public function test_injection_backticks(): void + { + // Attacker tries: state:export --backend=`whoami` + $result = Shlex::split('state:export --backend=`whoami`'); + $this->assertSame(['state:export', '--backend=`whoami`'], $result); + // Backticks treated as regular chars, not command substitution + } + + public function test_injection_dollar_paren(): void + { + // Attacker tries: state:export --backend=$(evil-command) + $result = Shlex::split('state:export --backend=$(evil-command)'); + $this->assertSame(['state:export', '--backend=$(evil-command)'], $result); + // $() treated as regular chars + } + + public function test_injection_redirect(): void + { + // Attacker tries: state:export > /tmp/output + $result = Shlex::split('state:export > /tmp/output'); + $this->assertSame(['state:export', '>', '/tmp/output'], $result); + // Redirect is separate token + } + + public function test_injection_newline(): void + { + // Attacker tries to inject newline command + $result = Shlex::split("state:export\nrm -rf ./var"); + $this->assertSame(['state:export', 'rm', '-rf', './var'], $result); + // Newline is whitespace, splits tokens + } + + public function test_injection_null_byte(): void + { + // Null byte injection attempt + $result = Shlex::split("state:export\0--malicious"); + // Null bytes should be handled gracefully + $this->assertIsArray($result); + } + + // ==================== Complex Real-World Command Tests ==================== + + public function test_console_command_with_options(): void + { + $result = Shlex::split('state:export --backend=plex --dry-run --force'); + $this->assertSame(['state:export', '--backend=plex', '--dry-run', '--force'], $result); + } + + public function test_console_command_with_quoted_value(): void + { + $result = Shlex::split('state:export --backend="my backend" --option=value'); + $this->assertSame(['state:export', '--backend=my backend', '--option=value'], $result); + } + + public function test_console_command_with_json(): void + { + $result = Shlex::split('state:export --data=\'{"key":"value"}\''); + $this->assertSame(['state:export', '--data={"key":"value"}'], $result); + } + + public function test_console_command_with_paths(): void + { + $result = Shlex::split('state:import --file=/tmp/backup.json --output=/var/log/result.log'); + $this->assertSame(['state:import', '--file=/tmp/backup.json', '--output=/var/log/result.log'], $result); + } + + public function test_console_command_with_wildcards(): void + { + $result = Shlex::split('state:export --match="*.mkv" --exclude="*.nfo"'); + $this->assertSame(['state:export', '--match=*.mkv', '--exclude=*.nfo'], $result); + } + + public function test_console_command_with_special_chars_quoted(): void + { + $result = Shlex::split('state:export --title="Movie (2024) - Part 1 & 2"'); + $this->assertSame(['state:export', '--title=Movie (2024) - Part 1 & 2'], $result); + } + + // ==================== Edge Cases and Error Handling ==================== + + public function test_unclosed_single_quote_throws(): void + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('No closing quotation'); + Shlex::split("hello 'world"); + } + + public function test_unclosed_double_quote_throws(): void + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('No closing quotation'); + Shlex::split('hello "world'); + } + + public function test_trailing_backslash_throws(): void + { + $this->expectException(\InvalidArgumentException::class); + $this->expectExceptionMessage('No closing quotation'); + Shlex::split('hello world\\'); + } + + public function test_unicode_characters(): void + { + $result = Shlex::split('hello wörld café'); + $this->assertSame(['hello', 'wörld', 'café'], $result); + } + + public function test_emoji_in_string(): void + { + $result = Shlex::split('hello 🌍 world 🎉'); + $this->assertSame(['hello', '🌍', 'world', '🎉'], $result); + } + + public function test_very_long_string(): void + { + $longString = str_repeat('a', 10000); + $result = Shlex::split($longString); + $this->assertSame([$longString], $result); + } + + public function test_many_arguments(): void + { + $args = array_map(fn($i) => "arg{$i}", range(1, 100)); + $input = implode(' ', $args); + $result = Shlex::split($input); + $this->assertSame($args, $result); + } + + + // ==================== Shlex Quote/Join Tests ==================== + + public function test_shlex_quote_simple(): void + { + $result = Shlex::quote('hello'); + $this->assertSame('hello', $result); + } + + public function test_shlex_quote_with_space(): void + { + $result = Shlex::quote('hello world'); + $this->assertSame("'hello world'", $result); + } + + public function test_shlex_quote_with_single_quote(): void + { + $result = Shlex::quote("hello'world"); + $this->assertSame("'hello'\"'\"'world'", $result); + } + + public function test_shlex_quote_empty(): void + { + $result = Shlex::quote(''); + $this->assertSame("''", $result); + } + + public function test_shlex_quote_special_chars(): void + { + $result = Shlex::quote('hello;world|test'); + $this->assertSame("'hello;world|test'", $result); + } + + public function test_shlex_join(): void + { + $result = Shlex::join(['hello', 'world', 'foo bar']); + $this->assertSame("hello world 'foo bar'", $result); + } + + public function test_shlex_join_with_special_chars(): void + { + $result = Shlex::join(['cmd', '--option=value', 'arg with spaces', 'test;injection']); + $this->assertSame("cmd --option=value 'arg with spaces' 'test;injection'", $result); + } + + // ==================== Round-Trip Tests ==================== + + public function test_roundtrip_simple(): void + { + $original = ['hello', 'world', 'test']; + $joined = Shlex::join($original); + $split = Shlex::split($joined); + $this->assertSame($original, $split); + } + + public function test_roundtrip_with_quotes(): void + { + $original = ['hello', 'world test', 'foo']; + $joined = Shlex::join($original); + $split = Shlex::split($joined); + $this->assertSame($original, $split); + } + + public function test_roundtrip_with_special_chars(): void + { + $original = ['cmd', 'arg;test', 'foo|bar', 'test&&evil']; + $joined = Shlex::join($original); + $split = Shlex::split($joined); + $this->assertSame($original, $split); + } + + // ==================== Security-Focused Integration Tests ==================== + + /** + * Test that even with malicious input, the parsing is safe and predictable. + */ + public function test_security_full_injection_attempt(): void + { + // Test various injection attempts that are properly quoted + $malicious = 'state:export --backend="test" ; rm -rf ./var'; + $result = Shlex::split($malicious); + + // Should parse into safe tokens + $this->assertIsArray($result); + $this->assertGreaterThan(0, count($result)); + + // The semicolon and command should be separate tokens + // but won't be executed as shell commands when used with Process array + $this->assertContains('state:export', $result); + $this->assertContains(';', $result); + } + + public function test_security_no_shell_interpretation(): void + { + // These should all be parsed as literal strings, not shell commands + $dangerous = [ + 'test $(whoami)', + 'test `id`', + 'test | cat /etc/passwd', + 'test && malicious', + 'test ; rm -rf ./var', + 'test > /tmp/output', + 'test < /etc/passwd', + ]; + + foreach ($dangerous as $cmd) { + $result = Shlex::split($cmd); + $this->assertIsArray($result); + + // Should be split into tokens, but shell metacharacters are preserved as literals + // When used with Process array constructor, they won't be interpreted + $this->assertGreaterThan(0, count($result)); + } + } + + /** + * Test pathological cases that might cause issues. + */ + public function test_pathological_cases(): void + { + $cases = [ + '""""""', // Multiple empty quotes + "''''''", // Multiple empty single quotes + '\\\\\\\\', // Multiple backslashes + '"""hello"""', // Excessive quotes + 'a b c d e f g h i j k l m n o p', // Many short args + ]; + + foreach ($cases as $case) { + $result = Shlex::split($case); + $this->assertIsArray($result); + } + } + + /** + * Verify behavior matches expected output for common console commands. + */ + public function test_real_world_console_commands(): void + { + $commands = [ + 'state:export --backend=plex' => ['state:export', '--backend=plex'], + 'state:import --file="/tmp/backup.json"' => ['state:import', '--file=/tmp/backup.json'], + 'config:view -vvv' => ['config:view', '-vvv'], + 'state:export -v --dry-run' => ['state:export', '-v', '--dry-run'], + ]; + + foreach ($commands as $input => $expected) { + $result = Shlex::split($input); + $this->assertSame($expected, $result, "Failed for: {$input}"); + } + } +} + From 39f86f76714c2c7a8c205e9352c566ef234969df Mon Sep 17 00:00:00 2001 From: arabcoders Date: Sat, 27 Dec 2025 00:01:53 +0300 Subject: [PATCH 4/4] Chore: update external dependancies --- composer.lock | 33 +- frontend/package.json | 10 +- frontend/pnpm-lock.yaml | 874 ++++++++++++++++++++-------------------- 3 files changed, 456 insertions(+), 461 deletions(-) diff --git a/composer.lock b/composer.lock index dfc7e94a..6eeabefa 100644 --- a/composer.lock +++ b/composer.lock @@ -2986,35 +2986,35 @@ }, { "name": "phpunit/php-code-coverage", - "version": "11.0.11", + "version": "11.0.12", "source": { "type": "git", "url": "https://github.com/sebastianbergmann/php-code-coverage.git", - "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4" + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", - "reference": "4f7722aa9a7b76aa775e2d9d4e95d1ea16eeeef4", + "url": "https://api.github.com/repos/sebastianbergmann/php-code-coverage/zipball/2c1ed04922802c15e1de5d7447b4856de949cf56", + "reference": "2c1ed04922802c15e1de5d7447b4856de949cf56", "shasum": "" }, "require": { "ext-dom": "*", "ext-libxml": "*", "ext-xmlwriter": "*", - "nikic/php-parser": "^5.4.0", + "nikic/php-parser": "^5.7.0", "php": ">=8.2", "phpunit/php-file-iterator": "^5.1.0", "phpunit/php-text-template": "^4.0.1", "sebastian/code-unit-reverse-lookup": "^4.0.1", "sebastian/complexity": "^4.0.1", - "sebastian/environment": "^7.2.0", + "sebastian/environment": "^7.2.1", "sebastian/lines-of-code": "^3.0.1", "sebastian/version": "^5.0.2", - "theseer/tokenizer": "^1.2.3" + "theseer/tokenizer": "^1.3.1" }, "require-dev": { - "phpunit/phpunit": "^11.5.2" + "phpunit/phpunit": "^11.5.46" }, "suggest": { "ext-pcov": "PHP extension that provides line coverage", @@ -3052,7 +3052,7 @@ "support": { "issues": "https://github.com/sebastianbergmann/php-code-coverage/issues", "security": "https://github.com/sebastianbergmann/php-code-coverage/security/policy", - "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.11" + "source": "https://github.com/sebastianbergmann/php-code-coverage/tree/11.0.12" }, "funding": [ { @@ -3072,7 +3072,7 @@ "type": "tidelift" } ], - "time": "2025-08-27T14:37:49+00:00" + "time": "2025-12-24T07:01:01+00:00" }, { "name": "phpunit/php-file-iterator", @@ -3469,12 +3469,12 @@ "source": { "type": "git", "url": "https://github.com/Roave/SecurityAdvisories.git", - "reference": "e5034c4df32edeafb119b2c1e2b58876d0286ea8" + "reference": "11f7ca6b5f4e115b64cf9aa8af60c2211bfadf56" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/e5034c4df32edeafb119b2c1e2b58876d0286ea8", - "reference": "e5034c4df32edeafb119b2c1e2b58876d0286ea8", + "url": "https://api.github.com/repos/Roave/SecurityAdvisories/zipball/11f7ca6b5f4e115b64cf9aa8af60c2211bfadf56", + "reference": "11f7ca6b5f4e115b64cf9aa8af60c2211bfadf56", "shasum": "" }, "conflict": { @@ -3527,7 +3527,7 @@ "automad/automad": "<2.0.0.0-alpha5", "automattic/jetpack": "<9.8", "awesome-support/awesome-support": "<=6.0.7", - "aws/aws-sdk-php": "<3.288.1", + "aws/aws-sdk-php": "<3.368", "azuracast/azuracast": "<=0.23.1", "b13/seo_basics": "<0.8.2", "backdrop/backdrop": "<=1.32", @@ -3567,6 +3567,7 @@ "bvbmedia/multishop": "<2.0.39", "bytefury/crater": "<6.0.2", "cachethq/cachet": "<2.5.1", + "cadmium-org/cadmium-cms": "<=0.4.9", "cakephp/cakephp": "<3.10.3|>=4,<4.0.10|>=4.1,<4.1.4|>=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cakephp/database": ">=4.2,<4.2.12|>=4.3,<4.3.11|>=4.4,<4.4.10", "cardgate/magento2": "<2.0.33", @@ -3893,7 +3894,7 @@ "leantime/leantime": "<3.3", "lexik/jwt-authentication-bundle": "<2.10.7|>=2.11,<2.11.3", "libreform/libreform": ">=2,<=2.0.8", - "librenms/librenms": "<25.11", + "librenms/librenms": "<25.12", "liftkit/database": "<2.13.2", "lightsaml/lightsaml": "<1.3.5", "limesurvey/limesurvey": "<6.5.12", @@ -4466,7 +4467,7 @@ "type": "tidelift" } ], - "time": "2025-12-17T21:06:23+00:00" + "time": "2025-12-23T20:06:05+00:00" }, { "name": "sebastian/cli-parser", diff --git a/frontend/package.json b/frontend/package.json index a3b0951e..dfc77cc0 100644 --- a/frontend/package.json +++ b/frontend/package.json @@ -22,8 +22,8 @@ "@pinia/nuxt": "^0.11.3", "@vueuse/core": "^14.1.0", "@vueuse/nuxt": "^14.1.0", - "@xterm/addon-fit": "^0.10.0", - "@xterm/xterm": "^5.5.0", + "@xterm/addon-fit": "^0.11.0", + "@xterm/xterm": "^6.0.0", "cronstrue": "^3.9.0", "floating-vue": "^5.2.2", "hls.js": "^1.6.15", @@ -35,7 +35,7 @@ "nuxt": "^4.2.2", "pinia": "^3.0.4", "plyr": "^3.8.3", - "vue": "^3.5.25", + "vue": "^3.5.26", "vue-router": "^4.6.4", "vue-toastification": "2.0.0-rc.5", "vuedraggable": "^4.1.0" @@ -49,12 +49,12 @@ "devDependencies": { "@nuxt/eslint": "^1.12.1", "@nuxt/eslint-config": "^1.12.1", - "@typescript-eslint/parser": "^8.50.0", + "@typescript-eslint/parser": "^8.50.1", "eslint": "^9.39.2", "typescript": "^5.9.3", "vitest": "^4.0.16", "vue-eslint-parser": "^10.2.0", - "vue-tsc": "^3.1.8" + "vue-tsc": "^3.2.1" }, "eslintIgnore": [ ".gitignore" diff --git a/frontend/pnpm-lock.yaml b/frontend/pnpm-lock.yaml index 3d080fc3..179213b6 100644 --- a/frontend/pnpm-lock.yaml +++ b/frontend/pnpm-lock.yaml @@ -13,25 +13,25 @@ importers: version: 2.0.1 '@pinia/nuxt': specifier: ^0.11.3 - version: 0.11.3(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3))) + version: 0.11.3(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3))) '@vueuse/core': specifier: ^14.1.0 - version: 14.1.0(vue@3.5.25(typescript@5.9.3)) + version: 14.1.0(vue@3.5.26(typescript@5.9.3)) '@vueuse/nuxt': specifier: ^14.1.0 - version: 14.1.0(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + version: 14.1.0(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) '@xterm/addon-fit': - specifier: ^0.10.0 - version: 0.10.0(@xterm/xterm@5.5.0) + specifier: ^0.11.0 + version: 0.11.0 '@xterm/xterm': - specifier: ^5.5.0 - version: 5.5.0 + specifier: ^6.0.0 + version: 6.0.0 cronstrue: specifier: ^3.9.0 version: 3.9.0 floating-vue: specifier: ^5.2.2 - version: 5.2.2(@nuxt/kit@3.20.2(magicast@0.5.1))(vue@3.5.25(typescript@5.9.3)) + version: 5.2.2(@nuxt/kit@3.20.2(magicast@0.5.1))(vue@3.5.26(typescript@5.9.3)) hls.js: specifier: ^1.6.15 version: 1.6.15 @@ -52,35 +52,35 @@ importers: version: 2.30.1 nuxt: specifier: ^4.2.2 - version: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2) + version: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2) pinia: specifier: ^3.0.4 - version: 3.0.4(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)) + version: 3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) plyr: specifier: ^3.8.3 version: 3.8.3 vue: - specifier: ^3.5.25 - version: 3.5.25(typescript@5.9.3) + specifier: ^3.5.26 + version: 3.5.26(typescript@5.9.3) vue-router: specifier: ^4.6.4 - version: 4.6.4(vue@3.5.25(typescript@5.9.3)) + version: 4.6.4(vue@3.5.26(typescript@5.9.3)) vue-toastification: specifier: 2.0.0-rc.5 - version: 2.0.0-rc.5(vue@3.5.25(typescript@5.9.3)) + version: 2.0.0-rc.5(vue@3.5.26(typescript@5.9.3)) vuedraggable: specifier: ^4.1.0 - version: 4.1.0(vue@3.5.25(typescript@5.9.3)) + version: 4.1.0(vue@3.5.26(typescript@5.9.3)) devDependencies: '@nuxt/eslint': specifier: ^1.12.1 - version: 1.12.1(@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)) + version: 1.12.1(@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)) '@nuxt/eslint-config': specifier: ^1.12.1 - version: 1.12.1(@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + version: 1.12.1(@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@typescript-eslint/parser': - specifier: ^8.50.0 - version: 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + specifier: ^8.50.1 + version: 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: specifier: ^9.39.2 version: 9.39.2(jiti@2.6.1) @@ -94,8 +94,8 @@ importers: specifier: ^10.2.0 version: 10.2.0(eslint@9.39.2(jiti@2.6.1)) vue-tsc: - specifier: ^3.1.8 - version: 3.1.8(typescript@5.9.3) + specifier: ^3.2.1 + version: 3.2.1(typescript@5.9.3) packages: @@ -225,8 +225,8 @@ packages: resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==} engines: {node: '>=6.9.0'} - '@bomb.sh/tab@0.0.9': - resolution: {integrity: sha512-HUJ0b+LkZpLsyn0u7G/H5aJioAdSLqWMWX5ryuFS6n70MOEFu+SGrF8d8u6HzI1gINVQTvsfoxDLcjWkmI0AWg==} + '@bomb.sh/tab@0.0.10': + resolution: {integrity: sha512-6ALS2rh/4LKn0Yxwm35V6LcgQuSiECHbqQo7+9g4rkgGyXZ0siOc8K+IuWIq/4u0Zkv2mevP9QSqgKhGIvLJMw==} hasBin: true peerDependencies: cac: ^6.7.14 @@ -249,8 +249,8 @@ packages: '@clack/prompts@0.11.0': resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} - '@clack/prompts@1.0.0-alpha.7': - resolution: {integrity: sha512-BLB8LYOdfI4q6XzDl8la69J/y/7s0tHjuU1/5ak+o8yB2BPZBNE22gfwbFUIEmlq/BGBD6lVUAMR7w+1K7Pr6Q==} + '@clack/prompts@1.0.0-alpha.8': + resolution: {integrity: sha512-YZGC4BmTKSF5OturNKEz/y4xNjYGmGk6NI785CQucJ7OEdX0qbMmL/zok+9bL6c7qE3WSYffyK5grh2RnkGNtQ==} '@cloudflare/kv-asset-handler@0.4.1': resolution: {integrity: sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==} @@ -758,8 +758,8 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nuxt/cli@3.31.2': - resolution: {integrity: sha512-ud4KcfSdPeY96IR3UCtg/k7p6nUbJqF3IguQsolHo6EEJwiNM283EFXhRzU9cR+1iILExjaJvHMpFJ/7Xi++bg==} + '@nuxt/cli@3.31.3': + resolution: {integrity: sha512-K0T1ZpBXnlb41NU/RWf1F0U0C14KzlEXCoaSgD2y8BiLoCBWcgQ1UAlRtx4cThqWbJmIxaNZZTDL0NZ9d1U7ag==} engines: {node: ^16.10.0 || >=18.0.0} hasBin: true @@ -1251,8 +1251,8 @@ packages: '@rolldown/pluginutils@1.0.0-beta.53': resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==} - '@rolldown/pluginutils@1.0.0-beta.55': - resolution: {integrity: sha512-vajw/B3qoi7aYnnD4BQ4VoCcXQWnF0roSwE2iynbNxgW4l9mFwtLmLmUhpDdcTBfKyZm1p/T0D13qG94XBLohA==} + '@rolldown/pluginutils@1.0.0-beta.57': + resolution: {integrity: sha512-aQNelgx14tGA+n2tNSa9x6/jeoCL9fkDeCei7nOKnHx0fEFRRMu5ReiITo+zZD5TzWDGGRjbSYCs93IfRIyTuQ==} '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} @@ -1326,124 +1326,124 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.53.5': - resolution: {integrity: sha512-iDGS/h7D8t7tvZ1t6+WPK04KD0MwzLZrG0se1hzBjSi5fyxlsiggoJHwh18PCFNn7tG43OWb6pdZ6Y+rMlmyNQ==} + '@rollup/rollup-android-arm-eabi@4.54.0': + resolution: {integrity: sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.53.5': - resolution: {integrity: sha512-wrSAViWvZHBMMlWk6EJhvg8/rjxzyEhEdgfMMjREHEq11EtJ6IP6yfcCH57YAEca2Oe3FNCE9DSTgU70EIGmVw==} + '@rollup/rollup-android-arm64@4.54.0': + resolution: {integrity: sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.53.5': - resolution: {integrity: sha512-S87zZPBmRO6u1YXQLwpveZm4JfPpAa6oHBX7/ghSiGH3rz/KDgAu1rKdGutV+WUI6tKDMbaBJomhnT30Y2t4VQ==} + '@rollup/rollup-darwin-arm64@4.54.0': + resolution: {integrity: sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.53.5': - resolution: {integrity: sha512-YTbnsAaHo6VrAczISxgpTva8EkfQus0VPEVJCEaboHtZRIb6h6j0BNxRBOwnDciFTZLDPW5r+ZBmhL/+YpTZgA==} + '@rollup/rollup-darwin-x64@4.54.0': + resolution: {integrity: sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.53.5': - resolution: {integrity: sha512-1T8eY2J8rKJWzaznV7zedfdhD1BqVs1iqILhmHDq/bqCUZsrMt+j8VCTHhP0vdfbHK3e1IQ7VYx3jlKqwlf+vw==} + '@rollup/rollup-freebsd-arm64@4.54.0': + resolution: {integrity: sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.53.5': - resolution: {integrity: sha512-sHTiuXyBJApxRn+VFMaw1U+Qsz4kcNlxQ742snICYPrY+DDL8/ZbaC4DVIB7vgZmp3jiDaKA0WpBdP0aqPJoBQ==} + '@rollup/rollup-freebsd-x64@4.54.0': + resolution: {integrity: sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.53.5': - resolution: {integrity: sha512-dV3T9MyAf0w8zPVLVBptVlzaXxka6xg1f16VAQmjg+4KMSTWDvhimI/Y6mp8oHwNrmnmVl9XxJ/w/mO4uIQONA==} + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': + resolution: {integrity: sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==} cpu: [arm] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm-musleabihf@4.53.5': - resolution: {integrity: sha512-wIGYC1x/hyjP+KAu9+ewDI+fi5XSNiUi9Bvg6KGAh2TsNMA3tSEs+Sh6jJ/r4BV/bx/CyWu2ue9kDnIdRyafcQ==} + '@rollup/rollup-linux-arm-musleabihf@4.54.0': + resolution: {integrity: sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==} cpu: [arm] os: [linux] libc: [musl] - '@rollup/rollup-linux-arm64-gnu@4.53.5': - resolution: {integrity: sha512-Y+qVA0D9d0y2FRNiG9oM3Hut/DgODZbU9I8pLLPwAsU0tUKZ49cyV1tzmB/qRbSzGvY8lpgGkJuMyuhH7Ma+Vg==} + '@rollup/rollup-linux-arm64-gnu@4.54.0': + resolution: {integrity: sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==} cpu: [arm64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-arm64-musl@4.53.5': - resolution: {integrity: sha512-juaC4bEgJsyFVfqhtGLz8mbopaWD+WeSOYr5E16y+1of6KQjc0BpwZLuxkClqY1i8sco+MdyoXPNiCkQou09+g==} + '@rollup/rollup-linux-arm64-musl@4.54.0': + resolution: {integrity: sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==} cpu: [arm64] os: [linux] libc: [musl] - '@rollup/rollup-linux-loong64-gnu@4.53.5': - resolution: {integrity: sha512-rIEC0hZ17A42iXtHX+EPJVL/CakHo+tT7W0pbzdAGuWOt2jxDFh7A/lRhsNHBcqL4T36+UiAgwO8pbmn3dE8wA==} + '@rollup/rollup-linux-loong64-gnu@4.54.0': + resolution: {integrity: sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==} cpu: [loong64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-ppc64-gnu@4.53.5': - resolution: {integrity: sha512-T7l409NhUE552RcAOcmJHj3xyZ2h7vMWzcwQI0hvn5tqHh3oSoclf9WgTl+0QqffWFG8MEVZZP1/OBglKZx52Q==} + '@rollup/rollup-linux-ppc64-gnu@4.54.0': + resolution: {integrity: sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==} cpu: [ppc64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-gnu@4.53.5': - resolution: {integrity: sha512-7OK5/GhxbnrMcxIFoYfhV/TkknarkYC1hqUw1wU2xUN3TVRLNT5FmBv4KkheSG2xZ6IEbRAhTooTV2+R5Tk0lQ==} + '@rollup/rollup-linux-riscv64-gnu@4.54.0': + resolution: {integrity: sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==} cpu: [riscv64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-riscv64-musl@4.53.5': - resolution: {integrity: sha512-GwuDBE/PsXaTa76lO5eLJTyr2k8QkPipAyOrs4V/KJufHCZBJ495VCGJol35grx9xryk4V+2zd3Ri+3v7NPh+w==} + '@rollup/rollup-linux-riscv64-musl@4.54.0': + resolution: {integrity: sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==} cpu: [riscv64] os: [linux] libc: [musl] - '@rollup/rollup-linux-s390x-gnu@4.53.5': - resolution: {integrity: sha512-IAE1Ziyr1qNfnmiQLHBURAD+eh/zH1pIeJjeShleII7Vj8kyEm2PF77o+lf3WTHDpNJcu4IXJxNO0Zluro8bOw==} + '@rollup/rollup-linux-s390x-gnu@4.54.0': + resolution: {integrity: sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==} cpu: [s390x] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-gnu@4.53.5': - resolution: {integrity: sha512-Pg6E+oP7GvZ4XwgRJBuSXZjcqpIW3yCBhK4BcsANvb47qMvAbCjR6E+1a/U2WXz1JJxp9/4Dno3/iSJLcm5auw==} + '@rollup/rollup-linux-x64-gnu@4.54.0': + resolution: {integrity: sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==} cpu: [x64] os: [linux] libc: [glibc] - '@rollup/rollup-linux-x64-musl@4.53.5': - resolution: {integrity: sha512-txGtluxDKTxaMDzUduGP0wdfng24y1rygUMnmlUJ88fzCCULCLn7oE5kb2+tRB+MWq1QDZT6ObT5RrR8HFRKqg==} + '@rollup/rollup-linux-x64-musl@4.54.0': + resolution: {integrity: sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==} cpu: [x64] os: [linux] libc: [musl] - '@rollup/rollup-openharmony-arm64@4.53.5': - resolution: {integrity: sha512-3DFiLPnTxiOQV993fMc+KO8zXHTcIjgaInrqlG8zDp1TlhYl6WgrOHuJkJQ6M8zHEcntSJsUp1XFZSY8C1DYbg==} + '@rollup/rollup-openharmony-arm64@4.54.0': + resolution: {integrity: sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.53.5': - resolution: {integrity: sha512-nggc/wPpNTgjGg75hu+Q/3i32R00Lq1B6N1DO7MCU340MRKL3WZJMjA9U4K4gzy3dkZPXm9E1Nc81FItBVGRlA==} + '@rollup/rollup-win32-arm64-msvc@4.54.0': + resolution: {integrity: sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.53.5': - resolution: {integrity: sha512-U/54pTbdQpPLBdEzCT6NBCFAfSZMvmjr0twhnD9f4EIvlm9wy3jjQ38yQj1AGznrNO65EWQMgm/QUjuIVrYF9w==} + '@rollup/rollup-win32-ia32-msvc@4.54.0': + resolution: {integrity: sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.53.5': - resolution: {integrity: sha512-2NqKgZSuLH9SXBBV2dWNRCZmocgSOx8OJSdpRaEcRlIfX8YrKxUT6z0F1NpvDVhOsl190UFTRh2F2WDWWCYp3A==} + '@rollup/rollup-win32-x64-gnu@4.54.0': + resolution: {integrity: sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.53.5': - resolution: {integrity: sha512-JRpZUhCfhZ4keB5v0fe02gQJy05GqboPOaxvjugW04RLSYYoB/9t2lx2u/tMs/Na/1NXfY8QYjgRljRpN+MjTQ==} + '@rollup/rollup-win32-x64-msvc@4.54.0': + resolution: {integrity: sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==} cpu: [x64] os: [win32] @@ -1499,67 +1499,67 @@ packages: '@types/web-bluetooth@0.0.21': resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} - '@typescript-eslint/eslint-plugin@8.50.0': - resolution: {integrity: sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==} + '@typescript-eslint/eslint-plugin@8.50.1': + resolution: {integrity: sha512-PKhLGDq3JAg0Jk/aK890knnqduuI/Qj+udH7wCf0217IGi4gt+acgCyPVe79qoT+qKUvHMDQkwJeKW9fwl8Cyw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.50.0 + '@typescript-eslint/parser': ^8.50.1 eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.50.0': - resolution: {integrity: sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==} + '@typescript-eslint/parser@8.50.1': + resolution: {integrity: sha512-hM5faZwg7aVNa819m/5r7D0h0c9yC4DUlWAOvHAtISdFTc8xB86VmX5Xqabrama3wIPJ/q9RbGS1worb6JfnMg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.50.0': - resolution: {integrity: sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==} + '@typescript-eslint/project-service@8.50.1': + resolution: {integrity: sha512-E1ur1MCVf+YiP89+o4Les/oBAVzmSbeRB0MQLfSlYtbWU17HPxZ6Bhs5iYmKZRALvEuBoXIZMOIRRc/P++Ortg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.50.0': - resolution: {integrity: sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==} + '@typescript-eslint/scope-manager@8.50.1': + resolution: {integrity: sha512-mfRx06Myt3T4vuoHaKi8ZWNTPdzKPNBhiblze5N50//TSHOAQQevl/aolqA/BcqqbJ88GUnLqjjcBc8EWdBcVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.50.0': - resolution: {integrity: sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==} + '@typescript-eslint/tsconfig-utils@8.50.1': + resolution: {integrity: sha512-ooHmotT/lCWLXi55G4mvaUF60aJa012QzvLK0Y+Mp4WdSt17QhMhWOaBWeGTFVkb2gDgBe19Cxy1elPXylslDw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.50.0': - resolution: {integrity: sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==} + '@typescript-eslint/type-utils@8.50.1': + resolution: {integrity: sha512-7J3bf022QZE42tYMO6SL+6lTPKFk/WphhRPe9Tw/el+cEwzLz1Jjz2PX3GtGQVxooLDKeMVmMt7fWpYRdG5Etg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.50.0': - resolution: {integrity: sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==} + '@typescript-eslint/types@8.50.1': + resolution: {integrity: sha512-v5lFIS2feTkNyMhd7AucE/9j/4V9v5iIbpVRncjk/K0sQ6Sb+Np9fgYS/63n6nwqahHQvbmujeBL7mp07Q9mlA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.50.0': - resolution: {integrity: sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==} + '@typescript-eslint/typescript-estree@8.50.1': + resolution: {integrity: sha512-woHPdW+0gj53aM+cxchymJCrh0cyS7BTIdcDxWUNsclr9VDkOSbqC13juHzxOmQ22dDkMZEpZB+3X1WpUvzgVQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.50.0': - resolution: {integrity: sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==} + '@typescript-eslint/utils@8.50.1': + resolution: {integrity: sha512-lCLp8H1T9T7gPbEuJSnHwnSuO9mDf8mfK/Nion5mZmiEaQD9sWf9W4dfeFqRyqRjF06/kBuTmAqcs9sewM2NbQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.50.0': - resolution: {integrity: sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==} + '@typescript-eslint/visitor-keys@8.50.1': + resolution: {integrity: sha512-IrDKrw7pCRUR94zeuCSUWQ+w8JEf5ZX5jl/e6AHGSLi1/zIr0lgutfn/7JpfCey+urpgQEdrZVYzCaVVKiTwhQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@unhead/vue@2.0.19': - resolution: {integrity: sha512-7BYjHfOaoZ9+ARJkT10Q2TjnTUqDXmMpfakIAsD/hXiuff1oqWg1xeXT5+MomhNcC15HbiABpbbBmITLSHxdKg==} + '@unhead/vue@2.1.1': + resolution: {integrity: sha512-WYa8ORhfv7lWDSoNpkMKhbW1Dbsux/3HqMcVkZS3xZ2/c/VrcChLj+IMadpCd1WNR0srITfRJhBYZ1i9hON5Qw==} peerDependencies: vue: '>=3.5.18' @@ -1671,11 +1671,11 @@ packages: engines: {node: '>=18'} hasBin: true - '@vitejs/plugin-vue-jsx@5.1.2': - resolution: {integrity: sha512-3a2BOryRjG/Iih87x87YXz5c8nw27eSlHytvSKYfp8ZIsp5+FgFQoKeA7k2PnqWpjJrv6AoVTMnvmuKUXb771A==} + '@vitejs/plugin-vue-jsx@5.1.3': + resolution: {integrity: sha512-I6Zr8cYVr5WHMW5gNOP09DNqW9rgO8RX73Wa6Czgq/0ndpTfJM4vfDChfOT1+3KtdrNqilNBtNlFwVeB02ZzGw==} engines: {node: ^20.19.0 || >=22.12.0} peerDependencies: - vite: ^5.0.0 || ^6.0.0 || ^7.0.0 + vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 vue: ^3.0.0 '@vitejs/plugin-vue@6.0.3': @@ -1714,14 +1714,14 @@ packages: '@vitest/utils@4.0.16': resolution: {integrity: sha512-h8z9yYhV3e1LEfaQ3zdypIrnAg/9hguReGZoS7Gl0aBG5xgA410zBqECqmaF/+RkTggRsfnzc1XaAHA6bmUufA==} - '@volar/language-core@2.4.26': - resolution: {integrity: sha512-hH0SMitMxnB43OZpyF1IFPS9bgb2I3bpCh76m2WEK7BE0A0EzpYsRp0CCH2xNKshr7kacU5TQBLYn4zj7CG60A==} + '@volar/language-core@2.4.27': + resolution: {integrity: sha512-DjmjBWZ4tJKxfNC1F6HyYERNHPYS7L7OPFyCrestykNdUZMFYzI9WTyvwPcaNaHlrEUwESHYsfEw3isInncZxQ==} - '@volar/source-map@2.4.26': - resolution: {integrity: sha512-JJw0Tt/kSFsIRmgTQF4JSt81AUSI1aEye5Zl65EeZ8H35JHnTvFGmpDOBn5iOxd48fyGE+ZvZBp5FcgAy/1Qhw==} + '@volar/source-map@2.4.27': + resolution: {integrity: sha512-ynlcBReMgOZj2i6po+qVswtDUeeBRCTgDurjMGShbm8WYZgJ0PA4RmtebBJ0BCYol1qPv3GQF6jK7C9qoVc7lg==} - '@volar/typescript@2.4.26': - resolution: {integrity: sha512-N87ecLD48Sp6zV9zID/5yuS1+5foj0DfuYGdQ6KHj/IbKvyKv1zNX6VCmnKYwtmHadEO6mFc2EKISiu3RDPAvA==} + '@volar/typescript@2.4.27': + resolution: {integrity: sha512-eWaYCcl/uAPInSK2Lze6IqVWaBu/itVqR5InXcHXFyles4zO++Mglt3oxdgj75BDcv1Knr9Y93nowS8U3wqhxg==} '@vue-macros/common@3.1.1': resolution: {integrity: sha512-afW2DMjgCBVs33mWRlz7YsGHzoEEupnl0DK5ZTKsgziAlLh5syc5m+GM7eqeYrgiQpwMaVxa1fk73caCvPxyAw==} @@ -1748,17 +1748,17 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@vue/compiler-core@3.5.25': - resolution: {integrity: sha512-vay5/oQJdsNHmliWoZfHPoVZZRmnSWhug0BYT34njkYTPqClh3DNWLkZNJBVSjsNMrg0CCrBfoKkjZQPM/QVUw==} + '@vue/compiler-core@3.5.26': + resolution: {integrity: sha512-vXyI5GMfuoBCnv5ucIT7jhHKl55Y477yxP6fc4eUswjP8FG3FFVFd41eNDArR+Uk3QKn2Z85NavjaxLxOC19/w==} - '@vue/compiler-dom@3.5.25': - resolution: {integrity: sha512-4We0OAcMZsKgYoGlMjzYvaoErltdFI2/25wqanuTu+S4gismOTRTBPi4IASOjxWdzIwrYSjnqONfKvuqkXzE2Q==} + '@vue/compiler-dom@3.5.26': + resolution: {integrity: sha512-y1Tcd3eXs834QjswshSilCBnKGeQjQXB6PqFn/1nxcQw4pmG42G8lwz+FZPAZAby6gZeHSt/8LMPfZ4Rb+Bd/A==} - '@vue/compiler-sfc@3.5.25': - resolution: {integrity: sha512-PUgKp2rn8fFsI++lF2sO7gwO2d9Yj57Utr5yEsDf3GNaQcowCLKL7sf+LvVFvtJDXUp/03+dC6f2+LCv5aK1ag==} + '@vue/compiler-sfc@3.5.26': + resolution: {integrity: sha512-egp69qDTSEZcf4bGOSsprUr4xI73wfrY5oRs6GSgXFTiHrWj4Y3X5Ydtip9QMqiCMCPVwLglB9GBxXtTadJ3mA==} - '@vue/compiler-ssr@3.5.25': - resolution: {integrity: sha512-ritPSKLBcParnsKYi+GNtbdbrIE1mtuFEJ4U1sWeuOMlIziK5GtOL85t5RhsNy4uWIXPgk+OUdpnXiTdzn8o3A==} + '@vue/compiler-ssr@3.5.26': + resolution: {integrity: sha512-lZT9/Y0nSIRUPVvapFJEVDbEXruZh2IYHMk2zTtEgJSlP5gVOqeWXH54xDKAaFS4rTnDeDBQUYDtxKyoW9FwDw==} '@vue/devtools-api@6.6.4': resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} @@ -1783,30 +1783,25 @@ packages: '@vue/devtools-shared@8.0.5': resolution: {integrity: sha512-bRLn6/spxpmgLk+iwOrR29KrYnJjG9DGpHGkDFG82UM21ZpJ39ztUT9OXX3g+usW7/b2z+h46I9ZiYyB07XMXg==} - '@vue/language-core@3.1.8': - resolution: {integrity: sha512-PfwAW7BLopqaJbneChNL6cUOTL3GL+0l8paYP5shhgY5toBNidWnMXWM+qDwL7MC9+zDtzCF2enT8r6VPu64iw==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true + '@vue/language-core@3.2.1': + resolution: {integrity: sha512-g6oSenpnGMtpxHGAwKuu7HJJkNZpemK/zg3vZzZbJ6cnnXq1ssxuNrXSsAHYM3NvH8p4IkTw+NLmuxyeYz4r8A==} - '@vue/reactivity@3.5.25': - resolution: {integrity: sha512-5xfAypCQepv4Jog1U4zn8cZIcbKKFka3AgWHEFQeK65OW+Ys4XybP6z2kKgws4YB43KGpqp5D/K3go2UPPunLA==} + '@vue/reactivity@3.5.26': + resolution: {integrity: sha512-9EnYB1/DIiUYYnzlnUBgwU32NNvLp/nhxLXeWRhHUEeWNTn1ECxX8aGO7RTXeX6PPcxe3LLuNBFoJbV4QZ+CFQ==} - '@vue/runtime-core@3.5.25': - resolution: {integrity: sha512-Z751v203YWwYzy460bzsYQISDfPjHTl+6Zzwo/a3CsAf+0ccEjQ8c+0CdX1WsumRTHeywvyUFtW6KvNukT/smA==} + '@vue/runtime-core@3.5.26': + resolution: {integrity: sha512-xJWM9KH1kd201w5DvMDOwDHYhrdPTrAatn56oB/LRG4plEQeZRQLw0Bpwih9KYoqmzaxF0OKSn6swzYi84e1/Q==} - '@vue/runtime-dom@3.5.25': - resolution: {integrity: sha512-a4WrkYFbb19i9pjkz38zJBg8wa/rboNERq3+hRRb0dHiJh13c+6kAbgqCPfMaJ2gg4weWD3APZswASOfmKwamA==} + '@vue/runtime-dom@3.5.26': + resolution: {integrity: sha512-XLLd/+4sPC2ZkN/6+V4O4gjJu6kSDbHAChvsyWgm1oGbdSO3efvGYnm25yCjtFm/K7rrSDvSfPDgN1pHgS4VNQ==} - '@vue/server-renderer@3.5.25': - resolution: {integrity: sha512-UJaXR54vMG61i8XNIzTSf2Q7MOqZHpp8+x3XLGtE3+fL+nQd+k7O5+X3D/uWrnQXOdMw5VPih+Uremcw+u1woQ==} + '@vue/server-renderer@3.5.26': + resolution: {integrity: sha512-TYKLXmrwWKSodyVuO1WAubucd+1XlLg4set0YoV+Hu8Lo79mp/YMwWV5mC5FgtsDxX3qo1ONrxFaTP1OQgy1uA==} peerDependencies: - vue: 3.5.25 + vue: 3.5.26 - '@vue/shared@3.5.25': - resolution: {integrity: sha512-AbOPdQQnAnzs58H2FrrDxYj/TJfmeS2jdfEEhgiKINy+bnOANmVizIEgq1r+C5zsbs6l1CCQxtcj71rwNQ4jWg==} + '@vue/shared@3.5.26': + resolution: {integrity: sha512-7Z6/y3uFI5PRoKeorTOSXKcDj0MSasfNNltcslbFrPpcw6aXRUALq4IfJlaTRspiWIUOEZbrpM+iQGmCOiWe4A==} '@vueuse/core@14.1.0': resolution: {integrity: sha512-rgBinKs07hAYyPF834mDTigH7BtPqvZ3Pryuzt1SD/lg5wEcWqvwzXXYGEDb2/cP0Sj5zSvHl3WkmMELr5kfWw==} @@ -1847,13 +1842,11 @@ packages: resolution: {integrity: sha512-ueFCcIPaMgtuYDS9u0qlUoEvj6GiSsKrwnOLPp9SshqjtcRaR1IEHRjoReq3sXNydsF5i0ZnmuYgXq9dV53t0g==} engines: {node: '>=18.0.0'} - '@xterm/addon-fit@0.10.0': - resolution: {integrity: sha512-UFYkDm4HUahf2lnEyHvio51TNGiLK66mqP2JoATy7hRZeXaGMRDr00JiSF7m63vR5WKATF605yEggJKsw0JpMQ==} - peerDependencies: - '@xterm/xterm': ^5.0.0 + '@xterm/addon-fit@0.11.0': + resolution: {integrity: sha512-jYcgT6xtVYhnhgxh3QgYDnnNMYTcf8ElbxxFzX0IZo+vabQqSPAjC3c1wJrKB5E19VwQei89QCiZZP86DCPF7g==} - '@xterm/xterm@5.5.0': - resolution: {integrity: sha512-hqJHYaQb5OptNunnyAnkHyM8aCjZ1MEIDTQu1iIbbTD/xops91NB5yq1ZK/dC2JDbVWtF23zUtl9JE2NqwT87A==} + '@xterm/xterm@6.0.0': + resolution: {integrity: sha512-TQwDdQGtwwDt+2cgKDLn0IRaSxYu1tSUjgKarSDkUM0ZNiSRXFpjxEsvc/Zgc5kq5omJ+V0a8/kIM2WD3sMOYg==} abbrev@3.0.1: resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==} @@ -1885,8 +1878,8 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - alien-signals@3.1.1: - resolution: {integrity: sha512-ogkIWbVrLwKtHY6oOAXaYkAxP+cTH7V5FZ5+Tm4NZFd8VDZ6uNMDrfzqctTZ42eTMCSR3ne3otpcxmqSnFfPYA==} + alien-signals@3.1.2: + resolution: {integrity: sha512-d9dYqZTS90WLiU0I5c6DHj/HcKkF8ZyGN3G5x8wSbslulz70KOxaqCT0hQCo9KOyhVqzqGojvNdJXoTumZOtcw==} ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} @@ -1974,8 +1967,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.9.9: - resolution: {integrity: sha512-V8fbOCSeOFvlDj7LLChUcqbZrdKD9RU/VR260piF1790vT0mfLSwGc/Qzxv3IqiTukOpNtItePa0HBpMAj7MDg==} + baseline-browser-mapping@2.9.11: + resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==} hasBin: true bindings@1.5.0: @@ -2056,11 +2049,11 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001760: - resolution: {integrity: sha512-7AAMPcueWELt1p3mi13HR/LHH0TJLT11cnwDJEs3xA4+CK/PLKeO9Kl1oru24htkyUKtkGCvAx4ohB0Ttry8Dw==} + caniuse-lite@1.0.30001761: + resolution: {integrity: sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==} - chai@6.2.1: - resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==} + chai@6.2.2: + resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==} engines: {node: '>=18'} chalk@4.1.2: @@ -2403,6 +2396,10 @@ packages: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} + entities@7.0.0: + resolution: {integrity: sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==} + engines: {node: '>=0.12'} + env-paths@3.0.0: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2638,8 +2635,8 @@ packages: fast-npm-meta@0.4.7: resolution: {integrity: sha512-aZU3i3eRcSb2NCq8i6N6IlyiTyF6vqAqzBGl2NBF6ngNx/GIqfYbkLDIKZ4z4P0o/RmtsFnVqHwdrSm13o4tnQ==} - fastq@1.19.1: - resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fastq@1.20.1: + resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} @@ -3852,8 +3849,8 @@ packages: rollup: optional: true - rollup@4.53.5: - resolution: {integrity: sha512-iTNAbFSlRpcHeeWu73ywU/8KuU/LZmNCSxp6fjQkJBD3ivUb8tpDrXhIxEzA05HlYMEwmtaUnb3RP+YNv162OQ==} + rollup@4.54.0: + resolution: {integrity: sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3899,8 +3896,8 @@ packages: serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - seroval@1.4.0: - resolution: {integrity: sha512-BdrNXdzlofomLTiRnwJTSEAaGKyHHZkbMXIywOh7zlzp4uZnXErEwl9XZ+N1hJSNpeTtNxWvVwN0wUzAIQ4Hpg==} + seroval@1.4.1: + resolution: {integrity: sha512-9GOc+8T6LN4aByLN75uRvMbrwY5RDBW6lSlknsY4LEa9ZmWcxKcRe1G/Q3HZXjltxMHTrStnvrwAICxZrhldtg==} engines: {node: '>=10'} serve-placeholder@2.0.2: @@ -4195,8 +4192,8 @@ packages: unenv@2.0.0-rc.24: resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==} - unhead@2.0.19: - resolution: {integrity: sha512-gEEjkV11Aj+rBnY6wnRfsFtF2RxKOLaPN4i+Gx3UhBxnszvV6ApSNZbGk7WKyy/lErQ6ekPN63qdFL7sa1leow==} + unhead@2.1.1: + resolution: {integrity: sha512-NOt8n2KybAOxSLfNXegAVai4SGU8bPKqWnqCzNAvnRH2i8mW+0bbFjN/L75LBgCSTiOjJSpANe5w2V34Grr7Cw==} unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} @@ -4504,14 +4501,14 @@ packages: peerDependencies: vue: ^3.0.2 - vue-tsc@3.1.8: - resolution: {integrity: sha512-deKgwx6exIHeZwF601P1ktZKNF0bepaSN4jBU3AsbldPx9gylUc1JDxYppl82yxgkAgaz0Y0LCLOi+cXe9HMYA==} + vue-tsc@3.2.1: + resolution: {integrity: sha512-I23Rk8dkQfmcSbxDO0dmg9ioMLjKA1pjlU3Lz6Jfk2pMGu3Uryu9810XkcZH24IzPbhzPCnkKo2rEMRX0skSrw==} hasBin: true peerDependencies: typescript: '>=5.0.0' - vue@3.5.25: - resolution: {integrity: sha512-YLVdgv2K13WJ6n+kD5owehKtEXwdwXuj2TTyJMsO7pSeKw2bfRNZGjhB7YzrpbMYj5b5QsUebHpOqR3R3ziy/g==} + vue@3.5.26: + resolution: {integrity: sha512-SJ/NTccVyAoNUJmkM9KUqPcYlY+u8OVL1X5EW9RIs3ch5H2uERxyyIUI4MRxVCSOiEcupX9xNGde1tL9ZKpimA==} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -4808,7 +4805,7 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.28.5 - '@bomb.sh/tab@0.0.9(cac@6.7.14)(citty@0.1.6)': + '@bomb.sh/tab@0.0.10(cac@6.7.14)(citty@0.1.6)': optionalDependencies: cac: 6.7.14 citty: 0.1.6 @@ -4829,7 +4826,7 @@ snapshots: picocolors: 1.1.1 sisteransi: 1.0.5 - '@clack/prompts@1.0.0-alpha.7': + '@clack/prompts@1.0.0-alpha.8': dependencies: '@clack/core': 1.0.0-alpha.7 picocolors: 1.1.1 @@ -4870,7 +4867,7 @@ snapshots: '@es-joy/jsdoccomment@0.76.0': dependencies: '@types/estree': 1.0.8 - '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/types': 8.50.1 comment-parser: 1.4.1 esquery: 1.6.0 jsdoc-type-pratt-parser: 6.10.0 @@ -5243,12 +5240,12 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.1 + fastq: 1.20.1 - '@nuxt/cli@3.31.2(cac@6.7.14)(magicast@0.5.1)': + '@nuxt/cli@3.31.3(cac@6.7.14)(magicast@0.5.1)': dependencies: - '@bomb.sh/tab': 0.0.9(cac@6.7.14)(citty@0.1.6) - '@clack/prompts': 1.0.0-alpha.7 + '@bomb.sh/tab': 0.0.10(cac@6.7.14)(citty@0.1.6) + '@clack/prompts': 1.0.0-alpha.8 c12: 3.3.3(magicast@0.5.1) citty: 0.1.6 confbox: 0.2.2 @@ -5301,12 +5298,12 @@ snapshots: prompts: 2.4.2 semver: 7.7.3 - '@nuxt/devtools@3.1.1(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@nuxt/devtools@3.1.1(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)) '@nuxt/devtools-wizard': 3.1.1 '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@vue/devtools-core': 8.0.5(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + '@vue/devtools-core': 8.0.5(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) '@vue/devtools-kit': 8.0.5 birpc: 2.9.0 consola: 3.4.2 @@ -5333,7 +5330,7 @@ snapshots: tinyglobby: 0.2.15 vite: 7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2) vite-plugin-inspect: 11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)) - vite-plugin-vue-tracer: 1.2.0(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + vite-plugin-vue-tracer: 1.2.0(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) which: 5.0.0 ws: 8.18.3 transitivePeerDependencies: @@ -5342,26 +5339,26 @@ snapshots: - utf-8-validate - vue - '@nuxt/eslint-config@1.12.1(@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@nuxt/eslint-config@1.12.1(@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@antfu/install-pkg': 1.1.0 '@clack/prompts': 0.11.0 '@eslint/js': 9.39.2 '@nuxt/eslint-plugin': 1.12.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@stylistic/eslint-plugin': 5.6.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/eslint-plugin': 8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) eslint-config-flat-gitignore: 2.1.0(eslint@9.39.2(jiti@2.6.1)) eslint-flat-config-utils: 2.1.4 eslint-merge-processors: 2.0.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-import-lite: 0.3.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-jsdoc: 61.5.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-regexp: 2.10.0(eslint@9.39.2(jiti@2.6.1)) eslint-plugin-unicorn: 62.0.0(eslint@9.39.2(jiti@2.6.1)) - eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) - eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.25)(eslint@9.39.2(jiti@2.6.1)) + eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))) + eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1)) globals: 16.5.0 local-pkg: 1.1.2 pathe: 2.0.3 @@ -5375,18 +5372,18 @@ snapshots: '@nuxt/eslint-plugin@1.12.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) transitivePeerDependencies: - supports-color - typescript - '@nuxt/eslint@1.12.1(@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))': + '@nuxt/eslint@1.12.1(@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))': dependencies: '@eslint/config-inspector': 1.4.2(eslint@9.39.2(jiti@2.6.1)) '@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)) - '@nuxt/eslint-config': 1.12.1(@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@nuxt/eslint-config': 1.12.1(@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@nuxt/eslint-plugin': 1.12.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) '@nuxt/kit': 4.2.2(magicast@0.5.1) chokidar: 5.0.0 @@ -5461,12 +5458,12 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/nitro-server@4.2.2(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)': + '@nuxt/nitro-server@4.2.2(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)': dependencies: '@nuxt/devalue': 2.0.2 '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@unhead/vue': 2.0.19(vue@3.5.25(typescript@5.9.3)) - '@vue/shared': 3.5.25 + '@unhead/vue': 2.1.1(vue@3.5.26(typescript@5.9.3)) + '@vue/shared': 3.5.26 consola: 3.4.2 defu: 6.1.4 destr: 2.0.5 @@ -5479,7 +5476,7 @@ snapshots: klona: 2.0.6 mocked-exports: 0.1.1 nitropack: 2.12.9(@netlify/blobs@9.1.2) - nuxt: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2) + nuxt: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 radix3: 1.1.2 @@ -5487,7 +5484,7 @@ snapshots: ufo: 1.6.1 unctx: 2.5.0 unstorage: 1.17.3(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.8.2) - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) vue-bundle-renderer: 2.2.0 vue-devtools-stub: 0.1.0 transitivePeerDependencies: @@ -5527,7 +5524,7 @@ snapshots: '@nuxt/schema@4.2.2': dependencies: - '@vue/shared': 3.5.25 + '@vue/shared': 3.5.26 defu: 6.1.4 pathe: 2.0.3 pkg-types: 2.3.0 @@ -5550,12 +5547,12 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/vite-builder@4.2.2(@types/node@24.3.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.8(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)': + '@nuxt/vite-builder@4.2.2(@types/node@24.3.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2)': dependencies: '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@rollup/plugin-replace': 6.0.3(rollup@4.53.5) - '@vitejs/plugin-vue': 6.0.3(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) - '@vitejs/plugin-vue-jsx': 5.1.2(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + '@rollup/plugin-replace': 6.0.3(rollup@4.54.0) + '@vitejs/plugin-vue': 6.0.3(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) + '@vitejs/plugin-vue-jsx': 5.1.3(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) autoprefixer: 10.4.23(postcss@8.5.6) consola: 3.4.2 cssnano: 7.1.2(postcss@8.5.6) @@ -5570,19 +5567,19 @@ snapshots: magic-string: 0.30.21 mlly: 1.8.0 mocked-exports: 0.1.1 - nuxt: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2) + nuxt: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2) pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 - rollup-plugin-visualizer: 6.0.5(rollup@4.53.5) - seroval: 1.4.0 + rollup-plugin-visualizer: 6.0.5(rollup@4.54.0) + seroval: 1.4.1 std-env: 3.10.0 ufo: 1.6.1 unenv: 2.0.0-rc.24 vite: 7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2) vite-node: 5.2.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2) - vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3)) - vue: 3.5.25(typescript@5.9.3) + vite-plugin-checker: 0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3)) + vue: 3.5.26(typescript@5.9.3) vue-bundle-renderer: 2.2.0 transitivePeerDependencies: - '@biomejs/biome' @@ -5817,10 +5814,10 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 - '@pinia/nuxt@0.11.3(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)))': + '@pinia/nuxt@0.11.3(magicast@0.5.1)(pinia@3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)))': dependencies: '@nuxt/kit': 4.2.2(magicast@0.5.1) - pinia: 3.0.4(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)) + pinia: 3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)) transitivePeerDependencies: - magicast @@ -5843,15 +5840,15 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.53': {} - '@rolldown/pluginutils@1.0.0-beta.55': {} + '@rolldown/pluginutils@1.0.0-beta.57': {} - '@rollup/plugin-alias@5.1.1(rollup@4.53.5)': + '@rollup/plugin-alias@5.1.1(rollup@4.54.0)': optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/plugin-commonjs@28.0.9(rollup@4.53.5)': + '@rollup/plugin-commonjs@28.0.9(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.5) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.3) @@ -5859,119 +5856,119 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.3 optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/plugin-inject@5.0.5(rollup@4.53.5)': + '@rollup/plugin-inject@5.0.5(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.5) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) estree-walker: 2.0.2 magic-string: 0.30.21 optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/plugin-json@6.1.0(rollup@4.53.5)': + '@rollup/plugin-json@6.1.0(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.5) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.53.5)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.5) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.11 optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/plugin-replace@6.0.3(rollup@4.53.5)': + '@rollup/plugin-replace@6.0.3(rollup@4.54.0)': dependencies: - '@rollup/pluginutils': 5.3.0(rollup@4.53.5) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) magic-string: 0.30.21 optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/plugin-terser@0.4.4(rollup@4.53.5)': + '@rollup/plugin-terser@0.4.4(rollup@4.54.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 terser: 5.44.1 optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/pluginutils@5.3.0(rollup@4.53.5)': + '@rollup/pluginutils@5.3.0(rollup@4.54.0)': dependencies: '@types/estree': 1.0.8 estree-walker: 2.0.2 picomatch: 4.0.3 optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - '@rollup/rollup-android-arm-eabi@4.53.5': + '@rollup/rollup-android-arm-eabi@4.54.0': optional: true - '@rollup/rollup-android-arm64@4.53.5': + '@rollup/rollup-android-arm64@4.54.0': optional: true - '@rollup/rollup-darwin-arm64@4.53.5': + '@rollup/rollup-darwin-arm64@4.54.0': optional: true - '@rollup/rollup-darwin-x64@4.53.5': + '@rollup/rollup-darwin-x64@4.54.0': optional: true - '@rollup/rollup-freebsd-arm64@4.53.5': + '@rollup/rollup-freebsd-arm64@4.54.0': optional: true - '@rollup/rollup-freebsd-x64@4.53.5': + '@rollup/rollup-freebsd-x64@4.54.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.53.5': + '@rollup/rollup-linux-arm-gnueabihf@4.54.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.53.5': + '@rollup/rollup-linux-arm-musleabihf@4.54.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.53.5': + '@rollup/rollup-linux-arm64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.53.5': + '@rollup/rollup-linux-arm64-musl@4.54.0': optional: true - '@rollup/rollup-linux-loong64-gnu@4.53.5': + '@rollup/rollup-linux-loong64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.53.5': + '@rollup/rollup-linux-ppc64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.53.5': + '@rollup/rollup-linux-riscv64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.53.5': + '@rollup/rollup-linux-riscv64-musl@4.54.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.53.5': + '@rollup/rollup-linux-s390x-gnu@4.54.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.53.5': + '@rollup/rollup-linux-x64-gnu@4.54.0': optional: true - '@rollup/rollup-linux-x64-musl@4.53.5': + '@rollup/rollup-linux-x64-musl@4.54.0': optional: true - '@rollup/rollup-openharmony-arm64@4.53.5': + '@rollup/rollup-openharmony-arm64@4.54.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.53.5': + '@rollup/rollup-win32-arm64-msvc@4.54.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.53.5': + '@rollup/rollup-win32-ia32-msvc@4.54.0': optional: true - '@rollup/rollup-win32-x64-gnu@4.53.5': + '@rollup/rollup-win32-x64-gnu@4.54.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.53.5': + '@rollup/rollup-win32-x64-msvc@4.54.0': optional: true '@sindresorhus/base62@1.0.0': {} @@ -5987,7 +5984,7 @@ snapshots: '@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1))': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/types': 8.50.1 eslint: 9.39.2(jiti@2.6.1) eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -6023,14 +6020,14 @@ snapshots: '@types/web-bluetooth@0.0.21': {} - '@typescript-eslint/eslint-plugin@8.50.0(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.50.1(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.50.0 - '@typescript-eslint/type-utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.50.0 + '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/type-utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.50.1 eslint: 9.39.2(jiti@2.6.1) ignore: 7.0.5 natural-compare: 1.4.0 @@ -6039,41 +6036,41 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.50.0 - '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.50.0 + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.50.1 debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.50.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.50.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) - '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.9.3) + '@typescript-eslint/types': 8.50.1 debug: 4.4.3 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.50.0': + '@typescript-eslint/scope-manager@8.50.1': dependencies: - '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/visitor-keys': 8.50.0 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/visitor-keys': 8.50.1 - '@typescript-eslint/tsconfig-utils@8.50.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.50.1(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/type-utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) ts-api-utils: 2.1.0(typescript@5.9.3) @@ -6081,14 +6078,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.50.0': {} + '@typescript-eslint/types@8.50.1': {} - '@typescript-eslint/typescript-estree@8.50.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.50.1(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.50.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.50.0(typescript@5.9.3) - '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/visitor-keys': 8.50.0 + '@typescript-eslint/project-service': 8.50.1(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.50.1(typescript@5.9.3) + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/visitor-keys': 8.50.1 debug: 4.4.3 minimatch: 9.0.5 semver: 7.7.3 @@ -6098,27 +6095,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': + '@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/scope-manager': 8.50.0 - '@typescript-eslint/types': 8.50.0 - '@typescript-eslint/typescript-estree': 8.50.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.50.1 + '@typescript-eslint/types': 8.50.1 + '@typescript-eslint/typescript-estree': 8.50.1(typescript@5.9.3) eslint: 9.39.2(jiti@2.6.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.50.0': + '@typescript-eslint/visitor-keys@8.50.1': dependencies: - '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/types': 8.50.1 eslint-visitor-keys: 4.2.1 - '@unhead/vue@2.0.19(vue@3.5.25(typescript@5.9.3))': + '@unhead/vue@2.1.1(vue@3.5.26(typescript@5.9.3))': dependencies: hookable: 5.5.3 - unhead: 2.0.19 - vue: 3.5.25(typescript@5.9.3) + unhead: 2.1.1 + vue: 3.5.26(typescript@5.9.3) '@unrs/resolver-binding-android-arm-eabi@1.11.1': optional: true @@ -6179,10 +6176,10 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.11.1': optional: true - '@vercel/nft@0.30.4(rollup@4.53.5)': + '@vercel/nft@0.30.4(rollup@4.54.0)': dependencies: '@mapbox/node-pre-gyp': 2.0.3 - '@rollup/pluginutils': 5.3.0(rollup@4.53.5) + '@rollup/pluginutils': 5.3.0(rollup@4.54.0) acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) async-sema: 3.1.1 @@ -6198,23 +6195,23 @@ snapshots: - rollup - supports-color - '@vitejs/plugin-vue-jsx@5.1.2(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue-jsx@5.1.3(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@babel/core': 7.28.5 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5) '@babel/plugin-transform-typescript': 7.28.5(@babel/core@7.28.5) - '@rolldown/pluginutils': 1.0.0-beta.55 + '@rolldown/pluginutils': 1.0.0-beta.57 '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.28.5) vite: 7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2) - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@6.0.3(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vitejs/plugin-vue@6.0.3(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@rolldown/pluginutils': 1.0.0-beta.53 vite: 7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2) - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) '@vitest/expect@4.0.16': dependencies: @@ -6222,7 +6219,7 @@ snapshots: '@types/chai': 5.2.3 '@vitest/spy': 4.0.16 '@vitest/utils': 4.0.16 - chai: 6.2.1 + chai: 6.2.2 tinyrainbow: 3.0.3 '@vitest/mocker@4.0.16(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))': @@ -6255,27 +6252,27 @@ snapshots: '@vitest/pretty-format': 4.0.16 tinyrainbow: 3.0.3 - '@volar/language-core@2.4.26': + '@volar/language-core@2.4.27': dependencies: - '@volar/source-map': 2.4.26 + '@volar/source-map': 2.4.27 - '@volar/source-map@2.4.26': {} + '@volar/source-map@2.4.27': {} - '@volar/typescript@2.4.26': + '@volar/typescript@2.4.27': dependencies: - '@volar/language-core': 2.4.26 + '@volar/language-core': 2.4.27 path-browserify: 1.0.1 vscode-uri: 3.1.0 - '@vue-macros/common@3.1.1(vue@3.5.25(typescript@5.9.3))': + '@vue-macros/common@3.1.1(vue@3.5.26(typescript@5.9.3))': dependencies: - '@vue/compiler-sfc': 3.5.25 + '@vue/compiler-sfc': 3.5.26 ast-kit: 2.2.0 local-pkg: 1.1.2 magic-string-ast: 1.0.3 unplugin-utils: 0.3.1 optionalDependencies: - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) '@vue/babel-helper-vue-transform-on@2.0.1': {} @@ -6289,7 +6286,7 @@ snapshots: '@babel/types': 7.28.5 '@vue/babel-helper-vue-transform-on': 2.0.1 '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.28.5) - '@vue/shared': 3.5.25 + '@vue/shared': 3.5.26 optionalDependencies: '@babel/core': 7.28.5 transitivePeerDependencies: @@ -6302,39 +6299,39 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/parser': 7.28.5 - '@vue/compiler-sfc': 3.5.25 + '@vue/compiler-sfc': 3.5.26 transitivePeerDependencies: - supports-color - '@vue/compiler-core@3.5.25': + '@vue/compiler-core@3.5.26': dependencies: '@babel/parser': 7.28.5 - '@vue/shared': 3.5.25 - entities: 4.5.0 + '@vue/shared': 3.5.26 + entities: 7.0.0 estree-walker: 2.0.2 source-map-js: 1.2.1 - '@vue/compiler-dom@3.5.25': + '@vue/compiler-dom@3.5.26': dependencies: - '@vue/compiler-core': 3.5.25 - '@vue/shared': 3.5.25 + '@vue/compiler-core': 3.5.26 + '@vue/shared': 3.5.26 - '@vue/compiler-sfc@3.5.25': + '@vue/compiler-sfc@3.5.26': dependencies: '@babel/parser': 7.28.5 - '@vue/compiler-core': 3.5.25 - '@vue/compiler-dom': 3.5.25 - '@vue/compiler-ssr': 3.5.25 - '@vue/shared': 3.5.25 + '@vue/compiler-core': 3.5.26 + '@vue/compiler-dom': 3.5.26 + '@vue/compiler-ssr': 3.5.26 + '@vue/shared': 3.5.26 estree-walker: 2.0.2 magic-string: 0.30.21 postcss: 8.5.6 source-map-js: 1.2.1 - '@vue/compiler-ssr@3.5.25': + '@vue/compiler-ssr@3.5.26': dependencies: - '@vue/compiler-dom': 3.5.25 - '@vue/shared': 3.5.25 + '@vue/compiler-dom': 3.5.26 + '@vue/shared': 3.5.26 '@vue/devtools-api@6.6.4': {} @@ -6342,7 +6339,7 @@ snapshots: dependencies: '@vue/devtools-kit': 7.7.9 - '@vue/devtools-core@8.0.5(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vue/devtools-core@8.0.5(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@vue/devtools-kit': 8.0.5 '@vue/devtools-shared': 8.0.5 @@ -6350,7 +6347,7 @@ snapshots: nanoid: 5.1.6 pathe: 2.0.3 vite-hot-client: 2.1.0(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)) - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) transitivePeerDependencies: - vite @@ -6382,65 +6379,63 @@ snapshots: dependencies: rfdc: 1.4.1 - '@vue/language-core@3.1.8(typescript@5.9.3)': + '@vue/language-core@3.2.1': dependencies: - '@volar/language-core': 2.4.26 - '@vue/compiler-dom': 3.5.25 - '@vue/shared': 3.5.25 - alien-signals: 3.1.1 + '@volar/language-core': 2.4.27 + '@vue/compiler-dom': 3.5.26 + '@vue/shared': 3.5.26 + alien-signals: 3.1.2 muggle-string: 0.4.1 path-browserify: 1.0.1 picomatch: 4.0.3 - optionalDependencies: - typescript: 5.9.3 - '@vue/reactivity@3.5.25': + '@vue/reactivity@3.5.26': dependencies: - '@vue/shared': 3.5.25 + '@vue/shared': 3.5.26 - '@vue/runtime-core@3.5.25': + '@vue/runtime-core@3.5.26': dependencies: - '@vue/reactivity': 3.5.25 - '@vue/shared': 3.5.25 + '@vue/reactivity': 3.5.26 + '@vue/shared': 3.5.26 - '@vue/runtime-dom@3.5.25': + '@vue/runtime-dom@3.5.26': dependencies: - '@vue/reactivity': 3.5.25 - '@vue/runtime-core': 3.5.25 - '@vue/shared': 3.5.25 + '@vue/reactivity': 3.5.26 + '@vue/runtime-core': 3.5.26 + '@vue/shared': 3.5.26 csstype: 3.2.3 - '@vue/server-renderer@3.5.25(vue@3.5.25(typescript@5.9.3))': + '@vue/server-renderer@3.5.26(vue@3.5.26(typescript@5.9.3))': dependencies: - '@vue/compiler-ssr': 3.5.25 - '@vue/shared': 3.5.25 - vue: 3.5.25(typescript@5.9.3) + '@vue/compiler-ssr': 3.5.26 + '@vue/shared': 3.5.26 + vue: 3.5.26(typescript@5.9.3) - '@vue/shared@3.5.25': {} + '@vue/shared@3.5.26': {} - '@vueuse/core@14.1.0(vue@3.5.25(typescript@5.9.3))': + '@vueuse/core@14.1.0(vue@3.5.26(typescript@5.9.3))': dependencies: '@types/web-bluetooth': 0.0.21 '@vueuse/metadata': 14.1.0 - '@vueuse/shared': 14.1.0(vue@3.5.25(typescript@5.9.3)) - vue: 3.5.25(typescript@5.9.3) + '@vueuse/shared': 14.1.0(vue@3.5.26(typescript@5.9.3)) + vue: 3.5.26(typescript@5.9.3) '@vueuse/metadata@14.1.0': {} - '@vueuse/nuxt@14.1.0(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))': + '@vueuse/nuxt@14.1.0(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3))': dependencies: '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@vueuse/core': 14.1.0(vue@3.5.25(typescript@5.9.3)) + '@vueuse/core': 14.1.0(vue@3.5.26(typescript@5.9.3)) '@vueuse/metadata': 14.1.0 local-pkg: 1.1.2 - nuxt: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2) - vue: 3.5.25(typescript@5.9.3) + nuxt: 4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2) + vue: 3.5.26(typescript@5.9.3) transitivePeerDependencies: - magicast - '@vueuse/shared@14.1.0(vue@3.5.25(typescript@5.9.3))': + '@vueuse/shared@14.1.0(vue@3.5.26(typescript@5.9.3))': dependencies: - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) '@whatwg-node/disposablestack@0.0.6': dependencies: @@ -6475,11 +6470,9 @@ snapshots: tslib: 2.8.1 optional: true - '@xterm/addon-fit@0.10.0(@xterm/xterm@5.5.0)': - dependencies: - '@xterm/xterm': 5.5.0 + '@xterm/addon-fit@0.11.0': {} - '@xterm/xterm@5.5.0': {} + '@xterm/xterm@6.0.0': {} abbrev@3.0.1: {} @@ -6506,7 +6499,7 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - alien-signals@3.1.1: {} + alien-signals@3.1.2: {} ansi-regex@5.0.1: {} @@ -6571,7 +6564,7 @@ snapshots: autoprefixer@10.4.23(postcss@8.5.6): dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001760 + caniuse-lite: 1.0.30001761 fraction.js: 5.3.4 picocolors: 1.1.1 postcss: 8.5.6 @@ -6585,7 +6578,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.9.9: {} + baseline-browser-mapping@2.9.11: {} bindings@1.5.0: dependencies: @@ -6610,8 +6603,8 @@ snapshots: browserslist@4.28.1: dependencies: - baseline-browser-mapping: 2.9.9 - caniuse-lite: 1.0.30001760 + baseline-browser-mapping: 2.9.11 + caniuse-lite: 1.0.30001761 electron-to-chromium: 1.5.267 node-releases: 2.0.27 update-browserslist-db: 1.2.3(browserslist@4.28.1) @@ -6675,13 +6668,13 @@ snapshots: caniuse-api@3.0.0: dependencies: browserslist: 4.28.1 - caniuse-lite: 1.0.30001760 + caniuse-lite: 1.0.30001761 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001760: {} + caniuse-lite@1.0.30001761: {} - chai@6.2.1: {} + chai@6.2.2: {} chalk@4.1.2: dependencies: @@ -6978,6 +6971,8 @@ snapshots: entities@4.5.0: {} + entities@7.0.0: {} + env-paths@3.0.0: optional: true @@ -7092,9 +7087,9 @@ snapshots: optionalDependencies: typescript: 5.9.3 - eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): + eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@typescript-eslint/types': 8.50.0 + '@typescript-eslint/types': 8.50.1 comment-parser: 1.4.1 debug: 4.4.3 eslint: 9.39.2(jiti@2.6.1) @@ -7105,7 +7100,7 @@ snapshots: stable-hash-x: 0.2.0 unrs-resolver: 1.11.1 optionalDependencies: - '@typescript-eslint/utils': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/utils': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) transitivePeerDependencies: - supports-color @@ -7162,7 +7157,7 @@ snapshots: semver: 7.7.3 strip-indent: 4.1.1 - eslint-plugin-vue@10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))): + eslint-plugin-vue@10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.2(jiti@2.6.1)))(@typescript-eslint/parser@8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.2(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.2(jiti@2.6.1))): dependencies: '@eslint-community/eslint-utils': 4.9.0(eslint@9.39.2(jiti@2.6.1)) eslint: 9.39.2(jiti@2.6.1) @@ -7174,11 +7169,11 @@ snapshots: xml-name-validator: 4.0.0 optionalDependencies: '@stylistic/eslint-plugin': 5.6.1(eslint@9.39.2(jiti@2.6.1)) - '@typescript-eslint/parser': 8.50.0(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) + '@typescript-eslint/parser': 8.50.1(eslint@9.39.2(jiti@2.6.1))(typescript@5.9.3) - eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.25)(eslint@9.39.2(jiti@2.6.1)): + eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.26)(eslint@9.39.2(jiti@2.6.1)): dependencies: - '@vue/compiler-sfc': 3.5.25 + '@vue/compiler-sfc': 3.5.26 eslint: 9.39.2(jiti@2.6.1) eslint-scope@8.4.0: @@ -7307,7 +7302,7 @@ snapshots: fast-npm-meta@0.4.7: {} - fastq@1.19.1: + fastq@1.20.1: dependencies: reusify: 1.1.0 @@ -7357,11 +7352,11 @@ snapshots: flatted@3.3.3: {} - floating-vue@5.2.2(@nuxt/kit@3.20.2(magicast@0.5.1))(vue@3.5.25(typescript@5.9.3)): + floating-vue@5.2.2(@nuxt/kit@3.20.2(magicast@0.5.1))(vue@3.5.26(typescript@5.9.3)): dependencies: '@floating-ui/dom': 1.1.1 - vue: 3.5.25(typescript@5.9.3) - vue-resize: 2.0.0-alpha.1(vue@3.5.25(typescript@5.9.3)) + vue: 3.5.26(typescript@5.9.3) + vue-resize: 2.0.0-alpha.1(vue@3.5.26(typescript@5.9.3)) optionalDependencies: '@nuxt/kit': 3.20.2(magicast@0.5.1) @@ -7910,14 +7905,14 @@ snapshots: nitropack@2.12.9(@netlify/blobs@9.1.2): dependencies: '@cloudflare/kv-asset-handler': 0.4.1 - '@rollup/plugin-alias': 5.1.1(rollup@4.53.5) - '@rollup/plugin-commonjs': 28.0.9(rollup@4.53.5) - '@rollup/plugin-inject': 5.0.5(rollup@4.53.5) - '@rollup/plugin-json': 6.1.0(rollup@4.53.5) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.53.5) - '@rollup/plugin-replace': 6.0.3(rollup@4.53.5) - '@rollup/plugin-terser': 0.4.4(rollup@4.53.5) - '@vercel/nft': 0.30.4(rollup@4.53.5) + '@rollup/plugin-alias': 5.1.1(rollup@4.54.0) + '@rollup/plugin-commonjs': 28.0.9(rollup@4.54.0) + '@rollup/plugin-inject': 5.0.5(rollup@4.54.0) + '@rollup/plugin-json': 6.1.0(rollup@4.54.0) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.54.0) + '@rollup/plugin-replace': 6.0.3(rollup@4.54.0) + '@rollup/plugin-terser': 0.4.4(rollup@4.54.0) + '@vercel/nft': 0.30.4(rollup@4.54.0) archiver: 7.0.1 c12: 3.3.3(magicast@0.5.1) chokidar: 4.0.3 @@ -7959,8 +7954,8 @@ snapshots: pkg-types: 2.3.0 pretty-bytes: 7.1.0 radix3: 1.1.2 - rollup: 4.53.5 - rollup-plugin-visualizer: 6.0.5(rollup@4.53.5) + rollup: 4.54.0 + rollup-plugin-visualizer: 6.0.5(rollup@4.54.0) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 @@ -8054,18 +8049,18 @@ snapshots: dependencies: boolbase: 1.0.0 - nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2): + nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2): dependencies: '@dxup/nuxt': 0.2.2(magicast@0.5.1) - '@nuxt/cli': 3.31.2(cac@6.7.14)(magicast@0.5.1) - '@nuxt/devtools': 3.1.1(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)) + '@nuxt/cli': 3.31.3(cac@6.7.14)(magicast@0.5.1) + '@nuxt/devtools': 3.1.1(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)) '@nuxt/kit': 4.2.2(magicast@0.5.1) - '@nuxt/nitro-server': 4.2.2(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3) + '@nuxt/nitro-server': 4.2.2(@netlify/blobs@9.1.2)(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3) '@nuxt/schema': 4.2.2 '@nuxt/telemetry': 2.6.6(magicast@0.5.1) - '@nuxt/vite-builder': 4.2.2(@types/node@24.3.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.53.5)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.8(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2) - '@unhead/vue': 2.0.19(vue@3.5.25(typescript@5.9.3)) - '@vue/shared': 3.5.25 + '@nuxt/vite-builder': 4.2.2(@types/node@24.3.0)(eslint@9.39.2(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.3.0)(@vue/compiler-sfc@3.5.26)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.2(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.54.0)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.2.1(typescript@5.9.3))(vue@3.5.26(typescript@5.9.3))(yaml@2.8.2) + '@unhead/vue': 2.1.1(vue@3.5.26(typescript@5.9.3)) + '@vue/shared': 3.5.26 c12: 3.3.3(magicast@0.5.1) chokidar: 5.0.0 compatx: 0.2.0 @@ -8109,10 +8104,10 @@ snapshots: unctx: 2.5.0 unimport: 5.6.0 unplugin: 2.3.11 - unplugin-vue-router: 0.19.1(@vue/compiler-sfc@3.5.25)(typescript@5.9.3)(vue-router@4.6.4(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3)) + unplugin-vue-router: 0.19.1(@vue/compiler-sfc@3.5.26)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)) untyped: 2.0.0 - vue: 3.5.25(typescript@5.9.3) - vue-router: 4.6.4(vue@3.5.25(typescript@5.9.3)) + vue: 3.5.26(typescript@5.9.3) + vue-router: 4.6.4(vue@3.5.26(typescript@5.9.3)) optionalDependencies: '@parcel/watcher': 2.5.1 '@types/node': 24.3.0 @@ -8379,10 +8374,10 @@ snapshots: picomatch@4.0.3: {} - pinia@3.0.4(typescript@5.9.3)(vue@3.5.25(typescript@5.9.3)): + pinia@3.0.4(typescript@5.9.3)(vue@3.5.26(typescript@5.9.3)): dependencies: '@vue/devtools-api': 7.7.9 - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) optionalDependencies: typescript: 5.9.3 @@ -8678,41 +8673,41 @@ snapshots: rfdc@1.4.1: {} - rollup-plugin-visualizer@6.0.5(rollup@4.53.5): + rollup-plugin-visualizer@6.0.5(rollup@4.54.0): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rollup: 4.53.5 + rollup: 4.54.0 - rollup@4.53.5: + rollup@4.54.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.53.5 - '@rollup/rollup-android-arm64': 4.53.5 - '@rollup/rollup-darwin-arm64': 4.53.5 - '@rollup/rollup-darwin-x64': 4.53.5 - '@rollup/rollup-freebsd-arm64': 4.53.5 - '@rollup/rollup-freebsd-x64': 4.53.5 - '@rollup/rollup-linux-arm-gnueabihf': 4.53.5 - '@rollup/rollup-linux-arm-musleabihf': 4.53.5 - '@rollup/rollup-linux-arm64-gnu': 4.53.5 - '@rollup/rollup-linux-arm64-musl': 4.53.5 - '@rollup/rollup-linux-loong64-gnu': 4.53.5 - '@rollup/rollup-linux-ppc64-gnu': 4.53.5 - '@rollup/rollup-linux-riscv64-gnu': 4.53.5 - '@rollup/rollup-linux-riscv64-musl': 4.53.5 - '@rollup/rollup-linux-s390x-gnu': 4.53.5 - '@rollup/rollup-linux-x64-gnu': 4.53.5 - '@rollup/rollup-linux-x64-musl': 4.53.5 - '@rollup/rollup-openharmony-arm64': 4.53.5 - '@rollup/rollup-win32-arm64-msvc': 4.53.5 - '@rollup/rollup-win32-ia32-msvc': 4.53.5 - '@rollup/rollup-win32-x64-gnu': 4.53.5 - '@rollup/rollup-win32-x64-msvc': 4.53.5 + '@rollup/rollup-android-arm-eabi': 4.54.0 + '@rollup/rollup-android-arm64': 4.54.0 + '@rollup/rollup-darwin-arm64': 4.54.0 + '@rollup/rollup-darwin-x64': 4.54.0 + '@rollup/rollup-freebsd-arm64': 4.54.0 + '@rollup/rollup-freebsd-x64': 4.54.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.54.0 + '@rollup/rollup-linux-arm-musleabihf': 4.54.0 + '@rollup/rollup-linux-arm64-gnu': 4.54.0 + '@rollup/rollup-linux-arm64-musl': 4.54.0 + '@rollup/rollup-linux-loong64-gnu': 4.54.0 + '@rollup/rollup-linux-ppc64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-gnu': 4.54.0 + '@rollup/rollup-linux-riscv64-musl': 4.54.0 + '@rollup/rollup-linux-s390x-gnu': 4.54.0 + '@rollup/rollup-linux-x64-gnu': 4.54.0 + '@rollup/rollup-linux-x64-musl': 4.54.0 + '@rollup/rollup-openharmony-arm64': 4.54.0 + '@rollup/rollup-win32-arm64-msvc': 4.54.0 + '@rollup/rollup-win32-ia32-msvc': 4.54.0 + '@rollup/rollup-win32-x64-gnu': 4.54.0 + '@rollup/rollup-win32-x64-msvc': 4.54.0 fsevents: 2.3.3 run-applescript@7.1.0: {} @@ -8761,7 +8756,7 @@ snapshots: dependencies: randombytes: 2.1.0 - seroval@1.4.0: {} + seroval@1.4.1: {} serve-placeholder@2.0.2: dependencies: @@ -9059,7 +9054,7 @@ snapshots: dependencies: pathe: 2.0.3 - unhead@2.0.19: + unhead@2.1.1: dependencies: hookable: 5.5.3 @@ -9095,12 +9090,12 @@ snapshots: pathe: 2.0.3 picomatch: 4.0.3 - unplugin-vue-router@0.19.1(@vue/compiler-sfc@3.5.25)(typescript@5.9.3)(vue-router@4.6.4(vue@3.5.25(typescript@5.9.3)))(vue@3.5.25(typescript@5.9.3)): + unplugin-vue-router@0.19.1(@vue/compiler-sfc@3.5.26)(vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)))(vue@3.5.26(typescript@5.9.3)): dependencies: '@babel/generator': 7.28.5 - '@vue-macros/common': 3.1.1(vue@3.5.25(typescript@5.9.3)) - '@vue/compiler-sfc': 3.5.25 - '@vue/language-core': 3.1.8(typescript@5.9.3) + '@vue-macros/common': 3.1.1(vue@3.5.26(typescript@5.9.3)) + '@vue/compiler-sfc': 3.5.26 + '@vue/language-core': 3.2.1 ast-walker-scope: 0.8.3 chokidar: 5.0.0 json5: 2.2.3 @@ -9116,9 +9111,8 @@ snapshots: unplugin-utils: 0.3.1 yaml: 2.8.2 optionalDependencies: - vue-router: 4.6.4(vue@3.5.25(typescript@5.9.3)) + vue-router: 4.6.4(vue@3.5.26(typescript@5.9.3)) transitivePeerDependencies: - - typescript - vue unplugin@2.3.11: @@ -9242,7 +9236,7 @@ snapshots: - tsx - yaml - vite-plugin-checker@0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.8(typescript@5.9.3)): + vite-plugin-checker@0.12.0(eslint@9.39.2(jiti@2.6.1))(optionator@0.9.4)(typescript@5.9.3)(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.2.1(typescript@5.9.3)): dependencies: '@babel/code-frame': 7.27.1 chokidar: 4.0.3 @@ -9257,7 +9251,7 @@ snapshots: eslint: 9.39.2(jiti@2.6.1) optionator: 0.9.4 typescript: 5.9.3 - vue-tsc: 3.1.8(typescript@5.9.3) + vue-tsc: 3.2.1(typescript@5.9.3) vite-plugin-inspect@11.3.3(@nuxt/kit@4.2.2(magicast@0.5.1))(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)): dependencies: @@ -9276,7 +9270,7 @@ snapshots: transitivePeerDependencies: - supports-color - vite-plugin-vue-tracer@1.2.0(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3)): + vite-plugin-vue-tracer@1.2.0(vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.26(typescript@5.9.3)): dependencies: estree-walker: 3.0.3 exsolve: 1.0.8 @@ -9284,7 +9278,7 @@ snapshots: pathe: 2.0.3 source-map-js: 1.2.1 vite: 7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2) - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) vite@7.3.0(@types/node@24.3.0)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2): dependencies: @@ -9292,7 +9286,7 @@ snapshots: fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.53.5 + rollup: 4.54.0 tinyglobby: 0.2.15 optionalDependencies: '@types/node': 24.3.0 @@ -9358,39 +9352,39 @@ snapshots: transitivePeerDependencies: - supports-color - vue-resize@2.0.0-alpha.1(vue@3.5.25(typescript@5.9.3)): + vue-resize@2.0.0-alpha.1(vue@3.5.26(typescript@5.9.3)): dependencies: - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) - vue-router@4.6.4(vue@3.5.25(typescript@5.9.3)): + vue-router@4.6.4(vue@3.5.26(typescript@5.9.3)): dependencies: '@vue/devtools-api': 6.6.4 - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) - vue-toastification@2.0.0-rc.5(vue@3.5.25(typescript@5.9.3)): + vue-toastification@2.0.0-rc.5(vue@3.5.26(typescript@5.9.3)): dependencies: - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) - vue-tsc@3.1.8(typescript@5.9.3): + vue-tsc@3.2.1(typescript@5.9.3): dependencies: - '@volar/typescript': 2.4.26 - '@vue/language-core': 3.1.8(typescript@5.9.3) + '@volar/typescript': 2.4.27 + '@vue/language-core': 3.2.1 typescript: 5.9.3 - vue@3.5.25(typescript@5.9.3): + vue@3.5.26(typescript@5.9.3): dependencies: - '@vue/compiler-dom': 3.5.25 - '@vue/compiler-sfc': 3.5.25 - '@vue/runtime-dom': 3.5.25 - '@vue/server-renderer': 3.5.25(vue@3.5.25(typescript@5.9.3)) - '@vue/shared': 3.5.25 + '@vue/compiler-dom': 3.5.26 + '@vue/compiler-sfc': 3.5.26 + '@vue/runtime-dom': 3.5.26 + '@vue/server-renderer': 3.5.26(vue@3.5.26(typescript@5.9.3)) + '@vue/shared': 3.5.26 optionalDependencies: typescript: 5.9.3 - vuedraggable@4.1.0(vue@3.5.25(typescript@5.9.3)): + vuedraggable@4.1.0(vue@3.5.26(typescript@5.9.3)): dependencies: sortablejs: 1.14.0 - vue: 3.5.25(typescript@5.9.3) + vue: 3.5.26(typescript@5.9.3) web-streams-polyfill@3.3.3: optional: true