diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 4c51e8df..8092db4a 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -117,10 +117,12 @@ jobs:
working-directory: ui
env:
NODE_ENV: production
- run: pnpm install --frozen-lockfile --prod
+ run: pnpm install --frozen-lockfile --prod --ignore-scripts
- name: Build frontend
working-directory: ui
+ env:
+ NODE_ENV: production
run: pnpm run generate
- name: Install GitPython
diff --git a/API.md b/API.md
index 58ba2dd1..ad89365b 100644
--- a/API.md
+++ b/API.md
@@ -37,7 +37,7 @@ This document describes the available endpoints and their usage. All endpoints r
- [POST /api/tasks/{id}/mark](#post-apitasksidmark)
- [DELETE /api/tasks/{id}/mark](#delete-apitasksidmark)
- [POST /api/tasks/{id}/metadata](#post-apitasksidmetadata)
- - [POST /api/tasks/{id}/toggle](#post-apitasksidtoggle)
+ - [PATCH /api/tasks/{id}](#patch-apitasksid)
- [GET /api/task\_definitions/](#get-apitask_definitions)
- [GET /api/task\_definitions/{identifier}](#get-apitask_definitionsidentifier)
- [POST /api/task\_definitions/](#post-apitask_definitions)
@@ -783,11 +783,29 @@ or on error
{
"url": "https://example.com/feed", // required, validated URL
"preset": "news-preset", // optional preset override - In real scenarios, the preset come from the task.
- "handler": "GenericTaskHandler" // optional explicit handler class name, in real scenarios, the handler is resolved automatically.
+ "handler": "GenericTaskHandler", // optional explicit handler class name, in real scenarios, the handler is resolved automatically.
+ "static_only": false // optional, if true performs only can_handle check without extracting items (faster, lightweight)
}
```
-**Response (success)**:
+**Notes**:
+- When `static_only` is `true`, the endpoint only checks if a handler can process the URL using the `can_handle` method
+- This is much faster and lighter than the full inspection which calls the handler's `extract` method
+- Use `static_only: true` for quick validation checks (e.g., UI indicators)
+- Use `static_only: false` (default) for full inspection with item extraction
+
+**Response (success with static_only: true)**:
+```json
+{
+ "items": [],
+ "metadata": {
+ "matched": true,
+ "handler": "GenericTaskHandler"
+ }
+}
+```
+
+**Response (success with static_only: false)**:
```json
{
"matched": true,
@@ -924,42 +942,63 @@ or
---
-### POST /api/tasks/{id}/toggle
-**Purpose**: Toggle the enabled/disabled status of a scheduled task.
+### PATCH /api/tasks/{id}
+**Purpose**: Update specific fields of a scheduled task.
**Path Parameter**:
- `id`: Task ID.
+**Request Body**:
+JSON object with fields to update:
+```json
+{
+ "enabled": false,
+ "handler_enabled": true,
+ "timer": "0 */6 * * *",
+ "preset": "audio",
+ "folder": "downloads/music",
+ "template": "%(title)s.%(ext)s",
+ "cli": "--extract-audio",
+ "auto_start": true
+}
+```
+
+**Notes**:
+- Only include fields you want to update
+- All fields are optional
+
**Response**:
-Returns the updated task object:
+Returns the updated task
```json
{
"id": "task_id",
"name": "Task Name",
"url": "https://example.com/playlist",
- "preset": "default",
- "folder": "",
- "template": "",
- "cli": "",
+ "preset": "audio",
+ "folder": "downloads/music",
+ "template": "%(title)s.%(ext)s",
+ "cli": "--extract-audio",
"timer": "0 */6 * * *",
"auto_start": true,
"handler_enabled": true,
"enabled": false
}
```
-or
+
+**Error Responses**:
```json
{ "error": "Task 'task_id' does not exist." }
+{ "error": "Invalid JSON in request body.", "message": "..." }
+{ "error": "Request body must be a JSON object." }
+{ "error": "No valid fields to update." }
+{ "error": "Validation failed: Invalid timer format." }
```
-**Notes**:
-- When a task is disabled (`enabled: false`), it will not be executed by the scheduler
-
**Status Codes**:
-- `200 OK` - Task status toggled successfully, returns updated task object
-- `400 Bad Request` - Missing task ID
+- `200 OK` - Task updated successfully
+- `400 Bad Request` - Missing task ID, invalid JSON, no valid fields, or validation error
- `404 Not Found` - Task does not exist
-- `500 Internal Server Error` - Failed to update task status
+- `500 Internal Server Error` - Failed to update task
---
diff --git a/Dockerfile b/Dockerfile
index 02f0d900..d1791972 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -3,7 +3,12 @@ FROM node:lts-alpine AS node_builder
WORKDIR /app
COPY ui ./
-RUN if [ ! -f "/app/exported/index.html" ]; then npm install --production --prefer-offline --frozen-lockfile && npm run generate; else echo "Skipping UI build, already built."; fi
+ENV NODE_ENV=production
+RUN if [ ! -f "/app/exported/index.html" ]; then \
+ npm install -g pnpm && \
+ NODE_ENV=production pnpm install --frozen-lockfile --prod --ignore-scripts && \
+ pnpm run generate; \
+ else echo "Skipping UI build, already built."; fi
FROM python:3.13-bookworm AS python_builder
@@ -17,8 +22,7 @@ ENV UV_CACHE_DIR=/root/.cache/uv
ENV DEBIAN_FRONTEND=noninteractive
ENV UV_INSTALL_DIR=/usr/bin
-SHELL ["/bin/bash","-lc"]
-RUN echo 1 && curl -LsSf https://astral.sh/uv/install.sh | sh
+COPY --from=astral/uv:latest /uv /usr/bin/
WORKDIR /opt/
diff --git a/app/library/DownloadQueue.py b/app/library/DownloadQueue.py
index b3d04546..245c6d58 100644
--- a/app/library/DownloadQueue.py
+++ b/app/library/DownloadQueue.py
@@ -828,6 +828,17 @@ class DownloadQueue(metaclass=Singleton):
)
return {"status": "ok"}
+ if condition.extras.get("set_preset") and (target_preset := condition.extras.get("set_preset")):
+ if Presets.get_instance().has(target_preset):
+ log_message: str = f"Switching preset from '{item.preset}' to '{target_preset}' for '{item_title}' as per condition '{condition.name}'."
+ LOG.info(log_message)
+ self._notify.emit(Events.LOG_INFO, data={}, title="Preset Switched", message=log_message)
+ item = item.new_with(preset=target_preset)
+ else:
+ LOG.warning(
+ f"Preset '{target_preset}' specified in condition '{condition.name}' does not exist. Ignoring set_preset."
+ )
+
return await self.add(item=item.new_with(requeued=True, cli=condition.cli), already=already)
_status, _msg = ytdlp_reject(entry=entry, yt_params=yt_conf)
diff --git a/app/library/Tasks.py b/app/library/Tasks.py
index d1dea321..e6cf86da 100644
--- a/app/library/Tasks.py
+++ b/app/library/Tasks.py
@@ -884,6 +884,7 @@ class HandleTask:
url: str,
preset: str | None = None,
handler_name: str | None = None,
+ static_only: bool = False,
) -> TaskResult | TaskFailure:
if not self._handlers:
self._handlers = self._discover()
@@ -937,6 +938,9 @@ class HandleTask:
base_metadata: dict[str, Any] = {"matched": True, "handler": handler_cls.__name__}
+ if static_only:
+ return TaskResult(items=[], metadata=base_metadata)
+
try:
extraction: TaskResult | TaskFailure = await services.handle_async(
handler=handler_cls.extract, task=task, config=self._config
diff --git a/app/library/YTDLPOpts.py b/app/library/YTDLPOpts.py
index 7d5d323c..8b678d12 100644
--- a/app/library/YTDLPOpts.py
+++ b/app/library/YTDLPOpts.py
@@ -156,7 +156,7 @@ class YTDLPCli:
if self.preset:
if self.preset.cookies and cookie_file is None:
- cookie_file = self.preset.get_cookie_file(config=self._config)
+ cookie_file = self.preset.get_cookies_file(config=self._config)
if self.preset.folder and save_path is None:
save_path = str(Path(self._config.download_path) / self.preset.folder.lstrip("/"))
diff --git a/app/routes/api/tasks.py b/app/routes/api/tasks.py
index 58a29081..e6de60d9 100644
--- a/app/routes/api/tasks.py
+++ b/app/routes/api/tasks.py
@@ -20,22 +20,38 @@ LOG: logging.Logger = logging.getLogger(__name__)
@route("POST", "api/tasks/inspect", "task_handler_inspect")
async def task_handler_inspect(request: Request, tasks: Tasks, encoder: Encoder, config: Config) -> Response:
+ """
+ Check if handler can process the given URL.
+
+ Args:
+ request (Request): The request object.
+ tasks (Tasks): The tasks instance.
+ encoder (Encoder): The encoder instance.
+ config (Config): The config instance.
+
+ Returns:
+ Response: The response object.
+
+ """
data = await request.json()
url: str | None = data.get("url") if isinstance(data, dict) else None
if not url:
return web.json_response({"error": "url is required."}, status=web.HTTPBadRequest.status_code)
- try:
- validate_url(url, allow_internal=config.allow_internal_urls)
- except ValueError as e:
- return web.json_response({"error": str(e)}, status=web.HTTPBadRequest.status_code)
+
+ static_only: bool = data.get("static_only", False) if isinstance(data, dict) else False
+ if not static_only:
+ try:
+ validate_url(url, allow_internal=config.allow_internal_urls)
+ except ValueError as e:
+ return web.json_response({"error": str(e)}, status=web.HTTPBadRequest.status_code)
preset: str = data.get("preset", "") if isinstance(data, dict) else ""
handler_name: str | None = data.get("handler") if isinstance(data, dict) else None
try:
result: TaskResult | TaskFailure = await tasks.get_handler().inspect(
- url=url, preset=preset, handler_name=handler_name
+ url=url, preset=preset, handler_name=handler_name, static_only=static_only
)
except Exception as e:
LOG.exception(e)
@@ -345,10 +361,10 @@ async def task_metadata(request: Request, config: Config, encoder: Encoder) -> R
return web.json_response(data={"error": str(e)}, status=web.HTTPBadRequest.status_code)
-@route("POST", "api/tasks/{id}/toggle", "tasks_toggle_enabled")
-async def task_toggle_enabled(request: Request, encoder: Encoder) -> Response:
+@route("PATCH", "api/tasks/{id}", "tasks_update")
+async def task_update(request: Request, encoder: Encoder) -> Response:
"""
- Toggle the enabled status of a task.
+ Update specific fields of a task.
Args:
request (Request): The request object.
@@ -358,11 +374,23 @@ async def task_toggle_enabled(request: Request, encoder: Encoder) -> Response:
Response: The response object
"""
- task_id: str = request.match_info.get("id", None)
-
- if not task_id:
+ if not (task_id := request.match_info.get("id", None)):
return web.json_response(data={"error": "No task id."}, status=web.HTTPBadRequest.status_code)
+ try:
+ data = await request.json()
+ except Exception as e:
+ return web.json_response(
+ data={"error": "Invalid JSON in request body.", "message": str(e)},
+ status=web.HTTPBadRequest.status_code,
+ )
+
+ if not isinstance(data, dict):
+ return web.json_response(
+ {"error": "Request body must be a JSON object."},
+ status=web.HTTPBadRequest.status_code,
+ )
+
tasks: Tasks = Tasks.get_instance()
try:
task: Task | None = tasks.get(task_id)
@@ -371,13 +399,34 @@ async def task_toggle_enabled(request: Request, encoder: Encoder) -> Response:
data={"error": f"Task '{task_id}' does not exist."}, status=web.HTTPNotFound.status_code
)
- task.enabled = not task.enabled
+ task_dict: dict = task.serialize()
+ protected_fields: set[str] = {"id"}
+ updated: bool = False
+
+ for key, value in data.items():
+ if key in protected_fields or key not in task_dict:
+ continue
+
+ setattr(task, key, value)
+ updated = True
+
+ if not updated:
+ return web.json_response(
+ data={"error": "No valid fields to update."},
+ status=web.HTTPBadRequest.status_code,
+ )
+
+ try:
+ Tasks.validate(task)
+ except ValueError as e:
+ return web.json_response({"error": f"Validation failed: {e!s}"}, status=web.HTTPBadRequest.status_code)
+
tasks.save(tasks=tasks.get_all()).load()
- return web.json_response(data=tasks.get(task_id), status=web.HTTPOk.status_code, dumps=encoder.encode)
+ return web.json_response(data=task, status=web.HTTPOk.status_code, dumps=encoder.encode)
except Exception as e:
LOG.exception(e)
return web.json_response(
- data={"error": "Failed to toggle task status.", "message": str(e)},
+ data={"error": "Failed to update task.", "message": str(e)},
status=web.HTTPInternalServerError.status_code,
)
diff --git a/app/schema/conditions.json b/app/schema/conditions.json
index 54b4c2a0..7ebcb3ac 100644
--- a/app/schema/conditions.json
+++ b/app/schema/conditions.json
@@ -38,18 +38,20 @@
},
"examples": [
{
- "id": "c1e2d3f4-5678-1234-9abc-def012345678",
- "name": "Audio Only",
- "filter": "type=audio",
- "cli": "--extract-audio",
+ "id": "a2b3c4d5-6789-2345-0bcd-ef1234567890",
+ "name": "Long Videos",
+ "filter": "duration>3600",
"extras": {
- "priority": "high"
+ "ignore_download": true
}
},
{
- "id": "a2b3c4d5-6789-2345-0bcd-ef1234567890",
- "name": "Long Videos",
- "filter": "duration>3600"
+ "id": "b3c4d5e6-7890-3456-1cde-f23456789012",
+ "name": "Use Audio Preset for Music",
+ "filter": "categories~='Music'",
+ "extras": {
+ "set_preset": "audio-only"
+ }
}
]
}
diff --git a/app/tests/test_tasks.py b/app/tests/test_tasks.py
index 96292506..74c32c0c 100644
--- a/app/tests/test_tasks.py
+++ b/app/tests/test_tasks.py
@@ -921,3 +921,156 @@ class TestTasks:
# Verify download queue was NOT called (task was skipped)
mock_download_queue_instance.add.assert_not_called()
+
+
+class TestHandleTaskInspect:
+ """Test the HandleTask inspect method with static_only parameter."""
+
+ @pytest.mark.asyncio
+ @patch("app.library.Tasks.Config")
+ @patch("app.library.Tasks.EventBus")
+ @patch("app.library.Tasks.Scheduler")
+ @patch("app.library.Tasks.DownloadQueue")
+ @patch("app.library.Tasks.Services")
+ async def test_inspect_with_static_only_true(
+ self, mock_services, mock_download_queue, mock_scheduler, mock_eventbus, mock_config
+ ):
+ """Test inspect with static_only=True returns immediately after can_handle check."""
+ mock_config_instance = Mock(
+ debug=False, default_preset="default", config_path="/tmp", tasks_handler_timer="15 */1 * * *"
+ )
+ mock_config.get_instance.return_value = mock_config_instance
+ mock_eventbus.get_instance.return_value = Mock()
+ mock_scheduler.get_instance.return_value = Mock()
+ mock_download_queue.get_instance.return_value = Mock()
+
+ # Mock Services to simulate successful can_handle
+ mock_services_instance = Mock()
+ mock_services_instance.handle_sync = Mock(return_value=True)
+ mock_services_instance.handle_async = AsyncMock() # Should NOT be called with static_only=True
+ mock_services.get_instance.return_value = mock_services_instance
+
+ # Create a mock handler
+ mock_handler = Mock()
+ mock_handler.__name__ = "TestHandler"
+ mock_handler.can_handle = Mock(return_value=True)
+ mock_handler.extract = AsyncMock() # Should NOT be called with static_only=True
+
+ tasks = Tasks(file=None, config=mock_config_instance)
+ handler = tasks.get_handler()
+ handler._handlers = [mock_handler]
+
+ # Call inspect with static_only=True
+ result = await handler.inspect(
+ url="https://example.com/feed", preset="default", handler_name=None, static_only=True
+ )
+
+ # Verify result structure
+ assert hasattr(result, "items")
+ assert hasattr(result, "metadata")
+ assert result.items == []
+ assert result.metadata["matched"] is True
+ assert result.metadata["handler"] == "TestHandler"
+
+ # Verify handle_async (extract) was NOT called
+ mock_services_instance.handle_async.assert_not_called()
+
+ @pytest.mark.asyncio
+ @patch("app.library.Tasks.Config")
+ @patch("app.library.Tasks.EventBus")
+ @patch("app.library.Tasks.Scheduler")
+ @patch("app.library.Tasks.DownloadQueue")
+ @patch("app.library.Tasks.Services")
+ async def test_inspect_with_static_only_false(
+ self, mock_services, mock_download_queue, mock_scheduler, mock_eventbus, mock_config
+ ):
+ """Test inspect with static_only=False performs full extraction."""
+ from app.library.Tasks import TaskResult
+
+ mock_config_instance = Mock(
+ debug=False, default_preset="default", config_path="/tmp", tasks_handler_timer="15 */1 * * *"
+ )
+ mock_config.get_instance.return_value = mock_config_instance
+ mock_eventbus.get_instance.return_value = Mock()
+ mock_scheduler.get_instance.return_value = Mock()
+ mock_download_queue.get_instance.return_value = Mock()
+
+ # Mock Services
+ mock_services_instance = Mock()
+ mock_services_instance.handle_sync = Mock(return_value=True)
+
+ # Mock successful extract result
+ mock_extract_result = TaskResult(
+ items=[{"url": "https://example.com/video1", "title": "Video 1"}],
+ metadata={"raw_count": 1},
+ )
+ mock_services_instance.handle_async = AsyncMock(return_value=mock_extract_result)
+ mock_services.get_instance.return_value = mock_services_instance
+
+ # Create a mock handler
+ mock_handler = Mock()
+ mock_handler.__name__ = "TestHandler"
+ mock_handler.can_handle = Mock(return_value=True)
+ mock_handler.extract = AsyncMock(return_value=mock_extract_result)
+
+ tasks = Tasks(file=None, config=mock_config_instance)
+ handler = tasks.get_handler()
+ handler._handlers = [mock_handler]
+
+ # Call inspect with static_only=False (default)
+ result = await handler.inspect(url="https://example.com/feed", preset="default", handler_name=None)
+
+ # Verify result structure includes extracted items
+ assert hasattr(result, "items")
+ assert hasattr(result, "metadata")
+ assert len(result.items) > 0
+ assert result.metadata["matched"] is True
+ assert result.metadata["handler"] == "TestHandler"
+ assert result.metadata["supported"] is True
+
+ # Verify handle_async (extract) WAS called
+ mock_services_instance.handle_async.assert_called_once()
+
+ @pytest.mark.asyncio
+ @patch("app.library.Tasks.Config")
+ @patch("app.library.Tasks.EventBus")
+ @patch("app.library.Tasks.Scheduler")
+ @patch("app.library.Tasks.DownloadQueue")
+ @patch("app.library.Tasks.Services")
+ async def test_inspect_static_only_with_no_handler_match(
+ self, mock_services, mock_download_queue, mock_scheduler, mock_eventbus, mock_config
+ ):
+ """Test inspect with static_only=True when no handler matches."""
+ from app.library.Tasks import TaskFailure
+
+ mock_config_instance = Mock(
+ debug=False, default_preset="default", config_path="/tmp", tasks_handler_timer="15 */1 * * *"
+ )
+ mock_config.get_instance.return_value = mock_config_instance
+ mock_eventbus.get_instance.return_value = Mock()
+ mock_scheduler.get_instance.return_value = Mock()
+ mock_download_queue.get_instance.return_value = Mock()
+
+ # Mock Services to simulate failed can_handle
+ mock_services_instance = Mock()
+ mock_services_instance.handle_sync = Mock(return_value=False)
+ mock_services.get_instance.return_value = mock_services_instance
+
+ # Create a mock handler that won't match
+ mock_handler = Mock()
+ mock_handler.__name__ = "TestHandler"
+ mock_handler.can_handle = Mock(return_value=False)
+
+ tasks = Tasks(file=None, config=mock_config_instance)
+ handler = tasks.get_handler()
+ handler._handlers = [mock_handler]
+
+ # Call inspect with static_only=True
+ result = await handler.inspect(
+ url="https://unsupported.com/feed", preset="default", handler_name=None, static_only=True
+ )
+
+ # Verify result is a TaskFailure
+ assert isinstance(result, TaskFailure)
+ assert result.metadata["matched"] is False
+ assert result.metadata["handler"] is None
diff --git a/app/tests/test_ytdlpopts.py b/app/tests/test_ytdlpopts.py
index 8cc7a35f..a7e6d5e3 100644
--- a/app/tests/test_ytdlpopts.py
+++ b/app/tests/test_ytdlpopts.py
@@ -960,7 +960,7 @@ class TestYTDLPCli:
preset = Mock(spec=Preset)
preset.name = "test_preset"
preset.cookies = "preset_cookies"
- preset.get_cookie_file = Mock(return_value=mock_cookie_path)
+ preset.get_cookies_file = Mock(return_value=mock_cookie_path)
preset.folder = None
preset.template = None
preset.cli = None
@@ -972,7 +972,7 @@ class TestYTDLPCli:
cli = YTDLPCli(item=item)
command, _ = cli.build()
- preset.get_cookie_file.assert_called_once_with(config=mock_config_instance)
+ preset.get_cookies_file.assert_called_once_with(config=mock_config_instance)
assert "--cookies" in command
assert "/preset/cookies.txt" in command
diff --git a/ui/app/components/ConditionForm.vue b/ui/app/components/ConditionForm.vue
index c5e2e1af..15c9d5f8 100644
--- a/ui/app/components/ConditionForm.vue
+++ b/ui/app/components/ConditionForm.vue
@@ -164,6 +164,10 @@
YTPTube to ignore the download and directly mark the item as archived. this is useful
to skip certain kind of downloads.
+
The key set_preset with the name of an existing preset will instruct
+ YTPTube to switch the download to use the specified preset. This is useful
+ to apply different download settings based on content type or source.
+
diff --git a/ui/app/pages/tasks.vue b/ui/app/pages/tasks.vue
index 26673545..5bec5916 100644
--- a/ui/app/pages/tasks.vue
+++ b/ui/app/pages/tasks.vue
@@ -170,9 +170,13 @@
-
-
- {{ item.handler_enabled ? 'Enabled' : 'Disabled' }}
+
+
+
+
+ {{ item.handler_enabled !== false ? 'Enabled' : 'Disabled' }}
@@ -185,9 +189,13 @@
{{ tryParse(item.timer) }}
-
+
- No timer is set
+ No timer or handler
+
+
+
+ Handler only
@@ -278,10 +286,11 @@
:class="{ 'fa-circle-pause has-text-success': item.auto_start, 'fa-circle-play has-text-danger': !item.auto_start }" />
-
-
+
+
+ :class="{ 'has-text-success': item.handler_enabled !== false, 'has-text-danger': item.handler_enabled === false }" />
@@ -308,15 +317,19 @@
-
+
{{ item.timer }} - {{ tryParse(item.timer) }}
- No timer is set
+ Handler only
+ No timer or handler
@@ -458,12 +471,14 @@ import { useConfirm } from '~/composables/useConfirm'
import TaskInspect from '~/components/TaskInspect.vue'
import type { task_item, exported_task, error_response } from '~/types/tasks'
import { sleep } from '~/utils'
+import { useSessionCache } from '~/utils/cache'
const box = useConfirm()
const toast = useNotification()
const config = useConfigStore()
const socket = useSocketStore()
const { confirmDialog: cDialog } = useDialog()
+const sessionCache = useSessionCache()
const display_style = useStorage("tasks_display_style", "cards")
const isMobile = useMediaQuery({ maxWidth: 1024 })
@@ -527,6 +542,66 @@ watch(() => socket.isConnected, async () => {
}
})
+const CACHE_KEY = 'tasks:handler_support'
+const taskHandlerSupport = ref>(sessionCache.get(CACHE_KEY) || {})
+watch(taskHandlerSupport, (newValue) => sessionCache.set(CACHE_KEY, newValue), { deep: true })
+
+const getCacheKey = (task: task_item): string => `${task.id}:${task.url}`
+
+const cleanStaleCache = (currentTasks: Array) => {
+ const validKeys = new Set(currentTasks.map(task => getCacheKey(task)))
+ const cacheKeys = Object.keys(taskHandlerSupport.value)
+
+ for (const key of cacheKeys) {
+ if (!validKeys.has(key)) {
+ taskHandlerSupport.value[key] = undefined as any
+ }
+ }
+}
+
+const recheckHandlerSupport = async (updatedTasks: Array) => {
+ for (const task of updatedTasks) {
+ if (!task.timer && false !== task.handler_enabled) {
+ await checkHandlerSupport(task)
+ }
+ }
+}
+
+const checkHandlerSupport = async (task: task_item): Promise => {
+ const cacheKey = getCacheKey(task)
+
+ if (undefined !== taskHandlerSupport.value[cacheKey]) {
+ return taskHandlerSupport.value[cacheKey] as boolean
+ }
+
+ try {
+ const response = await request('/api/tasks/inspect', {
+ method: 'POST',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ url: task.url, static_only: true })
+ })
+ const data = await response.json()
+ const supported = true === data?.matched
+ taskHandlerSupport.value[cacheKey] = supported
+ return supported
+ } catch {
+ taskHandlerSupport.value[cacheKey] = false
+ return false
+ }
+}
+
+const willTaskBeProcessed = (task: task_item): boolean => {
+ if (false === task.enabled) {
+ return false
+ }
+
+ const hasTimer = !!(task.timer && task.timer.trim())
+ const cacheKey = getCacheKey(task)
+ const hasHandler = false !== task.handler_enabled && true === taskHandlerSupport.value[cacheKey]
+
+ return hasTimer || hasHandler
+}
+
const filteredTasks = computed(() => {
const q = query.value?.toLowerCase();
if (!q) return tasks.value;
@@ -551,6 +626,8 @@ const reloadContent = async (fromMounted: boolean = false) => {
}
tasks.value = data
+ cleanStaleCache(data)
+ await recheckHandlerSupport(data)
} catch (e) {
if (fromMounted) {
return
@@ -602,6 +679,8 @@ const updateTasks = async (items: Array) => {
}
tasks.value = data
+ cleanStaleCache(data)
+ await recheckHandlerSupport(data)
resetForm(true)
return true
} catch (e: any) {
@@ -686,7 +765,11 @@ const toggleEnabled = async (item: task_item) => {
const actionText = newStatus ? 'enable' : 'disable'
try {
- const response = await request(`/api/tasks/${item.id}/toggle`, { method: 'POST' })
+ const response = await request(`/api/tasks/${item.id}`, {
+ method: 'PATCH',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ enabled: newStatus })
+ })
const data = await response.json()
if (data?.error) {
@@ -702,6 +785,31 @@ const toggleEnabled = async (item: task_item) => {
}
}
+const toggleHandlerEnabled = async (item: task_item) => {
+ const newStatus = !item.handler_enabled
+ const actionText = newStatus ? 'enable' : 'disable'
+
+ try {
+ const response = await request(`/api/tasks/${item.id}`, {
+ method: 'PATCH',
+ headers: { 'Content-Type': 'application/json' },
+ body: JSON.stringify({ handler_enabled: newStatus })
+ })
+ const data = await response.json()
+
+ if (data?.error) {
+ toast.error(data.error)
+ return
+ }
+
+ item.handler_enabled = data.handler_enabled
+ const func = data.handler_enabled ? 'success' : 'warning'
+ toast[func](`Task handler for '${item.name}' ${data.handler_enabled ? 'enabled' : 'disabled'}.`)
+ } catch (e: any) {
+ toast.error(`Failed to ${actionText} task handler. ${e.message || 'Unknown error.'}`)
+ }
+}
+
const updateItem = async ({ reference, task, archive_all }: { reference?: string | null | undefined, task: task_item, archive_all?: boolean }) => {
if (reference) {
// -- find the task index.
diff --git a/ui/nuxt.config.ts b/ui/nuxt.config.ts
index 03c22fa7..92dc4f60 100644
--- a/ui/nuxt.config.ts
+++ b/ui/nuxt.config.ts
@@ -69,7 +69,7 @@ export default defineNuxtConfig({
'@vueuse/nuxt',
'floating-vue/nuxt',
process.env.NODE_ENV === 'development' ? '@nuxt/eslint' : '',
- ],
+ ].filter(Boolean),
nitro: {
output: {
diff --git a/ui/package.json b/ui/package.json
index 7a8e36b0..8476214d 100644
--- a/ui/package.json
+++ b/ui/package.json
@@ -54,10 +54,10 @@
"devDependencies": {
"@nuxt/eslint": "^1.11.0",
"@nuxt/eslint-config": "^1.11.0",
- "@typescript-eslint/parser": "^8.48.0",
+ "@typescript-eslint/parser": "^8.48.1",
"eslint": "^9.39.1",
"typescript": "^5.9.3",
- "vitest": "^4.0.14",
+ "vitest": "^4.0.15",
"vue-eslint-parser": "^10.2.0",
"vue-tsc": "^3.1.5"
}
diff --git a/ui/pnpm-lock.yaml b/ui/pnpm-lock.yaml
index b6bd82cb..45dc7890 100644
--- a/ui/pnpm-lock.yaml
+++ b/ui/pnpm-lock.yaml
@@ -16,7 +16,7 @@ importers:
version: 14.1.0(vue@3.5.25(typescript@5.9.3))
'@vueuse/nuxt':
specifier: ^14.1.0
- version: 14.1.0(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(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.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
'@xterm/addon-fit':
specifier: ^0.10.0
version: 0.10.0(@xterm/xterm@5.5.0)
@@ -52,7 +52,7 @@ importers:
version: 2.30.1
nuxt:
specifier: ^4.2.1
- version: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2)
+ version: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(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))
@@ -71,13 +71,13 @@ importers:
devDependencies:
'@nuxt/eslint':
specifier: ^1.11.0
- version: 1.11.0(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))
+ version: 1.11.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))
'@nuxt/eslint-config':
specifier: ^1.11.0
- version: 1.11.0(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ version: 1.11.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
'@typescript-eslint/parser':
- specifier: ^8.48.0
- version: 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ specifier: ^8.48.1
+ version: 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
eslint:
specifier: ^9.39.1
version: 9.39.1(jiti@2.6.1)
@@ -85,8 +85,8 @@ importers:
specifier: ^5.9.3
version: 5.9.3
vitest:
- specifier: ^4.0.14
- version: 4.0.14(@types/node@22.18.1)(jiti@2.6.1)(jsdom@27.0.0)(terser@5.44.1)(yaml@2.8.2)
+ specifier: ^4.0.15
+ version: 4.0.15(@types/node@22.18.1)(jiti@2.6.1)(jsdom@27.0.0)(terser@5.44.1)(yaml@2.8.2)
vue-eslint-parser:
specifier: ^10.2.0
version: 10.2.0(eslint@9.39.1(jiti@2.6.1))
@@ -231,12 +231,33 @@ 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==}
+ hasBin: true
+ peerDependencies:
+ cac: ^6.7.14
+ citty: ^0.1.6
+ commander: ^13.1.0
+ peerDependenciesMeta:
+ cac:
+ optional: true
+ citty:
+ optional: true
+ commander:
+ optional: true
+
'@clack/core@0.5.0':
resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==}
+ '@clack/core@1.0.0-alpha.7':
+ resolution: {integrity: sha512-3vdh6Ar09D14rVxJZIm3VQJkU+ZOKKT5I5cC0cOVazy70CNyYYjiwRj9unwalhESndgxx6bGc/m6Hhs4EKF5XQ==}
+
'@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==}
+
'@cloudflare/kv-asset-handler@0.4.1':
resolution: {integrity: sha512-Nu8ahitGFFJztxUml9oD/DLb7Z28C8cd8F46IVQ7y5Btz575pvMY8AqZsXkX7Gds29eCKdMgIHjIvzskHgPSFg==}
engines: {node: '>=18.0.0'}
@@ -302,8 +323,8 @@ packages:
cpu: [ppc64]
os: [aix]
- '@esbuild/aix-ppc64@0.27.0':
- resolution: {integrity: sha512-KuZrd2hRjz01y5JK9mEBSD3Vj3mbCvemhT466rSuJYeE/hjuBrHfjjcjMdTm/sz7au+++sdbJZJmuBwQLuw68A==}
+ '@esbuild/aix-ppc64@0.27.1':
+ resolution: {integrity: sha512-HHB50pdsBX6k47S4u5g/CaLjqS3qwaOVE5ILsq64jyzgMhLuCuZ8rGzM9yhsAjfjkbgUPMzZEPa7DAp7yz6vuA==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [aix]
@@ -314,8 +335,8 @@ packages:
cpu: [arm64]
os: [android]
- '@esbuild/android-arm64@0.27.0':
- resolution: {integrity: sha512-CC3vt4+1xZrs97/PKDkl0yN7w8edvU2vZvAFGD16n9F0Cvniy5qvzRXjfO1l94efczkkQE6g1x0i73Qf5uthOQ==}
+ '@esbuild/android-arm64@0.27.1':
+ resolution: {integrity: sha512-45fuKmAJpxnQWixOGCrS+ro4Uvb4Re9+UTieUY2f8AEc+t7d4AaZ6eUJ3Hva7dtrxAAWHtlEFsXFMAgNnGU9uQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [android]
@@ -326,8 +347,8 @@ packages:
cpu: [arm]
os: [android]
- '@esbuild/android-arm@0.27.0':
- resolution: {integrity: sha512-j67aezrPNYWJEOHUNLPj9maeJte7uSMM6gMoxfPC9hOg8N02JuQi/T7ewumf4tNvJadFkvLZMlAq73b9uwdMyQ==}
+ '@esbuild/android-arm@0.27.1':
+ resolution: {integrity: sha512-kFqa6/UcaTbGm/NncN9kzVOODjhZW8e+FRdSeypWe6j33gzclHtwlANs26JrupOntlcWmB0u8+8HZo8s7thHvg==}
engines: {node: '>=18'}
cpu: [arm]
os: [android]
@@ -338,8 +359,8 @@ packages:
cpu: [x64]
os: [android]
- '@esbuild/android-x64@0.27.0':
- resolution: {integrity: sha512-wurMkF1nmQajBO1+0CJmcN17U4BP6GqNSROP8t0X/Jiw2ltYGLHpEksp9MpoBqkrFR3kv2/te6Sha26k3+yZ9Q==}
+ '@esbuild/android-x64@0.27.1':
+ resolution: {integrity: sha512-LBEpOz0BsgMEeHgenf5aqmn/lLNTFXVfoWMUox8CtWWYK9X4jmQzWjoGoNb8lmAYml/tQ/Ysvm8q7szu7BoxRQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [android]
@@ -350,8 +371,8 @@ packages:
cpu: [arm64]
os: [darwin]
- '@esbuild/darwin-arm64@0.27.0':
- resolution: {integrity: sha512-uJOQKYCcHhg07DL7i8MzjvS2LaP7W7Pn/7uA0B5S1EnqAirJtbyw4yC5jQ5qcFjHK9l6o/MX9QisBg12kNkdHg==}
+ '@esbuild/darwin-arm64@0.27.1':
+ resolution: {integrity: sha512-veg7fL8eMSCVKL7IW4pxb54QERtedFDfY/ASrumK/SbFsXnRazxY4YykN/THYqFnFwJ0aVjiUrVG2PwcdAEqQQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [darwin]
@@ -362,8 +383,8 @@ packages:
cpu: [x64]
os: [darwin]
- '@esbuild/darwin-x64@0.27.0':
- resolution: {integrity: sha512-8mG6arH3yB/4ZXiEnXof5MK72dE6zM9cDvUcPtxhUZsDjESl9JipZYW60C3JGreKCEP+p8P/72r69m4AZGJd5g==}
+ '@esbuild/darwin-x64@0.27.1':
+ resolution: {integrity: sha512-+3ELd+nTzhfWb07Vol7EZ+5PTbJ/u74nC6iv4/lwIU99Ip5uuY6QoIf0Hn4m2HoV0qcnRivN3KSqc+FyCHjoVQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [darwin]
@@ -374,8 +395,8 @@ packages:
cpu: [arm64]
os: [freebsd]
- '@esbuild/freebsd-arm64@0.27.0':
- resolution: {integrity: sha512-9FHtyO988CwNMMOE3YIeci+UV+x5Zy8fI2qHNpsEtSF83YPBmE8UWmfYAQg6Ux7Gsmd4FejZqnEUZCMGaNQHQw==}
+ '@esbuild/freebsd-arm64@0.27.1':
+ resolution: {integrity: sha512-/8Rfgns4XD9XOSXlzUDepG8PX+AVWHliYlUkFI3K3GB6tqbdjYqdhcb4BKRd7C0BhZSoaCxhv8kTcBrcZWP+xg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [freebsd]
@@ -386,8 +407,8 @@ packages:
cpu: [x64]
os: [freebsd]
- '@esbuild/freebsd-x64@0.27.0':
- resolution: {integrity: sha512-zCMeMXI4HS/tXvJz8vWGexpZj2YVtRAihHLk1imZj4efx1BQzN76YFeKqlDr3bUWI26wHwLWPd3rwh6pe4EV7g==}
+ '@esbuild/freebsd-x64@0.27.1':
+ resolution: {integrity: sha512-GITpD8dK9C+r+5yRT/UKVT36h/DQLOHdwGVwwoHidlnA168oD3uxA878XloXebK4Ul3gDBBIvEdL7go9gCUFzQ==}
engines: {node: '>=18'}
cpu: [x64]
os: [freebsd]
@@ -398,8 +419,8 @@ packages:
cpu: [arm64]
os: [linux]
- '@esbuild/linux-arm64@0.27.0':
- resolution: {integrity: sha512-AS18v0V+vZiLJyi/4LphvBE+OIX682Pu7ZYNsdUHyUKSoRwdnOsMf6FDekwoAFKej14WAkOef3zAORJgAtXnlQ==}
+ '@esbuild/linux-arm64@0.27.1':
+ resolution: {integrity: sha512-W9//kCrh/6in9rWIBdKaMtuTTzNj6jSeG/haWBADqLLa9P8O5YSRDzgD5y9QBok4AYlzS6ARHifAb75V6G670Q==}
engines: {node: '>=18'}
cpu: [arm64]
os: [linux]
@@ -410,8 +431,8 @@ packages:
cpu: [arm]
os: [linux]
- '@esbuild/linux-arm@0.27.0':
- resolution: {integrity: sha512-t76XLQDpxgmq2cNXKTVEB7O7YMb42atj2Re2Haf45HkaUpjM2J0UuJZDuaGbPbamzZ7bawyGFUkodL+zcE+jvQ==}
+ '@esbuild/linux-arm@0.27.1':
+ resolution: {integrity: sha512-ieMID0JRZY/ZeCrsFQ3Y3NlHNCqIhTprJfDgSB3/lv5jJZ8FX3hqPyXWhe+gvS5ARMBJ242PM+VNz/ctNj//eA==}
engines: {node: '>=18'}
cpu: [arm]
os: [linux]
@@ -422,8 +443,8 @@ packages:
cpu: [ia32]
os: [linux]
- '@esbuild/linux-ia32@0.27.0':
- resolution: {integrity: sha512-Mz1jxqm/kfgKkc/KLHC5qIujMvnnarD9ra1cEcrs7qshTUSksPihGrWHVG5+osAIQ68577Zpww7SGapmzSt4Nw==}
+ '@esbuild/linux-ia32@0.27.1':
+ resolution: {integrity: sha512-VIUV4z8GD8rtSVMfAj1aXFahsi/+tcoXXNYmXgzISL+KB381vbSTNdeZHHHIYqFyXcoEhu9n5cT+05tRv13rlw==}
engines: {node: '>=18'}
cpu: [ia32]
os: [linux]
@@ -434,8 +455,8 @@ packages:
cpu: [loong64]
os: [linux]
- '@esbuild/linux-loong64@0.27.0':
- resolution: {integrity: sha512-QbEREjdJeIreIAbdG2hLU1yXm1uu+LTdzoq1KCo4G4pFOLlvIspBm36QrQOar9LFduavoWX2msNFAAAY9j4BDg==}
+ '@esbuild/linux-loong64@0.27.1':
+ resolution: {integrity: sha512-l4rfiiJRN7sTNI//ff65zJ9z8U+k6zcCg0LALU5iEWzY+a1mVZ8iWC1k5EsNKThZ7XCQ6YWtsZ8EWYm7r1UEsg==}
engines: {node: '>=18'}
cpu: [loong64]
os: [linux]
@@ -446,8 +467,8 @@ packages:
cpu: [mips64el]
os: [linux]
- '@esbuild/linux-mips64el@0.27.0':
- resolution: {integrity: sha512-sJz3zRNe4tO2wxvDpH/HYJilb6+2YJxo/ZNbVdtFiKDufzWq4JmKAiHy9iGoLjAV7r/W32VgaHGkk35cUXlNOg==}
+ '@esbuild/linux-mips64el@0.27.1':
+ resolution: {integrity: sha512-U0bEuAOLvO/DWFdygTHWY8C067FXz+UbzKgxYhXC0fDieFa0kDIra1FAhsAARRJbvEyso8aAqvPdNxzWuStBnA==}
engines: {node: '>=18'}
cpu: [mips64el]
os: [linux]
@@ -458,8 +479,8 @@ packages:
cpu: [ppc64]
os: [linux]
- '@esbuild/linux-ppc64@0.27.0':
- resolution: {integrity: sha512-z9N10FBD0DCS2dmSABDBb5TLAyF1/ydVb+N4pi88T45efQ/w4ohr/F/QYCkxDPnkhkp6AIpIcQKQ8F0ANoA2JA==}
+ '@esbuild/linux-ppc64@0.27.1':
+ resolution: {integrity: sha512-NzdQ/Xwu6vPSf/GkdmRNsOfIeSGnh7muundsWItmBsVpMoNPVpM61qNzAVY3pZ1glzzAxLR40UyYM23eaDDbYQ==}
engines: {node: '>=18'}
cpu: [ppc64]
os: [linux]
@@ -470,8 +491,8 @@ packages:
cpu: [riscv64]
os: [linux]
- '@esbuild/linux-riscv64@0.27.0':
- resolution: {integrity: sha512-pQdyAIZ0BWIC5GyvVFn5awDiO14TkT/19FTmFcPdDec94KJ1uZcmFs21Fo8auMXzD4Tt+diXu1LW1gHus9fhFQ==}
+ '@esbuild/linux-riscv64@0.27.1':
+ resolution: {integrity: sha512-7zlw8p3IApcsN7mFw0O1Z1PyEk6PlKMu18roImfl3iQHTnr/yAfYv6s4hXPidbDoI2Q0pW+5xeoM4eTCC0UdrQ==}
engines: {node: '>=18'}
cpu: [riscv64]
os: [linux]
@@ -482,8 +503,8 @@ packages:
cpu: [s390x]
os: [linux]
- '@esbuild/linux-s390x@0.27.0':
- resolution: {integrity: sha512-hPlRWR4eIDDEci953RI1BLZitgi5uqcsjKMxwYfmi4LcwyWo2IcRP+lThVnKjNtk90pLS8nKdroXYOqW+QQH+w==}
+ '@esbuild/linux-s390x@0.27.1':
+ resolution: {integrity: sha512-cGj5wli+G+nkVQdZo3+7FDKC25Uh4ZVwOAK6A06Hsvgr8WqBBuOy/1s+PUEd/6Je+vjfm6stX0kmib5b/O2Ykw==}
engines: {node: '>=18'}
cpu: [s390x]
os: [linux]
@@ -494,8 +515,8 @@ packages:
cpu: [x64]
os: [linux]
- '@esbuild/linux-x64@0.27.0':
- resolution: {integrity: sha512-1hBWx4OUJE2cab++aVZ7pObD6s+DK4mPGpemtnAORBvb5l/g5xFGk0vc0PjSkrDs0XaXj9yyob3d14XqvnQ4gw==}
+ '@esbuild/linux-x64@0.27.1':
+ resolution: {integrity: sha512-z3H/HYI9MM0HTv3hQZ81f+AKb+yEoCRlUby1F80vbQ5XdzEMyY/9iNlAmhqiBKw4MJXwfgsh7ERGEOhrM1niMA==}
engines: {node: '>=18'}
cpu: [x64]
os: [linux]
@@ -506,8 +527,8 @@ packages:
cpu: [arm64]
os: [netbsd]
- '@esbuild/netbsd-arm64@0.27.0':
- resolution: {integrity: sha512-6m0sfQfxfQfy1qRuecMkJlf1cIzTOgyaeXaiVaaki8/v+WB+U4hc6ik15ZW6TAllRlg/WuQXxWj1jx6C+dfy3w==}
+ '@esbuild/netbsd-arm64@0.27.1':
+ resolution: {integrity: sha512-wzC24DxAvk8Em01YmVXyjl96Mr+ecTPyOuADAvjGg+fyBpGmxmcr2E5ttf7Im8D0sXZihpxzO1isus8MdjMCXQ==}
engines: {node: '>=18'}
cpu: [arm64]
os: [netbsd]
@@ -518,8 +539,8 @@ packages:
cpu: [x64]
os: [netbsd]
- '@esbuild/netbsd-x64@0.27.0':
- resolution: {integrity: sha512-xbbOdfn06FtcJ9d0ShxxvSn2iUsGd/lgPIO2V3VZIPDbEaIj1/3nBBe1AwuEZKXVXkMmpr6LUAgMkLD/4D2PPA==}
+ '@esbuild/netbsd-x64@0.27.1':
+ resolution: {integrity: sha512-1YQ8ybGi2yIXswu6eNzJsrYIGFpnlzEWRl6iR5gMgmsrR0FcNoV1m9k9sc3PuP5rUBLshOZylc9nqSgymI+TYg==}
engines: {node: '>=18'}
cpu: [x64]
os: [netbsd]
@@ -530,8 +551,8 @@ packages:
cpu: [arm64]
os: [openbsd]
- '@esbuild/openbsd-arm64@0.27.0':
- resolution: {integrity: sha512-fWgqR8uNbCQ/GGv0yhzttj6sU/9Z5/Sv/VGU3F5OuXK6J6SlriONKrQ7tNlwBrJZXRYk5jUhuWvF7GYzGguBZQ==}
+ '@esbuild/openbsd-arm64@0.27.1':
+ resolution: {integrity: sha512-5Z+DzLCrq5wmU7RDaMDe2DVXMRm2tTDvX2KU14JJVBN2CT/qov7XVix85QoJqHltpvAOZUAc3ndU56HSMWrv8g==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openbsd]
@@ -542,8 +563,8 @@ packages:
cpu: [x64]
os: [openbsd]
- '@esbuild/openbsd-x64@0.27.0':
- resolution: {integrity: sha512-aCwlRdSNMNxkGGqQajMUza6uXzR/U0dIl1QmLjPtRbLOx3Gy3otfFu/VjATy4yQzo9yFDGTxYDo1FfAD9oRD2A==}
+ '@esbuild/openbsd-x64@0.27.1':
+ resolution: {integrity: sha512-Q73ENzIdPF5jap4wqLtsfh8YbYSZ8Q0wnxplOlZUOyZy7B4ZKW8DXGWgTCZmF8VWD7Tciwv5F4NsRf6vYlZtqg==}
engines: {node: '>=18'}
cpu: [x64]
os: [openbsd]
@@ -554,8 +575,8 @@ packages:
cpu: [arm64]
os: [openharmony]
- '@esbuild/openharmony-arm64@0.27.0':
- resolution: {integrity: sha512-nyvsBccxNAsNYz2jVFYwEGuRRomqZ149A39SHWk4hV0jWxKM0hjBPm3AmdxcbHiFLbBSwG6SbpIcUbXjgyECfA==}
+ '@esbuild/openharmony-arm64@0.27.1':
+ resolution: {integrity: sha512-ajbHrGM/XiK+sXM0JzEbJAen+0E+JMQZ2l4RR4VFwvV9JEERx+oxtgkpoKv1SevhjavK2z2ReHk32pjzktWbGg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [openharmony]
@@ -566,8 +587,8 @@ packages:
cpu: [x64]
os: [sunos]
- '@esbuild/sunos-x64@0.27.0':
- resolution: {integrity: sha512-Q1KY1iJafM+UX6CFEL+F4HRTgygmEW568YMqDA5UV97AuZSm21b7SXIrRJDwXWPzr8MGr75fUZPV67FdtMHlHA==}
+ '@esbuild/sunos-x64@0.27.1':
+ resolution: {integrity: sha512-IPUW+y4VIjuDVn+OMzHc5FV4GubIwPnsz6ubkvN8cuhEqH81NovB53IUlrlBkPMEPxvNnf79MGBoz8rZ2iW8HA==}
engines: {node: '>=18'}
cpu: [x64]
os: [sunos]
@@ -578,8 +599,8 @@ packages:
cpu: [arm64]
os: [win32]
- '@esbuild/win32-arm64@0.27.0':
- resolution: {integrity: sha512-W1eyGNi6d+8kOmZIwi/EDjrL9nxQIQ0MiGqe/AWc6+IaHloxHSGoeRgDRKHFISThLmsewZ5nHFvGFWdBYlgKPg==}
+ '@esbuild/win32-arm64@0.27.1':
+ resolution: {integrity: sha512-RIVRWiljWA6CdVu8zkWcRmGP7iRRIIwvhDKem8UMBjPql2TXM5PkDVvvrzMtj1V+WFPB4K7zkIGM7VzRtFkjdg==}
engines: {node: '>=18'}
cpu: [arm64]
os: [win32]
@@ -590,8 +611,8 @@ packages:
cpu: [ia32]
os: [win32]
- '@esbuild/win32-ia32@0.27.0':
- resolution: {integrity: sha512-30z1aKL9h22kQhilnYkORFYt+3wp7yZsHWus+wSKAJR8JtdfI76LJ4SBdMsCopTR3z/ORqVu5L1vtnHZWVj4cQ==}
+ '@esbuild/win32-ia32@0.27.1':
+ resolution: {integrity: sha512-2BR5M8CPbptC1AK5JbJT1fWrHLvejwZidKx3UMSF0ecHMa+smhi16drIrCEggkgviBwLYd5nwrFLSl5Kho96RQ==}
engines: {node: '>=18'}
cpu: [ia32]
os: [win32]
@@ -602,8 +623,8 @@ packages:
cpu: [x64]
os: [win32]
- '@esbuild/win32-x64@0.27.0':
- resolution: {integrity: sha512-aIitBcjQeyOhMTImhLZmtxfdOcuNRpwlPNmlFKPcHQYPhEssw75Cl1TSXJXpMkzaua9FUetx/4OQKq7eJul5Cg==}
+ '@esbuild/win32-x64@0.27.1':
+ resolution: {integrity: sha512-d5X6RMYv6taIymSk8JBP+nxv8DQAMY6A51GPgusqLdK9wBz5wWIXy1KjTck6HnjE9hqJzJRdk+1p/t5soSbCtw==}
engines: {node: '>=18'}
cpu: [x64]
os: [win32]
@@ -738,8 +759,8 @@ packages:
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
- '@napi-rs/wasm-runtime@1.0.7':
- resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==}
+ '@napi-rs/wasm-runtime@1.1.0':
+ resolution: {integrity: sha512-Fq6DJW+Bb5jaWE69/qOE0D1TUN9+6uWhCeZpdnSBk14pjLcCWR7Q8n49PTSPHazM37JqrsdpEthXy2xn6jWWiA==}
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
@@ -753,8 +774,8 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
- '@nuxt/cli@3.30.0':
- resolution: {integrity: sha512-nBNEkvOwqzxgvfTBUKPX0zN4h85dWjjkW+kP4OFnVaN3C3kdsbScNtYPIZyp0+ArabL5t4RT93Gyx0IZMRNzAQ==}
+ '@nuxt/cli@3.31.1':
+ resolution: {integrity: sha512-2Quw4bQlVpMGS/AD34KUEsd4i5PVz993e//km10fYR3AKiilYCHiY+vYdvU9odtFYzmr3tQtfZb1rFfb3GUiCQ==}
engines: {node: ^16.10.0 || >=18.0.0}
hasBin: true
@@ -1246,8 +1267,8 @@ packages:
'@rolldown/pluginutils@1.0.0-beta.50':
resolution: {integrity: sha512-5e76wQiQVeL1ICOZVUg4LSOVYg9jyhGCin+icYozhsUzM+fHE7kddi1bdiE0jwVqTfkjba3jUFbEkoC9WkdvyA==}
- '@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5':
- resolution: {integrity: sha512-8sExkWRK+zVybw3+2/kBkYBFeLnEUWz1fT7BLHplpzmtqkOfTbAQ9gkt4pzwGIIZmg4Qn5US5ACjUBenrhezwQ==}
+ '@rolldown/pluginutils@1.0.0-beta.53':
+ resolution: {integrity: sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==}
'@rollup/plugin-alias@5.1.1':
resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==}
@@ -1497,63 +1518,63 @@ packages:
'@types/web-bluetooth@0.0.21':
resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==}
- '@typescript-eslint/eslint-plugin@8.48.0':
- resolution: {integrity: sha512-XxXP5tL1txl13YFtrECECQYeZjBZad4fyd3cFV4a19LkAY/bIp9fev3US4S5fDVV2JaYFiKAZ/GRTOLer+mbyQ==}
+ '@typescript-eslint/eslint-plugin@8.48.1':
+ resolution: {integrity: sha512-X63hI1bxl5ohelzr0LY5coufyl0LJNthld+abwxpCoo6Gq+hSqhKwci7MUWkXo67mzgUK6YFByhmaHmUcuBJmA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
- '@typescript-eslint/parser': ^8.48.0
+ '@typescript-eslint/parser': ^8.48.1
eslint: ^8.57.0 || ^9.0.0
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/parser@8.48.0':
- resolution: {integrity: sha512-jCzKdm/QK0Kg4V4IK/oMlRZlY+QOcdjv89U2NgKHZk1CYTj82/RVSx1mV/0gqCVMJ/DA+Zf/S4NBWNF8GQ+eqQ==}
+ '@typescript-eslint/parser@8.48.1':
+ resolution: {integrity: sha512-PC0PDZfJg8sP7cmKe6L3QIL8GZwU5aRvUFedqSIpw3B+QjRSUZeeITC2M5XKeMXEzL6wccN196iy3JLwKNvDVA==}
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.48.0':
- resolution: {integrity: sha512-Ne4CTZyRh1BecBf84siv42wv5vQvVmgtk8AuiEffKTUo3DrBaGYZueJSxxBZ8fjk/N3DrgChH4TOdIOwOwiqqw==}
+ '@typescript-eslint/project-service@8.48.1':
+ resolution: {integrity: sha512-HQWSicah4s9z2/HifRPQ6b6R7G+SBx64JlFQpgSSHWPKdvCZX57XCbszg/bapbRsOEv42q5tayTYcEFpACcX1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/scope-manager@8.48.0':
- resolution: {integrity: sha512-uGSSsbrtJrLduti0Q1Q9+BF1/iFKaxGoQwjWOIVNJv0o6omrdyR8ct37m4xIl5Zzpkp69Kkmvom7QFTtue89YQ==}
+ '@typescript-eslint/scope-manager@8.48.1':
+ resolution: {integrity: sha512-rj4vWQsytQbLxC5Bf4XwZ0/CKd362DkWMUkviT7DCS057SK64D5lH74sSGzhI6PDD2HCEq02xAP9cX68dYyg1w==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/tsconfig-utils@8.48.0':
- resolution: {integrity: sha512-WNebjBdFdyu10sR1M4OXTt2OkMd5KWIL+LLfeH9KhgP+jzfDV/LI3eXzwJ1s9+Yc0Kzo2fQCdY/OpdusCMmh6w==}
+ '@typescript-eslint/tsconfig-utils@8.48.1':
+ resolution: {integrity: sha512-k0Jhs4CpEffIBm6wPaCXBAD7jxBtrHjrSgtfCjUvPp9AZ78lXKdTR8fxyZO5y4vWNlOvYXRtngSZNSn+H53Jkw==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/type-utils@8.48.0':
- resolution: {integrity: sha512-zbeVaVqeXhhab6QNEKfK96Xyc7UQuoFWERhEnj3mLVnUWrQnv15cJNseUni7f3g557gm0e46LZ6IJ4NJVOgOpw==}
+ '@typescript-eslint/type-utils@8.48.1':
+ resolution: {integrity: sha512-1jEop81a3LrJQLTf/1VfPQdhIY4PlGDBc/i67EVWObrtvcziysbLN3oReexHOM6N3jyXgCrkBsZpqwH0hiDOQg==}
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.48.0':
- resolution: {integrity: sha512-cQMcGQQH7kwKoVswD1xdOytxQR60MWKM1di26xSUtxehaDs/32Zpqsu5WJlXTtTTqyAVK8R7hvsUnIXRS+bjvA==}
+ '@typescript-eslint/types@8.48.1':
+ resolution: {integrity: sha512-+fZ3LZNeiELGmimrujsDCT4CRIbq5oXdHe7chLiW8qzqyPMnn1puNstCrMNVAqwcl2FdIxkuJ4tOs/RFDBVc/Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- '@typescript-eslint/typescript-estree@8.48.0':
- resolution: {integrity: sha512-ljHab1CSO4rGrQIAyizUS6UGHHCiAYhbfcIZ1zVJr5nMryxlXMVWS3duFPSKvSUbFPwkXMFk1k0EMIjub4sRRQ==}
+ '@typescript-eslint/typescript-estree@8.48.1':
+ resolution: {integrity: sha512-/9wQ4PqaefTK6POVTjJaYS0bynCgzh6ClJHGSBj06XEHjkfylzB+A3qvyaXnErEZSaxhIo4YdyBgq6j4RysxDg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
peerDependencies:
typescript: '>=4.8.4 <6.0.0'
- '@typescript-eslint/utils@8.48.0':
- resolution: {integrity: sha512-yTJO1XuGxCsSfIVt1+1UrLHtue8xz16V8apzPYI06W0HbEbEWHxHXgZaAgavIkoh+GeV6hKKd5jm0sS6OYxWXQ==}
+ '@typescript-eslint/utils@8.48.1':
+ resolution: {integrity: sha512-fAnhLrDjiVfey5wwFRwrweyRlCmdz5ZxXz2G/4cLn0YDLjTapmN4gcCsTBR1N2rWnZSDeWpYtgLDsJt+FpmcwA==}
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.48.0':
- resolution: {integrity: sha512-T0XJMaRPOH3+LBbAfzR2jalckP1MSG/L9eUtY0DEzUyVaXJ/t6zN0nR7co5kz0Jko/nkSYCBRkz1djvjajVTTg==}
+ '@typescript-eslint/visitor-keys@8.48.1':
+ resolution: {integrity: sha512-BmxxndzEWhE4TIEEMBs8lP3MBWN3jFPs/p6gPm/wkv02o41hI6cq9AuSmGAaTTHPtA1FTi2jBre4A9rm5ZmX+Q==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@unhead/vue@2.0.19':
@@ -1683,11 +1704,11 @@ packages:
vite: ^5.0.0 || ^6.0.0 || ^7.0.0
vue: ^3.2.25
- '@vitest/expect@4.0.14':
- resolution: {integrity: sha512-RHk63V3zvRiYOWAV0rGEBRO820ce17hz7cI2kDmEdfQsBjT2luEKB5tCOc91u1oSQoUOZkSv3ZyzkdkSLD7lKw==}
+ '@vitest/expect@4.0.15':
+ resolution: {integrity: sha512-Gfyva9/GxPAWXIWjyGDli9O+waHDC0Q0jaLdFP1qPAUUfo1FEXPXUfUkp3eZA0sSq340vPycSyOlYUeM15Ft1w==}
- '@vitest/mocker@4.0.14':
- resolution: {integrity: sha512-RzS5NujlCzeRPF1MK7MXLiEFpkIXeMdQ+rN3Kk3tDI9j0mtbr7Nmuq67tpkOJQpgyClbOltCXMjLZicJHsH5Cg==}
+ '@vitest/mocker@4.0.15':
+ resolution: {integrity: sha512-CZ28GLfOEIFkvCFngN8Sfx5h+Se0zN+h4B7yOsPVCcgtiO7t5jt9xQh2E1UkFep+eb9fjyMfuC5gBypwb07fvQ==}
peerDependencies:
msw: ^2.4.9
vite: ^6.0.0 || ^7.0.0-0
@@ -1697,20 +1718,20 @@ packages:
vite:
optional: true
- '@vitest/pretty-format@4.0.14':
- resolution: {integrity: sha512-SOYPgujB6TITcJxgd3wmsLl+wZv+fy3av2PpiPpsWPZ6J1ySUYfScfpIt2Yv56ShJXR2MOA6q2KjKHN4EpdyRQ==}
+ '@vitest/pretty-format@4.0.15':
+ resolution: {integrity: sha512-SWdqR8vEv83WtZcrfLNqlqeQXlQLh2iilO1Wk1gv4eiHKjEzvgHb2OVc3mIPyhZE6F+CtfYjNlDJwP5MN6Km7A==}
- '@vitest/runner@4.0.14':
- resolution: {integrity: sha512-BsAIk3FAqxICqREbX8SetIteT8PiaUL/tgJjmhxJhCsigmzzH8xeadtp7LRnTpCVzvf0ib9BgAfKJHuhNllKLw==}
+ '@vitest/runner@4.0.15':
+ resolution: {integrity: sha512-+A+yMY8dGixUhHmNdPUxOh0la6uVzun86vAbuMT3hIDxMrAOmn5ILBHm8ajrqHE0t8R9T1dGnde1A5DTnmi3qw==}
- '@vitest/snapshot@4.0.14':
- resolution: {integrity: sha512-aQVBfT1PMzDSA16Y3Fp45a0q8nKexx6N5Amw3MX55BeTeZpoC08fGqEZqVmPcqN0ueZsuUQ9rriPMhZ3Mu19Ag==}
+ '@vitest/snapshot@4.0.15':
+ resolution: {integrity: sha512-A7Ob8EdFZJIBjLjeO0DZF4lqR6U7Ydi5/5LIZ0xcI+23lYlsYJAfGn8PrIWTYdZQRNnSRlzhg0zyGu37mVdy5g==}
- '@vitest/spy@4.0.14':
- resolution: {integrity: sha512-JmAZT1UtZooO0tpY3GRyiC/8W7dCs05UOq9rfsUUgEZEdq+DuHLmWhPsrTt0TiW7WYeL/hXpaE07AZ2RCk44hg==}
+ '@vitest/spy@4.0.15':
+ resolution: {integrity: sha512-+EIjOJmnY6mIfdXtE/bnozKEvTC4Uczg19yeZ2vtCz5Yyb0QQ31QWVQ8hswJ3Ysx/K2EqaNsVanjr//2+P3FHw==}
- '@vitest/utils@4.0.14':
- resolution: {integrity: sha512-hLqXZKAWNg8pI+SQXyXxWCTOpA3MvsqcbVeNgSi8x/CSN2wi26dSzn1wrOhmCmFjEvN9p8/kLFRHa6PI8jHazw==}
+ '@vitest/utils@4.0.15':
+ resolution: {integrity: sha512-HXjPW2w5dxhTD0dLwtYHDnelK3j8sR8cWIaLxr22evTyY6q8pRCjZSmhRWVjBaOVXChQd6AwMzi9pucorXCPZA==}
'@volar/language-core@2.4.23':
resolution: {integrity: sha512-hEEd5ET/oSmBC6pi1j6NaNYRWoAiDhINbT8rmwtINugR39loROSlufGdYMF9TaKGfz+ViGs1Idi3mAhnuPcoGQ==}
@@ -1952,8 +1973,8 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.8.32:
- resolution: {integrity: sha512-OPz5aBThlyLFgxyhdwf/s2+8ab3OvT7AdTNvKHBwpXomIYeXqpUUuT8LrdtxZSsWJ4R4CU1un4XGh5Ez3nlTpw==}
+ baseline-browser-mapping@2.9.2:
+ resolution: {integrity: sha512-PxSsosKQjI38iXkmb3d0Y32efqyA0uW4s41u4IVBsLlWLhCiYNpH/AfNOVWRqCQBlD8TFJTz6OUWNd4DFJCnmw==}
hasBin: true
bidi-js@1.0.3:
@@ -1962,8 +1983,8 @@ packages:
bindings@1.5.0:
resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
- birpc@2.8.0:
- resolution: {integrity: sha512-Bz2a4qD/5GRhiHSwj30c/8kC8QGj12nNDwz3D4ErQ4Xhy35dsSDvF+RA/tWpjyU0pdGtSDiEk6B5fBGE1qNVhw==}
+ birpc@2.9.0:
+ resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -1978,8 +1999,8 @@ packages:
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
engines: {node: '>=8'}
- browserslist@4.28.0:
- resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==}
+ browserslist@4.28.1:
+ resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
@@ -2026,8 +2047,8 @@ packages:
caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
- caniuse-lite@1.0.30001757:
- resolution: {integrity: sha512-r0nnL/I28Zi/yjk1el6ilj27tKcdjLsNqAOZr0yVjWPrSQyHgKI2INaEWw21bAQSv2LXRt1XuCS/GomNpWOxsQ==}
+ caniuse-lite@1.0.30001759:
+ resolution: {integrity: sha512-Pzfx9fOKoKvevQf8oCXoyNRQ5QyxJj+3O0Rqx2V5oxT61KGx8+n6hV/IUyJeifUci2clnmmKVpvtiqRzgiWjSw==}
chai@6.2.1:
resolution: {integrity: sha512-p4Z49OGG5W/WBCPSS/dH3jQ73kD6tiMmUM+bckNK6Jr5JHMG3k9bg/BvKR8lKmtVBKmOiuVaV2ws8s9oSbwysg==}
@@ -2359,8 +2380,8 @@ packages:
ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- electron-to-chromium@1.5.262:
- resolution: {integrity: sha512-NlAsMteRHek05jRUxUR0a5jpjYq9ykk6+kO0yRaMi5moe7u0fVIOeQ3Y30A8dIiWFBNUoQGi1ljb1i5VtS9WQQ==}
+ electron-to-chromium@1.5.266:
+ resolution: {integrity: sha512-kgWEglXvkEfMH7rxP5OSZZwnaDWT7J9EoZCujhnpLbfi0bbNtRkgdX2E3gt0Uer11c61qCYktB3hwkAS325sJg==}
emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -2401,8 +2422,8 @@ packages:
engines: {node: '>=18'}
hasBin: true
- esbuild@0.27.0:
- resolution: {integrity: sha512-jd0f4NHbD6cALCyGElNpGAOtWxSq46l9X/sWB0Nzd5er4Kz2YTm+Vl0qKFT9KUJvD8+fiO8AvoHhFvEatfVixA==}
+ esbuild@0.27.1:
+ resolution: {integrity: sha512-yY35KZckJJuVVPXpvjgxiCuVEJT67F6zDeVTv4rizyPrfGBUpZQsvmxnN+C371c2esD/hNMjj4tpBhuueLN7aA==}
engines: {node: '>=18'}
hasBin: true
@@ -3244,16 +3265,16 @@ packages:
encoding:
optional: true
- node-forge@1.3.2:
- resolution: {integrity: sha512-6xKiQ+cph9KImrRh0VsjH2d8/GXA4FIMlgU4B757iI1ApvcyA9VlouP0yZJha01V+huImO+kKMU7ih+2+E14fw==}
+ node-forge@1.3.3:
+ resolution: {integrity: sha512-rLvcdSyRCyouf6jcOIPe/BgwG/d7hKjzMKOas33/pHEr6gbq18IK9zV7DiPvzsz0oBJPme6qr6H6kGZuI9/DZg==}
engines: {node: '>= 6.13.0'}
node-gyp-build@4.8.4:
resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==}
hasBin: true
- node-mock-http@1.0.3:
- resolution: {integrity: sha512-jN8dK25fsfnMrVsEhluUTPkBFY+6ybu7jSB1n+ri/vOGjJxU8J9CZhpSGkHXSkFjtUhbmoncG/YG9ta5Ludqog==}
+ node-mock-http@1.0.4:
+ resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
node-releases@2.0.27:
resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==}
@@ -4039,9 +4060,6 @@ packages:
tinybench@2.9.0:
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
- tinyexec@0.3.2:
- resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
-
tinyexec@1.0.2:
resolution: {integrity: sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==}
engines: {node: '>=18'}
@@ -4101,8 +4119,8 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
- type-fest@5.2.0:
- resolution: {integrity: sha512-xxCJm+Bckc6kQBknN7i9fnP/xobQRsRQxR01CztFkp/h++yfVxUUcmMgfR2HttJx/dpWjS9ubVuyspJv24Q9DA==}
+ type-fest@5.3.0:
+ resolution: {integrity: sha512-d9CwU93nN0IA1QL+GSNDdwLAu1Ew5ZjTwupvedwg3WdfoH6pIDvYQ2hV0Uc2nKBLPq7NB5apCx57MLS5qlmO5g==}
engines: {node: '>=20'}
type-level-regexp@0.1.17:
@@ -4239,8 +4257,8 @@ packages:
unwasm@0.3.11:
resolution: {integrity: sha512-Vhp5gb1tusSQw5of/g3Q697srYgMXvwMgXMjcG4ZNga02fDX9coxJ9fAb0Ci38hM2Hv/U1FXRPGgjP2BYqhNoQ==}
- update-browserslist-db@1.1.4:
- resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
+ update-browserslist-db@1.2.2:
+ resolution: {integrity: sha512-E85pfNzMQ9jpKkA7+TJAi4TJN+tBCuWh5rUcS/sv6cFi+1q9LYDwDI5dpUL0u/73EElyQ8d3TEaeW4sPedBqYA==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
@@ -4362,18 +4380,18 @@ packages:
yaml:
optional: true
- vitest@4.0.14:
- resolution: {integrity: sha512-d9B2J9Cm9dN9+6nxMnnNJKJCtcyKfnHj15N6YNJfaFHRLua/d3sRKU9RuKmO9mB0XdFtUizlxfz/VPbd3OxGhw==}
+ vitest@4.0.15:
+ resolution: {integrity: sha512-n1RxDp8UJm6N0IbJLQo+yzLZ2sQCDyl1o0LeugbPWf8+8Fttp29GghsQBjYJVmWq3gBFfe9Hs1spR44vovn2wA==}
engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
hasBin: true
peerDependencies:
'@edge-runtime/vm': '*'
'@opentelemetry/api': ^1.9.0
'@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
- '@vitest/browser-playwright': 4.0.14
- '@vitest/browser-preview': 4.0.14
- '@vitest/browser-webdriverio': 4.0.14
- '@vitest/ui': 4.0.14
+ '@vitest/browser-playwright': 4.0.15
+ '@vitest/browser-preview': 4.0.15
+ '@vitest/browser-webdriverio': 4.0.15
+ '@vitest/ui': 4.0.15
happy-dom: '*'
jsdom: '*'
peerDependenciesMeta:
@@ -4658,7 +4676,7 @@ snapshots:
dependencies:
'@babel/compat-data': 7.28.5
'@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.0
+ browserslist: 4.28.1
lru-cache: 5.1.1
semver: 6.3.1
@@ -4781,17 +4799,33 @@ 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)':
+ optionalDependencies:
+ cac: 6.7.14
+ citty: 0.1.6
+
'@clack/core@0.5.0':
dependencies:
picocolors: 1.1.1
sisteransi: 1.0.5
+ '@clack/core@1.0.0-alpha.7':
+ dependencies:
+ picocolors: 1.1.1
+ sisteransi: 1.0.5
+
'@clack/prompts@0.11.0':
dependencies:
'@clack/core': 0.5.0
picocolors: 1.1.1
sisteransi: 1.0.5
+ '@clack/prompts@1.0.0-alpha.7':
+ dependencies:
+ '@clack/core': 1.0.0-alpha.7
+ picocolors: 1.1.1
+ sisteransi: 1.0.5
+
'@cloudflare/kv-asset-handler@0.4.1':
dependencies:
mime: 3.0.0
@@ -4855,7 +4889,7 @@ snapshots:
'@es-joy/jsdoccomment@0.76.0':
dependencies:
'@types/estree': 1.0.8
- '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/types': 8.48.1
comment-parser: 1.4.1
esquery: 1.6.0
jsdoc-type-pratt-parser: 6.10.0
@@ -4865,157 +4899,157 @@ snapshots:
'@esbuild/aix-ppc64@0.25.12':
optional: true
- '@esbuild/aix-ppc64@0.27.0':
+ '@esbuild/aix-ppc64@0.27.1':
optional: true
'@esbuild/android-arm64@0.25.12':
optional: true
- '@esbuild/android-arm64@0.27.0':
+ '@esbuild/android-arm64@0.27.1':
optional: true
'@esbuild/android-arm@0.25.12':
optional: true
- '@esbuild/android-arm@0.27.0':
+ '@esbuild/android-arm@0.27.1':
optional: true
'@esbuild/android-x64@0.25.12':
optional: true
- '@esbuild/android-x64@0.27.0':
+ '@esbuild/android-x64@0.27.1':
optional: true
'@esbuild/darwin-arm64@0.25.12':
optional: true
- '@esbuild/darwin-arm64@0.27.0':
+ '@esbuild/darwin-arm64@0.27.1':
optional: true
'@esbuild/darwin-x64@0.25.12':
optional: true
- '@esbuild/darwin-x64@0.27.0':
+ '@esbuild/darwin-x64@0.27.1':
optional: true
'@esbuild/freebsd-arm64@0.25.12':
optional: true
- '@esbuild/freebsd-arm64@0.27.0':
+ '@esbuild/freebsd-arm64@0.27.1':
optional: true
'@esbuild/freebsd-x64@0.25.12':
optional: true
- '@esbuild/freebsd-x64@0.27.0':
+ '@esbuild/freebsd-x64@0.27.1':
optional: true
'@esbuild/linux-arm64@0.25.12':
optional: true
- '@esbuild/linux-arm64@0.27.0':
+ '@esbuild/linux-arm64@0.27.1':
optional: true
'@esbuild/linux-arm@0.25.12':
optional: true
- '@esbuild/linux-arm@0.27.0':
+ '@esbuild/linux-arm@0.27.1':
optional: true
'@esbuild/linux-ia32@0.25.12':
optional: true
- '@esbuild/linux-ia32@0.27.0':
+ '@esbuild/linux-ia32@0.27.1':
optional: true
'@esbuild/linux-loong64@0.25.12':
optional: true
- '@esbuild/linux-loong64@0.27.0':
+ '@esbuild/linux-loong64@0.27.1':
optional: true
'@esbuild/linux-mips64el@0.25.12':
optional: true
- '@esbuild/linux-mips64el@0.27.0':
+ '@esbuild/linux-mips64el@0.27.1':
optional: true
'@esbuild/linux-ppc64@0.25.12':
optional: true
- '@esbuild/linux-ppc64@0.27.0':
+ '@esbuild/linux-ppc64@0.27.1':
optional: true
'@esbuild/linux-riscv64@0.25.12':
optional: true
- '@esbuild/linux-riscv64@0.27.0':
+ '@esbuild/linux-riscv64@0.27.1':
optional: true
'@esbuild/linux-s390x@0.25.12':
optional: true
- '@esbuild/linux-s390x@0.27.0':
+ '@esbuild/linux-s390x@0.27.1':
optional: true
'@esbuild/linux-x64@0.25.12':
optional: true
- '@esbuild/linux-x64@0.27.0':
+ '@esbuild/linux-x64@0.27.1':
optional: true
'@esbuild/netbsd-arm64@0.25.12':
optional: true
- '@esbuild/netbsd-arm64@0.27.0':
+ '@esbuild/netbsd-arm64@0.27.1':
optional: true
'@esbuild/netbsd-x64@0.25.12':
optional: true
- '@esbuild/netbsd-x64@0.27.0':
+ '@esbuild/netbsd-x64@0.27.1':
optional: true
'@esbuild/openbsd-arm64@0.25.12':
optional: true
- '@esbuild/openbsd-arm64@0.27.0':
+ '@esbuild/openbsd-arm64@0.27.1':
optional: true
'@esbuild/openbsd-x64@0.25.12':
optional: true
- '@esbuild/openbsd-x64@0.27.0':
+ '@esbuild/openbsd-x64@0.27.1':
optional: true
'@esbuild/openharmony-arm64@0.25.12':
optional: true
- '@esbuild/openharmony-arm64@0.27.0':
+ '@esbuild/openharmony-arm64@0.27.1':
optional: true
'@esbuild/sunos-x64@0.25.12':
optional: true
- '@esbuild/sunos-x64@0.27.0':
+ '@esbuild/sunos-x64@0.27.1':
optional: true
'@esbuild/win32-arm64@0.25.12':
optional: true
- '@esbuild/win32-arm64@0.27.0':
+ '@esbuild/win32-arm64@0.27.1':
optional: true
'@esbuild/win32-ia32@0.25.12':
optional: true
- '@esbuild/win32-ia32@0.27.0':
+ '@esbuild/win32-ia32@0.27.1':
optional: true
'@esbuild/win32-x64@0.25.12':
optional: true
- '@esbuild/win32-x64@0.27.0':
+ '@esbuild/win32-x64@0.27.1':
optional: true
'@eslint-community/eslint-utils@4.9.0(eslint@9.39.1(jiti@2.6.1))':
@@ -5046,10 +5080,10 @@ snapshots:
'@eslint/config-inspector@1.4.2(eslint@9.39.1(jiti@2.6.1))':
dependencies:
ansis: 4.2.0
- bundle-require: 5.1.0(esbuild@0.27.0)
+ bundle-require: 5.1.0(esbuild@0.27.1)
cac: 6.7.14
chokidar: 4.0.3
- esbuild: 0.27.0
+ esbuild: 0.27.1
eslint: 9.39.1(jiti@2.6.1)
h3: 1.15.4
tinyglobby: 0.2.15
@@ -5179,7 +5213,7 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
- '@napi-rs/wasm-runtime@1.0.7':
+ '@napi-rs/wasm-runtime@1.1.0':
dependencies:
'@emnapi/core': 1.7.1
'@emnapi/runtime': 1.7.1
@@ -5198,13 +5232,16 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
- '@nuxt/cli@3.30.0(magicast@0.5.1)':
+ '@nuxt/cli@3.31.1(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
c12: 3.3.2(magicast@0.5.1)
citty: 0.1.6
confbox: 0.2.2
consola: 3.4.2
copy-paste: 2.2.0
+ debug: 4.4.3
defu: 6.1.4
exsolve: 1.0.8
fuse.js: 7.1.0
@@ -5225,7 +5262,10 @@ snapshots:
ufo: 1.6.1
youch: 4.1.0-beta.13
transitivePeerDependencies:
+ - cac
+ - commander
- magicast
+ - supports-color
'@nuxt/devalue@2.0.2': {}
@@ -5255,7 +5295,7 @@ snapshots:
'@nuxt/kit': 4.2.1(magicast@0.5.1)
'@vue/devtools-core': 8.0.5(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
'@vue/devtools-kit': 8.0.5
- birpc: 2.8.0
+ birpc: 2.9.0
consola: 3.4.2
destr: 2.0.5
error-stack-parser-es: 1.0.5
@@ -5289,25 +5329,25 @@ snapshots:
- utf-8-validate
- vue
- '@nuxt/eslint-config@1.11.0(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
+ '@nuxt/eslint-config@1.11.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@antfu/install-pkg': 1.1.0
'@clack/prompts': 0.11.0
'@eslint/js': 9.39.1
'@nuxt/eslint-plugin': 1.11.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
'@stylistic/eslint-plugin': 5.6.1(eslint@9.39.1(jiti@2.6.1))
- '@typescript-eslint/eslint-plugin': 8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/eslint-plugin': 8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.39.1(jiti@2.6.1)
eslint-config-flat-gitignore: 2.1.0(eslint@9.39.1(jiti@2.6.1))
eslint-flat-config-utils: 2.1.4
eslint-merge-processors: 2.0.0(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-import-lite: 0.3.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-import-x: 4.16.1(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-jsdoc: 61.4.1(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-regexp: 2.10.0(eslint@9.39.1(jiti@2.6.1))
eslint-plugin-unicorn: 62.0.0(eslint@9.39.1(jiti@2.6.1))
- eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1)))(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1)))
+ eslint-plugin-vue: 10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1)))(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1)))
eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))
globals: 16.5.0
local-pkg: 1.1.2
@@ -5322,18 +5362,18 @@ snapshots:
'@nuxt/eslint-plugin@1.11.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.48.0
- '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
eslint: 9.39.1(jiti@2.6.1)
transitivePeerDependencies:
- supports-color
- typescript
- '@nuxt/eslint@1.11.0(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))':
+ '@nuxt/eslint@1.11.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))':
dependencies:
'@eslint/config-inspector': 1.4.2(eslint@9.39.1(jiti@2.6.1))
'@nuxt/devtools-kit': 3.1.1(magicast@0.5.1)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))
- '@nuxt/eslint-config': 1.11.0(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@nuxt/eslint-config': 1.11.0(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
'@nuxt/eslint-plugin': 1.11.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
'@nuxt/kit': 4.2.1(magicast@0.5.1)
chokidar: 5.0.0
@@ -5408,7 +5448,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/nitro-server@4.2.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)':
+ '@nuxt/nitro-server@4.2.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)':
dependencies:
'@nuxt/devalue': 2.0.2
'@nuxt/kit': 4.2.1(magicast@0.5.1)
@@ -5426,7 +5466,7 @@ snapshots:
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.12.9
- nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2)
pathe: 2.0.3
pkg-types: 2.3.0
radix3: 1.1.2
@@ -5497,7 +5537,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/vite-builder@4.2.1(@types/node@22.18.1)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.5(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)':
+ '@nuxt/vite-builder@4.2.1(@types/node@22.18.1)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.5(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)':
dependencies:
'@nuxt/kit': 4.2.1(magicast@0.5.1)
'@rollup/plugin-replace': 6.0.3(rollup@4.53.3)
@@ -5517,7 +5557,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.0
mocked-exports: 0.1.1
- nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2)
pathe: 2.0.3
pkg-types: 2.3.0
postcss: 8.5.6
@@ -5594,7 +5634,7 @@ snapshots:
'@oxc-minify/binding-wasm32-wasi@0.96.0':
dependencies:
- '@napi-rs/wasm-runtime': 1.0.7
+ '@napi-rs/wasm-runtime': 1.1.0
optional: true
'@oxc-minify/binding-win32-arm64-msvc@0.96.0':
@@ -5641,7 +5681,7 @@ snapshots:
'@oxc-parser/binding-wasm32-wasi@0.96.0':
dependencies:
- '@napi-rs/wasm-runtime': 1.0.7
+ '@napi-rs/wasm-runtime': 1.1.0
optional: true
'@oxc-parser/binding-win32-arm64-msvc@0.96.0':
@@ -5690,7 +5730,7 @@ snapshots:
'@oxc-transform/binding-wasm32-wasi@0.96.0':
dependencies:
- '@napi-rs/wasm-runtime': 1.0.7
+ '@napi-rs/wasm-runtime': 1.1.0
optional: true
'@oxc-transform/binding-win32-arm64-msvc@0.96.0':
@@ -5790,7 +5830,7 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.50': {}
- '@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5': {}
+ '@rolldown/pluginutils@1.0.0-beta.53': {}
'@rollup/plugin-alias@5.1.1(rollup@4.53.3)':
optionalDependencies:
@@ -5936,7 +5976,7 @@ snapshots:
'@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1))':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
- '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/types': 8.48.1
eslint: 9.39.1(jiti@2.6.1)
eslint-visitor-keys: 4.2.1
espree: 10.4.0
@@ -5972,14 +6012,14 @@ snapshots:
'@types/web-bluetooth@0.0.21': {}
- '@typescript-eslint/eslint-plugin@8.48.0(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/eslint-plugin@8.48.1(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/scope-manager': 8.48.0
- '@typescript-eslint/type-utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.48.0
+ '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.48.1
+ '@typescript-eslint/type-utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.48.1
eslint: 9.39.1(jiti@2.6.1)
graphemer: 1.4.0
ignore: 7.0.5
@@ -5989,41 +6029,41 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/scope-manager': 8.48.0
- '@typescript-eslint/types': 8.48.0
- '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3)
- '@typescript-eslint/visitor-keys': 8.48.0
+ '@typescript-eslint/scope-manager': 8.48.1
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/visitor-keys': 8.48.1
debug: 4.4.3
eslint: 9.39.1(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/project-service@8.48.0(typescript@5.9.3)':
+ '@typescript-eslint/project-service@8.48.1(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.1
debug: 4.4.3
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/scope-manager@8.48.0':
+ '@typescript-eslint/scope-manager@8.48.1':
dependencies:
- '@typescript-eslint/types': 8.48.0
- '@typescript-eslint/visitor-keys': 8.48.0
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/visitor-keys': 8.48.1
- '@typescript-eslint/tsconfig-utils@8.48.0(typescript@5.9.3)':
+ '@typescript-eslint/tsconfig-utils@8.48.1(typescript@5.9.3)':
dependencies:
typescript: 5.9.3
- '@typescript-eslint/type-utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/type-utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/types': 8.48.0
- '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3)
- '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
debug: 4.4.3
eslint: 9.39.1(jiti@2.6.1)
ts-api-utils: 2.1.0(typescript@5.9.3)
@@ -6031,14 +6071,14 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/types@8.48.0': {}
+ '@typescript-eslint/types@8.48.1': {}
- '@typescript-eslint/typescript-estree@8.48.0(typescript@5.9.3)':
+ '@typescript-eslint/typescript-estree@8.48.1(typescript@5.9.3)':
dependencies:
- '@typescript-eslint/project-service': 8.48.0(typescript@5.9.3)
- '@typescript-eslint/tsconfig-utils': 8.48.0(typescript@5.9.3)
- '@typescript-eslint/types': 8.48.0
- '@typescript-eslint/visitor-keys': 8.48.0
+ '@typescript-eslint/project-service': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/tsconfig-utils': 8.48.1(typescript@5.9.3)
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/visitor-keys': 8.48.1
debug: 4.4.3
minimatch: 9.0.5
semver: 7.7.3
@@ -6048,20 +6088,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
+ '@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.48.0
- '@typescript-eslint/types': 8.48.0
- '@typescript-eslint/typescript-estree': 8.48.0(typescript@5.9.3)
+ '@typescript-eslint/scope-manager': 8.48.1
+ '@typescript-eslint/types': 8.48.1
+ '@typescript-eslint/typescript-estree': 8.48.1(typescript@5.9.3)
eslint: 9.39.1(jiti@2.6.1)
typescript: 5.9.3
transitivePeerDependencies:
- supports-color
- '@typescript-eslint/visitor-keys@8.48.0':
+ '@typescript-eslint/visitor-keys@8.48.1':
dependencies:
- '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/types': 8.48.1
eslint-visitor-keys: 4.2.1
'@unhead/vue@2.0.19(vue@3.5.25(typescript@5.9.3))':
@@ -6153,7 +6193,7 @@ snapshots:
'@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.9-commit.d91dfb5
+ '@rolldown/pluginutils': 1.0.0-beta.53
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.28.5)
vite: 7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)
vue: 3.5.25(typescript@5.9.3)
@@ -6166,43 +6206,43 @@ snapshots:
vite: 7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)
vue: 3.5.25(typescript@5.9.3)
- '@vitest/expect@4.0.14':
+ '@vitest/expect@4.0.15':
dependencies:
'@standard-schema/spec': 1.0.0
'@types/chai': 5.2.3
- '@vitest/spy': 4.0.14
- '@vitest/utils': 4.0.14
+ '@vitest/spy': 4.0.15
+ '@vitest/utils': 4.0.15
chai: 6.2.1
tinyrainbow: 3.0.3
- '@vitest/mocker@4.0.14(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))':
+ '@vitest/mocker@4.0.15(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))':
dependencies:
- '@vitest/spy': 4.0.14
+ '@vitest/spy': 4.0.15
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
vite: 7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)
- '@vitest/pretty-format@4.0.14':
+ '@vitest/pretty-format@4.0.15':
dependencies:
tinyrainbow: 3.0.3
- '@vitest/runner@4.0.14':
+ '@vitest/runner@4.0.15':
dependencies:
- '@vitest/utils': 4.0.14
+ '@vitest/utils': 4.0.15
pathe: 2.0.3
- '@vitest/snapshot@4.0.14':
+ '@vitest/snapshot@4.0.15':
dependencies:
- '@vitest/pretty-format': 4.0.14
+ '@vitest/pretty-format': 4.0.15
magic-string: 0.30.21
pathe: 2.0.3
- '@vitest/spy@4.0.14': {}
+ '@vitest/spy@4.0.15': {}
- '@vitest/utils@4.0.14':
+ '@vitest/utils@4.0.15':
dependencies:
- '@vitest/pretty-format': 4.0.14
+ '@vitest/pretty-format': 4.0.15
tinyrainbow: 3.0.3
'@volar/language-core@2.4.23':
@@ -6307,7 +6347,7 @@ snapshots:
'@vue/devtools-kit@7.7.9':
dependencies:
'@vue/devtools-shared': 7.7.9
- birpc: 2.8.0
+ birpc: 2.9.0
hookable: 5.5.3
mitt: 3.0.1
perfect-debounce: 1.0.0
@@ -6317,7 +6357,7 @@ snapshots:
'@vue/devtools-kit@8.0.5':
dependencies:
'@vue/devtools-shared': 8.0.5
- birpc: 2.8.0
+ birpc: 2.9.0
hookable: 5.5.3
mitt: 3.0.1
perfect-debounce: 2.0.0
@@ -6377,13 +6417,13 @@ snapshots:
'@vueuse/metadata@14.1.0': {}
- '@vueuse/nuxt@14.1.0(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(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.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))':
dependencies:
'@nuxt/kit': 4.2.1(magicast@0.5.1)
'@vueuse/core': 14.1.0(vue@3.5.25(typescript@5.9.3))
'@vueuse/metadata': 14.1.0
local-pkg: 1.1.2
- nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2)
+ nuxt: 4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2)
vue: 3.5.25(typescript@5.9.3)
transitivePeerDependencies:
- magicast
@@ -6487,8 +6527,8 @@ snapshots:
autoprefixer@10.4.22(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
- caniuse-lite: 1.0.30001757
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001759
fraction.js: 5.3.4
normalize-range: 0.1.2
picocolors: 1.1.1
@@ -6503,7 +6543,7 @@ snapshots:
base64-js@1.5.1: {}
- baseline-browser-mapping@2.8.32: {}
+ baseline-browser-mapping@2.9.2: {}
bidi-js@1.0.3:
dependencies:
@@ -6514,7 +6554,7 @@ snapshots:
dependencies:
file-uri-to-path: 1.0.0
- birpc@2.8.0: {}
+ birpc@2.9.0: {}
boolbase@1.0.0: {}
@@ -6531,13 +6571,13 @@ snapshots:
dependencies:
fill-range: 7.1.1
- browserslist@4.28.0:
+ browserslist@4.28.1:
dependencies:
- baseline-browser-mapping: 2.8.32
- caniuse-lite: 1.0.30001757
- electron-to-chromium: 1.5.262
+ baseline-browser-mapping: 2.9.2
+ caniuse-lite: 1.0.30001759
+ electron-to-chromium: 1.5.266
node-releases: 2.0.27
- update-browserslist-db: 1.1.4(browserslist@4.28.0)
+ update-browserslist-db: 1.2.2(browserslist@4.28.1)
buffer-crc32@1.0.0: {}
@@ -6554,9 +6594,9 @@ snapshots:
dependencies:
run-applescript: 7.1.0
- bundle-require@5.1.0(esbuild@0.27.0):
+ bundle-require@5.1.0(esbuild@0.27.1):
dependencies:
- esbuild: 0.27.0
+ esbuild: 0.27.1
load-tsconfig: 0.2.5
c12@3.3.2(magicast@0.5.1):
@@ -6582,12 +6622,12 @@ snapshots:
caniuse-api@3.0.0:
dependencies:
- browserslist: 4.28.0
- caniuse-lite: 1.0.30001757
+ browserslist: 4.28.1
+ caniuse-lite: 1.0.30001759
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
- caniuse-lite@1.0.30001757: {}
+ caniuse-lite@1.0.30001759: {}
chai@6.2.1: {}
@@ -6682,7 +6722,7 @@ snapshots:
core-js-compat@3.47.0:
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
core-util-is@1.0.3: {}
@@ -6739,7 +6779,7 @@ snapshots:
cssnano-preset-default@7.0.10(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
css-declaration-sorter: 7.3.0(postcss@8.5.6)
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
@@ -6864,7 +6904,7 @@ snapshots:
dot-prop@10.1.0:
dependencies:
- type-fest: 5.2.0
+ type-fest: 5.3.0
dotenv@16.6.1: {}
@@ -6876,7 +6916,7 @@ snapshots:
ee-first@1.1.1: {}
- electron-to-chromium@1.5.262: {}
+ electron-to-chromium@1.5.266: {}
emoji-regex@8.0.0: {}
@@ -6938,34 +6978,34 @@ snapshots:
'@esbuild/win32-ia32': 0.25.12
'@esbuild/win32-x64': 0.25.12
- esbuild@0.27.0:
+ esbuild@0.27.1:
optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.0
- '@esbuild/android-arm': 0.27.0
- '@esbuild/android-arm64': 0.27.0
- '@esbuild/android-x64': 0.27.0
- '@esbuild/darwin-arm64': 0.27.0
- '@esbuild/darwin-x64': 0.27.0
- '@esbuild/freebsd-arm64': 0.27.0
- '@esbuild/freebsd-x64': 0.27.0
- '@esbuild/linux-arm': 0.27.0
- '@esbuild/linux-arm64': 0.27.0
- '@esbuild/linux-ia32': 0.27.0
- '@esbuild/linux-loong64': 0.27.0
- '@esbuild/linux-mips64el': 0.27.0
- '@esbuild/linux-ppc64': 0.27.0
- '@esbuild/linux-riscv64': 0.27.0
- '@esbuild/linux-s390x': 0.27.0
- '@esbuild/linux-x64': 0.27.0
- '@esbuild/netbsd-arm64': 0.27.0
- '@esbuild/netbsd-x64': 0.27.0
- '@esbuild/openbsd-arm64': 0.27.0
- '@esbuild/openbsd-x64': 0.27.0
- '@esbuild/openharmony-arm64': 0.27.0
- '@esbuild/sunos-x64': 0.27.0
- '@esbuild/win32-arm64': 0.27.0
- '@esbuild/win32-ia32': 0.27.0
- '@esbuild/win32-x64': 0.27.0
+ '@esbuild/aix-ppc64': 0.27.1
+ '@esbuild/android-arm': 0.27.1
+ '@esbuild/android-arm64': 0.27.1
+ '@esbuild/android-x64': 0.27.1
+ '@esbuild/darwin-arm64': 0.27.1
+ '@esbuild/darwin-x64': 0.27.1
+ '@esbuild/freebsd-arm64': 0.27.1
+ '@esbuild/freebsd-x64': 0.27.1
+ '@esbuild/linux-arm': 0.27.1
+ '@esbuild/linux-arm64': 0.27.1
+ '@esbuild/linux-ia32': 0.27.1
+ '@esbuild/linux-loong64': 0.27.1
+ '@esbuild/linux-mips64el': 0.27.1
+ '@esbuild/linux-ppc64': 0.27.1
+ '@esbuild/linux-riscv64': 0.27.1
+ '@esbuild/linux-s390x': 0.27.1
+ '@esbuild/linux-x64': 0.27.1
+ '@esbuild/netbsd-arm64': 0.27.1
+ '@esbuild/netbsd-x64': 0.27.1
+ '@esbuild/openbsd-arm64': 0.27.1
+ '@esbuild/openbsd-x64': 0.27.1
+ '@esbuild/openharmony-arm64': 0.27.1
+ '@esbuild/sunos-x64': 0.27.1
+ '@esbuild/win32-arm64': 0.27.1
+ '@esbuild/win32-ia32': 0.27.1
+ '@esbuild/win32-x64': 0.27.1
escalade@3.2.0: {}
@@ -7000,14 +7040,14 @@ snapshots:
eslint-plugin-import-lite@0.3.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
- '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/types': 8.48.1
eslint: 9.39.1(jiti@2.6.1)
optionalDependencies:
typescript: 5.9.3
- eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)):
+ eslint-plugin-import-x@4.16.1(@typescript-eslint/utils@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1)):
dependencies:
- '@typescript-eslint/types': 8.48.0
+ '@typescript-eslint/types': 8.48.1
comment-parser: 1.4.1
debug: 4.4.3
eslint: 9.39.1(jiti@2.6.1)
@@ -7018,7 +7058,7 @@ snapshots:
stable-hash-x: 0.2.0
unrs-resolver: 1.11.1
optionalDependencies:
- '@typescript-eslint/utils': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/utils': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
transitivePeerDependencies:
- supports-color
@@ -7075,7 +7115,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.1(jiti@2.6.1)))(@typescript-eslint/parser@8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))):
+ eslint-plugin-vue@10.6.2(@stylistic/eslint-plugin@5.6.1(eslint@9.39.1(jiti@2.6.1)))(@typescript-eslint/parser@8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(vue-eslint-parser@10.2.0(eslint@9.39.1(jiti@2.6.1))):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
eslint: 9.39.1(jiti@2.6.1)
@@ -7087,7 +7127,7 @@ snapshots:
xml-name-validator: 4.0.0
optionalDependencies:
'@stylistic/eslint-plugin': 5.6.1(eslint@9.39.1(jiti@2.6.1))
- '@typescript-eslint/parser': 8.48.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ '@typescript-eslint/parser': 8.48.1(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.25)(eslint@9.39.1(jiti@2.6.1)):
dependencies:
@@ -7362,7 +7402,7 @@ snapshots:
defu: 6.1.4
destr: 2.0.5
iron-webcrypto: 1.2.1
- node-mock-http: 1.0.3
+ node-mock-http: 1.0.4
radix3: 1.1.2
ufo: 1.6.1
uncrypto: 0.1.3
@@ -7642,7 +7682,7 @@ snapshots:
http-shutdown: 1.2.2
jiti: 2.6.1
mlly: 1.8.0
- node-forge: 1.3.2
+ node-forge: 1.3.3
pathe: 1.1.2
std-env: 3.10.0
ufo: 1.6.1
@@ -7847,7 +7887,7 @@ snapshots:
mime: 4.1.0
mlly: 1.8.0
node-fetch-native: 1.6.7
- node-mock-http: 1.0.3
+ node-mock-http: 1.0.4
ofetch: 1.5.1
ohash: 2.0.11
pathe: 2.0.3
@@ -7913,11 +7953,11 @@ snapshots:
dependencies:
whatwg-url: 5.0.0
- node-forge@1.3.2: {}
+ node-forge@1.3.3: {}
node-gyp-build@4.8.4: {}
- node-mock-http@1.0.3: {}
+ node-mock-http@1.0.4: {}
node-releases@2.0.27: {}
@@ -7942,16 +7982,16 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2):
+ nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2):
dependencies:
'@dxup/nuxt': 0.2.2(magicast@0.5.1)
- '@nuxt/cli': 3.30.0(magicast@0.5.1)
+ '@nuxt/cli': 3.31.1(cac@6.7.14)(magicast@0.5.1)
'@nuxt/devtools': 3.1.1(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue@3.5.25(typescript@5.9.3))
'@nuxt/kit': 4.2.1(magicast@0.5.1)
- '@nuxt/nitro-server': 4.2.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)
+ '@nuxt/nitro-server': 4.2.1(db0@0.3.4)(ioredis@5.8.2)(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(typescript@5.9.3)
'@nuxt/schema': 4.2.1
'@nuxt/telemetry': 2.6.6(magicast@0.5.1)
- '@nuxt/vite-builder': 4.2.1(@types/node@22.18.1)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.5(typescript@5.9.3))(vue@3.5.25(typescript@5.9.3))(yaml@2.8.2)
+ '@nuxt/vite-builder': 4.2.1(@types/node@22.18.1)(eslint@9.39.1(jiti@2.6.1))(magicast@0.5.1)(nuxt@4.2.1(@parcel/watcher@2.5.1)(@types/node@22.18.1)(@vue/compiler-sfc@3.5.25)(cac@6.7.14)(db0@0.3.4)(eslint@9.39.1(jiti@2.6.1))(ioredis@5.8.2)(magicast@0.5.1)(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))(vue-tsc@3.1.5(typescript@5.9.3))(yaml@2.8.2))(optionator@0.9.4)(rollup@4.53.3)(terser@5.44.1)(typescript@5.9.3)(vue-tsc@3.1.5(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
c12: 3.3.2(magicast@0.5.1)
@@ -8028,6 +8068,8 @@ snapshots:
- bare-abort-controller
- better-sqlite3
- bufferutil
+ - cac
+ - commander
- db0
- drizzle-orm
- encoding
@@ -8282,7 +8324,7 @@ snapshots:
postcss-colormin@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
caniuse-api: 3.0.0
colord: 2.9.3
postcss: 8.5.6
@@ -8290,7 +8332,7 @@ snapshots:
postcss-convert-values@7.0.8(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -8319,7 +8361,7 @@ snapshots:
postcss-merge-rules@7.0.7(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
caniuse-api: 3.0.0
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
@@ -8339,7 +8381,7 @@ snapshots:
postcss-minify-params@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
cssnano-utils: 5.0.1(postcss@8.5.6)
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -8381,7 +8423,7 @@ snapshots:
postcss-normalize-unicode@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
postcss: 8.5.6
postcss-value-parser: 4.2.0
@@ -8403,7 +8445,7 @@ snapshots:
postcss-reduce-initial@7.0.5(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
caniuse-api: 3.0.0
postcss: 8.5.6
@@ -8783,7 +8825,7 @@ snapshots:
stylehacks@7.0.7(postcss@8.5.6):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
postcss: 8.5.6
postcss-selector-parser: 7.1.1
@@ -8850,8 +8892,6 @@ snapshots:
tinybench@2.9.0: {}
- tinyexec@0.3.2: {}
-
tinyexec@1.0.2: {}
tinyglobby@0.2.15:
@@ -8905,7 +8945,7 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
- type-fest@5.2.0:
+ type-fest@5.3.0:
dependencies:
tagged-tag: 1.0.0
@@ -9060,9 +9100,9 @@ snapshots:
pkg-types: 2.3.0
unplugin: 2.3.11
- update-browserslist-db@1.1.4(browserslist@4.28.0):
+ update-browserslist-db@1.2.2(browserslist@4.28.1):
dependencies:
- browserslist: 4.28.0
+ browserslist: 4.28.1
escalade: 3.2.0
picocolors: 1.1.1
@@ -9076,7 +9116,7 @@ snapshots:
vite-dev-rpc@1.1.0(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)):
dependencies:
- birpc: 2.8.0
+ birpc: 2.9.0
vite: 7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)
vite-hot-client: 2.1.0(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))
@@ -9163,15 +9203,15 @@ snapshots:
terser: 5.44.1
yaml: 2.8.2
- vitest@4.0.14(@types/node@22.18.1)(jiti@2.6.1)(jsdom@27.0.0)(terser@5.44.1)(yaml@2.8.2):
+ vitest@4.0.15(@types/node@22.18.1)(jiti@2.6.1)(jsdom@27.0.0)(terser@5.44.1)(yaml@2.8.2):
dependencies:
- '@vitest/expect': 4.0.14
- '@vitest/mocker': 4.0.14(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))
- '@vitest/pretty-format': 4.0.14
- '@vitest/runner': 4.0.14
- '@vitest/snapshot': 4.0.14
- '@vitest/spy': 4.0.14
- '@vitest/utils': 4.0.14
+ '@vitest/expect': 4.0.15
+ '@vitest/mocker': 4.0.15(vite@7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2))
+ '@vitest/pretty-format': 4.0.15
+ '@vitest/runner': 4.0.15
+ '@vitest/snapshot': 4.0.15
+ '@vitest/spy': 4.0.15
+ '@vitest/utils': 4.0.15
es-module-lexer: 1.7.0
expect-type: 1.2.2
magic-string: 0.30.21
@@ -9180,7 +9220,7 @@ snapshots:
picomatch: 4.0.3
std-env: 3.10.0
tinybench: 2.9.0
- tinyexec: 0.3.2
+ tinyexec: 1.0.2
tinyglobby: 0.2.15
tinyrainbow: 3.0.3
vite: 7.2.6(@types/node@22.18.1)(jiti@2.6.1)(terser@5.44.1)(yaml@2.8.2)
diff --git a/uv.lock b/uv.lock
index 872a82d5..e0297e39 100644
--- a/uv.lock
+++ b/uv.lock
@@ -128,7 +128,7 @@ wheels = [
[[package]]
name = "apprise"
-version = "1.9.5"
+version = "1.9.6"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
@@ -139,9 +139,9 @@ dependencies = [
{ name = "requests-oauthlib" },
{ name = "tzdata", marker = "sys_platform == 'win32'" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/60/16/e39338b8310af9466fab6f4482b542e24cb1fcbb7e36bf00c089c4e015e7/apprise-1.9.5.tar.gz", hash = "sha256:8f3be318bb429c2017470e33928a2e313cbf7600fc74b8184782a37060db366a", size = 1877134 }
+sdist = { url = "https://files.pythonhosted.org/packages/a9/a7/bb182d81f35c3fe405505f0976da4b74f942cfdd53c7193b0fe50412aa27/apprise-1.9.6.tar.gz", hash = "sha256:4206be9cb5694a3d08dd8e0393bbb9b36212ac3a7769c2633620055e75c6caef", size = 1921714 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0d/f1/318762320d966e528dfb9e6be5953fe7df2952156f15ba857cbccafb630c/apprise-1.9.5-py3-none-any.whl", hash = "sha256:1873a8a1b8cf9e44fcbefe0486ed260b590652aea12427f545b37c8566142961", size = 1421011 },
+ { url = "https://files.pythonhosted.org/packages/39/df/343d125241f8cd3c9af58fd09688cf2bf59cc1edfd609adafef3556ce8ec/apprise-1.9.6-py3-none-any.whl", hash = "sha256:2fd18e8a5251b6a12f6f9d169f1d895d458d1de36a5faee4db149cedcce51674", size = 1452059 },
]
[[package]]
@@ -866,11 +866,11 @@ wheels = [
[[package]]
name = "platformdirs"
-version = "4.5.0"
+version = "4.5.1"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/61/33/9611380c2bdb1225fdef633e2a9610622310fed35ab11dac9620972ee088/platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312", size = 21632 }
+sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/73/cb/ac7874b3e5d58441674fb70742e6c374b28b0c7cb988d37d991cde47166c/platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3", size = 18651 },
+ { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731 },
]
[[package]]
@@ -1167,7 +1167,7 @@ wheels = [
[[package]]
name = "pytest"
-version = "9.0.1"
+version = "9.0.2"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
@@ -1176,9 +1176,9 @@ dependencies = [
{ name = "pluggy" },
{ name = "pygments" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/07/56/f013048ac4bc4c1d9be45afd4ab209ea62822fb1598f40687e6bf45dcea4/pytest-9.0.1.tar.gz", hash = "sha256:3e9c069ea73583e255c3b21cf46b8d3c56f6e3a1a8f6da94ccb0fcf57b9d73c8", size = 1564125 }
+sdist = { url = "https://files.pythonhosted.org/packages/d1/db/7ef3487e0fb0049ddb5ce41d3a49c235bf9ad299b6a25d5780a89f19230f/pytest-9.0.2.tar.gz", hash = "sha256:75186651a92bd89611d1d9fc20f0b4345fd827c41ccd5c299a868a05d70edf11", size = 1568901 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/0b/8b/6300fb80f858cda1c51ffa17075df5d846757081d11ab4aa35cef9e6258b/pytest-9.0.1-py3-none-any.whl", hash = "sha256:67be0030d194df2dfa7b556f2e56fb3c3315bd5c8822c6951162b92b32ce7dad", size = 373668 },
+ { url = "https://files.pythonhosted.org/packages/3b/ab/b3226f0bd7cdcf710fbede2b3548584366da3b19b5021e74f5bde2a8fa3f/pytest-9.0.2-py3-none-any.whl", hash = "sha256:711ffd45bf766d5264d487b917733b453d917afd2b0ad65223959f59089f875b", size = 374801 },
]
[[package]]
@@ -1510,7 +1510,7 @@ wheels = [
[[package]]
name = "selenium"
-version = "4.38.0"
+version = "4.39.0"
source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "certifi" },
@@ -1520,9 +1520,9 @@ dependencies = [
{ name = "urllib3", extra = ["socks"] },
{ name = "websocket-client" },
]
-sdist = { url = "https://files.pythonhosted.org/packages/c9/a0/60a5e7e946420786d57816f64536e21a29f0554706b36f3cba348107024c/selenium-4.38.0.tar.gz", hash = "sha256:c117af6727859d50f622d6d0785b945c5db3e28a45ec12ad85cee2e7cc84fc4c", size = 924101 }
+sdist = { url = "https://files.pythonhosted.org/packages/af/19/27c1bf9eb1f7025632d35a956b50746efb4b10aa87f961b263fa7081f4c5/selenium-4.39.0.tar.gz", hash = "sha256:12f3325f02d43b6c24030fc9602b34a3c6865abbb1db9406641d13d108aa1889", size = 928575 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/8a/d3/76c8f4a8d99b9f1ebcf9a611b4dd992bf5ee082a6093cfc649af3d10f35b/selenium-4.38.0-py3-none-any.whl", hash = "sha256:ed47563f188130a6fd486b327ca7ba48c5b11fb900e07d6457befdde320e35fd", size = 9694571 },
+ { url = "https://files.pythonhosted.org/packages/58/d0/55a6b7c6f35aad4c8a54be0eb7a52c1ff29a59542fc3e655f0ecbb14456d/selenium-4.39.0-py3-none-any.whl", hash = "sha256:c85f65d5610642ca0f47dae9d5cc117cd9e831f74038bc09fe1af126288200f9", size = 9655249 },
]
[[package]]
@@ -1645,11 +1645,11 @@ wheels = [
[[package]]
name = "urllib3"
-version = "2.5.0"
+version = "2.6.0"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/15/22/9ee70a2574a4f4599c47dd506532914ce044817c7752a79b6a51286319bc/urllib3-2.5.0.tar.gz", hash = "sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760", size = 393185 }
+sdist = { url = "https://files.pythonhosted.org/packages/1c/43/554c2569b62f49350597348fc3ac70f786e3c32e7f19d266e19817812dd3/urllib3-2.6.0.tar.gz", hash = "sha256:cb9bcef5a4b345d5da5d145dc3e30834f58e8018828cbc724d30b4cb7d4d49f1", size = 432585 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795 },
+ { url = "https://files.pythonhosted.org/packages/56/1a/9ffe814d317c5224166b23e7c47f606d6e473712a2fad0f704ea9b99f246/urllib3-2.6.0-py3-none-any.whl", hash = "sha256:c90f7a39f716c572c4e3e58509581ebd83f9b59cced005b7db7ad2d22b0db99f", size = 131083 },
]
[package.optional-dependencies]
@@ -1787,11 +1787,11 @@ wheels = [
[[package]]
name = "yt-dlp"
-version = "2025.11.12"
+version = "2025.12.8"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/cf/41/53ad8c6e74d6627bd598dfbb8ad7c19d5405e438210ad0bbaf1b288387e7/yt_dlp-2025.11.12.tar.gz", hash = "sha256:5f0795a6b8fc57a5c23332d67d6c6acf819a0b46b91a6324bae29414fa97f052", size = 3076928 }
+sdist = { url = "https://files.pythonhosted.org/packages/14/77/db924ebbd99d0b2b571c184cb08ed232cf4906c6f9b76eed763cd2c84170/yt_dlp-2025.12.8.tar.gz", hash = "sha256:b773c81bb6b71cb2c111cfb859f453c7a71cf2ef44eff234ff155877184c3e4f", size = 3088947 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/5f/16/fdebbee6473473a1c0576bd165a50e4a70762484d638c1d59fa9074e175b/yt_dlp-2025.11.12-py3-none-any.whl", hash = "sha256:b47af37bbb16b08efebb36825a280ea25a507c051f93bf413a6e4a0e586c6e79", size = 3279151 },
+ { url = "https://files.pythonhosted.org/packages/6e/2f/98c3596ad923f8efd32c90dca62e241e8ad9efcebf20831173c357042ba0/yt_dlp-2025.12.8-py3-none-any.whl", hash = "sha256:36e2584342e409cfbfa0b5e61448a1c5189e345cf4564294456ee509e7d3e065", size = 3291464 },
]
[package.optional-dependencies]
@@ -1809,11 +1809,11 @@ default = [
[[package]]
name = "yt-dlp-ejs"
-version = "0.3.1"
+version = "0.3.2"
source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/fe/02/58b16dee54ad7f9f8c4b5b490960478dbbd31a27da4be2c876d8c09ac8e3/yt_dlp_ejs-0.3.1.tar.gz", hash = "sha256:7f2119eb02864800f651fa33825ddfe13d152a1f730fa103d9864f091df24227", size = 33805 }
+sdist = { url = "https://files.pythonhosted.org/packages/de/72/57d02cf78eb45126bd171298d6a58a5bd48ce1a398b6b7ff00fc904f1f0c/yt_dlp_ejs-0.3.2.tar.gz", hash = "sha256:31a41292799992bdc913e03c9fac2a8c90c82a5cbbc792b2e3373b01da841e3e", size = 34678 }
wheels = [
- { url = "https://files.pythonhosted.org/packages/e7/fd/34fbdaf0d53386c47e219c532a479766cd9336fde34c00834c8e0123df7a/yt_dlp_ejs-0.3.1-py3-none-any.whl", hash = "sha256:a6e3548874db7c774388931752bb46c7f4642c044b2a189e56968f3d5ecab622", size = 53155 },
+ { url = "https://files.pythonhosted.org/packages/9d/0d/1f0d7a735ca60b87953271b15d00eff5eef05f6118390ddf6f81982526ed/yt_dlp_ejs-0.3.2-py3-none-any.whl", hash = "sha256:f2dc6b3d1b909af1f13e021621b0af048056fca5fb07c4db6aa9bbb37a4f66a9", size = 53252 },
]
[[package]]
|