From 1cd73442a6a21c103474b117c698934ac9682060 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Mon, 6 Apr 2026 10:12:30 +1000
Subject: [PATCH 01/51] fixes: docs security update
---
docs/requirements.txt | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 86061c0f..580e5476 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -19,12 +19,12 @@ packaging==26.0
paginate==0.5.7
pathspec==1.0.4
platformdirs==4.9.2
-Pygments==2.19.2
+Pygments==2.20.0
pymdown-extensions==10.21
python-dateutil==2.9.0.post0
PyYAML==6.0.3
pyyaml_env_tag==1.1
-requests==2.32.5
+requests==2.33.0
six==1.17.0
urllib3==2.6.3
watchdog==6.0.0
From b40218efd2271f6fb7a7ac9d8f8dd4566a2dd598 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Thu, 16 Apr 2026 22:18:13 +1000
Subject: [PATCH 02/51] chore: update readme
---
README.md | 9 +++++----
apps/backend/articles/models.py | 8 ++++----
2 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/README.md b/README.md
index ee69d71a..48164162 100644
--- a/README.md
+++ b/README.md
@@ -4,9 +4,9 @@ A website for every Technical Minecraft player.
## Tech Stacks
-This is a 'monorepo-based' web project with frontend-backend separation architecture.
+This is a monorepo-based web project with frontend-backend separation architecture.
-Frontend: **Vue3 + Vite**
+Frontend: **Nuxt (Vue/Vite)**
Backend: **Django + Django Rest Framework**
Database: **PostgreSQL**
Cache: **Redis**
@@ -15,7 +15,8 @@ Observability: **Grafana + Loki + Alloy**
Proxy: **Treafik**
Deployment: **Docker**
-[](https://skillicons.dev)
+[](https://skillicons.dev)
+[](https://skillicons.dev)
## Project Structure
`app/`: Web Applications
@@ -44,4 +45,4 @@ Deployment: **Docker**
> [!Important]
> This documentation is not yet up-to-date.
-Developer Documentation: [AlienCommons Docs](https://lazyalienserver.github.io/alien-commons/)
\ No newline at end of file
+Developer Documentation: [AlienCommons Dev Docs](https://lazyalienserver.github.io/alien-commons/)
\ No newline at end of file
diff --git a/apps/backend/articles/models.py b/apps/backend/articles/models.py
index ff9d18d5..90190bd9 100644
--- a/apps/backend/articles/models.py
+++ b/apps/backend/articles/models.py
@@ -41,10 +41,10 @@ class ArticleStatus(models.IntegerChoices):
verbose_name=_("title"),
help_text=_("The title of the article"),
)
- content = models.JSONField(
- blank=True, default=dict,
- verbose_name=_("content"),
- help_text=_("The content of the article"),
+ article = models.FileField(
+ blank=True,
+ verbose_name=_("article"),
+ help_text=_("The article markdown file"),
)
status = models.IntegerField(
choices=ArticleStatus.choices, default=ArticleStatus.DRAFT, db_index=True,
From a5b03524b62a87cb98a23e40177974914b6b5303 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Thu, 16 Apr 2026 22:22:15 +1000
Subject: [PATCH 03/51] fix: update readme again to display on github properly
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 48164162..1e3123bb 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Observability: **Grafana + Loki + Alloy**
Proxy: **Treafik**
Deployment: **Docker**
-[](https://skillicons.dev)
+[](https://skillicons.dev)
[](https://skillicons.dev)
## Project Structure
From 9fece72cda1225eda1f59037c6b4aaa08a89c7f8 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 11:20:57 +1000
Subject: [PATCH 04/51] chore: add SECURITY.md
---
SECURITY.md | 7 +++++++
1 file changed, 7 insertions(+)
create mode 100644 SECURITY.md
diff --git a/SECURITY.md b/SECURITY.md
new file mode 100644
index 00000000..77cd50dd
--- /dev/null
+++ b/SECURITY.md
@@ -0,0 +1,7 @@
+# Security Policy
+
+If you discovered a security issue,
+please use the **'Report a vulnerability'** button on the security page on GitHub.
+
+> [!Warning]
+> Please do not open a GitHub Issue directly!
\ No newline at end of file
From 90f56c6ee22a4d20f70e2cb52c47881249ed5987 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 11:56:29 +1000
Subject: [PATCH 05/51] chore: add issue and pr templates
---
.github/ISSUE_TEMPLATE/bug_report.yml | 35 +++++++++++++++++
.github/ISSUE_TEMPLATE/feature_request.yml | 39 +++++++++++++++++++
.../pull_request_template.md | 11 ++++++
SECURITY.md | 2 +-
infra/compose/docker-compose.base.yml | 2 +-
infra/compose/docker-compose.dev.yml | 2 +-
infra/compose/docker-compose.pro.yml | 2 +-
infra/compose/docker-compose.proxy.yml | 2 +-
infra/compose/docker-compose.stg.yml | 2 +-
9 files changed, 91 insertions(+), 6 deletions(-)
create mode 100644 .github/ISSUE_TEMPLATE/bug_report.yml
create mode 100644 .github/ISSUE_TEMPLATE/feature_request.yml
create mode 100644 .github/PULL_REQUEST_TEMPLATE/pull_request_template.md
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
new file mode 100644
index 00000000..3a9dcc96
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -0,0 +1,35 @@
+name: Bug Report
+description: Report a bug or regression
+title: "[Bug] "
+labels:
+ - bug
+body:
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: Briefly describe the bug.
+ placeholder: What happened?
+ validations:
+ required: true
+
+ - type: textarea
+ id: steps
+ attributes:
+ label: Steps to Reproduce
+ description: List the steps needed to reproduce the issue.
+ placeholder: |
+ 1. Go to ...
+ 2. Click ...
+ 3. See error ...
+ validations:
+ required: true
+
+ - type: textarea
+ id: expected
+ attributes:
+ label: Expected Behavior
+ description: Describe what you expected to happen.
+ placeholder: What should have happened instead?
+ validations:
+ required: true
diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml
new file mode 100644
index 00000000..f1ba4a04
--- /dev/null
+++ b/.github/ISSUE_TEMPLATE/feature_request.yml
@@ -0,0 +1,39 @@
+name: Feature Request
+description: Suggest an improvement or new feature
+title: "[Feature] "
+labels:
+ - enhancement
+body:
+ - type: checkboxes
+ attributes:
+ label: Please confirm the following
+ options:
+ - label: I have checked that this feature request is not on our [roadmap](https://github.com/orgs/LazyAlienServer/projects/3)
+ required: true
+
+ - type: textarea
+ id: description
+ attributes:
+ label: Description
+ description: Briefly describe the feature or improvement you want.
+ placeholder: What would you like to add or improve?
+ validations:
+ required: true
+
+ - type: textarea
+ id: problem
+ attributes:
+ label: Problem or Motivation
+ description: Explain the problem this feature would solve.
+ placeholder: Why is this needed?
+ validations:
+ required: true
+
+ - type: textarea
+ id: proposal
+ attributes:
+ label: Proposed Solution
+ description: Describe your preferred solution if you have one.
+ placeholder: How should this work?
+ validations:
+ required: false
diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
new file mode 100644
index 00000000..2c452e47
--- /dev/null
+++ b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md
@@ -0,0 +1,11 @@
+## Description
+
+
+
+
+## Affected Directories
+
+- [ ] `apps`
+- [ ] `docs`
+- [ ] `observability`
+- [ ] `infra`
diff --git a/SECURITY.md b/SECURITY.md
index 77cd50dd..7ce8e5ea 100644
--- a/SECURITY.md
+++ b/SECURITY.md
@@ -4,4 +4,4 @@ If you discovered a security issue,
please use the **'Report a vulnerability'** button on the security page on GitHub.
> [!Warning]
-> Please do not open a GitHub Issue directly!
\ No newline at end of file
+> Please do not open a GitHub Issue directly!
diff --git a/infra/compose/docker-compose.base.yml b/infra/compose/docker-compose.base.yml
index 19a01474..7f8d6d30 100644
--- a/infra/compose/docker-compose.base.yml
+++ b/infra/compose/docker-compose.base.yml
@@ -5,4 +5,4 @@ services:
redis:
image: redis:8
- restart: unless-stopped
\ No newline at end of file
+ restart: unless-stopped
diff --git a/infra/compose/docker-compose.dev.yml b/infra/compose/docker-compose.dev.yml
index ad0e363a..9389095d 100644
--- a/infra/compose/docker-compose.dev.yml
+++ b/infra/compose/docker-compose.dev.yml
@@ -132,4 +132,4 @@ services:
- "3000:3000"
volumes:
- postgres_data_dev:
\ No newline at end of file
+ postgres_data_dev:
diff --git a/infra/compose/docker-compose.pro.yml b/infra/compose/docker-compose.pro.yml
index 1d9da2eb..8506924f 100644
--- a/infra/compose/docker-compose.pro.yml
+++ b/infra/compose/docker-compose.pro.yml
@@ -143,4 +143,4 @@ services:
- /srv/alien-commons/pro/static:/usr/share/nginx/html/static:ro
volumes:
- postgres_data_pro:
\ No newline at end of file
+ postgres_data_pro:
diff --git a/infra/compose/docker-compose.proxy.yml b/infra/compose/docker-compose.proxy.yml
index 446ba443..0c16cc63 100644
--- a/infra/compose/docker-compose.proxy.yml
+++ b/infra/compose/docker-compose.proxy.yml
@@ -18,4 +18,4 @@ services:
- "443:443"
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- restart: unless-stopped
\ No newline at end of file
+ restart: unless-stopped
diff --git a/infra/compose/docker-compose.stg.yml b/infra/compose/docker-compose.stg.yml
index 97532b37..095cc0af 100644
--- a/infra/compose/docker-compose.stg.yml
+++ b/infra/compose/docker-compose.stg.yml
@@ -147,4 +147,4 @@ services:
- /srv/alien-commons/stg/static:/usr/share/nginx/html/static:ro
volumes:
- postgres_data_stg:
\ No newline at end of file
+ postgres_data_stg:
From de0454b976289f03d121cca6ca9e12f0df32449c Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 12:21:18 +1000
Subject: [PATCH 06/51] chore: simplify bug_report issue template
---
.github/ISSUE_TEMPLATE/bug_report.yml | 12 ------------
1 file changed, 12 deletions(-)
diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml
index 3a9dcc96..2ac5aa6a 100644
--- a/.github/ISSUE_TEMPLATE/bug_report.yml
+++ b/.github/ISSUE_TEMPLATE/bug_report.yml
@@ -13,18 +13,6 @@ body:
validations:
required: true
- - type: textarea
- id: steps
- attributes:
- label: Steps to Reproduce
- description: List the steps needed to reproduce the issue.
- placeholder: |
- 1. Go to ...
- 2. Click ...
- 3. See error ...
- validations:
- required: true
-
- type: textarea
id: expected
attributes:
From 2c185d94f5f262eaced5b2742b4863fc816deac6 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 12:42:39 +1000
Subject: [PATCH 07/51] chore: add CODEOWNERS file
---
.github/CODEOWNERS | 1 +
1 file changed, 1 insertion(+)
create mode 100644 .github/CODEOWNERS
diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS
new file mode 100644
index 00000000..37f42cae
--- /dev/null
+++ b/.github/CODEOWNERS
@@ -0,0 +1 @@
+* @Typogalaxy
From 2ec0087028204eaae4069d675fdcdb99cd77840f Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 13:40:03 +1000
Subject: [PATCH 08/51] chore: add labeler.yml to .github
---
.github/labeler.yml | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
create mode 100644 .github/labeler.yml
diff --git a/.github/labeler.yml b/.github/labeler.yml
new file mode 100644
index 00000000..7a6e4867
--- /dev/null
+++ b/.github/labeler.yml
@@ -0,0 +1,40 @@
+README:
+- changed-files:
+ - any-glob-to-any-file: 'README.md'
+
+SECURITY:
+- changed-files:
+ - any-glob-to-any-file: 'SECURITY.md'
+
+.github:
+- changed-files:
+ - any-glob-to-any-file: '.github/**'
+
+backend:
+- changed-files:
+ - any-glob-to-any-file: 'app/backend/**'
+
+frontend:
+- changed-files:
+ - any-glob-to-any-file: 'app/frontend/**'
+
+docs:
+- changed-files:
+ - any-glob-to-any-file: 'docs/**'
+
+infra:
+- changed-files:
+ - any-glob-to-any-file: 'infra/**'
+
+o11y:
+- changed-files:
+ - any-glob-to-any-file: 'o11y/**'
+
+feature:
+ - head-branch: ['^feature', 'feature']
+
+feature:
+ - head-branch: ['^refactor', 'refactor']
+
+release:
+ - base-branch: 'main'
From dd42efa63456b07d3e92b5cdf615ea341de9a08e Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 16:14:46 +1000
Subject: [PATCH 09/51] change node version to node:24
---
apps/frontend/Dockerfile | 2 +-
infra/compose/docker-compose.dev.yml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/apps/frontend/Dockerfile b/apps/frontend/Dockerfile
index 17dcb823..0d3ddc85 100644
--- a/apps/frontend/Dockerfile
+++ b/apps/frontend/Dockerfile
@@ -1,4 +1,4 @@
-FROM node:23 AS build-stage
+FROM node:24 AS build-stage
ENV NODE_OPTIONS="--max-old-space-size=512"
diff --git a/infra/compose/docker-compose.dev.yml b/infra/compose/docker-compose.dev.yml
index 9389095d..97648c65 100644
--- a/infra/compose/docker-compose.dev.yml
+++ b/infra/compose/docker-compose.dev.yml
@@ -80,7 +80,7 @@ services:
- ../../apps/backend:/code
frontend:
- image: node:20
+ image: node:24
restart: unless-stopped
working_dir: /code
command: >
From 42fa7bd511cb384fb4ea4c8250dd609706b5e97c Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 17:05:14 +1000
Subject: [PATCH 10/51] chore: migrate from pip to uv
---
.github/workflows/backend-lint.yml | 11 +-
.github/workflows/backend-tests.yml | 11 +-
apps/backend/.python-version | 1 +
apps/backend/Dockerfile | 8 +-
apps/backend/dependencies.txt | 19 -
apps/backend/pyproject.toml | 23 +
apps/backend/requirements.txt | 45 --
apps/backend/uv.lock | 687 ++++++++++++++++++++++++++++
8 files changed, 730 insertions(+), 75 deletions(-)
create mode 100644 apps/backend/.python-version
delete mode 100644 apps/backend/dependencies.txt
create mode 100644 apps/backend/pyproject.toml
delete mode 100644 apps/backend/requirements.txt
create mode 100644 apps/backend/uv.lock
diff --git a/.github/workflows/backend-lint.yml b/.github/workflows/backend-lint.yml
index d427b264..56d06b2a 100644
--- a/.github/workflows/backend-lint.yml
+++ b/.github/workflows/backend-lint.yml
@@ -25,15 +25,18 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.14"
- cache: pip
- cache-dependency-path: apps/backend/requirements.txt
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
- name: Install lint dependencies
- run: pip install ruff
+ run: uv sync --locked --dev
- name: Run Ruff
run: >
- ruff check
+ uv run ruff check
articles
backend
core
diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml
index beabce6e..8da4869d 100644
--- a/.github/workflows/backend-tests.yml
+++ b/.github/workflows/backend-tests.yml
@@ -25,13 +25,16 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.14"
- cache: pip
- cache-dependency-path: apps/backend/requirements.txt
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
- name: Install backend dependencies
- run: pip install -r requirements.txt
+ run: uv sync --locked --dev
- name: Run Backend tests
env:
DJANGO_ENV: test
- run: python manage.py test
+ run: uv run python manage.py test
diff --git a/apps/backend/.python-version b/apps/backend/.python-version
new file mode 100644
index 00000000..3767b4b1
--- /dev/null
+++ b/apps/backend/.python-version
@@ -0,0 +1 @@
+3.14
\ No newline at end of file
diff --git a/apps/backend/Dockerfile b/apps/backend/Dockerfile
index 3f9e8db8..a33df1fd 100644
--- a/apps/backend/Dockerfile
+++ b/apps/backend/Dockerfile
@@ -1,16 +1,18 @@
# Pull Base Image
FROM python:3.14-slim
+COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
+
# Set Environment Variables
-ENV PIP_DISABLE_PIP_VERSION_CHECK=1
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
+ENV PATH="/code/.venv/bin:$PATH"
WORKDIR /code
# Install Dependencies
-COPY ./requirements.txt .
-RUN pip install -r requirements.txt
+COPY ./pyproject.toml ./uv.lock ./
+RUN uv sync --locked --no-dev --no-install-project
# Copy Project
COPY . .
diff --git a/apps/backend/dependencies.txt b/apps/backend/dependencies.txt
deleted file mode 100644
index e0be413f..00000000
--- a/apps/backend/dependencies.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-This file records all the packages installed using 'pip install'.
-For a more comprehensive and detailed list, please refer to 'requirements.txt'.
-
-Note: always use pip with 'requirements.txt', not this file.
-
-Django
-environs
-django-cors-headers
-djangorestframework
-django-filter
-django-redis
-django-rq
-django-tasks
-django-tasks-rq
-drf-spectacular
-Pillow
-requests
-gunicorn
-user-agents
\ No newline at end of file
diff --git a/apps/backend/pyproject.toml b/apps/backend/pyproject.toml
new file mode 100644
index 00000000..8a1e13ed
--- /dev/null
+++ b/apps/backend/pyproject.toml
@@ -0,0 +1,23 @@
+[project]
+name = "alien-commons-backend"
+version = "0.1.0"
+requires-python = ">=3.14"
+dependencies = [
+ "django>=6.0.4",
+ "django-cors-headers>=4.9.0",
+ "django-filter>=25.2",
+ "django-redis>=6.0.0",
+ "django-tasks-rq>=0.12.0",
+ "djangorestframework>=3.17.1",
+ "drf-spectacular>=0.29.0",
+ "environs>=15.0.1",
+ "gunicorn>=25.3.0",
+ "pillow>=12.2.0",
+ "requests>=2.33.1",
+ "user-agents>=2.2.0",
+]
+
+[dependency-groups]
+dev = [
+ "ruff>=0.15.11",
+]
diff --git a/apps/backend/requirements.txt b/apps/backend/requirements.txt
deleted file mode 100644
index 4126d31a..00000000
--- a/apps/backend/requirements.txt
+++ /dev/null
@@ -1,45 +0,0 @@
-asgiref==3.11.1
-attrs==26.1.0
-certifi==2026.2.25
-charset-normalizer==3.4.6
-click==8.3.1
-croniter==6.2.2
-crontab==1.0.5
-Django==6.0.3
-django-cors-headers==4.9.0
-django-filter==25.2
-django-redis==6.0.0
-django-rq==4.0.1
-django-stubs-ext==6.0.2
-django-tasks==0.12.0
-django-tasks-rq==0.12.0
-djangorestframework==3.17.1
-drf-spectacular==0.29.0
-environs==15.0.0
-freezegun==1.5.5
-gunicorn==25.3.0
-idna==3.11
-inflection==0.5.1
-jsonschema==4.26.0
-jsonschema-specifications==2025.9.1
-marshmallow==4.2.3
-packaging==26.0
-pillow==12.2.0
-psycopg2-binary==2.9.11
-python-dateutil==2.9.0.post0
-python-dotenv==1.2.2
-PyYAML==6.0.3
-redis==7.4.0
-referencing==0.37.0
-requests==2.33.1
-rpds-py==0.30.0
-rq==2.7.0
-rq-scheduler==0.14.0
-six==1.17.0
-sqlparse==0.5.5
-typing_extensions==4.15.0
-ua-parser==1.0.1
-ua-parser-builtins==202603
-uritemplate==4.2.0
-urllib3==2.6.3
-user-agents==2.2.0
diff --git a/apps/backend/uv.lock b/apps/backend/uv.lock
new file mode 100644
index 00000000..2d05cfc0
--- /dev/null
+++ b/apps/backend/uv.lock
@@ -0,0 +1,687 @@
+version = 1
+revision = 3
+requires-python = ">=3.14"
+
+[[package]]
+name = "alien-commons-backend"
+version = "0.1.0"
+source = { virtual = "." }
+dependencies = [
+ { name = "django" },
+ { name = "django-cors-headers" },
+ { name = "django-filter" },
+ { name = "django-redis" },
+ { name = "django-tasks-rq" },
+ { name = "djangorestframework" },
+ { name = "drf-spectacular" },
+ { name = "environs" },
+ { name = "gunicorn" },
+ { name = "pillow" },
+ { name = "requests" },
+ { name = "user-agents" },
+]
+
+[package.dev-dependencies]
+dev = [
+ { name = "ruff" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "django", specifier = ">=6.0.4" },
+ { name = "django-cors-headers", specifier = ">=4.9.0" },
+ { name = "django-filter", specifier = ">=25.2" },
+ { name = "django-redis", specifier = ">=6.0.0" },
+ { name = "django-tasks-rq", specifier = ">=0.12.0" },
+ { name = "djangorestframework", specifier = ">=3.17.1" },
+ { name = "drf-spectacular", specifier = ">=0.29.0" },
+ { name = "environs", specifier = ">=15.0.1" },
+ { name = "gunicorn", specifier = ">=25.3.0" },
+ { name = "pillow", specifier = ">=12.2.0" },
+ { name = "requests", specifier = ">=2.33.1" },
+ { name = "user-agents", specifier = ">=2.2.0" },
+]
+
+[package.metadata.requires-dev]
+dev = [{ name = "ruff", specifier = ">=0.15.11" }]
+
+[[package]]
+name = "asgiref"
+version = "3.11.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/63/40/f03da1264ae8f7cfdbf9146542e5e7e8100a4c66ab48e791df9a03d3f6c0/asgiref-3.11.1.tar.gz", hash = "sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce", size = 38550, upload-time = "2026-02-03T13:30:14.33Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" },
+]
+
+[[package]]
+name = "attrs"
+version = "26.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
+]
+
+[[package]]
+name = "certifi"
+version = "2026.2.25"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" },
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.4.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" },
+ { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" },
+ { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" },
+ { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" },
+ { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" },
+ { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" },
+ { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" },
+ { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" },
+ { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" },
+ { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" },
+ { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" },
+ { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" },
+ { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" },
+ { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" },
+]
+
+[[package]]
+name = "click"
+version = "8.3.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
+]
+
+[[package]]
+name = "croniter"
+version = "6.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/de/5832661ed55107b8a09af3f0a2e71e0957226a59eb1dcf0a445cce6daf20/croniter-6.2.2.tar.gz", hash = "sha256:ba60832a5ec8e12e51b8691c3309a113d1cf6526bdf1a48150ce8ec7a532d0ab", size = 113762, upload-time = "2026-03-15T08:43:48.112Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d0/39/783980e78cb92c2d7bdb1fc7dbc86e94ccc6d58224d76a7f1f51b6c51e30/croniter-6.2.2-py3-none-any.whl", hash = "sha256:a5d17b1060974d36251ea4faf388233eca8acf0d09cbd92d35f4c4ac8f279960", size = 45422, upload-time = "2026-03-15T08:43:46.626Z" },
+]
+
+[[package]]
+name = "crontab"
+version = "1.0.5"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d6/36/a255b6f5a2e22df03fd2b2f3088974b44b8c9e9407e26b44742cb7cfbf5b/crontab-1.0.5.tar.gz", hash = "sha256:f80e01b4f07219763a9869f926dd17147278e7965a928089bca6d3dc80ae46d5", size = 21963, upload-time = "2025-07-09T17:09:38.264Z" }
+
+[[package]]
+name = "django"
+version = "6.0.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "asgiref" },
+ { name = "sqlparse" },
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/60/b9/4155091ad1788b38563bd77a7258c0834e8c12a7f56f6975deaf54f8b61d/django-6.0.4.tar.gz", hash = "sha256:8cfa2572b3f2768b2e84983cf3c4811877a01edb64e817986ec5d60751c113ac", size = 10907407, upload-time = "2026-04-07T13:55:44.961Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e9/47/3d61d611609764aa71a37f7037b870e7bfb22937366974c4fd46cada7bab/django-6.0.4-py3-none-any.whl", hash = "sha256:14359c809fc16e8f81fd2b59d7d348e4d2d799da6840b10522b6edf7b8afc1da", size = 8368342, upload-time = "2026-04-07T13:55:37.999Z" },
+]
+
+[[package]]
+name = "django-cors-headers"
+version = "4.9.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "asgiref" },
+ { name = "django" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/21/39/55822b15b7ec87410f34cd16ce04065ff390e50f9e29f31d6d116fc80456/django_cors_headers-4.9.0.tar.gz", hash = "sha256:fe5d7cb59fdc2c8c646ce84b727ac2bca8912a247e6e68e1fb507372178e59e8", size = 21458, upload-time = "2025-09-18T10:40:52.326Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/30/d8/19ed1e47badf477d17fb177c1c19b5a21da0fd2d9f093f23be3fb86c5fab/django_cors_headers-4.9.0-py3-none-any.whl", hash = "sha256:15c7f20727f90044dcee2216a9fd7303741a864865f0c3657e28b7056f61b449", size = 12809, upload-time = "2025-09-18T10:40:50.843Z" },
+]
+
+[[package]]
+name = "django-filter"
+version = "25.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/2c/e4/465d2699cd388c0005fb8d6ae6709f239917c6d8790ac35719676fffdcf3/django_filter-25.2.tar.gz", hash = "sha256:760e984a931f4468d096f5541787efb8998c61217b73006163bf2f9523fe8f23", size = 143818, upload-time = "2025-10-05T09:51:31.521Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/c1/40/6a02495c5658beb1f31eb09952d8aa12ef3c2a66342331ce3a35f7132439/django_filter-25.2-py3-none-any.whl", hash = "sha256:9c0f8609057309bba611062fe1b720b4a873652541192d232dd28970383633e3", size = 94145, upload-time = "2025-10-05T09:51:29.728Z" },
+]
+
+[[package]]
+name = "django-redis"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+ { name = "redis" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/08/53/dbcfa1e528e0d6c39947092625b2c89274b5d88f14d357cee53c4d6dbbd4/django_redis-6.0.0.tar.gz", hash = "sha256:2d9cb12a20424a4c4dde082c6122f486628bae2d9c2bee4c0126a4de7fda00dd", size = 56904, upload-time = "2025-06-17T18:15:46.376Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7e/79/055dfcc508cfe9f439d9f453741188d633efa9eab90fc78a67b0ab50b137/django_redis-6.0.0-py3-none-any.whl", hash = "sha256:20bf0063a8abee567eb5f77f375143c32810c8700c0674ced34737f8de4e36c0", size = 33687, upload-time = "2025-06-17T18:15:34.165Z" },
+]
+
+[[package]]
+name = "django-rq"
+version = "4.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+ { name = "redis" },
+ { name = "rq" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/42/41/11a347cacdd4df2849ff12f4d6d988e01cca869e41db90c9dd6d27f13f53/django_rq-4.1.0.tar.gz", hash = "sha256:d08eabd70f3a17f289cd9fc68b15efe8e1f45b0fe64c5504161277e8cd9eeb8e", size = 43660, upload-time = "2026-04-05T10:32:47.81Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/4a/93/4f4d8db1d8ad6adbbdae46dc1d1453729af4dff8b722b8ced5f44447be82/django_rq-4.1.0-py3-none-any.whl", hash = "sha256:ba6e30cfbaefc3b96d9d9c9bd752ad5a9aa8b886e5d9483500b307c1733d2d39", size = 67426, upload-time = "2026-04-05T10:32:46.105Z" },
+]
+
+[[package]]
+name = "django-stubs-ext"
+version = "6.0.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/52/e0/f2e6caf627d176a51fba1ca9c34082c7ea10d3f521ff2c828532ca99fa91/django_stubs_ext-6.0.2.tar.gz", hash = "sha256:70b7b7ae837e7a6036e2facb64435550bf7cf8143c1a6e802864d4824ce6058c", size = 6751, upload-time = "2026-04-01T08:27:01.987Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2b/d2/9cb93cd1ef94ddc97c26c902ff75a859f5f154051fec98cf8242649b26ce/django_stubs_ext-6.0.2-py3-none-any.whl", hash = "sha256:b35bdec1995bf49765cc39fa89aa7c23f120a23d0cb0152ab7fb4e48ff7d667b", size = 10446, upload-time = "2026-04-01T08:27:00.847Z" },
+]
+
+[[package]]
+name = "django-tasks"
+version = "0.12.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+ { name = "django-stubs-ext" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/1d/6e/34d4e77bb7951e5a5acbd846f43240f062c68bb04d9c246cb446a55d4cbc/django_tasks-0.12.0.tar.gz", hash = "sha256:58be66c1e487da32a3ce7320bd1949d0d1dc381b9004819f92591eb37fb2c1b8", size = 15445, upload-time = "2026-02-06T16:15:33.593Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/07/e7/40c45768e84efd77e3ae6ffdcd2b5540011036cbb00c6df6ef2a2ad69551/django_tasks-0.12.0-py3-none-any.whl", hash = "sha256:ffcc1d7bdfad3bc5ef9c2d498596c6546484c9ec6b182fb9709c691eb66a8709", size = 15758, upload-time = "2026-02-06T16:15:32.168Z" },
+]
+
+[[package]]
+name = "django-tasks-rq"
+version = "0.12.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+ { name = "django-rq" },
+ { name = "django-stubs-ext" },
+ { name = "django-tasks" },
+ { name = "rq" },
+ { name = "rq-scheduler" },
+ { name = "typing-extensions" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/30/d3/c964bd32d2fc5df173c49eaab418784034baaf66cfa84ce9be44e7073e2b/django_tasks_rq-0.12.0.tar.gz", hash = "sha256:84020a65d7b92d867f28d3002b4a6b07514eeda99b880ad91bb041d63e2191e0", size = 10570, upload-time = "2026-02-06T16:49:27.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/dd/7cdc12b0ce24be13ecd6088c8baa2da4fa7e5b70c6f763570f0b0b750cbe/django_tasks_rq-0.12.0-py3-none-any.whl", hash = "sha256:ece4131fb31bd0410a958504c4491e81a4987eddd654b9b26311af96a743ba0d", size = 7316, upload-time = "2026-02-06T16:49:26.002Z" },
+]
+
+[[package]]
+name = "djangorestframework"
+version = "3.17.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ca/d7/c016e69fac19ff8afdc89db9d31d9ae43ae031e4d1993b20aca179b8301a/djangorestframework-3.17.1.tar.gz", hash = "sha256:a6def5f447fe78ff853bff1d47a3c59bf38f5434b031780b351b0c73a62db1a5", size = 905742, upload-time = "2026-03-24T16:58:33.705Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5a/e1/2c516bdc83652b1a60c6119366ac2c0607b479ed05cd6093f916ca8928f8/djangorestframework-3.17.1-py3-none-any.whl", hash = "sha256:c3c74dd3e83a5a3efc37b3c18d92bd6f86a6791c7b7d4dff62bb068500e76457", size = 898844, upload-time = "2026-03-24T16:58:31.845Z" },
+]
+
+[[package]]
+name = "drf-spectacular"
+version = "0.29.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+ { name = "djangorestframework" },
+ { name = "inflection" },
+ { name = "jsonschema" },
+ { name = "pyyaml" },
+ { name = "uritemplate" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5e/0e/a4f50d83e76cbe797eda88fc0083c8ca970cfa362b5586359ef06ec6f70a/drf_spectacular-0.29.0.tar.gz", hash = "sha256:0a069339ea390ce7f14a75e8b5af4a0860a46e833fd4af027411a3e94fc1a0cc", size = 241722, upload-time = "2025-11-02T03:40:26.348Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/32/d9/502c56fc3ca960075d00956283f1c44e8cafe433dada03f9ed2821f3073b/drf_spectacular-0.29.0-py3-none-any.whl", hash = "sha256:d1ee7c9535d89848affb4427347f7c4a22c5d22530b8842ef133d7b72e19b41a", size = 105433, upload-time = "2025-11-02T03:40:24.823Z" },
+]
+
+[[package]]
+name = "environs"
+version = "15.0.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "marshmallow" },
+ { name = "python-dotenv" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c5/f4/0273d36ab287a00866b69d4008e2ed2e479e4bc1eef4f8be2708f30ad15f/environs-15.0.1.tar.gz", hash = "sha256:638106bfb5d8c9a13ee51c23a9f2416baf9a748c8e537fec771102927cd02aa8", size = 36385, upload-time = "2026-04-06T14:15:12.676Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/49/fb/11e461eb609792f9f439398eb5f400fb4130ff2b9b59e0ceb346bb830a17/environs-15.0.1-py3-none-any.whl", hash = "sha256:a6aeb3e18d5649a4e74f62984f0d84ec869269cff588a43685272c72b5b8979b", size = 17357, upload-time = "2026-04-06T14:15:11.118Z" },
+]
+
+[[package]]
+name = "freezegun"
+version = "1.5.5"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/95/dd/23e2f4e357f8fd3bdff613c1fe4466d21bfb00a6177f238079b17f7b1c84/freezegun-1.5.5.tar.gz", hash = "sha256:ac7742a6cc6c25a2c35e9292dfd554b897b517d2dec26891a2e8debf205cb94a", size = 35914, upload-time = "2025-08-09T10:39:08.338Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5e/2e/b41d8a1a917d6581fc27a35d05561037b048e47df50f27f8ac9c7e27a710/freezegun-1.5.5-py3-none-any.whl", hash = "sha256:cd557f4a75cf074e84bc374249b9dd491eaeacd61376b9eb3c423282211619d2", size = 19266, upload-time = "2025-08-09T10:39:06.636Z" },
+]
+
+[[package]]
+name = "gunicorn"
+version = "25.3.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "packaging" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/c4/f4/e78fa054248fab913e2eab0332c6c2cb07421fca1ce56d8fe43b6aef57a4/gunicorn-25.3.0.tar.gz", hash = "sha256:f74e1b2f9f76f6cd1ca01198968bd2dd65830edc24b6e8e4d78de8320e2fe889", size = 634883, upload-time = "2026-03-27T00:00:26.092Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/43/c8/8aaf447698c4d59aa853fd318eed300b5c9e44459f242ab8ead6c9c09792/gunicorn-25.3.0-py3-none-any.whl", hash = "sha256:cacea387dab08cd6776501621c295a904fe8e3b7aae9a1a3cbb26f4e7ed54660", size = 208403, upload-time = "2026-03-27T00:00:27.386Z" },
+]
+
+[[package]]
+name = "idna"
+version = "3.11"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
+]
+
+[[package]]
+name = "inflection"
+version = "0.5.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091, upload-time = "2020-08-22T08:16:29.139Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454, upload-time = "2020-08-22T08:16:27.816Z" },
+]
+
+[[package]]
+name = "jsonschema"
+version = "4.26.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "jsonschema-specifications" },
+ { name = "referencing" },
+ { name = "rpds-py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" },
+]
+
+[[package]]
+name = "jsonschema-specifications"
+version = "2025.9.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "referencing" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" },
+]
+
+[[package]]
+name = "marshmallow"
+version = "4.3.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/25/7e/1dbd4096eb7c148cd2841841916f78820bb85a4d80a0c25c02d30815a7fb/marshmallow-4.3.0.tar.gz", hash = "sha256:fb43c53b3fe240b8f6af37223d6ef1636f927ad9bea8ab323afad95dff090880", size = 224485, upload-time = "2026-04-03T21:46:32.72Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/e0/ff24e25218bb59eb6290a530cea40651b14068b6e3659b20f9c175179632/marshmallow-4.3.0-py3-none-any.whl", hash = "sha256:46c4fe6984707e3cbd485dfebbf0a59874f58d695aad05c1668d15e8c6e13b46", size = 49148, upload-time = "2026-04-03T21:46:31.241Z" },
+]
+
+[[package]]
+name = "packaging"
+version = "26.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/de/0d2b39fb4af88a0258f3bac87dfcbb48e73fbdea4a2ed0e2213f9a4c2f9a/packaging-26.1.tar.gz", hash = "sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de", size = 215519, upload-time = "2026-04-14T21:12:49.362Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f", size = 95831, upload-time = "2026-04-14T21:12:47.56Z" },
+]
+
+[[package]]
+name = "pillow"
+version = "12.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/8c/21/c2bcdd5906101a30244eaffc1b6e6ce71a31bd0742a01eb89e660ebfac2d/pillow-12.2.0.tar.gz", hash = "sha256:a830b1a40919539d07806aa58e1b114df53ddd43213d9c8b75847eee6c0182b5", size = 46987819, upload-time = "2026-04-01T14:46:17.687Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/bf/98/4595daa2365416a86cb0d495248a393dfc84e96d62ad080c8546256cb9c0/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphoneos.whl", hash = "sha256:3adc9215e8be0448ed6e814966ecf3d9952f0ea40eb14e89a102b87f450660d8", size = 4100848, upload-time = "2026-04-01T14:44:48.48Z" },
+ { url = "https://files.pythonhosted.org/packages/0b/79/40184d464cf89f6663e18dfcf7ca21aae2491fff1a16127681bf1fa9b8cf/pillow-12.2.0-cp314-cp314-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:6a9adfc6d24b10f89588096364cc726174118c62130c817c2837c60cf08a392b", size = 4176515, upload-time = "2026-04-01T14:44:51.353Z" },
+ { url = "https://files.pythonhosted.org/packages/b0/63/703f86fd4c422a9cf722833670f4f71418fb116b2853ff7da722ea43f184/pillow-12.2.0-cp314-cp314-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:6a6e67ea2e6feda684ed370f9a1c52e7a243631c025ba42149a2cc5934dec295", size = 3640159, upload-time = "2026-04-01T14:44:53.588Z" },
+ { url = "https://files.pythonhosted.org/packages/71/e0/fb22f797187d0be2270f83500aab851536101b254bfa1eae10795709d283/pillow-12.2.0-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:2bb4a8d594eacdfc59d9e5ad972aa8afdd48d584ffd5f13a937a664c3e7db0ed", size = 5312185, upload-time = "2026-04-01T14:44:56.039Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/8c/1a9e46228571de18f8e28f16fabdfc20212a5d019f3e3303452b3f0a580d/pillow-12.2.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:80b2da48193b2f33ed0c32c38140f9d3186583ce7d516526d462645fd98660ae", size = 4695386, upload-time = "2026-04-01T14:44:58.663Z" },
+ { url = "https://files.pythonhosted.org/packages/70/62/98f6b7f0c88b9addd0e87c217ded307b36be024d4ff8869a812b241d1345/pillow-12.2.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22db17c68434de69d8ecfc2fe821569195c0c373b25cccb9cbdacf2c6e53c601", size = 6280384, upload-time = "2026-04-01T14:45:01.5Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/03/688747d2e91cfbe0e64f316cd2e8005698f76ada3130d0194664174fa5de/pillow-12.2.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:7b14cc0106cd9aecda615dd6903840a058b4700fcb817687d0ee4fc8b6e389be", size = 8091599, upload-time = "2026-04-01T14:45:04.5Z" },
+ { url = "https://files.pythonhosted.org/packages/f6/35/577e22b936fcdd66537329b33af0b4ccfefaeabd8aec04b266528cddb33c/pillow-12.2.0-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8cbeb542b2ebc6fcdacabf8aca8c1a97c9b3ad3927d46b8723f9d4f033288a0f", size = 6396021, upload-time = "2026-04-01T14:45:07.117Z" },
+ { url = "https://files.pythonhosted.org/packages/11/8d/d2532ad2a603ca2b93ad9f5135732124e57811d0168155852f37fbce2458/pillow-12.2.0-cp314-cp314-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4bfd07bc812fbd20395212969e41931001fd59eb55a60658b0e5710872e95286", size = 7083360, upload-time = "2026-04-01T14:45:09.763Z" },
+ { url = "https://files.pythonhosted.org/packages/5e/26/d325f9f56c7e039034897e7380e9cc202b1e368bfd04d4cbe6a441f02885/pillow-12.2.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:9aba9a17b623ef750a4d11b742cbafffeb48a869821252b30ee21b5e91392c50", size = 6507628, upload-time = "2026-04-01T14:45:12.378Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/f7/769d5632ffb0988f1c5e7660b3e731e30f7f8ec4318e94d0a5d674eb65a4/pillow-12.2.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:deede7c263feb25dba4e82ea23058a235dcc2fe1f6021025dc71f2b618e26104", size = 7209321, upload-time = "2026-04-01T14:45:15.122Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/7a/c253e3c645cd47f1aceea6a8bacdba9991bf45bb7dfe927f7c893e89c93c/pillow-12.2.0-cp314-cp314-win32.whl", hash = "sha256:632ff19b2778e43162304d50da0181ce24ac5bb8180122cbe1bf4673428328c7", size = 6479723, upload-time = "2026-04-01T14:45:17.797Z" },
+ { url = "https://files.pythonhosted.org/packages/cd/8b/601e6566b957ca50e28725cb6c355c59c2c8609751efbecd980db44e0349/pillow-12.2.0-cp314-cp314-win_amd64.whl", hash = "sha256:4e6c62e9d237e9b65fac06857d511e90d8461a32adcc1b9065ea0c0fa3a28150", size = 7217400, upload-time = "2026-04-01T14:45:20.529Z" },
+ { url = "https://files.pythonhosted.org/packages/d6/94/220e46c73065c3e2951bb91c11a1fb636c8c9ad427ac3ce7d7f3359b9b2f/pillow-12.2.0-cp314-cp314-win_arm64.whl", hash = "sha256:b1c1fbd8a5a1af3412a0810d060a78b5136ec0836c8a4ef9aa11807f2a22f4e1", size = 2554835, upload-time = "2026-04-01T14:45:23.162Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/ab/1b426a3974cb0e7da5c29ccff4807871d48110933a57207b5a676cccc155/pillow-12.2.0-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:57850958fe9c751670e49b2cecf6294acc99e562531f4bd317fa5ddee2068463", size = 5314225, upload-time = "2026-04-01T14:45:25.637Z" },
+ { url = "https://files.pythonhosted.org/packages/19/1e/dce46f371be2438eecfee2a1960ee2a243bbe5e961890146d2dee1ff0f12/pillow-12.2.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:d5d38f1411c0ed9f97bcb49b7bd59b6b7c314e0e27420e34d99d844b9ce3b6f3", size = 4698541, upload-time = "2026-04-01T14:45:28.355Z" },
+ { url = "https://files.pythonhosted.org/packages/55/c3/7fbecf70adb3a0c33b77a300dc52e424dc22ad8cdc06557a2e49523b703d/pillow-12.2.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c0a9f29ca8e79f09de89293f82fc9b0270bb4af1d58bc98f540cc4aedf03166", size = 6322251, upload-time = "2026-04-01T14:45:30.924Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/3c/7fbc17cfb7e4fe0ef1642e0abc17fc6c94c9f7a16be41498e12e2ba60408/pillow-12.2.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1610dd6c61621ae1cf811bef44d77e149ce3f7b95afe66a4512f8c59f25d9ebe", size = 8127807, upload-time = "2026-04-01T14:45:33.908Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/c3/a8ae14d6defd2e448493ff512fae903b1e9bd40b72efb6ec55ce0048c8ce/pillow-12.2.0-cp314-cp314t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0a34329707af4f73cf1782a36cd2289c0368880654a2c11f027bcee9052d35dd", size = 6433935, upload-time = "2026-04-01T14:45:36.623Z" },
+ { url = "https://files.pythonhosted.org/packages/6e/32/2880fb3a074847ac159d8f902cb43278a61e85f681661e7419e6596803ed/pillow-12.2.0-cp314-cp314t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8e9c4f5b3c546fa3458a29ab22646c1c6c787ea8f5ef51300e5a60300736905e", size = 7116720, upload-time = "2026-04-01T14:45:39.258Z" },
+ { url = "https://files.pythonhosted.org/packages/46/87/495cc9c30e0129501643f24d320076f4cc54f718341df18cc70ec94c44e1/pillow-12.2.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:fb043ee2f06b41473269765c2feae53fc2e2fbf96e5e22ca94fb5ad677856f06", size = 6540498, upload-time = "2026-04-01T14:45:41.879Z" },
+ { url = "https://files.pythonhosted.org/packages/18/53/773f5edca692009d883a72211b60fdaf8871cbef075eaa9d577f0a2f989e/pillow-12.2.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f278f034eb75b4e8a13a54a876cc4a5ab39173d2cdd93a638e1b467fc545ac43", size = 7239413, upload-time = "2026-04-01T14:45:44.705Z" },
+ { url = "https://files.pythonhosted.org/packages/c9/e4/4b64a97d71b2a83158134abbb2f5bd3f8a2ea691361282f010998f339ec7/pillow-12.2.0-cp314-cp314t-win32.whl", hash = "sha256:6bb77b2dcb06b20f9f4b4a8454caa581cd4dd0643a08bacf821216a16d9c8354", size = 6482084, upload-time = "2026-04-01T14:45:47.568Z" },
+ { url = "https://files.pythonhosted.org/packages/ba/13/306d275efd3a3453f72114b7431c877d10b1154014c1ebbedd067770d629/pillow-12.2.0-cp314-cp314t-win_amd64.whl", hash = "sha256:6562ace0d3fb5f20ed7290f1f929cae41b25ae29528f2af1722966a0a02e2aa1", size = 7225152, upload-time = "2026-04-01T14:45:50.032Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
+]
+
+[[package]]
+name = "python-dotenv"
+version = "1.2.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/82/ed/0301aeeac3e5353ef3d94b6ec08bbcabd04a72018415dcb29e588514bba8/python_dotenv-1.2.2.tar.gz", hash = "sha256:2c371a91fbd7ba082c2c1dc1f8bf89ca22564a087c2c287cd9b662adde799cf3", size = 50135, upload-time = "2026-03-01T16:00:26.196Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
+ { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
+ { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
+ { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
+ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
+]
+
+[[package]]
+name = "redis"
+version = "7.4.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7b/7f/3759b1d0d72b7c92f0d70ffd9dc962b7b7b5ee74e135f9d7d8ab06b8a318/redis-7.4.0.tar.gz", hash = "sha256:64a6ea7bf567ad43c964d2c30d82853f8df927c5c9017766c55a1d1ed95d18ad", size = 4943913, upload-time = "2026-03-24T09:14:37.53Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl", hash = "sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec", size = 409772, upload-time = "2026-03-24T09:14:35.968Z" },
+]
+
+[[package]]
+name = "referencing"
+version = "0.37.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "attrs" },
+ { name = "rpds-py" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" },
+]
+
+[[package]]
+name = "requests"
+version = "2.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "charset-normalizer" },
+ { name = "idna" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
+]
+
+[[package]]
+name = "rpds-py"
+version = "0.30.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" },
+ { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" },
+ { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" },
+ { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" },
+ { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" },
+ { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" },
+ { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" },
+ { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" },
+ { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" },
+ { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" },
+ { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" },
+ { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" },
+ { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" },
+ { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" },
+ { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" },
+ { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" },
+ { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" },
+ { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" },
+ { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" },
+ { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" },
+ { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" },
+]
+
+[[package]]
+name = "rq"
+version = "2.8.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "croniter" },
+ { name = "redis" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/39/91/cdb1517255b28fdaa44d0377caa810524e6a38d24373e5ef3911b04e4228/rq-2.8.0.tar.gz", hash = "sha256:dd75b5a19016efd235143058e82fdc5658a0c1e9a76664cc7d02f721c7308a4a", size = 743395, upload-time = "2026-04-17T00:21:13.734Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3c/07/9a8c6ac2440f8e532260adaa3fe4a8f7edfcac4f038f3428e71cb32e13e2/rq-2.8.0-py3-none-any.whl", hash = "sha256:49d87c8d0068b890e83052050ffd18be328339ae00c9c6d5dbf2702eb06107d2", size = 119484, upload-time = "2026-04-17T00:21:11.513Z" },
+]
+
+[[package]]
+name = "rq-scheduler"
+version = "0.14.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "crontab" },
+ { name = "freezegun" },
+ { name = "python-dateutil" },
+ { name = "rq" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/a0/4e/977bbcc1f3b25ed9ea60ec968b13f7147661defe5b2f9272b44fdb1c5549/rq-scheduler-0.14.0.tar.gz", hash = "sha256:2d5a14a1ab217f8693184ebaa1fe03838edcbc70b4f76572721c0b33058cd023", size = 16582, upload-time = "2024-10-29T13:30:32.641Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/bb/d0/28cedca9f3b321f30e69d644c2dcd7097ec21570ec9606fde56750621300/rq_scheduler-0.14.0-py2.py3-none-any.whl", hash = "sha256:d4ec221a3d8c11b3ff55e041f09d9af1e17f3253db737b6b97e86ab20fc3dc0d", size = 13874, upload-time = "2024-10-29T13:30:30.449Z" },
+]
+
+[[package]]
+name = "ruff"
+version = "0.15.11"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e4/8d/192f3d7103816158dfd5ea50d098ef2aec19194e6cbccd4b3485bdb2eb2d/ruff-0.15.11.tar.gz", hash = "sha256:f092b21708bf0e7437ce9ada249dfe688ff9a0954fc94abab05dcea7dcd29c33", size = 4637264, upload-time = "2026-04-16T18:46:26.58Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/02/1e/6aca3427f751295ab011828e15e9bf452200ac74484f1db4be0197b8170b/ruff-0.15.11-py3-none-linux_armv6l.whl", hash = "sha256:e927cfff503135c558eb581a0c9792264aae9507904eb27809cdcff2f2c847b7", size = 10607943, upload-time = "2026-04-16T18:46:05.967Z" },
+ { url = "https://files.pythonhosted.org/packages/e7/26/1341c262e74f36d4e84f3d6f4df0ac68cd53331a66bfc5080daa17c84c0b/ruff-0.15.11-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:7a1b5b2938d8f890b76084d4fa843604d787a912541eae85fd7e233398bbb73e", size = 10988592, upload-time = "2026-04-16T18:46:00.742Z" },
+ { url = "https://files.pythonhosted.org/packages/03/71/850b1d6ffa9564fbb6740429bad53df1094082fe515c8c1e74b6d8d05f18/ruff-0.15.11-py3-none-macosx_11_0_arm64.whl", hash = "sha256:d4176f3d194afbdaee6e41b9ccb1a2c287dba8700047df474abfbe773825d1cb", size = 10338501, upload-time = "2026-04-16T18:46:03.723Z" },
+ { url = "https://files.pythonhosted.org/packages/f2/11/cc1284d3e298c45a817a6aadb6c3e1d70b45c9b36d8d9cce3387b495a03a/ruff-0.15.11-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b17c886fb88203ced3afe7f14e8d5ae96e9d2f4ccc0ee66aa19f2c2675a27e4", size = 10670693, upload-time = "2026-04-16T18:46:41.941Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/9e/f8288b034ab72b371513c13f9a41d9ba3effac54e24bfb467b007daee2ca/ruff-0.15.11-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:49fafa220220afe7758a487b048de4c8f9f767f37dfefad46b9dd06759d003eb", size = 10416177, upload-time = "2026-04-16T18:46:21.717Z" },
+ { url = "https://files.pythonhosted.org/packages/85/71/504d79abfd3d92532ba6bbe3d1c19fada03e494332a59e37c7c2dabae427/ruff-0.15.11-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2ab8427e74a00d93b8bda1307b1e60970d40f304af38bccb218e056c220120d", size = 11221886, upload-time = "2026-04-16T18:46:15.086Z" },
+ { url = "https://files.pythonhosted.org/packages/43/5a/947e6ab7a5ad603d65b474be15a4cbc6d29832db5d762cd142e4e3a74164/ruff-0.15.11-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:195072c0c8e1fc8f940652073df082e37a5d9cb43b4ab1e4d0566ab8977a13b7", size = 12075183, upload-time = "2026-04-16T18:46:07.944Z" },
+ { url = "https://files.pythonhosted.org/packages/9f/a1/0b7bb6268775fdd3a0818aee8efd8f5b4e231d24dd4d528ced2534023182/ruff-0.15.11-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a3a0996d486af3920dec930a2e7daed4847dfc12649b537a9335585ada163e9e", size = 11516575, upload-time = "2026-04-16T18:46:31.687Z" },
+ { url = "https://files.pythonhosted.org/packages/30/c3/bb5168fc4d233cc06e95f482770d0f3c87945a0cd9f614b90ea8dc2f2833/ruff-0.15.11-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1bef2cb556d509259f1fe440bb9cd33c756222cf0a7afe90d15edf0866702431", size = 11306537, upload-time = "2026-04-16T18:46:36.988Z" },
+ { url = "https://files.pythonhosted.org/packages/e4/92/4cfae6441f3967317946f3b788136eecf093729b94d6561f963ed810c82e/ruff-0.15.11-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:030d921a836d7d4a12cf6e8d984a88b66094ccb0e0f17ddd55067c331191bf19", size = 11296813, upload-time = "2026-04-16T18:46:24.182Z" },
+ { url = "https://files.pythonhosted.org/packages/43/26/972784c5dde8313acde8ac71ba8ac65475b85db4a2352a76c9934361f9bc/ruff-0.15.11-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:0e783b599b4577788dbbb66b9addcef87e9a8832f4ce0c19e34bf55543a2f890", size = 10633136, upload-time = "2026-04-16T18:46:39.802Z" },
+ { url = "https://files.pythonhosted.org/packages/5b/53/3985a4f185020c2f367f2e08a103032e12564829742a1b417980ce1514a0/ruff-0.15.11-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:ae90592246625ba4a34349d68ec28d4400d75182b71baa196ddb9f82db025ef5", size = 10424701, upload-time = "2026-04-16T18:46:10.381Z" },
+ { url = "https://files.pythonhosted.org/packages/d3/57/bf0dfb32241b56c83bb663a826133da4bf17f682ba8c096973065f6e6a68/ruff-0.15.11-py3-none-musllinux_1_2_i686.whl", hash = "sha256:1f111d62e3c983ed20e0ca2e800f8d77433a5b1161947df99a5c2a3fb60514f0", size = 10873887, upload-time = "2026-04-16T18:46:29.157Z" },
+ { url = "https://files.pythonhosted.org/packages/02/05/e48076b2a57dc33ee8c7a957296f97c744ca891a8ffb4ffb1aaa3b3f517d/ruff-0.15.11-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:06f483d6646f59eaffba9ae30956370d3a886625f511a3108994000480621d1c", size = 11404316, upload-time = "2026-04-16T18:46:19.462Z" },
+ { url = "https://files.pythonhosted.org/packages/88/27/0195d15fe7a897cbcba0904792c4b7c9fdd958456c3a17d2ea6093716a9a/ruff-0.15.11-py3-none-win32.whl", hash = "sha256:476a2aa56b7da0b73a3ee80b6b2f0e19cce544245479adde7baa65466664d5f3", size = 10655535, upload-time = "2026-04-16T18:46:12.47Z" },
+ { url = "https://files.pythonhosted.org/packages/3a/5e/c927b325bd4c1d3620211a4b96f47864633199feed60fa936025ab27e090/ruff-0.15.11-py3-none-win_amd64.whl", hash = "sha256:8b6756d88d7e234fb0c98c91511aae3cd519d5e3ed271cae31b20f39cb2a12a3", size = 11779692, upload-time = "2026-04-16T18:46:17.268Z" },
+ { url = "https://files.pythonhosted.org/packages/63/b6/aeadee5443e49baa2facd51131159fd6301cc4ccfc1541e4df7b021c37dd/ruff-0.15.11-py3-none-win_arm64.whl", hash = "sha256:063fed18cc1bbe0ee7393957284a6fe8b588c6a406a285af3ee3f46da2391ee4", size = 11032614, upload-time = "2026-04-16T18:46:34.487Z" },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
+]
+
+[[package]]
+name = "sqlparse"
+version = "0.5.5"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/90/76/437d71068094df0726366574cf3432a4ed754217b436eb7429415cf2d480/sqlparse-0.5.5.tar.gz", hash = "sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e", size = 120815, upload-time = "2025-12-19T07:17:45.073Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" },
+]
+
+[[package]]
+name = "typing-extensions"
+version = "4.15.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" },
+]
+
+[[package]]
+name = "tzdata"
+version = "2026.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/19/f5/cd531b2d15a671a40c0f66cf06bc3570a12cd56eef98960068ebbad1bf5a/tzdata-2026.1.tar.gz", hash = "sha256:67658a1903c75917309e753fdc349ac0efd8c27db7a0cb406a25be4840f87f98", size = 197639, upload-time = "2026-04-03T11:25:22.002Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl", hash = "sha256:4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9", size = 348952, upload-time = "2026-04-03T11:25:20.313Z" },
+]
+
+[[package]]
+name = "ua-parser"
+version = "1.0.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ua-parser-builtins" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/90/98/5e4b52d772a048af122a6fc5ce365c311efb9f5e79c55fd4fdd7c9f59e83/ua_parser-1.0.2.tar.gz", hash = "sha256:bab404ad42fb37f943107da2f6003ffc79724d11cc95076a7a539513371779da", size = 33239, upload-time = "2026-04-05T20:14:28.229Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a9/7c/6367995ff57aaa2d9e1055adbaec2519cf5a979780a83a93fdf8c6ec37be/ua_parser-1.0.2-py3-none-any.whl", hash = "sha256:0f8e6d0484af2a9ff804bba5a4fe696e87c028eaba98ad9a7dfae873fef7788a", size = 31219, upload-time = "2026-04-05T20:14:26.913Z" },
+]
+
+[[package]]
+name = "ua-parser-builtins"
+version = "202603"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/3e/6f/73a4d37deefb159556d39d654b5bad67b6874d1ad0b20b96fb5a04de3949/ua_parser_builtins-202603-py3-none-any.whl", hash = "sha256:67478397a68fac1a98fd0a31c416ea7c65a719141fc151d0211316f2cd337cc9", size = 89573, upload-time = "2026-03-01T20:50:02.491Z" },
+]
+
+[[package]]
+name = "uritemplate"
+version = "4.2.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/98/60/f174043244c5306c9988380d2cb10009f91563fc4b31293d27e17201af56/uritemplate-4.2.0.tar.gz", hash = "sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e", size = 33267, upload-time = "2025-06-02T15:12:06.318Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl", hash = "sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686", size = 11488, upload-time = "2025-06-02T15:12:03.405Z" },
+]
+
+[[package]]
+name = "urllib3"
+version = "2.6.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
+]
+
+[[package]]
+name = "user-agents"
+version = "2.2.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "ua-parser" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/e3/e1/63c5bfb485a945010c8cbc7a52f85573561737648d36b30394248730a7bc/user-agents-2.2.0.tar.gz", hash = "sha256:d36d25178db65308d1458c5fa4ab39c9b2619377010130329f3955e7626ead26", size = 9525, upload-time = "2020-08-23T06:01:56.382Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/8f/1c/20bb3d7b2bad56d881e3704131ddedbb16eb787101306887dff349064662/user_agents-2.2.0-py3-none-any.whl", hash = "sha256:a98c4dc72ecbc64812c4534108806fb0a0b3a11ec3fd1eafe807cee5b0a942e7", size = 9614, upload-time = "2020-08-23T06:01:54.047Z" },
+]
From 6fd690810f3261b8401d3606b748ee1f6c9186a9 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 17:14:12 +1000
Subject: [PATCH 11/51] chore: add api schema generation github workflow
---
.github/workflows/backend-api-docs.yml | 48 +++++++++++++++++++
.../{docs-pages.yml => docs-deploy.yml} | 2 +-
.github/workflows/docs-validate.yml | 2 +-
3 files changed, 50 insertions(+), 2 deletions(-)
create mode 100644 .github/workflows/backend-api-docs.yml
rename .github/workflows/{docs-pages.yml => docs-deploy.yml} (96%)
diff --git a/.github/workflows/backend-api-docs.yml b/.github/workflows/backend-api-docs.yml
new file mode 100644
index 00000000..37ee5b59
--- /dev/null
+++ b/.github/workflows/backend-api-docs.yml
@@ -0,0 +1,48 @@
+name: Backend API Docs
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - "apps/backend/**"
+ - ".github/workflows/backend-api-docs.yml"
+
+permissions:
+ contents: read
+
+jobs:
+ generate-openapi:
+ runs-on: ubuntu-latest
+
+ defaults:
+ run:
+ working-directory: apps/backend
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.14"
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
+
+ - name: Install backend dependencies
+ run: uv sync --locked --dev
+
+ - name: Generate OpenAPI schema
+ env:
+ DJANGO_ENV: test
+ run: uv run python manage.py spectacular --file openapi.yaml --validate
+
+ - name: Upload OpenAPI schema artifact
+ uses: actions/upload-artifact@v4
+ with:
+ name: backend-openapi-schema
+ path: apps/backend/openapi.yaml
diff --git a/.github/workflows/docs-pages.yml b/.github/workflows/docs-deploy.yml
similarity index 96%
rename from .github/workflows/docs-pages.yml
rename to .github/workflows/docs-deploy.yml
index 6180dd8e..201b53d8 100644
--- a/.github/workflows/docs-pages.yml
+++ b/.github/workflows/docs-deploy.yml
@@ -7,7 +7,7 @@ on:
paths:
- "docs/**"
- ".github/workflows/docs-validate.yml"
- - ".github/workflows/docs-pages.yml"
+ - ".github/workflows/docs-deploy.yml"
workflow_dispatch:
permissions:
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index 658621b9..7b8080e9 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -5,7 +5,7 @@ on:
paths:
- "docs/**"
- ".github/workflows/docs-validate.yml"
- - ".github/workflows/docs-pages.yml"
+ - ".github/workflows/docs-deploy.yml"
permissions:
contents: read
From dcee8a3131ddb6d4a0a5bcad3f8e70976a7ccfa8 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 17:25:42 +1000
Subject: [PATCH 12/51] chore: docs migrate from pip to uv
---
docs/.python-version | 1 +
docs/pyproject.toml | 7 ++
docs/requirements.txt | 30 -----
docs/uv.lock | 249 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 257 insertions(+), 30 deletions(-)
create mode 100644 docs/.python-version
create mode 100644 docs/pyproject.toml
delete mode 100644 docs/requirements.txt
create mode 100644 docs/uv.lock
diff --git a/docs/.python-version b/docs/.python-version
new file mode 100644
index 00000000..3767b4b1
--- /dev/null
+++ b/docs/.python-version
@@ -0,0 +1 @@
+3.14
\ No newline at end of file
diff --git a/docs/pyproject.toml b/docs/pyproject.toml
new file mode 100644
index 00000000..5f5896aa
--- /dev/null
+++ b/docs/pyproject.toml
@@ -0,0 +1,7 @@
+[project]
+name = "alien-commons-docs"
+version = "0.0.1"
+requires-python = ">=3.14"
+dependencies = [
+ "mkdocs>=1.6.1",
+]
diff --git a/docs/requirements.txt b/docs/requirements.txt
deleted file mode 100644
index 580e5476..00000000
--- a/docs/requirements.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-babel==2.18.0
-backrefs==6.2
-certifi==2026.2.25
-charset-normalizer==3.4.4
-click==8.2.1
-colorama==0.4.6
-ghp-import==2.1.0
-idna==3.11
-Jinja2==3.1.6
-Markdown==3.10.2
-MarkupSafe==3.0.3
-mergedeep==1.3.4
-mkdocs==1.6.1
-mkdocs-get-deps==0.2.0
-mkdocs-material==9.7.4
-mkdocs-material-extensions==1.3.1
-mkdocs-static-i18n==1.3.1
-packaging==26.0
-paginate==0.5.7
-pathspec==1.0.4
-platformdirs==4.9.2
-Pygments==2.20.0
-pymdown-extensions==10.21
-python-dateutil==2.9.0.post0
-PyYAML==6.0.3
-pyyaml_env_tag==1.1
-requests==2.33.0
-six==1.17.0
-urllib3==2.6.3
-watchdog==6.0.0
diff --git a/docs/uv.lock b/docs/uv.lock
new file mode 100644
index 00000000..4971039a
--- /dev/null
+++ b/docs/uv.lock
@@ -0,0 +1,249 @@
+version = 1
+revision = 3
+requires-python = ">=3.14"
+
+[[package]]
+name = "alien-commons-docs"
+version = "0.0.1"
+source = { virtual = "." }
+dependencies = [
+ { name = "mkdocs" },
+]
+
+[package.metadata]
+requires-dist = [{ name = "mkdocs", specifier = ">=1.6.1" }]
+
+[[package]]
+name = "click"
+version = "8.3.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
+]
+
+[[package]]
+name = "ghp-import"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" },
+]
+
+[[package]]
+name = "jinja2"
+version = "3.1.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markupsafe" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
+]
+
+[[package]]
+name = "markdown"
+version = "3.10.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" },
+]
+
+[[package]]
+name = "markupsafe"
+version = "3.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" },
+ { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" },
+ { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" },
+ { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" },
+ { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" },
+ { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" },
+ { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" },
+ { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" },
+ { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" },
+ { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" },
+ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
+]
+
+[[package]]
+name = "mergedeep"
+version = "1.3.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" },
+]
+
+[[package]]
+name = "mkdocs"
+version = "1.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "ghp-import" },
+ { name = "jinja2" },
+ { name = "markdown" },
+ { name = "markupsafe" },
+ { name = "mergedeep" },
+ { name = "mkdocs-get-deps" },
+ { name = "packaging" },
+ { name = "pathspec" },
+ { name = "pyyaml" },
+ { name = "pyyaml-env-tag" },
+ { name = "watchdog" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" },
+]
+
+[[package]]
+name = "mkdocs-get-deps"
+version = "0.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mergedeep" },
+ { name = "platformdirs" },
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" },
+]
+
+[[package]]
+name = "packaging"
+version = "26.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/de/0d2b39fb4af88a0258f3bac87dfcbb48e73fbdea4a2ed0e2213f9a4c2f9a/packaging-26.1.tar.gz", hash = "sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de", size = 215519, upload-time = "2026-04-14T21:12:49.362Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f", size = 95831, upload-time = "2026-04-14T21:12:47.56Z" },
+]
+
+[[package]]
+name = "pathspec"
+version = "1.0.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" },
+]
+
+[[package]]
+name = "platformdirs"
+version = "4.9.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
+ { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
+ { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
+ { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
+ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
+]
+
+[[package]]
+name = "pyyaml-env-tag"
+version = "1.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
+]
+
+[[package]]
+name = "watchdog"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" },
+ { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" },
+ { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" },
+ { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" },
+ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" },
+]
From 66a7d67d0e057fd2059adcf2d68142a90e4304b3 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 17:34:19 +1000
Subject: [PATCH 13/51] chore: migrate docs from pip to uv (part 2)
---
.github/workflows/docs-deploy.yml | 17 ++-
.github/workflows/docs-validate.yml | 17 ++-
docs/pyproject.toml | 5 +
docs/uv.lock | 188 +++++++++++++++++++++++++++-
4 files changed, 214 insertions(+), 13 deletions(-)
diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml
index 201b53d8..29f1739f 100644
--- a/.github/workflows/docs-deploy.yml
+++ b/.github/workflows/docs-deploy.yml
@@ -23,6 +23,10 @@ jobs:
build:
runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: docs
+
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -31,19 +35,20 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.14"
- cache: pip
- cache-dependency-path: docs/requirements.txt
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
- name: Configure GitHub Pages
uses: actions/configure-pages@v5
- name: Install documentation dependencies
- working-directory: docs
- run: pip install -r requirements.txt
+ run: uv sync --locked
- name: Build MkDocs site
- working-directory: docs
- run: mkdocs build --strict
+ run: uv run mkdocs build --strict
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index 7b8080e9..be0d9b35 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -14,6 +14,10 @@ jobs:
validate:
runs-on: ubuntu-latest
+ defaults:
+ run:
+ working-directory: docs
+
steps:
- name: Checkout repository
uses: actions/checkout@v4
@@ -22,13 +26,14 @@ jobs:
uses: actions/setup-python@v5
with:
python-version: "3.14"
- cache: pip
- cache-dependency-path: docs/requirements.txt
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
- name: Install documentation dependencies
- working-directory: docs
- run: pip install -r requirements.txt
+ run: uv sync --locked
- name: Build and validate MkDocs site
- working-directory: docs
- run: mkdocs build --strict
+ run: uv run mkdocs build --strict
diff --git a/docs/pyproject.toml b/docs/pyproject.toml
index 5f5896aa..e083caf7 100644
--- a/docs/pyproject.toml
+++ b/docs/pyproject.toml
@@ -4,4 +4,9 @@ version = "0.0.1"
requires-python = ">=3.14"
dependencies = [
"mkdocs>=1.6.1",
+ "mkdocs-material>=9.7.4",
+ "mkdocs-static-i18n>=1.3.1",
]
+
+[tool.uv]
+package = false
diff --git a/docs/uv.lock b/docs/uv.lock
index 4971039a..a856e069 100644
--- a/docs/uv.lock
+++ b/docs/uv.lock
@@ -8,10 +8,89 @@ version = "0.0.1"
source = { virtual = "." }
dependencies = [
{ name = "mkdocs" },
+ { name = "mkdocs-material" },
+ { name = "mkdocs-static-i18n" },
]
[package.metadata]
-requires-dist = [{ name = "mkdocs", specifier = ">=1.6.1" }]
+requires-dist = [
+ { name = "mkdocs", specifier = ">=1.6.1" },
+ { name = "mkdocs-material", specifier = ">=9.7.4" },
+ { name = "mkdocs-static-i18n", specifier = ">=1.3.1" },
+]
+
+[[package]]
+name = "babel"
+version = "2.18.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" },
+]
+
+[[package]]
+name = "backrefs"
+version = "6.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/4e/a6/e325ec73b638d3ede4421b5445d4a0b8b219481826cc079d510100af356c/backrefs-6.2.tar.gz", hash = "sha256:f44ff4d48808b243b6c0cdc6231e22195c32f77046018141556c66f8bab72a49", size = 7012303, upload-time = "2026-02-16T19:10:15.828Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1b/39/3765df263e08a4df37f4f43cb5aa3c6c17a4bdd42ecfe841e04c26037171/backrefs-6.2-py310-none-any.whl", hash = "sha256:0fdc7b012420b6b144410342caeb8adc54c6866cf12064abc9bb211302e496f8", size = 381075, upload-time = "2026-02-16T19:10:04.322Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl", hash = "sha256:08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be", size = 392874, upload-time = "2026-02-16T19:10:06.314Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl", hash = "sha256:c3f4b9cb2af8cda0d87ab4f57800b57b95428488477be164dd2b47be54db0c90", size = 398787, upload-time = "2026-02-16T19:10:08.274Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-none-any.whl", hash = "sha256:12df81596ab511f783b7d87c043ce26bc5b0288cf3bb03610fe76b8189282b2b", size = 400747, upload-time = "2026-02-16T19:10:09.791Z" },
+ { url = "https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl", hash = "sha256:e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7", size = 412602, upload-time = "2026-02-16T19:10:12.317Z" },
+ { url = "https://files.pythonhosted.org/packages/21/f8/d02f650c47d05034dcd6f9c8cf94f39598b7a89c00ecda0ecb2911bc27e9/backrefs-6.2-py39-none-any.whl", hash = "sha256:664e33cd88c6840b7625b826ecf2555f32d491800900f5a541f772c485f7cda7", size = 381077, upload-time = "2026-02-16T19:10:13.74Z" },
+]
+
+[[package]]
+name = "certifi"
+version = "2026.2.25"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" },
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.4.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" },
+ { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" },
+ { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" },
+ { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" },
+ { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" },
+ { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" },
+ { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" },
+ { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" },
+ { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" },
+ { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" },
+ { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" },
+ { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" },
+ { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" },
+ { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" },
+]
[[package]]
name = "click"
@@ -46,6 +125,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" },
]
+[[package]]
+name = "idna"
+version = "3.11"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
+]
+
[[package]]
name = "jinja2"
version = "3.1.6"
@@ -144,6 +232,49 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" },
]
+[[package]]
+name = "mkdocs-material"
+version = "9.7.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "babel" },
+ { name = "backrefs" },
+ { name = "colorama" },
+ { name = "jinja2" },
+ { name = "markdown" },
+ { name = "mkdocs" },
+ { name = "mkdocs-material-extensions" },
+ { name = "paginate" },
+ { name = "pygments" },
+ { name = "pymdown-extensions" },
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" },
+]
+
+[[package]]
+name = "mkdocs-material-extensions"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" },
+]
+
+[[package]]
+name = "mkdocs-static-i18n"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mkdocs" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ce/f9/51e2ffda9c7210bc35a24f3717b08c052cd4b728dfa87f901c00d8005259/mkdocs_static_i18n-1.3.1.tar.gz", hash = "sha256:a6125ea7db6cc1a900d76a967f262535af09831160a93c56d7f0d522a79b5faf", size = 1371325, upload-time = "2026-02-20T10:42:41.835Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6a/0b/43ff4afb6b438d47718b1959a22075ed95d8460d8c47381878b37a40de63/mkdocs_static_i18n-1.3.1-py3-none-any.whl", hash = "sha256:4036e24795a150c9c4d4b001ed24a43aec01335f76188dbe5a5d8fb4a27eba65", size = 21853, upload-time = "2026-02-20T10:42:40.551Z" },
+]
+
[[package]]
name = "packaging"
version = "26.1"
@@ -153,6 +284,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f", size = 95831, upload-time = "2026-04-14T21:12:47.56Z" },
]
+[[package]]
+name = "paginate"
+version = "0.5.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" },
+]
+
[[package]]
name = "pathspec"
version = "1.0.4"
@@ -171,6 +311,28 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" },
]
+[[package]]
+name = "pygments"
+version = "2.20.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
+]
+
+[[package]]
+name = "pymdown-extensions"
+version = "10.21.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markdown" },
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/08/f1c908c581fd11913da4711ea7ba32c0eee40b0190000996bb863b0c9349/pymdown_extensions-10.21.2.tar.gz", hash = "sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc", size = 853922, upload-time = "2026-03-29T15:01:55.233Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl", hash = "sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638", size = 268901, upload-time = "2026-03-29T15:01:53.244Z" },
+]
+
[[package]]
name = "python-dateutil"
version = "2.9.0.post0"
@@ -221,6 +383,21 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" },
]
+[[package]]
+name = "requests"
+version = "2.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "charset-normalizer" },
+ { name = "idna" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
+]
+
[[package]]
name = "six"
version = "1.17.0"
@@ -230,6 +407,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
]
+[[package]]
+name = "urllib3"
+version = "2.6.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
+]
+
[[package]]
name = "watchdog"
version = "6.0.0"
From 4cb363eb07f03fc6bd844bdde0bdde84351a60c1 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 22:19:13 +1000
Subject: [PATCH 14/51] refactor: replace JSONField with markdown and html
TextField
---
README.md | 2 +
apps/backend/articles/models.py | 70 +++++++++++++++++++--------------
2 files changed, 43 insertions(+), 29 deletions(-)
diff --git a/README.md b/README.md
index 1e3123bb..2e8828cc 100644
--- a/README.md
+++ b/README.md
@@ -2,6 +2,8 @@
A website for every Technical Minecraft player.
+> *This project starts on Jun 29, 2025.*
+
## Tech Stacks
This is a monorepo-based web project with frontend-backend separation architecture.
diff --git a/apps/backend/articles/models.py b/apps/backend/articles/models.py
index 90190bd9..f2a861b0 100644
--- a/apps/backend/articles/models.py
+++ b/apps/backend/articles/models.py
@@ -3,7 +3,7 @@
from django.conf import settings
from django.utils.translation import gettext_lazy as _
-from core.model_mixins import TimeStampedMixin, UUIDPrimaryKeyMixin, SoftDeleteMixin
+from core.model_mixins import TimeStampedMixin, UUIDPrimaryKeyMixin, SoftDeleteMixin, CreatedAtMixin
User = get_user_model()
@@ -21,6 +21,8 @@ class SourceArticle(UUIDPrimaryKeyMixin,
- id
- is_deleted
"""
+ default_title = _("Untitled")
+ default_markdown = _("# Untitled")
class ArticleStatus(models.IntegerChoices):
"""
@@ -37,20 +39,30 @@ class ArticleStatus(models.IntegerChoices):
help_text=_("The author of the article"),
)
title = models.CharField(
- max_length=60, db_index=True, default="",
+ max_length=100, db_index=True, blank=True, default=default_title,
verbose_name=_("title"),
help_text=_("The title of the article"),
)
- article = models.FileField(
- blank=True,
- verbose_name=_("article"),
- help_text=_("The article markdown file"),
+ markdown = models.TextField(
+ blank=True, default=default_markdown,
+ verbose_name=_("content in markdown"),
+ help_text=_("The content of the article (in Markdown format)"),
+ )
+ version = models.PositiveIntegerField(
+ default=1,
+ verbose_name=_("version"),
+ help_text=_("The current draft version of the article"),
)
status = models.IntegerField(
choices=ArticleStatus.choices, default=ArticleStatus.DRAFT, db_index=True,
verbose_name=_("status"),
help_text=_("The status of the article"),
)
+ last_saved_at = models.DateTimeField(
+ blank=True, null=True,
+ verbose_name=_("last saved at"),
+ help_text=_("The last saved DateTime of the Markdown content"),
+ )
last_moderation_at = models.DateTimeField(
blank=True, null=True,
verbose_name=_("last moderation at"),
@@ -65,6 +77,7 @@ class Meta:
indexes = [
models.Index(fields=['author', 'created_at']),
models.Index(fields=['status', 'created_at']),
+ models.Index(fields=['author', 'status', 'updated_at'])
]
def __str__(self):
@@ -87,14 +100,18 @@ class PublishedArticle(UUIDPrimaryKeyMixin,
help_text=_("The source article of the published version"),
)
title = models.CharField(
- max_length=60, db_index=True, default="",
+ max_length=100, db_index=True,
verbose_name=_("title"),
help_text=_("The title of the published article"),
)
- content = models.JSONField(
- blank=True, default=dict,
- verbose_name=_("content"),
- help_text=_("The content of the published article"),
+ html = models.TextField(
+ verbose_name=_("content in html"),
+ help_text=_("The content of the article (in HTML format)"),
+ )
+ publication_at = models.DateTimeField(
+ db_index=True,
+ verbose_name=_("published at"),
+ help_text=_("Th DateTime of publication of the article"),
)
class Meta:
@@ -107,12 +124,15 @@ def __str__(self):
return f"Published version of article {self.source_article}"
-class ArticleSnapshot(UUIDPrimaryKeyMixin, models.Model):
+class ArticleSnapshot(UUIDPrimaryKeyMixin,
+ CreatedAtMixin,
+ models.Model):
"""
Freeze the current version of the article for review and retrospection.
Mixin fields:
- id
+ - created_at
"""
class SnapshotStatus(models.IntegerChoices):
@@ -127,17 +147,16 @@ class SnapshotStatus(models.IntegerChoices):
help_text=_("The source article of the article snapshot"),
)
title = models.CharField(
- max_length=60, db_index=True, default="",
+ max_length=100, db_index=True,
verbose_name=_("title"),
help_text=_("The title of the article snapshot"),
)
- content = models.JSONField(
- blank=True, default=dict,
- verbose_name=_("content"),
- help_text=_("The content of the article snapshot"),
+ markdown = models.TextField(
+ verbose_name=_("content in markdown"),
+ help_text=_("The content of the article (in Markdown format)"),
)
content_hash = models.CharField(
- max_length=64, blank=True, default="", db_index=True,
+ max_length=64, default="", db_index=True,
verbose_name=_("content hash"),
help_text=_("The content hash of the article snapshot"),
)
@@ -146,11 +165,6 @@ class SnapshotStatus(models.IntegerChoices):
verbose_name=_("moderation status"),
help_text=_("The moderation status of the article snapshot"),
)
- created_at = models.DateTimeField(
- auto_now_add=True, db_index=True, editable=False,
- verbose_name=_("created at"),
- help_text=_("The created DateTime of the article snapshot"),
- )
class Meta:
verbose_name = _("article snapshot")
@@ -167,12 +181,15 @@ def __str__(self):
return f"Snapshot of article {self.source_article_id}"
-class ArticleEvent(UUIDPrimaryKeyMixin, models.Model):
+class ArticleEvent(UUIDPrimaryKeyMixin,
+ CreatedAtMixin,
+ models.Model):
"""
Record events related to articles
Mixin fields:
- id
+ - created_at
"""
class EventType(models.IntegerChoices):
@@ -208,11 +225,6 @@ class EventType(models.IntegerChoices):
verbose_name=_("actor"),
help_text=_("The actor of the article event"),
)
- created_at = models.DateTimeField(
- auto_now_add=True, db_index=True, editable=False,
- verbose_name=_("created at"),
- help_text=_("The created DateTime of the article event"),
- )
class Meta:
verbose_name = _("article event")
From 358084b862d34e6a794572b68e54bd5ecc566b1d Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 22:37:33 +1000
Subject: [PATCH 15/51] refactor: adapt service layer for new models
---
apps/backend/articles/models.py | 10 +++++++---
apps/backend/articles/services/articles.py | 20 +++++++++++---------
2 files changed, 18 insertions(+), 12 deletions(-)
diff --git a/apps/backend/articles/models.py b/apps/backend/articles/models.py
index f2a861b0..9023be41 100644
--- a/apps/backend/articles/models.py
+++ b/apps/backend/articles/models.py
@@ -51,7 +51,7 @@ class ArticleStatus(models.IntegerChoices):
version = models.PositiveIntegerField(
default=1,
verbose_name=_("version"),
- help_text=_("The current draft version of the article"),
+ help_text=_("The current draft version of the source article"),
)
status = models.IntegerField(
choices=ArticleStatus.choices, default=ArticleStatus.DRAFT, db_index=True,
@@ -66,7 +66,7 @@ class ArticleStatus(models.IntegerChoices):
last_moderation_at = models.DateTimeField(
blank=True, null=True,
verbose_name=_("last moderation at"),
- help_text=_("The last moderation DateTime of the article"),
+ help_text=_("The last moderation DateTime of the source article"),
)
class Meta:
@@ -111,7 +111,7 @@ class PublishedArticle(UUIDPrimaryKeyMixin,
publication_at = models.DateTimeField(
db_index=True,
verbose_name=_("published at"),
- help_text=_("Th DateTime of publication of the article"),
+ help_text=_("Th DateTime of publication of the published article"),
)
class Meta:
@@ -160,6 +160,10 @@ class SnapshotStatus(models.IntegerChoices):
verbose_name=_("content hash"),
help_text=_("The content hash of the article snapshot"),
)
+ source_version = models.PositiveIntegerField(
+ verbose_name=_("source version"),
+ help_text=_("The source version of the article snapshot"),
+ )
moderation_status = models.IntegerField(
choices=SnapshotStatus.choices, default=SnapshotStatus.PENDING, db_index=True,
verbose_name=_("moderation status"),
diff --git a/apps/backend/articles/services/articles.py b/apps/backend/articles/services/articles.py
index 4ecc1985..5a38c139 100644
--- a/apps/backend/articles/services/articles.py
+++ b/apps/backend/articles/services/articles.py
@@ -89,7 +89,7 @@ def _get_last_snapshot(self):
)
@staticmethod
- def _hash_and_normalize(title, content):
+ def _hash_and_normalize(title, markdown):
"""
Make a stable representation of the article and calculate its hash value.
It strips the spaces before and after the title and the summary.
@@ -97,14 +97,14 @@ def _hash_and_normalize(title, content):
"""
items_to_hash = {
'title': title.strip(),
- 'content': content,
+ 'markdown': markdown,
}
items_json = json.dumps(items_to_hash, sort_keys=True)
hash_value = hashlib.blake2b(items_json.encode("utf-8")).hexdigest()
return hash_value
- def _get_the_published_article(self):
+ def _get_the_published_article(self) -> PublishedArticle:
"""
Return the published version of the article
"""
@@ -132,7 +132,7 @@ def _within_submit_cooldown(last_moderation_at, hours=12):
return is_within
- def _create_or_update_published_article(self):
+ def _create_or_update_published_article(self) -> PublishedArticle:
"""
Create or update the source article's published version.
Return the published_article.
@@ -141,15 +141,17 @@ def _create_or_update_published_article(self):
if published_article:
published_article.title = self.article_snapshot.title
- published_article.content = self.article_snapshot.content
- published_article.save(update_fields=['title', 'content'])
+
+ # TODO: Markdown content needs to be rendered into html
+ published_article.html = self.article_snapshot.markdown
+ published_article.save(update_fields=['title', 'markdown'])
return published_article
published_article = PublishedArticle.objects.create(
source_article=self.source_article,
title=self.article_snapshot.title,
- content=self.article_snapshot.content,
+ html=self.article_snapshot.mardkwon, # TODO: Markdown content needs to be rendered into html
)
return published_article
@@ -212,7 +214,7 @@ def submit(self):
current_hash = self._hash_and_normalize(
self.source_article.title,
- self.source_article.content
+ self.source_article.markdown
)
if self.article_snapshot and self.article_snapshot.content_hash == current_hash:
@@ -224,7 +226,7 @@ def submit(self):
new_snapshot = ArticleSnapshot.objects.create(
source_article=self.source_article,
title=self.source_article.title,
- content=self.source_article.content,
+ markdown=self.source_article.markdown,
content_hash=current_hash,
moderation_status=ArticleSnapshot.SnapshotStatus.PENDING
)
From 86fc102b5c7a2666700d51b081ade5c5d9ef0183 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 23:22:41 +1000
Subject: [PATCH 16/51] chore: init alienmark package
---
packages/alienmark/package.json | 27 +
packages/alienmark/pnpm-lock.yaml | 1252 +++++++++++++++++++++++++++++
packages/alienmark/src/index.ts | 0
packages/alienmark/tsconfig.json | 22 +
4 files changed, 1301 insertions(+)
create mode 100644 packages/alienmark/package.json
create mode 100644 packages/alienmark/pnpm-lock.yaml
create mode 100644 packages/alienmark/src/index.ts
create mode 100644 packages/alienmark/tsconfig.json
diff --git a/packages/alienmark/package.json b/packages/alienmark/package.json
new file mode 100644
index 00000000..1bfcf6d9
--- /dev/null
+++ b/packages/alienmark/package.json
@@ -0,0 +1,27 @@
+{
+ "name": "alienmark",
+ "version": "0.1.0",
+ "description": "AlienMark markdown parser and HTML renderer.",
+ "type": "module",
+ "main": "./dist/index.js",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build": "tsdown",
+ "check": "tsc --noEmit",
+ "dev": "tsdown --watch",
+ "test": "vitest run"
+ },
+ "keywords": [],
+ "author": "",
+ "license": "ISC",
+ "packageManager": "pnpm@10.33.0",
+ "devDependencies": {
+ "@types/node": "^25.6.0",
+ "tsdown": "^0.21.9",
+ "typescript": "^6.0.3",
+ "vitest": "^4.1.4"
+ }
+}
diff --git a/packages/alienmark/pnpm-lock.yaml b/packages/alienmark/pnpm-lock.yaml
new file mode 100644
index 00000000..a506f9eb
--- /dev/null
+++ b/packages/alienmark/pnpm-lock.yaml
@@ -0,0 +1,1252 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .:
+ devDependencies:
+ '@types/node':
+ specifier: ^25.6.0
+ version: 25.6.0
+ tsdown:
+ specifier: ^0.21.9
+ version: 0.21.9(typescript@6.0.3)
+ typescript:
+ specifier: ^6.0.3
+ version: 6.0.3
+ vitest:
+ specifier: ^4.1.4
+ version: 4.1.4(@types/node@25.6.0)(vite@8.0.8(@types/node@25.6.0))
+
+packages:
+
+ '@babel/generator@8.0.0-rc.3':
+ resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-string-parser@8.0.0-rc.3':
+ resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-validator-identifier@8.0.0-rc.3':
+ resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/parser@8.0.0-rc.3':
+ resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ '@babel/types@8.0.0-rc.3':
+ resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@emnapi/core@1.9.2':
+ resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
+
+ '@emnapi/runtime@1.9.2':
+ resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
+
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@napi-rs/wasm-runtime@1.1.4':
+ resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
+
+ '@oxc-project/types@0.124.0':
+ resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==}
+
+ '@oxc-project/types@0.126.0':
+ resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==}
+
+ '@quansync/fs@1.0.0':
+ resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.15':
+ resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.16':
+ resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.15':
+ resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.16':
+ resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.15':
+ resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.16':
+ resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.15':
+ resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.16':
+ resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15':
+ resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16':
+ resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15':
+ resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16':
+ resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15':
+ resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16':
+ resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.15':
+ resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.16':
+ resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.15':
+ resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.16':
+ resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.15':
+ resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.16':
+ resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15':
+ resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16':
+ resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15':
+ resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16':
+ resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.0-rc.15':
+ resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==}
+
+ '@rolldown/pluginutils@1.0.0-rc.16':
+ resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==}
+
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/jsesc@2.5.1':
+ resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
+
+ '@types/node@25.6.0':
+ resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
+
+ '@vitest/expect@4.1.4':
+ resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==}
+
+ '@vitest/mocker@4.1.4':
+ resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.1.4':
+ resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==}
+
+ '@vitest/runner@4.1.4':
+ resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==}
+
+ '@vitest/snapshot@4.1.4':
+ resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==}
+
+ '@vitest/spy@4.1.4':
+ resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==}
+
+ '@vitest/utils@4.1.4':
+ resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==}
+
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
+ engines: {node: '>=14'}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ ast-kit@3.0.0-beta.1:
+ resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==}
+ engines: {node: '>=20.19.0'}
+
+ birpc@4.0.0:
+ resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
+
+ cac@7.0.0:
+ resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ engines: {node: '>=20.19.0'}
+
+ chai@6.2.2:
+ resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
+ engines: {node: '>=18'}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ defu@6.1.7:
+ resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ dts-resolver@2.1.3:
+ resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ oxc-resolver: '>=11.0.0'
+ peerDependenciesMeta:
+ oxc-resolver:
+ optional: true
+
+ empathic@2.0.0:
+ resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
+ engines: {node: '>=14'}
+
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ get-tsconfig@4.14.0:
+ resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
+
+ hookable@6.1.1:
+ resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
+
+ import-without-cache@0.3.3:
+ resolution: {integrity: sha512-bDxwDdF04gm550DfZHgffvlX+9kUlcz32UD0AeBTmVPFiWkrexF2XVmiuFFbDhiFuP8fQkrkvI2KdSNPYWAXkQ==}
+ engines: {node: '>=20.19.0'}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
+ postcss@8.5.10:
+ resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ quansync@1.0.0:
+ resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ rolldown-plugin-dts@0.23.2:
+ resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ '@ts-macro/tsc': ^0.3.6
+ '@typescript/native-preview': '>=7.0.0-dev.20260325.1'
+ rolldown: ^1.0.0-rc.12
+ typescript: ^5.0.0 || ^6.0.0
+ vue-tsc: ~3.2.0
+ peerDependenciesMeta:
+ '@ts-macro/tsc':
+ optional: true
+ '@typescript/native-preview':
+ optional: true
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+
+ rolldown@1.0.0-rc.15:
+ resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rolldown@1.0.0-rc.16:
+ resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@4.1.0:
+ resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@1.1.1:
+ resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==}
+ engines: {node: '>=18'}
+
+ tinyglobby@0.2.16:
+ resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
+ engines: {node: '>=12.0.0'}
+
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
+ engines: {node: '>=14.0.0'}
+
+ tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+
+ tsdown@0.21.9:
+ resolution: {integrity: sha512-tZPv2zMaMnjj9H9h0SDqpSXa9YWVZWHlG46DnSgNTFX6aq001MSI8kuBzJumr/u099nWj+1v5S7rhbnHk5jCHA==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+ peerDependencies:
+ '@arethetypeswrong/core': ^0.18.1
+ '@tsdown/css': 0.21.9
+ '@tsdown/exe': 0.21.9
+ '@vitejs/devtools': '*'
+ publint: ^0.3.0
+ typescript: ^5.0.0 || ^6.0.0
+ unplugin-unused: ^0.5.0
+ peerDependenciesMeta:
+ '@arethetypeswrong/core':
+ optional: true
+ '@tsdown/css':
+ optional: true
+ '@tsdown/exe':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ publint:
+ optional: true
+ typescript:
+ optional: true
+ unplugin-unused:
+ optional: true
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ typescript@6.0.3:
+ resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ unconfig-core@7.5.0:
+ resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
+
+ undici-types@7.19.2:
+ resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
+
+ unrun@0.2.36:
+ resolution: {integrity: sha512-ICAGv44LHSKjCdI4B4rk99lJLHXBweutO4MUwu3cavMlYtXID0Tn5e1Kwe/Uj6BSAuHHXfi1JheFVCYhcXHfAg==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+ peerDependencies:
+ synckit: ^0.11.11
+ peerDependenciesMeta:
+ synckit:
+ optional: true
+
+ vite@8.0.8:
+ resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.0
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@4.1.4:
+ resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==}
+ 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.1.4
+ '@vitest/browser-preview': 4.1.4
+ '@vitest/browser-webdriverio': 4.1.4
+ '@vitest/coverage-istanbul': 4.1.4
+ '@vitest/coverage-v8': 4.1.4
+ '@vitest/ui': 4.1.4
+ happy-dom: '*'
+ jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+snapshots:
+
+ '@babel/generator@8.0.0-rc.3':
+ dependencies:
+ '@babel/parser': 8.0.0-rc.3
+ '@babel/types': 8.0.0-rc.3
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/jsesc': 2.5.1
+ jsesc: 3.1.0
+
+ '@babel/helper-string-parser@8.0.0-rc.3': {}
+
+ '@babel/helper-validator-identifier@8.0.0-rc.3': {}
+
+ '@babel/parser@8.0.0-rc.3':
+ dependencies:
+ '@babel/types': 8.0.0-rc.3
+
+ '@babel/types@8.0.0-rc.3':
+ dependencies:
+ '@babel/helper-string-parser': 8.0.0-rc.3
+ '@babel/helper-validator-identifier': 8.0.0-rc.3
+
+ '@emnapi/core@1.9.2':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.9.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@oxc-project/types@0.124.0': {}
+
+ '@oxc-project/types@0.126.0': {}
+
+ '@quansync/fs@1.0.0':
+ dependencies:
+ quansync: 1.0.0
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.15':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.16':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-rc.15': {}
+
+ '@rolldown/pluginutils@1.0.0-rc.16': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/estree@1.0.8': {}
+
+ '@types/jsesc@2.5.1': {}
+
+ '@types/node@25.6.0':
+ dependencies:
+ undici-types: 7.19.2
+
+ '@vitest/expect@4.1.4':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.1.4
+ '@vitest/utils': 4.1.4
+ chai: 6.2.2
+ tinyrainbow: 3.1.0
+
+ '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0))':
+ dependencies:
+ '@vitest/spy': 4.1.4
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 8.0.8(@types/node@25.6.0)
+
+ '@vitest/pretty-format@4.1.4':
+ dependencies:
+ tinyrainbow: 3.1.0
+
+ '@vitest/runner@4.1.4':
+ dependencies:
+ '@vitest/utils': 4.1.4
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.1.4':
+ dependencies:
+ '@vitest/pretty-format': 4.1.4
+ '@vitest/utils': 4.1.4
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@4.1.4': {}
+
+ '@vitest/utils@4.1.4':
+ dependencies:
+ '@vitest/pretty-format': 4.1.4
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
+
+ ansis@4.2.0: {}
+
+ assertion-error@2.0.1: {}
+
+ ast-kit@3.0.0-beta.1:
+ dependencies:
+ '@babel/parser': 8.0.0-rc.3
+ estree-walker: 3.0.3
+ pathe: 2.0.3
+
+ birpc@4.0.0: {}
+
+ cac@7.0.0: {}
+
+ chai@6.2.2: {}
+
+ convert-source-map@2.0.0: {}
+
+ defu@6.1.7: {}
+
+ detect-libc@2.1.2: {}
+
+ dts-resolver@2.1.3: {}
+
+ empathic@2.0.0: {}
+
+ es-module-lexer@2.0.0: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ expect-type@1.3.0: {}
+
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
+ fsevents@2.3.3:
+ optional: true
+
+ get-tsconfig@4.14.0:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ hookable@6.1.1: {}
+
+ import-without-cache@0.3.3: {}
+
+ jsesc@3.1.0: {}
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ nanoid@3.3.11: {}
+
+ obug@2.1.1: {}
+
+ pathe@2.0.3: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@4.0.4: {}
+
+ postcss@8.5.10:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ quansync@1.0.0: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.16)(typescript@6.0.3):
+ dependencies:
+ '@babel/generator': 8.0.0-rc.3
+ '@babel/helper-validator-identifier': 8.0.0-rc.3
+ '@babel/parser': 8.0.0-rc.3
+ '@babel/types': 8.0.0-rc.3
+ ast-kit: 3.0.0-beta.1
+ birpc: 4.0.0
+ dts-resolver: 2.1.3
+ get-tsconfig: 4.14.0
+ obug: 2.1.1
+ picomatch: 4.0.4
+ rolldown: 1.0.0-rc.16
+ optionalDependencies:
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - oxc-resolver
+
+ rolldown@1.0.0-rc.15:
+ dependencies:
+ '@oxc-project/types': 0.124.0
+ '@rolldown/pluginutils': 1.0.0-rc.15
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.15
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.15
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.15
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.15
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15
+
+ rolldown@1.0.0-rc.16:
+ dependencies:
+ '@oxc-project/types': 0.126.0
+ '@rolldown/pluginutils': 1.0.0-rc.16
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.16
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.16
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.16
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.16
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16
+
+ semver@7.7.4: {}
+
+ siginfo@2.0.0: {}
+
+ source-map-js@1.2.1: {}
+
+ stackback@0.0.2: {}
+
+ std-env@4.1.0: {}
+
+ tinybench@2.9.0: {}
+
+ tinyexec@1.1.1: {}
+
+ tinyglobby@0.2.16:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tinyrainbow@3.1.0: {}
+
+ tree-kill@1.2.2: {}
+
+ tsdown@0.21.9(typescript@6.0.3):
+ dependencies:
+ ansis: 4.2.0
+ cac: 7.0.0
+ defu: 6.1.7
+ empathic: 2.0.0
+ hookable: 6.1.1
+ import-without-cache: 0.3.3
+ obug: 2.1.1
+ picomatch: 4.0.4
+ rolldown: 1.0.0-rc.16
+ rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@6.0.3)
+ semver: 7.7.4
+ tinyexec: 1.1.1
+ tinyglobby: 0.2.16
+ tree-kill: 1.2.2
+ unconfig-core: 7.5.0
+ unrun: 0.2.36
+ optionalDependencies:
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - '@ts-macro/tsc'
+ - '@typescript/native-preview'
+ - oxc-resolver
+ - synckit
+ - vue-tsc
+
+ tslib@2.8.1:
+ optional: true
+
+ typescript@6.0.3: {}
+
+ unconfig-core@7.5.0:
+ dependencies:
+ '@quansync/fs': 1.0.0
+ quansync: 1.0.0
+
+ undici-types@7.19.2: {}
+
+ unrun@0.2.36:
+ dependencies:
+ rolldown: 1.0.0-rc.16
+
+ vite@8.0.8(@types/node@25.6.0):
+ dependencies:
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
+ postcss: 8.5.10
+ rolldown: 1.0.0-rc.15
+ tinyglobby: 0.2.16
+ optionalDependencies:
+ '@types/node': 25.6.0
+ fsevents: 2.3.3
+
+ vitest@4.1.4(@types/node@25.6.0)(vite@8.0.8(@types/node@25.6.0)):
+ dependencies:
+ '@vitest/expect': 4.1.4
+ '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0))
+ '@vitest/pretty-format': 4.1.4
+ '@vitest/runner': 4.1.4
+ '@vitest/snapshot': 4.1.4
+ '@vitest/spy': 4.1.4
+ '@vitest/utils': 4.1.4
+ es-module-lexer: 2.0.0
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ obug: 2.1.1
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ std-env: 4.1.0
+ tinybench: 2.9.0
+ tinyexec: 1.1.1
+ tinyglobby: 0.2.16
+ tinyrainbow: 3.1.0
+ vite: 8.0.8(@types/node@25.6.0)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 25.6.0
+ transitivePeerDependencies:
+ - msw
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
diff --git a/packages/alienmark/src/index.ts b/packages/alienmark/src/index.ts
new file mode 100644
index 00000000..e69de29b
diff --git a/packages/alienmark/tsconfig.json b/packages/alienmark/tsconfig.json
new file mode 100644
index 00000000..5917723c
--- /dev/null
+++ b/packages/alienmark/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "module": "NodeNext",
+ "target": "ESNext",
+ "types": ["node"],
+ "lib": ["ESNext"],
+ "sourceMap": true,
+ "declaration": true,
+ "declarationMap": true,
+ "noUncheckedIndexedAccess": true,
+ "exactOptionalPropertyTypes": true,
+ "strict": true,
+ "verbatimModuleSyntax": true,
+ "isolatedModules": true,
+ "noUncheckedSideEffectImports": true,
+ "moduleDetection": "force",
+ "skipLibCheck": true
+ },
+ "include": ["src"]
+}
From 5d550188ac90c14b643b0503839da58a860add2f Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 17 Apr 2026 23:48:38 +1000
Subject: [PATCH 17/51] feat: add initial markdown parser and html renderer
---
packages/alienmark/src/ast/nodes.ts | 88 ++++++
packages/alienmark/src/index.ts | 14 +
packages/alienmark/src/parser/inline.ts | 115 ++++++++
packages/alienmark/src/parser/parse.ts | 254 ++++++++++++++++++
.../alienmark/src/renderer/render-html.ts | 68 +++++
packages/alienmark/test/alienmark.test.ts | 50 ++++
6 files changed, 589 insertions(+)
create mode 100644 packages/alienmark/src/ast/nodes.ts
create mode 100644 packages/alienmark/src/parser/inline.ts
create mode 100644 packages/alienmark/src/parser/parse.ts
create mode 100644 packages/alienmark/src/renderer/render-html.ts
create mode 100644 packages/alienmark/test/alienmark.test.ts
diff --git a/packages/alienmark/src/ast/nodes.ts b/packages/alienmark/src/ast/nodes.ts
new file mode 100644
index 00000000..88b84f7a
--- /dev/null
+++ b/packages/alienmark/src/ast/nodes.ts
@@ -0,0 +1,88 @@
+export type BlockNode =
+ | DocumentNode
+ | ParagraphNode
+ | HeadingNode
+ | CodeBlockNode
+ | BlockquoteNode
+ | ListNode
+ | HorizontalRuleNode;
+
+export type InlineNode =
+ | TextNode
+ | StrongNode
+ | EmphasisNode
+ | InlineCodeNode
+ | LinkNode;
+
+export interface DocumentNode {
+ type: "document";
+ children: BlockNode[];
+}
+
+export interface ParagraphNode {
+ type: "paragraph";
+ children: InlineNode[];
+}
+
+export interface HeadingNode {
+ type: "heading";
+ depth: number;
+ children: InlineNode[];
+}
+
+export interface CodeBlockNode {
+ type: "codeBlock";
+ language: string | null;
+ value: string;
+}
+
+export interface BlockquoteNode {
+ type: "blockquote";
+ children: BlockNode[];
+}
+
+export interface ListNode {
+ type: "list";
+ ordered: boolean;
+ start: number | null;
+ items: ListItemNode[];
+}
+
+export interface ListItemNode {
+ type: "listItem";
+ children: BlockNode[];
+}
+
+export interface HorizontalRuleNode {
+ type: "horizontalRule";
+}
+
+export interface TextNode {
+ type: "text";
+ value: string;
+}
+
+export interface StrongNode {
+ type: "strong";
+ children: InlineNode[];
+}
+
+export interface EmphasisNode {
+ type: "emphasis";
+ children: InlineNode[];
+}
+
+export interface InlineCodeNode {
+ type: "inlineCode";
+ value: string;
+}
+
+export interface LinkNode {
+ type: "link";
+ url: string;
+ children: InlineNode[];
+}
+
+export interface ParseOptions {
+ trimTrailingWhitespace?: boolean;
+}
diff --git a/packages/alienmark/src/index.ts b/packages/alienmark/src/index.ts
index e69de29b..36cdb545 100644
--- a/packages/alienmark/src/index.ts
+++ b/packages/alienmark/src/index.ts
@@ -0,0 +1,14 @@
+import type { DocumentNode, ParseOptions } from "./ast/nodes.js";
+import { parse } from "./parser/parse.js";
+import { renderHtml } from "./renderer/render-html.js";
+
+export function renderMarkdown(markdown: string, options?: ParseOptions): string {
+ return renderHtml(parse(markdown, options));
+}
+
+export function parseMarkdown(markdown: string, options?: ParseOptions): DocumentNode {
+ return parse(markdown, options);
+}
+
+export { parse, renderHtml };
+export type * from "./ast/nodes.js";
diff --git a/packages/alienmark/src/parser/inline.ts b/packages/alienmark/src/parser/inline.ts
new file mode 100644
index 00000000..adeeb3cd
--- /dev/null
+++ b/packages/alienmark/src/parser/inline.ts
@@ -0,0 +1,115 @@
+import type {EmphasisNode, InlineCodeNode, InlineNode, LinkNode, StrongNode, TextNode,} from "../ast/nodes.js";
+
+export function parseInline(input: string): InlineNode[] {
+ const nodes: InlineNode[] = [];
+ let index = 0;
+ let buffer = "";
+
+ const flushText = (): void => {
+ if (!buffer) {
+ return;
+ }
+
+ const textNode: TextNode = {
+ type: "text",
+ value: buffer,
+ };
+ nodes.push(textNode);
+ buffer = "";
+ };
+
+ while (index < input.length) {
+ const current = input[index];
+ if (current === undefined) {
+ break;
+ }
+
+ if (input.startsWith("**", index)) {
+ const closeIndex = input.indexOf("**", index + 2);
+
+ if (closeIndex !== -1) {
+ flushText();
+ const strongNode: StrongNode = {
+ type: "strong",
+ children: parseInline(input.slice(index + 2, closeIndex)),
+ };
+ nodes.push(strongNode);
+ index = closeIndex + 2;
+ continue;
+ }
+ }
+
+ if (current === "*" || current === "_") {
+ const closeIndex = input.indexOf(current, index + 1);
+
+ if (closeIndex !== -1) {
+ flushText();
+ const emphasisNode: EmphasisNode = {
+ type: "emphasis",
+ children: parseInline(input.slice(index + 1, closeIndex)),
+ };
+ nodes.push(emphasisNode);
+ index = closeIndex + 1;
+ continue;
+ }
+ }
+
+ if (current === "`") {
+ const closeIndex = input.indexOf("`", index + 1);
+
+ if (closeIndex !== -1) {
+ flushText();
+ const inlineCodeNode: InlineCodeNode = {
+ type: "inlineCode",
+ value: input.slice(index + 1, closeIndex),
+ };
+ nodes.push(inlineCodeNode);
+ index = closeIndex + 1;
+ continue;
+ }
+ }
+
+ if (current === "[") {
+ const labelEnd = input.indexOf("]", index + 1);
+
+ if (labelEnd !== -1 && input[labelEnd + 1] === "(") {
+ const urlEnd = input.indexOf(")", labelEnd + 2);
+
+ if (urlEnd !== -1) {
+ flushText();
+ const linkNode: LinkNode = {
+ type: "link",
+ url: input.slice(labelEnd + 2, urlEnd),
+ children: parseInline(input.slice(index + 1, labelEnd)),
+ };
+ nodes.push(linkNode);
+ index = urlEnd + 1;
+ continue;
+ }
+ }
+ }
+
+ buffer += current;
+ index += 1;
+ }
+
+ flushText();
+ return mergeAdjacentTextNodes(nodes);
+}
+
+function mergeAdjacentTextNodes(nodes: InlineNode[]): InlineNode[] {
+ const merged: InlineNode[] = [];
+
+ for (const node of nodes) {
+ const previous = merged.at(-1);
+
+ if (node.type === "text" && previous?.type === "text") {
+ previous.value += node.value;
+ continue;
+ }
+
+ merged.push(node);
+ }
+
+ return merged;
+}
diff --git a/packages/alienmark/src/parser/parse.ts b/packages/alienmark/src/parser/parse.ts
new file mode 100644
index 00000000..a21586a1
--- /dev/null
+++ b/packages/alienmark/src/parser/parse.ts
@@ -0,0 +1,254 @@
+import type {
+ BlockNode,
+ BlockquoteNode,
+ CodeBlockNode,
+ DocumentNode,
+ HeadingNode,
+ HorizontalRuleNode,
+ ListItemNode,
+ ListNode,
+ ParagraphNode,
+ ParseOptions,
+} from "../ast/nodes.js";
+import { parseInline } from "./inline.js";
+
+const ORDERED_LIST_RE = /^(\d+)\.\s+(.*)$/;
+const UNORDERED_LIST_RE = /^[-*]\s+(.*)$/;
+
+export function parse(markdown: string, options: ParseOptions = {}): DocumentNode {
+ const normalized = markdown.replace(/\r\n?/g, "\n");
+ const lines = normalized.split("\n");
+ const children: BlockNode[] = [];
+ let index = 0;
+
+ while (index < lines.length) {
+ const line = prepareLine(getLine(lines, index), options);
+
+ if (!line.trim()) {
+ index += 1;
+ continue;
+ }
+
+ if (isFence(line)) {
+ const result = parseCodeBlock(lines, index);
+ children.push(result.node);
+ index = result.nextIndex;
+ continue;
+ }
+
+ if (isHorizontalRule(line)) {
+ const node: HorizontalRuleNode = { type: "horizontalRule" };
+ children.push(node);
+ index += 1;
+ continue;
+ }
+
+ const headingMatch = line.match(/^(#{1,6})\s+(.*)$/);
+ if (headingMatch) {
+ const markers = headingMatch[1] ?? "";
+ const text = headingMatch[2] ?? "";
+ const node: HeadingNode = {
+ type: "heading",
+ depth: markers.length,
+ children: parseInline(text.trim()),
+ };
+ children.push(node);
+ index += 1;
+ continue;
+ }
+
+ if (line.startsWith(">")) {
+ const result = parseBlockquote(lines, index, options);
+ children.push(result.node);
+ index = result.nextIndex;
+ continue;
+ }
+
+ if (isListLine(line)) {
+ const result = parseList(lines, index, options);
+ children.push(result.node);
+ index = result.nextIndex;
+ continue;
+ }
+
+ const result = parseParagraph(lines, index, options);
+ children.push(result.node);
+ index = result.nextIndex;
+ }
+
+ return {
+ type: "document",
+ children,
+ };
+}
+
+function parseCodeBlock(lines: string[], startIndex: number): { node: CodeBlockNode; nextIndex: number } {
+ const openingLine = getLine(lines, startIndex).trim();
+ const language = openingLine.slice(3).trim() || null;
+ const content: string[] = [];
+ let index = startIndex + 1;
+
+ while (index < lines.length && !isFence(getLine(lines, index))) {
+ content.push(getLine(lines, index));
+ index += 1;
+ }
+
+ if (index < lines.length && isFence(getLine(lines, index))) {
+ index += 1;
+ }
+
+ return {
+ node: {
+ type: "codeBlock",
+ language,
+ value: content.join("\n"),
+ },
+ nextIndex: index,
+ };
+}
+
+function parseBlockquote(
+ lines: string[],
+ startIndex: number,
+ options: ParseOptions,
+): { node: BlockquoteNode; nextIndex: number } {
+ const collected: string[] = [];
+ let index = startIndex;
+
+ while (index < lines.length) {
+ const line = prepareLine(getLine(lines, index), options);
+
+ if (!line.trim()) {
+ collected.push("");
+ index += 1;
+ continue;
+ }
+
+ if (!line.startsWith(">")) {
+ break;
+ }
+
+ collected.push(line.replace(/^>\s?/, ""));
+ index += 1;
+ }
+
+ return {
+ node: {
+ type: "blockquote",
+ children: parse(collected.join("\n"), options).children,
+ },
+ nextIndex: index,
+ };
+}
+
+function parseList(
+ lines: string[],
+ startIndex: number,
+ options: ParseOptions,
+): { node: ListNode; nextIndex: number } {
+ const firstLine = prepareLine(getLine(lines, startIndex), options);
+ const orderedMatch = firstLine.match(ORDERED_LIST_RE);
+ const ordered = Boolean(orderedMatch);
+ const items: ListItemNode[] = [];
+ const start = orderedMatch ? Number(orderedMatch[1] ?? "1") : null;
+ let index = startIndex;
+
+ while (index < lines.length) {
+ const line = prepareLine(getLine(lines, index), options);
+
+ if (!line.trim()) {
+ break;
+ }
+
+ const match = ordered ? line.match(ORDERED_LIST_RE) : line.match(UNORDERED_LIST_RE);
+ if (!match) {
+ break;
+ }
+
+ const itemText = (match[ordered ? 2 : 1] ?? "").trim();
+ items.push({
+ type: "listItem",
+ children: [
+ {
+ type: "paragraph",
+ children: parseInline(itemText),
+ } satisfies ParagraphNode,
+ ],
+ });
+ index += 1;
+ }
+
+ return {
+ node: {
+ type: "list",
+ ordered,
+ start,
+ items,
+ },
+ nextIndex: index,
+ };
+}
+
+function parseParagraph(
+ lines: string[],
+ startIndex: number,
+ options: ParseOptions,
+): { node: ParagraphNode; nextIndex: number } {
+ const collected: string[] = [];
+ let index = startIndex;
+
+ while (index < lines.length) {
+ const line = prepareLine(getLine(lines, index), options);
+
+ if (!line.trim()) {
+ break;
+ }
+
+ if (
+ collected.length > 0 &&
+ (isFence(line) ||
+ isHorizontalRule(line) ||
+ line.startsWith(">") ||
+ isListLine(line) ||
+ /^(#{1,6})\s+/.test(line))
+ ) {
+ break;
+ }
+
+ collected.push(line.trim());
+ index += 1;
+ }
+
+ return {
+ node: {
+ type: "paragraph",
+ children: parseInline(collected.join(" ")),
+ },
+ nextIndex: index,
+ };
+}
+
+function isFence(line: string): boolean {
+ return line.trim().startsWith("```");
+}
+
+function isHorizontalRule(line: string): boolean {
+ const trimmed = line.trim();
+ return trimmed === "---" || trimmed === "***" || trimmed === "___";
+}
+
+function isListLine(line: string): boolean {
+ return ORDERED_LIST_RE.test(line) || UNORDERED_LIST_RE.test(line);
+}
+
+function prepareLine(line: string, options: ParseOptions): string {
+ if (!options.trimTrailingWhitespace) {
+ return line;
+ }
+
+ return line.replace(/\s+$/g, "");
+}
+
+function getLine(lines: string[], index: number): string {
+ return lines[index] ?? "";
+}
diff --git a/packages/alienmark/src/renderer/render-html.ts b/packages/alienmark/src/renderer/render-html.ts
new file mode 100644
index 00000000..290a5324
--- /dev/null
+++ b/packages/alienmark/src/renderer/render-html.ts
@@ -0,0 +1,68 @@
+import type {
+ BlockNode,
+ DocumentNode,
+ InlineNode,
+ ListItemNode,
+ ListNode,
+} from "../ast/nodes.js";
+
+export function renderHtml(node: DocumentNode | BlockNode): string {
+ switch (node.type) {
+ case "document":
+ return node.children.map(renderHtml).join("");
+ case "paragraph":
+ return `
${renderInlineNodes(node.children)}
`;
+ case "heading":
+ return `${renderInlineNodes(node.children)}`;
+ case "codeBlock": {
+ const className = node.language ? ` class="language-${escapeHtmlAttribute(node.language)}"` : "";
+ return `${escapeHtml(node.value)}
`;
+ }
+ case "blockquote":
+ return `${node.children.map(renderHtml).join("")}
`;
+ case "list":
+ return renderList(node);
+ case "horizontalRule":
+ return "
";
+ }
+}
+
+function renderList(node: ListNode): string {
+ const tag = node.ordered ? "ol" : "ul";
+ const startAttribute = node.ordered && node.start !== null && node.start !== 1 ? ` start="${node.start}"` : "";
+ return `<${tag}${startAttribute}>${node.items.map(renderListItem).join("")}${tag}>`;
+}
+
+function renderListItem(item: ListItemNode): string {
+ return `${item.children.map(renderHtml).join("")}`;
+}
+
+function renderInlineNodes(nodes: InlineNode[]): string {
+ return nodes.map(renderInlineNode).join("");
+}
+
+function renderInlineNode(node: InlineNode): string {
+ switch (node.type) {
+ case "text":
+ return escapeHtml(node.value);
+ case "strong":
+ return `${renderInlineNodes(node.children)}`;
+ case "emphasis":
+ return `${renderInlineNodes(node.children)}`;
+ case "inlineCode":
+ return `${escapeHtml(node.value)}`;
+ case "link":
+ return `${renderInlineNodes(node.children)}`;
+ }
+}
+
+function escapeHtml(value: string): string {
+ return value
+ .replace(/&/g, "&")
+ .replace(//g, ">");
+}
+
+function escapeHtmlAttribute(value: string): string {
+ return escapeHtml(value).replace(/"/g, """);
+}
diff --git a/packages/alienmark/test/alienmark.test.ts b/packages/alienmark/test/alienmark.test.ts
new file mode 100644
index 00000000..601f49c5
--- /dev/null
+++ b/packages/alienmark/test/alienmark.test.ts
@@ -0,0 +1,50 @@
+import { describe, expect, it } from "vitest";
+
+import { parseMarkdown, renderMarkdown } from "../src/index.js";
+
+describe("alienmark", () => {
+ it("renders headings and paragraphs", () => {
+ const html = renderMarkdown("# Hello\n\nThis is a paragraph.");
+
+ expect(html).toBe("Hello
This is a paragraph.
");
+ });
+
+ it("renders inline markdown", () => {
+ const html = renderMarkdown("Use **bold**, *italic*, `code`, and [links](https://example.com).");
+
+ expect(html).toBe(
+ 'Use bold, italic, code, and links.
',
+ );
+ });
+
+ it("renders code fences, blockquotes, lists, and horizontal rules", () => {
+ const markdown = [
+ "```ts",
+ "const answer = 42;",
+ "```",
+ "",
+ "> quoted",
+ "",
+ "- first",
+ "- second",
+ "",
+ "---",
+ ].join("\n");
+
+ const html = renderMarkdown(markdown);
+
+ expect(html).toBe(
+ 'const answer = 42;
quoted
',
+ );
+ });
+
+ it("returns a structured document AST", () => {
+ const ast = parseMarkdown("## Title");
+
+ expect(ast.type).toBe("document");
+ expect(ast.children[0]).toMatchObject({
+ type: "heading",
+ depth: 2,
+ });
+ });
+});
From 316116c12639a6c4c93f9eeb93ffbb3df86cd39c Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 18 Apr 2026 12:05:53 +1000
Subject: [PATCH 18/51] chore: update README.md
---
README.md | 22 ++++++++++++++++------
packages/alienmark/src/parser/inline.ts | 9 ++++++++-
2 files changed, 24 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 2e8828cc..6f6888d8 100644
--- a/README.md
+++ b/README.md
@@ -21,11 +21,11 @@ Deployment: **Docker**
[](https://skillicons.dev)
## Project Structure
-`app/`: Web Applications
+`app/`: Applications
- **Django** backend
- **Vue** frontend
-`infra/`: Infrastructure
+`infra/`: Project infrastructure
- docker compose files
- environment files
@@ -34,11 +34,17 @@ Deployment: **Docker**
- **loki** config files
- **alloy** config files
-`docs/`: Developer Documentation
-- **mkdocs**
+`docs/`: Documentation
+- developer documentation
+
+`packages/`: Packages
+- alienmark
`.github/`: GitHub Configs
-- **GitHub** Workflows
+- workflows
+- issue templates
+- pull request templates
+- CODEOWNERS file
`Makefile`: Command Shortcuts
@@ -47,4 +53,8 @@ Deployment: **Docker**
> [!Important]
> This documentation is not yet up-to-date.
-Developer Documentation: [AlienCommons Dev Docs](https://lazyalienserver.github.io/alien-commons/)
\ No newline at end of file
+Developer Documentation: [AlienCommons Dev Docs](https://lazyalienserver.github.io/alien-commons/)
+
+## License
+
+This project is licensed under the [MIT](https://github.com/LazyAlienServer/alien-commons/blob/main/LICENSE) License.
diff --git a/packages/alienmark/src/parser/inline.ts b/packages/alienmark/src/parser/inline.ts
index adeeb3cd..6a3e8580 100644
--- a/packages/alienmark/src/parser/inline.ts
+++ b/packages/alienmark/src/parser/inline.ts
@@ -1,4 +1,11 @@
-import type {EmphasisNode, InlineCodeNode, InlineNode, LinkNode, StrongNode, TextNode,} from "../ast/nodes.js";
+import type {
+ EmphasisNode,
+ InlineCodeNode,
+ InlineNode,
+ LinkNode,
+ StrongNode,
+ TextNode
+} from "../ast/nodes.js";
export function parseInline(input: string): InlineNode[] {
const nodes: InlineNode[] = [];
From 366b3d212510d4aaf7a90bcad3e7cac6c1db512c Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 18 Apr 2026 12:50:53 +1000
Subject: [PATCH 19/51] refactor: add users and alienmark mkdocs project
---
.github/workflows/docs-deploy.yml | 2 +-
.github/workflows/docs-validate.yml | 2 +-
README.md | 1 +
docs/alienmark/.python-version | 1 +
docs/alienmark/docs/index.md | 17 +
docs/alienmark/mkdocs.yml | 1 +
docs/alienmark/pyproject.toml | 9 +
docs/alienmark/uv.lock | 435 ++++++++++++++++++
docs/{ => contributors}/.python-version | 0
.../docs/architecture.en.md | 0
.../docs/architecture.zh.md | 0
.../docs/development/setup.en.md | 0
.../docs/development/setup.zh.md | 0
docs/{ => contributors}/docs/index.en.md | 0
docs/{ => contributors}/docs/index.zh.md | 0
docs/{ => contributors}/docs/overview.en.md | 0
docs/{ => contributors}/docs/overview.zh.md | 0
docs/{ => contributors}/mkdocs.yml | 0
docs/{ => contributors}/pyproject.toml | 7 +-
docs/{ => contributors}/uv.lock | 4 +-
docs/users/.python-version | 1 +
docs/users/docs/index.md | 17 +
docs/users/mkdocs.yml | 1 +
docs/users/pyproject.toml | 9 +
docs/users/uv.lock | 435 ++++++++++++++++++
25 files changed, 933 insertions(+), 9 deletions(-)
create mode 100644 docs/alienmark/.python-version
create mode 100644 docs/alienmark/docs/index.md
create mode 100644 docs/alienmark/mkdocs.yml
create mode 100644 docs/alienmark/pyproject.toml
create mode 100644 docs/alienmark/uv.lock
rename docs/{ => contributors}/.python-version (100%)
rename docs/{ => contributors}/docs/architecture.en.md (100%)
rename docs/{ => contributors}/docs/architecture.zh.md (100%)
rename docs/{ => contributors}/docs/development/setup.en.md (100%)
rename docs/{ => contributors}/docs/development/setup.zh.md (100%)
rename docs/{ => contributors}/docs/index.en.md (100%)
rename docs/{ => contributors}/docs/index.zh.md (100%)
rename docs/{ => contributors}/docs/overview.en.md (100%)
rename docs/{ => contributors}/docs/overview.zh.md (100%)
rename docs/{ => contributors}/mkdocs.yml (100%)
rename docs/{ => contributors}/pyproject.toml (60%)
rename docs/{ => contributors}/uv.lock (99%)
create mode 100644 docs/users/.python-version
create mode 100644 docs/users/docs/index.md
create mode 100644 docs/users/mkdocs.yml
create mode 100644 docs/users/pyproject.toml
create mode 100644 docs/users/uv.lock
diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml
index 29f1739f..04b413b5 100644
--- a/.github/workflows/docs-deploy.yml
+++ b/.github/workflows/docs-deploy.yml
@@ -5,7 +5,7 @@ on:
branches:
- main
paths:
- - "docs/**"
+ - "docs/developers/**"
- ".github/workflows/docs-validate.yml"
- ".github/workflows/docs-deploy.yml"
workflow_dispatch:
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index be0d9b35..cf93679a 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -3,7 +3,7 @@ name: Docs Validate
on:
pull_request:
paths:
- - "docs/**"
+ - "docs/developers/**"
- ".github/workflows/docs-validate.yml"
- ".github/workflows/docs-deploy.yml"
diff --git a/README.md b/README.md
index 6f6888d8..4012fc8b 100644
--- a/README.md
+++ b/README.md
@@ -45,6 +45,7 @@ Deployment: **Docker**
- issue templates
- pull request templates
- CODEOWNERS file
+- pull request labeler
`Makefile`: Command Shortcuts
diff --git a/docs/alienmark/.python-version b/docs/alienmark/.python-version
new file mode 100644
index 00000000..6324d401
--- /dev/null
+++ b/docs/alienmark/.python-version
@@ -0,0 +1 @@
+3.14
diff --git a/docs/alienmark/docs/index.md b/docs/alienmark/docs/index.md
new file mode 100644
index 00000000..000ea345
--- /dev/null
+++ b/docs/alienmark/docs/index.md
@@ -0,0 +1,17 @@
+# Welcome to MkDocs
+
+For full documentation visit [mkdocs.org](https://www.mkdocs.org).
+
+## Commands
+
+* `mkdocs new [dir-name]` - Create a new project.
+* `mkdocs serve` - Start the live-reloading docs server.
+* `mkdocs build` - Build the documentation site.
+* `mkdocs -h` - Print help message and exit.
+
+## Project layout
+
+ mkdocs.yml # The configuration file.
+ docs/
+ index.md # The documentation homepage.
+ ... # Other markdown pages, images and other files.
diff --git a/docs/alienmark/mkdocs.yml b/docs/alienmark/mkdocs.yml
new file mode 100644
index 00000000..c97182f5
--- /dev/null
+++ b/docs/alienmark/mkdocs.yml
@@ -0,0 +1 @@
+site_name: My Docs
diff --git a/docs/alienmark/pyproject.toml b/docs/alienmark/pyproject.toml
new file mode 100644
index 00000000..a6e4e7a4
--- /dev/null
+++ b/docs/alienmark/pyproject.toml
@@ -0,0 +1,9 @@
+[project]
+name = "alienmark-docs"
+version = "0.1.0"
+requires-python = ">=3.14"
+dependencies = [
+ "mkdocs>=1.6.1",
+ "mkdocs-material>=9.7.6",
+ "mkdocs-static-i18n>=1.3.1",
+]
diff --git a/docs/alienmark/uv.lock b/docs/alienmark/uv.lock
new file mode 100644
index 00000000..720b7fd6
--- /dev/null
+++ b/docs/alienmark/uv.lock
@@ -0,0 +1,435 @@
+version = 1
+revision = 3
+requires-python = ">=3.14"
+
+[[package]]
+name = "alienmark"
+version = "0.1.0"
+source = { virtual = "." }
+dependencies = [
+ { name = "mkdocs" },
+ { name = "mkdocs-material" },
+ { name = "mkdocs-static-i18n" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "mkdocs", specifier = ">=1.6.1" },
+ { name = "mkdocs-material", specifier = ">=9.7.6" },
+ { name = "mkdocs-static-i18n", specifier = ">=1.3.1" },
+]
+
+[[package]]
+name = "babel"
+version = "2.18.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" },
+]
+
+[[package]]
+name = "backrefs"
+version = "6.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/4e/a6/e325ec73b638d3ede4421b5445d4a0b8b219481826cc079d510100af356c/backrefs-6.2.tar.gz", hash = "sha256:f44ff4d48808b243b6c0cdc6231e22195c32f77046018141556c66f8bab72a49", size = 7012303, upload-time = "2026-02-16T19:10:15.828Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1b/39/3765df263e08a4df37f4f43cb5aa3c6c17a4bdd42ecfe841e04c26037171/backrefs-6.2-py310-none-any.whl", hash = "sha256:0fdc7b012420b6b144410342caeb8adc54c6866cf12064abc9bb211302e496f8", size = 381075, upload-time = "2026-02-16T19:10:04.322Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl", hash = "sha256:08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be", size = 392874, upload-time = "2026-02-16T19:10:06.314Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl", hash = "sha256:c3f4b9cb2af8cda0d87ab4f57800b57b95428488477be164dd2b47be54db0c90", size = 398787, upload-time = "2026-02-16T19:10:08.274Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-none-any.whl", hash = "sha256:12df81596ab511f783b7d87c043ce26bc5b0288cf3bb03610fe76b8189282b2b", size = 400747, upload-time = "2026-02-16T19:10:09.791Z" },
+ { url = "https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl", hash = "sha256:e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7", size = 412602, upload-time = "2026-02-16T19:10:12.317Z" },
+ { url = "https://files.pythonhosted.org/packages/21/f8/d02f650c47d05034dcd6f9c8cf94f39598b7a89c00ecda0ecb2911bc27e9/backrefs-6.2-py39-none-any.whl", hash = "sha256:664e33cd88c6840b7625b826ecf2555f32d491800900f5a541f772c485f7cda7", size = 381077, upload-time = "2026-02-16T19:10:13.74Z" },
+]
+
+[[package]]
+name = "certifi"
+version = "2026.2.25"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" },
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.4.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" },
+ { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" },
+ { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" },
+ { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" },
+ { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" },
+ { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" },
+ { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" },
+ { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" },
+ { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" },
+ { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" },
+ { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" },
+ { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" },
+ { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" },
+ { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" },
+]
+
+[[package]]
+name = "click"
+version = "8.3.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
+]
+
+[[package]]
+name = "ghp-import"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" },
+]
+
+[[package]]
+name = "idna"
+version = "3.11"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
+]
+
+[[package]]
+name = "jinja2"
+version = "3.1.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markupsafe" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
+]
+
+[[package]]
+name = "markdown"
+version = "3.10.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" },
+]
+
+[[package]]
+name = "markupsafe"
+version = "3.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" },
+ { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" },
+ { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" },
+ { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" },
+ { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" },
+ { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" },
+ { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" },
+ { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" },
+ { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" },
+ { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" },
+ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
+]
+
+[[package]]
+name = "mergedeep"
+version = "1.3.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" },
+]
+
+[[package]]
+name = "mkdocs"
+version = "1.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "ghp-import" },
+ { name = "jinja2" },
+ { name = "markdown" },
+ { name = "markupsafe" },
+ { name = "mergedeep" },
+ { name = "mkdocs-get-deps" },
+ { name = "packaging" },
+ { name = "pathspec" },
+ { name = "pyyaml" },
+ { name = "pyyaml-env-tag" },
+ { name = "watchdog" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" },
+]
+
+[[package]]
+name = "mkdocs-get-deps"
+version = "0.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mergedeep" },
+ { name = "platformdirs" },
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" },
+]
+
+[[package]]
+name = "mkdocs-material"
+version = "9.7.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "babel" },
+ { name = "backrefs" },
+ { name = "colorama" },
+ { name = "jinja2" },
+ { name = "markdown" },
+ { name = "mkdocs" },
+ { name = "mkdocs-material-extensions" },
+ { name = "paginate" },
+ { name = "pygments" },
+ { name = "pymdown-extensions" },
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" },
+]
+
+[[package]]
+name = "mkdocs-material-extensions"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" },
+]
+
+[[package]]
+name = "mkdocs-static-i18n"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mkdocs" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ce/f9/51e2ffda9c7210bc35a24f3717b08c052cd4b728dfa87f901c00d8005259/mkdocs_static_i18n-1.3.1.tar.gz", hash = "sha256:a6125ea7db6cc1a900d76a967f262535af09831160a93c56d7f0d522a79b5faf", size = 1371325, upload-time = "2026-02-20T10:42:41.835Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6a/0b/43ff4afb6b438d47718b1959a22075ed95d8460d8c47381878b37a40de63/mkdocs_static_i18n-1.3.1-py3-none-any.whl", hash = "sha256:4036e24795a150c9c4d4b001ed24a43aec01335f76188dbe5a5d8fb4a27eba65", size = 21853, upload-time = "2026-02-20T10:42:40.551Z" },
+]
+
+[[package]]
+name = "packaging"
+version = "26.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/de/0d2b39fb4af88a0258f3bac87dfcbb48e73fbdea4a2ed0e2213f9a4c2f9a/packaging-26.1.tar.gz", hash = "sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de", size = 215519, upload-time = "2026-04-14T21:12:49.362Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f", size = 95831, upload-time = "2026-04-14T21:12:47.56Z" },
+]
+
+[[package]]
+name = "paginate"
+version = "0.5.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" },
+]
+
+[[package]]
+name = "pathspec"
+version = "1.0.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" },
+]
+
+[[package]]
+name = "platformdirs"
+version = "4.9.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" },
+]
+
+[[package]]
+name = "pygments"
+version = "2.20.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
+]
+
+[[package]]
+name = "pymdown-extensions"
+version = "10.21.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markdown" },
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/08/f1c908c581fd11913da4711ea7ba32c0eee40b0190000996bb863b0c9349/pymdown_extensions-10.21.2.tar.gz", hash = "sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc", size = 853922, upload-time = "2026-03-29T15:01:55.233Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl", hash = "sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638", size = 268901, upload-time = "2026-03-29T15:01:53.244Z" },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
+ { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
+ { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
+ { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
+ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
+]
+
+[[package]]
+name = "pyyaml-env-tag"
+version = "1.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" },
+]
+
+[[package]]
+name = "requests"
+version = "2.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "charset-normalizer" },
+ { name = "idna" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
+]
+
+[[package]]
+name = "urllib3"
+version = "2.6.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
+]
+
+[[package]]
+name = "watchdog"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" },
+ { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" },
+ { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" },
+ { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" },
+ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" },
+]
diff --git a/docs/.python-version b/docs/contributors/.python-version
similarity index 100%
rename from docs/.python-version
rename to docs/contributors/.python-version
diff --git a/docs/docs/architecture.en.md b/docs/contributors/docs/architecture.en.md
similarity index 100%
rename from docs/docs/architecture.en.md
rename to docs/contributors/docs/architecture.en.md
diff --git a/docs/docs/architecture.zh.md b/docs/contributors/docs/architecture.zh.md
similarity index 100%
rename from docs/docs/architecture.zh.md
rename to docs/contributors/docs/architecture.zh.md
diff --git a/docs/docs/development/setup.en.md b/docs/contributors/docs/development/setup.en.md
similarity index 100%
rename from docs/docs/development/setup.en.md
rename to docs/contributors/docs/development/setup.en.md
diff --git a/docs/docs/development/setup.zh.md b/docs/contributors/docs/development/setup.zh.md
similarity index 100%
rename from docs/docs/development/setup.zh.md
rename to docs/contributors/docs/development/setup.zh.md
diff --git a/docs/docs/index.en.md b/docs/contributors/docs/index.en.md
similarity index 100%
rename from docs/docs/index.en.md
rename to docs/contributors/docs/index.en.md
diff --git a/docs/docs/index.zh.md b/docs/contributors/docs/index.zh.md
similarity index 100%
rename from docs/docs/index.zh.md
rename to docs/contributors/docs/index.zh.md
diff --git a/docs/docs/overview.en.md b/docs/contributors/docs/overview.en.md
similarity index 100%
rename from docs/docs/overview.en.md
rename to docs/contributors/docs/overview.en.md
diff --git a/docs/docs/overview.zh.md b/docs/contributors/docs/overview.zh.md
similarity index 100%
rename from docs/docs/overview.zh.md
rename to docs/contributors/docs/overview.zh.md
diff --git a/docs/mkdocs.yml b/docs/contributors/mkdocs.yml
similarity index 100%
rename from docs/mkdocs.yml
rename to docs/contributors/mkdocs.yml
diff --git a/docs/pyproject.toml b/docs/contributors/pyproject.toml
similarity index 60%
rename from docs/pyproject.toml
rename to docs/contributors/pyproject.toml
index e083caf7..99145524 100644
--- a/docs/pyproject.toml
+++ b/docs/contributors/pyproject.toml
@@ -1,12 +1,9 @@
[project]
-name = "alien-commons-docs"
+name = "alien-commons-contributors-docs"
version = "0.0.1"
requires-python = ">=3.14"
dependencies = [
"mkdocs>=1.6.1",
- "mkdocs-material>=9.7.4",
+ "mkdocs-material>=9.7.6",
"mkdocs-static-i18n>=1.3.1",
]
-
-[tool.uv]
-package = false
diff --git a/docs/uv.lock b/docs/contributors/uv.lock
similarity index 99%
rename from docs/uv.lock
rename to docs/contributors/uv.lock
index a856e069..4d86cc4c 100644
--- a/docs/uv.lock
+++ b/docs/contributors/uv.lock
@@ -3,7 +3,7 @@ revision = 3
requires-python = ">=3.14"
[[package]]
-name = "alien-commons-docs"
+name = "alien-commons-contributors-docs"
version = "0.0.1"
source = { virtual = "." }
dependencies = [
@@ -15,7 +15,7 @@ dependencies = [
[package.metadata]
requires-dist = [
{ name = "mkdocs", specifier = ">=1.6.1" },
- { name = "mkdocs-material", specifier = ">=9.7.4" },
+ { name = "mkdocs-material", specifier = ">=9.7.6" },
{ name = "mkdocs-static-i18n", specifier = ">=1.3.1" },
]
diff --git a/docs/users/.python-version b/docs/users/.python-version
new file mode 100644
index 00000000..6324d401
--- /dev/null
+++ b/docs/users/.python-version
@@ -0,0 +1 @@
+3.14
diff --git a/docs/users/docs/index.md b/docs/users/docs/index.md
new file mode 100644
index 00000000..000ea345
--- /dev/null
+++ b/docs/users/docs/index.md
@@ -0,0 +1,17 @@
+# Welcome to MkDocs
+
+For full documentation visit [mkdocs.org](https://www.mkdocs.org).
+
+## Commands
+
+* `mkdocs new [dir-name]` - Create a new project.
+* `mkdocs serve` - Start the live-reloading docs server.
+* `mkdocs build` - Build the documentation site.
+* `mkdocs -h` - Print help message and exit.
+
+## Project layout
+
+ mkdocs.yml # The configuration file.
+ docs/
+ index.md # The documentation homepage.
+ ... # Other markdown pages, images and other files.
diff --git a/docs/users/mkdocs.yml b/docs/users/mkdocs.yml
new file mode 100644
index 00000000..c97182f5
--- /dev/null
+++ b/docs/users/mkdocs.yml
@@ -0,0 +1 @@
+site_name: My Docs
diff --git a/docs/users/pyproject.toml b/docs/users/pyproject.toml
new file mode 100644
index 00000000..cd0377cc
--- /dev/null
+++ b/docs/users/pyproject.toml
@@ -0,0 +1,9 @@
+[project]
+name = "alien-commons-users-guide"
+version = "0.1.0"
+requires-python = ">=3.14"
+dependencies = [
+ "mkdocs>=1.6.1",
+ "mkdocs-material>=9.7.6",
+ "mkdocs-static-i18n>=1.3.1",
+]
diff --git a/docs/users/uv.lock b/docs/users/uv.lock
new file mode 100644
index 00000000..ec43b480
--- /dev/null
+++ b/docs/users/uv.lock
@@ -0,0 +1,435 @@
+version = 1
+revision = 3
+requires-python = ">=3.14"
+
+[[package]]
+name = "babel"
+version = "2.18.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7d/b2/51899539b6ceeeb420d40ed3cd4b7a40519404f9baf3d4ac99dc413a834b/babel-2.18.0.tar.gz", hash = "sha256:b80b99a14bd085fcacfa15c9165f651fbb3406e66cc603abf11c5750937c992d", size = 9959554, upload-time = "2026-02-01T12:30:56.078Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/77/f5/21d2de20e8b8b0408f0681956ca2c69f1320a3848ac50e6e7f39c6159675/babel-2.18.0-py3-none-any.whl", hash = "sha256:e2b422b277c2b9a9630c1d7903c2a00d0830c409c59ac8cae9081c92f1aeba35", size = 10196845, upload-time = "2026-02-01T12:30:53.445Z" },
+]
+
+[[package]]
+name = "backrefs"
+version = "6.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/4e/a6/e325ec73b638d3ede4421b5445d4a0b8b219481826cc079d510100af356c/backrefs-6.2.tar.gz", hash = "sha256:f44ff4d48808b243b6c0cdc6231e22195c32f77046018141556c66f8bab72a49", size = 7012303, upload-time = "2026-02-16T19:10:15.828Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1b/39/3765df263e08a4df37f4f43cb5aa3c6c17a4bdd42ecfe841e04c26037171/backrefs-6.2-py310-none-any.whl", hash = "sha256:0fdc7b012420b6b144410342caeb8adc54c6866cf12064abc9bb211302e496f8", size = 381075, upload-time = "2026-02-16T19:10:04.322Z" },
+ { url = "https://files.pythonhosted.org/packages/0f/f0/35240571e1b67ffb19dafb29ab34150b6f59f93f717b041082cdb1bfceb1/backrefs-6.2-py311-none-any.whl", hash = "sha256:08aa7fae530c6b2361d7bdcbda1a7c454e330cc9dbcd03f5c23205e430e5c3be", size = 392874, upload-time = "2026-02-16T19:10:06.314Z" },
+ { url = "https://files.pythonhosted.org/packages/e3/63/77e8c9745b4d227cce9f5e0a6f68041278c5f9b18588b35905f5f19c1beb/backrefs-6.2-py312-none-any.whl", hash = "sha256:c3f4b9cb2af8cda0d87ab4f57800b57b95428488477be164dd2b47be54db0c90", size = 398787, upload-time = "2026-02-16T19:10:08.274Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/71/c754b1737ad99102e03fa3235acb6cb6d3ac9d6f596cbc3e5f236705abd8/backrefs-6.2-py313-none-any.whl", hash = "sha256:12df81596ab511f783b7d87c043ce26bc5b0288cf3bb03610fe76b8189282b2b", size = 400747, upload-time = "2026-02-16T19:10:09.791Z" },
+ { url = "https://files.pythonhosted.org/packages/af/75/be12ba31a6eb20dccef2320cd8ccb3f7d9013b68ba4c70156259fee9e409/backrefs-6.2-py314-none-any.whl", hash = "sha256:e5f805ae09819caa1aa0623b4a83790e7028604aa2b8c73ba602c4454e665de7", size = 412602, upload-time = "2026-02-16T19:10:12.317Z" },
+ { url = "https://files.pythonhosted.org/packages/21/f8/d02f650c47d05034dcd6f9c8cf94f39598b7a89c00ecda0ecb2911bc27e9/backrefs-6.2-py39-none-any.whl", hash = "sha256:664e33cd88c6840b7625b826ecf2555f32d491800900f5a541f772c485f7cda7", size = 381077, upload-time = "2026-02-16T19:10:13.74Z" },
+]
+
+[[package]]
+name = "certifi"
+version = "2026.2.25"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/af/2d/7bf41579a8986e348fa033a31cdd0e4121114f6bce2457e8876010b092dd/certifi-2026.2.25.tar.gz", hash = "sha256:e887ab5cee78ea814d3472169153c2d12cd43b14bd03329a39a9c6e2e80bfba7", size = 155029, upload-time = "2026-02-25T02:54:17.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl", hash = "sha256:027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa", size = 153684, upload-time = "2026-02-25T02:54:15.766Z" },
+]
+
+[[package]]
+name = "charset-normalizer"
+version = "3.4.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/e7/a1/67fe25fac3c7642725500a3f6cfe5821ad557c3abb11c9d20d12c7008d3e/charset_normalizer-3.4.7.tar.gz", hash = "sha256:ae89db9e5f98a11a4bf50407d4363e7b09b31e55bc117b4f7d80aab97ba009e5", size = 144271, upload-time = "2026-04-02T09:28:39.342Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/97/c8/c67cb8c70e19ef1960b97b22ed2a1567711de46c4ddf19799923adc836c2/charset_normalizer-3.4.7-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:c36c333c39be2dbca264d7803333c896ab8fa7d4d6f0ab7edb7dfd7aea6e98c0", size = 309234, upload-time = "2026-04-02T09:27:07.194Z" },
+ { url = "https://files.pythonhosted.org/packages/99/85/c091fdee33f20de70d6c8b522743b6f831a2f1cd3ff86de4c6a827c48a76/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1c2aed2e5e41f24ea8ef1590b8e848a79b56f3a5564a65ceec43c9d692dc7d8a", size = 208042, upload-time = "2026-04-02T09:27:08.749Z" },
+ { url = "https://files.pythonhosted.org/packages/87/1c/ab2ce611b984d2fd5d86a5a8a19c1ae26acac6bad967da4967562c75114d/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:54523e136b8948060c0fa0bc7b1b50c32c186f2fceee897a495406bb6e311d2b", size = 228706, upload-time = "2026-04-02T09:27:09.951Z" },
+ { url = "https://files.pythonhosted.org/packages/a8/29/2b1d2cb00bf085f59d29eb773ce58ec2d325430f8c216804a0a5cd83cbca/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:715479b9a2802ecac752a3b0efa2b0b60285cf962ee38414211abdfccc233b41", size = 224727, upload-time = "2026-04-02T09:27:11.175Z" },
+ { url = "https://files.pythonhosted.org/packages/47/5c/032c2d5a07fe4d4855fea851209cca2b6f03ebeb6d4e3afdb3358386a684/charset_normalizer-3.4.7-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bd6c2a1c7573c64738d716488d2cdd3c00e340e4835707d8fdb8dc1a66ef164e", size = 215882, upload-time = "2026-04-02T09:27:12.446Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/c2/356065d5a8b78ed04499cae5f339f091946a6a74f91e03476c33f0ab7100/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:c45e9440fb78f8ddabcf714b68f936737a121355bf59f3907f4e17721b9d1aae", size = 200860, upload-time = "2026-04-02T09:27:13.721Z" },
+ { url = "https://files.pythonhosted.org/packages/0c/cd/a32a84217ced5039f53b29f460962abb2d4420def55afabe45b1c3c7483d/charset_normalizer-3.4.7-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3534e7dcbdcf757da6b85a0bbf5b6868786d5982dd959b065e65481644817a18", size = 211564, upload-time = "2026-04-02T09:27:15.272Z" },
+ { url = "https://files.pythonhosted.org/packages/44/86/58e6f13ce26cc3b8f4a36b94a0f22ae2f00a72534520f4ae6857c4b81f89/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e8ac484bf18ce6975760921bb6148041faa8fef0547200386ea0b52b5d27bf7b", size = 211276, upload-time = "2026-04-02T09:27:16.834Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/fe/d17c32dc72e17e155e06883efa84514ca375f8a528ba2546bee73fc4df81/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:a5fe03b42827c13cdccd08e6c0247b6a6d4b5e3cdc53fd1749f5896adcdc2356", size = 201238, upload-time = "2026-04-02T09:27:18.229Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/29/f33daa50b06525a237451cdb6c69da366c381a3dadcd833fa5676bc468b3/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:2d6eb928e13016cea4f1f21d1e10c1cebd5a421bc57ddf5b1142ae3f86824fab", size = 230189, upload-time = "2026-04-02T09:27:19.445Z" },
+ { url = "https://files.pythonhosted.org/packages/b6/6e/52c84015394a6a0bdcd435210a7e944c5f94ea1055f5cc5d56c5fe368e7b/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:e74327fb75de8986940def6e8dee4f127cc9752bee7355bb323cc5b2659b6d46", size = 211352, upload-time = "2026-04-02T09:27:20.79Z" },
+ { url = "https://files.pythonhosted.org/packages/8c/d7/4353be581b373033fb9198bf1da3cf8f09c1082561e8e922aa7b39bf9fe8/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:d6038d37043bced98a66e68d3aa2b6a35505dc01328cd65217cefe82f25def44", size = 227024, upload-time = "2026-04-02T09:27:22.063Z" },
+ { url = "https://files.pythonhosted.org/packages/30/45/99d18aa925bd1740098ccd3060e238e21115fffbfdcb8f3ece837d0ace6c/charset_normalizer-3.4.7-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:7579e913a5339fb8fa133f6bbcfd8e6749696206cf05acdbdca71a1b436d8e72", size = 217869, upload-time = "2026-04-02T09:27:23.486Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/05/5ee478aa53f4bb7996482153d4bfe1b89e0f087f0ab6b294fcf92d595873/charset_normalizer-3.4.7-cp314-cp314-win32.whl", hash = "sha256:5b77459df20e08151cd6f8b9ef8ef1f961ef73d85c21a555c7eed5b79410ec10", size = 148541, upload-time = "2026-04-02T09:27:25.146Z" },
+ { url = "https://files.pythonhosted.org/packages/48/77/72dcb0921b2ce86420b2d79d454c7022bf5be40202a2a07906b9f2a35c97/charset_normalizer-3.4.7-cp314-cp314-win_amd64.whl", hash = "sha256:92a0a01ead5e668468e952e4238cccd7c537364eb7d851ab144ab6627dbbe12f", size = 159634, upload-time = "2026-04-02T09:27:26.642Z" },
+ { url = "https://files.pythonhosted.org/packages/c6/a3/c2369911cd72f02386e4e340770f6e158c7980267da16af8f668217abaa0/charset_normalizer-3.4.7-cp314-cp314-win_arm64.whl", hash = "sha256:67f6279d125ca0046a7fd386d01b311c6363844deac3e5b069b514ba3e63c246", size = 148384, upload-time = "2026-04-02T09:27:28.271Z" },
+ { url = "https://files.pythonhosted.org/packages/94/09/7e8a7f73d24dba1f0035fbbf014d2c36828fc1bf9c88f84093e57d315935/charset_normalizer-3.4.7-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:effc3f449787117233702311a1b7d8f59cba9ced946ba727bdc329ec69028e24", size = 330133, upload-time = "2026-04-02T09:27:29.474Z" },
+ { url = "https://files.pythonhosted.org/packages/8d/da/96975ddb11f8e977f706f45cddd8540fd8242f71ecdb5d18a80723dcf62c/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fbccdc05410c9ee21bbf16a35f4c1d16123dcdeb8a1d38f33654fa21d0234f79", size = 216257, upload-time = "2026-04-02T09:27:30.793Z" },
+ { url = "https://files.pythonhosted.org/packages/e5/e8/1d63bf8ef2d388e95c64b2098f45f84758f6d102a087552da1485912637b/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:733784b6d6def852c814bce5f318d25da2ee65dd4839a0718641c696e09a2960", size = 234851, upload-time = "2026-04-02T09:27:32.44Z" },
+ { url = "https://files.pythonhosted.org/packages/9b/40/e5ff04233e70da2681fa43969ad6f66ca5611d7e669be0246c4c7aaf6dc8/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a89c23ef8d2c6b27fd200a42aa4ac72786e7c60d40efdc76e6011260b6e949c4", size = 233393, upload-time = "2026-04-02T09:27:34.03Z" },
+ { url = "https://files.pythonhosted.org/packages/be/c1/06c6c49d5a5450f76899992f1ee40b41d076aee9279b49cf9974d2f313d5/charset_normalizer-3.4.7-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6c114670c45346afedc0d947faf3c7f701051d2518b943679c8ff88befe14f8e", size = 223251, upload-time = "2026-04-02T09:27:35.369Z" },
+ { url = "https://files.pythonhosted.org/packages/2b/9f/f2ff16fb050946169e3e1f82134d107e5d4ae72647ec8a1b1446c148480f/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:a180c5e59792af262bf263b21a3c49353f25945d8d9f70628e73de370d55e1e1", size = 206609, upload-time = "2026-04-02T09:27:36.661Z" },
+ { url = "https://files.pythonhosted.org/packages/69/d5/a527c0cd8d64d2eab7459784fb4169a0ac76e5a6fc5237337982fd61347e/charset_normalizer-3.4.7-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3c9a494bc5ec77d43cea229c4f6db1e4d8fe7e1bbffa8b6f0f0032430ff8ab44", size = 220014, upload-time = "2026-04-02T09:27:38.019Z" },
+ { url = "https://files.pythonhosted.org/packages/7e/80/8a7b8104a3e203074dc9aa2c613d4b726c0e136bad1cc734594b02867972/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:8d828b6667a32a728a1ad1d93957cdf37489c57b97ae6c4de2860fa749b8fc1e", size = 218979, upload-time = "2026-04-02T09:27:39.37Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9a/b759b503d507f375b2b5c153e4d2ee0a75aa215b7f2489cf314f4541f2c0/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:cf1493cd8607bec4d8a7b9b004e699fcf8f9103a9284cc94962cb73d20f9d4a3", size = 209238, upload-time = "2026-04-02T09:27:40.722Z" },
+ { url = "https://files.pythonhosted.org/packages/c2/4e/0f3f5d47b86bdb79256e7290b26ac847a2832d9a4033f7eb2cd4bcf4bb5b/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:0c96c3b819b5c3e9e165495db84d41914d6894d55181d2d108cc1a69bfc9cce0", size = 236110, upload-time = "2026-04-02T09:27:42.33Z" },
+ { url = "https://files.pythonhosted.org/packages/96/23/bce28734eb3ed2c91dcf93abeb8a5cf393a7b2749725030bb630e554fdd8/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:752a45dc4a6934060b3b0dab47e04edc3326575f82be64bc4fc293914566503e", size = 219824, upload-time = "2026-04-02T09:27:43.924Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/6f/6e897c6984cc4d41af319b077f2f600fc8214eb2fe2d6bcb79141b882400/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_s390x.whl", hash = "sha256:8778f0c7a52e56f75d12dae53ae320fae900a8b9b4164b981b9c5ce059cd1fcb", size = 233103, upload-time = "2026-04-02T09:27:45.348Z" },
+ { url = "https://files.pythonhosted.org/packages/76/22/ef7bd0fe480a0ae9b656189ec00744b60933f68b4f42a7bb06589f6f576a/charset_normalizer-3.4.7-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ce3412fbe1e31eb81ea42f4169ed94861c56e643189e1e75f0041f3fe7020abe", size = 225194, upload-time = "2026-04-02T09:27:46.706Z" },
+ { url = "https://files.pythonhosted.org/packages/c5/a7/0e0ab3e0b5bc1219bd80a6a0d4d72ca74d9250cb2382b7c699c147e06017/charset_normalizer-3.4.7-cp314-cp314t-win32.whl", hash = "sha256:c03a41a8784091e67a39648f70c5f97b5b6a37f216896d44d2cdcb82615339a0", size = 159827, upload-time = "2026-04-02T09:27:48.053Z" },
+ { url = "https://files.pythonhosted.org/packages/7a/1d/29d32e0fb40864b1f878c7f5a0b343ae676c6e2b271a2d55cc3a152391da/charset_normalizer-3.4.7-cp314-cp314t-win_amd64.whl", hash = "sha256:03853ed82eeebbce3c2abfdbc98c96dc205f32a79627688ac9a27370ea61a49c", size = 174168, upload-time = "2026-04-02T09:27:49.795Z" },
+ { url = "https://files.pythonhosted.org/packages/de/32/d92444ad05c7a6e41fb2036749777c163baf7a0301a040cb672d6b2b1ae9/charset_normalizer-3.4.7-cp314-cp314t-win_arm64.whl", hash = "sha256:c35abb8bfff0185efac5878da64c45dafd2b37fb0383add1be155a763c1f083d", size = 153018, upload-time = "2026-04-02T09:27:51.116Z" },
+ { url = "https://files.pythonhosted.org/packages/db/8f/61959034484a4a7c527811f4721e75d02d653a35afb0b6054474d8185d4c/charset_normalizer-3.4.7-py3-none-any.whl", hash = "sha256:3dce51d0f5e7951f8bb4900c257dad282f49190fdbebecd4ba99bcc41fef404d", size = 61958, upload-time = "2026-04-02T09:28:37.794Z" },
+]
+
+[[package]]
+name = "click"
+version = "8.3.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/57/75/31212c6bf2503fdf920d87fee5d7a86a2e3bcf444984126f13d8e4016804/click-8.3.2.tar.gz", hash = "sha256:14162b8b3b3550a7d479eafa77dfd3c38d9dc8951f6f69c78913a8f9a7540fd5", size = 302856, upload-time = "2026-04-03T19:14:45.118Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl", hash = "sha256:1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d", size = 108379, upload-time = "2026-04-03T19:14:43.505Z" },
+]
+
+[[package]]
+name = "colorama"
+version = "0.4.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" },
+]
+
+[[package]]
+name = "ghp-import"
+version = "2.1.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "python-dateutil" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/d9/29/d40217cbe2f6b1359e00c6c307bb3fc876ba74068cbab3dde77f03ca0dc4/ghp-import-2.1.0.tar.gz", hash = "sha256:9c535c4c61193c2df8871222567d7fd7e5014d835f97dc7b7439069e2413d343", size = 10943, upload-time = "2022-05-02T15:47:16.11Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/ec/67fbef5d497f86283db54c22eec6f6140243aae73265799baaaa19cd17fb/ghp_import-2.1.0-py3-none-any.whl", hash = "sha256:8337dd7b50877f163d4c0289bc1f1c7f127550241988d568c1db512c4324a619", size = 11034, upload-time = "2022-05-02T15:47:14.552Z" },
+]
+
+[[package]]
+name = "idna"
+version = "3.11"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
+]
+
+[[package]]
+name = "jinja2"
+version = "3.1.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markupsafe" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/bf/f7da0350254c0ed7c72f3e33cef02e048281fec7ecec5f032d4aac52226b/jinja2-3.1.6.tar.gz", hash = "sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d", size = 245115, upload-time = "2025-03-05T20:05:02.478Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl", hash = "sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67", size = 134899, upload-time = "2025-03-05T20:05:00.369Z" },
+]
+
+[[package]]
+name = "markdown"
+version = "3.10.2"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/2b/f4/69fa6ed85ae003c2378ffa8f6d2e3234662abd02c10d216c0ba96081a238/markdown-3.10.2.tar.gz", hash = "sha256:994d51325d25ad8aa7ce4ebaec003febcce822c3f8c911e3b17c52f7f589f950", size = 368805, upload-time = "2026-02-09T14:57:26.942Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/de/1f/77fa3081e4f66ca3576c896ae5d31c3002ac6607f9747d2e3aa49227e464/markdown-3.10.2-py3-none-any.whl", hash = "sha256:e91464b71ae3ee7afd3017d9f358ef0baf158fd9a298db92f1d4761133824c36", size = 108180, upload-time = "2026-02-09T14:57:25.787Z" },
+]
+
+[[package]]
+name = "markupsafe"
+version = "3.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/33/8a/8e42d4838cd89b7dde187011e97fe6c3af66d8c044997d2183fbd6d31352/markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe", size = 11619, upload-time = "2025-09-27T18:37:06.342Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/64/7660f8a4a8e53c924d0fa05dc3a55c9cee10bbd82b11c5afb27d44b096ce/markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026", size = 12029, upload-time = "2025-09-27T18:37:07.213Z" },
+ { url = "https://files.pythonhosted.org/packages/da/ef/e648bfd021127bef5fa12e1720ffed0c6cbb8310c8d9bea7266337ff06de/markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737", size = 24408, upload-time = "2025-09-27T18:37:09.572Z" },
+ { url = "https://files.pythonhosted.org/packages/41/3c/a36c2450754618e62008bf7435ccb0f88053e07592e6028a34776213d877/markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97", size = 23005, upload-time = "2025-09-27T18:37:10.58Z" },
+ { url = "https://files.pythonhosted.org/packages/bc/20/b7fdf89a8456b099837cd1dc21974632a02a999ec9bf7ca3e490aacd98e7/markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d", size = 22048, upload-time = "2025-09-27T18:37:11.547Z" },
+ { url = "https://files.pythonhosted.org/packages/9a/a7/591f592afdc734f47db08a75793a55d7fbcc6902a723ae4cfbab61010cc5/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda", size = 23821, upload-time = "2025-09-27T18:37:12.48Z" },
+ { url = "https://files.pythonhosted.org/packages/7d/33/45b24e4f44195b26521bc6f1a82197118f74df348556594bd2262bda1038/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf", size = 21606, upload-time = "2025-09-27T18:37:13.485Z" },
+ { url = "https://files.pythonhosted.org/packages/ff/0e/53dfaca23a69fbfbbf17a4b64072090e70717344c52eaaaa9c5ddff1e5f0/markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe", size = 23043, upload-time = "2025-09-27T18:37:14.408Z" },
+ { url = "https://files.pythonhosted.org/packages/46/11/f333a06fc16236d5238bfe74daccbca41459dcd8d1fa952e8fbd5dccfb70/markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9", size = 14747, upload-time = "2025-09-27T18:37:15.36Z" },
+ { url = "https://files.pythonhosted.org/packages/28/52/182836104b33b444e400b14f797212f720cbc9ed6ba34c800639d154e821/markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581", size = 15341, upload-time = "2025-09-27T18:37:16.496Z" },
+ { url = "https://files.pythonhosted.org/packages/6f/18/acf23e91bd94fd7b3031558b1f013adfa21a8e407a3fdb32745538730382/markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4", size = 14073, upload-time = "2025-09-27T18:37:17.476Z" },
+ { url = "https://files.pythonhosted.org/packages/3c/f0/57689aa4076e1b43b15fdfa646b04653969d50cf30c32a102762be2485da/markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab", size = 11661, upload-time = "2025-09-27T18:37:18.453Z" },
+ { url = "https://files.pythonhosted.org/packages/89/c3/2e67a7ca217c6912985ec766c6393b636fb0c2344443ff9d91404dc4c79f/markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175", size = 12069, upload-time = "2025-09-27T18:37:19.332Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/00/be561dce4e6ca66b15276e184ce4b8aec61fe83662cce2f7d72bd3249d28/markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634", size = 25670, upload-time = "2025-09-27T18:37:20.245Z" },
+ { url = "https://files.pythonhosted.org/packages/50/09/c419f6f5a92e5fadde27efd190eca90f05e1261b10dbd8cbcb39cd8ea1dc/markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50", size = 23598, upload-time = "2025-09-27T18:37:21.177Z" },
+ { url = "https://files.pythonhosted.org/packages/22/44/a0681611106e0b2921b3033fc19bc53323e0b50bc70cffdd19f7d679bb66/markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e", size = 23261, upload-time = "2025-09-27T18:37:22.167Z" },
+ { url = "https://files.pythonhosted.org/packages/5f/57/1b0b3f100259dc9fffe780cfb60d4be71375510e435efec3d116b6436d43/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5", size = 24835, upload-time = "2025-09-27T18:37:23.296Z" },
+ { url = "https://files.pythonhosted.org/packages/26/6a/4bf6d0c97c4920f1597cc14dd720705eca0bf7c787aebc6bb4d1bead5388/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523", size = 22733, upload-time = "2025-09-27T18:37:24.237Z" },
+ { url = "https://files.pythonhosted.org/packages/14/c7/ca723101509b518797fedc2fdf79ba57f886b4aca8a7d31857ba3ee8281f/markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc", size = 23672, upload-time = "2025-09-27T18:37:25.271Z" },
+ { url = "https://files.pythonhosted.org/packages/fb/df/5bd7a48c256faecd1d36edc13133e51397e41b73bb77e1a69deab746ebac/markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d", size = 14819, upload-time = "2025-09-27T18:37:26.285Z" },
+ { url = "https://files.pythonhosted.org/packages/1a/8a/0402ba61a2f16038b48b39bccca271134be00c5c9f0f623208399333c448/markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9", size = 15426, upload-time = "2025-09-27T18:37:27.316Z" },
+ { url = "https://files.pythonhosted.org/packages/70/bc/6f1c2f612465f5fa89b95bead1f44dcb607670fd42891d8fdcd5d039f4f4/markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa", size = 14146, upload-time = "2025-09-27T18:37:28.327Z" },
+]
+
+[[package]]
+name = "mergedeep"
+version = "1.3.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/3a/41/580bb4006e3ed0361b8151a01d324fb03f420815446c7def45d02f74c270/mergedeep-1.3.4.tar.gz", hash = "sha256:0096d52e9dad9939c3d975a774666af186eda617e6ca84df4c94dec30004f2a8", size = 4661, upload-time = "2021-02-05T18:55:30.623Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/19/04f9b178c2d8a15b076c8b5140708fa6ffc5601fb6f1e975537072df5b2a/mergedeep-1.3.4-py3-none-any.whl", hash = "sha256:70775750742b25c0d8f36c55aed03d24c3384d17c951b3175d898bd778ef0307", size = 6354, upload-time = "2021-02-05T18:55:29.583Z" },
+]
+
+[[package]]
+name = "mkdocs"
+version = "1.6.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "click" },
+ { name = "colorama", marker = "sys_platform == 'win32'" },
+ { name = "ghp-import" },
+ { name = "jinja2" },
+ { name = "markdown" },
+ { name = "markupsafe" },
+ { name = "mergedeep" },
+ { name = "mkdocs-get-deps" },
+ { name = "packaging" },
+ { name = "pathspec" },
+ { name = "pyyaml" },
+ { name = "pyyaml-env-tag" },
+ { name = "watchdog" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/bc/c6/bbd4f061bd16b378247f12953ffcb04786a618ce5e904b8c5a01a0309061/mkdocs-1.6.1.tar.gz", hash = "sha256:7b432f01d928c084353ab39c57282f29f92136665bdd6abf7c1ec8d822ef86f2", size = 3889159, upload-time = "2024-08-30T12:24:06.899Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/22/5b/dbc6a8cddc9cfa9c4971d59fb12bb8d42e161b7e7f8cc89e49137c5b279c/mkdocs-1.6.1-py3-none-any.whl", hash = "sha256:db91759624d1647f3f34aa0c3f327dd2601beae39a366d6e064c03468d35c20e", size = 3864451, upload-time = "2024-08-30T12:24:05.054Z" },
+]
+
+[[package]]
+name = "mkdocs-get-deps"
+version = "0.2.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mergedeep" },
+ { name = "platformdirs" },
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ce/25/b3cccb187655b9393572bde9b09261d267c3bf2f2cdabe347673be5976a6/mkdocs_get_deps-0.2.2.tar.gz", hash = "sha256:8ee8d5f316cdbbb2834bc1df6e69c08fe769a83e040060de26d3c19fad3599a1", size = 11047, upload-time = "2026-03-10T02:46:33.632Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/88/29/744136411e785c4b0b744d5413e56555265939ab3a104c6a4b719dad33fd/mkdocs_get_deps-0.2.2-py3-none-any.whl", hash = "sha256:e7878cbeac04860b8b5e0ca31d3abad3df9411a75a32cde82f8e44b6c16ff650", size = 9555, upload-time = "2026-03-10T02:46:32.256Z" },
+]
+
+[[package]]
+name = "mkdocs-material"
+version = "9.7.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "babel" },
+ { name = "backrefs" },
+ { name = "colorama" },
+ { name = "jinja2" },
+ { name = "markdown" },
+ { name = "mkdocs" },
+ { name = "mkdocs-material-extensions" },
+ { name = "paginate" },
+ { name = "pygments" },
+ { name = "pymdown-extensions" },
+ { name = "requests" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/45/29/6d2bcf41ae40802c4beda2432396fff97b8456fb496371d1bc7aad6512ec/mkdocs_material-9.7.6.tar.gz", hash = "sha256:00bdde50574f776d328b1862fe65daeaf581ec309bd150f7bff345a098c64a69", size = 4097959, upload-time = "2026-03-19T15:41:58.161Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/2c/01/bc663630c510822c95c47a66af9fa7a443c295b47d5f041e5e6ae62ef659/mkdocs_material-9.7.6-py3-none-any.whl", hash = "sha256:71b84353921b8ea1ba84fe11c50912cc512da8fe0881038fcc9a0761c0e635ba", size = 9305470, upload-time = "2026-03-19T15:41:55.217Z" },
+]
+
+[[package]]
+name = "mkdocs-material-extensions"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/79/9b/9b4c96d6593b2a541e1cb8b34899a6d021d208bb357042823d4d2cabdbe7/mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443", size = 11847, upload-time = "2023-11-22T19:09:45.208Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5b/54/662a4743aa81d9582ee9339d4ffa3c8fd40a4965e033d77b9da9774d3960/mkdocs_material_extensions-1.3.1-py3-none-any.whl", hash = "sha256:adff8b62700b25cb77b53358dad940f3ef973dd6db797907c49e3c2ef3ab4e31", size = 8728, upload-time = "2023-11-22T19:09:43.465Z" },
+]
+
+[[package]]
+name = "mkdocs-static-i18n"
+version = "1.3.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "mkdocs" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ce/f9/51e2ffda9c7210bc35a24f3717b08c052cd4b728dfa87f901c00d8005259/mkdocs_static_i18n-1.3.1.tar.gz", hash = "sha256:a6125ea7db6cc1a900d76a967f262535af09831160a93c56d7f0d522a79b5faf", size = 1371325, upload-time = "2026-02-20T10:42:41.835Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/6a/0b/43ff4afb6b438d47718b1959a22075ed95d8460d8c47381878b37a40de63/mkdocs_static_i18n-1.3.1-py3-none-any.whl", hash = "sha256:4036e24795a150c9c4d4b001ed24a43aec01335f76188dbe5a5d8fb4a27eba65", size = 21853, upload-time = "2026-02-20T10:42:40.551Z" },
+]
+
+[[package]]
+name = "packaging"
+version = "26.1"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/df/de/0d2b39fb4af88a0258f3bac87dfcbb48e73fbdea4a2ed0e2213f9a4c2f9a/packaging-26.1.tar.gz", hash = "sha256:f042152b681c4bfac5cae2742a55e103d27ab2ec0f3d88037136b6bfe7c9c5de", size = 215519, upload-time = "2026-04-14T21:12:49.362Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/7a/c2/920ef838e2f0028c8262f16101ec09ebd5969864e5a64c4c05fad0617c56/packaging-26.1-py3-none-any.whl", hash = "sha256:5d9c0669c6285e491e0ced2eee587eaf67b670d94a19e94e3984a481aba6802f", size = 95831, upload-time = "2026-04-14T21:12:47.56Z" },
+]
+
+[[package]]
+name = "paginate"
+version = "0.5.7"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/ec/46/68dde5b6bc00c1296ec6466ab27dddede6aec9af1b99090e1107091b3b84/paginate-0.5.7.tar.gz", hash = "sha256:22bd083ab41e1a8b4f3690544afb2c60c25e5c9a63a30fa2f483f6c60c8e5945", size = 19252, upload-time = "2024-08-25T14:17:24.139Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/90/96/04b8e52da071d28f5e21a805b19cb9390aa17a47462ac87f5e2696b9566d/paginate-0.5.7-py2.py3-none-any.whl", hash = "sha256:b885e2af73abcf01d9559fd5216b57ef722f8c42affbb63942377668e35c7591", size = 13746, upload-time = "2024-08-25T14:17:22.55Z" },
+]
+
+[[package]]
+name = "pathspec"
+version = "1.0.4"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" },
+]
+
+[[package]]
+name = "platformdirs"
+version = "4.9.6"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/9f/4a/0883b8e3802965322523f0b200ecf33d31f10991d0401162f4b23c698b42/platformdirs-4.9.6.tar.gz", hash = "sha256:3bfa75b0ad0db84096ae777218481852c0ebc6c727b3168c1b9e0118e458cf0a", size = 29400, upload-time = "2026-04-09T00:04:10.812Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/75/a6/a0a304dc33b49145b21f4808d763822111e67d1c3a32b524a1baf947b6e1/platformdirs-4.9.6-py3-none-any.whl", hash = "sha256:e61adb1d5e5cb3441b4b7710bea7e4c12250ca49439228cc1021c00dcfac0917", size = 21348, upload-time = "2026-04-09T00:04:09.463Z" },
+]
+
+[[package]]
+name = "pygments"
+version = "2.20.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c3/b2/bc9c9196916376152d655522fdcebac55e66de6603a76a02bca1b6414f6c/pygments-2.20.0.tar.gz", hash = "sha256:6757cd03768053ff99f3039c1a36d6c0aa0b263438fcab17520b30a303a82b5f", size = 4955991, upload-time = "2026-03-29T13:29:33.898Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl", hash = "sha256:81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176", size = 1231151, upload-time = "2026-03-29T13:29:30.038Z" },
+]
+
+[[package]]
+name = "pymdown-extensions"
+version = "10.21.2"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "markdown" },
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/df/08/f1c908c581fd11913da4711ea7ba32c0eee40b0190000996bb863b0c9349/pymdown_extensions-10.21.2.tar.gz", hash = "sha256:c3f55a5b8a1d0edf6699e35dcbea71d978d34ff3fa79f3d807b8a5b3fa90fbdc", size = 853922, upload-time = "2026-03-29T15:01:55.233Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/f7/27/a2fc51a4a122dfd1015e921ae9d22fee3d20b0b8080d9a704578bf9deece/pymdown_extensions-10.21.2-py3-none-any.whl", hash = "sha256:5c0fd2a2bea14eb39af8ff284f1066d898ab2187d81b889b75d46d4348c01638", size = 268901, upload-time = "2026-03-29T15:01:53.244Z" },
+]
+
+[[package]]
+name = "python-dateutil"
+version = "2.9.0.post0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "six" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/66/c0/0c8b6ad9f17a802ee498c46e004a0eb49bc148f2fd230864601a86dcf6db/python-dateutil-2.9.0.post0.tar.gz", hash = "sha256:37dd54208da7e1cd875388217d5e00ebd4179249f90fb72437e91a35459a0ad3", size = 342432, upload-time = "2024-03-01T18:36:20.211Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl", hash = "sha256:a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427", size = 229892, upload-time = "2024-03-01T18:36:18.57Z" },
+]
+
+[[package]]
+name = "pyyaml"
+version = "6.0.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
+ { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
+ { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
+ { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
+ { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
+ { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
+ { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
+ { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
+ { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
+ { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
+ { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
+ { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
+ { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
+ { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
+ { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
+ { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
+ { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
+]
+
+[[package]]
+name = "pyyaml-env-tag"
+version = "1.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "pyyaml" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/eb/2e/79c822141bfd05a853236b504869ebc6b70159afc570e1d5a20641782eaa/pyyaml_env_tag-1.1.tar.gz", hash = "sha256:2eb38b75a2d21ee0475d6d97ec19c63287a7e140231e4214969d0eac923cd7ff", size = 5737, upload-time = "2025-05-13T15:24:01.64Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/04/11/432f32f8097b03e3cd5fe57e88efb685d964e2e5178a48ed61e841f7fdce/pyyaml_env_tag-1.1-py3-none-any.whl", hash = "sha256:17109e1a528561e32f026364712fee1264bc2ea6715120891174ed1b980d2e04", size = 4722, upload-time = "2025-05-13T15:23:59.629Z" },
+]
+
+[[package]]
+name = "requests"
+version = "2.33.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "certifi" },
+ { name = "charset-normalizer" },
+ { name = "idna" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/5f/a4/98b9c7c6428a668bf7e42ebb7c79d576a1c3c1e3ae2d47e674b468388871/requests-2.33.1.tar.gz", hash = "sha256:18817f8c57c6263968bc123d237e3b8b08ac046f5456bd1e307ee8f4250d3517", size = 134120, upload-time = "2026-03-30T16:09:15.531Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
+]
+
+[[package]]
+name = "six"
+version = "1.17.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/94/e7/b2c673351809dca68a0e064b6af791aa332cf192da575fd474ed7d6f16a2/six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81", size = 34031, upload-time = "2024-12-04T17:35:28.174Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274", size = 11050, upload-time = "2024-12-04T17:35:26.475Z" },
+]
+
+[[package]]
+name = "urllib3"
+version = "2.6.3"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
+]
+
+[[package]]
+name = "users"
+version = "0.1.0"
+source = { virtual = "." }
+dependencies = [
+ { name = "mkdocs" },
+ { name = "mkdocs-material" },
+ { name = "mkdocs-static-i18n" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "mkdocs", specifier = ">=1.6.1" },
+ { name = "mkdocs-material", specifier = ">=9.7.6" },
+ { name = "mkdocs-static-i18n", specifier = ">=1.3.1" },
+]
+
+[[package]]
+name = "watchdog"
+version = "6.0.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/db/7d/7f3d619e951c88ed75c6037b246ddcf2d322812ee8ea189be89511721d54/watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282", size = 131220, upload-time = "2024-11-01T14:07:13.037Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/a9/c7/ca4bf3e518cb57a686b2feb4f55a1892fd9a3dd13f470fca14e00f80ea36/watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13", size = 79079, upload-time = "2024-11-01T14:06:59.472Z" },
+ { url = "https://files.pythonhosted.org/packages/5c/51/d46dc9332f9a647593c947b4b88e2381c8dfc0942d15b8edc0310fa4abb1/watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379", size = 79078, upload-time = "2024-11-01T14:07:01.431Z" },
+ { url = "https://files.pythonhosted.org/packages/d4/57/04edbf5e169cd318d5f07b4766fee38e825d64b6913ca157ca32d1a42267/watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e", size = 79076, upload-time = "2024-11-01T14:07:02.568Z" },
+ { url = "https://files.pythonhosted.org/packages/ab/cc/da8422b300e13cb187d2203f20b9253e91058aaf7db65b74142013478e66/watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f", size = 79077, upload-time = "2024-11-01T14:07:03.893Z" },
+ { url = "https://files.pythonhosted.org/packages/2c/3b/b8964e04ae1a025c44ba8e4291f86e97fac443bca31de8bd98d3263d2fcf/watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26", size = 79078, upload-time = "2024-11-01T14:07:05.189Z" },
+ { url = "https://files.pythonhosted.org/packages/62/ae/a696eb424bedff7407801c257d4b1afda455fe40821a2be430e173660e81/watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c", size = 79077, upload-time = "2024-11-01T14:07:06.376Z" },
+ { url = "https://files.pythonhosted.org/packages/b5/e8/dbf020b4d98251a9860752a094d09a65e1b436ad181faf929983f697048f/watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2", size = 79078, upload-time = "2024-11-01T14:07:07.547Z" },
+ { url = "https://files.pythonhosted.org/packages/07/f6/d0e5b343768e8bcb4cda79f0f2f55051bf26177ecd5651f84c07567461cf/watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a", size = 79065, upload-time = "2024-11-01T14:07:09.525Z" },
+ { url = "https://files.pythonhosted.org/packages/db/d9/c495884c6e548fce18a8f40568ff120bc3a4b7b99813081c8ac0c936fa64/watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680", size = 79070, upload-time = "2024-11-01T14:07:10.686Z" },
+ { url = "https://files.pythonhosted.org/packages/33/e8/e40370e6d74ddba47f002a32919d91310d6074130fe4e17dabcafc15cbf1/watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f", size = 79067, upload-time = "2024-11-01T14:07:11.845Z" },
+]
From c8859d284a7adebc5db29dc55aebec07b727de3b Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 18 Apr 2026 13:00:57 +1000
Subject: [PATCH 20/51] chore: update workflows
---
.github/workflows/docs-deploy.yml | 6 +++---
.github/workflows/docs-validate.yml | 4 ++--
README.md | 4 +++-
docs/contributors/pyproject.toml | 2 +-
docs/users/pyproject.toml | 2 +-
5 files changed, 10 insertions(+), 8 deletions(-)
diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/docs-deploy.yml
index 04b413b5..b8d5745e 100644
--- a/.github/workflows/docs-deploy.yml
+++ b/.github/workflows/docs-deploy.yml
@@ -5,7 +5,7 @@ on:
branches:
- main
paths:
- - "docs/developers/**"
+ - "docs/contributors/**"
- ".github/workflows/docs-validate.yml"
- ".github/workflows/docs-deploy.yml"
workflow_dispatch:
@@ -25,7 +25,7 @@ jobs:
defaults:
run:
- working-directory: docs
+ working-directory: docs/contributors
steps:
- name: Checkout repository
@@ -53,7 +53,7 @@ jobs:
- name: Upload Pages artifact
uses: actions/upload-pages-artifact@v3
with:
- path: docs/site
+ path: docs/contributors/site
deploy:
environment:
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index cf93679a..ea0ab9dd 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -3,7 +3,7 @@ name: Docs Validate
on:
pull_request:
paths:
- - "docs/developers/**"
+ - "docs/contributors/**"
- ".github/workflows/docs-validate.yml"
- ".github/workflows/docs-deploy.yml"
@@ -16,7 +16,7 @@ jobs:
defaults:
run:
- working-directory: docs
+ working-directory: docs/contributors
steps:
- name: Checkout repository
diff --git a/README.md b/README.md
index 4012fc8b..2e6bdc7a 100644
--- a/README.md
+++ b/README.md
@@ -35,7 +35,9 @@ Deployment: **Docker**
- **alloy** config files
`docs/`: Documentation
-- developer documentation
+- contributor documentation
+- user guide
+- alienmark documentation
`packages/`: Packages
- alienmark
diff --git a/docs/contributors/pyproject.toml b/docs/contributors/pyproject.toml
index 99145524..da6b3a91 100644
--- a/docs/contributors/pyproject.toml
+++ b/docs/contributors/pyproject.toml
@@ -1,5 +1,5 @@
[project]
-name = "alien-commons-contributors-docs"
+name = "alien-commons-contributor-docs"
version = "0.0.1"
requires-python = ">=3.14"
dependencies = [
diff --git a/docs/users/pyproject.toml b/docs/users/pyproject.toml
index cd0377cc..95a172db 100644
--- a/docs/users/pyproject.toml
+++ b/docs/users/pyproject.toml
@@ -1,5 +1,5 @@
[project]
-name = "alien-commons-users-guide"
+name = "alien-commons-user-guide"
version = "0.1.0"
requires-python = ">=3.14"
dependencies = [
From 024ec64fb29f9c703b8d295e3639d849632a6fe6 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 18 Apr 2026 17:09:36 +1000
Subject: [PATCH 21/51] docs: update alienmark docs
---
.gitignore | 2 +-
README.md | 4 +-
docs/alienmark/docs/index.en.md | 35 ++++++
docs/alienmark/docs/index.md | 17 ---
docs/alienmark/docs/index.zh.md | 35 ++++++
docs/alienmark/docs/syntax.en.md | 186 +++++++++++++++++++++++++++++++
docs/alienmark/docs/syntax.zh.md | 186 +++++++++++++++++++++++++++++++
docs/alienmark/mkdocs.yml | 29 ++++-
8 files changed, 473 insertions(+), 21 deletions(-)
create mode 100644 docs/alienmark/docs/index.en.md
delete mode 100644 docs/alienmark/docs/index.md
create mode 100644 docs/alienmark/docs/index.zh.md
create mode 100644 docs/alienmark/docs/syntax.en.md
create mode 100644 docs/alienmark/docs/syntax.zh.md
diff --git a/.gitignore b/.gitignore
index 91bdb035..28047fb3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -61,7 +61,7 @@ __screenshots__/
/cypress/screenshots/
# Docs generated files
-docs/site/
+docs/*/site/
# Environment files
infra/env/.env.pro
diff --git a/README.md b/README.md
index 2e6bdc7a..155147ac 100644
--- a/README.md
+++ b/README.md
@@ -37,10 +37,10 @@ Deployment: **Docker**
`docs/`: Documentation
- contributor documentation
- user guide
-- alienmark documentation
+- AlienMark documentation
`packages/`: Packages
-- alienmark
+- AlienMark
`.github/`: GitHub Configs
- workflows
diff --git a/docs/alienmark/docs/index.en.md b/docs/alienmark/docs/index.en.md
new file mode 100644
index 00000000..aa1ecb5d
--- /dev/null
+++ b/docs/alienmark/docs/index.en.md
@@ -0,0 +1,35 @@
+# AlienMark
+
+AlienMark is the Markdown engine behind AlienCommons.
+
+This documentation currently describes the syntax that is already implemented in the `packages/alienmark` package.
+
+## What AlienMark Does
+
+AlienMark currently provides:
+
+- Markdown parsing
+- AST generation
+- HTML rendering
+- A direct `markdown -> html` rendering path
+
+## Current Scope
+
+The current implementation focuses on a solid core Markdown subset instead of full CommonMark compatibility.
+
+Supported today:
+
+- headings
+- paragraphs
+- strong emphasis
+- emphasis
+- inline code
+- links
+- fenced code blocks
+- blockquotes
+- ordered and unordered lists
+- horizontal rules
+
+## Read Next
+
+- [Syntax Reference](syntax.md)
diff --git a/docs/alienmark/docs/index.md b/docs/alienmark/docs/index.md
deleted file mode 100644
index 000ea345..00000000
--- a/docs/alienmark/docs/index.md
+++ /dev/null
@@ -1,17 +0,0 @@
-# Welcome to MkDocs
-
-For full documentation visit [mkdocs.org](https://www.mkdocs.org).
-
-## Commands
-
-* `mkdocs new [dir-name]` - Create a new project.
-* `mkdocs serve` - Start the live-reloading docs server.
-* `mkdocs build` - Build the documentation site.
-* `mkdocs -h` - Print help message and exit.
-
-## Project layout
-
- mkdocs.yml # The configuration file.
- docs/
- index.md # The documentation homepage.
- ... # Other markdown pages, images and other files.
diff --git a/docs/alienmark/docs/index.zh.md b/docs/alienmark/docs/index.zh.md
new file mode 100644
index 00000000..b4aaad50
--- /dev/null
+++ b/docs/alienmark/docs/index.zh.md
@@ -0,0 +1,35 @@
+# AlienMark
+
+AlienMark 是 AlienCommons 当前使用的 Markdown 引擎。
+
+这份文档目前描述的是 `packages/alienmark` 包中已经实现的语法能力。
+
+## AlienMark 目前能做什么
+
+AlienMark 当前提供:
+
+- Markdown 解析
+- AST 生成
+- HTML 渲染
+- 直接的 `markdown -> html` 渲染流程
+
+## 当前范围
+
+当前实现的目标是先做好一套稳定的 Markdown 核心子集,而不是一次性完整兼容 CommonMark 的所有细节。
+
+目前已经支持:
+
+- 标题
+- 段落
+- 粗体
+- 斜体
+- 行内代码
+- 链接
+- 围栏代码块
+- 引用块
+- 有序列表和无序列表
+- 分隔线
+
+## 继续阅读
+
+- [语法参考](syntax.md)
diff --git a/docs/alienmark/docs/syntax.en.md b/docs/alienmark/docs/syntax.en.md
new file mode 100644
index 00000000..e0cc01f8
--- /dev/null
+++ b/docs/alienmark/docs/syntax.en.md
@@ -0,0 +1,186 @@
+# Syntax Reference
+
+This page documents the Markdown syntax that AlienMark currently supports.
+
+## Headings
+
+AlienMark supports ATX headings from level 1 to level 6.
+
+Input:
+
+```md
+# Heading 1
+## Heading 2
+### Heading 3
+```
+
+Output:
+
+```html
+Heading 1
Heading 2
Heading 3
+```
+
+## Paragraphs
+
+Non-empty lines that do not match a block syntax are grouped into paragraphs. Consecutive lines are joined with spaces.
+
+Input:
+
+```md
+This is the first line
+and this is the second line.
+```
+
+Output:
+
+```html
+This is the first line and this is the second line.
+```
+
+## Strong Emphasis
+
+Double asterisks create strong emphasis.
+
+Input:
+
+```md
+Use **bold** text.
+```
+
+Output:
+
+```html
+Use bold text.
+```
+
+## Emphasis
+
+Single `*` and `_` create emphasis.
+
+Input:
+
+```md
+Use *italic* and _also italic_.
+```
+
+Output:
+
+```html
+Use italic and also italic.
+```
+
+## Inline Code
+
+Backticks create inline code.
+
+Input:
+
+```md
+Use `const answer = 42`.
+```
+
+Output:
+
+```html
+Use const answer = 42.
+```
+
+## Links
+
+AlienMark supports inline links in Markdown form.
+
+Input:
+
+```md
+[AlienCommons](https://example.com)
+```
+
+Output:
+
+```html
+AlienCommons
+```
+
+## Fenced Code Blocks
+
+Triple backticks create fenced code blocks. A language name after the opening fence is emitted as a `language-*` class on the `code` tag.
+
+Input:
+
+````md
+```ts
+const answer = 42;
+```
+````
+
+Output:
+
+```html
+const answer = 42;
+```
+
+## Blockquotes
+
+Lines starting with `>` are parsed as blockquotes.
+
+Input:
+
+```md
+> This is quoted.
+```
+
+Output:
+
+```html
+This is quoted.
+```
+
+## Lists
+
+AlienMark currently supports single-level ordered and unordered lists.
+
+### Unordered Lists
+
+Input:
+
+```md
+- first
+- second
+```
+
+Output:
+
+```html
+
+```
+
+### Ordered Lists
+
+Input:
+
+```md
+1. first
+2. second
+```
+
+Output:
+
+```html
+first
second
+```
+
+## Horizontal Rules
+
+AlienMark supports `---`, `***`, and `___` as horizontal rules.
+
+Input:
+
+```md
+---
+```
+
+Output:
+
+```html
+
+```
diff --git a/docs/alienmark/docs/syntax.zh.md b/docs/alienmark/docs/syntax.zh.md
new file mode 100644
index 00000000..39f30850
--- /dev/null
+++ b/docs/alienmark/docs/syntax.zh.md
@@ -0,0 +1,186 @@
+# 语法参考
+
+本页记录了 AlienMark 当前已经支持的 Markdown 语法。
+
+## 标题
+
+AlienMark 支持 1 到 6 级 ATX 标题。
+
+输入:
+
+```md
+# 一级标题
+## 二级标题
+### 三级标题
+```
+
+输出:
+
+```html
+一级标题
二级标题
三级标题
+```
+
+## 段落
+
+没有命中其他块级语法的非空行会被归并为段落。连续多行会用空格连接。
+
+输入:
+
+```md
+这是第一行
+这是第二行。
+```
+
+输出:
+
+```html
+这是第一行 这是第二行。
+```
+
+## 粗体
+
+双星号用于表示粗体。
+
+输入:
+
+```md
+使用 **粗体** 文本。
+```
+
+输出:
+
+```html
+使用 粗体 文本。
+```
+
+## 斜体
+
+单个 `*` 或 `_` 用于表示斜体。
+
+输入:
+
+```md
+使用 *斜体* 和 _也是斜体_。
+```
+
+输出:
+
+```html
+使用 斜体 和 也是斜体。
+```
+
+## 行内代码
+
+反引号用于表示行内代码。
+
+输入:
+
+```md
+使用 `const answer = 42`。
+```
+
+输出:
+
+```html
+使用 const answer = 42。
+```
+
+## 链接
+
+AlienMark 当前支持 Markdown 的内联链接写法。
+
+输入:
+
+```md
+[AlienCommons](https://example.com)
+```
+
+输出:
+
+```html
+AlienCommons
+```
+
+## 围栏代码块
+
+三个反引号用于表示围栏代码块。若在起始围栏后写语言名,会在 `code` 标签上输出 `language-*` 类名。
+
+输入:
+
+````md
+```ts
+const answer = 42;
+```
+````
+
+输出:
+
+```html
+const answer = 42;
+```
+
+## 引用块
+
+以 `>` 开头的行会被解析为引用块。
+
+输入:
+
+```md
+> 这是引用内容。
+```
+
+输出:
+
+```html
+这是引用内容。
+```
+
+## 列表
+
+AlienMark 当前支持单层的有序列表和无序列表。
+
+### 无序列表
+
+输入:
+
+```md
+- 第一项
+- 第二项
+```
+
+输出:
+
+```html
+
+```
+
+### 有序列表
+
+输入:
+
+```md
+1. 第一项
+2. 第二项
+```
+
+输出:
+
+```html
+第一项
第二项
+```
+
+## 分隔线
+
+AlienMark 当前支持 `---`、`***` 和 `___` 作为分隔线。
+
+输入:
+
+```md
+---
+```
+
+输出:
+
+```html
+
+```
diff --git a/docs/alienmark/mkdocs.yml b/docs/alienmark/mkdocs.yml
index c97182f5..ca5a8349 100644
--- a/docs/alienmark/mkdocs.yml
+++ b/docs/alienmark/mkdocs.yml
@@ -1 +1,28 @@
-site_name: My Docs
+site_name: AlienMark Docs
+
+nav:
+ - Home: index.md
+ - Syntax: syntax.md
+
+theme:
+ name: material
+ language: en
+
+plugins:
+ - search
+ - i18n:
+ docs_structure: suffix
+ fallback_to_default: true
+ reconfigure_material: true
+ reconfigure_search: true
+ languages:
+ - locale: en
+ name: English
+ default: true
+ build: true
+ - locale: zh
+ name: 中文
+ build: true
+ nav_translations:
+ Home: 首页
+ Syntax: 语法
From 4f66d6f52fc59d66ad24e1c35438d2957aef4a42 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 18 Apr 2026 17:11:29 +1000
Subject: [PATCH 22/51] chore: update docs-validate workflow
---
.github/workflows/docs-validate.yml | 30 ++++++++++++++++++++++++++++-
1 file changed, 29 insertions(+), 1 deletion(-)
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index ea0ab9dd..c6851951 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -4,6 +4,7 @@ on:
pull_request:
paths:
- "docs/contributors/**"
+ - "docs/alienmark/**"
- ".github/workflows/docs-validate.yml"
- ".github/workflows/docs-deploy.yml"
@@ -11,7 +12,7 @@ permissions:
contents: read
jobs:
- validate:
+ validate-contributors:
runs-on: ubuntu-latest
defaults:
@@ -37,3 +38,30 @@ jobs:
- name: Build and validate MkDocs site
run: uv run mkdocs build --strict
+
+ validate-alienmark:
+ runs-on: ubuntu-latest
+
+ defaults:
+ run:
+ working-directory: docs/alienmark
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.14"
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
+
+ - name: Install documentation dependencies
+ run: uv sync --locked
+
+ - name: Build and validate MkDocs site
+ run: uv run mkdocs build --strict
From d107c4dc6275095cb0b71f7acbecc42b8d21dce4 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 18 Apr 2026 17:21:48 +1000
Subject: [PATCH 23/51] chore: update docs workflow files
---
.../workflows/{docs-deploy.yml => contributors-deploy.yml} | 6 ++----
.github/workflows/docs-validate.yml | 1 -
2 files changed, 2 insertions(+), 5 deletions(-)
rename .github/workflows/{docs-deploy.yml => contributors-deploy.yml} (89%)
diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/contributors-deploy.yml
similarity index 89%
rename from .github/workflows/docs-deploy.yml
rename to .github/workflows/contributors-deploy.yml
index b8d5745e..a46cc719 100644
--- a/.github/workflows/docs-deploy.yml
+++ b/.github/workflows/contributors-deploy.yml
@@ -1,4 +1,4 @@
-name: Deploy Docs to GitHub Pages
+name: Deploy Contributor Docs to GitHub Pages
on:
push:
@@ -6,9 +6,7 @@ on:
- main
paths:
- "docs/contributors/**"
- - ".github/workflows/docs-validate.yml"
- - ".github/workflows/docs-deploy.yml"
- workflow_dispatch:
+ - ".github/workflows/contributors-deploy.yml"
permissions:
contents: read
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index c6851951..28c2118f 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -6,7 +6,6 @@ on:
- "docs/contributors/**"
- "docs/alienmark/**"
- ".github/workflows/docs-validate.yml"
- - ".github/workflows/docs-deploy.yml"
permissions:
contents: read
From 768cf6585fd0e8e42a982ce5073d7bb538aac7c1 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Mon, 20 Apr 2026 13:12:46 +1000
Subject: [PATCH 24/51] chore: add workflow to deploy alienmark docs to s3
---
.github/workflows/alienmark-deploy.yml | 51 ++++++++++++++++++++++
.github/workflows/docs-validate.yml | 58 ++++++++++++++++++++++++++
2 files changed, 109 insertions(+)
create mode 100644 .github/workflows/alienmark-deploy.yml
diff --git a/.github/workflows/alienmark-deploy.yml b/.github/workflows/alienmark-deploy.yml
new file mode 100644
index 00000000..6f946ca3
--- /dev/null
+++ b/.github/workflows/alienmark-deploy.yml
@@ -0,0 +1,51 @@
+name: Deploy Alienmark Docs to S3
+
+on:
+ push:
+ branches:
+ - main
+ paths:
+ - "docs/alienmark/**"
+ - ".github/workflows/alienmark-deploy.yml"
+ workflow_dispatch:
+
+permissions:
+ contents: read
+ id-token: write
+
+jobs:
+ deploy:
+ runs-on: ubuntu-latest
+
+ defaults:
+ run:
+ working-directory: docs/alienmark
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.14"
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
+
+ - name: Install docs dependencies
+ run: uv sync --locked
+
+ - name: Build MkDocs site
+ run: uv run mkdocs build --strict
+
+ - name: Configure AWS credentials
+ uses: aws-actions/configure-aws-credentials@v5
+ with:
+ aws-region: ${{ vars.AWS_REGION }}
+ role-to-assume: ${{ vars.AWS_ROLE_TO_ASSUME }}
+
+ - name: Deploy site to S3
+ run: aws s3 sync site/ s3://${{ vars.AWS_S3_BUCKET }}/ --delete
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index 28c2118f..13fedb88 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -5,14 +5,41 @@ on:
paths:
- "docs/contributors/**"
- "docs/alienmark/**"
+ - "docs/users/**"
- ".github/workflows/docs-validate.yml"
permissions:
contents: read
+ pull-requests: read
jobs:
+ detect-changes:
+ runs-on: ubuntu-latest
+ outputs:
+ contributors: ${{ steps.filter.outputs.contributors }}
+ alienmark: ${{ steps.filter.outputs.alienmark }}
+ users: ${{ steps.filter.outputs.users }}
+ workflow: ${{ steps.filter.outputs.workflow }}
+
+ steps:
+ - name: Detect changed docs projects
+ id: filter
+ uses: dorny/paths-filter@v3
+ with:
+ filters: |
+ contributors:
+ - 'docs/contributors/**'
+ alienmark:
+ - 'docs/alienmark/**'
+ users:
+ - 'docs/users/**'
+ workflow:
+ - '.github/workflows/docs-validate.yml'
+
validate-contributors:
runs-on: ubuntu-latest
+ needs: detect-changes
+ if: needs.detect-changes.outputs.contributors == 'true' || needs.detect-changes.outputs.workflow == 'true'
defaults:
run:
@@ -40,6 +67,8 @@ jobs:
validate-alienmark:
runs-on: ubuntu-latest
+ needs: detect-changes
+ if: needs.detect-changes.outputs.alienmark == 'true' || needs.detect-changes.outputs.workflow == 'true'
defaults:
run:
@@ -64,3 +93,32 @@ jobs:
- name: Build and validate MkDocs site
run: uv run mkdocs build --strict
+
+ validate-users:
+ runs-on: ubuntu-latest
+ needs: detect-changes
+ if: needs.detect-changes.outputs.users == 'true' || needs.detect-changes.outputs.workflow == 'true'
+
+ defaults:
+ run:
+ working-directory: docs/users
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Python
+ uses: actions/setup-python@v5
+ with:
+ python-version: "3.14"
+
+ - name: Install uv
+ uses: astral-sh/setup-uv@v7
+ with:
+ enable-cache: true
+
+ - name: Install documentation dependencies
+ run: uv sync --locked
+
+ - name: Build and validate MkDocs site
+ run: uv run mkdocs build --strict
From 3cd4f1a5520f605b42131fc26a267a32016ee516 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Mon, 20 Apr 2026 13:16:00 +1000
Subject: [PATCH 25/51] chore: update alienmark deploy workflow
---
.github/workflows/alienmark-deploy.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/alienmark-deploy.yml b/.github/workflows/alienmark-deploy.yml
index 6f946ca3..71afbd81 100644
--- a/.github/workflows/alienmark-deploy.yml
+++ b/.github/workflows/alienmark-deploy.yml
@@ -7,7 +7,6 @@ on:
paths:
- "docs/alienmark/**"
- ".github/workflows/alienmark-deploy.yml"
- workflow_dispatch:
permissions:
contents: read
From 1f001c1b41fa6038a8916ca180e4c511712aa5d0 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Wed, 22 Apr 2026 14:54:03 +1000
Subject: [PATCH 26/51] fix: fixes a few file paths
---
.github/labeler.yml | 4 ++--
README.md | 2 +-
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 7a6e4867..04feb24e 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -12,11 +12,11 @@ SECURITY:
backend:
- changed-files:
- - any-glob-to-any-file: 'app/backend/**'
+ - any-glob-to-any-file: 'apps/backend/**'
frontend:
- changed-files:
- - any-glob-to-any-file: 'app/frontend/**'
+ - any-glob-to-any-file: 'apps/frontend/**'
docs:
- changed-files:
diff --git a/README.md b/README.md
index 155147ac..57135438 100644
--- a/README.md
+++ b/README.md
@@ -21,7 +21,7 @@ Deployment: **Docker**
[](https://skillicons.dev)
## Project Structure
-`app/`: Applications
+`apps/`: Applications
- **Django** backend
- **Vue** frontend
From 7cfd9b36a00e693826e9a74eb7d82a2738f14e4a Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Wed, 22 Apr 2026 14:55:22 +1000
Subject: [PATCH 27/51] fix: fix labeler name in labeler.yml
---
.github/labeler.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/.github/labeler.yml b/.github/labeler.yml
index 04feb24e..ff3421d1 100644
--- a/.github/labeler.yml
+++ b/.github/labeler.yml
@@ -33,7 +33,7 @@ o11y:
feature:
- head-branch: ['^feature', 'feature']
-feature:
+refactor:
- head-branch: ['^refactor', 'refactor']
release:
From 65ff2072b9ac4aa05530ac2950f2cbb33424a81f Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 25 Apr 2026 13:19:45 +1000
Subject: [PATCH 28/51] refactor: update env management and dev workflow
---
.gitignore | 13 ++-----
Makefile | 53 +++++++++++++++++++++-------
apps/backend/Makefile | 17 ---------
apps/backend/backend/asgi.py | 6 ++--
apps/backend/backend/wsgi.py | 6 ++--
apps/backend/env/.env.dev_lite | 33 -----------------
apps/backend/env/.env.test | 1 -
apps/backend/env_bootstrap.py | 34 ------------------
apps/backend/manage.py | 6 ++--
{apps/backend/env => env}/.env.dev | 35 +++++++++---------
env/.env.test | 1 +
infra/compose/docker-compose.dev.yml | 22 ++++++------
infra/compose/docker-compose.pro.yml | 22 ++++++------
infra/compose/docker-compose.stg.yml | 22 ++++++------
infra/env/.env.dev | 5 ---
15 files changed, 99 insertions(+), 177 deletions(-)
delete mode 100644 apps/backend/Makefile
delete mode 100644 apps/backend/env/.env.dev_lite
delete mode 100644 apps/backend/env/.env.test
delete mode 100644 apps/backend/env_bootstrap.py
rename {apps/backend/env => env}/.env.dev (93%)
create mode 100644 env/.env.test
delete mode 100644 infra/env/.env.dev
diff --git a/.gitignore b/.gitignore
index 28047fb3..9d018783 100644
--- a/.gitignore
+++ b/.gitignore
@@ -64,17 +64,8 @@ __screenshots__/
docs/*/site/
# Environment files
-infra/env/.env.pro
-infra/env/.env.stg
-
-apps/backend/env/.env.pro
-apps/backend/env/.env.stg
-
-apps/frontend/.env
-apps/frontend/.env.*
-apps/frontend/.env.local
-apps/frontend/.env.*.local
-!apps/frontend/.env.example
+env/.env.pro
+env/.env.stg
# Observability runtime data
o11y/grafana/data/
diff --git a/Makefile b/Makefile
index 9151a3b2..76215767 100644
--- a/Makefile
+++ b/Makefile
@@ -4,26 +4,55 @@ COMPOSE_STG = -f infra/compose/docker-compose.stg.yml
COMPOSE_PRO = -f infra/compose/docker-compose.pro.yml
COMPOSE_PROXY = -f infra/compose/docker-compose.proxy.yml
+DEV_COMPOSE = docker compose $(COMPOSE_BASE) $(COMPOSE_DEV)
+DEV_MANAGE = $(DEV_COMPOSE) run --rm backend-api python manage.py
+DEV_MANAGE_NO_DEPS = $(DEV_COMPOSE) run --rm --no-deps backend-api python manage.py
+DEV_MANAGE_TEST = $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=backend.settings.test backend-api python manage.py
+
DB = postgres redis
OBSERVE = alloy loki grafana
APP = backend-api backend-task-scheduler backend-task-worker frontend
-# DEV
+# DEVELOPMENT
dev-db-up:
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) up $(DB)
+ $(DEV_COMPOSE) up $(DB)
dev-observe-up:
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) up $(OBSERVE)
+ $(DEV_COMPOSE) up $(OBSERVE)
dev-up:
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) up -d $(DB)
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) run --rm backend-init
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) up -d $(OBSERVE)
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) up --build $(APP)
+ $(DEV_COMPOSE) up -d $(DB)
+ $(DEV_COMPOSE) run --rm backend-init
+ $(DEV_COMPOSE) up -d $(OBSERVE)
+ $(DEV_COMPOSE) up --build $(APP)
dev-down:
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) down
+ $(DEV_COMPOSE) down
dev-down-v:
- docker compose $(COMPOSE_BASE) $(COMPOSE_DEV) down -v
+ $(DEV_COMPOSE) down -v
+dev-backend-bash:
+ $(DEV_COMPOSE) run --rm backend-api bash
+dev-backend-shell:
+ $(DEV_MANAGE) shell
+dev-backend-runserver:
+ $(DEV_COMPOSE) run --rm --service-ports backend-api python manage.py runserver 0.0.0.0:8000
+dev-backend-makemigrations:
+ $(DEV_MANAGE_NO_DEPS) makemigrations
+dev-backend-migrate:
+ $(DEV_MANAGE) migrate
+dev-backend-createsuperuser:
+ $(DEV_MANAGE) createsuperuser
+dev-backend-test:
+ $(DEV_MANAGE_TEST) test
+dev-backend-check:
+ $(DEV_MANAGE_NO_DEPS) check
+dev-backend-apidoc:
+ $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=backend.settings.test backend-api python manage.py spectacular --file openapi.yaml --validate
+dev-backend-init-tasks:
+ $(DEV_MANAGE) init_tasks
+dev-backend-runscheduler:
+ $(DEV_MANAGE) runscheduler
+dev-backend-runrqworker:
+ $(DEV_MANAGE) rqworker default email maintenance
-# STG
+# STAGING
stg-up:
docker compose $(COMPOSE_BASE) $(COMPOSE_STG) up -d $(DB)
docker compose $(COMPOSE_BASE) $(COMPOSE_STG) run --rm backend-init
@@ -40,7 +69,7 @@ stg-backend-api-log:
stg-frontend-log:
docker compose $(COMPOSE_BASE) $(COMPOSE_STG) logs frontend
-# PRO
+# PRODUCTION
pro-up:
docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) up -d $(DB)
docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) run --rm backend-init
@@ -61,4 +90,4 @@ proxy-up:
proxy-down:
docker compose $(COMPOSE_PROXY) down
proxy-log:
- docker compose $(COMPOSE_PROXY) logs traefik
\ No newline at end of file
+ docker compose $(COMPOSE_PROXY) logs traefik
diff --git a/apps/backend/Makefile b/apps/backend/Makefile
deleted file mode 100644
index 35c19d4a..00000000
--- a/apps/backend/Makefile
+++ /dev/null
@@ -1,17 +0,0 @@
-runserver:
- DJANGO_ENV=dev_lite python manage.py runserver
-
-init_tasks:
- DJANGO_ENV=dev_lite python manage.py init_tasks
-
-runscheduler:
- DJANGO_ENV=dev_lite python manage.py runscheduler
-
-runworker:
- DJANGO_ENV=dev_lite python manage.py runworker
-
-runrqworker:
- DJANGO_ENV=dev_lite python manage.py rqworker default email maintenance
-
-apidoc:
- python manage.py spectacular --file openapi.yaml
\ No newline at end of file
diff --git a/apps/backend/backend/asgi.py b/apps/backend/backend/asgi.py
index 73773e4d..3dff40bb 100644
--- a/apps/backend/backend/asgi.py
+++ b/apps/backend/backend/asgi.py
@@ -2,10 +2,10 @@
ASGI config for backend project.
It exposes the ASGI callable as a module-level variable named ``application``.
"""
-from django.core.asgi import get_asgi_application
+import os
-from env_bootstrap import load_env
+from django.core.asgi import get_asgi_application
-load_env()
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings.dev")
application = get_asgi_application()
diff --git a/apps/backend/backend/wsgi.py b/apps/backend/backend/wsgi.py
index 1b765128..6dd734c8 100644
--- a/apps/backend/backend/wsgi.py
+++ b/apps/backend/backend/wsgi.py
@@ -6,10 +6,10 @@
For more information on this file, see
https://docs.djangoproject.com/en/5.2/howto/deployment/wsgi/
"""
-from django.core.wsgi import get_wsgi_application
+import os
-from env_bootstrap import load_env
+from django.core.wsgi import get_wsgi_application
-load_env()
+os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings.dev")
application = get_wsgi_application()
diff --git a/apps/backend/env/.env.dev_lite b/apps/backend/env/.env.dev_lite
deleted file mode 100644
index 9592b29b..00000000
--- a/apps/backend/env/.env.dev_lite
+++ /dev/null
@@ -1,33 +0,0 @@
-DJANGO_SETTINGS_MODULE=backend.settings.dev
-
-SECRET_KEY=qix1@7!97az53uv4$-9#72%xir4oe&rf1d=fdg-%fb+^69m80v
-
-YOUTUBE_API_KEY=AIzaSyCgEjoZtPN_GdVdpg6Iqd52c1QnrtdlvB4
-YOUTUBE_CHANNEL_HANDLE=@lastranslation
-YOUTUBE_CHANNEL_ID=UCqFzvR6Atp0qBXiEzL3Bbvw
-
-POSTGRES_DB=postgres_dev
-POSTGRES_USER=backend_dev_root
-POSTGRES_PASSWORD=sx4L+V_}!H^1Xptnn-C_NBLge^itL-nuD*m3j@_QR7}he#.#ML^asibM5ij7v!og4?eGii6A!~D81qRtqsj#ymwj2B7993=@bBy%
-POSTGRES_HOST=127.0.0.1
-
-REDIS_PASSWORD=xbJfaT8ZEW8cc6RodwUUdD9tVvzV0BHy4oWKpxgDgBRVVZACsnXAYFxM5Q1Ez6XmBa2cvucpEwnHoLqacZMPdCUeGCuyH88GZ3vz
-REDIS_URL=redis://127.0.0.1:6379
-REDIS_KEY_PREFIX=dev
-
-ACCESS_TOKEN_LIFETIME=15
-REFRESH_TOKEN_LIFETIME=30
-
-SITE_URL=http://localhost:8000
-
-ALLOWED_HOSTS=localhost,127.0.0.1,backend
-CORS_ALLOWED_ORIGINS=http://localhost:8080
-
-DEFAULT_FROM_EMAIL='AlienCommons Dev '
-SERVER_EMAIL=server@localhost
-EMAIL_HOST=localhost
-EMAIL_PORT=1025
-EMAIL_HOST_USER=
-EMAIL_HOST_PASSWORD=
-EMAIL_USE_TLS=False
-EMAIL_USE_SSL=False
\ No newline at end of file
diff --git a/apps/backend/env/.env.test b/apps/backend/env/.env.test
deleted file mode 100644
index eda27186..00000000
--- a/apps/backend/env/.env.test
+++ /dev/null
@@ -1 +0,0 @@
-DJANGO_SETTINGS_MODULE=backend.settings.test
\ No newline at end of file
diff --git a/apps/backend/env_bootstrap.py b/apps/backend/env_bootstrap.py
deleted file mode 100644
index d96e29cc..00000000
--- a/apps/backend/env_bootstrap.py
+++ /dev/null
@@ -1,34 +0,0 @@
-import os
-from pathlib import Path
-
-from environs import Env
-from dotenv import load_dotenv
-
-BASE_DIR = Path(__file__).resolve().parent
-
-ENV_FILE_MAPPING = {
- "dev_lite": BASE_DIR / "env/.env.dev_lite",
- "dev": BASE_DIR / "env/.env.dev",
- "stg": BASE_DIR / "env/.env.stg",
- "pro": BASE_DIR / "env/.env.pro",
- "test": BASE_DIR / "env/.env.test",
-}
-
-
-def load_env() -> Env:
- env_name = os.getenv("DJANGO_ENV", "dev")
-
- if env_name not in list(ENV_FILE_MAPPING.keys()):
- raise RuntimeError(f"Invalid env name: {env_name}")
-
- env_file = ENV_FILE_MAPPING[env_name]
-
- if not env_file.exists():
- raise RuntimeError(f"Env file not found: {env_file}")
-
- load_dotenv(dotenv_path=env_file)
-
- env = Env()
-
- os.environ.setdefault("DJANGO_SETTINGS_MODULE", env.str("DJANGO_SETTINGS_MODULE"))
- return env
diff --git a/apps/backend/manage.py b/apps/backend/manage.py
index b3816441..58cd5b40 100755
--- a/apps/backend/manage.py
+++ b/apps/backend/manage.py
@@ -1,12 +1,10 @@
+import os
import sys
-from env_bootstrap import load_env
-
-load_env()
-
def main():
"""Run administrative tasks."""
+ os.environ.setdefault("DJANGO_SETTINGS_MODULE", "backend.settings.dev")
try:
from django.core.management import execute_from_command_line
except ImportError as exc:
diff --git a/apps/backend/env/.env.dev b/env/.env.dev
similarity index 93%
rename from apps/backend/env/.env.dev
rename to env/.env.dev
index da1777cc..80868c32 100644
--- a/apps/backend/env/.env.dev
+++ b/env/.env.dev
@@ -1,33 +1,32 @@
+# Django
DJANGO_SETTINGS_MODULE=backend.settings.dev
-
SECRET_KEY=qix1@7!97az53uv4$-9#72%xir4oe&rf1d=fdg-%fb+^69m80v
+SITE_URL=http://localhost:8000
+ALLOWED_HOSTS=localhost,127.0.0.1,backend
+CORS_ALLOWED_ORIGINS=http://localhost:8080
+# Email
+DEFAULT_FROM_EMAIL='AlienCommons Dev '
+SERVER_EMAIL=server@localhost
+EMAIL_HOST=localhost
+EMAIL_PORT=1025
+EMAIL_HOST_USER=
+EMAIL_HOST_PASSWORD=
+EMAIL_USE_TLS=False
+EMAIL_USE_SSL=False
+
+# Third-Party API
YOUTUBE_API_KEY=AIzaSyCgEjoZtPN_GdVdpg6Iqd52c1QnrtdlvB4
YOUTUBE_CHANNEL_HANDLE=@lastranslation
YOUTUBE_CHANNEL_ID=UCqFzvR6Atp0qBXiEzL3Bbvw
+# PostgreSQL
POSTGRES_DB=postgres_dev
POSTGRES_USER=backend_dev_root
POSTGRES_PASSWORD=sx4L+V_}!H^1Xptnn-C_NBLge^itL-nuD*m3j@_QR7}he#.#ML^asibM5ij7v!og4?eGii6A!~D81qRtqsj#ymwj2B7993=@bBy%
POSTGRES_HOST=postgres
+# Redis
REDIS_PASSWORD=xbJfaT8ZEW8cc6RodwUUdD9tVvzV0BHy4oWKpxgDgBRVVZACsnXAYFxM5Q1Ez6XmBa2cvucpEwnHoLqacZMPdCUeGCuyH88GZ3vz
REDIS_URL=redis://:xbJfaT8ZEW8cc6RodwUUdD9tVvzV0BHy4oWKpxgDgBRVVZACsnXAYFxM5Q1Ez6XmBa2cvucpEwnHoLqacZMPdCUeGCuyH88GZ3vz@redis:6379
REDIS_KEY_PREFIX=dev
-
-ACCESS_TOKEN_LIFETIME=15
-REFRESH_TOKEN_LIFETIME=30
-
-SITE_URL=http://localhost:8000
-
-ALLOWED_HOSTS=localhost,127.0.0.1,backend
-CORS_ALLOWED_ORIGINS=http://localhost:8080
-
-DEFAULT_FROM_EMAIL='AlienCommons Dev '
-SERVER_EMAIL=server@localhost
-EMAIL_HOST=localhost
-EMAIL_PORT=1025
-EMAIL_HOST_USER=
-EMAIL_HOST_PASSWORD=
-EMAIL_USE_TLS=False
-EMAIL_USE_SSL=False
\ No newline at end of file
diff --git a/env/.env.test b/env/.env.test
new file mode 100644
index 00000000..b7446ece
--- /dev/null
+++ b/env/.env.test
@@ -0,0 +1 @@
+DJANGO_SETTINGS_MODULE=backend.settings.test
diff --git a/infra/compose/docker-compose.dev.yml b/infra/compose/docker-compose.dev.yml
index 97648c65..cff81cf7 100644
--- a/infra/compose/docker-compose.dev.yml
+++ b/infra/compose/docker-compose.dev.yml
@@ -1,31 +1,32 @@
+x-stack-env: &stack-env
+ env_file:
+ - ../../env/.env.dev
+
name: alien-commons-dev
services:
postgres:
- env_file:
- - ../env/.env.dev
+ <<: *stack-env
volumes:
- postgres_data_dev:/var/lib/postgresql
ports:
- "5432:5432"
redis:
+ <<: *stack-env
command: >
sh -c 'redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD"'
- env_file:
- - ../env/.env.dev
ports:
- "6379:6379"
backend-init:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
working_dir: /code
command: >
sh -c "python manage.py migrate && python manage.py init_tasks"
- environment:
- DJANGO_ENV: dev
depends_on:
- postgres
- redis
@@ -33,6 +34,7 @@ services:
- ../../apps/backend:/code
backend-api:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -40,14 +42,13 @@ services:
restart: unless-stopped
command: >
sh -c "gunicorn backend.wsgi:application --bind 0.0.0.0:8000"
- environment:
- DJANGO_ENV: dev
volumes:
- ../../apps/backend:/code
ports:
- "8000:8000"
backend-task-scheduler:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -55,8 +56,6 @@ services:
restart: unless-stopped
command: >
sh -c "python manage.py runscheduler"
- environment:
- DJANGO_ENV: dev
depends_on:
- redis
- postgres
@@ -64,6 +63,7 @@ services:
- ../../apps/backend:/code
backend-task-worker:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -71,8 +71,6 @@ services:
restart: unless-stopped
command: >
sh -c "python manage.py rqworker default email maintenance"
- environment:
- DJANGO_ENV: dev
depends_on:
- redis
- postgres
diff --git a/infra/compose/docker-compose.pro.yml b/infra/compose/docker-compose.pro.yml
index 8506924f..078afc11 100644
--- a/infra/compose/docker-compose.pro.yml
+++ b/infra/compose/docker-compose.pro.yml
@@ -1,32 +1,34 @@
+x-stack-env: &stack-env
+ env_file:
+ - ../../env/.env.pro
+
name: alien-commons-pro
services:
postgres:
- env_file:
- - ../env/.env.pro
+ <<: *stack-env
volumes:
- postgres_data_pro:/var/lib/postgresql
redis:
+ <<: *stack-env
command: >
sh -c 'redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD"'
- env_file:
- - ../env/.env.pro
backend-init:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
working_dir: /code
command: >
sh -c "python manage.py migrate && python manage.py init_tasks"
- environment:
- DJANGO_ENV: pro
depends_on:
- postgres
- redis
backend-api:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -34,8 +36,6 @@ services:
restart: unless-stopped
command: >
sh -c "gunicorn backend.wsgi:application --bind 0.0.0.0:8000"
- environment:
- - DJANGO_ENV: pro
labels:
- "traefik.enable=true"
- "traefik.http.routers.backend-production.rule=Host(`api.aliencommons.com`)"
@@ -47,6 +47,7 @@ services:
- /srv/alien-commons/pro/static:/code/staticfiles
backend-task-scheduler:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -54,10 +55,9 @@ services:
restart: unless-stopped
command: >
sh -c "python manage.py runscheduler"
- environment:
- DJANGO_ENV: pro
backend-task-worker:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -65,8 +65,6 @@ services:
restart: unless-stopped
command: >
sh -c "python manage.py rqworker default email maintenance"
- environment:
- DJANGO_ENV: pro
alloy:
image: grafana/alloy:latest
diff --git a/infra/compose/docker-compose.stg.yml b/infra/compose/docker-compose.stg.yml
index 095cc0af..05b22a35 100644
--- a/infra/compose/docker-compose.stg.yml
+++ b/infra/compose/docker-compose.stg.yml
@@ -1,32 +1,34 @@
+x-stack-env: &stack-env
+ env_file:
+ - ../../env/.env.stg
+
name: alien-commons-stg
services:
postgres:
- env_file:
- - ../env/.env.stg
+ <<: *stack-env
volumes:
- postgres_data_stg:/var/lib/postgresql
redis:
+ <<: *stack-env
command: >
sh -c 'redis-server --appendonly yes --requirepass "$$REDIS_PASSWORD"'
- env_file:
- - ../env/.env.stg
backend-init:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
working_dir: /code
command: >
sh -c "python manage.py migrate && python manage.py init_tasks"
- environment:
- DJANGO_ENV: stg
depends_on:
- postgres
- redis
backend-api:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -34,8 +36,6 @@ services:
restart: unless-stopped
command: >
sh -c "gunicorn backend.wsgi:application --bind 0.0.0.0:8000"
- environment:
- - DJANGO_ENV: stg
labels:
- "traefik.enable=true"
- "traefik.http.routers.backend-api-stg.rule=Host(`api-stg.aliencommons.com`)"
@@ -47,6 +47,7 @@ services:
- /srv/alien-commons/stg/static:/code/staticfiles
backend-task-scheduler:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -54,10 +55,9 @@ services:
restart: unless-stopped
command: >
sh -c "python manage.py runscheduler"
- environment:
- DJANGO_ENV: stg
backend-task-worker:
+ <<: *stack-env
build:
context: ../../apps/backend
dockerfile: Dockerfile
@@ -65,8 +65,6 @@ services:
restart: unless-stopped
command: >
sh -c "python manage.py rqworker default email maintenance"
- environment:
- DJANGO_ENV: stg
alloy:
image: grafana/alloy:latest
diff --git a/infra/env/.env.dev b/infra/env/.env.dev
deleted file mode 100644
index 21559ff7..00000000
--- a/infra/env/.env.dev
+++ /dev/null
@@ -1,5 +0,0 @@
-POSTGRES_DB=postgres_dev
-POSTGRES_USER=backend_dev_root
-POSTGRES_PASSWORD=sx4L+V_}!H^1Xptnn-C_NBLge^itL-nuD*m3j@_QR7}he#.#ML^asibM5ij7v!og4?eGii6A!~D81qRtqsj#ymwj2B7993=@bBy%
-
-REDIS_PASSWORD=xbJfaT8ZEW8cc6RodwUUdD9tVvzV0BHy4oWKpxgDgBRVVZACsnXAYFxM5Q1Ez6XmBa2cvucpEwnHoLqacZMPdCUeGCuyH88GZ3vz
\ No newline at end of file
From 7b4467c300931918001ada02a1508a0454b3e75e Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 25 Apr 2026 13:40:18 +1000
Subject: [PATCH 29/51] refactor: organize mk files, create root pnpm workspace
---
Makefile | 96 +-
README.md | 31 -
apps/frontend/pnpm-workspace.yaml | 4 -
make/docker.mk | 133 +
make/node.mk | 39 +
package.json | 17 +
pnpm-lock.yaml | 9341 +++++++++++++++++++++++++++++
pnpm-workspace.yaml | 8 +
8 files changed, 9542 insertions(+), 127 deletions(-)
delete mode 100644 apps/frontend/pnpm-workspace.yaml
create mode 100644 make/docker.mk
create mode 100644 make/node.mk
create mode 100644 package.json
create mode 100644 pnpm-lock.yaml
create mode 100644 pnpm-workspace.yaml
diff --git a/Makefile b/Makefile
index 76215767..e0901510 100644
--- a/Makefile
+++ b/Makefile
@@ -1,93 +1,5 @@
-COMPOSE_BASE = -f infra/compose/docker-compose.base.yml
-COMPOSE_DEV = -f infra/compose/docker-compose.dev.yml
-COMPOSE_STG = -f infra/compose/docker-compose.stg.yml
-COMPOSE_PRO = -f infra/compose/docker-compose.pro.yml
-COMPOSE_PROXY = -f infra/compose/docker-compose.proxy.yml
+# Thin root entrypoint for repository tasks.
+# Keep this file at the repo root so plain `make ` works.
-DEV_COMPOSE = docker compose $(COMPOSE_BASE) $(COMPOSE_DEV)
-DEV_MANAGE = $(DEV_COMPOSE) run --rm backend-api python manage.py
-DEV_MANAGE_NO_DEPS = $(DEV_COMPOSE) run --rm --no-deps backend-api python manage.py
-DEV_MANAGE_TEST = $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=backend.settings.test backend-api python manage.py
-
-DB = postgres redis
-OBSERVE = alloy loki grafana
-APP = backend-api backend-task-scheduler backend-task-worker frontend
-
-# DEVELOPMENT
-dev-db-up:
- $(DEV_COMPOSE) up $(DB)
-dev-observe-up:
- $(DEV_COMPOSE) up $(OBSERVE)
-dev-up:
- $(DEV_COMPOSE) up -d $(DB)
- $(DEV_COMPOSE) run --rm backend-init
- $(DEV_COMPOSE) up -d $(OBSERVE)
- $(DEV_COMPOSE) up --build $(APP)
-dev-down:
- $(DEV_COMPOSE) down
-dev-down-v:
- $(DEV_COMPOSE) down -v
-dev-backend-bash:
- $(DEV_COMPOSE) run --rm backend-api bash
-dev-backend-shell:
- $(DEV_MANAGE) shell
-dev-backend-runserver:
- $(DEV_COMPOSE) run --rm --service-ports backend-api python manage.py runserver 0.0.0.0:8000
-dev-backend-makemigrations:
- $(DEV_MANAGE_NO_DEPS) makemigrations
-dev-backend-migrate:
- $(DEV_MANAGE) migrate
-dev-backend-createsuperuser:
- $(DEV_MANAGE) createsuperuser
-dev-backend-test:
- $(DEV_MANAGE_TEST) test
-dev-backend-check:
- $(DEV_MANAGE_NO_DEPS) check
-dev-backend-apidoc:
- $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=backend.settings.test backend-api python manage.py spectacular --file openapi.yaml --validate
-dev-backend-init-tasks:
- $(DEV_MANAGE) init_tasks
-dev-backend-runscheduler:
- $(DEV_MANAGE) runscheduler
-dev-backend-runrqworker:
- $(DEV_MANAGE) rqworker default email maintenance
-
-# STAGING
-stg-up:
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) up -d $(DB)
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) run --rm backend-init
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) up -d $(OBSERVE)
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) up -d --build $(APP)
-stg-down:
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) down
-stg-down-v:
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) down -v
-stg-backend-api-bash:
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) exec backend-api bash
-stg-backend-api-log:
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) logs backend-api
-stg-frontend-log:
- docker compose $(COMPOSE_BASE) $(COMPOSE_STG) logs frontend
-
-# PRODUCTION
-pro-up:
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) up -d $(DB)
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) run --rm backend-init
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) up -d $(OBSERVE)
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) up -d --build $(APP)
-pro-down:
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) down
-pro-backend-api-bash:
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) exec backend-api bash
-pro-backend-api-log:
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) logs backend-api
-pro-frontend-log:
- docker compose $(COMPOSE_BASE) $(COMPOSE_PRO) logs frontend
-
-# PROXY
-proxy-up:
- docker compose $(COMPOSE_PROXY) up -d
-proxy-down:
- docker compose $(COMPOSE_PROXY) down
-proxy-log:
- docker compose $(COMPOSE_PROXY) logs traefik
+include make/docker.mk
+include make/node.mk
diff --git a/README.md b/README.md
index 57135438..4c160978 100644
--- a/README.md
+++ b/README.md
@@ -20,37 +20,6 @@ Deployment: **Docker**
[](https://skillicons.dev)
[](https://skillicons.dev)
-## Project Structure
-`apps/`: Applications
-- **Django** backend
-- **Vue** frontend
-
-`infra/`: Project infrastructure
-- docker compose files
-- environment files
-
-`o11y/`: Observability
-- **grafana** config files
-- **loki** config files
-- **alloy** config files
-
-`docs/`: Documentation
-- contributor documentation
-- user guide
-- AlienMark documentation
-
-`packages/`: Packages
-- AlienMark
-
-`.github/`: GitHub Configs
-- workflows
-- issue templates
-- pull request templates
-- CODEOWNERS file
-- pull request labeler
-
-`Makefile`: Command Shortcuts
-
## Developer Documentation
> [!Important]
diff --git a/apps/frontend/pnpm-workspace.yaml b/apps/frontend/pnpm-workspace.yaml
deleted file mode 100644
index bd9de0bc..00000000
--- a/apps/frontend/pnpm-workspace.yaml
+++ /dev/null
@@ -1,4 +0,0 @@
-allowBuilds:
- '@parcel/watcher': true
- esbuild: true
- unrs-resolver: true
diff --git a/make/docker.mk b/make/docker.mk
new file mode 100644
index 00000000..c14ae6a3
--- /dev/null
+++ b/make/docker.mk
@@ -0,0 +1,133 @@
+COMPOSE_BASE = -f infra/compose/docker-compose.base.yml
+COMPOSE_DEV = -f infra/compose/docker-compose.dev.yml
+COMPOSE_STG = -f infra/compose/docker-compose.stg.yml
+COMPOSE_PRO = -f infra/compose/docker-compose.pro.yml
+COMPOSE_PROXY = -f infra/compose/docker-compose.proxy.yml
+
+DEV_COMPOSE = docker compose $(COMPOSE_BASE) $(COMPOSE_DEV)
+STG_COMPOSE = docker compose $(COMPOSE_BASE) $(COMPOSE_STG)
+PRO_COMPOSE = docker compose $(COMPOSE_BASE) $(COMPOSE_PRO)
+PROXY_COMPOSE = docker compose $(COMPOSE_PROXY)
+
+DEV_MANAGE = $(DEV_COMPOSE) run --rm backend-api python manage.py
+DEV_MANAGE_NO_DEPS = $(DEV_COMPOSE) run --rm --no-deps backend-api python manage.py
+DEV_MANAGE_TEST = $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=backend.settings.test backend-api python manage.py
+
+DB = postgres redis
+OBSERVE = alloy loki grafana
+APP = backend-api backend-task-scheduler backend-task-worker frontend
+
+.PHONY: dev-db-up dev-observe-up dev-up dev-down dev-down-v \
+ dev-backend-bash dev-backend-shell dev-backend-runserver \
+ dev-backend-makemigrations dev-backend-migrate dev-backend-createsuperuser \
+ dev-backend-test dev-backend-check dev-backend-apidoc \
+ dev-backend-init-tasks dev-backend-runscheduler dev-backend-runrqworker \
+ stg-up stg-down stg-down-v stg-backend-api-bash stg-backend-api-log stg-frontend-log \
+ pro-up pro-down pro-backend-api-bash pro-backend-api-log pro-frontend-log \
+ proxy-up proxy-down proxy-log
+
+# DEVELOPMENT
+dev-db-up:
+ $(DEV_COMPOSE) up $(DB)
+
+dev-observe-up:
+ $(DEV_COMPOSE) up $(OBSERVE)
+
+dev-up:
+ $(DEV_COMPOSE) up -d $(DB)
+ $(DEV_COMPOSE) run --rm backend-init
+ $(DEV_COMPOSE) up -d $(OBSERVE)
+ $(DEV_COMPOSE) up --build $(APP)
+
+dev-down:
+ $(DEV_COMPOSE) down
+
+dev-down-v:
+ $(DEV_COMPOSE) down -v
+
+dev-backend-bash:
+ $(DEV_COMPOSE) run --rm backend-api bash
+
+dev-backend-shell:
+ $(DEV_MANAGE) shell
+
+dev-backend-runserver:
+ $(DEV_COMPOSE) run --rm --service-ports backend-api python manage.py runserver 0.0.0.0:8000
+
+dev-backend-makemigrations:
+ $(DEV_MANAGE_NO_DEPS) makemigrations
+
+dev-backend-migrate:
+ $(DEV_MANAGE) migrate
+
+dev-backend-createsuperuser:
+ $(DEV_MANAGE) createsuperuser
+
+dev-backend-test:
+ $(DEV_MANAGE_TEST) test
+
+dev-backend-check:
+ $(DEV_MANAGE_NO_DEPS) check
+
+dev-backend-apidoc:
+ $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=backend.settings.test backend-api python manage.py spectacular --file openapi.yaml --validate
+
+dev-backend-init-tasks:
+ $(DEV_MANAGE) init_tasks
+
+dev-backend-runscheduler:
+ $(DEV_MANAGE) runscheduler
+
+dev-backend-runrqworker:
+ $(DEV_MANAGE) rqworker default email maintenance
+
+# STAGING
+stg-up:
+ $(STG_COMPOSE) up -d $(DB)
+ $(STG_COMPOSE) run --rm backend-init
+ $(STG_COMPOSE) up -d $(OBSERVE)
+ $(STG_COMPOSE) up -d --build $(APP)
+
+stg-down:
+ $(STG_COMPOSE) down
+
+stg-down-v:
+ $(STG_COMPOSE) down -v
+
+stg-backend-api-bash:
+ $(STG_COMPOSE) exec backend-api bash
+
+stg-backend-api-log:
+ $(STG_COMPOSE) logs backend-api
+
+stg-frontend-log:
+ $(STG_COMPOSE) logs frontend
+
+# PRODUCTION
+pro-up:
+ $(PRO_COMPOSE) up -d $(DB)
+ $(PRO_COMPOSE) run --rm backend-init
+ $(PRO_COMPOSE) up -d $(OBSERVE)
+ $(PRO_COMPOSE) up -d --build $(APP)
+
+pro-down:
+ $(PRO_COMPOSE) down
+
+pro-backend-api-bash:
+ $(PRO_COMPOSE) exec backend-api bash
+
+pro-backend-api-log:
+ $(PRO_COMPOSE) logs backend-api
+
+pro-frontend-log:
+ $(PRO_COMPOSE) logs frontend
+
+# PROXY
+proxy-up:
+ $(PROXY_COMPOSE) up -d
+
+proxy-down:
+ $(PROXY_COMPOSE) down
+
+proxy-log:
+ $(PROXY_COMPOSE) logs traefik
diff --git a/make/node.mk b/make/node.mk
new file mode 100644
index 00000000..5c808155
--- /dev/null
+++ b/make/node.mk
@@ -0,0 +1,39 @@
+PNPM = pnpm
+PNPM_FRONTEND = $(PNPM) --filter frontend
+PNPM_ALIENMARK = $(PNPM) --filter alienmark
+
+.PHONY: node-install node-build node-test node-check frontend-dev frontend-build frontend-preview alienmark-dev alienmark-build alienmark-test alienmark-check
+
+# NODE WORKSPACE
+node-install:
+ $(PNPM) install
+
+node-build:
+ $(PNPM) -r --if-present build
+
+node-test:
+ $(PNPM) -r --if-present test
+
+node-check:
+ $(PNPM) -r --if-present check
+
+frontend-dev:
+ $(PNPM_FRONTEND) dev
+
+frontend-build:
+ $(PNPM_FRONTEND) build
+
+frontend-preview:
+ $(PNPM_FRONTEND) preview
+
+alienmark-dev:
+ $(PNPM_ALIENMARK) dev
+
+alienmark-build:
+ $(PNPM_ALIENMARK) build
+
+alienmark-test:
+ $(PNPM_ALIENMARK) test
+
+alienmark-check:
+ $(PNPM_ALIENMARK) check
diff --git a/package.json b/package.json
new file mode 100644
index 00000000..e3accf89
--- /dev/null
+++ b/package.json
@@ -0,0 +1,17 @@
+{
+ "name": "alien-commons",
+ "private": true,
+ "packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319",
+ "scripts": {
+ "frontend:dev": "pnpm --filter frontend dev",
+ "frontend:build": "pnpm --filter frontend build",
+ "frontend:preview": "pnpm --filter frontend preview",
+ "alienmark:dev": "pnpm --filter alienmark dev",
+ "alienmark:build": "pnpm --filter alienmark build",
+ "alienmark:test": "pnpm --filter alienmark test",
+ "alienmark:check": "pnpm --filter alienmark check",
+ "node:build": "pnpm -r --if-present build",
+ "node:test": "pnpm -r --if-present test",
+ "node:check": "pnpm -r --if-present check"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 00000000..b8f96313
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,9341 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: true
+ excludeLinksFromLockfile: false
+
+importers:
+
+ .: {}
+
+ apps/frontend:
+ dependencies:
+ '@pinia/nuxt':
+ specifier: ^0.11.3
+ version: 0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))
+ '@tailwindcss/vite':
+ specifier: ^4.2.2
+ version: 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ nuxt:
+ specifier: ^4.4.2
+ version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3)
+ pinia:
+ specifier: ^3.0.4
+ version: 3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))
+ tailwindcss:
+ specifier: ^4.2.2
+ version: 4.2.4
+ vue:
+ specifier: ^3.5.31
+ version: 3.5.33(typescript@6.0.3)
+ vue-router:
+ specifier: ^5.0.4
+ version: 5.0.6(@vue/compiler-sfc@3.5.33)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))
+ devDependencies:
+ '@nuxt/eslint':
+ specifier: ^1.15.2
+ version: 1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ eslint:
+ specifier: ^10.2.0
+ version: 10.2.1(jiti@2.6.1)
+ typescript:
+ specifier: ^6.0.2
+ version: 6.0.3
+
+ packages/alienmark:
+ devDependencies:
+ '@types/node':
+ specifier: ^25.6.0
+ version: 25.6.0
+ tsdown:
+ specifier: ^0.21.9
+ version: 0.21.10(typescript@6.0.3)
+ typescript:
+ specifier: ^6.0.3
+ version: 6.0.3
+ vitest:
+ specifier: ^4.1.4
+ version: 4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+
+packages:
+
+ '@antfu/install-pkg@1.1.0':
+ resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
+
+ '@apidevtools/json-schema-ref-parser@14.2.1':
+ resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@types/json-schema': ^7.0.15
+
+ '@babel/code-frame@7.29.0':
+ resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/compat-data@7.29.0':
+ resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/core@7.29.0':
+ resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@7.29.1':
+ resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/generator@8.0.0-rc.3':
+ resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-compilation-targets@7.28.6':
+ resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-create-class-features-plugin@7.28.6':
+ resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-globals@7.28.0':
+ resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-imports@7.28.6':
+ resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-module-transforms@7.28.6':
+ resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-plugin-utils@7.28.6':
+ resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-replace-supers@7.28.6':
+ resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@7.27.1':
+ resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-string-parser@8.0.0-rc.3':
+ resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helper-validator-identifier@8.0.0-rc.3':
+ resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@babel/helper-validator-option@7.27.1':
+ resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/helpers@7.29.2':
+ resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/parser@7.29.2':
+ resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ '@babel/parser@8.0.0-rc.3':
+ resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ '@babel/plugin-syntax-jsx@7.28.6':
+ resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.28.6':
+ resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-transform-typescript@7.28.6':
+ resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/template@7.28.6':
+ resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/traverse@7.29.0':
+ resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@7.29.0':
+ resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
+ engines: {node: '>=6.9.0'}
+
+ '@babel/types@8.0.0-rc.3':
+ resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ '@bomb.sh/tab@0.0.14':
+ resolution: {integrity: sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==}
+ hasBin: true
+ peerDependencies:
+ cac: ^6.7.14
+ citty: ^0.1.6 || ^0.2.0
+ commander: ^13.1.0
+ peerDependenciesMeta:
+ cac:
+ optional: true
+ citty:
+ optional: true
+ commander:
+ optional: true
+
+ '@clack/core@1.2.0':
+ resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==}
+
+ '@clack/prompts@1.2.0':
+ resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==}
+
+ '@cloudflare/kv-asset-handler@0.4.2':
+ resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
+ engines: {node: '>=18.0.0'}
+
+ '@colordx/core@5.4.2':
+ resolution: {integrity: sha512-oC//VDid7CrDg+iXE/8RBq1s+MP+EFh5ggJOkpM9+ZathjC736A67Yg9LMAQULQ1blj9E0m0g8PubOu1/HniaQ==}
+
+ '@dxup/nuxt@0.4.1':
+ resolution: {integrity: sha512-gtYffW6OfWNvoLW+XD3Mx/K8uUq08PMGLYJoDxc92EzZAWqR0FhcR5iaLm5r/OxyGTKz+P5f5Y7Aoir9+SjYaw==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ '@dxup/unimport@0.1.2':
+ resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==}
+
+ '@emnapi/core@1.10.0':
+ resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
+
+ '@emnapi/runtime@1.10.0':
+ resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
+
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+
+ '@es-joy/jsdoccomment@0.86.0':
+ resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@es-joy/resolve.exports@1.2.0':
+ resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
+ engines: {node: '>=10'}
+
+ '@esbuild/aix-ppc64@0.27.7':
+ resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.27.7':
+ resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.27.7':
+ resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.27.7':
+ resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.27.7':
+ resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.27.7':
+ resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.27.7':
+ resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.27.7':
+ resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.27.7':
+ resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.27.7':
+ resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.27.7':
+ resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.27.7':
+ resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.27.7':
+ resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.27.7':
+ resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.27.7':
+ resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.27.7':
+ resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.27.7':
+ resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.27.7':
+ resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.27.7':
+ resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.27.7':
+ resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.27.7':
+ resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.27.7':
+ resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.27.7':
+ resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.27.7':
+ resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.27.7':
+ resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/compat@2.0.5':
+ resolution: {integrity: sha512-IbHDbHJfkVNv6xjlET8AIVo/K1NQt7YT4Rp6ok/clyBGcpRx1l6gv0Rq3vBvYfPJIZt6ODf66Zq08FJNDpnzgg==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ peerDependencies:
+ eslint: ^8.40 || 9 || 10
+ peerDependenciesMeta:
+ eslint:
+ optional: true
+
+ '@eslint/config-array@0.23.5':
+ resolution: {integrity: sha512-Y3kKLvC1dvTOT+oGlqNQ1XLqK6D1HU2YXPc52NmAlJZbMMWDzGYXMiPRJ8TYD39muD/OTjlZmNJ4ib7dvSrMBA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/config-helpers@0.5.5':
+ resolution: {integrity: sha512-eIJYKTCECbP/nsKaaruF6LW967mtbQbsw4JTtSVkUQc9MneSkbrgPJAbKl9nWr0ZeowV8BfsarBmPpBzGelA2w==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/config-inspector@1.5.0':
+ resolution: {integrity: sha512-YK/VdQ+pibx5pcCI2GPZVO6vFemf/pkB662HuFtc5AA4WLQ9upb3fAoZSjOAYoDJx58qGTDp6xq9ldd/vluNxQ==}
+ hasBin: true
+ peerDependencies:
+ eslint: ^8.50.0 || ^9.0.0 || ^10.0.0
+
+ '@eslint/core@1.2.1':
+ resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/js@9.39.4':
+ resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@3.0.5':
+ resolution: {integrity: sha512-vqTaUEgxzm+YDSdElad6PiRoX4t8VGDjCtt05zn4nU810UIx/uNEV7/lZJ6KwFThKZOzOxzXy48da+No7HZaMw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/plugin-kit@0.7.1':
+ resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@humanfs/core@0.19.2':
+ resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.8':
+ resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/types@0.15.0':
+ resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@ioredis/commands@1.5.1':
+ resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@isaacs/fs-minipass@4.0.1':
+ resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
+ engines: {node: '>=18.0.0'}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/source-map@0.3.11':
+ resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@kwsites/file-exists@1.1.1':
+ resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
+
+ '@kwsites/promise-deferred@1.1.1':
+ resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
+
+ '@mapbox/node-pre-gyp@2.0.3':
+ resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ '@napi-rs/wasm-runtime@0.2.12':
+ resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+
+ '@napi-rs/wasm-runtime@1.1.4':
+ resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@nuxt/cli@3.34.0':
+ resolution: {integrity: sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw==}
+ engines: {node: ^16.14.0 || >=18.0.0}
+ hasBin: true
+ peerDependencies:
+ '@nuxt/schema': ^4.3.1
+ peerDependenciesMeta:
+ '@nuxt/schema':
+ optional: true
+
+ '@nuxt/devalue@2.0.2':
+ resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
+
+ '@nuxt/devtools-kit@3.2.4':
+ resolution: {integrity: sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ==}
+ peerDependencies:
+ vite: '>=6.0'
+
+ '@nuxt/devtools-wizard@3.2.4':
+ resolution: {integrity: sha512-5tu2+Quu9XTxwtpzM8CUN0UKn/bzZIfJcoGd+at5Yy1RiUQJ4E52tRK0idW1rMSUDkbkvX3dSnu8Tpj7SAtWdQ==}
+ hasBin: true
+
+ '@nuxt/devtools@3.2.4':
+ resolution: {integrity: sha512-VPbFy7hlPzWpEZk4BsuVpNuHq1ZYGV9xezjb7/NGuePuNLqeNn74YZugU+PCtva7OwKhEeTXmMK0Mqo/6+nwNA==}
+ hasBin: true
+ peerDependencies:
+ '@vitejs/devtools': '*'
+ vite: '>=6.0'
+ peerDependenciesMeta:
+ '@vitejs/devtools':
+ optional: true
+
+ '@nuxt/eslint-config@1.15.2':
+ resolution: {integrity: sha512-vS6mWB87tYjB8h3TxG/QziaZ6CGJpEOBd7N/j+64/tjNipUJzNgKwDzyGoOifNqyDDnlvgi6T3m9XpeYm4qRaA==}
+ peerDependencies:
+ eslint: ^9.0.0 || ^10.0.0
+ eslint-plugin-format: '*'
+ peerDependenciesMeta:
+ eslint-plugin-format:
+ optional: true
+
+ '@nuxt/eslint-plugin@1.15.2':
+ resolution: {integrity: sha512-LZ4gEcPP5GjzAkb6Kk04a4v0vvkTLOpmnEvdDatnkSlxtQLUSwX8v11vcDGXL92ZQ98dFoC1Q1IA6Tz3jdFIig==}
+ peerDependencies:
+ eslint: ^9.0.0 || ^10.0.0
+
+ '@nuxt/eslint@1.15.2':
+ resolution: {integrity: sha512-LwDavQoLl+y0sIDqWEYbOnM6FOmXVIYSEjuvkO1hgAqhb0CvG3hgTnfE1qkf1jOAZp3CZGP+6rxRAJ0dxhueIQ==}
+ peerDependencies:
+ eslint: ^9.0.0 || ^10.0.0
+ eslint-webpack-plugin: ^4.1.0
+ vite-plugin-eslint2: ^5.0.0
+ peerDependenciesMeta:
+ eslint-webpack-plugin:
+ optional: true
+ vite-plugin-eslint2:
+ optional: true
+
+ '@nuxt/kit@4.4.2':
+ resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==}
+ engines: {node: '>=18.12.0'}
+
+ '@nuxt/nitro-server@4.4.2':
+ resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ '@babel/plugin-proposal-decorators': ^7.25.0
+ '@rollup/plugin-babel': ^6.0.0 || ^7.0.0
+ nuxt: ^4.4.2
+ peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@rollup/plugin-babel':
+ optional: true
+
+ '@nuxt/schema@4.4.2':
+ resolution: {integrity: sha512-/q6C7Qhiricgi+PKR7ovBnJlKTL0memCbA1CzRT+itCW/oeYzUfeMdQ35mGntlBoyRPNrMXbzuSUhfDbSCU57w==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
+ '@nuxt/telemetry@2.8.0':
+ resolution: {integrity: sha512-zAwXY24KYvpLTmiV+osagd2EHkfs5IF+7oDZYTQoit5r0kPlwaCNlzHp5I/wUAWT4LBw6lG8gZ6bWidAdv/erQ==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+ peerDependencies:
+ '@nuxt/kit': '>=3.0.0'
+
+ '@nuxt/vite-builder@4.4.2':
+ resolution: {integrity: sha512-fJaIwMA8ID6BU5EqmoDvnhq4qYDJeWjdHk4jfqy8D3Nm7CoUW0BvX7Ee92XoO05rtUiClGlk/NQ1Ii8hs3ZIbw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ '@babel/plugin-proposal-decorators': ^7.25.0
+ '@babel/plugin-syntax-jsx': ^7.25.0
+ nuxt: 4.4.2
+ rolldown: ^1.0.0-beta.38
+ rollup-plugin-visualizer: ^6.0.0 || ^7.0.1
+ vue: ^3.3.4
+ peerDependenciesMeta:
+ '@babel/plugin-proposal-decorators':
+ optional: true
+ '@babel/plugin-syntax-jsx':
+ optional: true
+ rolldown:
+ optional: true
+ rollup-plugin-visualizer:
+ optional: true
+
+ '@oxc-minify/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-minify/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-minify/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-minify/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-minify/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-minify/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-minify/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-minify/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-minify/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-parser/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-parser/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-parser/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-parser/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-project/types@0.117.0':
+ resolution: {integrity: sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w==}
+
+ '@oxc-project/types@0.127.0':
+ resolution: {integrity: sha512-aIYXQBo4lCbO4z0R3FHeucQHpF46l2LbMdxRvqvuRuW2OxdnSkcng5B8+K12spgLDj93rtN3+J2Vac/TIO+ciQ==}
+
+ '@oxc-transform/binding-android-arm-eabi@0.117.0':
+ resolution: {integrity: sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-transform/binding-android-arm64@0.117.0':
+ resolution: {integrity: sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-transform/binding-darwin-arm64@0.117.0':
+ resolution: {integrity: sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-transform/binding-darwin-x64@0.117.0':
+ resolution: {integrity: sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-transform/binding-freebsd-x64@0.117.0':
+ resolution: {integrity: sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
+ resolution: {integrity: sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
+ resolution: {integrity: sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
+ resolution: {integrity: sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-arm64-musl@0.117.0':
+ resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
+ resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
+ resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
+ resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
+ resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-x64-gnu@0.117.0':
+ resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-transform/binding-linux-x64-musl@0.117.0':
+ resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-transform/binding-openharmony-arm64@0.117.0':
+ resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-transform/binding-wasm32-wasi@0.117.0':
+ resolution: {integrity: sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
+ resolution: {integrity: sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
+ resolution: {integrity: sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-transform/binding-win32-x64-msvc@0.117.0':
+ resolution: {integrity: sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@package-json/types@0.0.12':
+ resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==}
+
+ '@parcel/watcher-android-arm64@2.5.6':
+ resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@parcel/watcher-darwin-x64@2.5.6':
+ resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@parcel/watcher-wasm@2.5.6':
+ resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==}
+ engines: {node: '>= 10.0.0'}
+ bundledDependencies:
+ - napi-wasm
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@parcel/watcher-win32-ia32@2.5.6':
+ resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
+ engines: {node: '>= 10.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ '@parcel/watcher@2.5.6':
+ resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
+ engines: {node: '>= 10.0.0'}
+
+ '@pinia/nuxt@0.11.3':
+ resolution: {integrity: sha512-7WVNHpWx4qAEzOlnyrRC88kYrwnlR/PrThWT0XI1dSNyUAXu/KBv9oR37uCgYkZroqP5jn8DfzbkNF3BtKvE9w==}
+ peerDependencies:
+ pinia: ^3.0.4
+
+ '@pkgjs/parseargs@0.11.0':
+ resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
+ engines: {node: '>=14'}
+
+ '@polka/url@1.0.0-next.29':
+ resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
+
+ '@poppinss/colors@4.1.6':
+ resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
+
+ '@poppinss/dumper@0.7.0':
+ resolution: {integrity: sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==}
+
+ '@poppinss/exception@1.2.3':
+ resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
+
+ '@quansync/fs@1.0.0':
+ resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.17':
+ resolution: {integrity: sha512-s70pVGhw4zqGeFnXWvAzJDlvxhlRollagdCCKRgOsgUOH3N1l0LIxf83AtGzmb5SiVM4Hjl5HyarMRfdfj3DaQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.17':
+ resolution: {integrity: sha512-4ksWc9n0mhlZpZ9PMZgTGjeOPRu8MB1Z3Tz0Mo02eWfWCHMW1zN82Qz/pL/rC+yQa+8ZnutMF0JjJe7PjwasYw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.17':
+ resolution: {integrity: sha512-SUSDOI6WwUVNcWxd02QEBjLdY1VPHvlEkw6T/8nYG322iYWCTxRb1vzk4E+mWWYehTp7ERibq54LSJGjmouOsw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.17':
+ resolution: {integrity: sha512-hwnz3nw9dbJ05EDO/PvcjaaewqqDy7Y1rn1UO81l8iIK1GjenME75dl16ajbvSSMfv66WXSRCYKIqfgq2KCfxw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17':
+ resolution: {integrity: sha512-IS+W7epTcwANmFSQFrS1SivEXHtl1JtuQA9wlxrZTcNi6mx+FDOYrakGevvvTwgj2JvWiK8B29/qD9BELZPyXQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17':
+ resolution: {integrity: sha512-e6usGaHKW5BMNZOymS1UcEYGowQMWcgZ71Z17Sl/h2+ZziNJ1a9n3Zvcz6LdRyIW5572wBCTH/Z+bKuZouGk9Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17':
+ resolution: {integrity: sha512-b/CgbwAJpmrRLp02RPfhbudf5tZnN9nsPWK82znefso832etkem8H7FSZwxrOI9djcdTP7U6YfNhbRnh7djErg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17':
+ resolution: {integrity: sha512-4EII1iNGRUN5WwGbF/kOh/EIkoDN9HsupgLQoXfY+D1oyJm7/F4t5PYU5n8SWZgG0FEwakyM8pGgwcBYruGTlA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17':
+ resolution: {integrity: sha512-AH8oq3XqQo4IibpVXvPeLDI5pzkpYn0WiZAfT05kFzoJ6tQNzwRdDYQ45M8I/gslbodRZwW8uxLhbSBbkv96rA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17':
+ resolution: {integrity: sha512-cLnjV3xfo7KslbU41Z7z8BH/E1y5mzUYzAqih1d1MDaIGZRCMqTijqLv76/P7fyHuvUcfGsIpqCdddbxLLK9rA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.17':
+ resolution: {integrity: sha512-0phclDw1spsL7dUB37sIARuis2tAgomCJXAHZlpt8PXZ4Ba0dRP1e+66lsRqrfhISeN9bEGNjQs+T/Fbd7oYGw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.17':
+ resolution: {integrity: sha512-0ag/hEgXOwgw4t8QyQvUCxvEg+V0KBcA6YuOx9g0r02MprutRF5dyljgm3EmR02O292UX7UeS6HzWHAl6KgyhA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.17':
+ resolution: {integrity: sha512-LEXei6vo0E5wTGwpkJ4KoT3OZJRnglwldt5ziLzOlc6qqb55z4tWNq2A+PFqCJuvWWdP53CVhG1Z9NtToDPJrA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17':
+ resolution: {integrity: sha512-gUmyzBl3SPMa6hrqFUth9sVfcLBlYsbMzBx5PlexMroZStgzGqlZ26pYG89rBb45Mnia+oil6YAIFeEWGWhoZA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17':
+ resolution: {integrity: sha512-3hkiolcUAvPB9FLb3UZdfjVVNWherN1f/skkGWJP/fgSQhYUZpSIRr0/I8ZK9TkF3F7kxvJAk0+IcKvPHk9qQg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.0-rc.13':
+ resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==}
+
+ '@rolldown/pluginutils@1.0.0-rc.17':
+ resolution: {integrity: sha512-n8iosDOt6Ig1UhJ2AYqoIhHWh/isz0xpicHTzpKBeotdVsTEcxsSA/i3EVM7gQAj0rU27OLAxCjzlj15IWY7bg==}
+
+ '@rollup/plugin-alias@6.0.0':
+ resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ rollup: '>=4.0.0'
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-commonjs@29.0.2':
+ resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==}
+ engines: {node: '>=16.0.0 || 14 >= 14.17'}
+ peerDependencies:
+ rollup: ^2.68.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-inject@5.0.5':
+ resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-json@6.1.0':
+ resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-node-resolve@16.0.3':
+ resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^2.78.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-replace@6.0.3':
+ resolution: {integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/plugin-terser@1.0.0':
+ resolution: {integrity: sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ rollup: ^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/pluginutils@5.3.0':
+ resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
+ engines: {node: '>=14.0.0'}
+ peerDependencies:
+ rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
+ peerDependenciesMeta:
+ rollup:
+ optional: true
+
+ '@rollup/rollup-android-arm-eabi@4.60.2':
+ resolution: {integrity: sha512-dnlp69efPPg6Uaw2dVqzWRfAWRnYVb1XJ8CyyhIbZeaq4CA5/mLeZ1IEt9QqQxmbdvagjLIm2ZL8BxXv5lH4Yw==}
+ cpu: [arm]
+ os: [android]
+
+ '@rollup/rollup-android-arm64@4.60.2':
+ resolution: {integrity: sha512-OqZTwDRDchGRHHm/hwLOL7uVPB9aUvI0am/eQuWMNyFHf5PSEQmyEeYYheA0EPPKUO/l0uigCp+iaTjoLjVoHg==}
+ cpu: [arm64]
+ os: [android]
+
+ '@rollup/rollup-darwin-arm64@4.60.2':
+ resolution: {integrity: sha512-UwRE7CGpvSVEQS8gUMBe1uADWjNnVgP3Iusyda1nSRwNDCsRjnGc7w6El6WLQsXmZTbLZx9cecegumcitNfpmA==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rollup/rollup-darwin-x64@4.60.2':
+ resolution: {integrity: sha512-gjEtURKLCC5VXm1I+2i1u9OhxFsKAQJKTVB8WvDAHF+oZlq0GTVFOlTlO1q3AlCTE/DF32c16ESvfgqR7343/g==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rollup/rollup-freebsd-arm64@4.60.2':
+ resolution: {integrity: sha512-Bcl6CYDeAgE70cqZaMojOi/eK63h5Me97ZqAQoh77VPjMysA/4ORQBRGo3rRy45x4MzVlU9uZxs8Uwy7ZaKnBw==}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@rollup/rollup-freebsd-x64@4.60.2':
+ resolution: {integrity: sha512-LU+TPda3mAE2QB0/Hp5VyeKJivpC6+tlOXd1VMoXV/YFMvk/MNk5iXeBfB4MQGRWyOYVJ01625vjkr0Az98OJQ==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
+ resolution: {integrity: sha512-2QxQrM+KQ7DAW4o22j+XZ6RKdxjLD7BOWTP0Bv0tmjdyhXSsr2Ul1oJDQqh9Zf5qOwTuTc7Ek83mOFaKnodPjg==}
+ cpu: [arm]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm-musleabihf@4.60.2':
+ resolution: {integrity: sha512-TbziEu2DVsTEOPif2mKWkMeDMLoYjx95oESa9fkQQK7r/Orta0gnkcDpzwufEcAO2BLBsD7mZkXGFqEdMRRwfw==}
+ cpu: [arm]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-arm64-gnu@4.60.2':
+ resolution: {integrity: sha512-bO/rVDiDUuM2YfuCUwZ1t1cP+/yqjqz+Xf2VtkdppefuOFS2OSeAfgafaHNkFn0t02hEyXngZkxtGqXcXwO8Rg==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-arm64-musl@4.60.2':
+ resolution: {integrity: sha512-hr26p7e93Rl0Za+JwW7EAnwAvKkehh12BU1Llm9Ykiibg4uIr2rbpxG9WCf56GuvidlTG9KiiQT/TXT1yAWxTA==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-loong64-gnu@4.60.2':
+ resolution: {integrity: sha512-pOjB/uSIyDt+ow3k/RcLvUAOGpysT2phDn7TTUB3n75SlIgZzM6NKAqlErPhoFU+npgY3/n+2HYIQVbF70P9/A==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-loong64-musl@4.60.2':
+ resolution: {integrity: sha512-2/w+q8jszv9Ww1c+6uJT3OwqhdmGP2/4T17cu8WuwyUuuaCDDJ2ojdyYwZzCxx0GcsZBhzi3HmH+J5pZNXnd+Q==}
+ cpu: [loong64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-ppc64-gnu@4.60.2':
+ resolution: {integrity: sha512-11+aL5vKheYgczxtPVVRhdptAM2H7fcDR5Gw4/bTcteuZBlH4oP9f5s9zYO9aGZvoGeBpqXI/9TZZihZ609wKw==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-ppc64-musl@4.60.2':
+ resolution: {integrity: sha512-i16fokAGK46IVZuV8LIIwMdtqhin9hfYkCh8pf8iC3QU3LpwL+1FSFGej+O7l3E/AoknL6Dclh2oTdnRMpTzFQ==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-riscv64-gnu@4.60.2':
+ resolution: {integrity: sha512-49FkKS6RGQoriDSK/6E2GkAsAuU5kETFCh7pG4yD/ylj9rKhTmO3elsnmBvRD4PgJPds5W2PkhC82aVwmUcJ7A==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-riscv64-musl@4.60.2':
+ resolution: {integrity: sha512-mjYNkHPfGpUR00DuM1ZZIgs64Hpf4bWcz9Z41+4Q+pgDx73UwWdAYyf6EG/lRFldmdHHzgrYyge5akFUW0D3mQ==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-linux-s390x-gnu@4.60.2':
+ resolution: {integrity: sha512-ALyvJz965BQk8E9Al/JDKKDLH2kfKFLTGMlgkAbbYtZuJt9LU8DW3ZoDMCtQpXAltZxwBHevXz5u+gf0yA0YoA==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-gnu@4.60.2':
+ resolution: {integrity: sha512-UQjrkIdWrKI626Du8lCQ6MJp/6V1LAo2bOK9OTu4mSn8GGXIkPXk/Vsp4bLHCd9Z9Iz2OTEaokUE90VweJgIYQ==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rollup/rollup-linux-x64-musl@4.60.2':
+ resolution: {integrity: sha512-bTsRGj6VlSdn/XD4CGyzMnzaBs9bsRxy79eTqTCBsA8TMIEky7qg48aPkvJvFe1HyzQ5oMZdg7AnVlWQSKLTnw==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rollup/rollup-openbsd-x64@4.60.2':
+ resolution: {integrity: sha512-6d4Z3534xitaA1FcMWP7mQPq5zGwBmGbhphh2DwaA1aNIXUu3KTOfwrWpbwI4/Gr0uANo7NTtaykFyO2hPuFLg==}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@rollup/rollup-openharmony-arm64@4.60.2':
+ resolution: {integrity: sha512-NetAg5iO2uN7eB8zE5qrZ3CSil+7IJt4WDFLcC75Ymywq1VZVD6qJ6EvNLjZ3rEm6gB7XW5JdT60c6MN35Z85Q==}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rollup/rollup-win32-arm64-msvc@4.60.2':
+ resolution: {integrity: sha512-NCYhOotpgWZ5kdxCZsv6Iudx0wX8980Q/oW4pNFNihpBKsDbEA1zpkfxJGC0yugsUuyDZ7gL37dbzwhR0VI7pQ==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rollup/rollup-win32-ia32-msvc@4.60.2':
+ resolution: {integrity: sha512-RXsaOqXxfoUBQoOgvmmijVxJnW2IGB0eoMO7F8FAjaj0UTywUO/luSqimWBJn04WNgUkeNhh7fs7pESXajWmkg==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-gnu@4.60.2':
+ resolution: {integrity: sha512-qdAzEULD+/hzObedtmV6iBpdL5TIbKVztGiK7O3/KYSf+HIzU257+MX1EXJcyIiDbMAqmbwaufcYPvyRryeZtA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@rollup/rollup-win32-x64-msvc@4.60.2':
+ resolution: {integrity: sha512-Nd/SgG27WoA9e+/TdK74KnHz852TLa94ovOYySo/yMPuTmpckK/jIF2jSwS3g7ELSKXK13/cVdmg1Z/DaCWKxA==}
+ cpu: [x64]
+ os: [win32]
+
+ '@simple-git/args-pathspec@1.0.3':
+ resolution: {integrity: sha512-ngJMaHlsWDTfjyq9F3VIQ8b7NXbBLq5j9i5bJ6XLYtD6qlDXT7fdKY2KscWWUF8t18xx052Y/PUO1K1TRc9yKA==}
+
+ '@simple-git/argv-parser@1.1.1':
+ resolution: {integrity: sha512-Q9lBcfQ+VQCpQqGJFHe5yooOS5hGdLFFbJ5R+R5aDsnkPCahtn1hSkMcORX65J2Z5lxSkD0lQorMsncuBQxYUw==}
+
+ '@sindresorhus/base62@1.0.0':
+ resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
+ engines: {node: '>=18'}
+
+ '@sindresorhus/is@7.2.0':
+ resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==}
+ engines: {node: '>=18'}
+
+ '@sindresorhus/merge-streams@4.0.0':
+ resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
+ engines: {node: '>=18'}
+
+ '@speed-highlight/core@1.2.15':
+ resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==}
+
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
+ '@stylistic/eslint-plugin@5.10.0':
+ resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^9.0.0 || ^10.0.0
+
+ '@tailwindcss/node@4.2.4':
+ resolution: {integrity: sha512-Ai7+yQPxz3ddrDQzFfBKdHEVBg0w3Zl83jnjuwxnZOsnH9pGn93QHQtpU0p/8rYWxvbFZHneni6p1BSLK4DkGA==}
+
+ '@tailwindcss/oxide-android-arm64@4.2.4':
+ resolution: {integrity: sha512-e7MOr1SAn9U8KlZzPi1ZXGZHeC5anY36qjNwmZv9pOJ8E4Q6jmD1vyEHkQFmNOIN7twGPEMXRHmitN4zCMN03g==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [android]
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.4':
+ resolution: {integrity: sha512-tSC/Kbqpz/5/o/C2sG7QvOxAKqyd10bq+ypZNf+9Fi2TvbVbv1zNpcEptcsU7DPROaSbVgUXmrzKhurFvo5eDg==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-darwin-x64@4.2.4':
+ resolution: {integrity: sha512-yPyUXn3yO/ufR6+Kzv0t4fCg2qNr90jxXc5QqBpjlPNd0NqyDXcmQb/6weunH/MEDXW5dhyEi+agTDiqa3WsGg==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.4':
+ resolution: {integrity: sha512-BoMIB4vMQtZsXdGLVc2z+P9DbETkiopogfWZKbWwM8b/1Vinbs4YcUwo+kM/KeLkX3Ygrf4/PsRndKaYhS8Eiw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
+ resolution: {integrity: sha512-7pIHBLTHYRAlS7V22JNuTh33yLH4VElwKtB3bwchK/UaKUPpQ0lPQiOWcbm4V3WP2I6fNIJ23vABIvoy2izdwA==}
+ engines: {node: '>= 20'}
+ cpu: [arm]
+ os: [linux]
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
+ resolution: {integrity: sha512-+E4wxJ0ZGOzSH325reXTWB48l42i93kQqMvDyz5gqfRzRZ7faNhnmvlV4EPGJU3QJM/3Ab5jhJ5pCRUsKn6OQw==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
+ resolution: {integrity: sha512-bBADEGAbo4ASnppIziaQJelekCxdMaxisrk+fB7Thit72IBnALp9K6ffA2G4ruj90G9XRS2VQ6q2bCKbfFV82g==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
+ resolution: {integrity: sha512-7Mx25E4WTfnht0TVRTyC00j3i0M+EeFe7wguMDTlX4mRxafznw0CA8WJkFjWYH5BlgELd1kSjuU2JiPnNZbJDA==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.4':
+ resolution: {integrity: sha512-2wwJRF7nyhOR0hhHoChc04xngV3iS+akccHTGtz965FwF0up4b2lOdo6kI1EbDaEXKgvcrFBYcYQQ/rrnWFVfA==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.4':
+ resolution: {integrity: sha512-FQsqApeor8Fo6gUEklzmaa9994orJZZDBAlQpK2Mq+DslRKFJeD6AjHpBQ0kZFQohVr8o85PPh8eOy86VlSCmw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+ bundledDependencies:
+ - '@napi-rs/wasm-runtime'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@tybys/wasm-util'
+ - '@emnapi/wasi-threads'
+ - tslib
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
+ resolution: {integrity: sha512-L9BXqxC4ToVgwMFqj3pmZRqyHEztulpUJzCxUtLjobMCzTPsGt1Fa9enKbOpY2iIyVtaHNeNvAK8ERP/64sqGQ==}
+ engines: {node: '>= 20'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
+ resolution: {integrity: sha512-ESlKG0EpVJQwRjXDDa9rLvhEAh0mhP1sF7sap9dNZT0yyl9SAG6T7gdP09EH0vIv0UNTlo6jPWyujD6559fZvw==}
+ engines: {node: '>= 20'}
+ cpu: [x64]
+ os: [win32]
+
+ '@tailwindcss/oxide@4.2.4':
+ resolution: {integrity: sha512-9El/iI069DKDSXwTvB9J4BwdO5JhRrOweGaK25taBAvBXyXqJAX+Jqdvs8r8gKpsI/1m0LeJLyQYTf/WLrBT1Q==}
+ engines: {node: '>= 20'}
+
+ '@tailwindcss/vite@4.2.4':
+ resolution: {integrity: sha512-pCvohwOCspk3ZFn6eJzrrX3g4n2JY73H6MmYC87XfGPyTty4YsCjYTMArRZm/zOI8dIt3+EcrLHAFPe5A4bgtw==}
+ peerDependencies:
+ vite: ^5.2.0 || ^6 || ^7 || ^8
+
+ '@tybys/wasm-util@0.10.1':
+ resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/esrecurse@4.3.1':
+ resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
+
+ '@types/estree@1.0.8':
+ resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+
+ '@types/jsesc@2.5.1':
+ resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@25.6.0':
+ resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
+
+ '@types/resolve@1.20.2':
+ resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+
+ '@typescript-eslint/eslint-plugin@8.59.0':
+ resolution: {integrity: sha512-HyAZtpdkgZwpq8Sz3FSUvCR4c+ScbuWa9AksK2Jweub7w4M3yTz4O11AqVJzLYjy/B9ZWPyc81I+mOdJU/bDQw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/parser': ^8.59.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/parser@8.59.0':
+ resolution: {integrity: sha512-TI1XGwKbDpo9tRW8UDIXCOeLk55qe9ZFGs8MTKU6/M08HWTw52DD/IYhfQtOEhEdPhLMT26Ka/x7p70nd3dzDg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/project-service@8.59.0':
+ resolution: {integrity: sha512-Lw5ITrR5s5TbC19YSvlr63ZfLaJoU6vtKTHyB0GQOpX0W7d5/Ir6vUahWi/8Sps/nOukZQ0IB3SmlxZnjaKVnw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/scope-manager@8.59.0':
+ resolution: {integrity: sha512-UzR16Ut8IpA3Mc4DbgAShlPPkVm8xXMWafXxB0BocaVRHs8ZGakAxGRskF7FId3sdk9lgGD73GSFaWmWFDE4dg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/tsconfig-utils@8.59.0':
+ resolution: {integrity: sha512-91Sbl3s4Kb3SybliIY6muFBmHVv+pYXfybC4Oolp3dvk8BvIE3wOPc+403CWIT7mJNkfQRGtdqghzs2+Z91Tqg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/type-utils@8.59.0':
+ resolution: {integrity: sha512-3TRiZaQSltGqGeNrJzzr1+8YcEobKH9rHnqIp/1psfKFmhRQDNMGP5hBufanYTGznwShzVLs3Mz+gDN7HkWfXg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/types@8.59.0':
+ resolution: {integrity: sha512-nLzdsT1gdOgFxxxwrlNVUBzSNBEEHJ86bblmk4QAS6stfig7rcJzWKqCyxFy3YRRHXDWEkb2NralA1nOYkkm/A==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/typescript-estree@8.59.0':
+ resolution: {integrity: sha512-O9Re9P1BmBLFJyikRbQpLku/QA3/AueZNO9WePLBwQrvkixTmDe8u76B6CYUAITRl/rHawggEqUGn5QIkVRLMw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/utils@8.59.0':
+ resolution: {integrity: sha512-I1R/K7V07XsMJ12Oaxg/O9GfrysGTmCRhvZJBv0RE0NcULMzjqVpR5kRRQjHsz3J/bElU7HwCO7zkqL+MSUz+g==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ typescript: '>=4.8.4 <6.1.0'
+
+ '@typescript-eslint/visitor-keys@8.59.0':
+ resolution: {integrity: sha512-/uejZt4dSere1bx12WLlPfv8GktzcaDtuJ7s42/HEZ5zGj9oxRaD4bj7qwSunXkf+pbAhFt2zjpHYUiT5lHf0Q==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@unhead/vue@2.1.13':
+ resolution: {integrity: sha512-HYy0shaHRnLNW9r85gppO8IiGz0ONWVV3zGdlT8CQ0tbTwixznJCIiyqV4BSV1aIF1jJIye0pd1p/k6Eab8Z/A==}
+ peerDependencies:
+ vue: '>=3.5.18'
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
+ cpu: [arm]
+ os: [android]
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
+ cpu: [arm64]
+ os: [android]
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
+ cpu: [arm]
+ os: [linux]
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
+ cpu: [ia32]
+ os: [win32]
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
+ cpu: [x64]
+ os: [win32]
+
+ '@vercel/nft@1.5.0':
+ resolution: {integrity: sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==}
+ engines: {node: '>=20'}
+ hasBin: true
+
+ '@vitejs/plugin-vue-jsx@5.1.5':
+ resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vue: ^3.0.0
+
+ '@vitejs/plugin-vue@6.0.6':
+ resolution: {integrity: sha512-u9HHgfrq3AjXlysn0eINFnWQOJQLO9WN6VprZ8FXl7A2bYisv3Hui9Ij+7QZ41F/WYWarHjwBbXtD7dKg3uxbg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ peerDependencies:
+ vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
+ vue: ^3.2.25
+
+ '@vitest/expect@4.1.5':
+ resolution: {integrity: sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==}
+
+ '@vitest/mocker@4.1.5':
+ resolution: {integrity: sha512-/x2EmFC4mT4NNzqvC3fmesuV97w5FC903KPmey4gsnJiMQ3Be1IlDKVaDaG8iqaLFHqJ2FVEkxZk5VmeLjIItw==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.1.5':
+ resolution: {integrity: sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==}
+
+ '@vitest/runner@4.1.5':
+ resolution: {integrity: sha512-2D+o7Pr82IEO46YPpoA/YU0neeyr6FTerQb5Ro7BUnBuv6NQtT/kmVnczngiMEBhzgqz2UZYl5gArejsyERDSQ==}
+
+ '@vitest/snapshot@4.1.5':
+ resolution: {integrity: sha512-zypXEt4KH/XgKGPUz4eC2AvErYx0My5hfL8oDb1HzGFpEk1P62bxSohdyOmvz+d9UJwanI68MKwr2EquOaOgMQ==}
+
+ '@vitest/spy@4.1.5':
+ resolution: {integrity: sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==}
+
+ '@vitest/utils@4.1.5':
+ resolution: {integrity: sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==}
+
+ '@vue-macros/common@3.1.2':
+ resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ vue: ^2.7.0 || ^3.2.25
+ peerDependenciesMeta:
+ vue:
+ optional: true
+
+ '@vue/babel-helper-vue-transform-on@2.0.1':
+ resolution: {integrity: sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA==}
+
+ '@vue/babel-plugin-jsx@2.0.1':
+ resolution: {integrity: sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+
+ '@vue/babel-plugin-resolve-type@2.0.1':
+ resolution: {integrity: sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@vue/compiler-core@3.5.33':
+ resolution: {integrity: sha512-3PZLQwFw4Za3TC8t0FvTy3wI16Kt+pmwcgNZca4Pj9iWL2E72a/gZlpBtAJvEdDMdCxdG/qq0C7PN0bsJuv0Rw==}
+
+ '@vue/compiler-dom@3.5.33':
+ resolution: {integrity: sha512-PXq0yrfCLzzL07rbXO4awtXY1Z06LG2eu6Adg3RJFa/j3Cii217XxxLXG22N330gw7GmALCY0Z8RgXEviwgpjA==}
+
+ '@vue/compiler-sfc@3.5.33':
+ resolution: {integrity: sha512-UTUvRO9cY+rROrx/pvN9P5Z7FgA6QGfokUCfhQE4EnmUj3rVnK+CHI0LsEO1pg+I7//iRYMUfcNcCPe7tg0CoA==}
+
+ '@vue/compiler-ssr@3.5.33':
+ resolution: {integrity: sha512-IErjYdnj1qIupG5xxiVIYiiRvDhGWV4zuh/RCrwfYpuL+HWQzeU6lCk/nF9r7olWMnjKxCAkOctT2qFWFkzb1A==}
+
+ '@vue/devtools-api@7.7.9':
+ resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
+
+ '@vue/devtools-api@8.1.1':
+ resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==}
+
+ '@vue/devtools-core@8.1.1':
+ resolution: {integrity: sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A==}
+ peerDependencies:
+ vue: ^3.0.0
+
+ '@vue/devtools-kit@7.7.9':
+ resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
+
+ '@vue/devtools-kit@8.1.1':
+ resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==}
+
+ '@vue/devtools-shared@7.7.9':
+ resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
+
+ '@vue/devtools-shared@8.1.1':
+ resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==}
+
+ '@vue/reactivity@3.5.33':
+ resolution: {integrity: sha512-p8UfIqyIhb0rYGlSgSBV+lPhF2iUSBcRy7enhTmPqKWadHy9kcOFYF1AejYBP9P+avnd3OBbD49DU4pLWX/94A==}
+
+ '@vue/runtime-core@3.5.33':
+ resolution: {integrity: sha512-UpFF45RI9//a7rvq7RdOQblb4tup7hHG9QsmIrxkFQLzQ7R8/iNQ5LE15NhLZ1/WcHMU2b47u6P33CPUelHyIQ==}
+
+ '@vue/runtime-dom@3.5.33':
+ resolution: {integrity: sha512-IOxMsAOwquhfITgmOgaPYl7/j8gKUxUFoflRc+u4LxyD3+783xne8vNta1PONVCvCV9A0w7hkyEepINDqfO0tw==}
+
+ '@vue/server-renderer@3.5.33':
+ resolution: {integrity: sha512-0xylq/8/h44lVG0pZFknv1XIdEgymq2E9n59uTWJBG+dIgiT0TMCSsxrN7nO16Z0MU0MPjFcguBbZV8Itk52Hw==}
+ peerDependencies:
+ vue: 3.5.33
+
+ '@vue/shared@3.5.33':
+ resolution: {integrity: sha512-5vR2QIlmaLG77Ygd4pMP6+SGQ5yox9VhtnbDWTy9DzMzdmeLxZ1QqxrywEZ9sa1AVubfIJyaCG3ytyWU81ufcQ==}
+
+ abbrev@3.0.1:
+ resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
+ abort-controller@3.0.0:
+ resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
+ engines: {node: '>=6.5'}
+
+ acorn-import-attributes@1.9.5:
+ resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
+ peerDependencies:
+ acorn: ^8
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.16.0:
+ resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ agent-base@7.1.4:
+ resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
+ engines: {node: '>= 14'}
+
+ ajv@6.15.0:
+ resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
+
+ ansi-regex@5.0.1:
+ resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
+ engines: {node: '>=8'}
+
+ ansi-regex@6.2.2:
+ resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
+ engines: {node: '>=12'}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansi-styles@6.2.3:
+ resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
+ engines: {node: '>=12'}
+
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
+ engines: {node: '>=14'}
+
+ anymatch@3.1.3:
+ resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
+ engines: {node: '>= 8'}
+
+ archiver-utils@5.0.2:
+ resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
+ engines: {node: '>= 14'}
+
+ archiver@7.0.1:
+ resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
+ engines: {node: '>= 14'}
+
+ are-docs-informative@0.0.2:
+ resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
+ engines: {node: '>=14'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ ast-kit@2.2.0:
+ resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==}
+ engines: {node: '>=20.19.0'}
+
+ ast-kit@3.0.0-beta.1:
+ resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==}
+ engines: {node: '>=20.19.0'}
+
+ ast-walker-scope@0.8.3:
+ resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==}
+ engines: {node: '>=20.19.0'}
+
+ async-sema@3.1.1:
+ resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==}
+
+ async@3.2.6:
+ resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+
+ autoprefixer@10.5.0:
+ resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==}
+ engines: {node: ^10 || ^12 || >=14}
+ hasBin: true
+ peerDependencies:
+ postcss: ^8.1.0
+
+ b4a@1.8.0:
+ resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
+ peerDependencies:
+ react-native-b4a: '*'
+ peerDependenciesMeta:
+ react-native-b4a:
+ optional: true
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ balanced-match@4.0.4:
+ resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
+ engines: {node: 18 || 20 || >=22}
+
+ bare-events@2.8.2:
+ resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
+ peerDependencies:
+ bare-abort-controller: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
+
+ bare-fs@4.7.1:
+ resolution: {integrity: sha512-WDRsyVN52eAx/lBamKD6uyw8H4228h/x0sGGGegOamM2cd7Pag88GfMQalobXI+HaEUxpCkbKQUDOQqt9wawRw==}
+ engines: {bare: '>=1.16.0'}
+ peerDependencies:
+ bare-buffer: '*'
+ peerDependenciesMeta:
+ bare-buffer:
+ optional: true
+
+ bare-os@3.9.0:
+ resolution: {integrity: sha512-JTjuZyNIDpw+GytMO4a6TK1VXdVKKJr6DRxEHasyuYyShV2deuiHJK/ahGZlebc+SG0/wJCB9XK8gprBGDFi/Q==}
+ engines: {bare: '>=1.14.0'}
+
+ bare-path@3.0.0:
+ resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
+
+ bare-stream@2.13.0:
+ resolution: {integrity: sha512-3zAJRZMDFGjdn+RVnNpF9kuELw+0Fl3lpndM4NcEOhb9zwtSo/deETfuIwMSE5BXanA0FrN1qVjffGwAg2Y7EA==}
+ peerDependencies:
+ bare-abort-controller: '*'
+ bare-buffer: '*'
+ bare-events: '*'
+ peerDependenciesMeta:
+ bare-abort-controller:
+ optional: true
+ bare-buffer:
+ optional: true
+ bare-events:
+ optional: true
+
+ bare-url@2.4.2:
+ resolution: {integrity: sha512-/9a2j4ac6ckpmAHvod/ob7x439OAHst/drc2Clnq+reRYd/ovddwcF4LfoxHyNk5AuGBnPg+HqFjmE/Zpq6v0A==}
+
+ base64-js@1.5.1:
+ resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
+
+ baseline-browser-mapping@2.10.21:
+ resolution: {integrity: sha512-Q+rUQ7Uz8AHM7DEaNdwvfFCTq7a43lNTzuS94eiWqwyxfV/wJv+oUivef51T91mmRY4d4A1u9rcSvkeufCVXlA==}
+ engines: {node: '>=6.0.0'}
+ hasBin: true
+
+ bindings@1.5.0:
+ resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
+
+ birpc@2.9.0:
+ resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
+
+ birpc@4.0.0:
+ resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
+
+ boolbase@1.0.0:
+ resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
+
+ brace-expansion@2.1.0:
+ resolution: {integrity: sha512-TN1kCZAgdgweJhWWpgKYrQaMNHcDULHkWwQIspdtjV4Y5aurRdZpjAqn6yX3FPqTA9ngHCc4hJxMAMgGfve85w==}
+
+ brace-expansion@5.0.5:
+ resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
+ engines: {node: 18 || 20 || >=22}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ browserslist@4.28.2:
+ resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+
+ buffer-crc32@1.0.0:
+ resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
+ engines: {node: '>=8.0.0'}
+
+ buffer-from@1.1.2:
+ resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
+
+ buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+
+ builtin-modules@5.1.0:
+ resolution: {integrity: sha512-c5JxaDrzwRjq3WyJkI1AGR5xy6Gr6udlt7sQPbl09+3ckB+Zo2qqQ2KhCTBr7Q8dHB43bENGYEk4xddrFH/b7A==}
+ engines: {node: '>=18.20'}
+
+ bundle-name@4.1.0:
+ resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
+ engines: {node: '>=18'}
+
+ bundle-require@5.1.0:
+ resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ peerDependencies:
+ esbuild: '>=0.18'
+
+ c12@3.3.4:
+ resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==}
+ peerDependencies:
+ magicast: '*'
+ peerDependenciesMeta:
+ magicast:
+ optional: true
+
+ cac@6.7.14:
+ resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
+ engines: {node: '>=8'}
+
+ cac@7.0.0:
+ resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ engines: {node: '>=20.19.0'}
+
+ caniuse-api@3.0.0:
+ resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
+
+ caniuse-lite@1.0.30001790:
+ resolution: {integrity: sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==}
+
+ chai@6.2.2:
+ resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
+ engines: {node: '>=18'}
+
+ change-case@5.4.4:
+ resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
+
+ chokidar@4.0.3:
+ resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
+ engines: {node: '>= 14.16.0'}
+
+ chokidar@5.0.0:
+ resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
+ engines: {node: '>= 20.19.0'}
+
+ chownr@3.0.0:
+ resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
+ engines: {node: '>=18'}
+
+ ci-info@4.4.0:
+ resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
+ engines: {node: '>=8'}
+
+ citty@0.1.6:
+ resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+
+ citty@0.2.2:
+ resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==}
+
+ clean-regexp@1.0.0:
+ resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
+ engines: {node: '>=4'}
+
+ cliui@9.0.1:
+ resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
+ engines: {node: '>=20'}
+
+ cluster-key-slot@1.1.2:
+ resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
+ engines: {node: '>=0.10.0'}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ commander@11.1.0:
+ resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
+ engines: {node: '>=16'}
+
+ commander@2.20.3:
+ resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+
+ comment-parser@1.4.6:
+ resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==}
+ engines: {node: '>= 12.0.0'}
+
+ commondir@1.0.1:
+ resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
+
+ compatx@0.2.0:
+ resolution: {integrity: sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==}
+
+ compress-commons@6.0.2:
+ resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
+ engines: {node: '>= 14'}
+
+ confbox@0.1.8:
+ resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
+
+ confbox@0.2.4:
+ resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==}
+
+ consola@3.4.2:
+ resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
+ engines: {node: ^14.18.0 || >=16.10.0}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cookie-es@1.2.3:
+ resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==}
+
+ cookie-es@2.0.1:
+ resolution: {integrity: sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==}
+
+ cookie-es@3.1.1:
+ resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
+
+ copy-anything@4.0.5:
+ resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
+ engines: {node: '>=18'}
+
+ core-js-compat@3.49.0:
+ resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
+
+ core-util-is@1.0.3:
+ resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+
+ crc-32@1.2.2:
+ resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
+ engines: {node: '>=0.8'}
+ hasBin: true
+
+ crc32-stream@6.0.0:
+ resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
+ engines: {node: '>= 14'}
+
+ croner@10.0.1:
+ resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==}
+ engines: {node: '>=18.0'}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ crossws@0.3.5:
+ resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
+
+ crossws@0.4.5:
+ resolution: {integrity: sha512-wUR89x/Rw7/8t+vn0CmGDYM9TD6VtARGb0LD5jq2wjtMy1vCP4M+sm6N6TigWeTYvnA8MoW29NqqXD0ep0rfBA==}
+ peerDependencies:
+ srvx: '>=0.11.5'
+ peerDependenciesMeta:
+ srvx:
+ optional: true
+
+ css-declaration-sorter@7.4.0:
+ resolution: {integrity: sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==}
+ engines: {node: ^14 || ^16 || >=18}
+ peerDependencies:
+ postcss: ^8.0.9
+
+ css-select@5.2.2:
+ resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
+
+ css-tree@2.2.1:
+ resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ css-tree@3.2.1:
+ resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
+
+ css-what@6.2.2:
+ resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
+ engines: {node: '>= 6'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ cssnano-preset-default@7.0.15:
+ resolution: {integrity: sha512-60kx7lJ40//HA85cIfQXSOJFby2D2V1pOMNHVCxue3KFWCjRzmiQyL9OvI+NAhwUlaojOfF9eK3nGvrJLCBUfQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ cssnano-utils@5.0.2:
+ resolution: {integrity: sha512-kt41WLK7FLKfePzPi645Y+/NtW/nNM7Su6nlNUfJyRNW3JcuU3JU7+cWJc+JexTeZ8dRBvFufefdG2XpXkIo0A==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ cssnano@7.1.7:
+ resolution: {integrity: sha512-N5LGn/OlhMxDTvKACwUPMzT34SSj1b022pvUAE/Vh6r2WD1aUCbc+QNIP/JjX9VVxebdJWZQ3352Lt4oF7dQ/g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ csso@5.0.5:
+ resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
+ engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
+
+ csstype@3.2.3:
+ resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
+
+ db0@0.3.4:
+ resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==}
+ peerDependencies:
+ '@electric-sql/pglite': '*'
+ '@libsql/client': '*'
+ better-sqlite3: '*'
+ drizzle-orm: '*'
+ mysql2: '*'
+ sqlite3: '*'
+ peerDependenciesMeta:
+ '@electric-sql/pglite':
+ optional: true
+ '@libsql/client':
+ optional: true
+ better-sqlite3:
+ optional: true
+ drizzle-orm:
+ optional: true
+ mysql2:
+ optional: true
+ sqlite3:
+ optional: true
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ deepmerge@4.3.1:
+ resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
+ engines: {node: '>=0.10.0'}
+
+ default-browser-id@5.0.1:
+ resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
+ engines: {node: '>=18'}
+
+ default-browser@5.5.0:
+ resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
+ engines: {node: '>=18'}
+
+ define-lazy-prop@3.0.0:
+ resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
+ engines: {node: '>=12'}
+
+ defu@6.1.7:
+ resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
+
+ denque@2.1.0:
+ resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
+ engines: {node: '>=0.10'}
+
+ depd@2.0.0:
+ resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
+ engines: {node: '>= 0.8'}
+
+ destr@2.0.5:
+ resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ devalue@5.7.1:
+ resolution: {integrity: sha512-MUbZ586EgQqdRnC4yDrlod3BEdyvE4TapGYHMW2CiaW+KkkFmWEFqBUaLltEZCGi0iFXCEjRF0OjF0DV2QHjOA==}
+
+ diff@8.0.4:
+ resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
+ engines: {node: '>=0.3.1'}
+
+ dom-serializer@2.0.0:
+ resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
+
+ domelementtype@2.3.0:
+ resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
+
+ domhandler@5.0.3:
+ resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
+ engines: {node: '>= 4'}
+
+ domutils@3.2.2:
+ resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
+
+ dot-prop@10.1.0:
+ resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==}
+ engines: {node: '>=20'}
+
+ dotenv@17.4.2:
+ resolution: {integrity: sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==}
+ engines: {node: '>=12'}
+
+ dts-resolver@2.1.3:
+ resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ oxc-resolver: '>=11.0.0'
+ peerDependenciesMeta:
+ oxc-resolver:
+ optional: true
+
+ duplexer@0.1.2:
+ resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
+
+ eastasianwidth@0.2.0:
+ resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
+
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
+ electron-to-chromium@1.5.344:
+ resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==}
+
+ emoji-regex@10.6.0:
+ resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
+
+ emoji-regex@8.0.0:
+ resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ empathic@2.0.0:
+ resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
+ engines: {node: '>=14'}
+
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
+ enhanced-resolve@5.21.0:
+ resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==}
+ engines: {node: '>=10.13.0'}
+
+ entities@4.5.0:
+ resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
+ engines: {node: '>=0.12'}
+
+ entities@7.0.1:
+ resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
+ engines: {node: '>=0.12'}
+
+ error-stack-parser-es@1.0.5:
+ resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
+
+ errx@0.1.0:
+ resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-module-lexer@2.0.0:
+ resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
+
+ esbuild@0.27.7:
+ resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escalade@3.2.0:
+ resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
+ engines: {node: '>=6'}
+
+ escape-html@1.0.3:
+ resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
+
+ escape-string-regexp@1.0.5:
+ resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
+ engines: {node: '>=0.8.0'}
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ eslint-config-flat-gitignore@2.3.0:
+ resolution: {integrity: sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==}
+ peerDependencies:
+ eslint: ^9.5.0 || ^10.0.0
+
+ eslint-flat-config-utils@3.1.0:
+ resolution: {integrity: sha512-lM+Nwo2CzpuTS/RASQExlEIwk/BQoKqJWX6VbDlLMb/mveqvt9MMrRXFEkG3bseuK6g8noKZLeX82epkILtv4A==}
+
+ eslint-import-context@0.1.9:
+ resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ unrs-resolver: ^1.0.0
+ peerDependenciesMeta:
+ unrs-resolver:
+ optional: true
+
+ eslint-merge-processors@2.0.0:
+ resolution: {integrity: sha512-sUuhSf3IrJdGooquEUB5TNpGNpBoQccbnaLHsb1XkBLUPPqCNivCpY05ZcpCOiV9uHwO2yxXEWVczVclzMxYlA==}
+ peerDependencies:
+ eslint: '*'
+
+ eslint-plugin-import-lite@0.5.2:
+ resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: '>=9.0.0'
+
+ eslint-plugin-import-x@4.16.2:
+ resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@typescript-eslint/utils': ^8.56.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ eslint-import-resolver-node: '*'
+ peerDependenciesMeta:
+ '@typescript-eslint/utils':
+ optional: true
+ eslint-import-resolver-node:
+ optional: true
+
+ eslint-plugin-jsdoc@62.9.0:
+ resolution: {integrity: sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
+
+ eslint-plugin-regexp@3.1.0:
+ resolution: {integrity: sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ peerDependencies:
+ eslint: '>=9.38.0'
+
+ eslint-plugin-unicorn@63.0.0:
+ resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==}
+ engines: {node: ^20.10.0 || >=21.0.0}
+ peerDependencies:
+ eslint: '>=9.38.0'
+
+ eslint-plugin-vue@10.9.0:
+ resolution: {integrity: sha512-EFNNzu4HqtTRb5DJINpyd+u3bDdzETWDMpCzG+UBHz1tpsnMDCeOcf61u4Wy/cbXnMymK+MT9bjH7KcG1fItSw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
+ '@typescript-eslint/parser': ^7.0.0 || ^8.0.0
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+ vue-eslint-parser: ^10.0.0
+ peerDependenciesMeta:
+ '@stylistic/eslint-plugin':
+ optional: true
+ '@typescript-eslint/parser':
+ optional: true
+
+ eslint-processor-vue-blocks@2.0.0:
+ resolution: {integrity: sha512-u4W0CJwGoWY3bjXAuFpc/b6eK3NQEI8MoeW7ritKj3G3z/WtHrKjkqf+wk8mPEy5rlMGS+k6AZYOw2XBoN/02Q==}
+ peerDependencies:
+ '@vue/compiler-sfc': ^3.3.0
+ eslint: '>=9.0.0'
+
+ eslint-scope@9.1.2:
+ resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ eslint-typegen@2.3.1:
+ resolution: {integrity: sha512-zVdh8rThBvv2o5T/K524Fr5iy1Jo0q09rHL7y7FbOhgMB177T2gw+shxfC4ChCEqdq6/y6LJA4j8Fbr/Xls9aw==}
+ peerDependencies:
+ eslint: ^9.0.0 || ^10.0.0
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ eslint@10.2.1:
+ resolution: {integrity: sha512-wiyGaKsDgqXvF40P8mDwiUp/KQjE1FdrIEJsM8PZ3XCiniTMXS3OHWWUe5FI5agoCnr8x4xPrTDZuxsBlNHl+Q==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ espree@11.2.0:
+ resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ esquery@1.7.0:
+ resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ estree-walker@2.0.2:
+ resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
+ event-target-shim@5.0.1:
+ resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
+ engines: {node: '>=6'}
+
+ events-universal@1.0.1:
+ resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
+
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
+ execa@8.0.1:
+ resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
+ engines: {node: '>=16.17'}
+
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
+ exsolve@1.0.8:
+ resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-fifo@1.3.2:
+ resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fast-npm-meta@1.5.0:
+ resolution: {integrity: sha512-71pTBPrA9WPPsJQ0Q06ZlTQQVJPYd87xZsvFwxFqru7a6kdriMVW1Hjd37W3W13ZuF/K/Zzq6eVlAHVoZCHuQw==}
+ hasBin: true
+
+ fast-string-truncated-width@1.2.1:
+ resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==}
+
+ fast-string-width@1.1.0:
+ resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==}
+
+ fast-wrap-ansi@0.1.6:
+ resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==}
+
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ file-uri-to-path@1.0.0:
+ resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up-simple@1.0.1:
+ resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
+ engines: {node: '>=18'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ find-up@8.0.0:
+ resolution: {integrity: sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==}
+ engines: {node: '>=20'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.4.2:
+ resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
+
+ foreground-child@3.3.1:
+ resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
+ engines: {node: '>=14'}
+
+ fraction.js@5.3.4:
+ resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
+
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ fuse.js@7.3.0:
+ resolution: {integrity: sha512-plz8RVjfcDedTGfVngWH1jmJvBvAwi1v2jecfDerbEnMcmOYUEEwKFTHbNoCiYyzaK2Ws8lABkTCcRSqCY1q4w==}
+ engines: {node: '>=10'}
+
+ fzf@0.5.2:
+ resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==}
+
+ gensync@1.0.0-beta.2:
+ resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
+ engines: {node: '>=6.9.0'}
+
+ get-caller-file@2.0.5:
+ resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
+ engines: {node: 6.* || 8.* || >= 10.*}
+
+ get-east-asian-width@1.5.0:
+ resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==}
+ engines: {node: '>=18'}
+
+ get-port-please@3.2.0:
+ resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==}
+
+ get-stream@8.0.1:
+ resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
+ engines: {node: '>=16'}
+
+ get-tsconfig@4.14.0:
+ resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
+
+ giget@3.2.0:
+ resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==}
+ hasBin: true
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ glob@10.5.0:
+ resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
+ deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
+ hasBin: true
+
+ glob@13.0.6:
+ resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
+ engines: {node: 18 || 20 || >=22}
+
+ global-directory@4.0.1:
+ resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
+ engines: {node: '>=18'}
+
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
+ engines: {node: '>=18'}
+
+ globals@17.5.0:
+ resolution: {integrity: sha512-qoV+HK2yFl/366t2/Cb3+xxPUo5BuMynomoDmiaZBIdbs+0pYbjfZU+twLhGKp4uCZ/+NbtpVepH5bGCxRyy2g==}
+ engines: {node: '>=18'}
+
+ globby@16.2.0:
+ resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==}
+ engines: {node: '>=20'}
+
+ graceful-fs@4.2.11:
+ resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
+
+ gzip-size@7.0.0:
+ resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ h3@1.15.11:
+ resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==}
+
+ hasown@2.0.3:
+ resolution: {integrity: sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg==}
+ engines: {node: '>= 0.4'}
+
+ hookable@5.5.3:
+ resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
+
+ hookable@6.1.1:
+ resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
+
+ html-entities@2.6.0:
+ resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
+
+ http-errors@2.0.1:
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
+
+ http-shutdown@1.2.2:
+ resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+
+ https-proxy-agent@7.0.6:
+ resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
+ engines: {node: '>= 14'}
+
+ httpxy@0.5.1:
+ resolution: {integrity: sha512-JPhqYiixe1A1I+MXDewWDZqeudBGU8Q9jCHYN8ML+779RQzLjTi78HBvWz4jMxUD6h2/vUL12g4q/mFM0OUw1A==}
+
+ human-signals@5.0.0:
+ resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
+ engines: {node: '>=16.17.0'}
+
+ ieee754@1.2.1:
+ resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ ignore@7.0.5:
+ resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
+ engines: {node: '>= 4'}
+
+ image-meta@0.2.2:
+ resolution: {integrity: sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==}
+
+ import-without-cache@0.3.3:
+ resolution: {integrity: sha512-bDxwDdF04gm550DfZHgffvlX+9kUlcz32UD0AeBTmVPFiWkrexF2XVmiuFFbDhiFuP8fQkrkvI2KdSNPYWAXkQ==}
+ engines: {node: '>=20.19.0'}
+
+ impound@1.1.5:
+ resolution: {integrity: sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ indent-string@5.0.0:
+ resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
+ engines: {node: '>=12'}
+
+ inherits@2.0.4:
+ resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
+
+ ini@4.1.1:
+ resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
+ engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
+
+ ioredis@5.10.1:
+ resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==}
+ engines: {node: '>=12.22.0'}
+
+ iron-webcrypto@1.2.1:
+ resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
+
+ is-builtin-module@5.0.0:
+ resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
+ engines: {node: '>=18.20'}
+
+ is-core-module@2.16.1:
+ resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
+ engines: {node: '>= 0.4'}
+
+ is-docker@3.0.0:
+ resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ hasBin: true
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-fullwidth-code-point@3.0.0:
+ resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
+ engines: {node: '>=8'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-in-ssh@1.0.0:
+ resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
+ engines: {node: '>=20'}
+
+ is-inside-container@1.0.0:
+ resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
+ engines: {node: '>=14.16'}
+ hasBin: true
+
+ is-installed-globally@1.0.0:
+ resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==}
+ engines: {node: '>=18'}
+
+ is-module@1.0.0:
+ resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-path-inside@4.0.0:
+ resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
+ engines: {node: '>=12'}
+
+ is-reference@1.2.1:
+ resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
+
+ is-stream@2.0.1:
+ resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
+ engines: {node: '>=8'}
+
+ is-stream@3.0.0:
+ resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ is-what@5.5.0:
+ resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
+ engines: {node: '>=18'}
+
+ is-wsl@3.1.1:
+ resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
+ engines: {node: '>=16'}
+
+ isarray@1.0.0:
+ resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ isexe@4.0.0:
+ resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==}
+ engines: {node: '>=20'}
+
+ jackspeak@3.4.3:
+ resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
+
+ jiti@2.6.1:
+ resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
+ hasBin: true
+
+ js-tokens@4.0.0:
+ resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
+
+ js-tokens@9.0.1:
+ resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+
+ js-yaml@4.1.1:
+ resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
+ hasBin: true
+
+ jsdoc-type-pratt-parser@7.2.0:
+ resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==}
+ engines: {node: '>=20.0.0'}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-schema-to-typescript-lite@15.0.0:
+ resolution: {integrity: sha512-5mMORSQm9oTLyjM4mWnyNBi2T042Fhg1/0gCIB6X8U/LVpM2A+Nmj2yEyArqVouDmFThDxpEXcnTgSrjkGJRFA==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ json5@2.2.3:
+ resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ kleur@4.1.5:
+ resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
+ engines: {node: '>=6'}
+
+ klona@2.0.6:
+ resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
+ engines: {node: '>= 8'}
+
+ knitwork@1.3.0:
+ resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
+
+ launch-editor@2.13.2:
+ resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==}
+
+ lazystream@1.0.1:
+ resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
+ engines: {node: '>= 0.6.3'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ lilconfig@3.1.3:
+ resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
+ engines: {node: '>=14'}
+
+ listhen@1.9.1:
+ resolution: {integrity: sha512-4EhoyVcXEpNlY5HJRSQpH7Rba94M8N2JmI62ePjl0lrJKXSfG0F1FAgHGxBoz/T3pe41sUEwkIRRIcaUL0/Ofw==}
+ hasBin: true
+
+ load-tsconfig@0.2.5:
+ resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ local-pkg@1.1.2:
+ resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
+ engines: {node: '>=14'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ locate-path@8.0.0:
+ resolution: {integrity: sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==}
+ engines: {node: '>=20'}
+
+ lodash.defaults@4.2.0:
+ resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
+
+ lodash.isarguments@3.1.0:
+ resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
+
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
+ lodash.uniq@4.5.0:
+ resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+
+ lodash@4.18.1:
+ resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
+
+ lru-cache@10.4.3:
+ resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
+
+ lru-cache@11.3.5:
+ resolution: {integrity: sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==}
+ engines: {node: 20 || >=22}
+
+ lru-cache@5.1.1:
+ resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
+
+ magic-regexp@0.10.0:
+ resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==}
+
+ magic-string-ast@1.0.3:
+ resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==}
+ engines: {node: '>=20.19.0'}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ magicast@0.5.2:
+ resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==}
+
+ mdn-data@2.0.28:
+ resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
+
+ mdn-data@2.27.1:
+ resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
+
+ merge-stream@2.0.0:
+ resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
+ mime-types@3.0.2:
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
+
+ mime@4.1.0:
+ resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ mimic-fn@4.0.0:
+ resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
+ engines: {node: '>=12'}
+
+ minimatch@10.2.5:
+ resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
+ engines: {node: 18 || 20 || >=22}
+
+ minimatch@5.1.9:
+ resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
+ engines: {node: '>=10'}
+
+ minimatch@9.0.9:
+ resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minipass@7.1.3:
+ resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
+ engines: {node: '>=16 || 14 >=14.17'}
+
+ minizlib@3.1.0:
+ resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
+ engines: {node: '>= 18'}
+
+ mitt@3.0.1:
+ resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
+
+ mlly@1.8.2:
+ resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
+
+ mocked-exports@0.1.1:
+ resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==}
+
+ mrmime@2.0.1:
+ resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
+ engines: {node: '>=10'}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ muggle-string@0.4.1:
+ resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+
+ nanoid@3.3.11:
+ resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ nanotar@0.3.0:
+ resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==}
+
+ napi-postinstall@0.3.4:
+ resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
+ engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
+ hasBin: true
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ nitropack@2.13.3:
+ resolution: {integrity: sha512-C8vO7RxkU0AQ3HbYUumuG6MVM5JjRaBchke/rYFOp3EvrLtTBHZYhDVGECdpa27vNuOYRzm3GtQMn2YDOjDJLA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ xml2js: ^0.6.2
+ peerDependenciesMeta:
+ xml2js:
+ optional: true
+
+ node-addon-api@7.1.1:
+ resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
+
+ node-fetch-native@1.6.7:
+ resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
+
+ node-fetch@2.7.0:
+ resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
+ engines: {node: 4.x || >=6.0.0}
+ peerDependencies:
+ encoding: ^0.1.0
+ peerDependenciesMeta:
+ encoding:
+ optional: true
+
+ node-forge@1.4.0:
+ resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==}
+ 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.4:
+ resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
+
+ node-releases@2.0.38:
+ resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==}
+
+ nopt@8.1.0:
+ resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+ hasBin: true
+
+ normalize-path@3.0.0:
+ resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
+ engines: {node: '>=0.10.0'}
+
+ npm-run-path@5.3.0:
+ resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ npm-run-path@6.0.0:
+ resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
+ engines: {node: '>=18'}
+
+ nth-check@2.1.1:
+ resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
+
+ nuxt@4.4.2:
+ resolution: {integrity: sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@parcel/watcher': ^2.1.0
+ '@types/node': '>=18.12.0'
+ peerDependenciesMeta:
+ '@parcel/watcher':
+ optional: true
+ '@types/node':
+ optional: true
+
+ nypm@0.6.6:
+ resolution: {integrity: sha512-vRyr0r4cbBapw07Xw8xrj9Teq3o7MUD35rSaTcanDbW+aK2XHDgJFiU6ZTj2GBw7Q12ysdsyFss+Vdz4hQ0Y6Q==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ object-deep-merge@2.0.0:
+ resolution: {integrity: sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==}
+
+ obug@2.1.1:
+ resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
+
+ ofetch@1.5.1:
+ resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
+
+ ofetch@2.0.0-alpha.3:
+ resolution: {integrity: sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA==}
+
+ ohash@2.0.11:
+ resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
+
+ on-change@6.0.2:
+ resolution: {integrity: sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w==}
+ engines: {node: '>=20'}
+
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
+ onetime@6.0.0:
+ resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
+ engines: {node: '>=12'}
+
+ open@10.2.0:
+ resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
+ engines: {node: '>=18'}
+
+ open@11.0.0:
+ resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==}
+ engines: {node: '>=20'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ oxc-minify@0.117.0:
+ resolution: {integrity: sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-parser@0.117.0:
+ resolution: {integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-transform@0.117.0:
+ resolution: {integrity: sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxc-walker@0.7.0:
+ resolution: {integrity: sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==}
+ peerDependencies:
+ oxc-parser: '>=0.98.0'
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ p-locate@6.0.0:
+ resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ package-json-from-dist@1.0.1:
+ resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
+
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
+
+ parse-imports-exports@0.2.4:
+ resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
+
+ parse-statements@1.0.11:
+ resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
+
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ path-key@4.0.0:
+ resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
+ engines: {node: '>=12'}
+
+ path-parse@1.0.7:
+ resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
+
+ path-scurry@1.11.1:
+ resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
+ engines: {node: '>=16 || 14 >=14.18'}
+
+ path-scurry@2.0.2:
+ resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
+ engines: {node: 18 || 20 || >=22}
+
+ pathe@1.1.2:
+ resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ perfect-debounce@1.0.0:
+ resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
+
+ perfect-debounce@2.1.0:
+ resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.2:
+ resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
+ pinia@3.0.4:
+ resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==}
+ peerDependencies:
+ typescript: '>=4.5.0'
+ vue: ^3.5.11
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ pkg-types@1.3.1:
+ resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
+
+ pkg-types@2.3.0:
+ resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
+
+ pluralize@8.0.0:
+ resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
+ engines: {node: '>=4'}
+
+ postcss-calc@10.1.1:
+ resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
+ engines: {node: ^18.12 || ^20.9 || >=22.0}
+ peerDependencies:
+ postcss: ^8.4.38
+
+ postcss-colormin@7.0.9:
+ resolution: {integrity: sha512-EZpoUlmbXQUpe+g4ZaGM2kjGlHrQ7Bjzb3xHcNrC9ysI1tGoib6DAYvxg6aB7MGxsjgLF+Qx/jwZQkJ5cKDvXA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-convert-values@7.0.11:
+ resolution: {integrity: sha512-H+s7P0f9jJylSysAHs3/5MhAx7GthDO05uw1h56L2xyEqpiLTFLEqBNw3PUYzD5p/AKwWaigCXf6FGELpOw9lw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-discard-comments@7.0.7:
+ resolution: {integrity: sha512-FJhE3fSte7HaRNL4iwD8LTG9vWqj3puxXIdig6LfrFqc1TJRUhY4kXOkeTXZZfTXYny+k+SO7fd2fymj1wduJg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-discard-duplicates@7.0.3:
+ resolution: {integrity: sha512-9cRxXwhEM/aNZon1qZyToX4NmjbFbxOGbww+0CnbYFDbbPRGZ8jg4IbM8UlA+CzkXxM35itxyaHKNqBBg/RTDg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-discard-empty@7.0.2:
+ resolution: {integrity: sha512-NZFouOmOwtngJVgkNeI1LtkzFdYqIurxgy4wq3qNvIiXFURTZ3b/K7q3dP3QitlWQ5imHDQL0qSorItQhoxb1g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-discard-overridden@7.0.2:
+ resolution: {integrity: sha512-Ym01X4v6U3sY8X0P1J9P+RTar+7JyLTOzDrxKSeaArFsLmkVu4KcAKPBWDYRIyZ/q4jwpSPnOnekeSSqXSXKUw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-merge-longhand@7.0.6:
+ resolution: {integrity: sha512-lDsWeKRsssX/9vKFpingoRiuvGajtOGCJhs1kyaTJ5fzaVzs0aPPYe38UZ/ukMFEA5iuRIjQJHIkH2niYO3ubQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-merge-rules@7.0.10:
+ resolution: {integrity: sha512-UXYKxkg8Cy1so/evF7AE/25PNXZb3E0SrvjdbtbGf+MW+doLenKqRLQzz6YZW469ktiXK2MVLFWtel/DftCV0Q==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-minify-font-values@7.0.2:
+ resolution: {integrity: sha512-Z82NUmnvhPrvMUaHfkaAVBmWQq9F8Dox4Dy0LiwbaTxfmDUWLQtS+0WCgKViwdWCPPajiY9YzoQftgqKdXkM5g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-minify-gradients@7.0.4:
+ resolution: {integrity: sha512-g8MNeNyN+lbwKy8DCtJ6zU6awBL0InBsSOaKmgZ1MdRLVItLQUNFNAzzzBnOp4qowOcyyB6GetTlQ0/0UNXvag==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-minify-params@7.0.8:
+ resolution: {integrity: sha512-DIUKM5DZGTmxN7KFKT+rxt0FdPDmRrdK/k3n3+6Po+N/QYn06juwagHcfOVBG0CfCHwcnI612GAUCZc3eT+ZEg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-minify-selectors@7.1.0:
+ resolution: {integrity: sha512-HYl/6I0aL+UvpA10t65BSa7h+tVjBgE6oRI5N/3ylX3vtwvlDL67G3FT3vYDPnTksxr0riiyJcT0tBtyRVoloA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-charset@7.0.2:
+ resolution: {integrity: sha512-YoINoiR4YKlzfB95Y93b0DSxWy7FLw+1SADIaznMHb88AKizpzfF80tolmiDEbYr1UM4r4Hw+NZq37SwT5f3uw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-display-values@7.0.2:
+ resolution: {integrity: sha512-wu/NTSjnp8sX5TnEHVPN+eScjAtRs18ELtEduG+Ek3GxjeUDUT+VAA3PJjVIXBcVIk6fiLYFj2iKH0q99S3T2Q==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-positions@7.0.3:
+ resolution: {integrity: sha512-1CJI++oA3yK/fQlPUcEngUfcSWS08Pkt9fK+jVgL53mmtHDBHi0YiuB0m3D9BXwZjmfvCc2GQmFqCAF/CVcPzQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-repeat-style@7.0.3:
+ resolution: {integrity: sha512-RvImJ2Ml4LZSx31qC2C8LDiz65IgBNATtwEr9r3Aue+D0cCGbj4rjNojb/uGpEm4QxnOTzFqMvaDYuKiT1Cmpg==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-string@7.0.2:
+ resolution: {integrity: sha512-FqtrUh2BU2MnVeLeWBbJ2rwOjuDnA91XvoImc1BbgMWIxdxiPTaquflBHsmFBA3xh3pC3wPZO9W5MaIc7wU/Xw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-timing-functions@7.0.2:
+ resolution: {integrity: sha512-5H5fpXBnMACEXzn7k9RP7qWZ1eWg8cuZkUuFygStY7icOj+UucwMWXeMmdkF/iITvTVa7fP85tdRCJeznpdFfQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-unicode@7.0.8:
+ resolution: {integrity: sha512-imCM3cwK3hvlAG4z1AzYM24m8BPA3/Jk/S71wfbn2I6+E2b+UwFaGvlNqydihXTSl3OFPeQXztqCzg+NGeSibQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-url@7.0.2:
+ resolution: {integrity: sha512-bLnNY7t76NLRb9QQyCVmCN4qwoHxiq6vABH/CXav9wTuR6dNGHGQ72AyO/+h2quWxZk3l7BqxNL1vtDi9H6y1g==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-normalize-whitespace@7.0.2:
+ resolution: {integrity: sha512-TNSVkuhkeOhl36WruQlflxOb7HweoeZowSusNpfsM1+ZvqJ24Mc+xksu05ecMQxlu+0zgI8pyznO2EWqDCQbLA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-ordered-values@7.0.3:
+ resolution: {integrity: sha512-FTt6R9RF7NAYfpOHa2XFPm89FVuo5GiIbcfwOXFy1MYF38BeiNW9ke8ybw9Pk62eEsUlRVVbxHWA3B7ERYqOOA==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-reduce-initial@7.0.8:
+ resolution: {integrity: sha512-VeVRmbgpgTZuRcDQdqnsB4iYTeS2dBRV07UdwK6V3x61F1xTQ2pgIzHBIR4rQYRlXRNKBTGYYhEL1eNA7w9vaQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-reduce-transforms@7.0.2:
+ resolution: {integrity: sha512-OV5P9hMnf7kEkeXVXyS5ESqxbIls7a3TqFymUAV5JICO/9YCBEU+QQhQjZiDHaLwFdV7/CL481kVeBUk5FdY3w==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-selector-parser@7.1.1:
+ resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
+ engines: {node: '>=4'}
+
+ postcss-svgo@7.1.2:
+ resolution: {integrity: sha512-ixExc8m+/68yuSYQzV/1DgtTup/7nI2dN9eiDS5GMRUzeCH4q9UcqeZPwcSVhdf8ay9fRwXDUHwcY5/XzQSszQ==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-unique-selectors@7.0.6:
+ resolution: {integrity: sha512-cDxnYw1QuBMW5w3svZ0BlYF0IA4Amr+1JoTLXzu6vDFPNwohN2QU+sPZNx15b930LR7ce+/600h28/cYoxO9vw==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ postcss-value-parser@4.2.0:
+ resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
+
+ postcss@8.5.10:
+ resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ powershell-utils@0.1.0:
+ resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
+ engines: {node: '>=20'}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ pretty-bytes@7.1.0:
+ resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==}
+ engines: {node: '>=20'}
+
+ process-nextick-args@2.0.1:
+ resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+
+ process@0.11.10:
+ resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
+ engines: {node: '>= 0.6.0'}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ quansync@0.2.11:
+ resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
+
+ quansync@1.0.0:
+ resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ radix3@1.1.2:
+ resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
+
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
+ rc9@3.0.1:
+ resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
+
+ readable-stream@2.3.8:
+ resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+
+ readable-stream@4.7.0:
+ resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ readdir-glob@1.1.3:
+ resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
+
+ readdirp@4.1.2:
+ resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
+ engines: {node: '>= 14.18.0'}
+
+ readdirp@5.0.0:
+ resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
+ engines: {node: '>= 20.19.0'}
+
+ redis-errors@1.2.0:
+ resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
+ engines: {node: '>=4'}
+
+ redis-parser@3.0.0:
+ resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
+ engines: {node: '>=4'}
+
+ refa@0.12.1:
+ resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ regexp-ast-analysis@0.7.1:
+ resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ regexp-tree@0.1.27:
+ resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
+ hasBin: true
+
+ regjsparser@0.13.1:
+ resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==}
+ hasBin: true
+
+ reserved-identifiers@1.2.0:
+ resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
+ engines: {node: '>=18'}
+
+ resolve-from@5.0.0:
+ resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
+ engines: {node: '>=8'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ resolve@1.22.12:
+ resolution: {integrity: sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==}
+ engines: {node: '>= 0.4'}
+ hasBin: true
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+
+ rolldown-plugin-dts@0.23.2:
+ resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==}
+ engines: {node: '>=20.19.0'}
+ peerDependencies:
+ '@ts-macro/tsc': ^0.3.6
+ '@typescript/native-preview': '>=7.0.0-dev.20260325.1'
+ rolldown: ^1.0.0-rc.12
+ typescript: ^5.0.0 || ^6.0.0
+ vue-tsc: ~3.2.0
+ peerDependenciesMeta:
+ '@ts-macro/tsc':
+ optional: true
+ '@typescript/native-preview':
+ optional: true
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+
+ rolldown@1.0.0-rc.17:
+ resolution: {integrity: sha512-ZrT53oAKrtA4+YtBWPQbtPOxIbVDbxT0orcYERKd63VJTF13zPcgXTvD4843L8pcsI7M6MErt8QtON6lrB9tyA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rollup-plugin-visualizer@7.0.1:
+ resolution: {integrity: sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==}
+ engines: {node: '>=22'}
+ hasBin: true
+ peerDependencies:
+ rolldown: 1.x || ^1.0.0-beta || ^1.0.0-rc
+ rollup: 2.x || 3.x || 4.x
+ peerDependenciesMeta:
+ rolldown:
+ optional: true
+ rollup:
+ optional: true
+
+ rollup@4.60.2:
+ resolution: {integrity: sha512-J9qZyW++QK/09NyN/zeO0dG/1GdGfyp9lV8ajHnRVLfo/uFsbji5mHnDgn/qYdUHyCkM2N+8VyspgZclfAh0eQ==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+
+ rou3@0.8.1:
+ resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
+
+ run-applescript@7.1.0:
+ resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
+ engines: {node: '>=18'}
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-buffer@5.1.2:
+ resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
+
+ safe-buffer@5.2.1:
+ resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+
+ sax@1.6.0:
+ resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
+ engines: {node: '>=11.0.0'}
+
+ scslre@0.3.0:
+ resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
+ engines: {node: ^14.0.0 || >=16.0.0}
+
+ scule@1.3.0:
+ resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+
+ semver@6.3.1:
+ resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
+ hasBin: true
+
+ semver@7.7.4:
+ resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ send@1.2.1:
+ resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
+ engines: {node: '>= 18'}
+
+ serialize-javascript@7.0.5:
+ resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==}
+ engines: {node: '>=20.0.0'}
+
+ seroval@1.5.2:
+ resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==}
+ engines: {node: '>=10'}
+
+ serve-placeholder@2.0.2:
+ resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==}
+
+ serve-static@2.2.1:
+ resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
+ engines: {node: '>= 18'}
+
+ setprototypeof@1.2.0:
+ resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ shell-quote@1.8.3:
+ resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
+ engines: {node: '>= 0.4'}
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ signal-exit@4.1.0:
+ resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
+ engines: {node: '>=14'}
+
+ simple-git@3.36.0:
+ resolution: {integrity: sha512-cGQjLjK8bxJw4QuYT7gxHw3/IouVESbhahSsHrX97MzCL1gu2u7oy38W6L2ZIGECEfIBG4BabsWDPjBxJENv9Q==}
+
+ sirv@3.0.2:
+ resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
+ engines: {node: '>=18'}
+
+ sisteransi@1.0.5:
+ resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
+
+ slash@5.1.0:
+ resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
+ engines: {node: '>=14.16'}
+
+ smob@1.6.1:
+ resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==}
+ engines: {node: '>=20.0.0'}
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ source-map-support@0.5.21:
+ resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
+
+ source-map@0.6.1:
+ resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
+ engines: {node: '>=0.10.0'}
+
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@4.0.0:
+ resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
+
+ spdx-license-ids@3.0.23:
+ resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
+
+ speakingurl@14.0.1:
+ resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
+ engines: {node: '>=0.10.0'}
+
+ srvx@0.11.15:
+ resolution: {integrity: sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg==}
+ engines: {node: '>=20.16.0'}
+ hasBin: true
+
+ stable-hash-x@0.2.0:
+ resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
+ engines: {node: '>=12.0.0'}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ standard-as-callback@2.1.0:
+ resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
+
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
+ std-env@3.10.0:
+ resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
+
+ std-env@4.1.0:
+ resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==}
+
+ streamx@2.25.0:
+ resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==}
+
+ string-width@4.2.3:
+ resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
+ engines: {node: '>=8'}
+
+ string-width@5.1.2:
+ resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
+ engines: {node: '>=12'}
+
+ string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+
+ string_decoder@1.1.1:
+ resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
+
+ string_decoder@1.3.0:
+ resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
+
+ strip-ansi@6.0.1:
+ resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
+ engines: {node: '>=8'}
+
+ strip-ansi@7.2.0:
+ resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
+ engines: {node: '>=12'}
+
+ strip-final-newline@3.0.0:
+ resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
+ engines: {node: '>=12'}
+
+ strip-indent@4.1.1:
+ resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
+ engines: {node: '>=12'}
+
+ strip-literal@3.1.0:
+ resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
+
+ structured-clone-es@2.0.0:
+ resolution: {integrity: sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q==}
+
+ stylehacks@7.0.10:
+ resolution: {integrity: sha512-sRJ7klmhe/Fl5woJcbJUa2qP1Ueffsl1CQI4ePvqXLkZmcIuAt09aP9uT/FOFPqXh9Rh8M5UkgEnwTdTKn/Aag==}
+ engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
+ peerDependencies:
+ postcss: ^8.5.10
+
+ superjson@2.2.6:
+ resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==}
+ engines: {node: '>=16'}
+
+ supports-color@10.2.2:
+ resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
+ engines: {node: '>=18'}
+
+ supports-preserve-symlinks-flag@1.0.0:
+ resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
+ engines: {node: '>= 0.4'}
+
+ svgo@4.0.1:
+ resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==}
+ engines: {node: '>=16'}
+ hasBin: true
+
+ tagged-tag@1.0.0:
+ resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
+ engines: {node: '>=20'}
+
+ tailwindcss@4.2.4:
+ resolution: {integrity: sha512-HhKppgO81FQof5m6TEnuBWCZGgfRAWbaeOaGT00KOy/Pf/j6oUihdvBpA7ltCeAvZpFhW3j0PTclkxsd4IXYDA==}
+
+ tapable@2.3.3:
+ resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==}
+ engines: {node: '>=6'}
+
+ tar-stream@3.1.8:
+ resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==}
+
+ tar@7.5.13:
+ resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==}
+ engines: {node: '>=18'}
+
+ teex@1.0.1:
+ resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
+
+ terser@5.46.2:
+ resolution: {integrity: sha512-uxfo9fPcSgLDYob/w1FuL0c99MWiJDnv+5qXSQc5+Ki5NjVNsYi66INnMFBjf6uFz6OnX12piJQPF4IpjJTNTw==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ text-decoder@1.2.7:
+ resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
+
+ tiny-invariant@1.3.3:
+ resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyclip@0.1.12:
+ resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==}
+ engines: {node: ^16.14.0 || >= 17.3.0}
+
+ tinyexec@1.1.1:
+ resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==}
+ engines: {node: '>=18'}
+
+ tinyglobby@0.2.16:
+ resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
+ engines: {node: '>=12.0.0'}
+
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
+ engines: {node: '>=14.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ to-valid-identifier@1.0.0:
+ resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
+ engines: {node: '>=20'}
+
+ toidentifier@1.0.1:
+ resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
+ engines: {node: '>=0.6'}
+
+ totalist@3.0.1:
+ resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
+ engines: {node: '>=6'}
+
+ tr46@0.0.3:
+ resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
+
+ tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+
+ ts-api-utils@2.5.0:
+ resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
+ engines: {node: '>=18.12'}
+ peerDependencies:
+ typescript: '>=4.8.4'
+
+ tsdown@0.21.10:
+ resolution: {integrity: sha512-3wk73yBhZe/wX7REqSdivNQ84TDs1mJ+IlnzrrEREP70xlJ/AEIzqaI04l/TzMKVIdkTdC3CPaADn2Lk/0SkdA==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+ peerDependencies:
+ '@arethetypeswrong/core': ^0.18.1
+ '@tsdown/css': 0.21.10
+ '@tsdown/exe': 0.21.10
+ '@vitejs/devtools': '*'
+ publint: ^0.3.0
+ typescript: ^5.0.0 || ^6.0.0
+ unplugin-unused: ^0.5.0
+ peerDependenciesMeta:
+ '@arethetypeswrong/core':
+ optional: true
+ '@tsdown/css':
+ optional: true
+ '@tsdown/exe':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ publint:
+ optional: true
+ typescript:
+ optional: true
+ unplugin-unused:
+ optional: true
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ type-fest@5.6.0:
+ resolution: {integrity: sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==}
+ engines: {node: '>=20'}
+
+ type-level-regexp@0.1.17:
+ resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==}
+
+ typescript@6.0.3:
+ resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ ufo@1.6.3:
+ resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
+
+ ultrahtml@1.6.0:
+ resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==}
+
+ unconfig-core@7.5.0:
+ resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
+
+ uncrypto@0.1.3:
+ resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
+
+ unctx@2.5.0:
+ resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==}
+
+ undici-types@7.19.2:
+ resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
+
+ unenv@2.0.0-rc.24:
+ resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
+
+ unhead@2.1.13:
+ resolution: {integrity: sha512-jO9M1sI6b2h/1KpIu4Jeu+ptumLmUKboRRLxys5pYHFeT+lqTzfNHbYUX9bxVDhC1FBszAGuWcUVlmvIPsah8Q==}
+
+ unicorn-magic@0.3.0:
+ resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
+ engines: {node: '>=18'}
+
+ unicorn-magic@0.4.0:
+ resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==}
+ engines: {node: '>=20'}
+
+ unimport@5.7.0:
+ resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==}
+ engines: {node: '>=18.12.0'}
+
+ unimport@6.1.1:
+ resolution: {integrity: sha512-ZY3adHF8WFSaiF1O+Eqtltt4wMZPGQ+WWLtnbc31TxglU/dx7q8B66kvXdfyGTWA25X8OO00X9b9iyLzrWOZmw==}
+ engines: {node: '>=18.12.0'}
+
+ unplugin-utils@0.3.1:
+ resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==}
+ engines: {node: '>=20.19.0'}
+
+ unplugin@2.3.11:
+ resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
+ engines: {node: '>=18.12.0'}
+
+ unplugin@3.0.0:
+ resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ unrouting@0.1.7:
+ resolution: {integrity: sha512-+0hfD+CVWtD636rc5Fn9VEjjTEDhdqgMpbwAuVoUmydSHDaMNiFW93SJG4LV++RoGSEAyvQN5uABAscYpDphpQ==}
+
+ unrs-resolver@1.11.1:
+ resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
+
+ unrun@0.2.37:
+ resolution: {integrity: sha512-AA7vDuYsgeSYVzJMm16UKA+aXFKhy7nFqW9z5l7q44K4ppFWZAMqYS58ePRZbugMLPH0fwwMzD5A8nP0avxwZQ==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+ peerDependencies:
+ synckit: ^0.11.11
+ peerDependenciesMeta:
+ synckit:
+ optional: true
+
+ unstorage@1.17.5:
+ resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==}
+ peerDependencies:
+ '@azure/app-configuration': ^1.8.0
+ '@azure/cosmos': ^4.2.0
+ '@azure/data-tables': ^13.3.0
+ '@azure/identity': ^4.6.0
+ '@azure/keyvault-secrets': ^4.9.0
+ '@azure/storage-blob': ^12.26.0
+ '@capacitor/preferences': ^6 || ^7 || ^8
+ '@deno/kv': '>=0.9.0'
+ '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0
+ '@planetscale/database': ^1.19.0
+ '@upstash/redis': ^1.34.3
+ '@vercel/blob': '>=0.27.1'
+ '@vercel/functions': ^2.2.12 || ^3.0.0
+ '@vercel/kv': ^1 || ^2 || ^3
+ aws4fetch: ^1.0.20
+ db0: '>=0.2.1'
+ idb-keyval: ^6.2.1
+ ioredis: ^5.4.2
+ uploadthing: ^7.4.4
+ peerDependenciesMeta:
+ '@azure/app-configuration':
+ optional: true
+ '@azure/cosmos':
+ optional: true
+ '@azure/data-tables':
+ optional: true
+ '@azure/identity':
+ optional: true
+ '@azure/keyvault-secrets':
+ optional: true
+ '@azure/storage-blob':
+ optional: true
+ '@capacitor/preferences':
+ optional: true
+ '@deno/kv':
+ optional: true
+ '@netlify/blobs':
+ optional: true
+ '@planetscale/database':
+ optional: true
+ '@upstash/redis':
+ optional: true
+ '@vercel/blob':
+ optional: true
+ '@vercel/functions':
+ optional: true
+ '@vercel/kv':
+ optional: true
+ aws4fetch:
+ optional: true
+ db0:
+ optional: true
+ idb-keyval:
+ optional: true
+ ioredis:
+ optional: true
+ uploadthing:
+ optional: true
+
+ untun@0.1.3:
+ resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==}
+ hasBin: true
+
+ untyped@2.0.0:
+ resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==}
+ hasBin: true
+
+ unwasm@0.5.3:
+ resolution: {integrity: sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==}
+
+ update-browserslist-db@1.2.3:
+ resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+
+ uqr@0.1.3:
+ resolution: {integrity: sha512-0rjE8iEJe4YmT9TOhwsZtqCMRLc5DXZUI2UEYUUg63ikBkqqE5EYWaI0etFe/5KUcmcYwLih2RND1kq+hrUJXA==}
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ vite-dev-rpc@1.1.0:
+ resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==}
+ peerDependencies:
+ vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0
+
+ vite-hot-client@2.1.0:
+ resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==}
+ peerDependencies:
+ vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
+
+ vite-node@5.3.0:
+ resolution: {integrity: sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ vite-plugin-checker@0.12.0:
+ resolution: {integrity: sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==}
+ engines: {node: '>=16.11'}
+ peerDependencies:
+ '@biomejs/biome': '>=1.7'
+ eslint: '>=9.39.1'
+ meow: ^13.2.0
+ optionator: ^0.9.4
+ oxlint: '>=1'
+ stylelint: '>=16'
+ typescript: '*'
+ vite: '>=5.4.21'
+ vls: '*'
+ vti: '*'
+ vue-tsc: ~2.2.10 || ^3.0.0
+ peerDependenciesMeta:
+ '@biomejs/biome':
+ optional: true
+ eslint:
+ optional: true
+ meow:
+ optional: true
+ optionator:
+ optional: true
+ oxlint:
+ optional: true
+ stylelint:
+ optional: true
+ typescript:
+ optional: true
+ vls:
+ optional: true
+ vti:
+ optional: true
+ vue-tsc:
+ optional: true
+
+ vite-plugin-inspect@11.3.3:
+ resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ '@nuxt/kit': '*'
+ vite: ^6.0.0 || ^7.0.0-0
+ peerDependenciesMeta:
+ '@nuxt/kit':
+ optional: true
+
+ vite-plugin-vue-tracer@1.3.0:
+ resolution: {integrity: sha512-Cgfce6VikzOw5MUJTpeg50s5rRjzU1Vr61ZjuHunVVHLjZZ5AUlgyExHthZ3r59vtoz9W2rDt23FYG81avYBKw==}
+ peerDependencies:
+ vite: ^6.0.0 || ^7.0.0
+ vue: ^3.5.0
+
+ vite@7.3.2:
+ resolution: {integrity: sha512-Bby3NOsna2jsjfLVOHKes8sGwgl4TT0E6vvpYgnAYDIF/tie7MRaFthmKuHx1NSXjiTueXH3do80FMQgvEktRg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ lightningcss: ^1.21.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@4.1.5:
+ resolution: {integrity: sha512-9Xx1v3/ih3m9hN+SbfkUyy0JAs72ap3r7joc87XL6jwF0jGg6mFBvQ1SrwaX+h8BlkX6Hz9shdd1uo6AF+ZGpg==}
+ 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.1.5
+ '@vitest/browser-preview': 4.1.5
+ '@vitest/browser-webdriverio': 4.1.5
+ '@vitest/coverage-istanbul': 4.1.5
+ '@vitest/coverage-v8': 4.1.5
+ '@vitest/ui': 4.1.5
+ happy-dom: '*'
+ jsdom: '*'
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ vscode-uri@3.1.0:
+ resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
+
+ vue-bundle-renderer@2.2.0:
+ resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==}
+
+ vue-devtools-stub@0.1.0:
+ resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
+
+ vue-eslint-parser@10.4.0:
+ resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
+
+ vue-router@5.0.6:
+ resolution: {integrity: sha512-9+kmUTGbKMyW9Asoy98IXXYIzrTMT7JDAdpDDeEkorHvybpUvBI2wsrSM5jFOXrFydpzRFJ9vAh+80DN2PGu9w==}
+ peerDependencies:
+ '@pinia/colada': '>=0.21.2'
+ '@vue/compiler-sfc': ^3.5.17
+ pinia: ^3.0.4
+ vue: ^3.5.0
+ peerDependenciesMeta:
+ '@pinia/colada':
+ optional: true
+ '@vue/compiler-sfc':
+ optional: true
+ pinia:
+ optional: true
+
+ vue@3.5.33:
+ resolution: {integrity: sha512-1AgChhx5w3ALgT4oK3acm2Es/7jyZhWSVUfs3rOBlGQC0rjEDkS7G4lWlJJGGNQD+BV3reCwbQrOe1mPNwKHBQ==}
+ peerDependencies:
+ typescript: '*'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
+ webidl-conversions@3.0.1:
+ resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
+ whatwg-url@5.0.0:
+ resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ which@6.0.1:
+ resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==}
+ engines: {node: ^20.17.0 || >=22.9.0}
+ hasBin: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ wrap-ansi@7.0.0:
+ resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
+ engines: {node: '>=10'}
+
+ wrap-ansi@8.1.0:
+ resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
+ engines: {node: '>=12'}
+
+ wrap-ansi@9.0.2:
+ resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
+ engines: {node: '>=18'}
+
+ ws@8.20.0:
+ resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
+ engines: {node: '>=10.0.0'}
+ peerDependencies:
+ bufferutil: ^4.0.1
+ utf-8-validate: '>=5.0.2'
+ peerDependenciesMeta:
+ bufferutil:
+ optional: true
+ utf-8-validate:
+ optional: true
+
+ wsl-utils@0.1.0:
+ resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
+ engines: {node: '>=18'}
+
+ wsl-utils@0.3.1:
+ resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==}
+ engines: {node: '>=20'}
+
+ xml-name-validator@4.0.0:
+ resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
+ engines: {node: '>=12'}
+
+ y18n@5.0.8:
+ resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
+ engines: {node: '>=10'}
+
+ yallist@3.1.1:
+ resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
+
+ yallist@5.0.0:
+ resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
+ engines: {node: '>=18'}
+
+ yaml@2.8.3:
+ resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+ yargs-parser@22.0.0:
+ resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+ yargs@18.0.0:
+ resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=23}
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+ yocto-queue@1.2.2:
+ resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
+ engines: {node: '>=12.20'}
+
+ youch-core@0.3.3:
+ resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
+
+ youch@4.1.1:
+ resolution: {integrity: sha512-mxW3qiSnl+GRxXsaUMzv2Mbada1Y8CDltET9UxejDQe6DBYlSekghl5U5K0ReAikcHDi0G1vKZEmmo/NWAGKLA==}
+
+ zip-stream@6.0.1:
+ resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
+ engines: {node: '>= 14'}
+
+snapshots:
+
+ '@antfu/install-pkg@1.1.0':
+ dependencies:
+ package-manager-detector: 1.6.0
+ tinyexec: 1.1.1
+
+ '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)':
+ dependencies:
+ '@types/json-schema': 7.0.15
+ js-yaml: 4.1.1
+
+ '@babel/code-frame@7.29.0':
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ js-tokens: 4.0.0
+ picocolors: 1.1.1
+
+ '@babel/compat-data@7.29.0': {}
+
+ '@babel/core@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-compilation-targets': 7.28.6
+ '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
+ '@babel/helpers': 7.29.2
+ '@babel/parser': 7.29.2
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@jridgewell/remapping': 2.3.5
+ convert-source-map: 2.0.0
+ debug: 4.4.3
+ gensync: 1.0.0-beta.2
+ json5: 2.2.3
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/generator@7.29.1':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ jsesc: 3.1.0
+
+ '@babel/generator@8.0.0-rc.3':
+ dependencies:
+ '@babel/parser': 8.0.0-rc.3
+ '@babel/types': 8.0.0-rc.3
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/jsesc': 2.5.1
+ jsesc: 3.1.0
+
+ '@babel/helper-annotate-as-pure@7.27.3':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/helper-compilation-targets@7.28.6':
+ dependencies:
+ '@babel/compat-data': 7.29.0
+ '@babel/helper-validator-option': 7.27.1
+ browserslist: 4.28.2
+ lru-cache: 5.1.1
+ semver: 6.3.1
+
+ '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/traverse': 7.29.0
+ semver: 6.3.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-globals@7.28.0': {}
+
+ '@babel/helper-member-expression-to-functions@7.28.5':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-imports@7.28.6':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-validator-identifier': 7.28.5
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-optimise-call-expression@7.27.1':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/helper-plugin-utils@7.28.6': {}
+
+ '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-member-expression-to-functions': 7.28.5
+ '@babel/helper-optimise-call-expression': 7.27.1
+ '@babel/traverse': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
+ dependencies:
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/helper-string-parser@7.27.1': {}
+
+ '@babel/helper-string-parser@8.0.0-rc.3': {}
+
+ '@babel/helper-validator-identifier@7.28.5': {}
+
+ '@babel/helper-validator-identifier@8.0.0-rc.3': {}
+
+ '@babel/helper-validator-option@7.27.1': {}
+
+ '@babel/helpers@7.29.2':
+ dependencies:
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+
+ '@babel/parser@7.29.2':
+ dependencies:
+ '@babel/types': 7.29.0
+
+ '@babel/parser@8.0.0-rc.3':
+ dependencies:
+ '@babel/types': 8.0.0-rc.3
+
+ '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-plugin-utils': 7.28.6
+
+ '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/helper-annotate-as-pure': 7.27.3
+ '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/template@7.28.6':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+
+ '@babel/traverse@7.29.0':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/generator': 7.29.1
+ '@babel/helper-globals': 7.28.0
+ '@babel/parser': 7.29.2
+ '@babel/template': 7.28.6
+ '@babel/types': 7.29.0
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@babel/types@7.29.0':
+ dependencies:
+ '@babel/helper-string-parser': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
+
+ '@babel/types@8.0.0-rc.3':
+ dependencies:
+ '@babel/helper-string-parser': 8.0.0-rc.3
+ '@babel/helper-validator-identifier': 8.0.0-rc.3
+
+ '@bomb.sh/tab@0.0.14(cac@6.7.14)(citty@0.2.2)':
+ optionalDependencies:
+ cac: 6.7.14
+ citty: 0.2.2
+
+ '@clack/core@1.2.0':
+ dependencies:
+ fast-wrap-ansi: 0.1.6
+ sisteransi: 1.0.5
+
+ '@clack/prompts@1.2.0':
+ dependencies:
+ '@clack/core': 1.2.0
+ fast-string-width: 1.1.0
+ fast-wrap-ansi: 0.1.6
+ sisteransi: 1.0.5
+
+ '@cloudflare/kv-asset-handler@0.4.2': {}
+
+ '@colordx/core@5.4.2': {}
+
+ '@dxup/nuxt@0.4.1(magicast@0.5.2)(typescript@6.0.3)':
+ dependencies:
+ '@dxup/unimport': 0.1.2
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ chokidar: 5.0.0
+ pathe: 2.0.3
+ tinyglobby: 0.2.16
+ optionalDependencies:
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - magicast
+
+ '@dxup/unimport@0.1.2': {}
+
+ '@emnapi/core@1.10.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.10.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@es-joy/jsdoccomment@0.86.0':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@typescript-eslint/types': 8.59.0
+ comment-parser: 1.4.6
+ esquery: 1.7.0
+ jsdoc-type-pratt-parser: 7.2.0
+
+ '@es-joy/resolve.exports@1.2.0': {}
+
+ '@esbuild/aix-ppc64@0.27.7':
+ optional: true
+
+ '@esbuild/android-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/android-arm@0.27.7':
+ optional: true
+
+ '@esbuild/android-x64@0.27.7':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/darwin-x64@0.27.7':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-arm@0.27.7':
+ optional: true
+
+ '@esbuild/linux-ia32@0.27.7':
+ optional: true
+
+ '@esbuild/linux-loong64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.27.7':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.27.7':
+ optional: true
+
+ '@esbuild/linux-s390x@0.27.7':
+ optional: true
+
+ '@esbuild/linux-x64@0.27.7':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.27.7':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/sunos-x64@0.27.7':
+ optional: true
+
+ '@esbuild/win32-arm64@0.27.7':
+ optional: true
+
+ '@esbuild/win32-ia32@0.27.7':
+ optional: true
+
+ '@esbuild/win32-x64@0.27.7':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.9.1(eslint@10.2.1(jiti@2.6.1))':
+ dependencies:
+ eslint: 10.2.1(jiti@2.6.1)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.2': {}
+
+ '@eslint/compat@2.0.5(eslint@10.2.1(jiti@2.6.1))':
+ dependencies:
+ '@eslint/core': 1.2.1
+ optionalDependencies:
+ eslint: 10.2.1(jiti@2.6.1)
+
+ '@eslint/config-array@0.23.5':
+ dependencies:
+ '@eslint/object-schema': 3.0.5
+ debug: 4.4.3
+ minimatch: 10.2.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.5.5':
+ dependencies:
+ '@eslint/core': 1.2.1
+
+ '@eslint/config-inspector@1.5.0(eslint@10.2.1(jiti@2.6.1))':
+ dependencies:
+ ansis: 4.2.0
+ bundle-require: 5.1.0(esbuild@0.27.7)
+ cac: 7.0.0
+ chokidar: 5.0.0
+ esbuild: 0.27.7
+ eslint: 10.2.1(jiti@2.6.1)
+ h3: 1.15.11
+ tinyglobby: 0.2.16
+ ws: 8.20.0
+ transitivePeerDependencies:
+ - bufferutil
+ - utf-8-validate
+
+ '@eslint/core@1.2.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/js@9.39.4': {}
+
+ '@eslint/object-schema@3.0.5': {}
+
+ '@eslint/plugin-kit@0.7.1':
+ dependencies:
+ '@eslint/core': 1.2.1
+ levn: 0.4.1
+
+ '@humanfs/core@0.19.2':
+ dependencies:
+ '@humanfs/types': 0.15.0
+
+ '@humanfs/node@0.16.8':
+ dependencies:
+ '@humanfs/core': 0.19.2
+ '@humanfs/types': 0.15.0
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanfs/types@0.15.0': {}
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@ioredis/commands@1.5.1': {}
+
+ '@isaacs/cliui@8.0.2':
+ dependencies:
+ string-width: 5.1.2
+ string-width-cjs: string-width@4.2.3
+ strip-ansi: 7.2.0
+ strip-ansi-cjs: strip-ansi@6.0.1
+ wrap-ansi: 8.1.0
+ wrap-ansi-cjs: wrap-ansi@7.0.0
+
+ '@isaacs/fs-minipass@4.0.1':
+ dependencies:
+ minipass: 7.1.3
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/source-map@0.3.11':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@kwsites/file-exists@1.1.1':
+ dependencies:
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@kwsites/promise-deferred@1.1.1': {}
+
+ '@mapbox/node-pre-gyp@2.0.3':
+ dependencies:
+ consola: 3.4.2
+ detect-libc: 2.1.2
+ https-proxy-agent: 7.0.6
+ node-fetch: 2.7.0
+ nopt: 8.1.0
+ semver: 7.7.4
+ tar: 7.5.13
+ transitivePeerDependencies:
+ - encoding
+ - supports-color
+
+ '@napi-rs/wasm-runtime@0.2.12':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@tybys/wasm-util': 0.10.1
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
+
+ '@nuxt/cli@3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)':
+ dependencies:
+ '@bomb.sh/tab': 0.0.14(cac@6.7.14)(citty@0.2.2)
+ '@clack/prompts': 1.2.0
+ c12: 3.3.4(magicast@0.5.2)
+ citty: 0.2.2
+ confbox: 0.2.4
+ consola: 3.4.2
+ debug: 4.4.3
+ defu: 6.1.7
+ exsolve: 1.0.8
+ fuse.js: 7.3.0
+ fzf: 0.5.2
+ giget: 3.2.0
+ jiti: 2.6.1
+ listhen: 1.9.1(srvx@0.11.15)
+ nypm: 0.6.6
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.0
+ scule: 1.3.0
+ semver: 7.7.4
+ srvx: 0.11.15
+ std-env: 3.10.0
+ tinyclip: 0.1.12
+ tinyexec: 1.1.1
+ ufo: 1.6.3
+ youch: 4.1.1
+ optionalDependencies:
+ '@nuxt/schema': 4.4.2
+ transitivePeerDependencies:
+ - cac
+ - commander
+ - magicast
+ - supports-color
+
+ '@nuxt/devalue@2.0.2': {}
+
+ '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ dependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ execa: 8.0.1
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ transitivePeerDependencies:
+ - magicast
+
+ '@nuxt/devtools-wizard@3.2.4':
+ dependencies:
+ '@clack/prompts': 1.2.0
+ consola: 3.4.2
+ diff: 8.0.4
+ execa: 8.0.1
+ magicast: 0.5.2
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ semver: 7.7.4
+
+ '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-wizard': 3.2.4
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@vue/devtools-core': 8.1.1(vue@3.5.33(typescript@6.0.3))
+ '@vue/devtools-kit': 8.1.1
+ birpc: 4.0.0
+ consola: 3.4.2
+ destr: 2.0.5
+ error-stack-parser-es: 1.0.5
+ execa: 8.0.1
+ fast-npm-meta: 1.5.0
+ get-port-please: 3.2.0
+ hookable: 6.1.1
+ image-meta: 0.2.2
+ is-installed-globally: 1.0.0
+ launch-editor: 2.13.2
+ local-pkg: 1.1.2
+ magicast: 0.5.2
+ nypm: 0.6.6
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.0
+ semver: 7.7.4
+ simple-git: 3.36.0
+ sirv: 3.0.2
+ structured-clone-es: 2.0.0
+ tinyglobby: 0.2.16
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ which: 6.0.1
+ ws: 8.20.0
+ transitivePeerDependencies:
+ - bufferutil
+ - supports-color
+ - utf-8-validate
+ - vue
+
+ '@nuxt/eslint-config@1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)':
+ dependencies:
+ '@antfu/install-pkg': 1.1.0
+ '@clack/prompts': 1.2.0
+ '@eslint/js': 9.39.4
+ '@nuxt/eslint-plugin': 1.15.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ '@stylistic/eslint-plugin': 5.10.0(eslint@10.2.1(jiti@2.6.1))
+ '@typescript-eslint/eslint-plugin': 8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ eslint: 10.2.1(jiti@2.6.1)
+ eslint-config-flat-gitignore: 2.3.0(eslint@10.2.1(jiti@2.6.1))
+ eslint-flat-config-utils: 3.1.0
+ eslint-merge-processors: 2.0.0(eslint@10.2.1(jiti@2.6.1))
+ eslint-plugin-import-lite: 0.5.2(eslint@10.2.1(jiti@2.6.1))
+ eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))
+ eslint-plugin-jsdoc: 62.9.0(eslint@10.2.1(jiti@2.6.1))
+ eslint-plugin-regexp: 3.1.0(eslint@10.2.1(jiti@2.6.1))
+ eslint-plugin-unicorn: 63.0.0(eslint@10.2.1(jiti@2.6.1))
+ eslint-plugin-vue: 10.9.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.1(jiti@2.6.1)))(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.1(jiti@2.6.1)))
+ eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))
+ globals: 17.5.0
+ local-pkg: 1.1.2
+ pathe: 2.0.3
+ vue-eslint-parser: 10.4.0(eslint@10.2.1(jiti@2.6.1))
+ transitivePeerDependencies:
+ - '@typescript-eslint/utils'
+ - '@vue/compiler-sfc'
+ - eslint-import-resolver-node
+ - supports-color
+ - typescript
+
+ '@nuxt/eslint-plugin@1.15.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ eslint: 10.2.1(jiti@2.6.1)
+ transitivePeerDependencies:
+ - supports-color
+ - typescript
+
+ '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ dependencies:
+ '@eslint/config-inspector': 1.5.0(eslint@10.2.1(jiti@2.6.1))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ '@nuxt/eslint-plugin': 1.15.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ chokidar: 5.0.0
+ eslint: 10.2.1(jiti@2.6.1)
+ eslint-flat-config-utils: 3.1.0
+ eslint-typegen: 2.3.1(eslint@10.2.1(jiti@2.6.1))
+ find-up: 8.0.0
+ get-port-please: 3.2.0
+ mlly: 1.8.2
+ pathe: 2.0.3
+ unimport: 5.7.0
+ transitivePeerDependencies:
+ - '@typescript-eslint/utils'
+ - '@vue/compiler-sfc'
+ - bufferutil
+ - eslint-import-resolver-node
+ - eslint-plugin-format
+ - magicast
+ - supports-color
+ - typescript
+ - utf-8-validate
+ - vite
+
+ '@nuxt/kit@4.4.2(magicast@0.5.2)':
+ dependencies:
+ c12: 3.3.4(magicast@0.5.2)
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ errx: 0.1.0
+ exsolve: 1.0.8
+ ignore: 7.0.5
+ jiti: 2.6.1
+ klona: 2.0.6
+ mlly: 1.8.2
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ rc9: 3.0.1
+ scule: 1.3.0
+ semver: 7.7.4
+ tinyglobby: 0.2.16
+ ufo: 1.6.3
+ unctx: 2.5.0
+ untyped: 2.0.0
+ transitivePeerDependencies:
+ - magicast
+
+ '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.17)(srvx@0.11.15)(typescript@6.0.3)':
+ dependencies:
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ '@nuxt/devalue': 2.0.2
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ '@vue/shared': 3.5.33
+ consola: 3.4.2
+ defu: 6.1.7
+ destr: 2.0.5
+ devalue: 5.7.1
+ errx: 0.1.0
+ escape-string-regexp: 5.0.0
+ exsolve: 1.0.8
+ h3: 1.15.11
+ impound: 1.1.5
+ klona: 2.0.6
+ mocked-exports: 0.1.1
+ nitropack: 2.13.3(rolldown@1.0.0-rc.17)(srvx@0.11.15)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3)
+ nypm: 0.6.6
+ ohash: 2.0.11
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ rou3: 0.8.1
+ std-env: 4.1.0
+ ufo: 1.6.3
+ unctx: 2.5.0
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1)
+ vue: 3.5.33(typescript@6.0.3)
+ vue-bundle-renderer: 2.2.0
+ vue-devtools-stub: 0.1.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@babel/core'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - db0
+ - drizzle-orm
+ - encoding
+ - idb-keyval
+ - ioredis
+ - magicast
+ - mysql2
+ - react-native-b4a
+ - rolldown
+ - sqlite3
+ - srvx
+ - supports-color
+ - typescript
+ - uploadthing
+ - xml2js
+
+ '@nuxt/schema@4.4.2':
+ dependencies:
+ '@vue/shared': 3.5.33
+ defu: 6.1.7
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ std-env: 4.1.0
+
+ '@nuxt/telemetry@2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))':
+ dependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ citty: 0.2.2
+ consola: 3.4.2
+ ofetch: 2.0.0-alpha.3
+ rc9: 3.0.1
+ std-env: 4.1.0
+
+ '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@10.2.1(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))(yaml@2.8.3)':
+ dependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.60.2)
+ '@vitejs/plugin-vue': 6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ autoprefixer: 10.5.0(postcss@8.5.10)
+ consola: 3.4.2
+ cssnano: 7.1.7(postcss@8.5.10)
+ defu: 6.1.7
+ escape-string-regexp: 5.0.0
+ exsolve: 1.0.8
+ get-port-please: 3.2.0
+ jiti: 2.6.1
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ mocked-exports: 0.1.1
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3)
+ nypm: 0.6.6
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+ postcss: 8.5.10
+ seroval: 1.5.2
+ std-env: 4.1.0
+ ufo: 1.6.3
+ unenv: 2.0.0-rc.24
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-node: 5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-plugin-checker: 0.12.0(eslint@10.2.1(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vue: 3.5.33(typescript@6.0.3)
+ vue-bundle-renderer: 2.2.0
+ optionalDependencies:
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ rolldown: 1.0.0-rc.17
+ rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2)
+ transitivePeerDependencies:
+ - '@biomejs/biome'
+ - '@types/node'
+ - eslint
+ - less
+ - lightningcss
+ - magicast
+ - meow
+ - optionator
+ - oxlint
+ - rollup
+ - sass
+ - sass-embedded
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - vls
+ - vti
+ - vue-tsc
+ - yaml
+
+ '@oxc-minify/binding-android-arm-eabi@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-android-arm64@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-arm64@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-darwin-x64@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-freebsd-x64@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-arm64-musl@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-linux-x64-musl@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ optional: true
+
+ '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
+ optional: true
+
+ '@oxc-minify/binding-win32-x64-msvc@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm-eabi@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm64@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-arm64@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-x64@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-freebsd-x64@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ optional: true
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-x64-msvc@0.117.0':
+ optional: true
+
+ '@oxc-project/types@0.117.0': {}
+
+ '@oxc-project/types@0.127.0': {}
+
+ '@oxc-transform/binding-android-arm-eabi@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-android-arm64@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-darwin-arm64@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-darwin-x64@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-freebsd-x64@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-arm64-musl@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-x64-gnu@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-linux-x64-musl@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-openharmony-arm64@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-wasm32-wasi@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ optional: true
+
+ '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
+ optional: true
+
+ '@oxc-transform/binding-win32-x64-msvc@0.117.0':
+ optional: true
+
+ '@package-json/types@0.0.12': {}
+
+ '@parcel/watcher-android-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-darwin-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-darwin-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-freebsd-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-arm64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-glibc@2.5.6':
+ optional: true
+
+ '@parcel/watcher-linux-x64-musl@2.5.6':
+ optional: true
+
+ '@parcel/watcher-wasm@2.5.6':
+ dependencies:
+ is-glob: 4.0.3
+ picomatch: 4.0.4
+
+ '@parcel/watcher-win32-arm64@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-ia32@2.5.6':
+ optional: true
+
+ '@parcel/watcher-win32-x64@2.5.6':
+ optional: true
+
+ '@parcel/watcher@2.5.6':
+ dependencies:
+ detect-libc: 2.1.2
+ is-glob: 4.0.3
+ node-addon-api: 7.1.1
+ picomatch: 4.0.4
+ optionalDependencies:
+ '@parcel/watcher-android-arm64': 2.5.6
+ '@parcel/watcher-darwin-arm64': 2.5.6
+ '@parcel/watcher-darwin-x64': 2.5.6
+ '@parcel/watcher-freebsd-x64': 2.5.6
+ '@parcel/watcher-linux-arm-glibc': 2.5.6
+ '@parcel/watcher-linux-arm-musl': 2.5.6
+ '@parcel/watcher-linux-arm64-glibc': 2.5.6
+ '@parcel/watcher-linux-arm64-musl': 2.5.6
+ '@parcel/watcher-linux-x64-glibc': 2.5.6
+ '@parcel/watcher-linux-x64-musl': 2.5.6
+ '@parcel/watcher-win32-arm64': 2.5.6
+ '@parcel/watcher-win32-ia32': 2.5.6
+ '@parcel/watcher-win32-x64': 2.5.6
+
+ '@pinia/nuxt@0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))':
+ dependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ pinia: 3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))
+ transitivePeerDependencies:
+ - magicast
+
+ '@pkgjs/parseargs@0.11.0':
+ optional: true
+
+ '@polka/url@1.0.0-next.29': {}
+
+ '@poppinss/colors@4.1.6':
+ dependencies:
+ kleur: 4.1.5
+
+ '@poppinss/dumper@0.7.0':
+ dependencies:
+ '@poppinss/colors': 4.1.6
+ '@sindresorhus/is': 7.2.0
+ supports-color: 10.2.2
+
+ '@poppinss/exception@1.2.3': {}
+
+ '@quansync/fs@1.0.0':
+ dependencies:
+ quansync: 1.0.0
+
+ '@rolldown/binding-android-arm64@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.0-rc.17':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.0-rc.17':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.0-rc.13': {}
+
+ '@rolldown/pluginutils@1.0.0-rc.17': {}
+
+ '@rollup/plugin-alias@6.0.0(rollup@4.60.2)':
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/plugin-commonjs@29.0.2(rollup@4.60.2)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
+ commondir: 1.0.1
+ estree-walker: 2.0.2
+ fdir: 6.5.0(picomatch@4.0.4)
+ is-reference: 1.2.1
+ magic-string: 0.30.21
+ picomatch: 4.0.4
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/plugin-inject@5.0.5(rollup@4.60.2)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/plugin-json@6.1.0(rollup@4.60.2)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.2)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
+ '@types/resolve': 1.20.2
+ deepmerge: 4.3.1
+ is-module: 1.0.0
+ resolve: 1.22.12
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/plugin-replace@6.0.3(rollup@4.60.2)':
+ dependencies:
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
+ magic-string: 0.30.21
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/plugin-terser@1.0.0(rollup@4.60.2)':
+ dependencies:
+ serialize-javascript: 7.0.5
+ smob: 1.6.1
+ terser: 5.46.2
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/pluginutils@5.3.0(rollup@4.60.2)':
+ dependencies:
+ '@types/estree': 1.0.8
+ estree-walker: 2.0.2
+ picomatch: 4.0.4
+ optionalDependencies:
+ rollup: 4.60.2
+
+ '@rollup/rollup-android-arm-eabi@4.60.2':
+ optional: true
+
+ '@rollup/rollup-android-arm64@4.60.2':
+ optional: true
+
+ '@rollup/rollup-darwin-arm64@4.60.2':
+ optional: true
+
+ '@rollup/rollup-darwin-x64@4.60.2':
+ optional: true
+
+ '@rollup/rollup-freebsd-arm64@4.60.2':
+ optional: true
+
+ '@rollup/rollup-freebsd-x64@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-gnueabihf@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm-musleabihf@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-gnu@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-arm64-musl@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-gnu@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-loong64-musl@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-gnu@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-ppc64-musl@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-gnu@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-riscv64-musl@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-s390x-gnu@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-gnu@4.60.2':
+ optional: true
+
+ '@rollup/rollup-linux-x64-musl@4.60.2':
+ optional: true
+
+ '@rollup/rollup-openbsd-x64@4.60.2':
+ optional: true
+
+ '@rollup/rollup-openharmony-arm64@4.60.2':
+ optional: true
+
+ '@rollup/rollup-win32-arm64-msvc@4.60.2':
+ optional: true
+
+ '@rollup/rollup-win32-ia32-msvc@4.60.2':
+ optional: true
+
+ '@rollup/rollup-win32-x64-gnu@4.60.2':
+ optional: true
+
+ '@rollup/rollup-win32-x64-msvc@4.60.2':
+ optional: true
+
+ '@simple-git/args-pathspec@1.0.3': {}
+
+ '@simple-git/argv-parser@1.1.1':
+ dependencies:
+ '@simple-git/args-pathspec': 1.0.3
+
+ '@sindresorhus/base62@1.0.0': {}
+
+ '@sindresorhus/is@7.2.0': {}
+
+ '@sindresorhus/merge-streams@4.0.0': {}
+
+ '@speed-highlight/core@1.2.15': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@stylistic/eslint-plugin@5.10.0(eslint@10.2.1(jiti@2.6.1))':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
+ '@typescript-eslint/types': 8.59.0
+ eslint: 10.2.1(jiti@2.6.1)
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ estraverse: 5.3.0
+ picomatch: 4.0.4
+
+ '@tailwindcss/node@4.2.4':
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ enhanced-resolve: 5.21.0
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+ magic-string: 0.30.21
+ source-map-js: 1.2.1
+ tailwindcss: 4.2.4
+
+ '@tailwindcss/oxide-android-arm64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-arm64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-darwin-x64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-freebsd-x64@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-gnu@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-arm64-musl@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-gnu@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-linux-x64-musl@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-wasm32-wasi@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-win32-arm64-msvc@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide-win32-x64-msvc@4.2.4':
+ optional: true
+
+ '@tailwindcss/oxide@4.2.4':
+ optionalDependencies:
+ '@tailwindcss/oxide-android-arm64': 4.2.4
+ '@tailwindcss/oxide-darwin-arm64': 4.2.4
+ '@tailwindcss/oxide-darwin-x64': 4.2.4
+ '@tailwindcss/oxide-freebsd-x64': 4.2.4
+ '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.4
+ '@tailwindcss/oxide-linux-arm64-gnu': 4.2.4
+ '@tailwindcss/oxide-linux-arm64-musl': 4.2.4
+ '@tailwindcss/oxide-linux-x64-gnu': 4.2.4
+ '@tailwindcss/oxide-linux-x64-musl': 4.2.4
+ '@tailwindcss/oxide-wasm32-wasi': 4.2.4
+ '@tailwindcss/oxide-win32-arm64-msvc': 4.2.4
+ '@tailwindcss/oxide-win32-x64-msvc': 4.2.4
+
+ '@tailwindcss/vite@4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ dependencies:
+ '@tailwindcss/node': 4.2.4
+ '@tailwindcss/oxide': 4.2.4
+ tailwindcss: 4.2.4
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+
+ '@tybys/wasm-util@0.10.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/esrecurse@4.3.1': {}
+
+ '@types/estree@1.0.8': {}
+
+ '@types/jsesc@2.5.1': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@25.6.0':
+ dependencies:
+ undici-types: 7.19.2
+
+ '@types/resolve@1.20.2': {}
+
+ '@typescript-eslint/eslint-plugin@8.59.0(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)':
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/type-utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.59.0
+ eslint: 10.2.1(jiti@2.6.1)
+ ignore: 7.0.5
+ natural-compare: 1.4.0
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/visitor-keys': 8.59.0
+ debug: 4.4.3
+ eslint: 10.2.1(jiti@2.6.1)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/project-service@8.59.0(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/types': 8.59.0
+ debug: 4.4.3
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/scope-manager@8.59.0':
+ dependencies:
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/visitor-keys': 8.59.0
+
+ '@typescript-eslint/tsconfig-utils@8.59.0(typescript@6.0.3)':
+ dependencies:
+ typescript: 6.0.3
+
+ '@typescript-eslint/type-utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ debug: 4.4.3
+ eslint: 10.2.1(jiti@2.6.1)
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/types@8.59.0': {}
+
+ '@typescript-eslint/typescript-estree@8.59.0(typescript@6.0.3)':
+ dependencies:
+ '@typescript-eslint/project-service': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/tsconfig-utils': 8.59.0(typescript@6.0.3)
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/visitor-keys': 8.59.0
+ debug: 4.4.3
+ minimatch: 10.2.5
+ semver: 7.7.4
+ tinyglobby: 0.2.16
+ ts-api-utils: 2.5.0(typescript@6.0.3)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
+ '@typescript-eslint/scope-manager': 8.59.0
+ '@typescript-eslint/types': 8.59.0
+ '@typescript-eslint/typescript-estree': 8.59.0(typescript@6.0.3)
+ eslint: 10.2.1(jiti@2.6.1)
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - supports-color
+
+ '@typescript-eslint/visitor-keys@8.59.0':
+ dependencies:
+ '@typescript-eslint/types': 8.59.0
+ eslint-visitor-keys: 5.0.1
+
+ '@unhead/vue@2.1.13(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ hookable: 6.1.1
+ unhead: 2.1.13
+ vue: 3.5.33(typescript@6.0.3)
+
+ '@unrs/resolver-binding-android-arm-eabi@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-android-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-arm64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-darwin-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-freebsd-x64@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-linux-x64-musl@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-wasm32-wasi@1.11.1':
+ dependencies:
+ '@napi-rs/wasm-runtime': 0.2.12
+ optional: true
+
+ '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
+ optional: true
+
+ '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
+ optional: true
+
+ '@vercel/nft@1.5.0(rollup@4.60.2)':
+ dependencies:
+ '@mapbox/node-pre-gyp': 2.0.3
+ '@rollup/pluginutils': 5.3.0(rollup@4.60.2)
+ acorn: 8.16.0
+ acorn-import-attributes: 1.9.5(acorn@8.16.0)
+ async-sema: 3.1.1
+ bindings: 1.5.0
+ estree-walker: 2.0.2
+ glob: 13.0.6
+ graceful-fs: 4.2.11
+ node-gyp-build: 4.8.4
+ picomatch: 4.0.4
+ resolve-from: 5.0.0
+ transitivePeerDependencies:
+ - encoding
+ - rollup
+ - supports-color
+
+ '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@babel/core': 7.29.0
+ '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
+ '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
+ '@rolldown/pluginutils': 1.0.0-rc.17
+ '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vue: 3.5.33(typescript@6.0.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vitejs/plugin-vue@6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@rolldown/pluginutils': 1.0.0-rc.13
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vue: 3.5.33(typescript@6.0.3)
+
+ '@vitest/expect@4.1.5':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.1.5
+ '@vitest/utils': 4.1.5
+ chai: 6.2.2
+ tinyrainbow: 3.1.0
+
+ '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ dependencies:
+ '@vitest/spy': 4.1.5
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+
+ '@vitest/pretty-format@4.1.5':
+ dependencies:
+ tinyrainbow: 3.1.0
+
+ '@vitest/runner@4.1.5':
+ dependencies:
+ '@vitest/utils': 4.1.5
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.1.5':
+ dependencies:
+ '@vitest/pretty-format': 4.1.5
+ '@vitest/utils': 4.1.5
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@4.1.5': {}
+
+ '@vitest/utils@4.1.5':
+ dependencies:
+ '@vitest/pretty-format': 4.1.5
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
+
+ '@vue-macros/common@3.1.2(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@vue/compiler-sfc': 3.5.33
+ ast-kit: 2.2.0
+ local-pkg: 1.1.2
+ magic-string-ast: 1.0.3
+ unplugin-utils: 0.3.1
+ optionalDependencies:
+ vue: 3.5.33(typescript@6.0.3)
+
+ '@vue/babel-helper-vue-transform-on@2.0.1': {}
+
+ '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
+ '@babel/template': 7.28.6
+ '@babel/traverse': 7.29.0
+ '@babel/types': 7.29.0
+ '@vue/babel-helper-vue-transform-on': 2.0.1
+ '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0)
+ '@vue/shared': 3.5.33
+ optionalDependencies:
+ '@babel/core': 7.29.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.0)':
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ '@babel/core': 7.29.0
+ '@babel/helper-module-imports': 7.28.6
+ '@babel/helper-plugin-utils': 7.28.6
+ '@babel/parser': 7.29.2
+ '@vue/compiler-sfc': 3.5.33
+ transitivePeerDependencies:
+ - supports-color
+
+ '@vue/compiler-core@3.5.33':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@vue/shared': 3.5.33
+ entities: 7.0.1
+ estree-walker: 2.0.2
+ source-map-js: 1.2.1
+
+ '@vue/compiler-dom@3.5.33':
+ dependencies:
+ '@vue/compiler-core': 3.5.33
+ '@vue/shared': 3.5.33
+
+ '@vue/compiler-sfc@3.5.33':
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@vue/compiler-core': 3.5.33
+ '@vue/compiler-dom': 3.5.33
+ '@vue/compiler-ssr': 3.5.33
+ '@vue/shared': 3.5.33
+ estree-walker: 2.0.2
+ magic-string: 0.30.21
+ postcss: 8.5.10
+ source-map-js: 1.2.1
+
+ '@vue/compiler-ssr@3.5.33':
+ dependencies:
+ '@vue/compiler-dom': 3.5.33
+ '@vue/shared': 3.5.33
+
+ '@vue/devtools-api@7.7.9':
+ dependencies:
+ '@vue/devtools-kit': 7.7.9
+
+ '@vue/devtools-api@8.1.1':
+ dependencies:
+ '@vue/devtools-kit': 8.1.1
+
+ '@vue/devtools-core@8.1.1(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@vue/devtools-kit': 8.1.1
+ '@vue/devtools-shared': 8.1.1
+ vue: 3.5.33(typescript@6.0.3)
+
+ '@vue/devtools-kit@7.7.9':
+ dependencies:
+ '@vue/devtools-shared': 7.7.9
+ birpc: 2.9.0
+ hookable: 5.5.3
+ mitt: 3.0.1
+ perfect-debounce: 1.0.0
+ speakingurl: 14.0.1
+ superjson: 2.2.6
+
+ '@vue/devtools-kit@8.1.1':
+ dependencies:
+ '@vue/devtools-shared': 8.1.1
+ birpc: 2.9.0
+ hookable: 5.5.3
+ perfect-debounce: 2.1.0
+
+ '@vue/devtools-shared@7.7.9':
+ dependencies:
+ rfdc: 1.4.1
+
+ '@vue/devtools-shared@8.1.1': {}
+
+ '@vue/reactivity@3.5.33':
+ dependencies:
+ '@vue/shared': 3.5.33
+
+ '@vue/runtime-core@3.5.33':
+ dependencies:
+ '@vue/reactivity': 3.5.33
+ '@vue/shared': 3.5.33
+
+ '@vue/runtime-dom@3.5.33':
+ dependencies:
+ '@vue/reactivity': 3.5.33
+ '@vue/runtime-core': 3.5.33
+ '@vue/shared': 3.5.33
+ csstype: 3.2.3
+
+ '@vue/server-renderer@3.5.33(vue@3.5.33(typescript@6.0.3))':
+ dependencies:
+ '@vue/compiler-ssr': 3.5.33
+ '@vue/shared': 3.5.33
+ vue: 3.5.33(typescript@6.0.3)
+
+ '@vue/shared@3.5.33': {}
+
+ abbrev@3.0.1: {}
+
+ abort-controller@3.0.0:
+ dependencies:
+ event-target-shim: 5.0.1
+
+ acorn-import-attributes@1.9.5(acorn@8.16.0):
+ dependencies:
+ acorn: 8.16.0
+
+ acorn-jsx@5.3.2(acorn@8.16.0):
+ dependencies:
+ acorn: 8.16.0
+
+ acorn@8.16.0: {}
+
+ agent-base@7.1.4: {}
+
+ ajv@6.15.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-regex@5.0.1: {}
+
+ ansi-regex@6.2.2: {}
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansi-styles@6.2.3: {}
+
+ ansis@4.2.0: {}
+
+ anymatch@3.1.3:
+ dependencies:
+ normalize-path: 3.0.0
+ picomatch: 2.3.2
+
+ archiver-utils@5.0.2:
+ dependencies:
+ glob: 10.5.0
+ graceful-fs: 4.2.11
+ is-stream: 2.0.1
+ lazystream: 1.0.1
+ lodash: 4.18.1
+ normalize-path: 3.0.0
+ readable-stream: 4.7.0
+
+ archiver@7.0.1:
+ dependencies:
+ archiver-utils: 5.0.2
+ async: 3.2.6
+ buffer-crc32: 1.0.0
+ readable-stream: 4.7.0
+ readdir-glob: 1.1.3
+ tar-stream: 3.1.8
+ zip-stream: 6.0.1
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
+
+ are-docs-informative@0.0.2: {}
+
+ argparse@2.0.1: {}
+
+ assertion-error@2.0.1: {}
+
+ ast-kit@2.2.0:
+ dependencies:
+ '@babel/parser': 7.29.2
+ pathe: 2.0.3
+
+ ast-kit@3.0.0-beta.1:
+ dependencies:
+ '@babel/parser': 8.0.0-rc.3
+ estree-walker: 3.0.3
+ pathe: 2.0.3
+
+ ast-walker-scope@0.8.3:
+ dependencies:
+ '@babel/parser': 7.29.2
+ ast-kit: 2.2.0
+
+ async-sema@3.1.1: {}
+
+ async@3.2.6: {}
+
+ autoprefixer@10.5.0(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ caniuse-lite: 1.0.30001790
+ fraction.js: 5.3.4
+ picocolors: 1.1.1
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ b4a@1.8.0: {}
+
+ balanced-match@1.0.2: {}
+
+ balanced-match@4.0.4: {}
+
+ bare-events@2.8.2: {}
+
+ bare-fs@4.7.1:
+ dependencies:
+ bare-events: 2.8.2
+ bare-path: 3.0.0
+ bare-stream: 2.13.0(bare-events@2.8.2)
+ bare-url: 2.4.2
+ fast-fifo: 1.3.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ bare-os@3.9.0: {}
+
+ bare-path@3.0.0:
+ dependencies:
+ bare-os: 3.9.0
+
+ bare-stream@2.13.0(bare-events@2.8.2):
+ dependencies:
+ streamx: 2.25.0
+ teex: 1.0.1
+ optionalDependencies:
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - react-native-b4a
+
+ bare-url@2.4.2:
+ dependencies:
+ bare-path: 3.0.0
+
+ base64-js@1.5.1: {}
+
+ baseline-browser-mapping@2.10.21: {}
+
+ bindings@1.5.0:
+ dependencies:
+ file-uri-to-path: 1.0.0
+
+ birpc@2.9.0: {}
+
+ birpc@4.0.0: {}
+
+ boolbase@1.0.0: {}
+
+ brace-expansion@2.1.0:
+ dependencies:
+ balanced-match: 1.0.2
+
+ brace-expansion@5.0.5:
+ dependencies:
+ balanced-match: 4.0.4
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ browserslist@4.28.2:
+ dependencies:
+ baseline-browser-mapping: 2.10.21
+ caniuse-lite: 1.0.30001790
+ electron-to-chromium: 1.5.344
+ node-releases: 2.0.38
+ update-browserslist-db: 1.2.3(browserslist@4.28.2)
+
+ buffer-crc32@1.0.0: {}
+
+ buffer-from@1.1.2: {}
+
+ buffer@6.0.3:
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+
+ builtin-modules@5.1.0: {}
+
+ bundle-name@4.1.0:
+ dependencies:
+ run-applescript: 7.1.0
+
+ bundle-require@5.1.0(esbuild@0.27.7):
+ dependencies:
+ esbuild: 0.27.7
+ load-tsconfig: 0.2.5
+
+ c12@3.3.4(magicast@0.5.2):
+ dependencies:
+ chokidar: 5.0.0
+ confbox: 0.2.4
+ defu: 6.1.7
+ dotenv: 17.4.2
+ exsolve: 1.0.8
+ giget: 3.2.0
+ jiti: 2.6.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.0
+ rc9: 3.0.1
+ optionalDependencies:
+ magicast: 0.5.2
+
+ cac@6.7.14: {}
+
+ cac@7.0.0: {}
+
+ caniuse-api@3.0.0:
+ dependencies:
+ browserslist: 4.28.2
+ caniuse-lite: 1.0.30001790
+ lodash.memoize: 4.1.2
+ lodash.uniq: 4.5.0
+
+ caniuse-lite@1.0.30001790: {}
+
+ chai@6.2.2: {}
+
+ change-case@5.4.4: {}
+
+ chokidar@4.0.3:
+ dependencies:
+ readdirp: 4.1.2
+
+ chokidar@5.0.0:
+ dependencies:
+ readdirp: 5.0.0
+
+ chownr@3.0.0: {}
+
+ ci-info@4.4.0: {}
+
+ citty@0.1.6:
+ dependencies:
+ consola: 3.4.2
+
+ citty@0.2.2: {}
+
+ clean-regexp@1.0.0:
+ dependencies:
+ escape-string-regexp: 1.0.5
+
+ cliui@9.0.1:
+ dependencies:
+ string-width: 7.2.0
+ strip-ansi: 7.2.0
+ wrap-ansi: 9.0.2
+
+ cluster-key-slot@1.1.2: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ commander@11.1.0: {}
+
+ commander@2.20.3: {}
+
+ comment-parser@1.4.6: {}
+
+ commondir@1.0.1: {}
+
+ compatx@0.2.0: {}
+
+ compress-commons@6.0.2:
+ dependencies:
+ crc-32: 1.2.2
+ crc32-stream: 6.0.0
+ is-stream: 2.0.1
+ normalize-path: 3.0.0
+ readable-stream: 4.7.0
+
+ confbox@0.1.8: {}
+
+ confbox@0.2.4: {}
+
+ consola@3.4.2: {}
+
+ convert-source-map@2.0.0: {}
+
+ cookie-es@1.2.3: {}
+
+ cookie-es@2.0.1: {}
+
+ cookie-es@3.1.1: {}
+
+ copy-anything@4.0.5:
+ dependencies:
+ is-what: 5.5.0
+
+ core-js-compat@3.49.0:
+ dependencies:
+ browserslist: 4.28.2
+
+ core-util-is@1.0.3: {}
+
+ crc-32@1.2.2: {}
+
+ crc32-stream@6.0.0:
+ dependencies:
+ crc-32: 1.2.2
+ readable-stream: 4.7.0
+
+ croner@10.0.1: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ crossws@0.3.5:
+ dependencies:
+ uncrypto: 0.1.3
+
+ crossws@0.4.5(srvx@0.11.15):
+ optionalDependencies:
+ srvx: 0.11.15
+
+ css-declaration-sorter@7.4.0(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+
+ css-select@5.2.2:
+ dependencies:
+ boolbase: 1.0.0
+ css-what: 6.2.2
+ domhandler: 5.0.3
+ domutils: 3.2.2
+ nth-check: 2.1.1
+
+ css-tree@2.2.1:
+ dependencies:
+ mdn-data: 2.0.28
+ source-map-js: 1.2.1
+
+ css-tree@3.2.1:
+ dependencies:
+ mdn-data: 2.27.1
+ source-map-js: 1.2.1
+
+ css-what@6.2.2: {}
+
+ cssesc@3.0.0: {}
+
+ cssnano-preset-default@7.0.15(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ css-declaration-sorter: 7.4.0(postcss@8.5.10)
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
+ postcss-calc: 10.1.1(postcss@8.5.10)
+ postcss-colormin: 7.0.9(postcss@8.5.10)
+ postcss-convert-values: 7.0.11(postcss@8.5.10)
+ postcss-discard-comments: 7.0.7(postcss@8.5.10)
+ postcss-discard-duplicates: 7.0.3(postcss@8.5.10)
+ postcss-discard-empty: 7.0.2(postcss@8.5.10)
+ postcss-discard-overridden: 7.0.2(postcss@8.5.10)
+ postcss-merge-longhand: 7.0.6(postcss@8.5.10)
+ postcss-merge-rules: 7.0.10(postcss@8.5.10)
+ postcss-minify-font-values: 7.0.2(postcss@8.5.10)
+ postcss-minify-gradients: 7.0.4(postcss@8.5.10)
+ postcss-minify-params: 7.0.8(postcss@8.5.10)
+ postcss-minify-selectors: 7.1.0(postcss@8.5.10)
+ postcss-normalize-charset: 7.0.2(postcss@8.5.10)
+ postcss-normalize-display-values: 7.0.2(postcss@8.5.10)
+ postcss-normalize-positions: 7.0.3(postcss@8.5.10)
+ postcss-normalize-repeat-style: 7.0.3(postcss@8.5.10)
+ postcss-normalize-string: 7.0.2(postcss@8.5.10)
+ postcss-normalize-timing-functions: 7.0.2(postcss@8.5.10)
+ postcss-normalize-unicode: 7.0.8(postcss@8.5.10)
+ postcss-normalize-url: 7.0.2(postcss@8.5.10)
+ postcss-normalize-whitespace: 7.0.2(postcss@8.5.10)
+ postcss-ordered-values: 7.0.3(postcss@8.5.10)
+ postcss-reduce-initial: 7.0.8(postcss@8.5.10)
+ postcss-reduce-transforms: 7.0.2(postcss@8.5.10)
+ postcss-svgo: 7.1.2(postcss@8.5.10)
+ postcss-unique-selectors: 7.0.6(postcss@8.5.10)
+
+ cssnano-utils@5.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+
+ cssnano@7.1.7(postcss@8.5.10):
+ dependencies:
+ cssnano-preset-default: 7.0.15(postcss@8.5.10)
+ lilconfig: 3.1.3
+ postcss: 8.5.10
+
+ csso@5.0.5:
+ dependencies:
+ css-tree: 2.2.1
+
+ csstype@3.2.3: {}
+
+ db0@0.3.4: {}
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ deep-is@0.1.4: {}
+
+ deepmerge@4.3.1: {}
+
+ default-browser-id@5.0.1: {}
+
+ default-browser@5.5.0:
+ dependencies:
+ bundle-name: 4.1.0
+ default-browser-id: 5.0.1
+
+ define-lazy-prop@3.0.0: {}
+
+ defu@6.1.7: {}
+
+ denque@2.1.0: {}
+
+ depd@2.0.0: {}
+
+ destr@2.0.5: {}
+
+ detect-libc@2.1.2: {}
+
+ devalue@5.7.1: {}
+
+ diff@8.0.4: {}
+
+ dom-serializer@2.0.0:
+ dependencies:
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+ entities: 4.5.0
+
+ domelementtype@2.3.0: {}
+
+ domhandler@5.0.3:
+ dependencies:
+ domelementtype: 2.3.0
+
+ domutils@3.2.2:
+ dependencies:
+ dom-serializer: 2.0.0
+ domelementtype: 2.3.0
+ domhandler: 5.0.3
+
+ dot-prop@10.1.0:
+ dependencies:
+ type-fest: 5.6.0
+
+ dotenv@17.4.2: {}
+
+ dts-resolver@2.1.3: {}
+
+ duplexer@0.1.2: {}
+
+ eastasianwidth@0.2.0: {}
+
+ ee-first@1.1.1: {}
+
+ electron-to-chromium@1.5.344: {}
+
+ emoji-regex@10.6.0: {}
+
+ emoji-regex@8.0.0: {}
+
+ emoji-regex@9.2.2: {}
+
+ empathic@2.0.0: {}
+
+ encodeurl@2.0.0: {}
+
+ enhanced-resolve@5.21.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ tapable: 2.3.3
+
+ entities@4.5.0: {}
+
+ entities@7.0.1: {}
+
+ error-stack-parser-es@1.0.5: {}
+
+ errx@0.1.0: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@2.0.0: {}
+
+ esbuild@0.27.7:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.27.7
+ '@esbuild/android-arm': 0.27.7
+ '@esbuild/android-arm64': 0.27.7
+ '@esbuild/android-x64': 0.27.7
+ '@esbuild/darwin-arm64': 0.27.7
+ '@esbuild/darwin-x64': 0.27.7
+ '@esbuild/freebsd-arm64': 0.27.7
+ '@esbuild/freebsd-x64': 0.27.7
+ '@esbuild/linux-arm': 0.27.7
+ '@esbuild/linux-arm64': 0.27.7
+ '@esbuild/linux-ia32': 0.27.7
+ '@esbuild/linux-loong64': 0.27.7
+ '@esbuild/linux-mips64el': 0.27.7
+ '@esbuild/linux-ppc64': 0.27.7
+ '@esbuild/linux-riscv64': 0.27.7
+ '@esbuild/linux-s390x': 0.27.7
+ '@esbuild/linux-x64': 0.27.7
+ '@esbuild/netbsd-arm64': 0.27.7
+ '@esbuild/netbsd-x64': 0.27.7
+ '@esbuild/openbsd-arm64': 0.27.7
+ '@esbuild/openbsd-x64': 0.27.7
+ '@esbuild/openharmony-arm64': 0.27.7
+ '@esbuild/sunos-x64': 0.27.7
+ '@esbuild/win32-arm64': 0.27.7
+ '@esbuild/win32-ia32': 0.27.7
+ '@esbuild/win32-x64': 0.27.7
+
+ escalade@3.2.0: {}
+
+ escape-html@1.0.3: {}
+
+ escape-string-regexp@1.0.5: {}
+
+ escape-string-regexp@4.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ eslint-config-flat-gitignore@2.3.0(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ '@eslint/compat': 2.0.5(eslint@10.2.1(jiti@2.6.1))
+ eslint: 10.2.1(jiti@2.6.1)
+
+ eslint-flat-config-utils@3.1.0:
+ dependencies:
+ '@eslint/config-helpers': 0.5.5
+ pathe: 2.0.3
+
+ eslint-import-context@0.1.9(unrs-resolver@1.11.1):
+ dependencies:
+ get-tsconfig: 4.14.0
+ stable-hash-x: 0.2.0
+ optionalDependencies:
+ unrs-resolver: 1.11.1
+
+ eslint-merge-processors@2.0.0(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ eslint: 10.2.1(jiti@2.6.1)
+
+ eslint-plugin-import-lite@0.5.2(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ eslint: 10.2.1(jiti@2.6.1)
+
+ eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ '@package-json/types': 0.0.12
+ '@typescript-eslint/types': 8.59.0
+ comment-parser: 1.4.6
+ debug: 4.4.3
+ eslint: 10.2.1(jiti@2.6.1)
+ eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
+ is-glob: 4.0.3
+ minimatch: 10.2.5
+ semver: 7.7.4
+ stable-hash-x: 0.2.0
+ unrs-resolver: 1.11.1
+ optionalDependencies:
+ '@typescript-eslint/utils': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-jsdoc@62.9.0(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ '@es-joy/jsdoccomment': 0.86.0
+ '@es-joy/resolve.exports': 1.2.0
+ are-docs-informative: 0.0.2
+ comment-parser: 1.4.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint: 10.2.1(jiti@2.6.1)
+ espree: 11.2.0
+ esquery: 1.7.0
+ html-entities: 2.6.0
+ object-deep-merge: 2.0.0
+ parse-imports-exports: 0.2.4
+ semver: 7.7.4
+ spdx-expression-parse: 4.0.0
+ to-valid-identifier: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-regexp@3.1.0(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
+ '@eslint-community/regexpp': 4.12.2
+ comment-parser: 1.4.6
+ eslint: 10.2.1(jiti@2.6.1)
+ jsdoc-type-pratt-parser: 7.2.0
+ refa: 0.12.1
+ regexp-ast-analysis: 0.7.1
+ scslre: 0.3.0
+
+ eslint-plugin-unicorn@63.0.0(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ '@babel/helper-validator-identifier': 7.28.5
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
+ change-case: 5.4.4
+ ci-info: 4.4.0
+ clean-regexp: 1.0.0
+ core-js-compat: 3.49.0
+ eslint: 10.2.1(jiti@2.6.1)
+ find-up-simple: 1.0.1
+ globals: 16.5.0
+ indent-string: 5.0.0
+ is-builtin-module: 5.0.0
+ jsesc: 3.1.0
+ pluralize: 8.0.0
+ regexp-tree: 0.1.27
+ regjsparser: 0.13.1
+ semver: 7.7.4
+ strip-indent: 4.1.1
+
+ eslint-plugin-vue@10.9.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.1(jiti@2.6.1)))(@typescript-eslint/parser@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(eslint@10.2.1(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.1(jiti@2.6.1))):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
+ eslint: 10.2.1(jiti@2.6.1)
+ natural-compare: 1.4.0
+ nth-check: 2.1.1
+ postcss-selector-parser: 7.1.1
+ semver: 7.7.4
+ vue-eslint-parser: 10.4.0(eslint@10.2.1(jiti@2.6.1))
+ xml-name-validator: 4.0.0
+ optionalDependencies:
+ '@stylistic/eslint-plugin': 5.10.0(eslint@10.2.1(jiti@2.6.1))
+ '@typescript-eslint/parser': 8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
+
+ eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ '@vue/compiler-sfc': 3.5.33
+ eslint: 10.2.1(jiti@2.6.1)
+
+ eslint-scope@9.1.2:
+ dependencies:
+ '@types/esrecurse': 4.3.1
+ '@types/estree': 1.0.8
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-typegen@2.3.1(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ eslint: 10.2.1(jiti@2.6.1)
+ json-schema-to-typescript-lite: 15.0.0
+ ohash: 2.0.11
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint-visitor-keys@5.0.1: {}
+
+ eslint@10.2.1(jiti@2.6.1):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.1(jiti@2.6.1))
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.23.5
+ '@eslint/config-helpers': 0.5.5
+ '@eslint/core': 1.2.1
+ '@eslint/plugin-kit': 0.7.1
+ '@humanfs/node': 0.16.8
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.8
+ ajv: 6.15.0
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
+ esquery: 1.7.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ minimatch: 10.2.5
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.6.1
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ eslint-visitor-keys: 4.2.1
+
+ espree@11.2.0:
+ dependencies:
+ acorn: 8.16.0
+ acorn-jsx: 5.3.2(acorn@8.16.0)
+ eslint-visitor-keys: 5.0.1
+
+ esquery@1.7.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ estree-walker@2.0.2: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ esutils@2.0.3: {}
+
+ etag@1.8.1: {}
+
+ event-target-shim@5.0.1: {}
+
+ events-universal@1.0.1:
+ dependencies:
+ bare-events: 2.8.2
+ transitivePeerDependencies:
+ - bare-abort-controller
+
+ events@3.3.0: {}
+
+ execa@8.0.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 8.0.1
+ human-signals: 5.0.0
+ is-stream: 3.0.0
+ merge-stream: 2.0.0
+ npm-run-path: 5.3.0
+ onetime: 6.0.0
+ signal-exit: 4.1.0
+ strip-final-newline: 3.0.0
+
+ expect-type@1.3.0: {}
+
+ exsolve@1.0.8: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-fifo@1.3.2: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fast-npm-meta@1.5.0: {}
+
+ fast-string-truncated-width@1.2.1: {}
+
+ fast-string-width@1.1.0:
+ dependencies:
+ fast-string-truncated-width: 1.2.1
+
+ fast-wrap-ansi@0.1.6:
+ dependencies:
+ fast-string-width: 1.1.0
+
+ fastq@1.20.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ file-uri-to-path@1.0.0: {}
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up-simple@1.0.1: {}
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ find-up@8.0.0:
+ dependencies:
+ locate-path: 8.0.0
+ unicorn-magic: 0.3.0
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.4.2
+ keyv: 4.5.4
+
+ flatted@3.4.2: {}
+
+ foreground-child@3.3.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ signal-exit: 4.1.0
+
+ fraction.js@5.3.4: {}
+
+ fresh@2.0.0: {}
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ fuse.js@7.3.0: {}
+
+ fzf@0.5.2: {}
+
+ gensync@1.0.0-beta.2: {}
+
+ get-caller-file@2.0.5: {}
+
+ get-east-asian-width@1.5.0: {}
+
+ get-port-please@3.2.0: {}
+
+ get-stream@8.0.1: {}
+
+ get-tsconfig@4.14.0:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ giget@3.2.0: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob@10.5.0:
+ dependencies:
+ foreground-child: 3.3.1
+ jackspeak: 3.4.3
+ minimatch: 9.0.9
+ minipass: 7.1.3
+ package-json-from-dist: 1.0.1
+ path-scurry: 1.11.1
+
+ glob@13.0.6:
+ dependencies:
+ minimatch: 10.2.5
+ minipass: 7.1.3
+ path-scurry: 2.0.2
+
+ global-directory@4.0.1:
+ dependencies:
+ ini: 4.1.1
+
+ globals@16.5.0: {}
+
+ globals@17.5.0: {}
+
+ globby@16.2.0:
+ dependencies:
+ '@sindresorhus/merge-streams': 4.0.0
+ fast-glob: 3.3.3
+ ignore: 7.0.5
+ is-path-inside: 4.0.0
+ slash: 5.1.0
+ unicorn-magic: 0.4.0
+
+ graceful-fs@4.2.11: {}
+
+ gzip-size@7.0.0:
+ dependencies:
+ duplexer: 0.1.2
+
+ h3@1.15.11:
+ dependencies:
+ cookie-es: 1.2.3
+ crossws: 0.3.5
+ defu: 6.1.7
+ destr: 2.0.5
+ iron-webcrypto: 1.2.1
+ node-mock-http: 1.0.4
+ radix3: 1.1.2
+ ufo: 1.6.3
+ uncrypto: 0.1.3
+
+ hasown@2.0.3:
+ dependencies:
+ function-bind: 1.1.2
+
+ hookable@5.5.3: {}
+
+ hookable@6.1.1: {}
+
+ html-entities@2.6.0: {}
+
+ http-errors@2.0.1:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ toidentifier: 1.0.1
+
+ http-shutdown@1.2.2: {}
+
+ https-proxy-agent@7.0.6:
+ dependencies:
+ agent-base: 7.1.4
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ httpxy@0.5.1: {}
+
+ human-signals@5.0.0: {}
+
+ ieee754@1.2.1: {}
+
+ ignore@5.3.2: {}
+
+ ignore@7.0.5: {}
+
+ image-meta@0.2.2: {}
+
+ import-without-cache@0.3.3: {}
+
+ impound@1.1.5:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ es-module-lexer: 2.0.0
+ pathe: 2.0.3
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+
+ imurmurhash@0.1.4: {}
+
+ indent-string@5.0.0: {}
+
+ inherits@2.0.4: {}
+
+ ini@4.1.1: {}
+
+ ioredis@5.10.1:
+ dependencies:
+ '@ioredis/commands': 1.5.1
+ cluster-key-slot: 1.1.2
+ debug: 4.4.3
+ denque: 2.1.0
+ lodash.defaults: 4.2.0
+ lodash.isarguments: 3.1.0
+ redis-errors: 1.2.0
+ redis-parser: 3.0.0
+ standard-as-callback: 2.1.0
+ transitivePeerDependencies:
+ - supports-color
+
+ iron-webcrypto@1.2.1: {}
+
+ is-builtin-module@5.0.0:
+ dependencies:
+ builtin-modules: 5.1.0
+
+ is-core-module@2.16.1:
+ dependencies:
+ hasown: 2.0.3
+
+ is-docker@3.0.0: {}
+
+ is-extglob@2.1.1: {}
+
+ is-fullwidth-code-point@3.0.0: {}
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-in-ssh@1.0.0: {}
+
+ is-inside-container@1.0.0:
+ dependencies:
+ is-docker: 3.0.0
+
+ is-installed-globally@1.0.0:
+ dependencies:
+ global-directory: 4.0.1
+ is-path-inside: 4.0.0
+
+ is-module@1.0.0: {}
+
+ is-number@7.0.0: {}
+
+ is-path-inside@4.0.0: {}
+
+ is-reference@1.2.1:
+ dependencies:
+ '@types/estree': 1.0.8
+
+ is-stream@2.0.1: {}
+
+ is-stream@3.0.0: {}
+
+ is-what@5.5.0: {}
+
+ is-wsl@3.1.1:
+ dependencies:
+ is-inside-container: 1.0.0
+
+ isarray@1.0.0: {}
+
+ isexe@2.0.0: {}
+
+ isexe@4.0.0: {}
+
+ jackspeak@3.4.3:
+ dependencies:
+ '@isaacs/cliui': 8.0.2
+ optionalDependencies:
+ '@pkgjs/parseargs': 0.11.0
+
+ jiti@2.6.1: {}
+
+ js-tokens@4.0.0: {}
+
+ js-tokens@9.0.1: {}
+
+ js-yaml@4.1.1:
+ dependencies:
+ argparse: 2.0.1
+
+ jsdoc-type-pratt-parser@7.2.0: {}
+
+ jsesc@3.1.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-schema-to-typescript-lite@15.0.0:
+ dependencies:
+ '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15)
+ '@types/json-schema': 7.0.15
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ json5@2.2.3: {}
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ kleur@4.1.5: {}
+
+ klona@2.0.6: {}
+
+ knitwork@1.3.0: {}
+
+ launch-editor@2.13.2:
+ dependencies:
+ picocolors: 1.1.1
+ shell-quote: 1.8.3
+
+ lazystream@1.0.1:
+ dependencies:
+ readable-stream: 2.3.8
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ lilconfig@3.1.3: {}
+
+ listhen@1.9.1(srvx@0.11.15):
+ dependencies:
+ '@parcel/watcher': 2.5.6
+ '@parcel/watcher-wasm': 2.5.6
+ citty: 0.2.2
+ consola: 3.4.2
+ crossws: 0.4.5(srvx@0.11.15)
+ defu: 6.1.7
+ get-port-please: 3.2.0
+ h3: 1.15.11
+ http-shutdown: 1.2.2
+ jiti: 2.6.1
+ mlly: 1.8.2
+ node-forge: 1.4.0
+ pathe: 2.0.3
+ std-env: 4.1.0
+ tinyclip: 0.1.12
+ ufo: 1.6.3
+ untun: 0.1.3
+ uqr: 0.1.3
+ transitivePeerDependencies:
+ - srvx
+
+ load-tsconfig@0.2.5: {}
+
+ local-pkg@1.1.2:
+ dependencies:
+ mlly: 1.8.2
+ pkg-types: 2.3.0
+ quansync: 0.2.11
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ locate-path@8.0.0:
+ dependencies:
+ p-locate: 6.0.0
+
+ lodash.defaults@4.2.0: {}
+
+ lodash.isarguments@3.1.0: {}
+
+ lodash.memoize@4.1.2: {}
+
+ lodash.uniq@4.5.0: {}
+
+ lodash@4.18.1: {}
+
+ lru-cache@10.4.3: {}
+
+ lru-cache@11.3.5: {}
+
+ lru-cache@5.1.1:
+ dependencies:
+ yallist: 3.1.1
+
+ magic-regexp@0.10.0:
+ dependencies:
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ regexp-tree: 0.1.27
+ type-level-regexp: 0.1.17
+ ufo: 1.6.3
+ unplugin: 2.3.11
+
+ magic-string-ast@1.0.3:
+ dependencies:
+ magic-string: 0.30.21
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ magicast@0.5.2:
+ dependencies:
+ '@babel/parser': 7.29.2
+ '@babel/types': 7.29.0
+ source-map-js: 1.2.1
+
+ mdn-data@2.0.28: {}
+
+ mdn-data@2.27.1: {}
+
+ merge-stream@2.0.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.2
+
+ mime-db@1.54.0: {}
+
+ mime-types@3.0.2:
+ dependencies:
+ mime-db: 1.54.0
+
+ mime@4.1.0: {}
+
+ mimic-fn@4.0.0: {}
+
+ minimatch@10.2.5:
+ dependencies:
+ brace-expansion: 5.0.5
+
+ minimatch@5.1.9:
+ dependencies:
+ brace-expansion: 2.1.0
+
+ minimatch@9.0.9:
+ dependencies:
+ brace-expansion: 2.1.0
+
+ minipass@7.1.3: {}
+
+ minizlib@3.1.0:
+ dependencies:
+ minipass: 7.1.3
+
+ mitt@3.0.1: {}
+
+ mlly@1.8.2:
+ dependencies:
+ acorn: 8.16.0
+ pathe: 2.0.3
+ pkg-types: 1.3.1
+ ufo: 1.6.3
+
+ mocked-exports@0.1.1: {}
+
+ mrmime@2.0.1: {}
+
+ ms@2.1.3: {}
+
+ muggle-string@0.4.1: {}
+
+ nanoid@3.3.11: {}
+
+ nanotar@0.3.0: {}
+
+ napi-postinstall@0.3.4: {}
+
+ natural-compare@1.4.0: {}
+
+ nitropack@2.13.3(rolldown@1.0.0-rc.17)(srvx@0.11.15):
+ dependencies:
+ '@cloudflare/kv-asset-handler': 0.4.2
+ '@rollup/plugin-alias': 6.0.0(rollup@4.60.2)
+ '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.2)
+ '@rollup/plugin-inject': 5.0.5(rollup@4.60.2)
+ '@rollup/plugin-json': 6.1.0(rollup@4.60.2)
+ '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.2)
+ '@rollup/plugin-replace': 6.0.3(rollup@4.60.2)
+ '@rollup/plugin-terser': 1.0.0(rollup@4.60.2)
+ '@vercel/nft': 1.5.0(rollup@4.60.2)
+ archiver: 7.0.1
+ c12: 3.3.4(magicast@0.5.2)
+ chokidar: 5.0.0
+ citty: 0.2.2
+ compatx: 0.2.0
+ confbox: 0.2.4
+ consola: 3.4.2
+ cookie-es: 2.0.1
+ croner: 10.0.1
+ crossws: 0.3.5
+ db0: 0.3.4
+ defu: 6.1.7
+ destr: 2.0.5
+ dot-prop: 10.1.0
+ esbuild: 0.27.7
+ escape-string-regexp: 5.0.0
+ etag: 1.8.1
+ exsolve: 1.0.8
+ globby: 16.2.0
+ gzip-size: 7.0.0
+ h3: 1.15.11
+ hookable: 5.5.3
+ httpxy: 0.5.1
+ ioredis: 5.10.1
+ jiti: 2.6.1
+ klona: 2.0.6
+ knitwork: 1.3.0
+ listhen: 1.9.1(srvx@0.11.15)
+ magic-string: 0.30.21
+ magicast: 0.5.2
+ mime: 4.1.0
+ mlly: 1.8.2
+ node-fetch-native: 1.6.7
+ node-mock-http: 1.0.4
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ pkg-types: 2.3.0
+ pretty-bytes: 7.1.0
+ radix3: 1.1.2
+ rollup: 4.60.2
+ rollup-plugin-visualizer: 7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2)
+ scule: 1.3.0
+ semver: 7.7.4
+ serve-placeholder: 2.0.2
+ serve-static: 2.2.1
+ source-map: 0.7.6
+ std-env: 4.1.0
+ ufo: 1.6.3
+ ultrahtml: 1.6.0
+ uncrypto: 0.1.3
+ unctx: 2.5.0
+ unenv: 2.0.0-rc.24
+ unimport: 6.1.1
+ unplugin-utils: 0.3.1
+ unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1)
+ untyped: 2.0.0
+ unwasm: 0.5.3
+ youch: 4.1.1
+ youch-core: 0.3.3
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@planetscale/database'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - drizzle-orm
+ - encoding
+ - idb-keyval
+ - mysql2
+ - react-native-b4a
+ - rolldown
+ - sqlite3
+ - srvx
+ - supports-color
+ - uploadthing
+
+ node-addon-api@7.1.1: {}
+
+ node-fetch-native@1.6.7: {}
+
+ node-fetch@2.7.0:
+ dependencies:
+ whatwg-url: 5.0.0
+
+ node-forge@1.4.0: {}
+
+ node-gyp-build@4.8.4: {}
+
+ node-mock-http@1.0.4: {}
+
+ node-releases@2.0.38: {}
+
+ nopt@8.1.0:
+ dependencies:
+ abbrev: 3.0.1
+
+ normalize-path@3.0.0: {}
+
+ npm-run-path@5.3.0:
+ dependencies:
+ path-key: 4.0.0
+
+ npm-run-path@6.0.0:
+ dependencies:
+ path-key: 4.0.0
+ unicorn-magic: 0.3.0
+
+ nth-check@2.1.1:
+ dependencies:
+ boolbase: 1.0.0
+
+ nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3):
+ dependencies:
+ '@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3)
+ '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)
+ '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.17)(srvx@0.11.15)(typescript@6.0.3)
+ '@nuxt/schema': 4.4.2
+ '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))
+ '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@10.2.1(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))(yaml@2.8.3)
+ '@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
+ '@vue/shared': 3.5.33
+ c12: 3.3.4(magicast@0.5.2)
+ chokidar: 5.0.0
+ compatx: 0.2.0
+ consola: 3.4.2
+ cookie-es: 2.0.1
+ defu: 6.1.7
+ devalue: 5.7.1
+ errx: 0.1.0
+ escape-string-regexp: 5.0.0
+ exsolve: 1.0.8
+ hookable: 6.1.1
+ ignore: 7.0.5
+ impound: 1.1.5
+ jiti: 2.6.1
+ klona: 2.0.6
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ nanotar: 0.3.0
+ nypm: 0.6.6
+ ofetch: 1.5.1
+ ohash: 2.0.11
+ on-change: 6.0.2
+ oxc-minify: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ oxc-transform: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0))
+ pathe: 2.0.3
+ perfect-debounce: 2.1.0
+ picomatch: 4.0.4
+ pkg-types: 2.3.0
+ rou3: 0.8.1
+ scule: 1.3.0
+ semver: 7.7.4
+ std-env: 4.1.0
+ tinyglobby: 0.2.16
+ ufo: 1.6.3
+ ultrahtml: 1.6.0
+ uncrypto: 0.1.3
+ unctx: 2.5.0
+ unimport: 6.1.1
+ unplugin: 3.0.0
+ unrouting: 0.1.7
+ untyped: 2.0.0
+ vue: 3.5.33(typescript@6.0.3)
+ vue-router: 5.0.6(@vue/compiler-sfc@3.5.33)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))
+ optionalDependencies:
+ '@parcel/watcher': 2.5.6
+ '@types/node': 25.6.0
+ transitivePeerDependencies:
+ - '@azure/app-configuration'
+ - '@azure/cosmos'
+ - '@azure/data-tables'
+ - '@azure/identity'
+ - '@azure/keyvault-secrets'
+ - '@azure/storage-blob'
+ - '@babel/core'
+ - '@babel/plugin-proposal-decorators'
+ - '@babel/plugin-syntax-jsx'
+ - '@biomejs/biome'
+ - '@capacitor/preferences'
+ - '@deno/kv'
+ - '@electric-sql/pglite'
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+ - '@libsql/client'
+ - '@netlify/blobs'
+ - '@pinia/colada'
+ - '@planetscale/database'
+ - '@rollup/plugin-babel'
+ - '@upstash/redis'
+ - '@vercel/blob'
+ - '@vercel/functions'
+ - '@vercel/kv'
+ - '@vitejs/devtools'
+ - '@vue/compiler-sfc'
+ - aws4fetch
+ - bare-abort-controller
+ - bare-buffer
+ - better-sqlite3
+ - bufferutil
+ - cac
+ - commander
+ - db0
+ - drizzle-orm
+ - encoding
+ - eslint
+ - idb-keyval
+ - ioredis
+ - less
+ - lightningcss
+ - magicast
+ - meow
+ - mysql2
+ - optionator
+ - oxlint
+ - pinia
+ - react-native-b4a
+ - rolldown
+ - rollup
+ - rollup-plugin-visualizer
+ - sass
+ - sass-embedded
+ - sqlite3
+ - srvx
+ - stylelint
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ - tsx
+ - typescript
+ - uploadthing
+ - utf-8-validate
+ - vite
+ - vls
+ - vti
+ - vue-tsc
+ - xml2js
+ - yaml
+
+ nypm@0.6.6:
+ dependencies:
+ citty: 0.2.2
+ pathe: 2.0.3
+ tinyexec: 1.1.1
+
+ object-deep-merge@2.0.0: {}
+
+ obug@2.1.1: {}
+
+ ofetch@1.5.1:
+ dependencies:
+ destr: 2.0.5
+ node-fetch-native: 1.6.7
+ ufo: 1.6.3
+
+ ofetch@2.0.0-alpha.3: {}
+
+ ohash@2.0.11: {}
+
+ on-change@6.0.2: {}
+
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
+ onetime@6.0.0:
+ dependencies:
+ mimic-fn: 4.0.0
+
+ open@10.2.0:
+ dependencies:
+ default-browser: 5.5.0
+ define-lazy-prop: 3.0.0
+ is-inside-container: 1.0.0
+ wsl-utils: 0.1.0
+
+ open@11.0.0:
+ dependencies:
+ default-browser: 5.5.0
+ define-lazy-prop: 3.0.0
+ is-in-ssh: 1.0.0
+ is-inside-container: 1.0.0
+ powershell-utils: 0.1.0
+ wsl-utils: 0.3.1
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ oxc-minify@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0):
+ optionalDependencies:
+ '@oxc-minify/binding-android-arm-eabi': 0.117.0
+ '@oxc-minify/binding-android-arm64': 0.117.0
+ '@oxc-minify/binding-darwin-arm64': 0.117.0
+ '@oxc-minify/binding-darwin-x64': 0.117.0
+ '@oxc-minify/binding-freebsd-x64': 0.117.0
+ '@oxc-minify/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-minify/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-minify/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-arm64-musl': 0.117.0
+ '@oxc-minify/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-minify/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-minify/binding-linux-x64-gnu': 0.117.0
+ '@oxc-minify/binding-linux-x64-musl': 0.117.0
+ '@oxc-minify/binding-openharmony-arm64': 0.117.0
+ '@oxc-minify/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@oxc-minify/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-minify/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-minify/binding-win32-x64-msvc': 0.117.0
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0):
+ dependencies:
+ '@oxc-project/types': 0.117.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.117.0
+ '@oxc-parser/binding-android-arm64': 0.117.0
+ '@oxc-parser/binding-darwin-arm64': 0.117.0
+ '@oxc-parser/binding-darwin-x64': 0.117.0
+ '@oxc-parser/binding-freebsd-x64': 0.117.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.117.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.117.0
+ '@oxc-parser/binding-linux-x64-musl': 0.117.0
+ '@oxc-parser/binding-openharmony-arm64': 0.117.0
+ '@oxc-parser/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@oxc-parser/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.117.0
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ oxc-transform@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0):
+ optionalDependencies:
+ '@oxc-transform/binding-android-arm-eabi': 0.117.0
+ '@oxc-transform/binding-android-arm64': 0.117.0
+ '@oxc-transform/binding-darwin-arm64': 0.117.0
+ '@oxc-transform/binding-darwin-x64': 0.117.0
+ '@oxc-transform/binding-freebsd-x64': 0.117.0
+ '@oxc-transform/binding-linux-arm-gnueabihf': 0.117.0
+ '@oxc-transform/binding-linux-arm-musleabihf': 0.117.0
+ '@oxc-transform/binding-linux-arm64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-arm64-musl': 0.117.0
+ '@oxc-transform/binding-linux-ppc64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-riscv64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-riscv64-musl': 0.117.0
+ '@oxc-transform/binding-linux-s390x-gnu': 0.117.0
+ '@oxc-transform/binding-linux-x64-gnu': 0.117.0
+ '@oxc-transform/binding-linux-x64-musl': 0.117.0
+ '@oxc-transform/binding-openharmony-arm64': 0.117.0
+ '@oxc-transform/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ '@oxc-transform/binding-win32-arm64-msvc': 0.117.0
+ '@oxc-transform/binding-win32-ia32-msvc': 0.117.0
+ '@oxc-transform/binding-win32-x64-msvc': 0.117.0
+ transitivePeerDependencies:
+ - '@emnapi/core'
+ - '@emnapi/runtime'
+
+ oxc-walker@0.7.0(oxc-parser@0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)):
+ dependencies:
+ magic-regexp: 0.10.0
+ oxc-parser: 0.117.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-limit@4.0.0:
+ dependencies:
+ yocto-queue: 1.2.2
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ p-locate@6.0.0:
+ dependencies:
+ p-limit: 4.0.0
+
+ package-json-from-dist@1.0.1: {}
+
+ package-manager-detector@1.6.0: {}
+
+ parse-imports-exports@0.2.4:
+ dependencies:
+ parse-statements: 1.0.11
+
+ parse-statements@1.0.11: {}
+
+ parseurl@1.3.3: {}
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ path-key@4.0.0: {}
+
+ path-parse@1.0.7: {}
+
+ path-scurry@1.11.1:
+ dependencies:
+ lru-cache: 10.4.3
+ minipass: 7.1.3
+
+ path-scurry@2.0.2:
+ dependencies:
+ lru-cache: 11.3.5
+ minipass: 7.1.3
+
+ pathe@1.1.2: {}
+
+ pathe@2.0.3: {}
+
+ perfect-debounce@1.0.0: {}
+
+ perfect-debounce@2.1.0: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.2: {}
+
+ picomatch@4.0.4: {}
+
+ pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)):
+ dependencies:
+ '@vue/devtools-api': 7.7.9
+ vue: 3.5.33(typescript@6.0.3)
+ optionalDependencies:
+ typescript: 6.0.3
+
+ pkg-types@1.3.1:
+ dependencies:
+ confbox: 0.1.8
+ mlly: 1.8.2
+ pathe: 2.0.3
+
+ pkg-types@2.3.0:
+ dependencies:
+ confbox: 0.2.4
+ exsolve: 1.0.8
+ pathe: 2.0.3
+
+ pluralize@8.0.0: {}
+
+ postcss-calc@10.1.1(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-selector-parser: 7.1.1
+ postcss-value-parser: 4.2.0
+
+ postcss-colormin@7.0.9(postcss@8.5.10):
+ dependencies:
+ '@colordx/core': 5.4.2
+ browserslist: 4.28.2
+ caniuse-api: 3.0.0
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-convert-values@7.0.11(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-discard-comments@7.0.7(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-selector-parser: 7.1.1
+
+ postcss-discard-duplicates@7.0.3(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+
+ postcss-discard-empty@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+
+ postcss-discard-overridden@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+
+ postcss-merge-longhand@7.0.6(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+ stylehacks: 7.0.10(postcss@8.5.10)
+
+ postcss-merge-rules@7.0.10(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ caniuse-api: 3.0.0
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
+ postcss-selector-parser: 7.1.1
+
+ postcss-minify-font-values@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-gradients@7.0.4(postcss@8.5.10):
+ dependencies:
+ '@colordx/core': 5.4.2
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-params@7.0.8(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-minify-selectors@7.1.0(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ caniuse-api: 3.0.0
+ cssesc: 3.0.0
+ postcss: 8.5.10
+ postcss-selector-parser: 7.1.1
+
+ postcss-normalize-charset@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+
+ postcss-normalize-display-values@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-positions@7.0.3(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-repeat-style@7.0.3(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-string@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-timing-functions@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-unicode@7.0.8(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-url@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-normalize-whitespace@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-ordered-values@7.0.3(postcss@8.5.10):
+ dependencies:
+ cssnano-utils: 5.0.2(postcss@8.5.10)
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-reduce-initial@7.0.8(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ caniuse-api: 3.0.0
+ postcss: 8.5.10
+
+ postcss-reduce-transforms@7.0.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+
+ postcss-selector-parser@7.1.1:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss-svgo@7.1.2(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-value-parser: 4.2.0
+ svgo: 4.0.1
+
+ postcss-unique-selectors@7.0.6(postcss@8.5.10):
+ dependencies:
+ postcss: 8.5.10
+ postcss-selector-parser: 7.1.1
+
+ postcss-value-parser@4.2.0: {}
+
+ postcss@8.5.10:
+ dependencies:
+ nanoid: 3.3.11
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ powershell-utils@0.1.0: {}
+
+ prelude-ls@1.2.1: {}
+
+ pretty-bytes@7.1.0: {}
+
+ process-nextick-args@2.0.1: {}
+
+ process@0.11.10: {}
+
+ punycode@2.3.1: {}
+
+ quansync@0.2.11: {}
+
+ quansync@1.0.0: {}
+
+ queue-microtask@1.2.3: {}
+
+ radix3@1.1.2: {}
+
+ range-parser@1.2.1: {}
+
+ rc9@3.0.1:
+ dependencies:
+ defu: 6.1.7
+ destr: 2.0.5
+
+ readable-stream@2.3.8:
+ dependencies:
+ core-util-is: 1.0.3
+ inherits: 2.0.4
+ isarray: 1.0.0
+ process-nextick-args: 2.0.1
+ safe-buffer: 5.1.2
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
+ readable-stream@4.7.0:
+ dependencies:
+ abort-controller: 3.0.0
+ buffer: 6.0.3
+ events: 3.3.0
+ process: 0.11.10
+ string_decoder: 1.3.0
+
+ readdir-glob@1.1.3:
+ dependencies:
+ minimatch: 5.1.9
+
+ readdirp@4.1.2: {}
+
+ readdirp@5.0.0: {}
+
+ redis-errors@1.2.0: {}
+
+ redis-parser@3.0.0:
+ dependencies:
+ redis-errors: 1.2.0
+
+ refa@0.12.1:
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+
+ regexp-ast-analysis@0.7.1:
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ refa: 0.12.1
+
+ regexp-tree@0.1.27: {}
+
+ regjsparser@0.13.1:
+ dependencies:
+ jsesc: 3.1.0
+
+ reserved-identifiers@1.2.0: {}
+
+ resolve-from@5.0.0: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ resolve@1.22.12:
+ dependencies:
+ es-errors: 1.3.0
+ is-core-module: 2.16.1
+ path-parse: 1.0.7
+ supports-preserve-symlinks-flag: 1.0.0
+
+ reusify@1.1.0: {}
+
+ rfdc@1.4.1: {}
+
+ rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.17)(typescript@6.0.3):
+ dependencies:
+ '@babel/generator': 8.0.0-rc.3
+ '@babel/helper-validator-identifier': 8.0.0-rc.3
+ '@babel/parser': 8.0.0-rc.3
+ '@babel/types': 8.0.0-rc.3
+ ast-kit: 3.0.0-beta.1
+ birpc: 4.0.0
+ dts-resolver: 2.1.3
+ get-tsconfig: 4.14.0
+ obug: 2.1.1
+ picomatch: 4.0.4
+ rolldown: 1.0.0-rc.17
+ optionalDependencies:
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - oxc-resolver
+
+ rolldown@1.0.0-rc.17:
+ dependencies:
+ '@oxc-project/types': 0.127.0
+ '@rolldown/pluginutils': 1.0.0-rc.17
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.0-rc.17
+ '@rolldown/binding-darwin-arm64': 1.0.0-rc.17
+ '@rolldown/binding-darwin-x64': 1.0.0-rc.17
+ '@rolldown/binding-freebsd-x64': 1.0.0-rc.17
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.17
+ '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.17
+ '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.17
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.17
+ '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.17
+ '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.17
+ '@rolldown/binding-linux-x64-musl': 1.0.0-rc.17
+ '@rolldown/binding-openharmony-arm64': 1.0.0-rc.17
+ '@rolldown/binding-wasm32-wasi': 1.0.0-rc.17
+ '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.17
+ '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.17
+
+ rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2):
+ dependencies:
+ open: 11.0.0
+ picomatch: 4.0.4
+ source-map: 0.7.6
+ yargs: 18.0.0
+ optionalDependencies:
+ rolldown: 1.0.0-rc.17
+ rollup: 4.60.2
+
+ rollup@4.60.2:
+ dependencies:
+ '@types/estree': 1.0.8
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.60.2
+ '@rollup/rollup-android-arm64': 4.60.2
+ '@rollup/rollup-darwin-arm64': 4.60.2
+ '@rollup/rollup-darwin-x64': 4.60.2
+ '@rollup/rollup-freebsd-arm64': 4.60.2
+ '@rollup/rollup-freebsd-x64': 4.60.2
+ '@rollup/rollup-linux-arm-gnueabihf': 4.60.2
+ '@rollup/rollup-linux-arm-musleabihf': 4.60.2
+ '@rollup/rollup-linux-arm64-gnu': 4.60.2
+ '@rollup/rollup-linux-arm64-musl': 4.60.2
+ '@rollup/rollup-linux-loong64-gnu': 4.60.2
+ '@rollup/rollup-linux-loong64-musl': 4.60.2
+ '@rollup/rollup-linux-ppc64-gnu': 4.60.2
+ '@rollup/rollup-linux-ppc64-musl': 4.60.2
+ '@rollup/rollup-linux-riscv64-gnu': 4.60.2
+ '@rollup/rollup-linux-riscv64-musl': 4.60.2
+ '@rollup/rollup-linux-s390x-gnu': 4.60.2
+ '@rollup/rollup-linux-x64-gnu': 4.60.2
+ '@rollup/rollup-linux-x64-musl': 4.60.2
+ '@rollup/rollup-openbsd-x64': 4.60.2
+ '@rollup/rollup-openharmony-arm64': 4.60.2
+ '@rollup/rollup-win32-arm64-msvc': 4.60.2
+ '@rollup/rollup-win32-ia32-msvc': 4.60.2
+ '@rollup/rollup-win32-x64-gnu': 4.60.2
+ '@rollup/rollup-win32-x64-msvc': 4.60.2
+ fsevents: 2.3.3
+
+ rou3@0.8.1: {}
+
+ run-applescript@7.1.0: {}
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-buffer@5.1.2: {}
+
+ safe-buffer@5.2.1: {}
+
+ sax@1.6.0: {}
+
+ scslre@0.3.0:
+ dependencies:
+ '@eslint-community/regexpp': 4.12.2
+ refa: 0.12.1
+ regexp-ast-analysis: 0.7.1
+
+ scule@1.3.0: {}
+
+ semver@6.3.1: {}
+
+ semver@7.7.4: {}
+
+ send@1.2.1:
+ dependencies:
+ debug: 4.4.3
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.1
+ mime-types: 3.0.2
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ serialize-javascript@7.0.5: {}
+
+ seroval@1.5.2: {}
+
+ serve-placeholder@2.0.2:
+ dependencies:
+ defu: 6.1.7
+
+ serve-static@2.2.1:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.1
+ transitivePeerDependencies:
+ - supports-color
+
+ setprototypeof@1.2.0: {}
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ shell-quote@1.8.3: {}
+
+ siginfo@2.0.0: {}
+
+ signal-exit@4.1.0: {}
+
+ simple-git@3.36.0:
+ dependencies:
+ '@kwsites/file-exists': 1.1.1
+ '@kwsites/promise-deferred': 1.1.1
+ '@simple-git/args-pathspec': 1.0.3
+ '@simple-git/argv-parser': 1.1.1
+ debug: 4.4.3
+ transitivePeerDependencies:
+ - supports-color
+
+ sirv@3.0.2:
+ dependencies:
+ '@polka/url': 1.0.0-next.29
+ mrmime: 2.0.1
+ totalist: 3.0.1
+
+ sisteransi@1.0.5: {}
+
+ slash@5.1.0: {}
+
+ smob@1.6.1: {}
+
+ source-map-js@1.2.1: {}
+
+ source-map-support@0.5.21:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
+ source-map@0.6.1: {}
+
+ source-map@0.7.6: {}
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@4.0.0:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.23
+
+ spdx-license-ids@3.0.23: {}
+
+ speakingurl@14.0.1: {}
+
+ srvx@0.11.15: {}
+
+ stable-hash-x@0.2.0: {}
+
+ stackback@0.0.2: {}
+
+ standard-as-callback@2.1.0: {}
+
+ statuses@2.0.2: {}
+
+ std-env@3.10.0: {}
+
+ std-env@4.1.0: {}
+
+ streamx@2.25.0:
+ dependencies:
+ events-universal: 1.0.1
+ fast-fifo: 1.3.2
+ text-decoder: 1.2.7
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ string-width@4.2.3:
+ dependencies:
+ emoji-regex: 8.0.0
+ is-fullwidth-code-point: 3.0.0
+ strip-ansi: 6.0.1
+
+ string-width@5.1.2:
+ dependencies:
+ eastasianwidth: 0.2.0
+ emoji-regex: 9.2.2
+ strip-ansi: 7.2.0
+
+ string-width@7.2.0:
+ dependencies:
+ emoji-regex: 10.6.0
+ get-east-asian-width: 1.5.0
+ strip-ansi: 7.2.0
+
+ string_decoder@1.1.1:
+ dependencies:
+ safe-buffer: 5.1.2
+
+ string_decoder@1.3.0:
+ dependencies:
+ safe-buffer: 5.2.1
+
+ strip-ansi@6.0.1:
+ dependencies:
+ ansi-regex: 5.0.1
+
+ strip-ansi@7.2.0:
+ dependencies:
+ ansi-regex: 6.2.2
+
+ strip-final-newline@3.0.0: {}
+
+ strip-indent@4.1.1: {}
+
+ strip-literal@3.1.0:
+ dependencies:
+ js-tokens: 9.0.1
+
+ structured-clone-es@2.0.0: {}
+
+ stylehacks@7.0.10(postcss@8.5.10):
+ dependencies:
+ browserslist: 4.28.2
+ postcss: 8.5.10
+ postcss-selector-parser: 7.1.1
+
+ superjson@2.2.6:
+ dependencies:
+ copy-anything: 4.0.5
+
+ supports-color@10.2.2: {}
+
+ supports-preserve-symlinks-flag@1.0.0: {}
+
+ svgo@4.0.1:
+ dependencies:
+ commander: 11.1.0
+ css-select: 5.2.2
+ css-tree: 3.2.1
+ css-what: 6.2.2
+ csso: 5.0.5
+ picocolors: 1.1.1
+ sax: 1.6.0
+
+ tagged-tag@1.0.0: {}
+
+ tailwindcss@4.2.4: {}
+
+ tapable@2.3.3: {}
+
+ tar-stream@3.1.8:
+ dependencies:
+ b4a: 1.8.0
+ bare-fs: 4.7.1
+ fast-fifo: 1.3.2
+ streamx: 2.25.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - bare-buffer
+ - react-native-b4a
+
+ tar@7.5.13:
+ dependencies:
+ '@isaacs/fs-minipass': 4.0.1
+ chownr: 3.0.0
+ minipass: 7.1.3
+ minizlib: 3.1.0
+ yallist: 5.0.0
+
+ teex@1.0.1:
+ dependencies:
+ streamx: 2.25.0
+ transitivePeerDependencies:
+ - bare-abort-controller
+ - react-native-b4a
+
+ terser@5.46.2:
+ dependencies:
+ '@jridgewell/source-map': 0.3.11
+ acorn: 8.16.0
+ commander: 2.20.3
+ source-map-support: 0.5.21
+
+ text-decoder@1.2.7:
+ dependencies:
+ b4a: 1.8.0
+ transitivePeerDependencies:
+ - react-native-b4a
+
+ tiny-invariant@1.3.3: {}
+
+ tinybench@2.9.0: {}
+
+ tinyclip@0.1.12: {}
+
+ tinyexec@1.1.1: {}
+
+ tinyglobby@0.2.16:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tinyrainbow@3.1.0: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ to-valid-identifier@1.0.0:
+ dependencies:
+ '@sindresorhus/base62': 1.0.0
+ reserved-identifiers: 1.2.0
+
+ toidentifier@1.0.1: {}
+
+ totalist@3.0.1: {}
+
+ tr46@0.0.3: {}
+
+ tree-kill@1.2.2: {}
+
+ ts-api-utils@2.5.0(typescript@6.0.3):
+ dependencies:
+ typescript: 6.0.3
+
+ tsdown@0.21.10(typescript@6.0.3):
+ dependencies:
+ ansis: 4.2.0
+ cac: 7.0.0
+ defu: 6.1.7
+ empathic: 2.0.0
+ hookable: 6.1.1
+ import-without-cache: 0.3.3
+ obug: 2.1.1
+ picomatch: 4.0.4
+ rolldown: 1.0.0-rc.17
+ rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.17)(typescript@6.0.3)
+ semver: 7.7.4
+ tinyexec: 1.1.1
+ tinyglobby: 0.2.16
+ tree-kill: 1.2.2
+ unconfig-core: 7.5.0
+ unrun: 0.2.37
+ optionalDependencies:
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - '@ts-macro/tsc'
+ - '@typescript/native-preview'
+ - oxc-resolver
+ - synckit
+ - vue-tsc
+
+ tslib@2.8.1:
+ optional: true
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ type-fest@5.6.0:
+ dependencies:
+ tagged-tag: 1.0.0
+
+ type-level-regexp@0.1.17: {}
+
+ typescript@6.0.3: {}
+
+ ufo@1.6.3: {}
+
+ ultrahtml@1.6.0: {}
+
+ unconfig-core@7.5.0:
+ dependencies:
+ '@quansync/fs': 1.0.0
+ quansync: 1.0.0
+
+ uncrypto@0.1.3: {}
+
+ unctx@2.5.0:
+ dependencies:
+ acorn: 8.16.0
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ unplugin: 2.3.11
+
+ undici-types@7.19.2: {}
+
+ unenv@2.0.0-rc.24:
+ dependencies:
+ pathe: 2.0.3
+
+ unhead@2.1.13:
+ dependencies:
+ hookable: 6.1.1
+
+ unicorn-magic@0.3.0: {}
+
+ unicorn-magic@0.4.0: {}
+
+ unimport@5.7.0:
+ dependencies:
+ acorn: 8.16.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ pkg-types: 2.3.0
+ scule: 1.3.0
+ strip-literal: 3.1.0
+ tinyglobby: 0.2.16
+ unplugin: 2.3.11
+ unplugin-utils: 0.3.1
+
+ unimport@6.1.1:
+ dependencies:
+ acorn: 8.16.0
+ escape-string-regexp: 5.0.0
+ estree-walker: 3.0.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ pkg-types: 2.3.0
+ scule: 1.3.0
+ strip-literal: 3.1.0
+ tinyglobby: 0.2.16
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+
+ unplugin-utils@0.3.1:
+ dependencies:
+ pathe: 2.0.3
+ picomatch: 4.0.4
+
+ unplugin@2.3.11:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ acorn: 8.16.0
+ picomatch: 4.0.4
+ webpack-virtual-modules: 0.6.2
+
+ unplugin@3.0.0:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ picomatch: 4.0.4
+ webpack-virtual-modules: 0.6.2
+
+ unrouting@0.1.7:
+ dependencies:
+ escape-string-regexp: 5.0.0
+ ufo: 1.6.3
+
+ unrs-resolver@1.11.1:
+ dependencies:
+ napi-postinstall: 0.3.4
+ optionalDependencies:
+ '@unrs/resolver-binding-android-arm-eabi': 1.11.1
+ '@unrs/resolver-binding-android-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-arm64': 1.11.1
+ '@unrs/resolver-binding-darwin-x64': 1.11.1
+ '@unrs/resolver-binding-freebsd-x64': 1.11.1
+ '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
+ '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
+ '@unrs/resolver-binding-linux-x64-musl': 1.11.1
+ '@unrs/resolver-binding-wasm32-wasi': 1.11.1
+ '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
+ '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
+
+ unrun@0.2.37:
+ dependencies:
+ rolldown: 1.0.0-rc.17
+
+ unstorage@1.17.5(db0@0.3.4)(ioredis@5.10.1):
+ dependencies:
+ anymatch: 3.1.3
+ chokidar: 5.0.0
+ destr: 2.0.5
+ h3: 1.15.11
+ lru-cache: 11.3.5
+ node-fetch-native: 1.6.7
+ ofetch: 1.5.1
+ ufo: 1.6.3
+ optionalDependencies:
+ db0: 0.3.4
+ ioredis: 5.10.1
+
+ untun@0.1.3:
+ dependencies:
+ citty: 0.1.6
+ consola: 3.4.2
+ pathe: 1.1.2
+
+ untyped@2.0.0:
+ dependencies:
+ citty: 0.1.6
+ defu: 6.1.7
+ jiti: 2.6.1
+ knitwork: 1.3.0
+ scule: 1.3.0
+
+ unwasm@0.5.3:
+ dependencies:
+ exsolve: 1.0.8
+ knitwork: 1.3.0
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ pathe: 2.0.3
+ pkg-types: 2.3.0
+
+ update-browserslist-db@1.2.3(browserslist@4.28.2):
+ dependencies:
+ browserslist: 4.28.2
+ escalade: 3.2.0
+ picocolors: 1.1.1
+
+ uqr@0.1.3: {}
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ util-deprecate@1.0.2: {}
+
+ vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ dependencies:
+ birpc: 2.9.0
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-hot-client: 2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+
+ vite-hot-client@2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ dependencies:
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+
+ vite-node@5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3):
+ dependencies:
+ cac: 6.7.14
+ es-module-lexer: 2.0.0
+ obug: 2.1.1
+ pathe: 2.0.3
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ transitivePeerDependencies:
+ - '@types/node'
+ - jiti
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - yaml
+
+ vite-plugin-checker@0.12.0(eslint@10.2.1(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ dependencies:
+ '@babel/code-frame': 7.29.0
+ chokidar: 4.0.3
+ npm-run-path: 6.0.0
+ picocolors: 1.1.1
+ picomatch: 4.0.4
+ tiny-invariant: 1.3.3
+ tinyglobby: 0.2.16
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vscode-uri: 3.1.0
+ optionalDependencies:
+ eslint: 10.2.1(jiti@2.6.1)
+ optionator: 0.9.4
+ typescript: 6.0.3
+
+ vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ dependencies:
+ ansis: 4.2.0
+ debug: 4.4.3
+ error-stack-parser-es: 1.0.5
+ ohash: 2.0.11
+ open: 10.2.0
+ perfect-debounce: 2.1.0
+ sirv: 3.0.2
+ unplugin-utils: 0.3.1
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ optionalDependencies:
+ '@nuxt/kit': 4.4.2(magicast@0.5.2)
+ transitivePeerDependencies:
+ - supports-color
+
+ vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)):
+ dependencies:
+ estree-walker: 3.0.3
+ exsolve: 1.0.8
+ magic-string: 0.30.21
+ pathe: 2.0.3
+ source-map-js: 1.2.1
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vue: 3.5.33(typescript@6.0.3)
+
+ vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3):
+ dependencies:
+ esbuild: 0.27.7
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+ postcss: 8.5.10
+ rollup: 4.60.2
+ tinyglobby: 0.2.16
+ optionalDependencies:
+ '@types/node': 25.6.0
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ lightningcss: 1.32.0
+ terser: 5.46.2
+ yaml: 2.8.3
+
+ vitest@4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ dependencies:
+ '@vitest/expect': 4.1.5
+ '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@vitest/pretty-format': 4.1.5
+ '@vitest/runner': 4.1.5
+ '@vitest/snapshot': 4.1.5
+ '@vitest/spy': 4.1.5
+ '@vitest/utils': 4.1.5
+ es-module-lexer: 2.0.0
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ obug: 2.1.1
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ std-env: 4.1.0
+ tinybench: 2.9.0
+ tinyexec: 1.1.1
+ tinyglobby: 0.2.16
+ tinyrainbow: 3.1.0
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 25.6.0
+ transitivePeerDependencies:
+ - msw
+
+ vscode-uri@3.1.0: {}
+
+ vue-bundle-renderer@2.2.0:
+ dependencies:
+ ufo: 1.6.3
+
+ vue-devtools-stub@0.1.0: {}
+
+ vue-eslint-parser@10.4.0(eslint@10.2.1(jiti@2.6.1)):
+ dependencies:
+ debug: 4.4.3
+ eslint: 10.2.1(jiti@2.6.1)
+ eslint-scope: 9.1.2
+ eslint-visitor-keys: 5.0.1
+ espree: 11.2.0
+ esquery: 1.7.0
+ semver: 7.7.4
+ transitivePeerDependencies:
+ - supports-color
+
+ vue-router@5.0.6(@vue/compiler-sfc@3.5.33)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3)):
+ dependencies:
+ '@babel/generator': 7.29.1
+ '@vue-macros/common': 3.1.2(vue@3.5.33(typescript@6.0.3))
+ '@vue/devtools-api': 8.1.1
+ ast-walker-scope: 0.8.3
+ chokidar: 5.0.0
+ json5: 2.2.3
+ local-pkg: 1.1.2
+ magic-string: 0.30.21
+ mlly: 1.8.2
+ muggle-string: 0.4.1
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ scule: 1.3.0
+ tinyglobby: 0.2.16
+ unplugin: 3.0.0
+ unplugin-utils: 0.3.1
+ vue: 3.5.33(typescript@6.0.3)
+ yaml: 2.8.3
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.33
+ pinia: 3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))
+
+ vue@3.5.33(typescript@6.0.3):
+ dependencies:
+ '@vue/compiler-dom': 3.5.33
+ '@vue/compiler-sfc': 3.5.33
+ '@vue/runtime-dom': 3.5.33
+ '@vue/server-renderer': 3.5.33(vue@3.5.33(typescript@6.0.3))
+ '@vue/shared': 3.5.33
+ optionalDependencies:
+ typescript: 6.0.3
+
+ webidl-conversions@3.0.1: {}
+
+ webpack-virtual-modules@0.6.2: {}
+
+ whatwg-url@5.0.0:
+ dependencies:
+ tr46: 0.0.3
+ webidl-conversions: 3.0.1
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ which@6.0.1:
+ dependencies:
+ isexe: 4.0.0
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ word-wrap@1.2.5: {}
+
+ wrap-ansi@7.0.0:
+ dependencies:
+ ansi-styles: 4.3.0
+ string-width: 4.2.3
+ strip-ansi: 6.0.1
+
+ wrap-ansi@8.1.0:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 5.1.2
+ strip-ansi: 7.2.0
+
+ wrap-ansi@9.0.2:
+ dependencies:
+ ansi-styles: 6.2.3
+ string-width: 7.2.0
+ strip-ansi: 7.2.0
+
+ ws@8.20.0: {}
+
+ wsl-utils@0.1.0:
+ dependencies:
+ is-wsl: 3.1.1
+
+ wsl-utils@0.3.1:
+ dependencies:
+ is-wsl: 3.1.1
+ powershell-utils: 0.1.0
+
+ xml-name-validator@4.0.0: {}
+
+ y18n@5.0.8: {}
+
+ yallist@3.1.1: {}
+
+ yallist@5.0.0: {}
+
+ yaml@2.8.3: {}
+
+ yargs-parser@22.0.0: {}
+
+ yargs@18.0.0:
+ dependencies:
+ cliui: 9.0.1
+ escalade: 3.2.0
+ get-caller-file: 2.0.5
+ string-width: 7.2.0
+ y18n: 5.0.8
+ yargs-parser: 22.0.0
+
+ yocto-queue@0.1.0: {}
+
+ yocto-queue@1.2.2: {}
+
+ youch-core@0.3.3:
+ dependencies:
+ '@poppinss/exception': 1.2.3
+ error-stack-parser-es: 1.0.5
+
+ youch@4.1.1:
+ dependencies:
+ '@poppinss/colors': 4.1.6
+ '@poppinss/dumper': 0.7.0
+ '@speed-highlight/core': 1.2.15
+ cookie-es: 3.1.1
+ youch-core: 0.3.3
+
+ zip-stream@6.0.1:
+ dependencies:
+ archiver-utils: 5.0.2
+ compress-commons: 6.0.2
+ readable-stream: 4.7.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
new file mode 100644
index 00000000..d6f93c7d
--- /dev/null
+++ b/pnpm-workspace.yaml
@@ -0,0 +1,8 @@
+packages:
+ - "apps/frontend"
+ - "packages/*"
+
+allowBuilds:
+ "@parcel/watcher": true
+ esbuild: true
+ unrs-resolver: true
From 50b02a3c74d4c002a900003329c7a422f91e604e Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 25 Apr 2026 13:55:41 +1000
Subject: [PATCH 30/51] chore: unify node workspace and workflow naming
---
.github/workflows/alienmark-ci.yml | 45 +
...k-deploy.yml => alienmark-docs-deploy.yml} | 4 +-
.github/workflows/backend-api-docs.yml | 2 +-
.github/workflows/backend-lint.yml | 2 +-
.github/workflows/backend-tests.yml | 2 +-
...eploy.yml => contributors-docs-deploy.yml} | 4 +-
.github/workflows/docs-validate.yml | 2 +-
apps/frontend/eslint.config.mjs | 6 +
apps/frontend/package.json | 1 +
apps/frontend/pnpm-lock.yaml | 8679 -----------------
packages/alienmark/pnpm-lock.yaml | 1252 ---
pnpm-lock.yaml | 3 +
12 files changed, 63 insertions(+), 9939 deletions(-)
create mode 100644 .github/workflows/alienmark-ci.yml
rename .github/workflows/{alienmark-deploy.yml => alienmark-docs-deploy.yml} (92%)
rename .github/workflows/{contributors-deploy.yml => contributors-docs-deploy.yml} (92%)
create mode 100644 apps/frontend/eslint.config.mjs
delete mode 100644 apps/frontend/pnpm-lock.yaml
delete mode 100644 packages/alienmark/pnpm-lock.yaml
diff --git a/.github/workflows/alienmark-ci.yml b/.github/workflows/alienmark-ci.yml
new file mode 100644
index 00000000..e390a77d
--- /dev/null
+++ b/.github/workflows/alienmark-ci.yml
@@ -0,0 +1,45 @@
+name: "AlienMark: CI"
+
+on:
+ pull_request:
+ paths:
+ - "packages/alienmark/**"
+ - "apps/frontend/package.json"
+ - "package.json"
+ - "pnpm-lock.yaml"
+ - "pnpm-workspace.yaml"
+ - "make/node.mk"
+ - ".github/workflows/alienmark-ci.yml"
+
+permissions:
+ contents: read
+
+jobs:
+ alienmark:
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: "24"
+ cache: "pnpm"
+ cache-dependency-path: pnpm-lock.yaml
+
+ - name: Enable Corepack
+ run: corepack enable
+
+ - name: Install workspace dependencies
+ run: pnpm install --frozen-lockfile
+
+ - name: Run Alienmark type check
+ run: pnpm --filter alienmark check
+
+ - name: Run Alienmark tests
+ run: pnpm --filter alienmark test
+
+ - name: Build Alienmark
+ run: pnpm --filter alienmark build
diff --git a/.github/workflows/alienmark-deploy.yml b/.github/workflows/alienmark-docs-deploy.yml
similarity index 92%
rename from .github/workflows/alienmark-deploy.yml
rename to .github/workflows/alienmark-docs-deploy.yml
index 71afbd81..1f1004a6 100644
--- a/.github/workflows/alienmark-deploy.yml
+++ b/.github/workflows/alienmark-docs-deploy.yml
@@ -1,4 +1,4 @@
-name: Deploy Alienmark Docs to S3
+name: "AlienMark Docs: Deploy"
on:
push:
@@ -6,7 +6,7 @@ on:
- main
paths:
- "docs/alienmark/**"
- - ".github/workflows/alienmark-deploy.yml"
+ - ".github/workflows/alienmark-docs-deploy.yml"
permissions:
contents: read
diff --git a/.github/workflows/backend-api-docs.yml b/.github/workflows/backend-api-docs.yml
index 37ee5b59..7d25f264 100644
--- a/.github/workflows/backend-api-docs.yml
+++ b/.github/workflows/backend-api-docs.yml
@@ -1,4 +1,4 @@
-name: Backend API Docs
+name: "Backend: API Docs"
on:
push:
diff --git a/.github/workflows/backend-lint.yml b/.github/workflows/backend-lint.yml
index 56d06b2a..46aff475 100644
--- a/.github/workflows/backend-lint.yml
+++ b/.github/workflows/backend-lint.yml
@@ -1,4 +1,4 @@
-name: Backend Lint
+name: "Backend: Lint"
on:
pull_request:
diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml
index 8da4869d..0db125c9 100644
--- a/.github/workflows/backend-tests.yml
+++ b/.github/workflows/backend-tests.yml
@@ -1,4 +1,4 @@
-name: Backend Tests
+name: "Backend: Tests"
on:
pull_request:
diff --git a/.github/workflows/contributors-deploy.yml b/.github/workflows/contributors-docs-deploy.yml
similarity index 92%
rename from .github/workflows/contributors-deploy.yml
rename to .github/workflows/contributors-docs-deploy.yml
index a46cc719..09ee0595 100644
--- a/.github/workflows/contributors-deploy.yml
+++ b/.github/workflows/contributors-docs-deploy.yml
@@ -1,4 +1,4 @@
-name: Deploy Contributor Docs to GitHub Pages
+name: "Contributors Docs: Deploy"
on:
push:
@@ -6,7 +6,7 @@ on:
- main
paths:
- "docs/contributors/**"
- - ".github/workflows/contributors-deploy.yml"
+ - ".github/workflows/contributors-docs-deploy.yml"
permissions:
contents: read
diff --git a/.github/workflows/docs-validate.yml b/.github/workflows/docs-validate.yml
index 13fedb88..c0ebdd52 100644
--- a/.github/workflows/docs-validate.yml
+++ b/.github/workflows/docs-validate.yml
@@ -1,4 +1,4 @@
-name: Docs Validate
+name: "Docs: Validate"
on:
pull_request:
diff --git a/apps/frontend/eslint.config.mjs b/apps/frontend/eslint.config.mjs
new file mode 100644
index 00000000..934c3a1d
--- /dev/null
+++ b/apps/frontend/eslint.config.mjs
@@ -0,0 +1,6 @@
+// @ts-check
+import withNuxt from './.nuxt/eslint.config.mjs'
+
+export default withNuxt(
+ // Your custom configs here
+)
diff --git a/apps/frontend/package.json b/apps/frontend/package.json
index ede9a2cd..69df48f0 100644
--- a/apps/frontend/package.json
+++ b/apps/frontend/package.json
@@ -12,6 +12,7 @@
"dependencies": {
"@pinia/nuxt": "^0.11.3",
"@tailwindcss/vite": "^4.2.2",
+ "alienmark": "workspace:*",
"nuxt": "^4.4.2",
"pinia": "^3.0.4",
"tailwindcss": "^4.2.2",
diff --git a/apps/frontend/pnpm-lock.yaml b/apps/frontend/pnpm-lock.yaml
deleted file mode 100644
index 3652cfb7..00000000
--- a/apps/frontend/pnpm-lock.yaml
+++ /dev/null
@@ -1,8679 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- dependencies:
- '@pinia/nuxt':
- specifier: ^0.11.3
- version: 0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))
- '@tailwindcss/vite':
- specifier: ^4.2.2
- version: 4.2.2(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
- nuxt:
- specifier: ^4.4.2
- version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3)
- pinia:
- specifier: ^3.0.4
- version: 3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2))
- tailwindcss:
- specifier: ^4.2.2
- version: 4.2.2
- vue:
- specifier: ^3.5.31
- version: 3.5.32(typescript@6.0.2)
- vue-router:
- specifier: ^5.0.4
- version: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2))
- devDependencies:
- '@nuxt/eslint':
- specifier: ^1.15.2
- version: 1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.32)(eslint@10.2.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
- eslint:
- specifier: ^10.2.0
- version: 10.2.0(jiti@2.6.1)
- typescript:
- specifier: ^6.0.2
- version: 6.0.2
-
-packages:
-
- '@antfu/install-pkg@1.1.0':
- resolution: {integrity: sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==}
-
- '@apidevtools/json-schema-ref-parser@14.2.1':
- resolution: {integrity: sha512-HmdFw9CDYqM6B25pqGBpNeLCKvGPlIx1EbLrVL0zPvj50CJQUHyBNBw45Muk0kEIkogo1VZvOKHajdMuAzSxRg==}
- engines: {node: '>= 20'}
- peerDependencies:
- '@types/json-schema': ^7.0.15
-
- '@babel/code-frame@7.29.0':
- resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/compat-data@7.29.0':
- resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/core@7.29.0':
- resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/generator@7.29.1':
- resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-annotate-as-pure@7.27.3':
- resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-compilation-targets@7.28.6':
- resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-create-class-features-plugin@7.28.6':
- resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-globals@7.28.0':
- resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-member-expression-to-functions@7.28.5':
- resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-imports@7.28.6':
- resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-module-transforms@7.28.6':
- resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-optimise-call-expression@7.27.1':
- resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-plugin-utils@7.28.6':
- resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-replace-supers@7.28.6':
- resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0
-
- '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
- resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-string-parser@7.27.1':
- resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-identifier@7.28.5':
- resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helper-validator-option@7.27.1':
- resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==}
- engines: {node: '>=6.9.0'}
-
- '@babel/helpers@7.29.2':
- resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==}
- engines: {node: '>=6.9.0'}
-
- '@babel/parser@7.29.2':
- resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- '@babel/plugin-syntax-jsx@7.28.6':
- resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-syntax-typescript@7.28.6':
- resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/plugin-transform-typescript@7.28.6':
- resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==}
- engines: {node: '>=6.9.0'}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@babel/template@7.28.6':
- resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==}
- engines: {node: '>=6.9.0'}
-
- '@babel/traverse@7.29.0':
- resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==}
- engines: {node: '>=6.9.0'}
-
- '@babel/types@7.29.0':
- resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==}
- engines: {node: '>=6.9.0'}
-
- '@bomb.sh/tab@0.0.14':
- resolution: {integrity: sha512-cHMk2LI430MVoX1unTt9oK1iZzQS4CYDz97MSxKLNErW69T43Z2QLFTpdS/3jVOIKrIADWfuxQ+nQNJkNV7E4w==}
- hasBin: true
- peerDependencies:
- cac: ^6.7.14
- citty: ^0.1.6 || ^0.2.0
- commander: ^13.1.0
- peerDependenciesMeta:
- cac:
- optional: true
- citty:
- optional: true
- commander:
- optional: true
-
- '@clack/core@1.2.0':
- resolution: {integrity: sha512-qfxof/3T3t9DPU/Rj3OmcFyZInceqj/NVtO9rwIuJqCUgh32gwPjpFQQp/ben07qKlhpwq7GzfWpST4qdJ5Drg==}
-
- '@clack/prompts@1.2.0':
- resolution: {integrity: sha512-4jmztR9fMqPMjz6H/UZXj0zEmE43ha1euENwkckKKel4XpSfokExPo5AiVStdHSAlHekz4d0CA/r45Ok1E4D3w==}
-
- '@cloudflare/kv-asset-handler@0.4.2':
- resolution: {integrity: sha512-SIOD2DxrRRwQ+jgzlXCqoEFiKOFqaPjhnNTGKXSRLvp1HiOvapLaFG2kEr9dYQTYe8rKrd9uvDUzmAITeNyaHQ==}
- engines: {node: '>=18.0.0'}
-
- '@colordx/core@5.0.3':
- resolution: {integrity: sha512-xBQ0MYRTNNxW3mS2sJtlQTT7C3Sasqgh1/PsHva7fyDb5uqYY+gv9V0utDdX8X80mqzbGz3u/IDJdn2d/uW09g==}
-
- '@dxup/nuxt@0.4.0':
- resolution: {integrity: sha512-28LDotpr9G2knUse3cQYsOo6NJq5yhABv4ByRVRYJUmzf9Q31DI7rpRek4POlKy1aAcYyKgu5J2616pyqLohYg==}
- peerDependencies:
- typescript: '*'
-
- '@dxup/unimport@0.1.2':
- resolution: {integrity: sha512-/B8YJGPzaYq1NbsQmwgP8EZqg40NpTw4ZB3suuI0TplbxKHeK94jeaawLmVhCv+YwUnOpiWEz9U6SeThku/8JQ==}
-
- '@emnapi/core@1.9.2':
- resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
-
- '@emnapi/runtime@1.9.2':
- resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
-
- '@emnapi/wasi-threads@1.2.1':
- resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
-
- '@es-joy/jsdoccomment@0.86.0':
- resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- '@es-joy/resolve.exports@1.2.0':
- resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
- engines: {node: '>=10'}
-
- '@esbuild/aix-ppc64@0.27.7':
- resolution: {integrity: sha512-EKX3Qwmhz1eMdEJokhALr0YiD0lhQNwDqkPYyPhiSwKrh7/4KRjQc04sZ8db+5DVVnZ1LmbNDI1uAMPEUBnQPg==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [aix]
-
- '@esbuild/android-arm64@0.27.7':
- resolution: {integrity: sha512-62dPZHpIXzvChfvfLJow3q5dDtiNMkwiRzPylSCfriLvZeq0a1bWChrGx/BbUbPwOrsWKMn8idSllklzBy+dgQ==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [android]
-
- '@esbuild/android-arm@0.27.7':
- resolution: {integrity: sha512-jbPXvB4Yj2yBV7HUfE2KHe4GJX51QplCN1pGbYjvsyCZbQmies29EoJbkEc+vYuU5o45AfQn37vZlyXy4YJ8RQ==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [android]
-
- '@esbuild/android-x64@0.27.7':
- resolution: {integrity: sha512-x5VpMODneVDb70PYV2VQOmIUUiBtY3D3mPBG8NxVk5CogneYhkR7MmM3yR/uMdITLrC1ml/NV1rj4bMJuy9MCg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [android]
-
- '@esbuild/darwin-arm64@0.27.7':
- resolution: {integrity: sha512-5lckdqeuBPlKUwvoCXIgI2D9/ABmPq3Rdp7IfL70393YgaASt7tbju3Ac+ePVi3KDH6N2RqePfHnXkaDtY9fkw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [darwin]
-
- '@esbuild/darwin-x64@0.27.7':
- resolution: {integrity: sha512-rYnXrKcXuT7Z+WL5K980jVFdvVKhCHhUwid+dDYQpH+qu+TefcomiMAJpIiC2EM3Rjtq0sO3StMV/+3w3MyyqQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [darwin]
-
- '@esbuild/freebsd-arm64@0.27.7':
- resolution: {integrity: sha512-B48PqeCsEgOtzME2GbNM2roU29AMTuOIN91dsMO30t+Ydis3z/3Ngoj5hhnsOSSwNzS+6JppqWsuhTp6E82l2w==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [freebsd]
-
- '@esbuild/freebsd-x64@0.27.7':
- resolution: {integrity: sha512-jOBDK5XEjA4m5IJK3bpAQF9/Lelu/Z9ZcdhTRLf4cajlB+8VEhFFRjWgfy3M1O4rO2GQ/b2dLwCUGpiF/eATNQ==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [freebsd]
-
- '@esbuild/linux-arm64@0.27.7':
- resolution: {integrity: sha512-RZPHBoxXuNnPQO9rvjh5jdkRmVizktkT7TCDkDmQ0W2SwHInKCAV95GRuvdSvA7w4VMwfCjUiPwDi0ZO6Nfe9A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [linux]
-
- '@esbuild/linux-arm@0.27.7':
- resolution: {integrity: sha512-RkT/YXYBTSULo3+af8Ib0ykH8u2MBh57o7q/DAs3lTJlyVQkgQvlrPTnjIzzRPQyavxtPtfg0EopvDyIt0j1rA==}
- engines: {node: '>=18'}
- cpu: [arm]
- os: [linux]
-
- '@esbuild/linux-ia32@0.27.7':
- resolution: {integrity: sha512-GA48aKNkyQDbd3KtkplYWT102C5sn/EZTY4XROkxONgruHPU72l+gW+FfF8tf2cFjeHaRbWpOYa/uRBz/Xq1Pg==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [linux]
-
- '@esbuild/linux-loong64@0.27.7':
- resolution: {integrity: sha512-a4POruNM2oWsD4WKvBSEKGIiWQF8fZOAsycHOt6JBpZ+JN2n2JH9WAv56SOyu9X5IqAjqSIPTaJkqN8F7XOQ5Q==}
- engines: {node: '>=18'}
- cpu: [loong64]
- os: [linux]
-
- '@esbuild/linux-mips64el@0.27.7':
- resolution: {integrity: sha512-KabT5I6StirGfIz0FMgl1I+R1H73Gp0ofL9A3nG3i/cYFJzKHhouBV5VWK1CSgKvVaG4q1RNpCTR2LuTVB3fIw==}
- engines: {node: '>=18'}
- cpu: [mips64el]
- os: [linux]
-
- '@esbuild/linux-ppc64@0.27.7':
- resolution: {integrity: sha512-gRsL4x6wsGHGRqhtI+ifpN/vpOFTQtnbsupUF5R5YTAg+y/lKelYR1hXbnBdzDjGbMYjVJLJTd2OFmMewAgwlQ==}
- engines: {node: '>=18'}
- cpu: [ppc64]
- os: [linux]
-
- '@esbuild/linux-riscv64@0.27.7':
- resolution: {integrity: sha512-hL25LbxO1QOngGzu2U5xeXtxXcW+/GvMN3ejANqXkxZ/opySAZMrc+9LY/WyjAan41unrR3YrmtTsUpwT66InQ==}
- engines: {node: '>=18'}
- cpu: [riscv64]
- os: [linux]
-
- '@esbuild/linux-s390x@0.27.7':
- resolution: {integrity: sha512-2k8go8Ycu1Kb46vEelhu1vqEP+UeRVj2zY1pSuPdgvbd5ykAw82Lrro28vXUrRmzEsUV0NzCf54yARIK8r0fdw==}
- engines: {node: '>=18'}
- cpu: [s390x]
- os: [linux]
-
- '@esbuild/linux-x64@0.27.7':
- resolution: {integrity: sha512-hzznmADPt+OmsYzw1EE33ccA+HPdIqiCRq7cQeL1Jlq2gb1+OyWBkMCrYGBJ+sxVzve2ZJEVeePbLM2iEIZSxA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [linux]
-
- '@esbuild/netbsd-arm64@0.27.7':
- resolution: {integrity: sha512-b6pqtrQdigZBwZxAn1UpazEisvwaIDvdbMbmrly7cDTMFnw/+3lVxxCTGOrkPVnsYIosJJXAsILG9XcQS+Yu6w==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [netbsd]
-
- '@esbuild/netbsd-x64@0.27.7':
- resolution: {integrity: sha512-OfatkLojr6U+WN5EDYuoQhtM+1xco+/6FSzJJnuWiUw5eVcicbyK3dq5EeV/QHT1uy6GoDhGbFpprUiHUYggrw==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [netbsd]
-
- '@esbuild/openbsd-arm64@0.27.7':
- resolution: {integrity: sha512-AFuojMQTxAz75Fo8idVcqoQWEHIXFRbOc1TrVcFSgCZtQfSdc1RXgB3tjOn/krRHENUB4j00bfGjyl2mJrU37A==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openbsd]
-
- '@esbuild/openbsd-x64@0.27.7':
- resolution: {integrity: sha512-+A1NJmfM8WNDv5CLVQYJ5PshuRm/4cI6WMZRg1by1GwPIQPCTs1GLEUHwiiQGT5zDdyLiRM/l1G0Pv54gvtKIg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [openbsd]
-
- '@esbuild/openharmony-arm64@0.27.7':
- resolution: {integrity: sha512-+KrvYb/C8zA9CU/g0sR6w2RBw7IGc5J2BPnc3dYc5VJxHCSF1yNMxTV5LQ7GuKteQXZtspjFbiuW5/dOj7H4Yw==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [openharmony]
-
- '@esbuild/sunos-x64@0.27.7':
- resolution: {integrity: sha512-ikktIhFBzQNt/QDyOL580ti9+5mL/YZeUPKU2ivGtGjdTYoqz6jObj6nOMfhASpS4GU4Q/Clh1QtxWAvcYKamA==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [sunos]
-
- '@esbuild/win32-arm64@0.27.7':
- resolution: {integrity: sha512-7yRhbHvPqSpRUV7Q20VuDwbjW5kIMwTHpptuUzV+AA46kiPze5Z7qgt6CLCK3pWFrHeNfDd1VKgyP4O+ng17CA==}
- engines: {node: '>=18'}
- cpu: [arm64]
- os: [win32]
-
- '@esbuild/win32-ia32@0.27.7':
- resolution: {integrity: sha512-SmwKXe6VHIyZYbBLJrhOoCJRB/Z1tckzmgTLfFYOfpMAx63BJEaL9ExI8x7v0oAO3Zh6D/Oi1gVxEYr5oUCFhw==}
- engines: {node: '>=18'}
- cpu: [ia32]
- os: [win32]
-
- '@esbuild/win32-x64@0.27.7':
- resolution: {integrity: sha512-56hiAJPhwQ1R4i+21FVF7V8kSD5zZTdHcVuRFMW0hn753vVfQN8xlx4uOPT4xoGH0Z/oVATuR82AiqSTDIpaHg==}
- engines: {node: '>=18'}
- cpu: [x64]
- os: [win32]
-
- '@eslint-community/eslint-utils@4.9.1':
- resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
- peerDependencies:
- eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
-
- '@eslint-community/regexpp@4.12.2':
- resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
- '@eslint/compat@2.0.4':
- resolution: {integrity: sha512-o598tCGstJv9Kk4XapwP+oDij9HD9Qr3V37ABzTfdzVvbFciV+sfg9zSW6olj6G/IXj7p89SwSzPnZ+JUEPIPg==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- peerDependencies:
- eslint: ^8.40 || 9 || 10
- peerDependenciesMeta:
- eslint:
- optional: true
-
- '@eslint/config-array@0.23.4':
- resolution: {integrity: sha512-lf19F24LSMfF8weXvW5QEtnLqW70u7kgit5e9PSx0MsHAFclGd1T9ynvWEMDT1w5J4Qt54tomGeAhdoAku1Xow==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- '@eslint/config-helpers@0.5.4':
- resolution: {integrity: sha512-jJhqiY3wPMlWWO3370M86CPJ7pt8GmEwSLglMfQhjXal07RCvhmU0as4IuUEW5SJeunfItiEetHmSxCCe9lDBg==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- '@eslint/config-inspector@1.5.0':
- resolution: {integrity: sha512-YK/VdQ+pibx5pcCI2GPZVO6vFemf/pkB662HuFtc5AA4WLQ9upb3fAoZSjOAYoDJx58qGTDp6xq9ldd/vluNxQ==}
- hasBin: true
- peerDependencies:
- eslint: ^8.50.0 || ^9.0.0 || ^10.0.0
-
- '@eslint/core@1.2.0':
- resolution: {integrity: sha512-8FTGbNzTvmSlc4cZBaShkC6YvFMG0riksYWRFKXztqVdXaQbcZLXlFbSpC05s70sGEsXAw0qwhx69JiW7hQS7A==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- '@eslint/js@9.39.4':
- resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@eslint/object-schema@3.0.4':
- resolution: {integrity: sha512-55lO/7+Yp0ISKRP0PsPtNTeNGapXaO085aELZmWCVc5SH3jfrqpuU6YgOdIxMS99ZHkQN1cXKE+cdIqwww9ptw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- '@eslint/plugin-kit@0.7.0':
- resolution: {integrity: sha512-ejvBr8MQCbVsWNZnCwDXjUKq40MDmHalq7cJ6e9s/qzTUFIIo/afzt1Vui9T97FM/V/pN4YsFVoed5NIa96RDg==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- '@humanfs/core@0.19.1':
- resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==}
- engines: {node: '>=18.18.0'}
-
- '@humanfs/node@0.16.7':
- resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==}
- engines: {node: '>=18.18.0'}
-
- '@humanwhocodes/module-importer@1.0.1':
- resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
- engines: {node: '>=12.22'}
-
- '@humanwhocodes/retry@0.4.3':
- resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
- engines: {node: '>=18.18'}
-
- '@ioredis/commands@1.5.1':
- resolution: {integrity: sha512-JH8ZL/ywcJyR9MmJ5BNqZllXNZQqQbnVZOqpPQqE1vHiFgAw4NHbvE0FOduNU8IX9babitBT46571OnPTT0Zcw==}
-
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
-
- '@isaacs/fs-minipass@4.0.1':
- resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
- engines: {node: '>=18.0.0'}
-
- '@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
-
- '@jridgewell/remapping@2.3.5':
- resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/source-map@0.3.11':
- resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==}
-
- '@jridgewell/sourcemap-codec@1.5.5':
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
- '@jridgewell/trace-mapping@0.3.31':
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
-
- '@kwsites/file-exists@1.1.1':
- resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==}
-
- '@kwsites/promise-deferred@1.1.1':
- resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==}
-
- '@mapbox/node-pre-gyp@2.0.3':
- resolution: {integrity: sha512-uwPAhccfFJlsfCxMYTwOdVfOz3xqyj8xYL3zJj8f0pb30tLohnnFPhLuqp4/qoEz8sNxe4SESZedcBojRefIzg==}
- engines: {node: '>=18'}
- hasBin: true
-
- '@napi-rs/wasm-runtime@0.2.12':
- resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
-
- '@napi-rs/wasm-runtime@1.1.2':
- resolution: {integrity: sha512-sNXv5oLJ7ob93xkZ1XnxisYhGYXfaG9f65/ZgYuAu3qt7b3NadcOEhLvx28hv31PgX8SZJRYrAIPQilQmFpLVw==}
- peerDependencies:
- '@emnapi/core': ^1.7.1
- '@emnapi/runtime': ^1.7.1
-
- '@nodelib/fs.scandir@2.1.5':
- resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.stat@2.0.5':
- resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
- engines: {node: '>= 8'}
-
- '@nodelib/fs.walk@1.2.8':
- resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
- engines: {node: '>= 8'}
-
- '@nuxt/cli@3.34.0':
- resolution: {integrity: sha512-KVI4xSo96UtUUbmxr9ouWTytbj1LzTw5alsM4vC/gSY/l8kPMRAlq0XpNSAVTDJyALzLY70WhaIMX24LJLpdFw==}
- engines: {node: ^16.14.0 || >=18.0.0}
- hasBin: true
- peerDependencies:
- '@nuxt/schema': ^4.3.1
- peerDependenciesMeta:
- '@nuxt/schema':
- optional: true
-
- '@nuxt/devalue@2.0.2':
- resolution: {integrity: sha512-GBzP8zOc7CGWyFQS6dv1lQz8VVpz5C2yRszbXufwG/9zhStTIH50EtD87NmWbTMwXDvZLNg8GIpb1UFdH93JCA==}
-
- '@nuxt/devtools-kit@3.2.4':
- resolution: {integrity: sha512-Yxy2Xgmq5hf3dQy983V0xh0OJV2mYwRZz9eVIGc3EaribdFGPDNGMMbYqX9qCty3Pbxn/bCF3J0UyPaNlHVayQ==}
- peerDependencies:
- vite: '>=6.0'
-
- '@nuxt/devtools-wizard@3.2.4':
- resolution: {integrity: sha512-5tu2+Quu9XTxwtpzM8CUN0UKn/bzZIfJcoGd+at5Yy1RiUQJ4E52tRK0idW1rMSUDkbkvX3dSnu8Tpj7SAtWdQ==}
- hasBin: true
-
- '@nuxt/devtools@3.2.4':
- resolution: {integrity: sha512-VPbFy7hlPzWpEZk4BsuVpNuHq1ZYGV9xezjb7/NGuePuNLqeNn74YZugU+PCtva7OwKhEeTXmMK0Mqo/6+nwNA==}
- hasBin: true
- peerDependencies:
- '@vitejs/devtools': '*'
- vite: '>=6.0'
- peerDependenciesMeta:
- '@vitejs/devtools':
- optional: true
-
- '@nuxt/eslint-config@1.15.2':
- resolution: {integrity: sha512-vS6mWB87tYjB8h3TxG/QziaZ6CGJpEOBd7N/j+64/tjNipUJzNgKwDzyGoOifNqyDDnlvgi6T3m9XpeYm4qRaA==}
- peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
- eslint-plugin-format: '*'
- peerDependenciesMeta:
- eslint-plugin-format:
- optional: true
-
- '@nuxt/eslint-plugin@1.15.2':
- resolution: {integrity: sha512-LZ4gEcPP5GjzAkb6Kk04a4v0vvkTLOpmnEvdDatnkSlxtQLUSwX8v11vcDGXL92ZQ98dFoC1Q1IA6Tz3jdFIig==}
- peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
-
- '@nuxt/eslint@1.15.2':
- resolution: {integrity: sha512-LwDavQoLl+y0sIDqWEYbOnM6FOmXVIYSEjuvkO1hgAqhb0CvG3hgTnfE1qkf1jOAZp3CZGP+6rxRAJ0dxhueIQ==}
- peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
- eslint-webpack-plugin: ^4.1.0
- vite-plugin-eslint2: ^5.0.0
- peerDependenciesMeta:
- eslint-webpack-plugin:
- optional: true
- vite-plugin-eslint2:
- optional: true
-
- '@nuxt/kit@4.4.2':
- resolution: {integrity: sha512-5+IPRNX2CjkBhuWUwz0hBuLqiaJPRoKzQ+SvcdrQDbAyE+VDeFt74VpSFr5/R0ujrK4b+XnSHUJWdS72w6hsog==}
- engines: {node: '>=18.12.0'}
-
- '@nuxt/nitro-server@4.4.2':
- resolution: {integrity: sha512-iMTfraWcpA0MuEnnEI8JFK/4DODY4ss1CfB8m3sBVOqW9jpY1Z6hikxzrtN+CadtepW2aOI5d8TdX5hab+Sb4Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- '@babel/plugin-proposal-decorators': ^7.25.0
- '@rollup/plugin-babel': ^6.0.0 || ^7.0.0
- nuxt: ^4.4.2
- peerDependenciesMeta:
- '@babel/plugin-proposal-decorators':
- optional: true
- '@rollup/plugin-babel':
- optional: true
-
- '@nuxt/schema@4.4.2':
- resolution: {integrity: sha512-/q6C7Qhiricgi+PKR7ovBnJlKTL0memCbA1CzRT+itCW/oeYzUfeMdQ35mGntlBoyRPNrMXbzuSUhfDbSCU57w==}
- engines: {node: ^14.18.0 || >=16.10.0}
-
- '@nuxt/telemetry@2.8.0':
- resolution: {integrity: sha512-zAwXY24KYvpLTmiV+osagd2EHkfs5IF+7oDZYTQoit5r0kPlwaCNlzHp5I/wUAWT4LBw6lG8gZ6bWidAdv/erQ==}
- engines: {node: '>=18.12.0'}
- hasBin: true
- peerDependencies:
- '@nuxt/kit': '>=3.0.0'
-
- '@nuxt/vite-builder@4.4.2':
- resolution: {integrity: sha512-fJaIwMA8ID6BU5EqmoDvnhq4qYDJeWjdHk4jfqy8D3Nm7CoUW0BvX7Ee92XoO05rtUiClGlk/NQ1Ii8hs3ZIbw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- '@babel/plugin-proposal-decorators': ^7.25.0
- '@babel/plugin-syntax-jsx': ^7.25.0
- nuxt: 4.4.2
- rolldown: ^1.0.0-beta.38
- rollup-plugin-visualizer: ^6.0.0 || ^7.0.1
- vue: ^3.3.4
- peerDependenciesMeta:
- '@babel/plugin-proposal-decorators':
- optional: true
- '@babel/plugin-syntax-jsx':
- optional: true
- rolldown:
- optional: true
- rollup-plugin-visualizer:
- optional: true
-
- '@oxc-minify/binding-android-arm-eabi@0.117.0':
- resolution: {integrity: sha512-5Hf2KsGRjxp3HnPU/mse7cQJa5tWfMFUPZQcgSMVsv2JZnGFFOIDzA0Oja2KDD+VPJqMpEJKc2dCHAGZgJxsGg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [android]
-
- '@oxc-minify/binding-android-arm64@0.117.0':
- resolution: {integrity: sha512-uuxGwxA5J4Sap+gz4nxyM/rer6q2A4X1Oe8HpE0CZQyb5cSBULQ15btZiVG3xOBctI5O+c2dwR1aZAP4oGKcLw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [android]
-
- '@oxc-minify/binding-darwin-arm64@0.117.0':
- resolution: {integrity: sha512-lLBf75cxUSLydumToKtGTwbLqO/1urScblJ33Vx0uF38M2ZbL2x51AybBV5vlfLjYNrxvQ8ov0Bj/OhsVO/biA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [darwin]
-
- '@oxc-minify/binding-darwin-x64@0.117.0':
- resolution: {integrity: sha512-wBWwP1voLZMuN4hpe1HRtkPBd4/o/1qan5XssmmI/hewBvGHEHkyvVLS0zu+cKqXDxYzYvb/p+EqU+xSXhEl4A==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [darwin]
-
- '@oxc-minify/binding-freebsd-x64@0.117.0':
- resolution: {integrity: sha512-pYSacHw698oH2vb70iP1cHk6x0zhvAuOvdskvNtEqvfziu8MSjKXa699vA9Cx72+DH5rwVuj1I3f+7no2fWglA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
- resolution: {integrity: sha512-Ugm4Qj7F2+bccjhHCjjnSNHBDPyvjPXWrntID4WJpSrPqt+Az/o0EGdty9sWOjQXRZiTVpa80uqCWZQUn94yTA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
- resolution: {integrity: sha512-qrY6ZviO9wVRI/jl4nRZO4B9os8jaJQemMeWIyFInZNk3lhqihId8iBqMKibJnRaf+JRxLM9j68atXkFRhOHrg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
- resolution: {integrity: sha512-2VLJHKEFBRhCihT/8uesuDPhXpbWu1OlHCxqQ7pdFVqKik1Maj5E9oSDcYzxqfaCRStvTHkmLVWJBK5CVcIadg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-minify/binding-linux-arm64-musl@0.117.0':
- resolution: {integrity: sha512-C3zapJconWpl2Y7LR3GkRkH6jxpuV2iVUfkFcHT5Ffn4Zu7l88mZa2dhcfdULZDybN1Phka/P34YUzuskUUrXw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
- resolution: {integrity: sha512-2T/Bm+3/qTfuNS4gKSzL8qbiYk+ErHW2122CtDx+ilZAzvWcJ8IbqdZIbEWOlwwe03lESTxPwTBLFqVgQU2OeQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
- resolution: {integrity: sha512-MKLjpldYkeoB4T+yAi4aIAb0waifxUjLcKkCUDmYAY3RqBJTvWK34KtfaKZL0IBMIXfD92CbKkcxQirDUS9Xcg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
- resolution: {integrity: sha512-UFVcbPvKUStry6JffriobBp8BHtjmLLPl4bCY+JMxIn/Q3pykCpZzRwFTcDurG/kY8tm+uSNfKKdRNa5Nh9A7g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
- '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
- resolution: {integrity: sha512-B9GyPQ1NKbvpETVAMyJMfRlD3c6UJ7kiuFUAlx9LTYiQL+YIyT6vpuRlq1zgsXxavZluVrfeJv6x0owV4KDx4Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@oxc-minify/binding-linux-x64-gnu@0.117.0':
- resolution: {integrity: sha512-fXfhtr+WWBGNy4M5GjAF5vu/lpulR4Me34FjTyaK9nDrTZs7LM595UDsP1wliksqp4hD/KdoqHGmbCrC+6d4vA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-minify/binding-linux-x64-musl@0.117.0':
- resolution: {integrity: sha512-jFBgGbx1oLadb83ntJmy1dWlAHSQanXTS21G4PgkxyONmxZdZ/UMKr7KsADzMuoPsd2YhJHxzRpwJd9U+4BFBw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@oxc-minify/binding-openharmony-arm64@0.117.0':
- resolution: {integrity: sha512-nxPd9vx1vYz8IlIMdl9HFdOK/ood1H5hzbSFsyO8JU55tkcJoBL8TLCbuFf9pHpOy27l2gcPyV6z3p4eAcTH5Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@oxc-minify/binding-wasm32-wasi@0.117.0':
- resolution: {integrity: sha512-pSvjJ6cCCfEXSteWSiVfZhdRzvpmS3tLhlXrXTYiuTDFrkRCobRP39SRwAzK23rE9i/m2JAaES2xPEW6+xu85g==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
-
- '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
- resolution: {integrity: sha512-9NoT9baFrWPdJRIZVQ1jzPZW9TjPT2sbzQyDdoK7uD1V8JXCe1L2y7sp9k2ldZZheaIcmtNwHc7jyD7kYz/0XQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [win32]
-
- '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
- resolution: {integrity: sha512-E51LTjkRei5u2dpFiYSObuh+e43xg45qlmilSTd0XDGFdYJCOv62Q0MEn61TR+efQYPNleYwWdTS9t+tp9p/4w==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ia32]
- os: [win32]
-
- '@oxc-minify/binding-win32-x64-msvc@0.117.0':
- resolution: {integrity: sha512-I8vniPOxWQdxfIbXNvQLaJ1n8SrnqES6wuiAX10CU72sKsizkds9kDaJ1KzWvDy39RKhTBmD1cJsU2uxPFgizQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [win32]
-
- '@oxc-parser/binding-android-arm-eabi@0.117.0':
- resolution: {integrity: sha512-XarGPJpaobgKjfm7xRfCGWWszuPbm/OeP91NdMhxtcLZ/qLTmWF0P0z0gqmr0Uysi1F1v1BNtcST11THMrcEOw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [android]
-
- '@oxc-parser/binding-android-arm64@0.117.0':
- resolution: {integrity: sha512-EPTs2EBijGmyhPso4rXAL0NSpECXER9IaVKFZEv83YcA6h4uhKW47kmYt+OZcSp130zhHx+lTWILDQ/LDkCRNA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [android]
-
- '@oxc-parser/binding-darwin-arm64@0.117.0':
- resolution: {integrity: sha512-3bAEpyih6r/Kb+Xzn1em1qBMClOS7NsVWgF86k95jpysR5ix/HlKFKSy7cax6PcS96HeHR4kjlME20n/XK1zNg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [darwin]
-
- '@oxc-parser/binding-darwin-x64@0.117.0':
- resolution: {integrity: sha512-W7S99zFwVZhSbCxvjfZkioStFU249DBc4TJw/kK6kfKwx2Zew+jvizX5Y3ZPkAh7fBVUSNOdSeOqLBHLiP50tw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [darwin]
-
- '@oxc-parser/binding-freebsd-x64@0.117.0':
- resolution: {integrity: sha512-xH76lqSdjCSY0KUMPwLXlvQ3YEm3FFVEQmgiOCGNf+stZ6E4Mo3nC102Bo8yKd7aW0foIPAFLYsHgj7vVI/axw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
- resolution: {integrity: sha512-9Hdm1imzrn4RdMYnQKKcy+7p7QsSPIrgVIZmpGSJT02nYDuBWLdG1pdYMPFoEo46yiXry3tS3RoHIpNbT1IiyQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
- resolution: {integrity: sha512-Itszer/VCeYhYVJLcuKnHktlY8QyGnVxapltP68S1XRGlV6IsM9HQAElJRMwQhT6/GkMjOhANmkv2Qu/9v44lw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
- resolution: {integrity: sha512-jBxD7DtlHQ36ivjjZdH0noQJgWNouenzpLmXNKnYaCsBfo3jY95m5iyjYQEiWkvkhJ3TJUAs7tQ1/kEpY7x/Kg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-parser/binding-linux-arm64-musl@0.117.0':
- resolution: {integrity: sha512-QagKTDF4lrz8bCXbUi39Uq5xs7C7itAseKm51f33U+Dyar9eJY/zGKqfME9mKLOiahX7Fc1J3xMWVS0AdDXLPg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
- resolution: {integrity: sha512-RPddpcE/0xxWaommWy0c5i/JdrXcXAkxBS2GOrAUh5LKmyCh03hpJedOAWszG4ADsKQwoUQQ1/tZVGRhZIWtKA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
- resolution: {integrity: sha512-ur/WVZF9FSOiZGxyP+nfxZzuv6r5OJDYoVxJnUR7fM/hhXLh4V/be6rjbzm9KLCDBRwYCEKJtt+XXNccwd06IA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
- resolution: {integrity: sha512-ujGcAx8xAMvhy7X5sBFi3GXML1EtyORuJZ5z2T6UV3U416WgDX/4OCi3GnoteeenvxIf6JgP45B+YTHpt71vpA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
- '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
- resolution: {integrity: sha512-hbsfKjUwRjcMZZvvmpZSc+qS0bHcHRu8aV/I3Ikn9BzOA0ZAgUE7ctPtce5zCU7bM8dnTLi4sJ1Pi9YHdx6Urw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@oxc-parser/binding-linux-x64-gnu@0.117.0':
- resolution: {integrity: sha512-1QrTrf8rige7UPJrYuDKJLQOuJlgkt+nRSJLBMHWNm9TdivzP48HaK3f4q18EjNlglKtn03lgjMu4fryDm8X4A==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-parser/binding-linux-x64-musl@0.117.0':
- resolution: {integrity: sha512-gRvK6HPzF5ITRL68fqb2WYYs/hGviPIbkV84HWCgiJX+LkaOpp+HIHQl3zVZdyKHwopXToTbXbtx/oFjDjl8pg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@oxc-parser/binding-openharmony-arm64@0.117.0':
- resolution: {integrity: sha512-QPJvFbnnDZZY7xc+xpbIBWLThcGBakwaYA9vKV8b3+oS5MGfAZUoTFJcix5+Zg2Ri46sOfrUim6Y6jsKNcssAQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@oxc-parser/binding-wasm32-wasi@0.117.0':
- resolution: {integrity: sha512-+XRSNA0xt3pk/6CUHM7pykVe7M8SdifJk8LX1+fIp/zefvR3HBieZCbwG5un8gogNgh7srLycoh/cQA9uozv5g==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
-
- '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
- resolution: {integrity: sha512-GpxeGS+Vo030DsrXeRPc7OSJOQIyAHkM3mzwBcnQjg/79XnOIDDMXJ5X6/aNdkVt/+Pv35pqKzGA4TQau97x8w==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [win32]
-
- '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
- resolution: {integrity: sha512-tchWEYiso1+objTZirmlR+w3fcIel6PVBOJ8NuC2Jr30dxBOiKUfFLovJLANwHg1+TzeD6pVSLIIIEf2T5o5lQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ia32]
- os: [win32]
-
- '@oxc-parser/binding-win32-x64-msvc@0.117.0':
- resolution: {integrity: sha512-ysRJAjIbB4e5y+t9PZs7TwbgOV/GVT//s30AORLCT/pedYwpYzHq6ApXK7is9fvyfZtgT3anNir8+esurmyaDw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [win32]
-
- '@oxc-project/types@0.117.0':
- resolution: {integrity: sha512-C/kPXBphID44fXdsa2xSOCuzX8fKZiFxPsvucJ6Yfkr6CJlMA+kNLPNKyLoI+l9XlDsNxBrz6h7IIjKU8pB69w==}
-
- '@oxc-transform/binding-android-arm-eabi@0.117.0':
- resolution: {integrity: sha512-17giX7h5VR9Eodru4OoSCFdgwLFIaUxeEn8JWe0vMZrAuRbT9NiDTy5dXdbGQBoO8aXPkbGS38FGlvbi31aujw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [android]
-
- '@oxc-transform/binding-android-arm64@0.117.0':
- resolution: {integrity: sha512-1LrDd1CPochtLx04pAafdah6QtOQQj0/Evttevi+0u8rCI5FKucIG7pqBHkIQi/y7pycFYIj+GebhET80maeUg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [android]
-
- '@oxc-transform/binding-darwin-arm64@0.117.0':
- resolution: {integrity: sha512-K1Xo52xJOvFfHSkz2ax9X5Qsku23RCfTIPbHZWdUCAQ1TQooI+sFcewSubhVUJ4DVK12/tYT//XXboumin+FHA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [darwin]
-
- '@oxc-transform/binding-darwin-x64@0.117.0':
- resolution: {integrity: sha512-ftFT/8Laolfq49mRRWLkIhd1AbJ0MI5bW3LwddvdoAg9zXwkx4qhzTYyBPRZhvXWftts+NjlHfHsXCOqI4tPtw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [darwin]
-
- '@oxc-transform/binding-freebsd-x64@0.117.0':
- resolution: {integrity: sha512-QDRyw0atg9BMnwOwnJeW6REzWPLEjiWtsCc2Sj612F1hCdvP+n0L3o8sHinEWM+BiOkOYtUxHA69WjUslc3G+g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
- resolution: {integrity: sha512-UvpvOjyQVgiIJahIpMT0qAsLJT8O1ibHTBgXGOsZkQgw1xmjARPQ07dpRcucPPn6cqCF3wrxfbqtr2vFHaMkdA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
- resolution: {integrity: sha512-cIhztGFjKk8ngP+/7EPkEhzWMGr2neezxgWirSn/f/MirjH234oHHGJ2diKIbGQEsy0aOuJMTkL9NLfzfmH51A==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
- resolution: {integrity: sha512-mXbDfvDN0RZVg7v4LohNzU0kK3fMAZgkUKTkpFVgxEvzibEG5VpSznkypUwHI4a8U8pz+K6mGaLetX3Xt+CvvA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-transform/binding-linux-arm64-musl@0.117.0':
- resolution: {integrity: sha512-ykxpPQp0eAcSmhy0Y3qKvdanHY4d8THPonDfmCoktUXb6r0X6qnjpJB3V+taN1wevW55bOEZd97kxtjTKjqhmg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
- resolution: {integrity: sha512-Rvspti4Kr7eq6zSrURK5WjscfWQPvmy/KjJZV45neRKW8RLonE3r9+NgrwSLGoHvQ3F24fbqlkplox1RtlhH5A==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
- resolution: {integrity: sha512-Dr2ZW9ZZ4l1eQ5JUEUY3smBh4JFPCPuybWaDZTLn3ADZjyd8ZtNXEjeMT8rQbbhbgSL9hEgbwaqraole3FNThQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
- resolution: {integrity: sha512-oD1Bnes1bIC3LVBSrWEoSUBj6fvatESPwAVWfJVGVQlqWuOs/ZBn1e4Nmbipo3KGPHK7DJY75r/j7CQCxhrOFQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
- '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
- resolution: {integrity: sha512-qT//IAPLvse844t99Kff5j055qEbXfwzWgvCMb0FyjisnB8foy25iHZxZIocNBe6qwrCYWUP1M8rNrB/WyfS1Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@oxc-transform/binding-linux-x64-gnu@0.117.0':
- resolution: {integrity: sha512-2YEO5X+KgNzFqRVO5dAkhjcI5gwxus4NSWVl/+cs2sI6P0MNPjqE3VWPawl4RTC11LvetiiZdHcujUCPM8aaUw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@oxc-transform/binding-linux-x64-musl@0.117.0':
- resolution: {integrity: sha512-3wqWbTSaIFZvDr1aqmTul4cg8PRWYh6VC52E8bLI7ytgS/BwJLW+sDUU2YaGIds4sAf/1yKeJRmudRCDPW9INg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@oxc-transform/binding-openharmony-arm64@0.117.0':
- resolution: {integrity: sha512-Ebxx6NPqhzlrjvx4+PdSqbOq+li0f7X59XtJljDghkbJsbnkHvhLmPR09ifHt5X32UlZN63ekjwcg/nbmHLLlA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@oxc-transform/binding-wasm32-wasi@0.117.0':
- resolution: {integrity: sha512-Nn8mmcBiQ0XKHLTb05QBlH+CDkn7jf5YDVv9FtKhy4zJT0NEU9y3dXVbfcurOpsVrG9me4ktzDQNCaAoJjUQyw==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
-
- '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
- resolution: {integrity: sha512-15cbsF8diXWGnHrTsVgVeabETiT/KdMAfRAcot99xsaVecJs3pITNNjC6Qj+/TPNpehbgIFjlhhxOVSbQsTBgg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [win32]
-
- '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
- resolution: {integrity: sha512-I6DkhCuFX6p9rckdWiLuZfBWrrYUC7sNX+zLaCfa5zvrPNwo1/29KkefvqXVxu3AWT/6oZAbtc0A8/mqhETJPQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ia32]
- os: [win32]
-
- '@oxc-transform/binding-win32-x64-msvc@0.117.0':
- resolution: {integrity: sha512-V7YzavQnYcRJBeJkp0qpb3FKrlm5I57XJetCYB4jsjStuboQmnFMZ/XQH55Szlf/kVyeU9ddQwv72gJJ5BrGjQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [win32]
-
- '@package-json/types@0.0.12':
- resolution: {integrity: sha512-uu43FGU34B5VM9mCNjXCwLaGHYjXdNincqKLaraaCW+7S2+SmiBg1Nv8bPnmschrIfZmfKNY9f3fC376MRrObw==}
-
- '@parcel/watcher-android-arm64@2.5.6':
- resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [android]
-
- '@parcel/watcher-darwin-arm64@2.5.6':
- resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- '@parcel/watcher-darwin-x64@2.5.6':
- resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [darwin]
-
- '@parcel/watcher-freebsd-x64@2.5.6':
- resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [freebsd]
-
- '@parcel/watcher-linux-arm-glibc@2.5.6':
- resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
-
- '@parcel/watcher-linux-arm-musl@2.5.6':
- resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm]
- os: [linux]
- libc: [musl]
-
- '@parcel/watcher-linux-arm64-glibc@2.5.6':
- resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@parcel/watcher-linux-arm64-musl@2.5.6':
- resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@parcel/watcher-linux-x64-glibc@2.5.6':
- resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@parcel/watcher-linux-x64-musl@2.5.6':
- resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@parcel/watcher-wasm@2.5.6':
- resolution: {integrity: sha512-byAiBZ1t3tXQvc8dMD/eoyE7lTXYorhn+6uVW5AC+JGI1KtJC/LvDche5cfUE+qiefH+Ybq0bUCJU0aB1cSHUA==}
- engines: {node: '>= 10.0.0'}
- bundledDependencies:
- - napi-wasm
-
- '@parcel/watcher-win32-arm64@2.5.6':
- resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==}
- engines: {node: '>= 10.0.0'}
- cpu: [arm64]
- os: [win32]
-
- '@parcel/watcher-win32-ia32@2.5.6':
- resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==}
- engines: {node: '>= 10.0.0'}
- cpu: [ia32]
- os: [win32]
-
- '@parcel/watcher-win32-x64@2.5.6':
- resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==}
- engines: {node: '>= 10.0.0'}
- cpu: [x64]
- os: [win32]
-
- '@parcel/watcher@2.5.6':
- resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==}
- engines: {node: '>= 10.0.0'}
-
- '@pinia/nuxt@0.11.3':
- resolution: {integrity: sha512-7WVNHpWx4qAEzOlnyrRC88kYrwnlR/PrThWT0XI1dSNyUAXu/KBv9oR37uCgYkZroqP5jn8DfzbkNF3BtKvE9w==}
- peerDependencies:
- pinia: ^3.0.4
-
- '@pkgjs/parseargs@0.11.0':
- resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
- engines: {node: '>=14'}
-
- '@polka/url@1.0.0-next.29':
- resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==}
-
- '@poppinss/colors@4.1.6':
- resolution: {integrity: sha512-H9xkIdFswbS8n1d6vmRd8+c10t2Qe+rZITbbDHHkQixH5+2x1FDGmi/0K+WgWiqQFKPSlIYB7jlH6Kpfn6Fleg==}
-
- '@poppinss/dumper@0.7.0':
- resolution: {integrity: sha512-0UTYalzk2t6S4rA2uHOz5bSSW2CHdv4vggJI6Alg90yvl0UgXs6XSXpH96OH+bRkX4J/06djv29pqXJ0lq5Kag==}
-
- '@poppinss/exception@1.2.3':
- resolution: {integrity: sha512-dCED+QRChTVatE9ibtoaxc+WkdzOSjYTKi/+uacHWIsfodVfpsueo3+DKpgU5Px8qXjgmXkSvhXvSCz3fnP9lw==}
-
- '@rolldown/pluginutils@1.0.0-rc.13':
- resolution: {integrity: sha512-3ngTAv6F/Py35BsYbeeLeecvhMKdsKm4AoOETVhAA+Qc8nrA2I0kF7oa93mE9qnIurngOSpMnQ0x2nQY2FPviA==}
-
- '@rolldown/pluginutils@1.0.0-rc.2':
- resolution: {integrity: sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==}
-
- '@rollup/plugin-alias@6.0.0':
- resolution: {integrity: sha512-tPCzJOtS7uuVZd+xPhoy5W4vThe6KWXNmsFCNktaAh5RTqcLiSfT4huPQIXkgJ6YCOjJHvecOAzQxLFhPxKr+g==}
- engines: {node: '>=20.19.0'}
- peerDependencies:
- rollup: '>=4.0.0'
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/plugin-commonjs@29.0.2':
- resolution: {integrity: sha512-S/ggWH1LU7jTyi9DxZOKyxpVd4hF/OZ0JrEbeLjXk/DFXwRny0tjD2c992zOUYQobLrVkRVMDdmHP16HKP7GRg==}
- engines: {node: '>=16.0.0 || 14 >= 14.17'}
- peerDependencies:
- rollup: ^2.68.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/plugin-inject@5.0.5':
- resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/plugin-json@6.1.0':
- resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/plugin-node-resolve@16.0.3':
- resolution: {integrity: sha512-lUYM3UBGuM93CnMPG1YocWu7X802BrNF3jW2zny5gQyLQgRFJhV1Sq0Zi74+dh/6NBx1DxFC4b4GXg9wUCG5Qg==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^2.78.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/plugin-replace@6.0.3':
- resolution: {integrity: sha512-J4RZarRvQAm5IF0/LwUUg+obsm+xZhYnbMXmXROyoSE1ATJe3oXSb9L5MMppdxP2ylNSjv6zFBwKYjcKMucVfA==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/plugin-terser@1.0.0':
- resolution: {integrity: sha512-FnCxhTBx6bMOYQrar6C8h3scPt8/JwIzw3+AJ2K++6guogH5fYaIFia+zZuhqv0eo1RN7W1Pz630SyvLbDjhtQ==}
- engines: {node: '>=20.0.0'}
- peerDependencies:
- rollup: ^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/pluginutils@5.3.0':
- resolution: {integrity: sha512-5EdhGZtnu3V88ces7s53hhfK5KSASnJZv8Lulpc04cWO3REESroJXg73DFsOmgbU2BhwV0E20bu2IDZb3VKW4Q==}
- engines: {node: '>=14.0.0'}
- peerDependencies:
- rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
- peerDependenciesMeta:
- rollup:
- optional: true
-
- '@rollup/rollup-android-arm-eabi@4.60.1':
- resolution: {integrity: sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==}
- cpu: [arm]
- os: [android]
-
- '@rollup/rollup-android-arm64@4.60.1':
- resolution: {integrity: sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==}
- cpu: [arm64]
- os: [android]
-
- '@rollup/rollup-darwin-arm64@4.60.1':
- resolution: {integrity: sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==}
- cpu: [arm64]
- os: [darwin]
-
- '@rollup/rollup-darwin-x64@4.60.1':
- resolution: {integrity: sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==}
- cpu: [x64]
- os: [darwin]
-
- '@rollup/rollup-freebsd-arm64@4.60.1':
- resolution: {integrity: sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==}
- cpu: [arm64]
- os: [freebsd]
-
- '@rollup/rollup-freebsd-x64@4.60.1':
- resolution: {integrity: sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==}
- cpu: [x64]
- os: [freebsd]
-
- '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
- resolution: {integrity: sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==}
- cpu: [arm]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-arm-musleabihf@4.60.1':
- resolution: {integrity: sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==}
- cpu: [arm]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-arm64-gnu@4.60.1':
- resolution: {integrity: sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-arm64-musl@4.60.1':
- resolution: {integrity: sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-loong64-gnu@4.60.1':
- resolution: {integrity: sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==}
- cpu: [loong64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-loong64-musl@4.60.1':
- resolution: {integrity: sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==}
- cpu: [loong64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-ppc64-gnu@4.60.1':
- resolution: {integrity: sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-ppc64-musl@4.60.1':
- resolution: {integrity: sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==}
- cpu: [ppc64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-riscv64-gnu@4.60.1':
- resolution: {integrity: sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-riscv64-musl@4.60.1':
- resolution: {integrity: sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-linux-s390x-gnu@4.60.1':
- resolution: {integrity: sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-x64-gnu@4.60.1':
- resolution: {integrity: sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@rollup/rollup-linux-x64-musl@4.60.1':
- resolution: {integrity: sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@rollup/rollup-openbsd-x64@4.60.1':
- resolution: {integrity: sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==}
- cpu: [x64]
- os: [openbsd]
-
- '@rollup/rollup-openharmony-arm64@4.60.1':
- resolution: {integrity: sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==}
- cpu: [arm64]
- os: [openharmony]
-
- '@rollup/rollup-win32-arm64-msvc@4.60.1':
- resolution: {integrity: sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==}
- cpu: [arm64]
- os: [win32]
-
- '@rollup/rollup-win32-ia32-msvc@4.60.1':
- resolution: {integrity: sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==}
- cpu: [ia32]
- os: [win32]
-
- '@rollup/rollup-win32-x64-gnu@4.60.1':
- resolution: {integrity: sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==}
- cpu: [x64]
- os: [win32]
-
- '@rollup/rollup-win32-x64-msvc@4.60.1':
- resolution: {integrity: sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==}
- cpu: [x64]
- os: [win32]
-
- '@sindresorhus/base62@1.0.0':
- resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
- engines: {node: '>=18'}
-
- '@sindresorhus/is@7.2.0':
- resolution: {integrity: sha512-P1Cz1dWaFfR4IR+U13mqqiGsLFf1KbayybWwdd2vfctdV6hDpUkgCY0nKOLLTMSoRd/jJNjtbqzf13K8DCCXQw==}
- engines: {node: '>=18'}
-
- '@sindresorhus/merge-streams@4.0.0':
- resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==}
- engines: {node: '>=18'}
-
- '@speed-highlight/core@1.2.15':
- resolution: {integrity: sha512-BMq1K3DsElxDWawkX6eLg9+CKJrTVGCBAWVuHXVUV2u0s2711qiChLSId6ikYPfxhdYocLNt3wWwSvDiTvFabw==}
-
- '@stylistic/eslint-plugin@5.10.0':
- resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
-
- '@tailwindcss/node@4.2.2':
- resolution: {integrity: sha512-pXS+wJ2gZpVXqFaUEjojq7jzMpTGf8rU6ipJz5ovJV6PUGmlJ+jvIwGrzdHdQ80Sg+wmQxUFuoW1UAAwHNEdFA==}
-
- '@tailwindcss/oxide-android-arm64@4.2.2':
- resolution: {integrity: sha512-dXGR1n+P3B6748jZO/SvHZq7qBOqqzQ+yFrXpoOWWALWndF9MoSKAT3Q0fYgAzYzGhxNYOoysRvYlpixRBBoDg==}
- engines: {node: '>= 20'}
- cpu: [arm64]
- os: [android]
-
- '@tailwindcss/oxide-darwin-arm64@4.2.2':
- resolution: {integrity: sha512-iq9Qjr6knfMpZHj55/37ouZeykwbDqF21gPFtfnhCCKGDcPI/21FKC9XdMO/XyBM7qKORx6UIhGgg6jLl7BZlg==}
- engines: {node: '>= 20'}
- cpu: [arm64]
- os: [darwin]
-
- '@tailwindcss/oxide-darwin-x64@4.2.2':
- resolution: {integrity: sha512-BlR+2c3nzc8f2G639LpL89YY4bdcIdUmiOOkv2GQv4/4M0vJlpXEa0JXNHhCHU7VWOKWT/CjqHdTP8aUuDJkuw==}
- engines: {node: '>= 20'}
- cpu: [x64]
- os: [darwin]
-
- '@tailwindcss/oxide-freebsd-x64@4.2.2':
- resolution: {integrity: sha512-YUqUgrGMSu2CDO82hzlQ5qSb5xmx3RUrke/QgnoEx7KvmRJHQuZHZmZTLSuuHwFf0DJPybFMXMYf+WJdxHy/nQ==}
- engines: {node: '>= 20'}
- cpu: [x64]
- os: [freebsd]
-
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
- resolution: {integrity: sha512-FPdhvsW6g06T9BWT0qTwiVZYE2WIFo2dY5aCSpjG/S/u1tby+wXoslXS0kl3/KXnULlLr1E3NPRRw0g7t2kgaQ==}
- engines: {node: '>= 20'}
- cpu: [arm]
- os: [linux]
-
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
- resolution: {integrity: sha512-4og1V+ftEPXGttOO7eCmW7VICmzzJWgMx+QXAJRAhjrSjumCwWqMfkDrNu1LXEQzNAwz28NCUpucgQPrR4S2yw==}
- engines: {node: '>= 20'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
- resolution: {integrity: sha512-oCfG/mS+/+XRlwNjnsNLVwnMWYH7tn/kYPsNPh+JSOMlnt93mYNCKHYzylRhI51X+TbR+ufNhhKKzm6QkqX8ag==}
- engines: {node: '>= 20'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
- resolution: {integrity: sha512-rTAGAkDgqbXHNp/xW0iugLVmX62wOp2PoE39BTCGKjv3Iocf6AFbRP/wZT/kuCxC9QBh9Pu8XPkv/zCZB2mcMg==}
- engines: {node: '>= 20'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@tailwindcss/oxide-linux-x64-musl@4.2.2':
- resolution: {integrity: sha512-XW3t3qwbIwiSyRCggeO2zxe3KWaEbM0/kW9e8+0XpBgyKU4ATYzcVSMKteZJ1iukJ3HgHBjbg9P5YPRCVUxlnQ==}
- engines: {node: '>= 20'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@tailwindcss/oxide-wasm32-wasi@4.2.2':
- resolution: {integrity: sha512-eKSztKsmEsn1O5lJ4ZAfyn41NfG7vzCg496YiGtMDV86jz1q/irhms5O0VrY6ZwTUkFy/EKG3RfWgxSI3VbZ8Q==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
- bundledDependencies:
- - '@napi-rs/wasm-runtime'
- - '@emnapi/core'
- - '@emnapi/runtime'
- - '@tybys/wasm-util'
- - '@emnapi/wasi-threads'
- - tslib
-
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
- resolution: {integrity: sha512-qPmaQM4iKu5mxpsrWZMOZRgZv1tOZpUm+zdhhQP0VhJfyGGO3aUKdbh3gDZc/dPLQwW4eSqWGrrcWNBZWUWaXQ==}
- engines: {node: '>= 20'}
- cpu: [arm64]
- os: [win32]
-
- '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
- resolution: {integrity: sha512-1T/37VvI7WyH66b+vqHj/cLwnCxt7Qt3WFu5Q8hk65aOvlwAhs7rAp1VkulBJw/N4tMirXjVnylTR72uI0HGcA==}
- engines: {node: '>= 20'}
- cpu: [x64]
- os: [win32]
-
- '@tailwindcss/oxide@4.2.2':
- resolution: {integrity: sha512-qEUA07+E5kehxYp9BVMpq9E8vnJuBHfJEC0vPC5e7iL/hw7HR61aDKoVoKzrG+QKp56vhNZe4qwkRmMC0zDLvg==}
- engines: {node: '>= 20'}
-
- '@tailwindcss/vite@4.2.2':
- resolution: {integrity: sha512-mEiF5HO1QqCLXoNEfXVA1Tzo+cYsrqV7w9Juj2wdUFyW07JRenqMG225MvPwr3ZD9N1bFQj46X7r33iHxLUW0w==}
- peerDependencies:
- vite: ^5.2.0 || ^6 || ^7 || ^8
-
- '@tybys/wasm-util@0.10.1':
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
-
- '@types/esrecurse@4.3.1':
- resolution: {integrity: sha512-xJBAbDifo5hpffDBuHl0Y8ywswbiAp/Wi7Y/GtAgSlZyIABppyurxVueOPE8LUQOxdlgi6Zqce7uoEpqNTeiUw==}
-
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
- '@types/json-schema@7.0.15':
- resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
-
- '@types/resolve@1.20.2':
- resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
-
- '@typescript-eslint/eslint-plugin@8.58.0':
- resolution: {integrity: sha512-RLkVSiNuUP1C2ROIWfqX+YcUfLaSnxGE/8M+Y57lopVwg9VTYYfhuz15Yf1IzCKgZj6/rIbYTmJCUSqr76r0Wg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@typescript-eslint/parser': ^8.58.0
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.1.0'
-
- '@typescript-eslint/parser@8.58.0':
- resolution: {integrity: sha512-rLoGZIf9afaRBYsPUMtvkDWykwXwUPL60HebR4JgTI8mxfFe2cQTu3AGitANp4b9B2QlVru6WzjgB2IzJKiCSA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.1.0'
-
- '@typescript-eslint/project-service@8.58.0':
- resolution: {integrity: sha512-8Q/wBPWLQP1j16NxoPNIKpDZFMaxl7yWIoqXWYeWO+Bbd2mjgvoF0dxP2jKZg5+x49rgKdf7Ck473M8PC3V9lg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.1.0'
-
- '@typescript-eslint/scope-manager@8.58.0':
- resolution: {integrity: sha512-W1Lur1oF50FxSnNdGp3Vs6P+yBRSmZiw4IIjEeYxd8UQJwhUF0gDgDD/W/Tgmh73mxgEU3qX0Bzdl/NGuSPEpQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@typescript-eslint/tsconfig-utils@8.58.0':
- resolution: {integrity: sha512-doNSZEVJsWEu4htiVC+PR6NpM+pa+a4ClH9INRWOWCUzMst/VA9c4gXq92F8GUD1rwhNvRLkgjfYtFXegXQF7A==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.1.0'
-
- '@typescript-eslint/type-utils@8.58.0':
- resolution: {integrity: sha512-aGsCQImkDIqMyx1u4PrVlbi/krmDsQUs4zAcCV6M7yPcPev+RqVlndsJy9kJ8TLihW9TZ0kbDAzctpLn5o+lOg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.1.0'
-
- '@typescript-eslint/types@8.58.0':
- resolution: {integrity: sha512-O9CjxypDT89fbHxRfETNoAnHj/i6IpRK0CvbVN3qibxlLdo5p5hcLmUuCCrHMpxiWSwKyI8mCP7qRNYuOJ0Uww==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@typescript-eslint/typescript-estree@8.58.0':
- resolution: {integrity: sha512-7vv5UWbHqew/dvs+D3e1RvLv1v2eeZ9txRHPnEEBUgSNLx5ghdzjHa0sgLWYVKssH+lYmV0JaWdoubo0ncGYLA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- typescript: '>=4.8.4 <6.1.0'
-
- '@typescript-eslint/utils@8.58.0':
- resolution: {integrity: sha512-RfeSqcFeHMHlAWzt4TBjWOAtoW9lnsAGiP3GbaX9uVgTYYrMbVnGONEfUCiSss+xMHFl+eHZiipmA8WkQ7FuNA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- typescript: '>=4.8.4 <6.1.0'
-
- '@typescript-eslint/visitor-keys@8.58.0':
- resolution: {integrity: sha512-XJ9UD9+bbDo4a4epraTwG3TsNPeiB9aShrUneAVXy8q4LuwowN+qu89/6ByLMINqvIMeI9H9hOHQtg/ijrYXzQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- '@unhead/vue@2.1.12':
- resolution: {integrity: sha512-zEWqg0nZM8acpuTZE40wkeUl8AhIe0tU0OkilVi1D4fmVjACrwoh5HP6aNqJ8kUnKsoy6D+R3Vi/O+fmdNGO7g==}
- peerDependencies:
- vue: '>=3.5.18'
-
- '@unrs/resolver-binding-android-arm-eabi@1.11.1':
- resolution: {integrity: sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==}
- cpu: [arm]
- os: [android]
-
- '@unrs/resolver-binding-android-arm64@1.11.1':
- resolution: {integrity: sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==}
- cpu: [arm64]
- os: [android]
-
- '@unrs/resolver-binding-darwin-arm64@1.11.1':
- resolution: {integrity: sha512-gPVA1UjRu1Y/IsB/dQEsp2V1pm44Of6+LWvbLc9SDk1c2KhhDRDBUkQCYVWe6f26uJb3fOK8saWMgtX8IrMk3g==}
- cpu: [arm64]
- os: [darwin]
-
- '@unrs/resolver-binding-darwin-x64@1.11.1':
- resolution: {integrity: sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==}
- cpu: [x64]
- os: [darwin]
-
- '@unrs/resolver-binding-freebsd-x64@1.11.1':
- resolution: {integrity: sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==}
- cpu: [x64]
- os: [freebsd]
-
- '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
- resolution: {integrity: sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==}
- cpu: [arm]
- os: [linux]
-
- '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
- resolution: {integrity: sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==}
- cpu: [arm]
- os: [linux]
-
- '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
- resolution: {integrity: sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
- resolution: {integrity: sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
- resolution: {integrity: sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
- resolution: {integrity: sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==}
- cpu: [riscv64]
- os: [linux]
- libc: [glibc]
-
- '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
- resolution: {integrity: sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==}
- cpu: [riscv64]
- os: [linux]
- libc: [musl]
-
- '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
- resolution: {integrity: sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
- resolution: {integrity: sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@unrs/resolver-binding-linux-x64-musl@1.11.1':
- resolution: {integrity: sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@unrs/resolver-binding-wasm32-wasi@1.11.1':
- resolution: {integrity: sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
-
- '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
- resolution: {integrity: sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==}
- cpu: [arm64]
- os: [win32]
-
- '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
- resolution: {integrity: sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==}
- cpu: [ia32]
- os: [win32]
-
- '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
- resolution: {integrity: sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==}
- cpu: [x64]
- os: [win32]
-
- '@vercel/nft@1.5.0':
- resolution: {integrity: sha512-IWTDeIoWhQ7ZtRO/JRKH+jhmeQvZYhtGPmzw/QGDY+wDCQqfm25P9yIdoAFagu4fWsK4IwZXDFIjrmp5rRm/sA==}
- engines: {node: '>=20'}
- hasBin: true
-
- '@vitejs/plugin-vue-jsx@5.1.5':
- resolution: {integrity: sha512-jIAsvHOEtWpslLOI2MeElGFxH7M8pM83BU/Tor4RLyiwH0FM4nUW3xdvbw20EeU9wc5IspQwMq225K3CMnJEpA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
- vue: ^3.0.0
-
- '@vitejs/plugin-vue@6.0.5':
- resolution: {integrity: sha512-bL3AxKuQySfk1iGcBsQnoRVexTPJq0Z/ixFVM8OhVJAP6ZXXXLtM7NFKWhLl30Kg7uTBqIaPXbh+nuQCuBDedg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- peerDependencies:
- vite: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0
- vue: ^3.2.25
-
- '@vue-macros/common@3.1.2':
- resolution: {integrity: sha512-h9t4ArDdniO9ekYHAD95t9AZcAbb19lEGK+26iAjUODOIJKmObDNBSe4+6ELQAA3vtYiFPPBtHh7+cQCKi3Dng==}
- engines: {node: '>=20.19.0'}
- peerDependencies:
- vue: ^2.7.0 || ^3.2.25
- peerDependenciesMeta:
- vue:
- optional: true
-
- '@vue/babel-helper-vue-transform-on@2.0.1':
- resolution: {integrity: sha512-uZ66EaFbnnZSYqYEyplWvn46GhZ1KuYSThdT68p+am7MgBNbQ3hphTL9L+xSIsWkdktwhPYLwPgVWqo96jDdRA==}
-
- '@vue/babel-plugin-jsx@2.0.1':
- resolution: {integrity: sha512-a8CaLQjD/s4PVdhrLD/zT574ZNPnZBOY+IhdtKWRB4HRZ0I2tXBi5ne7d9eCfaYwp5gU5+4KIyFTV1W1YL9xZA==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
- peerDependenciesMeta:
- '@babel/core':
- optional: true
-
- '@vue/babel-plugin-resolve-type@2.0.1':
- resolution: {integrity: sha512-ybwgIuRGRRBhOU37GImDoWQoz+TlSqap65qVI6iwg/J7FfLTLmMf97TS7xQH9I7Qtr/gp161kYVdhr1ZMraSYQ==}
- peerDependencies:
- '@babel/core': ^7.0.0-0
-
- '@vue/compiler-core@3.5.32':
- resolution: {integrity: sha512-4x74Tbtqnda8s/NSD6e1Dr5p1c8HdMU5RWSjMSUzb8RTcUQqevDCxVAitcLBKT+ie3o0Dl9crc/S/opJM7qBGQ==}
-
- '@vue/compiler-dom@3.5.32':
- resolution: {integrity: sha512-ybHAu70NtiEI1fvAUz3oXZqkUYEe5J98GjMDpTGl5iHb0T15wQYLR4wE3h9xfuTNA+Cm2f4czfe8B4s+CCH57Q==}
-
- '@vue/compiler-sfc@3.5.32':
- resolution: {integrity: sha512-8UYUYo71cP/0YHMO814TRZlPuUUw3oifHuMR7Wp9SNoRSrxRQnhMLNlCeaODNn6kNTJsjFoQ/kqIj4qGvya4Xg==}
-
- '@vue/compiler-ssr@3.5.32':
- resolution: {integrity: sha512-Gp4gTs22T3DgRotZ8aA/6m2jMR+GMztvBXUBEUOYOcST+giyGWJ4WvFd7QLHBkzTxkfOt8IELKNdpzITLbA2rw==}
-
- '@vue/devtools-api@7.7.9':
- resolution: {integrity: sha512-kIE8wvwlcZ6TJTbNeU2HQNtaxLx3a84aotTITUuL/4bzfPxzajGBOoqjMhwZJ8L9qFYDU/lAYMEEm11dnZOD6g==}
-
- '@vue/devtools-api@8.1.1':
- resolution: {integrity: sha512-bsDMJ07b3GN1puVwJb/fyFnj/U2imyswK5UQVLZwVl7O05jDrt6BHxeG5XffmOOdasOj/bOmIjxJvGPxU7pcqw==}
-
- '@vue/devtools-core@8.1.1':
- resolution: {integrity: sha512-bCCsSABp1/ot4j8xJEycM6Mtt2wbuucfByr6hMgjbYhrtlscOJypZKvy8f1FyWLYrLTchB5Qz216Lm92wfbq0A==}
- peerDependencies:
- vue: ^3.0.0
-
- '@vue/devtools-kit@7.7.9':
- resolution: {integrity: sha512-PyQ6odHSgiDVd4hnTP+aDk2X4gl2HmLDfiyEnn3/oV+ckFDuswRs4IbBT7vacMuGdwY/XemxBoh302ctbsptuA==}
-
- '@vue/devtools-kit@8.1.1':
- resolution: {integrity: sha512-gVBaBv++i+adg4JpH71k9ppl4soyR7Y2McEqO5YNgv0BI1kMZ7BDX5gnwkZ5COYgiCyhejZG+yGNrBAjj6Coqg==}
-
- '@vue/devtools-shared@7.7.9':
- resolution: {integrity: sha512-iWAb0v2WYf0QWmxCGy0seZNDPdO3Sp5+u78ORnyeonS6MT4PC7VPrryX2BpMJrwlDeaZ6BD4vP4XKjK0SZqaeA==}
-
- '@vue/devtools-shared@8.1.1':
- resolution: {integrity: sha512-+h4ttmJYl/txpxHKaoZcaKpC+pvckgLzIDiSQlaQ7kKthKh8KuwoLW2D8hPJEnqKzXOvu15UHEoGyngAXCz0EQ==}
-
- '@vue/reactivity@3.5.32':
- resolution: {integrity: sha512-/ORasxSGvZ6MN5gc+uE364SxFdJ0+WqVG0CENXaGW58TOCdrAW76WWaplDtECeS1qphvtBZtR+3/o1g1zL4xPQ==}
-
- '@vue/runtime-core@3.5.32':
- resolution: {integrity: sha512-pDrXCejn4UpFDFmMd27AcJEbHaLemaE5o4pbb7sLk79SRIhc6/t34BQA7SGNgYtbMnvbF/HHOftYBgFJtUoJUQ==}
-
- '@vue/runtime-dom@3.5.32':
- resolution: {integrity: sha512-1CDVv7tv/IV13V8Nip1k/aaObVbWqRlVCVezTwx3K07p7Vxossp5JU1dcPNhJk3w347gonIUT9jQOGutyJrSVQ==}
-
- '@vue/server-renderer@3.5.32':
- resolution: {integrity: sha512-IOjm2+JQwRFS7W28HNuJeXQle9KdZbODFY7hFGVtnnghF51ta20EWAZJHX+zLGtsHhaU6uC9BGPV52KVpYryMQ==}
- peerDependencies:
- vue: 3.5.32
-
- '@vue/shared@3.5.32':
- resolution: {integrity: sha512-ksNyrmRQzWJJ8n3cRDuSF7zNNontuJg1YHnmWRJd2AMu8Ij2bqwiiri2lH5rHtYPZjj4STkNcgcmiQqlOjiYGg==}
-
- abbrev@3.0.1:
- resolution: {integrity: sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==}
- engines: {node: ^18.17.0 || >=20.5.0}
-
- abort-controller@3.0.0:
- resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
- engines: {node: '>=6.5'}
-
- acorn-import-attributes@1.9.5:
- resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
- peerDependencies:
- acorn: ^8
-
- acorn-jsx@5.3.2:
- resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
- peerDependencies:
- acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
-
- acorn@8.16.0:
- resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==}
- engines: {node: '>=0.4.0'}
- hasBin: true
-
- agent-base@7.1.4:
- resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
- engines: {node: '>= 14'}
-
- ajv@6.14.0:
- resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==}
-
- ansi-regex@5.0.1:
- resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
- engines: {node: '>=8'}
-
- ansi-regex@6.2.2:
- resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==}
- engines: {node: '>=12'}
-
- ansi-styles@4.3.0:
- resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
- engines: {node: '>=8'}
-
- ansi-styles@6.2.3:
- resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
- engines: {node: '>=12'}
-
- ansis@4.2.0:
- resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
- engines: {node: '>=14'}
-
- anymatch@3.1.3:
- resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
- engines: {node: '>= 8'}
-
- archiver-utils@5.0.2:
- resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==}
- engines: {node: '>= 14'}
-
- archiver@7.0.1:
- resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==}
- engines: {node: '>= 14'}
-
- are-docs-informative@0.0.2:
- resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
- engines: {node: '>=14'}
-
- argparse@2.0.1:
- resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
-
- ast-kit@2.2.0:
- resolution: {integrity: sha512-m1Q/RaVOnTp9JxPX+F+Zn7IcLYMzM8kZofDImfsKZd8MbR+ikdOzTeztStWqfrqIxZnYWryyI9ePm3NGjnZgGw==}
- engines: {node: '>=20.19.0'}
-
- ast-walker-scope@0.8.3:
- resolution: {integrity: sha512-cbdCP0PGOBq0ASG+sjnKIoYkWMKhhz+F/h9pRexUdX2Hd38+WOlBkRKlqkGOSm0YQpcFMQBJeK4WspUAkwsEdg==}
- engines: {node: '>=20.19.0'}
-
- async-sema@3.1.1:
- resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==}
-
- async@3.2.6:
- resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
-
- autoprefixer@10.4.27:
- resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==}
- engines: {node: ^10 || ^12 || >=14}
- hasBin: true
- peerDependencies:
- postcss: ^8.1.0
-
- b4a@1.8.0:
- resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
- peerDependencies:
- react-native-b4a: '*'
- peerDependenciesMeta:
- react-native-b4a:
- optional: true
-
- balanced-match@1.0.2:
- resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
-
- balanced-match@4.0.4:
- resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==}
- engines: {node: 18 || 20 || >=22}
-
- bare-events@2.8.2:
- resolution: {integrity: sha512-riJjyv1/mHLIPX4RwiK+oW9/4c3TEUeORHKefKAKnZ5kyslbN+HXowtbaVEqt4IMUB7OXlfixcs6gsFeo/jhiQ==}
- peerDependencies:
- bare-abort-controller: '*'
- peerDependenciesMeta:
- bare-abort-controller:
- optional: true
-
- bare-fs@4.6.0:
- resolution: {integrity: sha512-2YkS7NuiJceSEbyEOdSNLE9tsGd+f4+f7C+Nik/MCk27SYdwIMPT/yRKvg++FZhQXgk0KWJKJyXX9RhVV0RGqA==}
- engines: {bare: '>=1.16.0'}
- peerDependencies:
- bare-buffer: '*'
- peerDependenciesMeta:
- bare-buffer:
- optional: true
-
- bare-os@3.8.7:
- resolution: {integrity: sha512-G4Gr1UsGeEy2qtDTZwL7JFLo2wapUarz7iTMcYcMFdS89AIQuBoyjgXZz0Utv7uHs3xA9LckhVbeBi8lEQrC+w==}
- engines: {bare: '>=1.14.0'}
-
- bare-path@3.0.0:
- resolution: {integrity: sha512-tyfW2cQcB5NN8Saijrhqn0Zh7AnFNsnczRcuWODH0eYAXBsJ5gVxAUuNr7tsHSC6IZ77cA0SitzT+s47kot8Mw==}
-
- bare-stream@2.12.0:
- resolution: {integrity: sha512-w28i8lkBgREV3rPXGbgK+BO66q+ZpKqRWrZLiCdmmUlLPrQ45CzkvRhN+7lnv00Gpi2zy5naRxnUFAxCECDm9g==}
- peerDependencies:
- bare-abort-controller: '*'
- bare-buffer: '*'
- bare-events: '*'
- peerDependenciesMeta:
- bare-abort-controller:
- optional: true
- bare-buffer:
- optional: true
- bare-events:
- optional: true
-
- bare-url@2.4.0:
- resolution: {integrity: sha512-NSTU5WN+fy/L0DDenfE8SXQna4voXuW0FHM7wH8i3/q9khUSchfPbPezO4zSFMnDGIf9YE+mt/RWhZgNRKRIXA==}
-
- base64-js@1.5.1:
- resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
-
- baseline-browser-mapping@2.10.14:
- resolution: {integrity: sha512-fOVLPAsFTsQfuCkvahZkzq6nf8KvGWanlYoTh0SVA0A/PIUxQGU2AOZAoD95n2gFLVDW/jP6sbGLny95nmEuHA==}
- engines: {node: '>=6.0.0'}
- hasBin: true
-
- bindings@1.5.0:
- resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==}
-
- birpc@2.9.0:
- resolution: {integrity: sha512-KrayHS5pBi69Xi9JmvoqrIgYGDkD6mcSe/i6YKi3w5kekCLzrX4+nawcXqrj2tIp50Kw/mT/s3p+GVK0A0sKxw==}
-
- birpc@4.0.0:
- resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
-
- boolbase@1.0.0:
- resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
-
- brace-expansion@2.0.3:
- resolution: {integrity: sha512-MCV/fYJEbqx68aE58kv2cA/kiky1G8vux3OR6/jbS+jIMe/6fJWa0DTzJU7dqijOWYwHi1t29FlfYI9uytqlpA==}
-
- brace-expansion@5.0.5:
- resolution: {integrity: sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==}
- engines: {node: 18 || 20 || >=22}
-
- braces@3.0.3:
- resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
- engines: {node: '>=8'}
-
- browserslist@4.28.2:
- resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
- buffer-crc32@1.0.0:
- resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==}
- engines: {node: '>=8.0.0'}
-
- buffer-from@1.1.2:
- resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
-
- buffer@6.0.3:
- resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
-
- builtin-modules@5.0.0:
- resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==}
- engines: {node: '>=18.20'}
-
- bundle-name@4.1.0:
- resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==}
- engines: {node: '>=18'}
-
- bundle-require@5.1.0:
- resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- peerDependencies:
- esbuild: '>=0.18'
-
- c12@3.3.4:
- resolution: {integrity: sha512-cM0ApFQSBXuourJejzwv/AuPRvAxordTyParRVcHjjtXirtkzM0uK2L9TTn9s0cXZbG7E55jCivRQzoxYmRAlA==}
- peerDependencies:
- magicast: '*'
- peerDependenciesMeta:
- magicast:
- optional: true
-
- cac@6.7.14:
- resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
- engines: {node: '>=8'}
-
- cac@7.0.0:
- resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
- engines: {node: '>=20.19.0'}
-
- caniuse-api@3.0.0:
- resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
-
- caniuse-lite@1.0.30001784:
- resolution: {integrity: sha512-WU346nBTklUV9YfUl60fqRbU5ZqyXlqvo1SgigE1OAXK5bFL8LL9q1K7aap3N739l4BvNqnkm3YrGHiY9sfUQw==}
-
- change-case@5.4.4:
- resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
-
- chokidar@4.0.3:
- resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==}
- engines: {node: '>= 14.16.0'}
-
- chokidar@5.0.0:
- resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==}
- engines: {node: '>= 20.19.0'}
-
- chownr@3.0.0:
- resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
- engines: {node: '>=18'}
-
- ci-info@4.4.0:
- resolution: {integrity: sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==}
- engines: {node: '>=8'}
-
- citty@0.1.6:
- resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
-
- citty@0.2.2:
- resolution: {integrity: sha512-+6vJA3L98yv+IdfKGZHBNiGW5KHn22e/JwID0Strsz8h4S/csAu/OuICwxrg44k5MRiZHWIo8XXuJgQTriRP4w==}
-
- clean-regexp@1.0.0:
- resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
- engines: {node: '>=4'}
-
- cliui@9.0.1:
- resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==}
- engines: {node: '>=20'}
-
- cluster-key-slot@1.1.2:
- resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==}
- engines: {node: '>=0.10.0'}
-
- color-convert@2.0.1:
- resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
- engines: {node: '>=7.0.0'}
-
- color-name@1.1.4:
- resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
-
- commander@11.1.0:
- resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==}
- engines: {node: '>=16'}
-
- commander@2.20.3:
- resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
-
- comment-parser@1.4.6:
- resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==}
- engines: {node: '>= 12.0.0'}
-
- commondir@1.0.1:
- resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
-
- compatx@0.2.0:
- resolution: {integrity: sha512-6gLRNt4ygsi5NyMVhceOCFv14CIdDFN7fQjX1U4+47qVE/+kjPoXMK65KWK+dWxmFzMTuKazoQ9sch6pM0p5oA==}
-
- compress-commons@6.0.2:
- resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==}
- engines: {node: '>= 14'}
-
- confbox@0.1.8:
- resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
-
- confbox@0.2.4:
- resolution: {integrity: sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==}
-
- consola@3.4.2:
- resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==}
- engines: {node: ^14.18.0 || >=16.10.0}
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- cookie-es@1.2.3:
- resolution: {integrity: sha512-lXVyvUvrNXblMqzIRrxHb57UUVmqsSWlxqt3XIjCkUP0wDAf6uicO6KMbEgYrMNtEvWgWHwe42CKxPu9MYAnWw==}
-
- cookie-es@2.0.1:
- resolution: {integrity: sha512-aVf4A4hI2w70LnF7GG+7xDQUkliwiXWXFvTjkip4+b64ygDQ2sJPRSKFDHbxn8o0xu9QzPkMuuiWIXyFSE2slA==}
-
- cookie-es@3.1.1:
- resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
-
- copy-anything@4.0.5:
- resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
- engines: {node: '>=18'}
-
- core-js-compat@3.49.0:
- resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==}
-
- core-util-is@1.0.3:
- resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
-
- crc-32@1.2.2:
- resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==}
- engines: {node: '>=0.8'}
- hasBin: true
-
- crc32-stream@6.0.0:
- resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==}
- engines: {node: '>= 14'}
-
- croner@10.0.1:
- resolution: {integrity: sha512-ixNtAJndqh173VQ4KodSdJEI6nuioBWI0V1ITNKhZZsO0pEMoDxz539T4FTTbSZ/xIOSuDnzxLVRqBVSvPNE2g==}
- engines: {node: '>=18.0'}
-
- cross-spawn@7.0.6:
- resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
- engines: {node: '>= 8'}
-
- crossws@0.3.5:
- resolution: {integrity: sha512-ojKiDvcmByhwa8YYqbQI/hg7MEU0NC03+pSdEq4ZUnZR9xXpwk7E43SMNGkn+JxJGPFtNvQ48+vV2p+P1ml5PA==}
-
- crossws@0.4.4:
- resolution: {integrity: sha512-w6c4OdpRNnudVmcgr7brb/+/HmYjMQvYToO/oTrprTwxRUiom3LYWU1PMWuD006okbUWpII1Ea9/+kwpUfmyRg==}
- peerDependencies:
- srvx: '>=0.7.1'
- peerDependenciesMeta:
- srvx:
- optional: true
-
- css-declaration-sorter@7.3.1:
- resolution: {integrity: sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==}
- engines: {node: ^14 || ^16 || >=18}
- peerDependencies:
- postcss: ^8.0.9
-
- css-select@5.2.2:
- resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==}
-
- css-tree@2.2.1:
- resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
-
- css-tree@3.2.1:
- resolution: {integrity: sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0}
-
- css-what@6.2.2:
- resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==}
- engines: {node: '>= 6'}
-
- cssesc@3.0.0:
- resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
- engines: {node: '>=4'}
- hasBin: true
-
- cssnano-preset-default@7.0.12:
- resolution: {integrity: sha512-B3Eoouzw/sl2zANI0AL9KbacummJTCww+fkHaDBMZad/xuVx8bUduPLly6hKVQAlrmvYkS1jB1CVQEKm3gn0AA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- cssnano-utils@5.0.1:
- resolution: {integrity: sha512-ZIP71eQgG9JwjVZsTPSqhc6GHgEr53uJ7tK5///VfyWj6Xp2DBmixWHqJgPno+PqATzn48pL42ww9x5SSGmhZg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- cssnano@7.1.4:
- resolution: {integrity: sha512-T9PNS7y+5Nc9Qmu9mRONqfxG1RVY7Vuvky0XN6MZ+9hqplesTEwnj9r0ROtVuSwUVfaDhVlavuzWIVLUgm4hkQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- csso@5.0.5:
- resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==}
- engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'}
-
- csstype@3.2.3:
- resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==}
-
- db0@0.3.4:
- resolution: {integrity: sha512-RiXXi4WaNzPTHEOu8UPQKMooIbqOEyqA1t7Z6MsdxSCeb8iUC9ko3LcmsLmeUt2SM5bctfArZKkRQggKZz7JNw==}
- peerDependencies:
- '@electric-sql/pglite': '*'
- '@libsql/client': '*'
- better-sqlite3: '*'
- drizzle-orm: '*'
- mysql2: '*'
- sqlite3: '*'
- peerDependenciesMeta:
- '@electric-sql/pglite':
- optional: true
- '@libsql/client':
- optional: true
- better-sqlite3:
- optional: true
- drizzle-orm:
- optional: true
- mysql2:
- optional: true
- sqlite3:
- optional: true
-
- debug@4.4.3:
- resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
- engines: {node: '>=6.0'}
- peerDependencies:
- supports-color: '*'
- peerDependenciesMeta:
- supports-color:
- optional: true
-
- deep-is@0.1.4:
- resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
-
- deepmerge@4.3.1:
- resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
- engines: {node: '>=0.10.0'}
-
- default-browser-id@5.0.1:
- resolution: {integrity: sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==}
- engines: {node: '>=18'}
-
- default-browser@5.5.0:
- resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==}
- engines: {node: '>=18'}
-
- define-lazy-prop@3.0.0:
- resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
- engines: {node: '>=12'}
-
- defu@6.1.6:
- resolution: {integrity: sha512-f8mefEW4WIVg4LckePx3mALjQSPQgFlg9U8yaPdlsbdYcHQyj9n2zL2LJEA52smeYxOvmd/nB7TpMtHGMTHcug==}
-
- denque@2.1.0:
- resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==}
- engines: {node: '>=0.10'}
-
- depd@2.0.0:
- resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
- engines: {node: '>= 0.8'}
-
- destr@2.0.5:
- resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
-
- detect-libc@2.1.2:
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
- engines: {node: '>=8'}
-
- devalue@5.6.4:
- resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==}
-
- diff@8.0.4:
- resolution: {integrity: sha512-DPi0FmjiSU5EvQV0++GFDOJ9ASQUVFh5kD+OzOnYdi7n3Wpm9hWWGfB/O2blfHcMVTL5WkQXSnRiK9makhrcnw==}
- engines: {node: '>=0.3.1'}
-
- dom-serializer@2.0.0:
- resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==}
-
- domelementtype@2.3.0:
- resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==}
-
- domhandler@5.0.3:
- resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==}
- engines: {node: '>= 4'}
-
- domutils@3.2.2:
- resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==}
-
- dot-prop@10.1.0:
- resolution: {integrity: sha512-MVUtAugQMOff5RnBy2d9N31iG0lNwg1qAoAOn7pOK5wf94WIaE3My2p3uwTQuvS2AcqchkcR3bHByjaM0mmi7Q==}
- engines: {node: '>=20'}
-
- dotenv@17.4.0:
- resolution: {integrity: sha512-kCKF62fwtzwYm0IGBNjRUjtJgMfGapII+FslMHIjMR5KTnwEmBmWLDRSnc3XSNP8bNy34tekgQyDT0hr7pERRQ==}
- engines: {node: '>=12'}
-
- duplexer@0.1.2:
- resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==}
-
- eastasianwidth@0.2.0:
- resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
-
- ee-first@1.1.1:
- resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
-
- electron-to-chromium@1.5.331:
- resolution: {integrity: sha512-IbxXrsTlD3hRodkLnbxAPP4OuJYdWCeM3IOdT+CpcMoIwIoDfCmRpEtSPfwBXxVkg9xmBeY7Lz2Eo2TDn/HC3Q==}
-
- emoji-regex@10.6.0:
- resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
-
- emoji-regex@8.0.0:
- resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
-
- emoji-regex@9.2.2:
- resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
-
- encodeurl@2.0.0:
- resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
- engines: {node: '>= 0.8'}
-
- enhanced-resolve@5.20.1:
- resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==}
- engines: {node: '>=10.13.0'}
-
- entities@4.5.0:
- resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==}
- engines: {node: '>=0.12'}
-
- entities@7.0.1:
- resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
- engines: {node: '>=0.12'}
-
- error-stack-parser-es@1.0.5:
- resolution: {integrity: sha512-5qucVt2XcuGMcEGgWI7i+yZpmpByQ8J1lHhcL7PwqCwu9FPP3VUXzT4ltHe5i2z9dePwEHcDVOAfSnHsOlCXRA==}
-
- errx@0.1.0:
- resolution: {integrity: sha512-fZmsRiDNv07K6s2KkKFTiD2aIvECa7++PKyD5NC32tpRw46qZA3sOz+aM+/V9V0GDHxVTKLziveV4JhzBHDp9Q==}
-
- es-module-lexer@2.0.0:
- resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
-
- esbuild@0.27.7:
- resolution: {integrity: sha512-IxpibTjyVnmrIQo5aqNpCgoACA/dTKLTlhMHihVHhdkxKyPO1uBBthumT0rdHmcsk9uMonIWS0m4FljWzILh3w==}
- engines: {node: '>=18'}
- hasBin: true
-
- escalade@3.2.0:
- resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
- engines: {node: '>=6'}
-
- escape-html@1.0.3:
- resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
-
- escape-string-regexp@1.0.5:
- resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
- engines: {node: '>=0.8.0'}
-
- escape-string-regexp@4.0.0:
- resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
- engines: {node: '>=10'}
-
- escape-string-regexp@5.0.0:
- resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
- engines: {node: '>=12'}
-
- eslint-config-flat-gitignore@2.3.0:
- resolution: {integrity: sha512-bg4ZLGgoARg1naWfsINUUb/52Ksw/K22K+T16D38Y8v+/sGwwIYrGvH/JBjOin+RQtxxC9tzNNiy4shnGtGyyQ==}
- peerDependencies:
- eslint: ^9.5.0 || ^10.0.0
-
- eslint-flat-config-utils@3.1.0:
- resolution: {integrity: sha512-lM+Nwo2CzpuTS/RASQExlEIwk/BQoKqJWX6VbDlLMb/mveqvt9MMrRXFEkG3bseuK6g8noKZLeX82epkILtv4A==}
-
- eslint-import-context@0.1.9:
- resolution: {integrity: sha512-K9Hb+yRaGAGUbwjhFNHvSmmkZs9+zbuoe3kFQ4V1wYjrepUFYM2dZAfNtjbbj3qsPfUfsA68Bx/ICWQMi+C8Eg==}
- engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- peerDependencies:
- unrs-resolver: ^1.0.0
- peerDependenciesMeta:
- unrs-resolver:
- optional: true
-
- eslint-merge-processors@2.0.0:
- resolution: {integrity: sha512-sUuhSf3IrJdGooquEUB5TNpGNpBoQccbnaLHsb1XkBLUPPqCNivCpY05ZcpCOiV9uHwO2yxXEWVczVclzMxYlA==}
- peerDependencies:
- eslint: '*'
-
- eslint-plugin-import-lite@0.5.2:
- resolution: {integrity: sha512-XvfdWOC5dSLEI9krIPRlNmKSI2ViIE9pVylzfV9fCq0ZpDaNeUk6o0wZv0OzN83QdadgXp1NsY0qjLINxwYCsw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: '>=9.0.0'
-
- eslint-plugin-import-x@4.16.2:
- resolution: {integrity: sha512-rM9K8UBHcWKpzQzStn1YRN2T5NvdeIfSVoKu/lKF41znQXHAUcBbYXe5wd6GNjZjTrP7viQ49n1D83x/2gYgIw==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@typescript-eslint/utils': ^8.56.0
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- eslint-import-resolver-node: '*'
- peerDependenciesMeta:
- '@typescript-eslint/utils':
- optional: true
- eslint-import-resolver-node:
- optional: true
-
- eslint-plugin-jsdoc@62.9.0:
- resolution: {integrity: sha512-PY7/X4jrVgoIDncUmITlUqK546Ltmx/Pd4Hdsu4CvSjryQZJI2mEV4vrdMufyTetMiZ5taNSqvK//BTgVUlNkA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- peerDependencies:
- eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
-
- eslint-plugin-regexp@3.1.0:
- resolution: {integrity: sha512-qGXIC3DIKZHcK1H9A9+Byz9gmndY6TTSRkSMTZpNXdyCw2ObSehRgccJv35n9AdUakEjQp5VFNLas6BMXizCZg==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- peerDependencies:
- eslint: '>=9.38.0'
-
- eslint-plugin-unicorn@63.0.0:
- resolution: {integrity: sha512-Iqecl9118uQEXYh7adylgEmGfkn5es3/mlQTLLkd4pXkIk9CTGrAbeUux+YljSa2ohXCBmQQ0+Ej1kZaFgcfkA==}
- engines: {node: ^20.10.0 || >=21.0.0}
- peerDependencies:
- eslint: '>=9.38.0'
-
- eslint-plugin-vue@10.8.0:
- resolution: {integrity: sha512-f1J/tcbnrpgC8suPN5AtdJ5MQjuXbSU9pGRSSYAuF3SHoiYCOdEX6O22pLaRyLHXvDcOe+O5ENgc1owQ587agA==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- '@stylistic/eslint-plugin': ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0
- '@typescript-eslint/parser': ^7.0.0 || ^8.0.0
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
- vue-eslint-parser: ^10.0.0
- peerDependenciesMeta:
- '@stylistic/eslint-plugin':
- optional: true
- '@typescript-eslint/parser':
- optional: true
-
- eslint-processor-vue-blocks@2.0.0:
- resolution: {integrity: sha512-u4W0CJwGoWY3bjXAuFpc/b6eK3NQEI8MoeW7ritKj3G3z/WtHrKjkqf+wk8mPEy5rlMGS+k6AZYOw2XBoN/02Q==}
- peerDependencies:
- '@vue/compiler-sfc': ^3.3.0
- eslint: '>=9.0.0'
-
- eslint-scope@9.1.2:
- resolution: {integrity: sha512-xS90H51cKw0jltxmvmHy2Iai1LIqrfbw57b79w/J7MfvDfkIkFZ+kj6zC3BjtUwh150HsSSdxXZcsuv72miDFQ==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- eslint-typegen@2.3.1:
- resolution: {integrity: sha512-zVdh8rThBvv2o5T/K524Fr5iy1Jo0q09rHL7y7FbOhgMB177T2gw+shxfC4ChCEqdq6/y6LJA4j8Fbr/Xls9aw==}
- peerDependencies:
- eslint: ^9.0.0 || ^10.0.0
-
- eslint-visitor-keys@3.4.3:
- resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- eslint-visitor-keys@4.2.1:
- resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- eslint-visitor-keys@5.0.1:
- resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- eslint@10.2.0:
- resolution: {integrity: sha512-+L0vBFYGIpSNIt/KWTpFonPrqYvgKw1eUI5Vn7mEogrQcWtWYtNQ7dNqC+px/J0idT3BAkiWrhfS7k+Tum8TUA==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
- hasBin: true
- peerDependencies:
- jiti: '*'
- peerDependenciesMeta:
- jiti:
- optional: true
-
- espree@10.4.0:
- resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
-
- espree@11.2.0:
- resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
- engines: {node: ^20.19.0 || ^22.13.0 || >=24}
-
- esquery@1.7.0:
- resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
- engines: {node: '>=0.10'}
-
- esrecurse@4.3.0:
- resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
- engines: {node: '>=4.0'}
-
- estraverse@5.3.0:
- resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
- engines: {node: '>=4.0'}
-
- estree-walker@2.0.2:
- resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
-
- estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
- esutils@2.0.3:
- resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
- engines: {node: '>=0.10.0'}
-
- etag@1.8.1:
- resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
- engines: {node: '>= 0.6'}
-
- event-target-shim@5.0.1:
- resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==}
- engines: {node: '>=6'}
-
- events-universal@1.0.1:
- resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==}
-
- events@3.3.0:
- resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
- engines: {node: '>=0.8.x'}
-
- execa@8.0.1:
- resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
- engines: {node: '>=16.17'}
-
- exsolve@1.0.8:
- resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
-
- fast-deep-equal@3.1.3:
- resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
-
- fast-fifo@1.3.2:
- resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==}
-
- fast-glob@3.3.3:
- resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
- engines: {node: '>=8.6.0'}
-
- fast-json-stable-stringify@2.1.0:
- resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
-
- fast-levenshtein@2.0.6:
- resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
-
- fast-npm-meta@1.4.2:
- resolution: {integrity: sha512-XXyd9d3ie/JeIIjm6WeKalvapGGFI4ShAjPJM78vgUFYzoEsuNSjvvVTuht0XZcwbVdOnEEGzhxwguRbxkIcDg==}
- hasBin: true
-
- fast-string-truncated-width@1.2.1:
- resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==}
-
- fast-string-width@1.1.0:
- resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==}
-
- fast-wrap-ansi@0.1.6:
- resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==}
-
- fastq@1.20.1:
- resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
-
- fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- file-entry-cache@8.0.0:
- resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
- engines: {node: '>=16.0.0'}
-
- file-uri-to-path@1.0.0:
- resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==}
-
- fill-range@7.1.1:
- resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
- engines: {node: '>=8'}
-
- find-up-simple@1.0.1:
- resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
- engines: {node: '>=18'}
-
- find-up@5.0.0:
- resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
- engines: {node: '>=10'}
-
- find-up@8.0.0:
- resolution: {integrity: sha512-JGG8pvDi2C+JxidYdIwQDyS/CgcrIdh18cvgxcBge3wSHRQOrooMD3GlFBcmMJAN9M42SAZjDp5zv1dglJjwww==}
- engines: {node: '>=20'}
-
- flat-cache@4.0.1:
- resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
- engines: {node: '>=16'}
-
- flatted@3.4.2:
- resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
-
- foreground-child@3.3.1:
- resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==}
- engines: {node: '>=14'}
-
- fraction.js@5.3.4:
- resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==}
-
- fresh@2.0.0:
- resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
- engines: {node: '>= 0.8'}
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- function-bind@1.1.2:
- resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
-
- fuse.js@7.2.0:
- resolution: {integrity: sha512-zf4vdcIGpjNKTuXwug33Hm2okqX6a0t2ZEbez+o9oBJQSNhVJ5AqERfeiRD3r8HcLqP66MrjdkmzxrncbAOTUQ==}
- engines: {node: '>=10'}
-
- fzf@0.5.2:
- resolution: {integrity: sha512-Tt4kuxLXFKHy8KT40zwsUPUkg1CrsgY25FxA2U/j/0WgEDCk3ddc/zLTCCcbSHX9FcKtLuVaDGtGE/STWC+j3Q==}
-
- gensync@1.0.0-beta.2:
- resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
- engines: {node: '>=6.9.0'}
-
- get-caller-file@2.0.5:
- resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
- engines: {node: 6.* || 8.* || >= 10.*}
-
- get-east-asian-width@1.5.0:
- resolution: {integrity: sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==}
- engines: {node: '>=18'}
-
- get-port-please@3.2.0:
- resolution: {integrity: sha512-I9QVvBw5U/hw3RmWpYKRumUeaDgxTPd401x364rLmWBJcOQ753eov1eTgzDqRG9bqFIfDc7gfzcQEWrUri3o1A==}
-
- get-stream@8.0.1:
- resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
- engines: {node: '>=16'}
-
- get-tsconfig@4.13.7:
- resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==}
-
- giget@3.2.0:
- resolution: {integrity: sha512-GvHTWcykIR/fP8cj8dMpuMMkvaeJfPvYnhq0oW+chSeIr+ldX21ifU2Ms6KBoyKZQZmVaUAAhQ2EZ68KJF8a7A==}
- hasBin: true
-
- glob-parent@5.1.2:
- resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
- engines: {node: '>= 6'}
-
- glob-parent@6.0.2:
- resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
- engines: {node: '>=10.13.0'}
-
- glob@10.5.0:
- resolution: {integrity: sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==}
- deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me
- hasBin: true
-
- glob@13.0.6:
- resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==}
- engines: {node: 18 || 20 || >=22}
-
- global-directory@4.0.1:
- resolution: {integrity: sha512-wHTUcDUoZ1H5/0iVqEudYW4/kAlN5cZ3j/bXn0Dpbizl9iaUVeWSHqiOjsgk6OW2bkLclbBjzewBz6weQ1zA2Q==}
- engines: {node: '>=18'}
-
- globals@16.5.0:
- resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
- engines: {node: '>=18'}
-
- globals@17.4.0:
- resolution: {integrity: sha512-hjrNztw/VajQwOLsMNT1cbJiH2muO3OROCHnbehc8eY5JyD2gqz4AcMHPqgaOR59DjgUjYAYLeH699g/eWi2jw==}
- engines: {node: '>=18'}
-
- globby@16.2.0:
- resolution: {integrity: sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==}
- engines: {node: '>=20'}
-
- graceful-fs@4.2.11:
- resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
-
- gzip-size@7.0.0:
- resolution: {integrity: sha512-O1Ld7Dr+nqPnmGpdhzLmMTQ4vAsD+rHwMm1NLUmoUFFymBOMKxCCrtDxqdBRYXdeEPEi3SyoR4TizJLQrnKBNA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- h3@1.15.11:
- resolution: {integrity: sha512-L3THSe2MPeBwgIZVSH5zLdBBU90TOxarvhK9d04IDY2AmVS8j2Jz2LIWtwsGOU3lu2I5jCN7FNvVfY2+XyF+mg==}
-
- hasown@2.0.2:
- resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
- engines: {node: '>= 0.4'}
-
- hookable@5.5.3:
- resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==}
-
- hookable@6.1.0:
- resolution: {integrity: sha512-ZoKZSJgu8voGK2geJS+6YtYjvIzu9AOM/KZXsBxr83uhLL++e9pEv/dlgwgy3dvHg06kTz6JOh1hk3C8Ceiymw==}
-
- html-entities@2.6.0:
- resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
-
- http-errors@2.0.1:
- resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
- engines: {node: '>= 0.8'}
-
- http-shutdown@1.2.2:
- resolution: {integrity: sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw==}
- engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
-
- https-proxy-agent@7.0.6:
- resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==}
- engines: {node: '>= 14'}
-
- httpxy@0.5.0:
- resolution: {integrity: sha512-qwX7QX/rK2visT10/b7bSeZWQOMlSm3svTD0pZpU+vJjNUP0YHtNv4c3z+MO+MSnGuRFWJFdCZiV+7F7dXIOzg==}
-
- human-signals@5.0.0:
- resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
- engines: {node: '>=16.17.0'}
-
- ieee754@1.2.1:
- resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
-
- ignore@5.3.2:
- resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
- engines: {node: '>= 4'}
-
- ignore@7.0.5:
- resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==}
- engines: {node: '>= 4'}
-
- image-meta@0.2.2:
- resolution: {integrity: sha512-3MOLanc3sb3LNGWQl1RlQlNWURE5g32aUphrDyFeCsxBTk08iE3VNe4CwsUZ0Qs1X+EfX0+r29Sxdpza4B+yRA==}
-
- impound@1.1.5:
- resolution: {integrity: sha512-5AUn+QE0UofqNHu5f2Skf6Svukdg4ehOIq8O0EtqIx4jta0CDZYBPqpIHt0zrlUTiFVYlLpeH39DoikXBjPKpA==}
-
- imurmurhash@0.1.4:
- resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
- engines: {node: '>=0.8.19'}
-
- indent-string@5.0.0:
- resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==}
- engines: {node: '>=12'}
-
- inherits@2.0.4:
- resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
-
- ini@4.1.1:
- resolution: {integrity: sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==}
- engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
-
- ioredis@5.10.1:
- resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==}
- engines: {node: '>=12.22.0'}
-
- iron-webcrypto@1.2.1:
- resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
-
- is-builtin-module@5.0.0:
- resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==}
- engines: {node: '>=18.20'}
-
- is-core-module@2.16.1:
- resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
- engines: {node: '>= 0.4'}
-
- is-docker@3.0.0:
- resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
- hasBin: true
-
- is-extglob@2.1.1:
- resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
- engines: {node: '>=0.10.0'}
-
- is-fullwidth-code-point@3.0.0:
- resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
- engines: {node: '>=8'}
-
- is-glob@4.0.3:
- resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
- engines: {node: '>=0.10.0'}
-
- is-in-ssh@1.0.0:
- resolution: {integrity: sha512-jYa6Q9rH90kR1vKB6NM7qqd1mge3Fx4Dhw5TVlK1MUBqhEOuCagrEHMevNuCcbECmXZ0ThXkRm+Ymr51HwEPAw==}
- engines: {node: '>=20'}
-
- is-inside-container@1.0.0:
- resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
- engines: {node: '>=14.16'}
- hasBin: true
-
- is-installed-globally@1.0.0:
- resolution: {integrity: sha512-K55T22lfpQ63N4KEN57jZUAaAYqYHEe8veb/TycJRk9DdSCLLcovXz/mL6mOnhQaZsQGwPhuFopdQIlqGSEjiQ==}
- engines: {node: '>=18'}
-
- is-module@1.0.0:
- resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
-
- is-number@7.0.0:
- resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
- engines: {node: '>=0.12.0'}
-
- is-path-inside@4.0.0:
- resolution: {integrity: sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==}
- engines: {node: '>=12'}
-
- is-reference@1.2.1:
- resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
-
- is-stream@2.0.1:
- resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
- engines: {node: '>=8'}
-
- is-stream@3.0.0:
- resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- is-what@5.5.0:
- resolution: {integrity: sha512-oG7cgbmg5kLYae2N5IVd3jm2s+vldjxJzK1pcu9LfpGuQ93MQSzo0okvRna+7y5ifrD+20FE8FvjusyGaz14fw==}
- engines: {node: '>=18'}
-
- is-wsl@3.1.1:
- resolution: {integrity: sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==}
- engines: {node: '>=16'}
-
- isarray@1.0.0:
- resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
-
- isexe@2.0.0:
- resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
-
- isexe@4.0.0:
- resolution: {integrity: sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==}
- engines: {node: '>=20'}
-
- jackspeak@3.4.3:
- resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
-
- jiti@2.6.1:
- resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
- hasBin: true
-
- js-tokens@4.0.0:
- resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
-
- js-tokens@9.0.1:
- resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
-
- js-yaml@4.1.1:
- resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==}
- hasBin: true
-
- jsdoc-type-pratt-parser@7.2.0:
- resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==}
- engines: {node: '>=20.0.0'}
-
- jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
- hasBin: true
-
- json-buffer@3.0.1:
- resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
-
- json-schema-to-typescript-lite@15.0.0:
- resolution: {integrity: sha512-5mMORSQm9oTLyjM4mWnyNBi2T042Fhg1/0gCIB6X8U/LVpM2A+Nmj2yEyArqVouDmFThDxpEXcnTgSrjkGJRFA==}
-
- json-schema-traverse@0.4.1:
- resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
-
- json-stable-stringify-without-jsonify@1.0.1:
- resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
-
- json5@2.2.3:
- resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
- engines: {node: '>=6'}
- hasBin: true
-
- keyv@4.5.4:
- resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
-
- kleur@4.1.5:
- resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==}
- engines: {node: '>=6'}
-
- klona@2.0.6:
- resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==}
- engines: {node: '>= 8'}
-
- knitwork@1.3.0:
- resolution: {integrity: sha512-4LqMNoONzR43B1W0ek0fhXMsDNW/zxa1NdFAVMY+k28pgZLovR4G3PB5MrpTxCy1QaZCqNoiaKPr5w5qZHfSNw==}
-
- launch-editor@2.13.2:
- resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==}
-
- lazystream@1.0.1:
- resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==}
- engines: {node: '>= 0.6.3'}
-
- levn@0.4.1:
- resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
- engines: {node: '>= 0.8.0'}
-
- lightningcss-android-arm64@1.32.0:
- resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [android]
-
- lightningcss-darwin-arm64@1.32.0:
- resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- lightningcss-darwin-x64@1.32.0:
- resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [darwin]
-
- lightningcss-freebsd-x64@1.32.0:
- resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [freebsd]
-
- lightningcss-linux-arm-gnueabihf@1.32.0:
- resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm]
- os: [linux]
-
- lightningcss-linux-arm64-gnu@1.32.0:
- resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- lightningcss-linux-arm64-musl@1.32.0:
- resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- lightningcss-linux-x64-gnu@1.32.0:
- resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- lightningcss-linux-x64-musl@1.32.0:
- resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- lightningcss-win32-arm64-msvc@1.32.0:
- resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [win32]
-
- lightningcss-win32-x64-msvc@1.32.0:
- resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [win32]
-
- lightningcss@1.32.0:
- resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
- engines: {node: '>= 12.0.0'}
-
- lilconfig@3.1.3:
- resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
- engines: {node: '>=14'}
-
- listhen@1.9.1:
- resolution: {integrity: sha512-4EhoyVcXEpNlY5HJRSQpH7Rba94M8N2JmI62ePjl0lrJKXSfG0F1FAgHGxBoz/T3pe41sUEwkIRRIcaUL0/Ofw==}
- hasBin: true
-
- load-tsconfig@0.2.5:
- resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- local-pkg@1.1.2:
- resolution: {integrity: sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==}
- engines: {node: '>=14'}
-
- locate-path@6.0.0:
- resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
- engines: {node: '>=10'}
-
- locate-path@8.0.0:
- resolution: {integrity: sha512-XT9ewWAC43tiAV7xDAPflMkG0qOPn2QjHqlgX8FOqmWa/rxnyYDulF9T0F7tRy1u+TVTmK/M//6VIOye+2zDXg==}
- engines: {node: '>=20'}
-
- lodash.defaults@4.2.0:
- resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==}
-
- lodash.isarguments@3.1.0:
- resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
-
- lodash.memoize@4.1.2:
- resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
-
- lodash.uniq@4.5.0:
- resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
-
- lodash@4.18.1:
- resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==}
-
- lru-cache@10.4.3:
- resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==}
-
- lru-cache@11.2.7:
- resolution: {integrity: sha512-aY/R+aEsRelme17KGQa/1ZSIpLpNYYrhcrepKTZgE+W3WM16YMCaPwOHLHsmopZHELU0Ojin1lPVxKR0MihncA==}
- engines: {node: 20 || >=22}
-
- lru-cache@5.1.1:
- resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
-
- magic-regexp@0.10.0:
- resolution: {integrity: sha512-Uly1Bu4lO1hwHUW0CQeSWuRtzCMNO00CmXtS8N6fyvB3B979GOEEeAkiTUDsmbYLAbvpUS/Kt5c4ibosAzVyVg==}
-
- magic-string-ast@1.0.3:
- resolution: {integrity: sha512-CvkkH1i81zl7mmb94DsRiFeG9V2fR2JeuK8yDgS8oiZSFa++wWLEgZ5ufEOyLHbvSbD1gTRKv9NdX69Rnvr9JA==}
- engines: {node: '>=20.19.0'}
-
- magic-string@0.30.21:
- resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
-
- magicast@0.5.2:
- resolution: {integrity: sha512-E3ZJh4J3S9KfwdjZhe2afj6R9lGIN5Pher1pF39UGrXRqq/VDaGVIGN13BjHd2u8B61hArAGOnso7nBOouW3TQ==}
-
- mdn-data@2.0.28:
- resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==}
-
- mdn-data@2.27.1:
- resolution: {integrity: sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==}
-
- merge-stream@2.0.0:
- resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
-
- merge2@1.4.1:
- resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
- engines: {node: '>= 8'}
-
- micromatch@4.0.8:
- resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
- engines: {node: '>=8.6'}
-
- mime-db@1.54.0:
- resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
- engines: {node: '>= 0.6'}
-
- mime-types@3.0.2:
- resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
- engines: {node: '>=18'}
-
- mime@4.1.0:
- resolution: {integrity: sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==}
- engines: {node: '>=16'}
- hasBin: true
-
- mimic-fn@4.0.0:
- resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
- engines: {node: '>=12'}
-
- minimatch@10.2.5:
- resolution: {integrity: sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==}
- engines: {node: 18 || 20 || >=22}
-
- minimatch@5.1.9:
- resolution: {integrity: sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==}
- engines: {node: '>=10'}
-
- minimatch@9.0.9:
- resolution: {integrity: sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minipass@7.1.3:
- resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==}
- engines: {node: '>=16 || 14 >=14.17'}
-
- minizlib@3.1.0:
- resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
- engines: {node: '>= 18'}
-
- mitt@3.0.1:
- resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==}
-
- mlly@1.8.2:
- resolution: {integrity: sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==}
-
- mocked-exports@0.1.1:
- resolution: {integrity: sha512-aF7yRQr/Q0O2/4pIXm6PZ5G+jAd7QS4Yu8m+WEeEHGnbo+7mE36CbLSDQiXYV8bVL3NfmdeqPJct0tUlnjVSnA==}
-
- mrmime@2.0.1:
- resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==}
- engines: {node: '>=10'}
-
- ms@2.1.3:
- resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
-
- muggle-string@0.4.1:
- resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- nanotar@0.3.0:
- resolution: {integrity: sha512-Kv2JYYiCzt16Kt5QwAc9BFG89xfPNBx+oQL4GQXD9nLqPkZBiNaqaCWtwnbk/q7UVsTYevvM1b0UF8zmEI4pCg==}
-
- napi-postinstall@0.3.4:
- resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==}
- engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
- hasBin: true
-
- natural-compare@1.4.0:
- resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
-
- nitropack@2.13.3:
- resolution: {integrity: sha512-C8vO7RxkU0AQ3HbYUumuG6MVM5JjRaBchke/rYFOp3EvrLtTBHZYhDVGECdpa27vNuOYRzm3GtQMn2YDOjDJLA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- xml2js: ^0.6.2
- peerDependenciesMeta:
- xml2js:
- optional: true
-
- node-addon-api@7.1.1:
- resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==}
-
- node-fetch-native@1.6.7:
- resolution: {integrity: sha512-g9yhqoedzIUm0nTnTqAQvueMPVOuIY16bqgAJJC8XOOubYFNwz6IER9qs0Gq2Xd0+CecCKFjtdDTMA4u4xG06Q==}
-
- node-fetch@2.7.0:
- resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
- engines: {node: 4.x || >=6.0.0}
- peerDependencies:
- encoding: ^0.1.0
- peerDependenciesMeta:
- encoding:
- optional: true
-
- node-forge@1.4.0:
- resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==}
- 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.4:
- resolution: {integrity: sha512-8DY+kFsDkNXy1sJglUfuODx1/opAGJGyrTuFqEoN90oRc2Vk0ZbD4K2qmKXBBEhZQzdKHIVfEJpDU8Ak2NJEvQ==}
-
- node-releases@2.0.37:
- resolution: {integrity: sha512-1h5gKZCF+pO/o3Iqt5Jp7wc9rH3eJJ0+nh/CIoiRwjRxde/hAHyLPXYN4V3CqKAbiZPSeJFSWHmJsbkicta0Eg==}
-
- nopt@8.1.0:
- resolution: {integrity: sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==}
- engines: {node: ^18.17.0 || >=20.5.0}
- hasBin: true
-
- normalize-path@3.0.0:
- resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
- engines: {node: '>=0.10.0'}
-
- npm-run-path@5.3.0:
- resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- npm-run-path@6.0.0:
- resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==}
- engines: {node: '>=18'}
-
- nth-check@2.1.1:
- resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
-
- nuxt@4.4.2:
- resolution: {integrity: sha512-iWVFpr/YEqVU/CenqIHMnIkvb2HE/9f+q8oxZ+pj2et+60NljGRClCgnmbvGPdmNFE0F1bEhoBCYfqbDOCim3Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- '@parcel/watcher': ^2.1.0
- '@types/node': '>=18.12.0'
- peerDependenciesMeta:
- '@parcel/watcher':
- optional: true
- '@types/node':
- optional: true
-
- nypm@0.6.5:
- resolution: {integrity: sha512-K6AJy1GMVyfyMXRVB88700BJqNUkByijGJM8kEHpLdcAt+vSQAVfkWWHYzuRXHSY6xA2sNc5RjTj0p9rE2izVQ==}
- engines: {node: '>=18'}
- hasBin: true
-
- object-deep-merge@2.0.0:
- resolution: {integrity: sha512-3DC3UMpeffLTHiuXSy/UG4NOIYTLlY9u3V82+djSCLYClWobZiS4ivYzpIUWrRY/nfsJ8cWsKyG3QfyLePmhvg==}
-
- obug@2.1.1:
- resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
-
- ofetch@1.5.1:
- resolution: {integrity: sha512-2W4oUZlVaqAPAil6FUg/difl6YhqhUR7x2eZY4bQCko22UXg3hptq9KLQdqFClV+Wu85UX7hNtdGTngi/1BxcA==}
-
- ofetch@2.0.0-alpha.3:
- resolution: {integrity: sha512-zpYTCs2byOuft65vI3z43Dd6iSdFbOZZLb9/d21aCpx2rGastVU9dOCv0lu4ykc1Ur1anAYjDi3SUvR0vq50JA==}
-
- ohash@2.0.11:
- resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==}
-
- on-change@6.0.2:
- resolution: {integrity: sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w==}
- engines: {node: '>=20'}
-
- on-finished@2.4.1:
- resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
- engines: {node: '>= 0.8'}
-
- onetime@6.0.0:
- resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
- engines: {node: '>=12'}
-
- open@10.2.0:
- resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==}
- engines: {node: '>=18'}
-
- open@11.0.0:
- resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==}
- engines: {node: '>=20'}
-
- optionator@0.9.4:
- resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
- engines: {node: '>= 0.8.0'}
-
- oxc-minify@0.117.0:
- resolution: {integrity: sha512-JHsv/b+bmBJkAzkHXgTN7RThloVxLHPT0ojHfjqxVeHuQB7LPpLUbJ2qfwz37sto9stZ9+AVwUP4b3gtR7p/Tw==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- oxc-parser@0.117.0:
- resolution: {integrity: sha512-l3cbgK5wUvWDVNWM/JFU77qDdGZK1wudnLsFcrRyNo/bL1CyU8pC25vDhMHikVY29lbK2InTWsX42RxVSutUdQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- oxc-transform@0.117.0:
- resolution: {integrity: sha512-u1Stl2uhDh9bFuOGjGXQIqx46IRUNMyHQkq59LayXNGS2flNv7RpZpRSWs5S5deuNP6jJZ12gtMBze+m4dOhmw==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- oxc-walker@0.7.0:
- resolution: {integrity: sha512-54B4KUhrzbzc4sKvKwVYm7E2PgeROpGba0/2nlNZMqfDyca+yOor5IMb4WLGBatGDT0nkzYdYuzylg7n3YfB7A==}
- peerDependencies:
- oxc-parser: '>=0.98.0'
-
- p-limit@3.1.0:
- resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
- engines: {node: '>=10'}
-
- p-limit@4.0.0:
- resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- p-locate@5.0.0:
- resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
- engines: {node: '>=10'}
-
- p-locate@6.0.0:
- resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==}
- engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
-
- package-json-from-dist@1.0.1:
- resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
-
- package-manager-detector@1.6.0:
- resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
-
- parse-imports-exports@0.2.4:
- resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
-
- parse-statements@1.0.11:
- resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
-
- parseurl@1.3.3:
- resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
- engines: {node: '>= 0.8'}
-
- path-exists@4.0.0:
- resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
- engines: {node: '>=8'}
-
- path-key@3.1.1:
- resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
- engines: {node: '>=8'}
-
- path-key@4.0.0:
- resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
- engines: {node: '>=12'}
-
- path-parse@1.0.7:
- resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
-
- path-scurry@1.11.1:
- resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==}
- engines: {node: '>=16 || 14 >=14.18'}
-
- path-scurry@2.0.2:
- resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==}
- engines: {node: 18 || 20 || >=22}
-
- pathe@1.1.2:
- resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
-
- pathe@2.0.3:
- resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
-
- perfect-debounce@1.0.0:
- resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==}
-
- perfect-debounce@2.1.0:
- resolution: {integrity: sha512-LjgdTytVFXeUgtHZr9WYViYSM/g8MkcTPYDlPa3cDqMirHjKiSZPYd6DoL7pK8AJQr+uWkQvCjHNdiMqsrJs+g==}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@2.3.2:
- resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
- engines: {node: '>=8.6'}
-
- picomatch@4.0.4:
- resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
- engines: {node: '>=12'}
-
- pinia@3.0.4:
- resolution: {integrity: sha512-l7pqLUFTI/+ESXn6k3nu30ZIzW5E2WZF/LaHJEpoq6ElcLD+wduZoB2kBN19du6K/4FDpPMazY2wJr+IndBtQw==}
- peerDependencies:
- typescript: '>=4.5.0'
- vue: ^3.5.11
- peerDependenciesMeta:
- typescript:
- optional: true
-
- pkg-types@1.3.1:
- resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
-
- pkg-types@2.3.0:
- resolution: {integrity: sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==}
-
- pluralize@8.0.0:
- resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
- engines: {node: '>=4'}
-
- postcss-calc@10.1.1:
- resolution: {integrity: sha512-NYEsLHh8DgG/PRH2+G9BTuUdtf9ViS+vdoQ0YA5OQdGsfN4ztiwtDWNtBl9EKeqNMFnIu8IKZ0cLxEQ5r5KVMw==}
- engines: {node: ^18.12 || ^20.9 || >=22.0}
- peerDependencies:
- postcss: ^8.4.38
-
- postcss-colormin@7.0.7:
- resolution: {integrity: sha512-sBQ628lSj3VQpDquQel8Pen5mmjFPsO4pH9lDLaHB1AVkMRHtkl0pRB5DCWznc9upWsxint/kV+AveSj7W1tew==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-convert-values@7.0.9:
- resolution: {integrity: sha512-l6uATQATZaCa0bckHV+r6dLXfWtUBKXxO3jK+AtxxJJtgMPD+VhhPCCx51I4/5w8U5uHV67g3w7PXj+V3wlMlg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-discard-comments@7.0.6:
- resolution: {integrity: sha512-Sq+Fzj1Eg5/CPf1ERb0wS1Im5cvE2gDXCE+si4HCn1sf+jpQZxDI4DXEp8t77B/ImzDceWE2ebJQFXdqZ6GRJw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-discard-duplicates@7.0.2:
- resolution: {integrity: sha512-eTonaQvPZ/3i1ASDHOKkYwAybiM45zFIc7KXils4mQmHLqIswXD9XNOKEVxtTFnsmwYzF66u4LMgSr0abDlh5w==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-discard-empty@7.0.1:
- resolution: {integrity: sha512-cFrJKZvcg/uxB6Ijr4l6qmn3pXQBna9zyrPC+sK0zjbkDUZew+6xDltSF7OeB7rAtzaaMVYSdbod+sZOCWnMOg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-discard-overridden@7.0.1:
- resolution: {integrity: sha512-7c3MMjjSZ/qYrx3uc1940GSOzN1Iqjtlqe8uoSg+qdVPYyRb0TILSqqmtlSFuE4mTDECwsm397Ya7iXGzfF7lg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-merge-longhand@7.0.5:
- resolution: {integrity: sha512-Kpu5v4Ys6QI59FxmxtNB/iHUVDn9Y9sYw66D6+SZoIk4QTz1prC4aYkhIESu+ieG1iylod1f8MILMs1Em3mmIw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-merge-rules@7.0.8:
- resolution: {integrity: sha512-BOR1iAM8jnr7zoQSlpeBmCsWV5Uudi/+5j7k05D0O/WP3+OFMPD86c1j/20xiuRtyt45bhxw/7hnhZNhW2mNFA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-minify-font-values@7.0.1:
- resolution: {integrity: sha512-2m1uiuJeTplll+tq4ENOQSzB8LRnSUChBv7oSyFLsJRtUgAAJGP6LLz0/8lkinTgxrmJSPOEhgY1bMXOQ4ZXhQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-minify-gradients@7.0.2:
- resolution: {integrity: sha512-fVY3AB8Um7SJR5usHqTY2Ngf9qh8IRN+FFzrBP0ONJy6yYXsP7xyjK2BvSAIrpgs1cST+H91V0TXi3diHLYJtw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-minify-params@7.0.6:
- resolution: {integrity: sha512-YOn02gC68JijlaXVuKvFSCvQOhTpblkcfDre2hb/Aaa58r2BIaK4AtE/cyZf2wV7YKAG+UlP9DT+By0ry1E4VQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-minify-selectors@7.0.6:
- resolution: {integrity: sha512-lIbC0jy3AAwDxEgciZlBullDiMBeBCT+fz5G8RcA9MWqh/hfUkpOI3vNDUNEZHgokaoiv0juB9Y8fGcON7rU/A==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-charset@7.0.1:
- resolution: {integrity: sha512-sn413ofhSQHlZFae//m9FTOfkmiZ+YQXsbosqOWRiVQncU2BA3daX3n0VF3cG6rGLSFVc5Di/yns0dFfh8NFgQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-display-values@7.0.1:
- resolution: {integrity: sha512-E5nnB26XjSYz/mGITm6JgiDpAbVuAkzXwLzRZtts19jHDUBFxZ0BkXAehy0uimrOjYJbocby4FVswA/5noOxrQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-positions@7.0.1:
- resolution: {integrity: sha512-pB/SzrIP2l50ZIYu+yQZyMNmnAcwyYb9R1fVWPRxm4zcUFCY2ign7rcntGFuMXDdd9L2pPNUgoODDk91PzRZuQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-repeat-style@7.0.1:
- resolution: {integrity: sha512-NsSQJ8zj8TIDiF0ig44Byo3Jk9e4gNt9x2VIlJudnQQ5DhWAHJPF4Tr1ITwyHio2BUi/I6Iv0HRO7beHYOloYQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-string@7.0.1:
- resolution: {integrity: sha512-QByrI7hAhsoze992kpbMlJSbZ8FuCEc1OT9EFbZ6HldXNpsdpZr+YXC5di3UEv0+jeZlHbZcoCADgb7a+lPmmQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-timing-functions@7.0.1:
- resolution: {integrity: sha512-bHifyuuSNdKKsnNJ0s8fmfLMlvsQwYVxIoUBnowIVl2ZAdrkYQNGVB4RxjfpvkMjipqvbz0u7feBZybkl/6NJg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-unicode@7.0.6:
- resolution: {integrity: sha512-z6bwTV84YW6ZvvNoaNLuzRW4/uWxDKYI1iIDrzk6D2YTL7hICApy+Q1LP6vBEsljX8FM7YSuV9qI79XESd4ddQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-url@7.0.1:
- resolution: {integrity: sha512-sUcD2cWtyK1AOL/82Fwy1aIVm/wwj5SdZkgZ3QiUzSzQQofrbq15jWJ3BA7Z+yVRwamCjJgZJN0I9IS7c6tgeQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-normalize-whitespace@7.0.1:
- resolution: {integrity: sha512-vsbgFHMFQrJBJKrUFJNZ2pgBeBkC2IvvoHjz1to0/0Xk7sII24T0qFOiJzG6Fu3zJoq/0yI4rKWi7WhApW+EFA==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-ordered-values@7.0.2:
- resolution: {integrity: sha512-AMJjt1ECBffF7CEON/Y0rekRLS6KsePU6PRP08UqYW4UGFRnTXNrByUzYK1h8AC7UWTZdQ9O3Oq9kFIhm0SFEw==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-reduce-initial@7.0.6:
- resolution: {integrity: sha512-G6ZyK68AmrPdMB6wyeA37ejnnRG2S8xinJrZJnOv+IaRKf6koPAVbQsiC7MfkmXaGmF1UO+QCijb27wfpxuRNg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-reduce-transforms@7.0.1:
- resolution: {integrity: sha512-MhyEbfrm+Mlp/36hvZ9mT9DaO7dbncU0CvWI8V93LRkY6IYlu38OPg3FObnuKTUxJ4qA8HpurdQOo5CyqqO76g==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-selector-parser@7.1.1:
- resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==}
- engines: {node: '>=4'}
-
- postcss-svgo@7.1.1:
- resolution: {integrity: sha512-zU9H9oEDrUFKa0JB7w+IYL7Qs9ey1mZyjhbf0KLxwJDdDRtoPvCmaEfknzqfHj44QS9VD6c5sJnBAVYTLRg/Sg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >= 18}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-unique-selectors@7.0.5:
- resolution: {integrity: sha512-3QoYmEt4qg/rUWDn6Tc8+ZVPmbp4G1hXDtCNWDx0st8SjtCbRcxRXDDM1QrEiXGG3A45zscSJFb4QH90LViyxg==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- postcss-value-parser@4.2.0:
- resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==}
-
- postcss@8.5.8:
- resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==}
- engines: {node: ^10 || ^12 || >=14}
-
- powershell-utils@0.1.0:
- resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==}
- engines: {node: '>=20'}
-
- prelude-ls@1.2.1:
- resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
- engines: {node: '>= 0.8.0'}
-
- pretty-bytes@7.1.0:
- resolution: {integrity: sha512-nODzvTiYVRGRqAOvE84Vk5JDPyyxsVk0/fbA/bq7RqlnhksGpset09XTxbpvLTIjoaF7K8Z8DG8yHtKGTPSYRw==}
- engines: {node: '>=20'}
-
- process-nextick-args@2.0.1:
- resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
-
- process@0.11.10:
- resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
- engines: {node: '>= 0.6.0'}
-
- punycode@2.3.1:
- resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
- engines: {node: '>=6'}
-
- quansync@0.2.11:
- resolution: {integrity: sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==}
-
- queue-microtask@1.2.3:
- resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
-
- radix3@1.1.2:
- resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
-
- range-parser@1.2.1:
- resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
- engines: {node: '>= 0.6'}
-
- rc9@3.0.1:
- resolution: {integrity: sha512-gMDyleLWVE+i6Sgtc0QbbY6pEKqYs97NGi6isHQPqYlLemPoO8dxQ3uGi0f4NiP98c+jMW6cG1Kx9dDwfvqARQ==}
-
- readable-stream@2.3.8:
- resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
-
- readable-stream@4.7.0:
- resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==}
- engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
-
- readdir-glob@1.1.3:
- resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==}
-
- readdirp@4.1.2:
- resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==}
- engines: {node: '>= 14.18.0'}
-
- readdirp@5.0.0:
- resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
- engines: {node: '>= 20.19.0'}
-
- redis-errors@1.2.0:
- resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
- engines: {node: '>=4'}
-
- redis-parser@3.0.0:
- resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==}
- engines: {node: '>=4'}
-
- refa@0.12.1:
- resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
- regexp-ast-analysis@0.7.1:
- resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==}
- engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
-
- regexp-tree@0.1.27:
- resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
- hasBin: true
-
- regjsparser@0.13.0:
- resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==}
- hasBin: true
-
- reserved-identifiers@1.2.0:
- resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
- engines: {node: '>=18'}
-
- resolve-from@5.0.0:
- resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
- engines: {node: '>=8'}
-
- resolve-pkg-maps@1.0.0:
- resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
- resolve@1.22.11:
- resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==}
- engines: {node: '>= 0.4'}
- hasBin: true
-
- reusify@1.1.0:
- resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
- engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
-
- rfdc@1.4.1:
- resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
-
- rollup-plugin-visualizer@7.0.1:
- resolution: {integrity: sha512-UJUT4+1Ho4OcWmPYU3sYXgUqI8B8Ayfe06MX7y0qCJ1K8aGoKtR/NDd/2nZqM7ADkrzny+I99Ul7GgyoiVNAgg==}
- engines: {node: '>=22'}
- hasBin: true
- peerDependencies:
- rolldown: 1.x || ^1.0.0-beta || ^1.0.0-rc
- rollup: 2.x || 3.x || 4.x
- peerDependenciesMeta:
- rolldown:
- optional: true
- rollup:
- optional: true
-
- rollup@4.60.1:
- resolution: {integrity: sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==}
- engines: {node: '>=18.0.0', npm: '>=8.0.0'}
- hasBin: true
-
- rou3@0.8.1:
- resolution: {integrity: sha512-ePa+XGk00/3HuCqrEnK3LxJW7I0SdNg6EFzKUJG73hMAdDcOUC/i/aSz7LSDwLrGr33kal/rqOGydzwl6U7zBA==}
-
- run-applescript@7.1.0:
- resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==}
- engines: {node: '>=18'}
-
- run-parallel@1.2.0:
- resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
-
- safe-buffer@5.1.2:
- resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
-
- safe-buffer@5.2.1:
- resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
-
- sax@1.6.0:
- resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
- engines: {node: '>=11.0.0'}
-
- scslre@0.3.0:
- resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==}
- engines: {node: ^14.0.0 || >=16.0.0}
-
- scule@1.3.0:
- resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
-
- semver@6.3.1:
- resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
- hasBin: true
-
- semver@7.7.4:
- resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
- engines: {node: '>=10'}
- hasBin: true
-
- send@1.2.1:
- resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
- engines: {node: '>= 18'}
-
- serialize-javascript@7.0.5:
- resolution: {integrity: sha512-F4LcB0UqUl1zErq+1nYEEzSHJnIwb3AF2XWB94b+afhrekOUijwooAYqFyRbjYkm2PAKBabx6oYv/xDxNi8IBw==}
- engines: {node: '>=20.0.0'}
-
- seroval@1.5.2:
- resolution: {integrity: sha512-xcRN39BdsnO9Tf+VzsE7b3JyTJASItIV1FVFewJKCFcW4s4haIKS3e6vj8PGB9qBwC7tnuOywQMdv5N4qkzi7Q==}
- engines: {node: '>=10'}
-
- serve-placeholder@2.0.2:
- resolution: {integrity: sha512-/TMG8SboeiQbZJWRlfTCqMs2DD3SZgWp0kDQePz9yUuCnDfDh/92gf7/PxGhzXTKBIPASIHxFcZndoNbp6QOLQ==}
-
- serve-static@2.2.1:
- resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
- engines: {node: '>= 18'}
-
- setprototypeof@1.2.0:
- resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
-
- shebang-command@2.0.0:
- resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
- engines: {node: '>=8'}
-
- shebang-regex@3.0.0:
- resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
- engines: {node: '>=8'}
-
- shell-quote@1.8.3:
- resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==}
- engines: {node: '>= 0.4'}
-
- signal-exit@4.1.0:
- resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
- engines: {node: '>=14'}
-
- simple-git@3.33.0:
- resolution: {integrity: sha512-D4V/tGC2sjsoNhoMybKyGoE+v8A60hRawKQ1iFRA1zwuDgGZCBJ4ByOzZ5J8joBbi4Oam0qiPH+GhzmSBwbJng==}
-
- sirv@3.0.2:
- resolution: {integrity: sha512-2wcC/oGxHis/BoHkkPwldgiPSYcpZK3JU28WoMVv55yHJgcZ8rlXvuG9iZggz+sU1d4bRgIGASwyWqjxu3FM0g==}
- engines: {node: '>=18'}
-
- sisteransi@1.0.5:
- resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
-
- slash@5.1.0:
- resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==}
- engines: {node: '>=14.16'}
-
- smob@1.6.1:
- resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==}
- engines: {node: '>=20.0.0'}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- source-map-support@0.5.21:
- resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
-
- source-map@0.6.1:
- resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
- engines: {node: '>=0.10.0'}
-
- source-map@0.7.6:
- resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
- engines: {node: '>= 12'}
-
- spdx-exceptions@2.5.0:
- resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
-
- spdx-expression-parse@4.0.0:
- resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
-
- spdx-license-ids@3.0.23:
- resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
-
- speakingurl@14.0.1:
- resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
- engines: {node: '>=0.10.0'}
-
- srvx@0.11.15:
- resolution: {integrity: sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg==}
- engines: {node: '>=20.16.0'}
- hasBin: true
-
- stable-hash-x@0.2.0:
- resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
- engines: {node: '>=12.0.0'}
-
- standard-as-callback@2.1.0:
- resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
-
- statuses@2.0.2:
- resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
- engines: {node: '>= 0.8'}
-
- std-env@3.10.0:
- resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
-
- std-env@4.0.0:
- resolution: {integrity: sha512-zUMPtQ/HBY3/50VbpkupYHbRroTRZJPRLvreamgErJVys0ceuzMkD44J/QjqhHjOzK42GQ3QZIeFG1OYfOtKqQ==}
-
- streamx@2.25.0:
- resolution: {integrity: sha512-0nQuG6jf1w+wddNEEXCF4nTg3LtufWINB5eFEN+5TNZW7KWJp6x87+JFL43vaAUPyCfH1wID+mNVyW6OHtFamg==}
-
- string-width@4.2.3:
- resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
- engines: {node: '>=8'}
-
- string-width@5.1.2:
- resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
- engines: {node: '>=12'}
-
- string-width@7.2.0:
- resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
- engines: {node: '>=18'}
-
- string_decoder@1.1.1:
- resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
-
- string_decoder@1.3.0:
- resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
-
- strip-ansi@6.0.1:
- resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
- engines: {node: '>=8'}
-
- strip-ansi@7.2.0:
- resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==}
- engines: {node: '>=12'}
-
- strip-final-newline@3.0.0:
- resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
- engines: {node: '>=12'}
-
- strip-indent@4.1.1:
- resolution: {integrity: sha512-SlyRoSkdh1dYP0PzclLE7r0M9sgbFKKMFXpFRUMNuKhQSbC6VQIGzq3E0qsfvGJaUFJPGv6Ws1NZ/haTAjfbMA==}
- engines: {node: '>=12'}
-
- strip-literal@3.1.0:
- resolution: {integrity: sha512-8r3mkIM/2+PpjHoOtiAW8Rg3jJLHaV7xPwG+YRGrv6FP0wwk/toTpATxWYOW0BKdWwl82VT2tFYi5DlROa0Mxg==}
-
- structured-clone-es@2.0.0:
- resolution: {integrity: sha512-5UuAHmBLXYPCl22xWJrFuGmIhBKQzxISPVz6E7nmTmTcAOpUzlbjKJsRrCE4vADmMQ0dzeCnlWn9XufnAGf76Q==}
-
- stylehacks@7.0.8:
- resolution: {integrity: sha512-I3f053GBLIiS5Fg6OMFhq/c+yW+5Hc2+1fgq7gElDMMSqwlRb3tBf2ef6ucLStYRpId4q//bQO1FjcyNyy4yDQ==}
- engines: {node: ^18.12.0 || ^20.9.0 || >=22.0}
- peerDependencies:
- postcss: ^8.4.32
-
- superjson@2.2.6:
- resolution: {integrity: sha512-H+ue8Zo4vJmV2nRjpx86P35lzwDT3nItnIsocgumgr0hHMQ+ZGq5vrERg9kJBo5AWGmxZDhzDo+WVIJqkB0cGA==}
- engines: {node: '>=16'}
-
- supports-color@10.2.2:
- resolution: {integrity: sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==}
- engines: {node: '>=18'}
-
- supports-preserve-symlinks-flag@1.0.0:
- resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
- engines: {node: '>= 0.4'}
-
- svgo@4.0.1:
- resolution: {integrity: sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==}
- engines: {node: '>=16'}
- hasBin: true
-
- tagged-tag@1.0.0:
- resolution: {integrity: sha512-yEFYrVhod+hdNyx7g5Bnkkb0G6si8HJurOoOEgC8B/O0uXLHlaey/65KRv6cuWBNhBgHKAROVpc7QyYqE5gFng==}
- engines: {node: '>=20'}
-
- tailwindcss@4.2.2:
- resolution: {integrity: sha512-KWBIxs1Xb6NoLdMVqhbhgwZf2PGBpPEiwOqgI4pFIYbNTfBXiKYyWoTsXgBQ9WFg/OlhnvHaY+AEpW7wSmFo2Q==}
-
- tapable@2.3.2:
- resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==}
- engines: {node: '>=6'}
-
- tar-stream@3.1.8:
- resolution: {integrity: sha512-U6QpVRyCGHva435KoNWy9PRoi2IFYCgtEhq9nmrPPpbRacPs9IH4aJ3gbrFC8dPcXvdSZ4XXfXT5Fshbp2MtlQ==}
-
- tar@7.5.13:
- resolution: {integrity: sha512-tOG/7GyXpFevhXVh8jOPJrmtRpOTsYqUIkVdVooZYJS/z8WhfQUX8RJILmeuJNinGAMSu1veBr4asSHFt5/hng==}
- engines: {node: '>=18'}
-
- teex@1.0.1:
- resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==}
-
- terser@5.46.1:
- resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==}
- engines: {node: '>=10'}
- hasBin: true
-
- text-decoder@1.2.7:
- resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
-
- tiny-invariant@1.3.3:
- resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
-
- tinyclip@0.1.12:
- resolution: {integrity: sha512-Ae3OVUqifDw0wBriIBS7yVaW44Dp6eSHQcyq4Igc7eN2TJH/2YsicswaW+J/OuMvhpDPOKEgpAZCjkb4hpoyeA==}
- engines: {node: ^16.14.0 || >= 17.3.0}
-
- tinyexec@1.0.4:
- resolution: {integrity: sha512-u9r3uZC0bdpGOXtlxUIdwf9pkmvhqJdrVCH9fapQtgy/OeTTMZ1nqH7agtvEfmGui6e1XxjcdrlxvxJvc3sMqw==}
- engines: {node: '>=18'}
-
- tinyglobby@0.2.15:
- resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==}
- engines: {node: '>=12.0.0'}
-
- to-regex-range@5.0.1:
- resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
- engines: {node: '>=8.0'}
-
- to-valid-identifier@1.0.0:
- resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
- engines: {node: '>=20'}
-
- toidentifier@1.0.1:
- resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
- engines: {node: '>=0.6'}
-
- totalist@3.0.1:
- resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==}
- engines: {node: '>=6'}
-
- tr46@0.0.3:
- resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
-
- ts-api-utils@2.5.0:
- resolution: {integrity: sha512-OJ/ibxhPlqrMM0UiNHJ/0CKQkoKF243/AEmplt3qpRgkW8VG7IfOS41h7V8TjITqdByHzrjcS/2si+y4lIh8NA==}
- engines: {node: '>=18.12'}
- peerDependencies:
- typescript: '>=4.8.4'
-
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
- type-check@0.4.0:
- resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
- engines: {node: '>= 0.8.0'}
-
- type-fest@5.5.0:
- resolution: {integrity: sha512-PlBfpQwiUvGViBNX84Yxwjsdhd1TUlXr6zjX7eoirtCPIr08NAmxwa+fcYBTeRQxHo9YC9wwF3m9i700sHma8g==}
- engines: {node: '>=20'}
-
- type-level-regexp@0.1.17:
- resolution: {integrity: sha512-wTk4DH3cxwk196uGLK/E9pE45aLfeKJacKmcEgEOA/q5dnPGNxXt0cfYdFxb57L+sEpf1oJH4Dnx/pnRcku9jg==}
-
- typescript@6.0.2:
- resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- ufo@1.6.3:
- resolution: {integrity: sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==}
-
- ultrahtml@1.6.0:
- resolution: {integrity: sha512-R9fBn90VTJrqqLDwyMph+HGne8eqY1iPfYhPzZrvKpIfwkWZbcYlfpsb8B9dTvBfpy1/hqAD7Wi8EKfP9e8zdw==}
-
- uncrypto@0.1.3:
- resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==}
-
- unctx@2.5.0:
- resolution: {integrity: sha512-p+Rz9x0R7X+CYDkT+Xg8/GhpcShTlU8n+cf9OtOEf7zEQsNcCZO1dPKNRDqvUTaq+P32PMMkxWHwfrxkqfqAYg==}
-
- unenv@2.0.0-rc.24:
- resolution: {integrity: sha512-i7qRCmY42zmCwnYlh9H2SvLEypEFGye5iRmEMKjcGi7zk9UquigRjFtTLz0TYqr0ZGLZhaMHl/foy1bZR+Cwlw==}
-
- unhead@2.1.12:
- resolution: {integrity: sha512-iTHdWD9ztTunOErtfUFk6Wr11BxvzumcYJ0CzaSCBUOEtg+DUZ9+gnE99i8QkLFT2q1rZD48BYYGXpOZVDLYkA==}
-
- unicorn-magic@0.3.0:
- resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==}
- engines: {node: '>=18'}
-
- unicorn-magic@0.4.0:
- resolution: {integrity: sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==}
- engines: {node: '>=20'}
-
- unimport@5.7.0:
- resolution: {integrity: sha512-njnL6sp8lEA8QQbZrt+52p/g4X0rw3bnGGmUcJnt1jeG8+iiqO779aGz0PirCtydAIVcuTBRlJ52F0u46z309Q==}
- engines: {node: '>=18.12.0'}
-
- unimport@6.0.2:
- resolution: {integrity: sha512-ZSOkrDw380w+KIPniY3smyXh2h7H9v2MNr9zejDuh239o5sdea44DRAYrv+rfUi2QGT186P2h0GPGKvy8avQ5g==}
- engines: {node: '>=18.12.0'}
-
- unplugin-utils@0.3.1:
- resolution: {integrity: sha512-5lWVjgi6vuHhJ526bI4nlCOmkCIF3nnfXkCMDeMJrtdvxTs6ZFCM8oNufGTsDbKv/tJ/xj8RpvXjRuPBZJuJog==}
- engines: {node: '>=20.19.0'}
-
- unplugin@2.3.11:
- resolution: {integrity: sha512-5uKD0nqiYVzlmCRs01Fhs2BdkEgBS3SAVP6ndrBsuK42iC2+JHyxM05Rm9G8+5mkmRtzMZGY8Ct5+mliZxU/Ww==}
- engines: {node: '>=18.12.0'}
-
- unplugin@3.0.0:
- resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- unrouting@0.1.7:
- resolution: {integrity: sha512-+0hfD+CVWtD636rc5Fn9VEjjTEDhdqgMpbwAuVoUmydSHDaMNiFW93SJG4LV++RoGSEAyvQN5uABAscYpDphpQ==}
-
- unrs-resolver@1.11.1:
- resolution: {integrity: sha512-bSjt9pjaEBnNiGgc9rUiHGKv5l4/TGzDmYw3RhnkJGtLhbnnA/5qJj7x3dNDCRx/PJxu774LlH8lCOlB4hEfKg==}
-
- unstorage@1.17.5:
- resolution: {integrity: sha512-0i3iqvRfx29hkNntHyQvJTpf5W9dQ9ZadSoRU8+xVlhVtT7jAX57fazYO9EHvcRCfBCyi5YRya7XCDOsbTgkPg==}
- peerDependencies:
- '@azure/app-configuration': ^1.8.0
- '@azure/cosmos': ^4.2.0
- '@azure/data-tables': ^13.3.0
- '@azure/identity': ^4.6.0
- '@azure/keyvault-secrets': ^4.9.0
- '@azure/storage-blob': ^12.26.0
- '@capacitor/preferences': ^6 || ^7 || ^8
- '@deno/kv': '>=0.9.0'
- '@netlify/blobs': ^6.5.0 || ^7.0.0 || ^8.1.0 || ^9.0.0 || ^10.0.0
- '@planetscale/database': ^1.19.0
- '@upstash/redis': ^1.34.3
- '@vercel/blob': '>=0.27.1'
- '@vercel/functions': ^2.2.12 || ^3.0.0
- '@vercel/kv': ^1 || ^2 || ^3
- aws4fetch: ^1.0.20
- db0: '>=0.2.1'
- idb-keyval: ^6.2.1
- ioredis: ^5.4.2
- uploadthing: ^7.4.4
- peerDependenciesMeta:
- '@azure/app-configuration':
- optional: true
- '@azure/cosmos':
- optional: true
- '@azure/data-tables':
- optional: true
- '@azure/identity':
- optional: true
- '@azure/keyvault-secrets':
- optional: true
- '@azure/storage-blob':
- optional: true
- '@capacitor/preferences':
- optional: true
- '@deno/kv':
- optional: true
- '@netlify/blobs':
- optional: true
- '@planetscale/database':
- optional: true
- '@upstash/redis':
- optional: true
- '@vercel/blob':
- optional: true
- '@vercel/functions':
- optional: true
- '@vercel/kv':
- optional: true
- aws4fetch:
- optional: true
- db0:
- optional: true
- idb-keyval:
- optional: true
- ioredis:
- optional: true
- uploadthing:
- optional: true
-
- untun@0.1.3:
- resolution: {integrity: sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ==}
- hasBin: true
-
- untyped@2.0.0:
- resolution: {integrity: sha512-nwNCjxJTjNuLCgFr42fEak5OcLuB3ecca+9ksPFNvtfYSLpjf+iJqSIaSnIile6ZPbKYxI5k2AfXqeopGudK/g==}
- hasBin: true
-
- unwasm@0.5.3:
- resolution: {integrity: sha512-keBgTSfp3r6+s9ZcSma+0chwxQdmLbB5+dAD9vjtB21UTMYuKAxHXCU1K2CbCtnP09EaWeRvACnXk0EJtUx+hw==}
-
- update-browserslist-db@1.2.3:
- resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
- uqr@0.1.3:
- resolution: {integrity: sha512-0rjE8iEJe4YmT9TOhwsZtqCMRLc5DXZUI2UEYUUg63ikBkqqE5EYWaI0etFe/5KUcmcYwLih2RND1kq+hrUJXA==}
-
- uri-js@4.4.1:
- resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
-
- util-deprecate@1.0.2:
- resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
-
- vite-dev-rpc@1.1.0:
- resolution: {integrity: sha512-pKXZlgoXGoE8sEKiKJSng4hI1sQ4wi5YT24FCrwrLt6opmkjlqPPVmiPWWJn8M8byMxRGzp1CrFuqQs4M/Z39A==}
- peerDependencies:
- vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0-0 || ^5.0.0-0 || ^6.0.1 || ^7.0.0-0
-
- vite-hot-client@2.1.0:
- resolution: {integrity: sha512-7SpgZmU7R+dDnSmvXE1mfDtnHLHQSisdySVR7lO8ceAXvM0otZeuQQ6C8LrS5d/aYyP/QZ0hI0L+dIPrm4YlFQ==}
- peerDependencies:
- vite: ^2.6.0 || ^3.0.0 || ^4.0.0 || ^5.0.0-0 || ^6.0.0-0 || ^7.0.0-0
-
- vite-node@5.3.0:
- resolution: {integrity: sha512-8f20COPYJujc3OKPX6OuyBy3ZIv2det4eRRU4GY1y2MjbeGSUmPjedxg1b72KnTagCofwvZ65ThzjxDW2AtQFQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
-
- vite-plugin-checker@0.12.0:
- resolution: {integrity: sha512-CmdZdDOGss7kdQwv73UyVgLPv0FVYe5czAgnmRX2oKljgEvSrODGuClaV3PDR2+3ou7N/OKGauDDBjy2MB07Rg==}
- engines: {node: '>=16.11'}
- peerDependencies:
- '@biomejs/biome': '>=1.7'
- eslint: '>=9.39.1'
- meow: ^13.2.0
- optionator: ^0.9.4
- oxlint: '>=1'
- stylelint: '>=16'
- typescript: '*'
- vite: '>=5.4.21'
- vls: '*'
- vti: '*'
- vue-tsc: ~2.2.10 || ^3.0.0
- peerDependenciesMeta:
- '@biomejs/biome':
- optional: true
- eslint:
- optional: true
- meow:
- optional: true
- optionator:
- optional: true
- oxlint:
- optional: true
- stylelint:
- optional: true
- typescript:
- optional: true
- vls:
- optional: true
- vti:
- optional: true
- vue-tsc:
- optional: true
-
- vite-plugin-inspect@11.3.3:
- resolution: {integrity: sha512-u2eV5La99oHoYPHE6UvbwgEqKKOQGz86wMg40CCosP6q8BkB6e5xPneZfYagK4ojPJSj5anHCrnvC20DpwVdRA==}
- engines: {node: '>=14'}
- peerDependencies:
- '@nuxt/kit': '*'
- vite: ^6.0.0 || ^7.0.0-0
- peerDependenciesMeta:
- '@nuxt/kit':
- optional: true
-
- vite-plugin-vue-tracer@1.3.0:
- resolution: {integrity: sha512-Cgfce6VikzOw5MUJTpeg50s5rRjzU1Vr61ZjuHunVVHLjZZ5AUlgyExHthZ3r59vtoz9W2rDt23FYG81avYBKw==}
- peerDependencies:
- vite: ^6.0.0 || ^7.0.0
- vue: ^3.5.0
-
- vite@7.3.1:
- resolution: {integrity: sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^20.19.0 || >=22.12.0
- jiti: '>=1.21.0'
- less: ^4.0.0
- lightningcss: ^1.21.0
- sass: ^1.70.0
- sass-embedded: ^1.70.0
- stylus: '>=0.54.8'
- sugarss: ^5.0.0
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- lightningcss:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
- vscode-uri@3.1.0:
- resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==}
-
- vue-bundle-renderer@2.2.0:
- resolution: {integrity: sha512-sz/0WEdYH1KfaOm0XaBmRZOWgYTEvUDt6yPYaUzl4E52qzgWLlknaPPTTZmp6benaPTlQAI/hN1x3tAzZygycg==}
-
- vue-devtools-stub@0.1.0:
- resolution: {integrity: sha512-RutnB7X8c5hjq39NceArgXg28WZtZpGc3+J16ljMiYnFhKvd8hITxSWQSQ5bvldxMDU6gG5mkxl1MTQLXckVSQ==}
-
- vue-eslint-parser@10.4.0:
- resolution: {integrity: sha512-Vxi9pJdbN3ZnVGLODVtZ7y4Y2kzAAE2Cm0CZ3ZDRvydVYxZ6VrnBhLikBsRS+dpwj4Jv4UCv21PTEwF5rQ9WXg==}
- engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
- peerDependencies:
- eslint: ^8.57.0 || ^9.0.0 || ^10.0.0
-
- vue-router@5.0.4:
- resolution: {integrity: sha512-lCqDLCI2+fKVRl2OzXuzdSWmxXFLQRxQbmHugnRpTMyYiT+hNaycV0faqG5FBHDXoYrZ6MQcX87BvbY8mQ20Bg==}
- peerDependencies:
- '@pinia/colada': '>=0.21.2'
- '@vue/compiler-sfc': ^3.5.17
- pinia: ^3.0.4
- vue: ^3.5.0
- peerDependenciesMeta:
- '@pinia/colada':
- optional: true
- '@vue/compiler-sfc':
- optional: true
- pinia:
- optional: true
-
- vue@3.5.32:
- resolution: {integrity: sha512-vM4z4Q9tTafVfMAK7IVzmxg34rSzTFMyIe0UUEijUCkn9+23lj0WRfA83dg7eQZIUlgOSGrkViIaCfqSAUXsMw==}
- peerDependencies:
- typescript: '*'
- peerDependenciesMeta:
- typescript:
- optional: true
-
- webidl-conversions@3.0.1:
- resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
-
- webpack-virtual-modules@0.6.2:
- resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
-
- whatwg-url@5.0.0:
- resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
-
- which@2.0.2:
- resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
- engines: {node: '>= 8'}
- hasBin: true
-
- which@6.0.1:
- resolution: {integrity: sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==}
- engines: {node: ^20.17.0 || >=22.9.0}
- hasBin: true
-
- word-wrap@1.2.5:
- resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
- engines: {node: '>=0.10.0'}
-
- wrap-ansi@7.0.0:
- resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
- engines: {node: '>=10'}
-
- wrap-ansi@8.1.0:
- resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
- engines: {node: '>=12'}
-
- wrap-ansi@9.0.2:
- resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==}
- engines: {node: '>=18'}
-
- ws@8.20.0:
- resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==}
- engines: {node: '>=10.0.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: '>=5.0.2'
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
-
- wsl-utils@0.1.0:
- resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==}
- engines: {node: '>=18'}
-
- wsl-utils@0.3.1:
- resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==}
- engines: {node: '>=20'}
-
- xml-name-validator@4.0.0:
- resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==}
- engines: {node: '>=12'}
-
- y18n@5.0.8:
- resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==}
- engines: {node: '>=10'}
-
- yallist@3.1.1:
- resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
-
- yallist@5.0.0:
- resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==}
- engines: {node: '>=18'}
-
- yaml@2.8.3:
- resolution: {integrity: sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==}
- engines: {node: '>= 14.6'}
- hasBin: true
-
- yargs-parser@22.0.0:
- resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=23}
-
- yargs@18.0.0:
- resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==}
- engines: {node: ^20.19.0 || ^22.12.0 || >=23}
-
- yocto-queue@0.1.0:
- resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
- engines: {node: '>=10'}
-
- yocto-queue@1.2.2:
- resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==}
- engines: {node: '>=12.20'}
-
- youch-core@0.3.3:
- resolution: {integrity: sha512-ho7XuGjLaJ2hWHoK8yFnsUGy2Y5uDpqSTq1FkHLK4/oqKtyUU1AFbOOxY4IpC9f0fTLjwYbslUz0Po5BpD1wrA==}
-
- youch@4.1.1:
- resolution: {integrity: sha512-mxW3qiSnl+GRxXsaUMzv2Mbada1Y8CDltET9UxejDQe6DBYlSekghl5U5K0ReAikcHDi0G1vKZEmmo/NWAGKLA==}
-
- zip-stream@6.0.1:
- resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==}
- engines: {node: '>= 14'}
-
-snapshots:
-
- '@antfu/install-pkg@1.1.0':
- dependencies:
- package-manager-detector: 1.6.0
- tinyexec: 1.0.4
-
- '@apidevtools/json-schema-ref-parser@14.2.1(@types/json-schema@7.0.15)':
- dependencies:
- '@types/json-schema': 7.0.15
- js-yaml: 4.1.1
-
- '@babel/code-frame@7.29.0':
- dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- js-tokens: 4.0.0
- picocolors: 1.1.1
-
- '@babel/compat-data@7.29.0': {}
-
- '@babel/core@7.29.0':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/generator': 7.29.1
- '@babel/helper-compilation-targets': 7.28.6
- '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0)
- '@babel/helpers': 7.29.2
- '@babel/parser': 7.29.2
- '@babel/template': 7.28.6
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- '@jridgewell/remapping': 2.3.5
- convert-source-map: 2.0.0
- debug: 4.4.3
- gensync: 1.0.0-beta.2
- json5: 2.2.3
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/generator@7.29.1':
- dependencies:
- '@babel/parser': 7.29.2
- '@babel/types': 7.29.0
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- jsesc: 3.1.0
-
- '@babel/helper-annotate-as-pure@7.27.3':
- dependencies:
- '@babel/types': 7.29.0
-
- '@babel/helper-compilation-targets@7.28.6':
- dependencies:
- '@babel/compat-data': 7.29.0
- '@babel/helper-validator-option': 7.27.1
- browserslist: 4.28.2
- lru-cache: 5.1.1
- semver: 6.3.1
-
- '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-member-expression-to-functions': 7.28.5
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0)
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/traverse': 7.29.0
- semver: 6.3.1
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-globals@7.28.0': {}
-
- '@babel/helper-member-expression-to-functions@7.28.5':
- dependencies:
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-imports@7.28.6':
- dependencies:
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-module-imports': 7.28.6
- '@babel/helper-validator-identifier': 7.28.5
- '@babel/traverse': 7.29.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-optimise-call-expression@7.27.1':
- dependencies:
- '@babel/types': 7.29.0
-
- '@babel/helper-plugin-utils@7.28.6': {}
-
- '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-member-expression-to-functions': 7.28.5
- '@babel/helper-optimise-call-expression': 7.27.1
- '@babel/traverse': 7.29.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-skip-transparent-expression-wrappers@7.27.1':
- dependencies:
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- transitivePeerDependencies:
- - supports-color
-
- '@babel/helper-string-parser@7.27.1': {}
-
- '@babel/helper-validator-identifier@7.28.5': {}
-
- '@babel/helper-validator-option@7.27.1': {}
-
- '@babel/helpers@7.29.2':
- dependencies:
- '@babel/template': 7.28.6
- '@babel/types': 7.29.0
-
- '@babel/parser@7.29.2':
- dependencies:
- '@babel/types': 7.29.0
-
- '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-plugin-utils': 7.28.6
-
- '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-plugin-utils': 7.28.6
-
- '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/helper-annotate-as-pure': 7.27.3
- '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0)
- '@babel/helper-plugin-utils': 7.28.6
- '@babel/helper-skip-transparent-expression-wrappers': 7.27.1
- '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
- transitivePeerDependencies:
- - supports-color
-
- '@babel/template@7.28.6':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/parser': 7.29.2
- '@babel/types': 7.29.0
-
- '@babel/traverse@7.29.0':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/generator': 7.29.1
- '@babel/helper-globals': 7.28.0
- '@babel/parser': 7.29.2
- '@babel/template': 7.28.6
- '@babel/types': 7.29.0
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- '@babel/types@7.29.0':
- dependencies:
- '@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.28.5
-
- '@bomb.sh/tab@0.0.14(cac@6.7.14)(citty@0.2.2)':
- optionalDependencies:
- cac: 6.7.14
- citty: 0.2.2
-
- '@clack/core@1.2.0':
- dependencies:
- fast-wrap-ansi: 0.1.6
- sisteransi: 1.0.5
-
- '@clack/prompts@1.2.0':
- dependencies:
- '@clack/core': 1.2.0
- fast-string-width: 1.1.0
- fast-wrap-ansi: 0.1.6
- sisteransi: 1.0.5
-
- '@cloudflare/kv-asset-handler@0.4.2': {}
-
- '@colordx/core@5.0.3': {}
-
- '@dxup/nuxt@0.4.0(magicast@0.5.2)(typescript@6.0.2)':
- dependencies:
- '@dxup/unimport': 0.1.2
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- chokidar: 5.0.0
- pathe: 2.0.3
- tinyglobby: 0.2.15
- typescript: 6.0.2
- transitivePeerDependencies:
- - magicast
-
- '@dxup/unimport@0.1.2': {}
-
- '@emnapi/core@1.9.2':
- dependencies:
- '@emnapi/wasi-threads': 1.2.1
- tslib: 2.8.1
- optional: true
-
- '@emnapi/runtime@1.9.2':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@emnapi/wasi-threads@1.2.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@es-joy/jsdoccomment@0.86.0':
- dependencies:
- '@types/estree': 1.0.8
- '@typescript-eslint/types': 8.58.0
- comment-parser: 1.4.6
- esquery: 1.7.0
- jsdoc-type-pratt-parser: 7.2.0
-
- '@es-joy/resolve.exports@1.2.0': {}
-
- '@esbuild/aix-ppc64@0.27.7':
- optional: true
-
- '@esbuild/android-arm64@0.27.7':
- optional: true
-
- '@esbuild/android-arm@0.27.7':
- optional: true
-
- '@esbuild/android-x64@0.27.7':
- optional: true
-
- '@esbuild/darwin-arm64@0.27.7':
- optional: true
-
- '@esbuild/darwin-x64@0.27.7':
- optional: true
-
- '@esbuild/freebsd-arm64@0.27.7':
- optional: true
-
- '@esbuild/freebsd-x64@0.27.7':
- optional: true
-
- '@esbuild/linux-arm64@0.27.7':
- optional: true
-
- '@esbuild/linux-arm@0.27.7':
- optional: true
-
- '@esbuild/linux-ia32@0.27.7':
- optional: true
-
- '@esbuild/linux-loong64@0.27.7':
- optional: true
-
- '@esbuild/linux-mips64el@0.27.7':
- optional: true
-
- '@esbuild/linux-ppc64@0.27.7':
- optional: true
-
- '@esbuild/linux-riscv64@0.27.7':
- optional: true
-
- '@esbuild/linux-s390x@0.27.7':
- optional: true
-
- '@esbuild/linux-x64@0.27.7':
- optional: true
-
- '@esbuild/netbsd-arm64@0.27.7':
- optional: true
-
- '@esbuild/netbsd-x64@0.27.7':
- optional: true
-
- '@esbuild/openbsd-arm64@0.27.7':
- optional: true
-
- '@esbuild/openbsd-x64@0.27.7':
- optional: true
-
- '@esbuild/openharmony-arm64@0.27.7':
- optional: true
-
- '@esbuild/sunos-x64@0.27.7':
- optional: true
-
- '@esbuild/win32-arm64@0.27.7':
- optional: true
-
- '@esbuild/win32-ia32@0.27.7':
- optional: true
-
- '@esbuild/win32-x64@0.27.7':
- optional: true
-
- '@eslint-community/eslint-utils@4.9.1(eslint@10.2.0(jiti@2.6.1))':
- dependencies:
- eslint: 10.2.0(jiti@2.6.1)
- eslint-visitor-keys: 3.4.3
-
- '@eslint-community/regexpp@4.12.2': {}
-
- '@eslint/compat@2.0.4(eslint@10.2.0(jiti@2.6.1))':
- dependencies:
- '@eslint/core': 1.2.0
- optionalDependencies:
- eslint: 10.2.0(jiti@2.6.1)
-
- '@eslint/config-array@0.23.4':
- dependencies:
- '@eslint/object-schema': 3.0.4
- debug: 4.4.3
- minimatch: 10.2.5
- transitivePeerDependencies:
- - supports-color
-
- '@eslint/config-helpers@0.5.4':
- dependencies:
- '@eslint/core': 1.2.0
-
- '@eslint/config-inspector@1.5.0(eslint@10.2.0(jiti@2.6.1))':
- dependencies:
- ansis: 4.2.0
- bundle-require: 5.1.0(esbuild@0.27.7)
- cac: 7.0.0
- chokidar: 5.0.0
- esbuild: 0.27.7
- eslint: 10.2.0(jiti@2.6.1)
- h3: 1.15.11
- tinyglobby: 0.2.15
- ws: 8.20.0
- transitivePeerDependencies:
- - bufferutil
- - utf-8-validate
-
- '@eslint/core@1.2.0':
- dependencies:
- '@types/json-schema': 7.0.15
-
- '@eslint/js@9.39.4': {}
-
- '@eslint/object-schema@3.0.4': {}
-
- '@eslint/plugin-kit@0.7.0':
- dependencies:
- '@eslint/core': 1.2.0
- levn: 0.4.1
-
- '@humanfs/core@0.19.1': {}
-
- '@humanfs/node@0.16.7':
- dependencies:
- '@humanfs/core': 0.19.1
- '@humanwhocodes/retry': 0.4.3
-
- '@humanwhocodes/module-importer@1.0.1': {}
-
- '@humanwhocodes/retry@0.4.3': {}
-
- '@ioredis/commands@1.5.1': {}
-
- '@isaacs/cliui@8.0.2':
- dependencies:
- string-width: 5.1.2
- string-width-cjs: string-width@4.2.3
- strip-ansi: 7.2.0
- strip-ansi-cjs: strip-ansi@6.0.1
- wrap-ansi: 8.1.0
- wrap-ansi-cjs: wrap-ansi@7.0.0
-
- '@isaacs/fs-minipass@4.0.1':
- dependencies:
- minipass: 7.1.3
-
- '@jridgewell/gen-mapping@0.3.13':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/remapping@2.3.5':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/source-map@0.3.11':
- dependencies:
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
-
- '@kwsites/file-exists@1.1.1':
- dependencies:
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- '@kwsites/promise-deferred@1.1.1': {}
-
- '@mapbox/node-pre-gyp@2.0.3':
- dependencies:
- consola: 3.4.2
- detect-libc: 2.1.2
- https-proxy-agent: 7.0.6
- node-fetch: 2.7.0
- nopt: 8.1.0
- semver: 7.7.4
- tar: 7.5.13
- transitivePeerDependencies:
- - encoding
- - supports-color
-
- '@napi-rs/wasm-runtime@0.2.12':
- dependencies:
- '@emnapi/core': 1.9.2
- '@emnapi/runtime': 1.9.2
- '@tybys/wasm-util': 0.10.1
- optional: true
-
- '@napi-rs/wasm-runtime@1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
- dependencies:
- '@emnapi/core': 1.9.2
- '@emnapi/runtime': 1.9.2
- '@tybys/wasm-util': 0.10.1
- optional: true
-
- '@nodelib/fs.scandir@2.1.5':
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- run-parallel: 1.2.0
-
- '@nodelib/fs.stat@2.0.5': {}
-
- '@nodelib/fs.walk@1.2.8':
- dependencies:
- '@nodelib/fs.scandir': 2.1.5
- fastq: 1.20.1
-
- '@nuxt/cli@3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)':
- dependencies:
- '@bomb.sh/tab': 0.0.14(cac@6.7.14)(citty@0.2.2)
- '@clack/prompts': 1.2.0
- c12: 3.3.4(magicast@0.5.2)
- citty: 0.2.2
- confbox: 0.2.4
- consola: 3.4.2
- debug: 4.4.3
- defu: 6.1.6
- exsolve: 1.0.8
- fuse.js: 7.2.0
- fzf: 0.5.2
- giget: 3.2.0
- jiti: 2.6.1
- listhen: 1.9.1(srvx@0.11.15)
- nypm: 0.6.5
- ofetch: 1.5.1
- ohash: 2.0.11
- pathe: 2.0.3
- perfect-debounce: 2.1.0
- pkg-types: 2.3.0
- scule: 1.3.0
- semver: 7.7.4
- srvx: 0.11.15
- std-env: 3.10.0
- tinyclip: 0.1.12
- tinyexec: 1.0.4
- ufo: 1.6.3
- youch: 4.1.1
- optionalDependencies:
- '@nuxt/schema': 4.4.2
- transitivePeerDependencies:
- - cac
- - commander
- - magicast
- - supports-color
-
- '@nuxt/devalue@2.0.2': {}
-
- '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))':
- dependencies:
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- execa: 8.0.1
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- transitivePeerDependencies:
- - magicast
-
- '@nuxt/devtools-wizard@3.2.4':
- dependencies:
- '@clack/prompts': 1.2.0
- consola: 3.4.2
- diff: 8.0.4
- execa: 8.0.1
- magicast: 0.5.2
- pathe: 2.0.3
- pkg-types: 2.3.0
- semver: 7.7.4
-
- '@nuxt/devtools@3.2.4(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))':
- dependencies:
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
- '@nuxt/devtools-wizard': 3.2.4
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@vue/devtools-core': 8.1.1(vue@3.5.32(typescript@6.0.2))
- '@vue/devtools-kit': 8.1.1
- birpc: 4.0.0
- consola: 3.4.2
- destr: 2.0.5
- error-stack-parser-es: 1.0.5
- execa: 8.0.1
- fast-npm-meta: 1.4.2
- get-port-please: 3.2.0
- hookable: 6.1.0
- image-meta: 0.2.2
- is-installed-globally: 1.0.0
- launch-editor: 2.13.2
- local-pkg: 1.1.2
- magicast: 0.5.2
- nypm: 0.6.5
- ohash: 2.0.11
- pathe: 2.0.3
- perfect-debounce: 2.1.0
- pkg-types: 2.3.0
- semver: 7.7.4
- simple-git: 3.33.0
- sirv: 3.0.2
- structured-clone-es: 2.0.0
- tinyglobby: 0.2.15
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
- vite-plugin-vue-tracer: 1.3.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))
- which: 6.0.1
- ws: 8.20.0
- transitivePeerDependencies:
- - bufferutil
- - supports-color
- - utf-8-validate
- - vue
-
- '@nuxt/eslint-config@1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.32)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)':
- dependencies:
- '@antfu/install-pkg': 1.1.0
- '@clack/prompts': 1.2.0
- '@eslint/js': 9.39.4
- '@nuxt/eslint-plugin': 1.15.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- '@stylistic/eslint-plugin': 5.10.0(eslint@10.2.0(jiti@2.6.1))
- '@typescript-eslint/eslint-plugin': 8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- '@typescript-eslint/parser': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- eslint: 10.2.0(jiti@2.6.1)
- eslint-config-flat-gitignore: 2.3.0(eslint@10.2.0(jiti@2.6.1))
- eslint-flat-config-utils: 3.1.0
- eslint-merge-processors: 2.0.0(eslint@10.2.0(jiti@2.6.1))
- eslint-plugin-import-lite: 0.5.2(eslint@10.2.0(jiti@2.6.1))
- eslint-plugin-import-x: 4.16.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))
- eslint-plugin-jsdoc: 62.9.0(eslint@10.2.0(jiti@2.6.1))
- eslint-plugin-regexp: 3.1.0(eslint@10.2.0(jiti@2.6.1))
- eslint-plugin-unicorn: 63.0.0(eslint@10.2.0(jiti@2.6.1))
- eslint-plugin-vue: 10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1)))
- eslint-processor-vue-blocks: 2.0.0(@vue/compiler-sfc@3.5.32)(eslint@10.2.0(jiti@2.6.1))
- globals: 17.4.0
- local-pkg: 1.1.2
- pathe: 2.0.3
- vue-eslint-parser: 10.4.0(eslint@10.2.0(jiti@2.6.1))
- transitivePeerDependencies:
- - '@typescript-eslint/utils'
- - '@vue/compiler-sfc'
- - eslint-import-resolver-node
- - supports-color
- - typescript
-
- '@nuxt/eslint-plugin@1.15.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)':
- dependencies:
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- eslint: 10.2.0(jiti@2.6.1)
- transitivePeerDependencies:
- - supports-color
- - typescript
-
- '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.32)(eslint@10.2.0(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))':
- dependencies:
- '@eslint/config-inspector': 1.5.0(eslint@10.2.0(jiti@2.6.1))
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
- '@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(@vue/compiler-sfc@3.5.32)(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- '@nuxt/eslint-plugin': 1.15.2(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- chokidar: 5.0.0
- eslint: 10.2.0(jiti@2.6.1)
- eslint-flat-config-utils: 3.1.0
- eslint-typegen: 2.3.1(eslint@10.2.0(jiti@2.6.1))
- find-up: 8.0.0
- get-port-please: 3.2.0
- mlly: 1.8.2
- pathe: 2.0.3
- unimport: 5.7.0
- transitivePeerDependencies:
- - '@typescript-eslint/utils'
- - '@vue/compiler-sfc'
- - bufferutil
- - eslint-import-resolver-node
- - eslint-plugin-format
- - magicast
- - supports-color
- - typescript
- - utf-8-validate
- - vite
-
- '@nuxt/kit@4.4.2(magicast@0.5.2)':
- dependencies:
- c12: 3.3.4(magicast@0.5.2)
- consola: 3.4.2
- defu: 6.1.6
- destr: 2.0.5
- errx: 0.1.0
- exsolve: 1.0.8
- ignore: 7.0.5
- jiti: 2.6.1
- klona: 2.0.6
- mlly: 1.8.2
- ohash: 2.0.11
- pathe: 2.0.3
- pkg-types: 2.3.0
- rc9: 3.0.1
- scule: 1.3.0
- semver: 7.7.4
- tinyglobby: 0.2.15
- ufo: 1.6.3
- unctx: 2.5.0
- untyped: 2.0.0
- transitivePeerDependencies:
- - magicast
-
- '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.15)(typescript@6.0.2)':
- dependencies:
- '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
- '@nuxt/devalue': 2.0.2
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@unhead/vue': 2.1.12(vue@3.5.32(typescript@6.0.2))
- '@vue/shared': 3.5.32
- consola: 3.4.2
- defu: 6.1.6
- destr: 2.0.5
- devalue: 5.6.4
- errx: 0.1.0
- escape-string-regexp: 5.0.0
- exsolve: 1.0.8
- h3: 1.15.11
- impound: 1.1.5
- klona: 2.0.6
- mocked-exports: 0.1.1
- nitropack: 2.13.3(srvx@0.11.15)
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3)
- nypm: 0.6.5
- ohash: 2.0.11
- pathe: 2.0.3
- pkg-types: 2.3.0
- rou3: 0.8.1
- std-env: 4.0.0
- ufo: 1.6.3
- unctx: 2.5.0
- unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1)
- vue: 3.5.32(typescript@6.0.2)
- vue-bundle-renderer: 2.2.0
- vue-devtools-stub: 0.1.0
- transitivePeerDependencies:
- - '@azure/app-configuration'
- - '@azure/cosmos'
- - '@azure/data-tables'
- - '@azure/identity'
- - '@azure/keyvault-secrets'
- - '@azure/storage-blob'
- - '@babel/core'
- - '@capacitor/preferences'
- - '@deno/kv'
- - '@electric-sql/pglite'
- - '@libsql/client'
- - '@netlify/blobs'
- - '@planetscale/database'
- - '@upstash/redis'
- - '@vercel/blob'
- - '@vercel/functions'
- - '@vercel/kv'
- - aws4fetch
- - bare-abort-controller
- - bare-buffer
- - better-sqlite3
- - db0
- - drizzle-orm
- - encoding
- - idb-keyval
- - ioredis
- - magicast
- - mysql2
- - react-native-b4a
- - rolldown
- - sqlite3
- - srvx
- - supports-color
- - typescript
- - uploadthing
- - xml2js
-
- '@nuxt/schema@4.4.2':
- dependencies:
- '@vue/shared': 3.5.32
- defu: 6.1.6
- pathe: 2.0.3
- pkg-types: 2.3.0
- std-env: 4.0.0
-
- '@nuxt/telemetry@2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))':
- dependencies:
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- citty: 0.2.2
- consola: 3.4.2
- ofetch: 2.0.0-alpha.3
- rc9: 3.0.1
- std-env: 4.0.0
-
- '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(eslint@10.2.0(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2))(yaml@2.8.3)':
- dependencies:
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@rollup/plugin-replace': 6.0.3(rollup@4.60.1)
- '@vitejs/plugin-vue': 6.0.5(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))
- '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))
- autoprefixer: 10.4.27(postcss@8.5.8)
- consola: 3.4.2
- cssnano: 7.1.4(postcss@8.5.8)
- defu: 6.1.6
- escape-string-regexp: 5.0.0
- exsolve: 1.0.8
- get-port-please: 3.2.0
- jiti: 2.6.1
- knitwork: 1.3.0
- magic-string: 0.30.21
- mlly: 1.8.2
- mocked-exports: 0.1.1
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3)
- nypm: 0.6.5
- pathe: 2.0.3
- pkg-types: 2.3.0
- postcss: 8.5.8
- seroval: 1.5.2
- std-env: 4.0.0
- ufo: 1.6.3
- unenv: 2.0.0-rc.24
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vite-node: 5.3.0(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vite-plugin-checker: 0.12.0(eslint@10.2.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
- vue: 3.5.32(typescript@6.0.2)
- vue-bundle-renderer: 2.2.0
- optionalDependencies:
- '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
- rollup-plugin-visualizer: 7.0.1(rollup@4.60.1)
- transitivePeerDependencies:
- - '@biomejs/biome'
- - '@types/node'
- - eslint
- - less
- - lightningcss
- - magicast
- - meow
- - optionator
- - oxlint
- - rollup
- - sass
- - sass-embedded
- - stylelint
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - typescript
- - vls
- - vti
- - vue-tsc
- - yaml
-
- '@oxc-minify/binding-android-arm-eabi@0.117.0':
- optional: true
-
- '@oxc-minify/binding-android-arm64@0.117.0':
- optional: true
-
- '@oxc-minify/binding-darwin-arm64@0.117.0':
- optional: true
-
- '@oxc-minify/binding-darwin-x64@0.117.0':
- optional: true
-
- '@oxc-minify/binding-freebsd-x64@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-arm-gnueabihf@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-arm-musleabihf@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-arm64-gnu@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-arm64-musl@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-ppc64-gnu@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-riscv64-gnu@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-riscv64-musl@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-s390x-gnu@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-x64-gnu@0.117.0':
- optional: true
-
- '@oxc-minify/binding-linux-x64-musl@0.117.0':
- optional: true
-
- '@oxc-minify/binding-openharmony-arm64@0.117.0':
- optional: true
-
- '@oxc-minify/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
- dependencies:
- '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- transitivePeerDependencies:
- - '@emnapi/core'
- - '@emnapi/runtime'
- optional: true
-
- '@oxc-minify/binding-win32-arm64-msvc@0.117.0':
- optional: true
-
- '@oxc-minify/binding-win32-ia32-msvc@0.117.0':
- optional: true
-
- '@oxc-minify/binding-win32-x64-msvc@0.117.0':
- optional: true
-
- '@oxc-parser/binding-android-arm-eabi@0.117.0':
- optional: true
-
- '@oxc-parser/binding-android-arm64@0.117.0':
- optional: true
-
- '@oxc-parser/binding-darwin-arm64@0.117.0':
- optional: true
-
- '@oxc-parser/binding-darwin-x64@0.117.0':
- optional: true
-
- '@oxc-parser/binding-freebsd-x64@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm-gnueabihf@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm-musleabihf@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm64-gnu@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-arm64-musl@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-ppc64-gnu@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-riscv64-gnu@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-riscv64-musl@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-s390x-gnu@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-x64-gnu@0.117.0':
- optional: true
-
- '@oxc-parser/binding-linux-x64-musl@0.117.0':
- optional: true
-
- '@oxc-parser/binding-openharmony-arm64@0.117.0':
- optional: true
-
- '@oxc-parser/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
- dependencies:
- '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- transitivePeerDependencies:
- - '@emnapi/core'
- - '@emnapi/runtime'
- optional: true
-
- '@oxc-parser/binding-win32-arm64-msvc@0.117.0':
- optional: true
-
- '@oxc-parser/binding-win32-ia32-msvc@0.117.0':
- optional: true
-
- '@oxc-parser/binding-win32-x64-msvc@0.117.0':
- optional: true
-
- '@oxc-project/types@0.117.0': {}
-
- '@oxc-transform/binding-android-arm-eabi@0.117.0':
- optional: true
-
- '@oxc-transform/binding-android-arm64@0.117.0':
- optional: true
-
- '@oxc-transform/binding-darwin-arm64@0.117.0':
- optional: true
-
- '@oxc-transform/binding-darwin-x64@0.117.0':
- optional: true
-
- '@oxc-transform/binding-freebsd-x64@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-arm-gnueabihf@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-arm-musleabihf@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-arm64-gnu@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-arm64-musl@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-ppc64-gnu@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-riscv64-gnu@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-riscv64-musl@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-s390x-gnu@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-x64-gnu@0.117.0':
- optional: true
-
- '@oxc-transform/binding-linux-x64-musl@0.117.0':
- optional: true
-
- '@oxc-transform/binding-openharmony-arm64@0.117.0':
- optional: true
-
- '@oxc-transform/binding-wasm32-wasi@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
- dependencies:
- '@napi-rs/wasm-runtime': 1.1.2(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- transitivePeerDependencies:
- - '@emnapi/core'
- - '@emnapi/runtime'
- optional: true
-
- '@oxc-transform/binding-win32-arm64-msvc@0.117.0':
- optional: true
-
- '@oxc-transform/binding-win32-ia32-msvc@0.117.0':
- optional: true
-
- '@oxc-transform/binding-win32-x64-msvc@0.117.0':
- optional: true
-
- '@package-json/types@0.0.12': {}
-
- '@parcel/watcher-android-arm64@2.5.6':
- optional: true
-
- '@parcel/watcher-darwin-arm64@2.5.6':
- optional: true
-
- '@parcel/watcher-darwin-x64@2.5.6':
- optional: true
-
- '@parcel/watcher-freebsd-x64@2.5.6':
- optional: true
-
- '@parcel/watcher-linux-arm-glibc@2.5.6':
- optional: true
-
- '@parcel/watcher-linux-arm-musl@2.5.6':
- optional: true
-
- '@parcel/watcher-linux-arm64-glibc@2.5.6':
- optional: true
-
- '@parcel/watcher-linux-arm64-musl@2.5.6':
- optional: true
-
- '@parcel/watcher-linux-x64-glibc@2.5.6':
- optional: true
-
- '@parcel/watcher-linux-x64-musl@2.5.6':
- optional: true
-
- '@parcel/watcher-wasm@2.5.6':
- dependencies:
- is-glob: 4.0.3
- picomatch: 4.0.4
-
- '@parcel/watcher-win32-arm64@2.5.6':
- optional: true
-
- '@parcel/watcher-win32-ia32@2.5.6':
- optional: true
-
- '@parcel/watcher-win32-x64@2.5.6':
- optional: true
-
- '@parcel/watcher@2.5.6':
- dependencies:
- detect-libc: 2.1.2
- is-glob: 4.0.3
- node-addon-api: 7.1.1
- picomatch: 4.0.4
- optionalDependencies:
- '@parcel/watcher-android-arm64': 2.5.6
- '@parcel/watcher-darwin-arm64': 2.5.6
- '@parcel/watcher-darwin-x64': 2.5.6
- '@parcel/watcher-freebsd-x64': 2.5.6
- '@parcel/watcher-linux-arm-glibc': 2.5.6
- '@parcel/watcher-linux-arm-musl': 2.5.6
- '@parcel/watcher-linux-arm64-glibc': 2.5.6
- '@parcel/watcher-linux-arm64-musl': 2.5.6
- '@parcel/watcher-linux-x64-glibc': 2.5.6
- '@parcel/watcher-linux-x64-musl': 2.5.6
- '@parcel/watcher-win32-arm64': 2.5.6
- '@parcel/watcher-win32-ia32': 2.5.6
- '@parcel/watcher-win32-x64': 2.5.6
-
- '@pinia/nuxt@0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))':
- dependencies:
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- pinia: 3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2))
- transitivePeerDependencies:
- - magicast
-
- '@pkgjs/parseargs@0.11.0':
- optional: true
-
- '@polka/url@1.0.0-next.29': {}
-
- '@poppinss/colors@4.1.6':
- dependencies:
- kleur: 4.1.5
-
- '@poppinss/dumper@0.7.0':
- dependencies:
- '@poppinss/colors': 4.1.6
- '@sindresorhus/is': 7.2.0
- supports-color: 10.2.2
-
- '@poppinss/exception@1.2.3': {}
-
- '@rolldown/pluginutils@1.0.0-rc.13': {}
-
- '@rolldown/pluginutils@1.0.0-rc.2': {}
-
- '@rollup/plugin-alias@6.0.0(rollup@4.60.1)':
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/plugin-commonjs@29.0.2(rollup@4.60.1)':
- dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.60.1)
- commondir: 1.0.1
- estree-walker: 2.0.2
- fdir: 6.5.0(picomatch@4.0.4)
- is-reference: 1.2.1
- magic-string: 0.30.21
- picomatch: 4.0.4
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/plugin-inject@5.0.5(rollup@4.60.1)':
- dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.60.1)
- estree-walker: 2.0.2
- magic-string: 0.30.21
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/plugin-json@6.1.0(rollup@4.60.1)':
- dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.60.1)
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/plugin-node-resolve@16.0.3(rollup@4.60.1)':
- dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.60.1)
- '@types/resolve': 1.20.2
- deepmerge: 4.3.1
- is-module: 1.0.0
- resolve: 1.22.11
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/plugin-replace@6.0.3(rollup@4.60.1)':
- dependencies:
- '@rollup/pluginutils': 5.3.0(rollup@4.60.1)
- magic-string: 0.30.21
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/plugin-terser@1.0.0(rollup@4.60.1)':
- dependencies:
- serialize-javascript: 7.0.5
- smob: 1.6.1
- terser: 5.46.1
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/pluginutils@5.3.0(rollup@4.60.1)':
- dependencies:
- '@types/estree': 1.0.8
- estree-walker: 2.0.2
- picomatch: 4.0.4
- optionalDependencies:
- rollup: 4.60.1
-
- '@rollup/rollup-android-arm-eabi@4.60.1':
- optional: true
-
- '@rollup/rollup-android-arm64@4.60.1':
- optional: true
-
- '@rollup/rollup-darwin-arm64@4.60.1':
- optional: true
-
- '@rollup/rollup-darwin-x64@4.60.1':
- optional: true
-
- '@rollup/rollup-freebsd-arm64@4.60.1':
- optional: true
-
- '@rollup/rollup-freebsd-x64@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-arm-gnueabihf@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-arm-musleabihf@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-arm64-gnu@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-arm64-musl@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-loong64-gnu@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-loong64-musl@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-ppc64-gnu@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-ppc64-musl@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-riscv64-gnu@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-riscv64-musl@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-s390x-gnu@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-x64-gnu@4.60.1':
- optional: true
-
- '@rollup/rollup-linux-x64-musl@4.60.1':
- optional: true
-
- '@rollup/rollup-openbsd-x64@4.60.1':
- optional: true
-
- '@rollup/rollup-openharmony-arm64@4.60.1':
- optional: true
-
- '@rollup/rollup-win32-arm64-msvc@4.60.1':
- optional: true
-
- '@rollup/rollup-win32-ia32-msvc@4.60.1':
- optional: true
-
- '@rollup/rollup-win32-x64-gnu@4.60.1':
- optional: true
-
- '@rollup/rollup-win32-x64-msvc@4.60.1':
- optional: true
-
- '@sindresorhus/base62@1.0.0': {}
-
- '@sindresorhus/is@7.2.0': {}
-
- '@sindresorhus/merge-streams@4.0.0': {}
-
- '@speed-highlight/core@1.2.15': {}
-
- '@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1))':
- dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1))
- '@typescript-eslint/types': 8.58.0
- eslint: 10.2.0(jiti@2.6.1)
- eslint-visitor-keys: 4.2.1
- espree: 10.4.0
- estraverse: 5.3.0
- picomatch: 4.0.4
-
- '@tailwindcss/node@4.2.2':
- dependencies:
- '@jridgewell/remapping': 2.3.5
- enhanced-resolve: 5.20.1
- jiti: 2.6.1
- lightningcss: 1.32.0
- magic-string: 0.30.21
- source-map-js: 1.2.1
- tailwindcss: 4.2.2
-
- '@tailwindcss/oxide-android-arm64@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-darwin-arm64@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-darwin-x64@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-freebsd-x64@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-linux-arm-gnueabihf@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-linux-arm64-gnu@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-linux-arm64-musl@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-linux-x64-gnu@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-linux-x64-musl@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-wasm32-wasi@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-win32-arm64-msvc@4.2.2':
- optional: true
-
- '@tailwindcss/oxide-win32-x64-msvc@4.2.2':
- optional: true
-
- '@tailwindcss/oxide@4.2.2':
- optionalDependencies:
- '@tailwindcss/oxide-android-arm64': 4.2.2
- '@tailwindcss/oxide-darwin-arm64': 4.2.2
- '@tailwindcss/oxide-darwin-x64': 4.2.2
- '@tailwindcss/oxide-freebsd-x64': 4.2.2
- '@tailwindcss/oxide-linux-arm-gnueabihf': 4.2.2
- '@tailwindcss/oxide-linux-arm64-gnu': 4.2.2
- '@tailwindcss/oxide-linux-arm64-musl': 4.2.2
- '@tailwindcss/oxide-linux-x64-gnu': 4.2.2
- '@tailwindcss/oxide-linux-x64-musl': 4.2.2
- '@tailwindcss/oxide-wasm32-wasi': 4.2.2
- '@tailwindcss/oxide-win32-arm64-msvc': 4.2.2
- '@tailwindcss/oxide-win32-x64-msvc': 4.2.2
-
- '@tailwindcss/vite@4.2.2(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))':
- dependencies:
- '@tailwindcss/node': 4.2.2
- '@tailwindcss/oxide': 4.2.2
- tailwindcss: 4.2.2
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
-
- '@tybys/wasm-util@0.10.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@types/esrecurse@4.3.1': {}
-
- '@types/estree@1.0.8': {}
-
- '@types/json-schema@7.0.15': {}
-
- '@types/resolve@1.20.2': {}
-
- '@typescript-eslint/eslint-plugin@8.58.0(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)':
- dependencies:
- '@eslint-community/regexpp': 4.12.2
- '@typescript-eslint/parser': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- '@typescript-eslint/scope-manager': 8.58.0
- '@typescript-eslint/type-utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- '@typescript-eslint/visitor-keys': 8.58.0
- eslint: 10.2.0(jiti@2.6.1)
- ignore: 7.0.5
- natural-compare: 1.4.0
- ts-api-utils: 2.5.0(typescript@6.0.2)
- typescript: 6.0.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)':
- dependencies:
- '@typescript-eslint/scope-manager': 8.58.0
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2)
- '@typescript-eslint/visitor-keys': 8.58.0
- debug: 4.4.3
- eslint: 10.2.0(jiti@2.6.1)
- typescript: 6.0.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/project-service@8.58.0(typescript@6.0.2)':
- dependencies:
- '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2)
- '@typescript-eslint/types': 8.58.0
- debug: 4.4.3
- typescript: 6.0.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/scope-manager@8.58.0':
- dependencies:
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/visitor-keys': 8.58.0
-
- '@typescript-eslint/tsconfig-utils@8.58.0(typescript@6.0.2)':
- dependencies:
- typescript: 6.0.2
-
- '@typescript-eslint/type-utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)':
- dependencies:
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2)
- '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- debug: 4.4.3
- eslint: 10.2.0(jiti@2.6.1)
- ts-api-utils: 2.5.0(typescript@6.0.2)
- typescript: 6.0.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/types@8.58.0': {}
-
- '@typescript-eslint/typescript-estree@8.58.0(typescript@6.0.2)':
- dependencies:
- '@typescript-eslint/project-service': 8.58.0(typescript@6.0.2)
- '@typescript-eslint/tsconfig-utils': 8.58.0(typescript@6.0.2)
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/visitor-keys': 8.58.0
- debug: 4.4.3
- minimatch: 10.2.5
- semver: 7.7.4
- tinyglobby: 0.2.15
- ts-api-utils: 2.5.0(typescript@6.0.2)
- typescript: 6.0.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)':
- dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1))
- '@typescript-eslint/scope-manager': 8.58.0
- '@typescript-eslint/types': 8.58.0
- '@typescript-eslint/typescript-estree': 8.58.0(typescript@6.0.2)
- eslint: 10.2.0(jiti@2.6.1)
- typescript: 6.0.2
- transitivePeerDependencies:
- - supports-color
-
- '@typescript-eslint/visitor-keys@8.58.0':
- dependencies:
- '@typescript-eslint/types': 8.58.0
- eslint-visitor-keys: 5.0.1
-
- '@unhead/vue@2.1.12(vue@3.5.32(typescript@6.0.2))':
- dependencies:
- hookable: 6.1.0
- unhead: 2.1.12
- vue: 3.5.32(typescript@6.0.2)
-
- '@unrs/resolver-binding-android-arm-eabi@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-android-arm64@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-darwin-arm64@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-darwin-x64@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-freebsd-x64@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-arm-gnueabihf@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-arm-musleabihf@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-arm64-gnu@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-arm64-musl@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-ppc64-gnu@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-riscv64-gnu@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-riscv64-musl@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-s390x-gnu@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-x64-gnu@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-linux-x64-musl@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-wasm32-wasi@1.11.1':
- dependencies:
- '@napi-rs/wasm-runtime': 0.2.12
- optional: true
-
- '@unrs/resolver-binding-win32-arm64-msvc@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-win32-ia32-msvc@1.11.1':
- optional: true
-
- '@unrs/resolver-binding-win32-x64-msvc@1.11.1':
- optional: true
-
- '@vercel/nft@1.5.0(rollup@4.60.1)':
- dependencies:
- '@mapbox/node-pre-gyp': 2.0.3
- '@rollup/pluginutils': 5.3.0(rollup@4.60.1)
- acorn: 8.16.0
- acorn-import-attributes: 1.9.5(acorn@8.16.0)
- async-sema: 3.1.1
- bindings: 1.5.0
- estree-walker: 2.0.2
- glob: 13.0.6
- graceful-fs: 4.2.11
- node-gyp-build: 4.8.4
- picomatch: 4.0.4
- resolve-from: 5.0.0
- transitivePeerDependencies:
- - encoding
- - rollup
- - supports-color
-
- '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))':
- dependencies:
- '@babel/core': 7.29.0
- '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
- '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
- '@rolldown/pluginutils': 1.0.0-rc.13
- '@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vue: 3.5.32(typescript@6.0.2)
- transitivePeerDependencies:
- - supports-color
-
- '@vitejs/plugin-vue@6.0.5(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))':
- dependencies:
- '@rolldown/pluginutils': 1.0.0-rc.2
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vue: 3.5.32(typescript@6.0.2)
-
- '@vue-macros/common@3.1.2(vue@3.5.32(typescript@6.0.2))':
- dependencies:
- '@vue/compiler-sfc': 3.5.32
- ast-kit: 2.2.0
- local-pkg: 1.1.2
- magic-string-ast: 1.0.3
- unplugin-utils: 0.3.1
- optionalDependencies:
- vue: 3.5.32(typescript@6.0.2)
-
- '@vue/babel-helper-vue-transform-on@2.0.1': {}
-
- '@vue/babel-plugin-jsx@2.0.1(@babel/core@7.29.0)':
- dependencies:
- '@babel/helper-module-imports': 7.28.6
- '@babel/helper-plugin-utils': 7.28.6
- '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0)
- '@babel/template': 7.28.6
- '@babel/traverse': 7.29.0
- '@babel/types': 7.29.0
- '@vue/babel-helper-vue-transform-on': 2.0.1
- '@vue/babel-plugin-resolve-type': 2.0.1(@babel/core@7.29.0)
- '@vue/shared': 3.5.32
- optionalDependencies:
- '@babel/core': 7.29.0
- transitivePeerDependencies:
- - supports-color
-
- '@vue/babel-plugin-resolve-type@2.0.1(@babel/core@7.29.0)':
- dependencies:
- '@babel/code-frame': 7.29.0
- '@babel/core': 7.29.0
- '@babel/helper-module-imports': 7.28.6
- '@babel/helper-plugin-utils': 7.28.6
- '@babel/parser': 7.29.2
- '@vue/compiler-sfc': 3.5.32
- transitivePeerDependencies:
- - supports-color
-
- '@vue/compiler-core@3.5.32':
- dependencies:
- '@babel/parser': 7.29.2
- '@vue/shared': 3.5.32
- entities: 7.0.1
- estree-walker: 2.0.2
- source-map-js: 1.2.1
-
- '@vue/compiler-dom@3.5.32':
- dependencies:
- '@vue/compiler-core': 3.5.32
- '@vue/shared': 3.5.32
-
- '@vue/compiler-sfc@3.5.32':
- dependencies:
- '@babel/parser': 7.29.2
- '@vue/compiler-core': 3.5.32
- '@vue/compiler-dom': 3.5.32
- '@vue/compiler-ssr': 3.5.32
- '@vue/shared': 3.5.32
- estree-walker: 2.0.2
- magic-string: 0.30.21
- postcss: 8.5.8
- source-map-js: 1.2.1
-
- '@vue/compiler-ssr@3.5.32':
- dependencies:
- '@vue/compiler-dom': 3.5.32
- '@vue/shared': 3.5.32
-
- '@vue/devtools-api@7.7.9':
- dependencies:
- '@vue/devtools-kit': 7.7.9
-
- '@vue/devtools-api@8.1.1':
- dependencies:
- '@vue/devtools-kit': 8.1.1
-
- '@vue/devtools-core@8.1.1(vue@3.5.32(typescript@6.0.2))':
- dependencies:
- '@vue/devtools-kit': 8.1.1
- '@vue/devtools-shared': 8.1.1
- vue: 3.5.32(typescript@6.0.2)
-
- '@vue/devtools-kit@7.7.9':
- dependencies:
- '@vue/devtools-shared': 7.7.9
- birpc: 2.9.0
- hookable: 5.5.3
- mitt: 3.0.1
- perfect-debounce: 1.0.0
- speakingurl: 14.0.1
- superjson: 2.2.6
-
- '@vue/devtools-kit@8.1.1':
- dependencies:
- '@vue/devtools-shared': 8.1.1
- birpc: 2.9.0
- hookable: 5.5.3
- perfect-debounce: 2.1.0
-
- '@vue/devtools-shared@7.7.9':
- dependencies:
- rfdc: 1.4.1
-
- '@vue/devtools-shared@8.1.1': {}
-
- '@vue/reactivity@3.5.32':
- dependencies:
- '@vue/shared': 3.5.32
-
- '@vue/runtime-core@3.5.32':
- dependencies:
- '@vue/reactivity': 3.5.32
- '@vue/shared': 3.5.32
-
- '@vue/runtime-dom@3.5.32':
- dependencies:
- '@vue/reactivity': 3.5.32
- '@vue/runtime-core': 3.5.32
- '@vue/shared': 3.5.32
- csstype: 3.2.3
-
- '@vue/server-renderer@3.5.32(vue@3.5.32(typescript@6.0.2))':
- dependencies:
- '@vue/compiler-ssr': 3.5.32
- '@vue/shared': 3.5.32
- vue: 3.5.32(typescript@6.0.2)
-
- '@vue/shared@3.5.32': {}
-
- abbrev@3.0.1: {}
-
- abort-controller@3.0.0:
- dependencies:
- event-target-shim: 5.0.1
-
- acorn-import-attributes@1.9.5(acorn@8.16.0):
- dependencies:
- acorn: 8.16.0
-
- acorn-jsx@5.3.2(acorn@8.16.0):
- dependencies:
- acorn: 8.16.0
-
- acorn@8.16.0: {}
-
- agent-base@7.1.4: {}
-
- ajv@6.14.0:
- dependencies:
- fast-deep-equal: 3.1.3
- fast-json-stable-stringify: 2.1.0
- json-schema-traverse: 0.4.1
- uri-js: 4.4.1
-
- ansi-regex@5.0.1: {}
-
- ansi-regex@6.2.2: {}
-
- ansi-styles@4.3.0:
- dependencies:
- color-convert: 2.0.1
-
- ansi-styles@6.2.3: {}
-
- ansis@4.2.0: {}
-
- anymatch@3.1.3:
- dependencies:
- normalize-path: 3.0.0
- picomatch: 2.3.2
-
- archiver-utils@5.0.2:
- dependencies:
- glob: 10.5.0
- graceful-fs: 4.2.11
- is-stream: 2.0.1
- lazystream: 1.0.1
- lodash: 4.18.1
- normalize-path: 3.0.0
- readable-stream: 4.7.0
-
- archiver@7.0.1:
- dependencies:
- archiver-utils: 5.0.2
- async: 3.2.6
- buffer-crc32: 1.0.0
- readable-stream: 4.7.0
- readdir-glob: 1.1.3
- tar-stream: 3.1.8
- zip-stream: 6.0.1
- transitivePeerDependencies:
- - bare-abort-controller
- - bare-buffer
- - react-native-b4a
-
- are-docs-informative@0.0.2: {}
-
- argparse@2.0.1: {}
-
- ast-kit@2.2.0:
- dependencies:
- '@babel/parser': 7.29.2
- pathe: 2.0.3
-
- ast-walker-scope@0.8.3:
- dependencies:
- '@babel/parser': 7.29.2
- ast-kit: 2.2.0
-
- async-sema@3.1.1: {}
-
- async@3.2.6: {}
-
- autoprefixer@10.4.27(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- caniuse-lite: 1.0.30001784
- fraction.js: 5.3.4
- picocolors: 1.1.1
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- b4a@1.8.0: {}
-
- balanced-match@1.0.2: {}
-
- balanced-match@4.0.4: {}
-
- bare-events@2.8.2: {}
-
- bare-fs@4.6.0:
- dependencies:
- bare-events: 2.8.2
- bare-path: 3.0.0
- bare-stream: 2.12.0(bare-events@2.8.2)
- bare-url: 2.4.0
- fast-fifo: 1.3.2
- transitivePeerDependencies:
- - bare-abort-controller
- - react-native-b4a
-
- bare-os@3.8.7: {}
-
- bare-path@3.0.0:
- dependencies:
- bare-os: 3.8.7
-
- bare-stream@2.12.0(bare-events@2.8.2):
- dependencies:
- streamx: 2.25.0
- teex: 1.0.1
- optionalDependencies:
- bare-events: 2.8.2
- transitivePeerDependencies:
- - react-native-b4a
-
- bare-url@2.4.0:
- dependencies:
- bare-path: 3.0.0
-
- base64-js@1.5.1: {}
-
- baseline-browser-mapping@2.10.14: {}
-
- bindings@1.5.0:
- dependencies:
- file-uri-to-path: 1.0.0
-
- birpc@2.9.0: {}
-
- birpc@4.0.0: {}
-
- boolbase@1.0.0: {}
-
- brace-expansion@2.0.3:
- dependencies:
- balanced-match: 1.0.2
-
- brace-expansion@5.0.5:
- dependencies:
- balanced-match: 4.0.4
-
- braces@3.0.3:
- dependencies:
- fill-range: 7.1.1
-
- browserslist@4.28.2:
- dependencies:
- baseline-browser-mapping: 2.10.14
- caniuse-lite: 1.0.30001784
- electron-to-chromium: 1.5.331
- node-releases: 2.0.37
- update-browserslist-db: 1.2.3(browserslist@4.28.2)
-
- buffer-crc32@1.0.0: {}
-
- buffer-from@1.1.2: {}
-
- buffer@6.0.3:
- dependencies:
- base64-js: 1.5.1
- ieee754: 1.2.1
-
- builtin-modules@5.0.0: {}
-
- bundle-name@4.1.0:
- dependencies:
- run-applescript: 7.1.0
-
- bundle-require@5.1.0(esbuild@0.27.7):
- dependencies:
- esbuild: 0.27.7
- load-tsconfig: 0.2.5
-
- c12@3.3.4(magicast@0.5.2):
- dependencies:
- chokidar: 5.0.0
- confbox: 0.2.4
- defu: 6.1.6
- dotenv: 17.4.0
- exsolve: 1.0.8
- giget: 3.2.0
- jiti: 2.6.1
- ohash: 2.0.11
- pathe: 2.0.3
- perfect-debounce: 2.1.0
- pkg-types: 2.3.0
- rc9: 3.0.1
- optionalDependencies:
- magicast: 0.5.2
-
- cac@6.7.14: {}
-
- cac@7.0.0: {}
-
- caniuse-api@3.0.0:
- dependencies:
- browserslist: 4.28.2
- caniuse-lite: 1.0.30001784
- lodash.memoize: 4.1.2
- lodash.uniq: 4.5.0
-
- caniuse-lite@1.0.30001784: {}
-
- change-case@5.4.4: {}
-
- chokidar@4.0.3:
- dependencies:
- readdirp: 4.1.2
-
- chokidar@5.0.0:
- dependencies:
- readdirp: 5.0.0
-
- chownr@3.0.0: {}
-
- ci-info@4.4.0: {}
-
- citty@0.1.6:
- dependencies:
- consola: 3.4.2
-
- citty@0.2.2: {}
-
- clean-regexp@1.0.0:
- dependencies:
- escape-string-regexp: 1.0.5
-
- cliui@9.0.1:
- dependencies:
- string-width: 7.2.0
- strip-ansi: 7.2.0
- wrap-ansi: 9.0.2
-
- cluster-key-slot@1.1.2: {}
-
- color-convert@2.0.1:
- dependencies:
- color-name: 1.1.4
-
- color-name@1.1.4: {}
-
- commander@11.1.0: {}
-
- commander@2.20.3: {}
-
- comment-parser@1.4.6: {}
-
- commondir@1.0.1: {}
-
- compatx@0.2.0: {}
-
- compress-commons@6.0.2:
- dependencies:
- crc-32: 1.2.2
- crc32-stream: 6.0.0
- is-stream: 2.0.1
- normalize-path: 3.0.0
- readable-stream: 4.7.0
-
- confbox@0.1.8: {}
-
- confbox@0.2.4: {}
-
- consola@3.4.2: {}
-
- convert-source-map@2.0.0: {}
-
- cookie-es@1.2.3: {}
-
- cookie-es@2.0.1: {}
-
- cookie-es@3.1.1: {}
-
- copy-anything@4.0.5:
- dependencies:
- is-what: 5.5.0
-
- core-js-compat@3.49.0:
- dependencies:
- browserslist: 4.28.2
-
- core-util-is@1.0.3: {}
-
- crc-32@1.2.2: {}
-
- crc32-stream@6.0.0:
- dependencies:
- crc-32: 1.2.2
- readable-stream: 4.7.0
-
- croner@10.0.1: {}
-
- cross-spawn@7.0.6:
- dependencies:
- path-key: 3.1.1
- shebang-command: 2.0.0
- which: 2.0.2
-
- crossws@0.3.5:
- dependencies:
- uncrypto: 0.1.3
-
- crossws@0.4.4(srvx@0.11.15):
- optionalDependencies:
- srvx: 0.11.15
-
- css-declaration-sorter@7.3.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
-
- css-select@5.2.2:
- dependencies:
- boolbase: 1.0.0
- css-what: 6.2.2
- domhandler: 5.0.3
- domutils: 3.2.2
- nth-check: 2.1.1
-
- css-tree@2.2.1:
- dependencies:
- mdn-data: 2.0.28
- source-map-js: 1.2.1
-
- css-tree@3.2.1:
- dependencies:
- mdn-data: 2.27.1
- source-map-js: 1.2.1
-
- css-what@6.2.2: {}
-
- cssesc@3.0.0: {}
-
- cssnano-preset-default@7.0.12(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- css-declaration-sorter: 7.3.1(postcss@8.5.8)
- cssnano-utils: 5.0.1(postcss@8.5.8)
- postcss: 8.5.8
- postcss-calc: 10.1.1(postcss@8.5.8)
- postcss-colormin: 7.0.7(postcss@8.5.8)
- postcss-convert-values: 7.0.9(postcss@8.5.8)
- postcss-discard-comments: 7.0.6(postcss@8.5.8)
- postcss-discard-duplicates: 7.0.2(postcss@8.5.8)
- postcss-discard-empty: 7.0.1(postcss@8.5.8)
- postcss-discard-overridden: 7.0.1(postcss@8.5.8)
- postcss-merge-longhand: 7.0.5(postcss@8.5.8)
- postcss-merge-rules: 7.0.8(postcss@8.5.8)
- postcss-minify-font-values: 7.0.1(postcss@8.5.8)
- postcss-minify-gradients: 7.0.2(postcss@8.5.8)
- postcss-minify-params: 7.0.6(postcss@8.5.8)
- postcss-minify-selectors: 7.0.6(postcss@8.5.8)
- postcss-normalize-charset: 7.0.1(postcss@8.5.8)
- postcss-normalize-display-values: 7.0.1(postcss@8.5.8)
- postcss-normalize-positions: 7.0.1(postcss@8.5.8)
- postcss-normalize-repeat-style: 7.0.1(postcss@8.5.8)
- postcss-normalize-string: 7.0.1(postcss@8.5.8)
- postcss-normalize-timing-functions: 7.0.1(postcss@8.5.8)
- postcss-normalize-unicode: 7.0.6(postcss@8.5.8)
- postcss-normalize-url: 7.0.1(postcss@8.5.8)
- postcss-normalize-whitespace: 7.0.1(postcss@8.5.8)
- postcss-ordered-values: 7.0.2(postcss@8.5.8)
- postcss-reduce-initial: 7.0.6(postcss@8.5.8)
- postcss-reduce-transforms: 7.0.1(postcss@8.5.8)
- postcss-svgo: 7.1.1(postcss@8.5.8)
- postcss-unique-selectors: 7.0.5(postcss@8.5.8)
-
- cssnano-utils@5.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
-
- cssnano@7.1.4(postcss@8.5.8):
- dependencies:
- cssnano-preset-default: 7.0.12(postcss@8.5.8)
- lilconfig: 3.1.3
- postcss: 8.5.8
-
- csso@5.0.5:
- dependencies:
- css-tree: 2.2.1
-
- csstype@3.2.3: {}
-
- db0@0.3.4: {}
-
- debug@4.4.3:
- dependencies:
- ms: 2.1.3
-
- deep-is@0.1.4: {}
-
- deepmerge@4.3.1: {}
-
- default-browser-id@5.0.1: {}
-
- default-browser@5.5.0:
- dependencies:
- bundle-name: 4.1.0
- default-browser-id: 5.0.1
-
- define-lazy-prop@3.0.0: {}
-
- defu@6.1.6: {}
-
- denque@2.1.0: {}
-
- depd@2.0.0: {}
-
- destr@2.0.5: {}
-
- detect-libc@2.1.2: {}
-
- devalue@5.6.4: {}
-
- diff@8.0.4: {}
-
- dom-serializer@2.0.0:
- dependencies:
- domelementtype: 2.3.0
- domhandler: 5.0.3
- entities: 4.5.0
-
- domelementtype@2.3.0: {}
-
- domhandler@5.0.3:
- dependencies:
- domelementtype: 2.3.0
-
- domutils@3.2.2:
- dependencies:
- dom-serializer: 2.0.0
- domelementtype: 2.3.0
- domhandler: 5.0.3
-
- dot-prop@10.1.0:
- dependencies:
- type-fest: 5.5.0
-
- dotenv@17.4.0: {}
-
- duplexer@0.1.2: {}
-
- eastasianwidth@0.2.0: {}
-
- ee-first@1.1.1: {}
-
- electron-to-chromium@1.5.331: {}
-
- emoji-regex@10.6.0: {}
-
- emoji-regex@8.0.0: {}
-
- emoji-regex@9.2.2: {}
-
- encodeurl@2.0.0: {}
-
- enhanced-resolve@5.20.1:
- dependencies:
- graceful-fs: 4.2.11
- tapable: 2.3.2
-
- entities@4.5.0: {}
-
- entities@7.0.1: {}
-
- error-stack-parser-es@1.0.5: {}
-
- errx@0.1.0: {}
-
- es-module-lexer@2.0.0: {}
-
- esbuild@0.27.7:
- optionalDependencies:
- '@esbuild/aix-ppc64': 0.27.7
- '@esbuild/android-arm': 0.27.7
- '@esbuild/android-arm64': 0.27.7
- '@esbuild/android-x64': 0.27.7
- '@esbuild/darwin-arm64': 0.27.7
- '@esbuild/darwin-x64': 0.27.7
- '@esbuild/freebsd-arm64': 0.27.7
- '@esbuild/freebsd-x64': 0.27.7
- '@esbuild/linux-arm': 0.27.7
- '@esbuild/linux-arm64': 0.27.7
- '@esbuild/linux-ia32': 0.27.7
- '@esbuild/linux-loong64': 0.27.7
- '@esbuild/linux-mips64el': 0.27.7
- '@esbuild/linux-ppc64': 0.27.7
- '@esbuild/linux-riscv64': 0.27.7
- '@esbuild/linux-s390x': 0.27.7
- '@esbuild/linux-x64': 0.27.7
- '@esbuild/netbsd-arm64': 0.27.7
- '@esbuild/netbsd-x64': 0.27.7
- '@esbuild/openbsd-arm64': 0.27.7
- '@esbuild/openbsd-x64': 0.27.7
- '@esbuild/openharmony-arm64': 0.27.7
- '@esbuild/sunos-x64': 0.27.7
- '@esbuild/win32-arm64': 0.27.7
- '@esbuild/win32-ia32': 0.27.7
- '@esbuild/win32-x64': 0.27.7
-
- escalade@3.2.0: {}
-
- escape-html@1.0.3: {}
-
- escape-string-regexp@1.0.5: {}
-
- escape-string-regexp@4.0.0: {}
-
- escape-string-regexp@5.0.0: {}
-
- eslint-config-flat-gitignore@2.3.0(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- '@eslint/compat': 2.0.4(eslint@10.2.0(jiti@2.6.1))
- eslint: 10.2.0(jiti@2.6.1)
-
- eslint-flat-config-utils@3.1.0:
- dependencies:
- '@eslint/config-helpers': 0.5.4
- pathe: 2.0.3
-
- eslint-import-context@0.1.9(unrs-resolver@1.11.1):
- dependencies:
- get-tsconfig: 4.13.7
- stable-hash-x: 0.2.0
- optionalDependencies:
- unrs-resolver: 1.11.1
-
- eslint-merge-processors@2.0.0(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- eslint: 10.2.0(jiti@2.6.1)
-
- eslint-plugin-import-lite@0.5.2(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- eslint: 10.2.0(jiti@2.6.1)
-
- eslint-plugin-import-x@4.16.2(@typescript-eslint/utils@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- '@package-json/types': 0.0.12
- '@typescript-eslint/types': 8.58.0
- comment-parser: 1.4.6
- debug: 4.4.3
- eslint: 10.2.0(jiti@2.6.1)
- eslint-import-context: 0.1.9(unrs-resolver@1.11.1)
- is-glob: 4.0.3
- minimatch: 10.2.5
- semver: 7.7.4
- stable-hash-x: 0.2.0
- unrs-resolver: 1.11.1
- optionalDependencies:
- '@typescript-eslint/utils': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
- transitivePeerDependencies:
- - supports-color
-
- eslint-plugin-jsdoc@62.9.0(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- '@es-joy/jsdoccomment': 0.86.0
- '@es-joy/resolve.exports': 1.2.0
- are-docs-informative: 0.0.2
- comment-parser: 1.4.6
- debug: 4.4.3
- escape-string-regexp: 4.0.0
- eslint: 10.2.0(jiti@2.6.1)
- espree: 11.2.0
- esquery: 1.7.0
- html-entities: 2.6.0
- object-deep-merge: 2.0.0
- parse-imports-exports: 0.2.4
- semver: 7.7.4
- spdx-expression-parse: 4.0.0
- to-valid-identifier: 1.0.0
- transitivePeerDependencies:
- - supports-color
-
- eslint-plugin-regexp@3.1.0(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1))
- '@eslint-community/regexpp': 4.12.2
- comment-parser: 1.4.6
- eslint: 10.2.0(jiti@2.6.1)
- jsdoc-type-pratt-parser: 7.2.0
- refa: 0.12.1
- regexp-ast-analysis: 0.7.1
- scslre: 0.3.0
-
- eslint-plugin-unicorn@63.0.0(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- '@babel/helper-validator-identifier': 7.28.5
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1))
- change-case: 5.4.4
- ci-info: 4.4.0
- clean-regexp: 1.0.0
- core-js-compat: 3.49.0
- eslint: 10.2.0(jiti@2.6.1)
- find-up-simple: 1.0.1
- globals: 16.5.0
- indent-string: 5.0.0
- is-builtin-module: 5.0.0
- jsesc: 3.1.0
- pluralize: 8.0.0
- regexp-tree: 0.1.27
- regjsparser: 0.13.0
- semver: 7.7.4
- strip-indent: 4.1.1
-
- eslint-plugin-vue@10.8.0(@stylistic/eslint-plugin@5.10.0(eslint@10.2.0(jiti@2.6.1)))(@typescript-eslint/parser@8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2))(eslint@10.2.0(jiti@2.6.1))(vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1))):
- dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1))
- eslint: 10.2.0(jiti@2.6.1)
- natural-compare: 1.4.0
- nth-check: 2.1.1
- postcss-selector-parser: 7.1.1
- semver: 7.7.4
- vue-eslint-parser: 10.4.0(eslint@10.2.0(jiti@2.6.1))
- xml-name-validator: 4.0.0
- optionalDependencies:
- '@stylistic/eslint-plugin': 5.10.0(eslint@10.2.0(jiti@2.6.1))
- '@typescript-eslint/parser': 8.58.0(eslint@10.2.0(jiti@2.6.1))(typescript@6.0.2)
-
- eslint-processor-vue-blocks@2.0.0(@vue/compiler-sfc@3.5.32)(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- '@vue/compiler-sfc': 3.5.32
- eslint: 10.2.0(jiti@2.6.1)
-
- eslint-scope@9.1.2:
- dependencies:
- '@types/esrecurse': 4.3.1
- '@types/estree': 1.0.8
- esrecurse: 4.3.0
- estraverse: 5.3.0
-
- eslint-typegen@2.3.1(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- eslint: 10.2.0(jiti@2.6.1)
- json-schema-to-typescript-lite: 15.0.0
- ohash: 2.0.11
-
- eslint-visitor-keys@3.4.3: {}
-
- eslint-visitor-keys@4.2.1: {}
-
- eslint-visitor-keys@5.0.1: {}
-
- eslint@10.2.0(jiti@2.6.1):
- dependencies:
- '@eslint-community/eslint-utils': 4.9.1(eslint@10.2.0(jiti@2.6.1))
- '@eslint-community/regexpp': 4.12.2
- '@eslint/config-array': 0.23.4
- '@eslint/config-helpers': 0.5.4
- '@eslint/core': 1.2.0
- '@eslint/plugin-kit': 0.7.0
- '@humanfs/node': 0.16.7
- '@humanwhocodes/module-importer': 1.0.1
- '@humanwhocodes/retry': 0.4.3
- '@types/estree': 1.0.8
- ajv: 6.14.0
- cross-spawn: 7.0.6
- debug: 4.4.3
- escape-string-regexp: 4.0.0
- eslint-scope: 9.1.2
- eslint-visitor-keys: 5.0.1
- espree: 11.2.0
- esquery: 1.7.0
- esutils: 2.0.3
- fast-deep-equal: 3.1.3
- file-entry-cache: 8.0.0
- find-up: 5.0.0
- glob-parent: 6.0.2
- ignore: 5.3.2
- imurmurhash: 0.1.4
- is-glob: 4.0.3
- json-stable-stringify-without-jsonify: 1.0.1
- minimatch: 10.2.5
- natural-compare: 1.4.0
- optionator: 0.9.4
- optionalDependencies:
- jiti: 2.6.1
- transitivePeerDependencies:
- - supports-color
-
- espree@10.4.0:
- dependencies:
- acorn: 8.16.0
- acorn-jsx: 5.3.2(acorn@8.16.0)
- eslint-visitor-keys: 4.2.1
-
- espree@11.2.0:
- dependencies:
- acorn: 8.16.0
- acorn-jsx: 5.3.2(acorn@8.16.0)
- eslint-visitor-keys: 5.0.1
-
- esquery@1.7.0:
- dependencies:
- estraverse: 5.3.0
-
- esrecurse@4.3.0:
- dependencies:
- estraverse: 5.3.0
-
- estraverse@5.3.0: {}
-
- estree-walker@2.0.2: {}
-
- estree-walker@3.0.3:
- dependencies:
- '@types/estree': 1.0.8
-
- esutils@2.0.3: {}
-
- etag@1.8.1: {}
-
- event-target-shim@5.0.1: {}
-
- events-universal@1.0.1:
- dependencies:
- bare-events: 2.8.2
- transitivePeerDependencies:
- - bare-abort-controller
-
- events@3.3.0: {}
-
- execa@8.0.1:
- dependencies:
- cross-spawn: 7.0.6
- get-stream: 8.0.1
- human-signals: 5.0.0
- is-stream: 3.0.0
- merge-stream: 2.0.0
- npm-run-path: 5.3.0
- onetime: 6.0.0
- signal-exit: 4.1.0
- strip-final-newline: 3.0.0
-
- exsolve@1.0.8: {}
-
- fast-deep-equal@3.1.3: {}
-
- fast-fifo@1.3.2: {}
-
- fast-glob@3.3.3:
- dependencies:
- '@nodelib/fs.stat': 2.0.5
- '@nodelib/fs.walk': 1.2.8
- glob-parent: 5.1.2
- merge2: 1.4.1
- micromatch: 4.0.8
-
- fast-json-stable-stringify@2.1.0: {}
-
- fast-levenshtein@2.0.6: {}
-
- fast-npm-meta@1.4.2: {}
-
- fast-string-truncated-width@1.2.1: {}
-
- fast-string-width@1.1.0:
- dependencies:
- fast-string-truncated-width: 1.2.1
-
- fast-wrap-ansi@0.1.6:
- dependencies:
- fast-string-width: 1.1.0
-
- fastq@1.20.1:
- dependencies:
- reusify: 1.1.0
-
- fdir@6.5.0(picomatch@4.0.4):
- optionalDependencies:
- picomatch: 4.0.4
-
- file-entry-cache@8.0.0:
- dependencies:
- flat-cache: 4.0.1
-
- file-uri-to-path@1.0.0: {}
-
- fill-range@7.1.1:
- dependencies:
- to-regex-range: 5.0.1
-
- find-up-simple@1.0.1: {}
-
- find-up@5.0.0:
- dependencies:
- locate-path: 6.0.0
- path-exists: 4.0.0
-
- find-up@8.0.0:
- dependencies:
- locate-path: 8.0.0
- unicorn-magic: 0.3.0
-
- flat-cache@4.0.1:
- dependencies:
- flatted: 3.4.2
- keyv: 4.5.4
-
- flatted@3.4.2: {}
-
- foreground-child@3.3.1:
- dependencies:
- cross-spawn: 7.0.6
- signal-exit: 4.1.0
-
- fraction.js@5.3.4: {}
-
- fresh@2.0.0: {}
-
- fsevents@2.3.3:
- optional: true
-
- function-bind@1.1.2: {}
-
- fuse.js@7.2.0: {}
-
- fzf@0.5.2: {}
-
- gensync@1.0.0-beta.2: {}
-
- get-caller-file@2.0.5: {}
-
- get-east-asian-width@1.5.0: {}
-
- get-port-please@3.2.0: {}
-
- get-stream@8.0.1: {}
-
- get-tsconfig@4.13.7:
- dependencies:
- resolve-pkg-maps: 1.0.0
-
- giget@3.2.0: {}
-
- glob-parent@5.1.2:
- dependencies:
- is-glob: 4.0.3
-
- glob-parent@6.0.2:
- dependencies:
- is-glob: 4.0.3
-
- glob@10.5.0:
- dependencies:
- foreground-child: 3.3.1
- jackspeak: 3.4.3
- minimatch: 9.0.9
- minipass: 7.1.3
- package-json-from-dist: 1.0.1
- path-scurry: 1.11.1
-
- glob@13.0.6:
- dependencies:
- minimatch: 10.2.5
- minipass: 7.1.3
- path-scurry: 2.0.2
-
- global-directory@4.0.1:
- dependencies:
- ini: 4.1.1
-
- globals@16.5.0: {}
-
- globals@17.4.0: {}
-
- globby@16.2.0:
- dependencies:
- '@sindresorhus/merge-streams': 4.0.0
- fast-glob: 3.3.3
- ignore: 7.0.5
- is-path-inside: 4.0.0
- slash: 5.1.0
- unicorn-magic: 0.4.0
-
- graceful-fs@4.2.11: {}
-
- gzip-size@7.0.0:
- dependencies:
- duplexer: 0.1.2
-
- h3@1.15.11:
- dependencies:
- cookie-es: 1.2.3
- crossws: 0.3.5
- defu: 6.1.6
- destr: 2.0.5
- iron-webcrypto: 1.2.1
- node-mock-http: 1.0.4
- radix3: 1.1.2
- ufo: 1.6.3
- uncrypto: 0.1.3
-
- hasown@2.0.2:
- dependencies:
- function-bind: 1.1.2
-
- hookable@5.5.3: {}
-
- hookable@6.1.0: {}
-
- html-entities@2.6.0: {}
-
- http-errors@2.0.1:
- dependencies:
- depd: 2.0.0
- inherits: 2.0.4
- setprototypeof: 1.2.0
- statuses: 2.0.2
- toidentifier: 1.0.1
-
- http-shutdown@1.2.2: {}
-
- https-proxy-agent@7.0.6:
- dependencies:
- agent-base: 7.1.4
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- httpxy@0.5.0: {}
-
- human-signals@5.0.0: {}
-
- ieee754@1.2.1: {}
-
- ignore@5.3.2: {}
-
- ignore@7.0.5: {}
-
- image-meta@0.2.2: {}
-
- impound@1.1.5:
- dependencies:
- '@jridgewell/trace-mapping': 0.3.31
- es-module-lexer: 2.0.0
- pathe: 2.0.3
- unplugin: 3.0.0
- unplugin-utils: 0.3.1
-
- imurmurhash@0.1.4: {}
-
- indent-string@5.0.0: {}
-
- inherits@2.0.4: {}
-
- ini@4.1.1: {}
-
- ioredis@5.10.1:
- dependencies:
- '@ioredis/commands': 1.5.1
- cluster-key-slot: 1.1.2
- debug: 4.4.3
- denque: 2.1.0
- lodash.defaults: 4.2.0
- lodash.isarguments: 3.1.0
- redis-errors: 1.2.0
- redis-parser: 3.0.0
- standard-as-callback: 2.1.0
- transitivePeerDependencies:
- - supports-color
-
- iron-webcrypto@1.2.1: {}
-
- is-builtin-module@5.0.0:
- dependencies:
- builtin-modules: 5.0.0
-
- is-core-module@2.16.1:
- dependencies:
- hasown: 2.0.2
-
- is-docker@3.0.0: {}
-
- is-extglob@2.1.1: {}
-
- is-fullwidth-code-point@3.0.0: {}
-
- is-glob@4.0.3:
- dependencies:
- is-extglob: 2.1.1
-
- is-in-ssh@1.0.0: {}
-
- is-inside-container@1.0.0:
- dependencies:
- is-docker: 3.0.0
-
- is-installed-globally@1.0.0:
- dependencies:
- global-directory: 4.0.1
- is-path-inside: 4.0.0
-
- is-module@1.0.0: {}
-
- is-number@7.0.0: {}
-
- is-path-inside@4.0.0: {}
-
- is-reference@1.2.1:
- dependencies:
- '@types/estree': 1.0.8
-
- is-stream@2.0.1: {}
-
- is-stream@3.0.0: {}
-
- is-what@5.5.0: {}
-
- is-wsl@3.1.1:
- dependencies:
- is-inside-container: 1.0.0
-
- isarray@1.0.0: {}
-
- isexe@2.0.0: {}
-
- isexe@4.0.0: {}
-
- jackspeak@3.4.3:
- dependencies:
- '@isaacs/cliui': 8.0.2
- optionalDependencies:
- '@pkgjs/parseargs': 0.11.0
-
- jiti@2.6.1: {}
-
- js-tokens@4.0.0: {}
-
- js-tokens@9.0.1: {}
-
- js-yaml@4.1.1:
- dependencies:
- argparse: 2.0.1
-
- jsdoc-type-pratt-parser@7.2.0: {}
-
- jsesc@3.1.0: {}
-
- json-buffer@3.0.1: {}
-
- json-schema-to-typescript-lite@15.0.0:
- dependencies:
- '@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15)
- '@types/json-schema': 7.0.15
-
- json-schema-traverse@0.4.1: {}
-
- json-stable-stringify-without-jsonify@1.0.1: {}
-
- json5@2.2.3: {}
-
- keyv@4.5.4:
- dependencies:
- json-buffer: 3.0.1
-
- kleur@4.1.5: {}
-
- klona@2.0.6: {}
-
- knitwork@1.3.0: {}
-
- launch-editor@2.13.2:
- dependencies:
- picocolors: 1.1.1
- shell-quote: 1.8.3
-
- lazystream@1.0.1:
- dependencies:
- readable-stream: 2.3.8
-
- levn@0.4.1:
- dependencies:
- prelude-ls: 1.2.1
- type-check: 0.4.0
-
- lightningcss-android-arm64@1.32.0:
- optional: true
-
- lightningcss-darwin-arm64@1.32.0:
- optional: true
-
- lightningcss-darwin-x64@1.32.0:
- optional: true
-
- lightningcss-freebsd-x64@1.32.0:
- optional: true
-
- lightningcss-linux-arm-gnueabihf@1.32.0:
- optional: true
-
- lightningcss-linux-arm64-gnu@1.32.0:
- optional: true
-
- lightningcss-linux-arm64-musl@1.32.0:
- optional: true
-
- lightningcss-linux-x64-gnu@1.32.0:
- optional: true
-
- lightningcss-linux-x64-musl@1.32.0:
- optional: true
-
- lightningcss-win32-arm64-msvc@1.32.0:
- optional: true
-
- lightningcss-win32-x64-msvc@1.32.0:
- optional: true
-
- lightningcss@1.32.0:
- dependencies:
- detect-libc: 2.1.2
- optionalDependencies:
- lightningcss-android-arm64: 1.32.0
- lightningcss-darwin-arm64: 1.32.0
- lightningcss-darwin-x64: 1.32.0
- lightningcss-freebsd-x64: 1.32.0
- lightningcss-linux-arm-gnueabihf: 1.32.0
- lightningcss-linux-arm64-gnu: 1.32.0
- lightningcss-linux-arm64-musl: 1.32.0
- lightningcss-linux-x64-gnu: 1.32.0
- lightningcss-linux-x64-musl: 1.32.0
- lightningcss-win32-arm64-msvc: 1.32.0
- lightningcss-win32-x64-msvc: 1.32.0
-
- lilconfig@3.1.3: {}
-
- listhen@1.9.1(srvx@0.11.15):
- dependencies:
- '@parcel/watcher': 2.5.6
- '@parcel/watcher-wasm': 2.5.6
- citty: 0.2.2
- consola: 3.4.2
- crossws: 0.4.4(srvx@0.11.15)
- defu: 6.1.6
- get-port-please: 3.2.0
- h3: 1.15.11
- http-shutdown: 1.2.2
- jiti: 2.6.1
- mlly: 1.8.2
- node-forge: 1.4.0
- pathe: 2.0.3
- std-env: 4.0.0
- tinyclip: 0.1.12
- ufo: 1.6.3
- untun: 0.1.3
- uqr: 0.1.3
- transitivePeerDependencies:
- - srvx
-
- load-tsconfig@0.2.5: {}
-
- local-pkg@1.1.2:
- dependencies:
- mlly: 1.8.2
- pkg-types: 2.3.0
- quansync: 0.2.11
-
- locate-path@6.0.0:
- dependencies:
- p-locate: 5.0.0
-
- locate-path@8.0.0:
- dependencies:
- p-locate: 6.0.0
-
- lodash.defaults@4.2.0: {}
-
- lodash.isarguments@3.1.0: {}
-
- lodash.memoize@4.1.2: {}
-
- lodash.uniq@4.5.0: {}
-
- lodash@4.18.1: {}
-
- lru-cache@10.4.3: {}
-
- lru-cache@11.2.7: {}
-
- lru-cache@5.1.1:
- dependencies:
- yallist: 3.1.1
-
- magic-regexp@0.10.0:
- dependencies:
- estree-walker: 3.0.3
- magic-string: 0.30.21
- mlly: 1.8.2
- regexp-tree: 0.1.27
- type-level-regexp: 0.1.17
- ufo: 1.6.3
- unplugin: 2.3.11
-
- magic-string-ast@1.0.3:
- dependencies:
- magic-string: 0.30.21
-
- magic-string@0.30.21:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
-
- magicast@0.5.2:
- dependencies:
- '@babel/parser': 7.29.2
- '@babel/types': 7.29.0
- source-map-js: 1.2.1
-
- mdn-data@2.0.28: {}
-
- mdn-data@2.27.1: {}
-
- merge-stream@2.0.0: {}
-
- merge2@1.4.1: {}
-
- micromatch@4.0.8:
- dependencies:
- braces: 3.0.3
- picomatch: 2.3.2
-
- mime-db@1.54.0: {}
-
- mime-types@3.0.2:
- dependencies:
- mime-db: 1.54.0
-
- mime@4.1.0: {}
-
- mimic-fn@4.0.0: {}
-
- minimatch@10.2.5:
- dependencies:
- brace-expansion: 5.0.5
-
- minimatch@5.1.9:
- dependencies:
- brace-expansion: 2.0.3
-
- minimatch@9.0.9:
- dependencies:
- brace-expansion: 2.0.3
-
- minipass@7.1.3: {}
-
- minizlib@3.1.0:
- dependencies:
- minipass: 7.1.3
-
- mitt@3.0.1: {}
-
- mlly@1.8.2:
- dependencies:
- acorn: 8.16.0
- pathe: 2.0.3
- pkg-types: 1.3.1
- ufo: 1.6.3
-
- mocked-exports@0.1.1: {}
-
- mrmime@2.0.1: {}
-
- ms@2.1.3: {}
-
- muggle-string@0.4.1: {}
-
- nanoid@3.3.11: {}
-
- nanotar@0.3.0: {}
-
- napi-postinstall@0.3.4: {}
-
- natural-compare@1.4.0: {}
-
- nitropack@2.13.3(srvx@0.11.15):
- dependencies:
- '@cloudflare/kv-asset-handler': 0.4.2
- '@rollup/plugin-alias': 6.0.0(rollup@4.60.1)
- '@rollup/plugin-commonjs': 29.0.2(rollup@4.60.1)
- '@rollup/plugin-inject': 5.0.5(rollup@4.60.1)
- '@rollup/plugin-json': 6.1.0(rollup@4.60.1)
- '@rollup/plugin-node-resolve': 16.0.3(rollup@4.60.1)
- '@rollup/plugin-replace': 6.0.3(rollup@4.60.1)
- '@rollup/plugin-terser': 1.0.0(rollup@4.60.1)
- '@vercel/nft': 1.5.0(rollup@4.60.1)
- archiver: 7.0.1
- c12: 3.3.4(magicast@0.5.2)
- chokidar: 5.0.0
- citty: 0.2.2
- compatx: 0.2.0
- confbox: 0.2.4
- consola: 3.4.2
- cookie-es: 2.0.1
- croner: 10.0.1
- crossws: 0.3.5
- db0: 0.3.4
- defu: 6.1.6
- destr: 2.0.5
- dot-prop: 10.1.0
- esbuild: 0.27.7
- escape-string-regexp: 5.0.0
- etag: 1.8.1
- exsolve: 1.0.8
- globby: 16.2.0
- gzip-size: 7.0.0
- h3: 1.15.11
- hookable: 5.5.3
- httpxy: 0.5.0
- ioredis: 5.10.1
- jiti: 2.6.1
- klona: 2.0.6
- knitwork: 1.3.0
- listhen: 1.9.1(srvx@0.11.15)
- magic-string: 0.30.21
- magicast: 0.5.2
- mime: 4.1.0
- mlly: 1.8.2
- node-fetch-native: 1.6.7
- node-mock-http: 1.0.4
- ofetch: 1.5.1
- ohash: 2.0.11
- pathe: 2.0.3
- perfect-debounce: 2.1.0
- pkg-types: 2.3.0
- pretty-bytes: 7.1.0
- radix3: 1.1.2
- rollup: 4.60.1
- rollup-plugin-visualizer: 7.0.1(rollup@4.60.1)
- scule: 1.3.0
- semver: 7.7.4
- serve-placeholder: 2.0.2
- serve-static: 2.2.1
- source-map: 0.7.6
- std-env: 4.0.0
- ufo: 1.6.3
- ultrahtml: 1.6.0
- uncrypto: 0.1.3
- unctx: 2.5.0
- unenv: 2.0.0-rc.24
- unimport: 6.0.2
- unplugin-utils: 0.3.1
- unstorage: 1.17.5(db0@0.3.4)(ioredis@5.10.1)
- untyped: 2.0.0
- unwasm: 0.5.3
- youch: 4.1.1
- youch-core: 0.3.3
- transitivePeerDependencies:
- - '@azure/app-configuration'
- - '@azure/cosmos'
- - '@azure/data-tables'
- - '@azure/identity'
- - '@azure/keyvault-secrets'
- - '@azure/storage-blob'
- - '@capacitor/preferences'
- - '@deno/kv'
- - '@electric-sql/pglite'
- - '@libsql/client'
- - '@netlify/blobs'
- - '@planetscale/database'
- - '@upstash/redis'
- - '@vercel/blob'
- - '@vercel/functions'
- - '@vercel/kv'
- - aws4fetch
- - bare-abort-controller
- - bare-buffer
- - better-sqlite3
- - drizzle-orm
- - encoding
- - idb-keyval
- - mysql2
- - react-native-b4a
- - rolldown
- - sqlite3
- - srvx
- - supports-color
- - uploadthing
-
- node-addon-api@7.1.1: {}
-
- node-fetch-native@1.6.7: {}
-
- node-fetch@2.7.0:
- dependencies:
- whatwg-url: 5.0.0
-
- node-forge@1.4.0: {}
-
- node-gyp-build@4.8.4: {}
-
- node-mock-http@1.0.4: {}
-
- node-releases@2.0.37: {}
-
- nopt@8.1.0:
- dependencies:
- abbrev: 3.0.1
-
- normalize-path@3.0.0: {}
-
- npm-run-path@5.3.0:
- dependencies:
- path-key: 4.0.0
-
- npm-run-path@6.0.0:
- dependencies:
- path-key: 4.0.0
- unicorn-magic: 0.3.0
-
- nth-check@2.1.1:
- dependencies:
- boolbase: 1.0.0
-
- nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3):
- dependencies:
- '@dxup/nuxt': 0.4.0(magicast@0.5.2)(typescript@6.0.2)
- '@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)
- '@nuxt/devtools': 3.2.4(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2))
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(srvx@0.11.15)(typescript@6.0.2)
- '@nuxt/schema': 4.4.2
- '@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))
- '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(eslint@10.2.0(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)(@parcel/watcher@2.5.6)(@vue/compiler-sfc@3.5.32)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.0(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(srvx@0.11.15)(terser@5.46.1)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(rollup-plugin-visualizer@7.0.1(rollup@4.60.1))(rollup@4.60.1)(terser@5.46.1)(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2))(yaml@2.8.3)
- '@unhead/vue': 2.1.12(vue@3.5.32(typescript@6.0.2))
- '@vue/shared': 3.5.32
- c12: 3.3.4(magicast@0.5.2)
- chokidar: 5.0.0
- compatx: 0.2.0
- consola: 3.4.2
- cookie-es: 2.0.1
- defu: 6.1.6
- devalue: 5.6.4
- errx: 0.1.0
- escape-string-regexp: 5.0.0
- exsolve: 1.0.8
- hookable: 6.1.0
- ignore: 7.0.5
- impound: 1.1.5
- jiti: 2.6.1
- klona: 2.0.6
- knitwork: 1.3.0
- magic-string: 0.30.21
- mlly: 1.8.2
- nanotar: 0.3.0
- nypm: 0.6.5
- ofetch: 1.5.1
- ohash: 2.0.11
- on-change: 6.0.2
- oxc-minify: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- oxc-transform: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- oxc-walker: 0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2))
- pathe: 2.0.3
- perfect-debounce: 2.1.0
- picomatch: 4.0.4
- pkg-types: 2.3.0
- rou3: 0.8.1
- scule: 1.3.0
- semver: 7.7.4
- std-env: 4.0.0
- tinyglobby: 0.2.15
- ufo: 1.6.3
- ultrahtml: 1.6.0
- uncrypto: 0.1.3
- unctx: 2.5.0
- unimport: 6.0.2
- unplugin: 3.0.0
- unrouting: 0.1.7
- untyped: 2.0.0
- vue: 3.5.32(typescript@6.0.2)
- vue-router: 5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2))
- optionalDependencies:
- '@parcel/watcher': 2.5.6
- transitivePeerDependencies:
- - '@azure/app-configuration'
- - '@azure/cosmos'
- - '@azure/data-tables'
- - '@azure/identity'
- - '@azure/keyvault-secrets'
- - '@azure/storage-blob'
- - '@babel/core'
- - '@babel/plugin-proposal-decorators'
- - '@babel/plugin-syntax-jsx'
- - '@biomejs/biome'
- - '@capacitor/preferences'
- - '@deno/kv'
- - '@electric-sql/pglite'
- - '@emnapi/core'
- - '@emnapi/runtime'
- - '@libsql/client'
- - '@netlify/blobs'
- - '@pinia/colada'
- - '@planetscale/database'
- - '@rollup/plugin-babel'
- - '@upstash/redis'
- - '@vercel/blob'
- - '@vercel/functions'
- - '@vercel/kv'
- - '@vitejs/devtools'
- - '@vue/compiler-sfc'
- - aws4fetch
- - bare-abort-controller
- - bare-buffer
- - better-sqlite3
- - bufferutil
- - cac
- - commander
- - db0
- - drizzle-orm
- - encoding
- - eslint
- - idb-keyval
- - ioredis
- - less
- - lightningcss
- - magicast
- - meow
- - mysql2
- - optionator
- - oxlint
- - pinia
- - react-native-b4a
- - rolldown
- - rollup
- - rollup-plugin-visualizer
- - sass
- - sass-embedded
- - sqlite3
- - srvx
- - stylelint
- - stylus
- - sugarss
- - supports-color
- - terser
- - tsx
- - typescript
- - uploadthing
- - utf-8-validate
- - vite
- - vls
- - vti
- - vue-tsc
- - xml2js
- - yaml
-
- nypm@0.6.5:
- dependencies:
- citty: 0.2.2
- pathe: 2.0.3
- tinyexec: 1.0.4
-
- object-deep-merge@2.0.0: {}
-
- obug@2.1.1: {}
-
- ofetch@1.5.1:
- dependencies:
- destr: 2.0.5
- node-fetch-native: 1.6.7
- ufo: 1.6.3
-
- ofetch@2.0.0-alpha.3: {}
-
- ohash@2.0.11: {}
-
- on-change@6.0.2: {}
-
- on-finished@2.4.1:
- dependencies:
- ee-first: 1.1.1
-
- onetime@6.0.0:
- dependencies:
- mimic-fn: 4.0.0
-
- open@10.2.0:
- dependencies:
- default-browser: 5.5.0
- define-lazy-prop: 3.0.0
- is-inside-container: 1.0.0
- wsl-utils: 0.1.0
-
- open@11.0.0:
- dependencies:
- default-browser: 5.5.0
- define-lazy-prop: 3.0.0
- is-in-ssh: 1.0.0
- is-inside-container: 1.0.0
- powershell-utils: 0.1.0
- wsl-utils: 0.3.1
-
- optionator@0.9.4:
- dependencies:
- deep-is: 0.1.4
- fast-levenshtein: 2.0.6
- levn: 0.4.1
- prelude-ls: 1.2.1
- type-check: 0.4.0
- word-wrap: 1.2.5
-
- oxc-minify@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2):
- optionalDependencies:
- '@oxc-minify/binding-android-arm-eabi': 0.117.0
- '@oxc-minify/binding-android-arm64': 0.117.0
- '@oxc-minify/binding-darwin-arm64': 0.117.0
- '@oxc-minify/binding-darwin-x64': 0.117.0
- '@oxc-minify/binding-freebsd-x64': 0.117.0
- '@oxc-minify/binding-linux-arm-gnueabihf': 0.117.0
- '@oxc-minify/binding-linux-arm-musleabihf': 0.117.0
- '@oxc-minify/binding-linux-arm64-gnu': 0.117.0
- '@oxc-minify/binding-linux-arm64-musl': 0.117.0
- '@oxc-minify/binding-linux-ppc64-gnu': 0.117.0
- '@oxc-minify/binding-linux-riscv64-gnu': 0.117.0
- '@oxc-minify/binding-linux-riscv64-musl': 0.117.0
- '@oxc-minify/binding-linux-s390x-gnu': 0.117.0
- '@oxc-minify/binding-linux-x64-gnu': 0.117.0
- '@oxc-minify/binding-linux-x64-musl': 0.117.0
- '@oxc-minify/binding-openharmony-arm64': 0.117.0
- '@oxc-minify/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- '@oxc-minify/binding-win32-arm64-msvc': 0.117.0
- '@oxc-minify/binding-win32-ia32-msvc': 0.117.0
- '@oxc-minify/binding-win32-x64-msvc': 0.117.0
- transitivePeerDependencies:
- - '@emnapi/core'
- - '@emnapi/runtime'
-
- oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2):
- dependencies:
- '@oxc-project/types': 0.117.0
- optionalDependencies:
- '@oxc-parser/binding-android-arm-eabi': 0.117.0
- '@oxc-parser/binding-android-arm64': 0.117.0
- '@oxc-parser/binding-darwin-arm64': 0.117.0
- '@oxc-parser/binding-darwin-x64': 0.117.0
- '@oxc-parser/binding-freebsd-x64': 0.117.0
- '@oxc-parser/binding-linux-arm-gnueabihf': 0.117.0
- '@oxc-parser/binding-linux-arm-musleabihf': 0.117.0
- '@oxc-parser/binding-linux-arm64-gnu': 0.117.0
- '@oxc-parser/binding-linux-arm64-musl': 0.117.0
- '@oxc-parser/binding-linux-ppc64-gnu': 0.117.0
- '@oxc-parser/binding-linux-riscv64-gnu': 0.117.0
- '@oxc-parser/binding-linux-riscv64-musl': 0.117.0
- '@oxc-parser/binding-linux-s390x-gnu': 0.117.0
- '@oxc-parser/binding-linux-x64-gnu': 0.117.0
- '@oxc-parser/binding-linux-x64-musl': 0.117.0
- '@oxc-parser/binding-openharmony-arm64': 0.117.0
- '@oxc-parser/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- '@oxc-parser/binding-win32-arm64-msvc': 0.117.0
- '@oxc-parser/binding-win32-ia32-msvc': 0.117.0
- '@oxc-parser/binding-win32-x64-msvc': 0.117.0
- transitivePeerDependencies:
- - '@emnapi/core'
- - '@emnapi/runtime'
-
- oxc-transform@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2):
- optionalDependencies:
- '@oxc-transform/binding-android-arm-eabi': 0.117.0
- '@oxc-transform/binding-android-arm64': 0.117.0
- '@oxc-transform/binding-darwin-arm64': 0.117.0
- '@oxc-transform/binding-darwin-x64': 0.117.0
- '@oxc-transform/binding-freebsd-x64': 0.117.0
- '@oxc-transform/binding-linux-arm-gnueabihf': 0.117.0
- '@oxc-transform/binding-linux-arm-musleabihf': 0.117.0
- '@oxc-transform/binding-linux-arm64-gnu': 0.117.0
- '@oxc-transform/binding-linux-arm64-musl': 0.117.0
- '@oxc-transform/binding-linux-ppc64-gnu': 0.117.0
- '@oxc-transform/binding-linux-riscv64-gnu': 0.117.0
- '@oxc-transform/binding-linux-riscv64-musl': 0.117.0
- '@oxc-transform/binding-linux-s390x-gnu': 0.117.0
- '@oxc-transform/binding-linux-x64-gnu': 0.117.0
- '@oxc-transform/binding-linux-x64-musl': 0.117.0
- '@oxc-transform/binding-openharmony-arm64': 0.117.0
- '@oxc-transform/binding-wasm32-wasi': 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- '@oxc-transform/binding-win32-arm64-msvc': 0.117.0
- '@oxc-transform/binding-win32-ia32-msvc': 0.117.0
- '@oxc-transform/binding-win32-x64-msvc': 0.117.0
- transitivePeerDependencies:
- - '@emnapi/core'
- - '@emnapi/runtime'
-
- oxc-walker@0.7.0(oxc-parser@0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)):
- dependencies:
- magic-regexp: 0.10.0
- oxc-parser: 0.117.0(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
-
- p-limit@3.1.0:
- dependencies:
- yocto-queue: 0.1.0
-
- p-limit@4.0.0:
- dependencies:
- yocto-queue: 1.2.2
-
- p-locate@5.0.0:
- dependencies:
- p-limit: 3.1.0
-
- p-locate@6.0.0:
- dependencies:
- p-limit: 4.0.0
-
- package-json-from-dist@1.0.1: {}
-
- package-manager-detector@1.6.0: {}
-
- parse-imports-exports@0.2.4:
- dependencies:
- parse-statements: 1.0.11
-
- parse-statements@1.0.11: {}
-
- parseurl@1.3.3: {}
-
- path-exists@4.0.0: {}
-
- path-key@3.1.1: {}
-
- path-key@4.0.0: {}
-
- path-parse@1.0.7: {}
-
- path-scurry@1.11.1:
- dependencies:
- lru-cache: 10.4.3
- minipass: 7.1.3
-
- path-scurry@2.0.2:
- dependencies:
- lru-cache: 11.2.7
- minipass: 7.1.3
-
- pathe@1.1.2: {}
-
- pathe@2.0.3: {}
-
- perfect-debounce@1.0.0: {}
-
- perfect-debounce@2.1.0: {}
-
- picocolors@1.1.1: {}
-
- picomatch@2.3.2: {}
-
- picomatch@4.0.4: {}
-
- pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)):
- dependencies:
- '@vue/devtools-api': 7.7.9
- vue: 3.5.32(typescript@6.0.2)
- optionalDependencies:
- typescript: 6.0.2
-
- pkg-types@1.3.1:
- dependencies:
- confbox: 0.1.8
- mlly: 1.8.2
- pathe: 2.0.3
-
- pkg-types@2.3.0:
- dependencies:
- confbox: 0.2.4
- exsolve: 1.0.8
- pathe: 2.0.3
-
- pluralize@8.0.0: {}
-
- postcss-calc@10.1.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-selector-parser: 7.1.1
- postcss-value-parser: 4.2.0
-
- postcss-colormin@7.0.7(postcss@8.5.8):
- dependencies:
- '@colordx/core': 5.0.3
- browserslist: 4.28.2
- caniuse-api: 3.0.0
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-convert-values@7.0.9(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-discard-comments@7.0.6(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-selector-parser: 7.1.1
-
- postcss-discard-duplicates@7.0.2(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
-
- postcss-discard-empty@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
-
- postcss-discard-overridden@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
-
- postcss-merge-longhand@7.0.5(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
- stylehacks: 7.0.8(postcss@8.5.8)
-
- postcss-merge-rules@7.0.8(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- caniuse-api: 3.0.0
- cssnano-utils: 5.0.1(postcss@8.5.8)
- postcss: 8.5.8
- postcss-selector-parser: 7.1.1
-
- postcss-minify-font-values@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-minify-gradients@7.0.2(postcss@8.5.8):
- dependencies:
- '@colordx/core': 5.0.3
- cssnano-utils: 5.0.1(postcss@8.5.8)
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-minify-params@7.0.6(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- cssnano-utils: 5.0.1(postcss@8.5.8)
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-minify-selectors@7.0.6(postcss@8.5.8):
- dependencies:
- cssesc: 3.0.0
- postcss: 8.5.8
- postcss-selector-parser: 7.1.1
-
- postcss-normalize-charset@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
-
- postcss-normalize-display-values@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-normalize-positions@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-normalize-repeat-style@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-normalize-string@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-normalize-timing-functions@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-normalize-unicode@7.0.6(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-normalize-url@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-normalize-whitespace@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-ordered-values@7.0.2(postcss@8.5.8):
- dependencies:
- cssnano-utils: 5.0.1(postcss@8.5.8)
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-reduce-initial@7.0.6(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- caniuse-api: 3.0.0
- postcss: 8.5.8
-
- postcss-reduce-transforms@7.0.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
-
- postcss-selector-parser@7.1.1:
- dependencies:
- cssesc: 3.0.0
- util-deprecate: 1.0.2
-
- postcss-svgo@7.1.1(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-value-parser: 4.2.0
- svgo: 4.0.1
-
- postcss-unique-selectors@7.0.5(postcss@8.5.8):
- dependencies:
- postcss: 8.5.8
- postcss-selector-parser: 7.1.1
-
- postcss-value-parser@4.2.0: {}
-
- postcss@8.5.8:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- powershell-utils@0.1.0: {}
-
- prelude-ls@1.2.1: {}
-
- pretty-bytes@7.1.0: {}
-
- process-nextick-args@2.0.1: {}
-
- process@0.11.10: {}
-
- punycode@2.3.1: {}
-
- quansync@0.2.11: {}
-
- queue-microtask@1.2.3: {}
-
- radix3@1.1.2: {}
-
- range-parser@1.2.1: {}
-
- rc9@3.0.1:
- dependencies:
- defu: 6.1.6
- destr: 2.0.5
-
- readable-stream@2.3.8:
- dependencies:
- core-util-is: 1.0.3
- inherits: 2.0.4
- isarray: 1.0.0
- process-nextick-args: 2.0.1
- safe-buffer: 5.1.2
- string_decoder: 1.1.1
- util-deprecate: 1.0.2
-
- readable-stream@4.7.0:
- dependencies:
- abort-controller: 3.0.0
- buffer: 6.0.3
- events: 3.3.0
- process: 0.11.10
- string_decoder: 1.3.0
-
- readdir-glob@1.1.3:
- dependencies:
- minimatch: 5.1.9
-
- readdirp@4.1.2: {}
-
- readdirp@5.0.0: {}
-
- redis-errors@1.2.0: {}
-
- redis-parser@3.0.0:
- dependencies:
- redis-errors: 1.2.0
-
- refa@0.12.1:
- dependencies:
- '@eslint-community/regexpp': 4.12.2
-
- regexp-ast-analysis@0.7.1:
- dependencies:
- '@eslint-community/regexpp': 4.12.2
- refa: 0.12.1
-
- regexp-tree@0.1.27: {}
-
- regjsparser@0.13.0:
- dependencies:
- jsesc: 3.1.0
-
- reserved-identifiers@1.2.0: {}
-
- resolve-from@5.0.0: {}
-
- resolve-pkg-maps@1.0.0: {}
-
- resolve@1.22.11:
- dependencies:
- is-core-module: 2.16.1
- path-parse: 1.0.7
- supports-preserve-symlinks-flag: 1.0.0
-
- reusify@1.1.0: {}
-
- rfdc@1.4.1: {}
-
- rollup-plugin-visualizer@7.0.1(rollup@4.60.1):
- dependencies:
- open: 11.0.0
- picomatch: 4.0.4
- source-map: 0.7.6
- yargs: 18.0.0
- optionalDependencies:
- rollup: 4.60.1
-
- rollup@4.60.1:
- dependencies:
- '@types/estree': 1.0.8
- optionalDependencies:
- '@rollup/rollup-android-arm-eabi': 4.60.1
- '@rollup/rollup-android-arm64': 4.60.1
- '@rollup/rollup-darwin-arm64': 4.60.1
- '@rollup/rollup-darwin-x64': 4.60.1
- '@rollup/rollup-freebsd-arm64': 4.60.1
- '@rollup/rollup-freebsd-x64': 4.60.1
- '@rollup/rollup-linux-arm-gnueabihf': 4.60.1
- '@rollup/rollup-linux-arm-musleabihf': 4.60.1
- '@rollup/rollup-linux-arm64-gnu': 4.60.1
- '@rollup/rollup-linux-arm64-musl': 4.60.1
- '@rollup/rollup-linux-loong64-gnu': 4.60.1
- '@rollup/rollup-linux-loong64-musl': 4.60.1
- '@rollup/rollup-linux-ppc64-gnu': 4.60.1
- '@rollup/rollup-linux-ppc64-musl': 4.60.1
- '@rollup/rollup-linux-riscv64-gnu': 4.60.1
- '@rollup/rollup-linux-riscv64-musl': 4.60.1
- '@rollup/rollup-linux-s390x-gnu': 4.60.1
- '@rollup/rollup-linux-x64-gnu': 4.60.1
- '@rollup/rollup-linux-x64-musl': 4.60.1
- '@rollup/rollup-openbsd-x64': 4.60.1
- '@rollup/rollup-openharmony-arm64': 4.60.1
- '@rollup/rollup-win32-arm64-msvc': 4.60.1
- '@rollup/rollup-win32-ia32-msvc': 4.60.1
- '@rollup/rollup-win32-x64-gnu': 4.60.1
- '@rollup/rollup-win32-x64-msvc': 4.60.1
- fsevents: 2.3.3
-
- rou3@0.8.1: {}
-
- run-applescript@7.1.0: {}
-
- run-parallel@1.2.0:
- dependencies:
- queue-microtask: 1.2.3
-
- safe-buffer@5.1.2: {}
-
- safe-buffer@5.2.1: {}
-
- sax@1.6.0: {}
-
- scslre@0.3.0:
- dependencies:
- '@eslint-community/regexpp': 4.12.2
- refa: 0.12.1
- regexp-ast-analysis: 0.7.1
-
- scule@1.3.0: {}
-
- semver@6.3.1: {}
-
- semver@7.7.4: {}
-
- send@1.2.1:
- dependencies:
- debug: 4.4.3
- encodeurl: 2.0.0
- escape-html: 1.0.3
- etag: 1.8.1
- fresh: 2.0.0
- http-errors: 2.0.1
- mime-types: 3.0.2
- ms: 2.1.3
- on-finished: 2.4.1
- range-parser: 1.2.1
- statuses: 2.0.2
- transitivePeerDependencies:
- - supports-color
-
- serialize-javascript@7.0.5: {}
-
- seroval@1.5.2: {}
-
- serve-placeholder@2.0.2:
- dependencies:
- defu: 6.1.6
-
- serve-static@2.2.1:
- dependencies:
- encodeurl: 2.0.0
- escape-html: 1.0.3
- parseurl: 1.3.3
- send: 1.2.1
- transitivePeerDependencies:
- - supports-color
-
- setprototypeof@1.2.0: {}
-
- shebang-command@2.0.0:
- dependencies:
- shebang-regex: 3.0.0
-
- shebang-regex@3.0.0: {}
-
- shell-quote@1.8.3: {}
-
- signal-exit@4.1.0: {}
-
- simple-git@3.33.0:
- dependencies:
- '@kwsites/file-exists': 1.1.1
- '@kwsites/promise-deferred': 1.1.1
- debug: 4.4.3
- transitivePeerDependencies:
- - supports-color
-
- sirv@3.0.2:
- dependencies:
- '@polka/url': 1.0.0-next.29
- mrmime: 2.0.1
- totalist: 3.0.1
-
- sisteransi@1.0.5: {}
-
- slash@5.1.0: {}
-
- smob@1.6.1: {}
-
- source-map-js@1.2.1: {}
-
- source-map-support@0.5.21:
- dependencies:
- buffer-from: 1.1.2
- source-map: 0.6.1
-
- source-map@0.6.1: {}
-
- source-map@0.7.6: {}
-
- spdx-exceptions@2.5.0: {}
-
- spdx-expression-parse@4.0.0:
- dependencies:
- spdx-exceptions: 2.5.0
- spdx-license-ids: 3.0.23
-
- spdx-license-ids@3.0.23: {}
-
- speakingurl@14.0.1: {}
-
- srvx@0.11.15: {}
-
- stable-hash-x@0.2.0: {}
-
- standard-as-callback@2.1.0: {}
-
- statuses@2.0.2: {}
-
- std-env@3.10.0: {}
-
- std-env@4.0.0: {}
-
- streamx@2.25.0:
- dependencies:
- events-universal: 1.0.1
- fast-fifo: 1.3.2
- text-decoder: 1.2.7
- transitivePeerDependencies:
- - bare-abort-controller
- - react-native-b4a
-
- string-width@4.2.3:
- dependencies:
- emoji-regex: 8.0.0
- is-fullwidth-code-point: 3.0.0
- strip-ansi: 6.0.1
-
- string-width@5.1.2:
- dependencies:
- eastasianwidth: 0.2.0
- emoji-regex: 9.2.2
- strip-ansi: 7.2.0
-
- string-width@7.2.0:
- dependencies:
- emoji-regex: 10.6.0
- get-east-asian-width: 1.5.0
- strip-ansi: 7.2.0
-
- string_decoder@1.1.1:
- dependencies:
- safe-buffer: 5.1.2
-
- string_decoder@1.3.0:
- dependencies:
- safe-buffer: 5.2.1
-
- strip-ansi@6.0.1:
- dependencies:
- ansi-regex: 5.0.1
-
- strip-ansi@7.2.0:
- dependencies:
- ansi-regex: 6.2.2
-
- strip-final-newline@3.0.0: {}
-
- strip-indent@4.1.1: {}
-
- strip-literal@3.1.0:
- dependencies:
- js-tokens: 9.0.1
-
- structured-clone-es@2.0.0: {}
-
- stylehacks@7.0.8(postcss@8.5.8):
- dependencies:
- browserslist: 4.28.2
- postcss: 8.5.8
- postcss-selector-parser: 7.1.1
-
- superjson@2.2.6:
- dependencies:
- copy-anything: 4.0.5
-
- supports-color@10.2.2: {}
-
- supports-preserve-symlinks-flag@1.0.0: {}
-
- svgo@4.0.1:
- dependencies:
- commander: 11.1.0
- css-select: 5.2.2
- css-tree: 3.2.1
- css-what: 6.2.2
- csso: 5.0.5
- picocolors: 1.1.1
- sax: 1.6.0
-
- tagged-tag@1.0.0: {}
-
- tailwindcss@4.2.2: {}
-
- tapable@2.3.2: {}
-
- tar-stream@3.1.8:
- dependencies:
- b4a: 1.8.0
- bare-fs: 4.6.0
- fast-fifo: 1.3.2
- streamx: 2.25.0
- transitivePeerDependencies:
- - bare-abort-controller
- - bare-buffer
- - react-native-b4a
-
- tar@7.5.13:
- dependencies:
- '@isaacs/fs-minipass': 4.0.1
- chownr: 3.0.0
- minipass: 7.1.3
- minizlib: 3.1.0
- yallist: 5.0.0
-
- teex@1.0.1:
- dependencies:
- streamx: 2.25.0
- transitivePeerDependencies:
- - bare-abort-controller
- - react-native-b4a
-
- terser@5.46.1:
- dependencies:
- '@jridgewell/source-map': 0.3.11
- acorn: 8.16.0
- commander: 2.20.3
- source-map-support: 0.5.21
-
- text-decoder@1.2.7:
- dependencies:
- b4a: 1.8.0
- transitivePeerDependencies:
- - react-native-b4a
-
- tiny-invariant@1.3.3: {}
-
- tinyclip@0.1.12: {}
-
- tinyexec@1.0.4: {}
-
- tinyglobby@0.2.15:
- dependencies:
- fdir: 6.5.0(picomatch@4.0.4)
- picomatch: 4.0.4
-
- to-regex-range@5.0.1:
- dependencies:
- is-number: 7.0.0
-
- to-valid-identifier@1.0.0:
- dependencies:
- '@sindresorhus/base62': 1.0.0
- reserved-identifiers: 1.2.0
-
- toidentifier@1.0.1: {}
-
- totalist@3.0.1: {}
-
- tr46@0.0.3: {}
-
- ts-api-utils@2.5.0(typescript@6.0.2):
- dependencies:
- typescript: 6.0.2
-
- tslib@2.8.1:
- optional: true
-
- type-check@0.4.0:
- dependencies:
- prelude-ls: 1.2.1
-
- type-fest@5.5.0:
- dependencies:
- tagged-tag: 1.0.0
-
- type-level-regexp@0.1.17: {}
-
- typescript@6.0.2: {}
-
- ufo@1.6.3: {}
-
- ultrahtml@1.6.0: {}
-
- uncrypto@0.1.3: {}
-
- unctx@2.5.0:
- dependencies:
- acorn: 8.16.0
- estree-walker: 3.0.3
- magic-string: 0.30.21
- unplugin: 2.3.11
-
- unenv@2.0.0-rc.24:
- dependencies:
- pathe: 2.0.3
-
- unhead@2.1.12:
- dependencies:
- hookable: 6.1.0
-
- unicorn-magic@0.3.0: {}
-
- unicorn-magic@0.4.0: {}
-
- unimport@5.7.0:
- dependencies:
- acorn: 8.16.0
- escape-string-regexp: 5.0.0
- estree-walker: 3.0.3
- local-pkg: 1.1.2
- magic-string: 0.30.21
- mlly: 1.8.2
- pathe: 2.0.3
- picomatch: 4.0.4
- pkg-types: 2.3.0
- scule: 1.3.0
- strip-literal: 3.1.0
- tinyglobby: 0.2.15
- unplugin: 2.3.11
- unplugin-utils: 0.3.1
-
- unimport@6.0.2:
- dependencies:
- acorn: 8.16.0
- escape-string-regexp: 5.0.0
- estree-walker: 3.0.3
- local-pkg: 1.1.2
- magic-string: 0.30.21
- mlly: 1.8.2
- pathe: 2.0.3
- picomatch: 4.0.4
- pkg-types: 2.3.0
- scule: 1.3.0
- strip-literal: 3.1.0
- tinyglobby: 0.2.15
- unplugin: 3.0.0
- unplugin-utils: 0.3.1
-
- unplugin-utils@0.3.1:
- dependencies:
- pathe: 2.0.3
- picomatch: 4.0.4
-
- unplugin@2.3.11:
- dependencies:
- '@jridgewell/remapping': 2.3.5
- acorn: 8.16.0
- picomatch: 4.0.4
- webpack-virtual-modules: 0.6.2
-
- unplugin@3.0.0:
- dependencies:
- '@jridgewell/remapping': 2.3.5
- picomatch: 4.0.4
- webpack-virtual-modules: 0.6.2
-
- unrouting@0.1.7:
- dependencies:
- escape-string-regexp: 5.0.0
- ufo: 1.6.3
-
- unrs-resolver@1.11.1:
- dependencies:
- napi-postinstall: 0.3.4
- optionalDependencies:
- '@unrs/resolver-binding-android-arm-eabi': 1.11.1
- '@unrs/resolver-binding-android-arm64': 1.11.1
- '@unrs/resolver-binding-darwin-arm64': 1.11.1
- '@unrs/resolver-binding-darwin-x64': 1.11.1
- '@unrs/resolver-binding-freebsd-x64': 1.11.1
- '@unrs/resolver-binding-linux-arm-gnueabihf': 1.11.1
- '@unrs/resolver-binding-linux-arm-musleabihf': 1.11.1
- '@unrs/resolver-binding-linux-arm64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-arm64-musl': 1.11.1
- '@unrs/resolver-binding-linux-ppc64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-riscv64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-riscv64-musl': 1.11.1
- '@unrs/resolver-binding-linux-s390x-gnu': 1.11.1
- '@unrs/resolver-binding-linux-x64-gnu': 1.11.1
- '@unrs/resolver-binding-linux-x64-musl': 1.11.1
- '@unrs/resolver-binding-wasm32-wasi': 1.11.1
- '@unrs/resolver-binding-win32-arm64-msvc': 1.11.1
- '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1
- '@unrs/resolver-binding-win32-x64-msvc': 1.11.1
-
- unstorage@1.17.5(db0@0.3.4)(ioredis@5.10.1):
- dependencies:
- anymatch: 3.1.3
- chokidar: 5.0.0
- destr: 2.0.5
- h3: 1.15.11
- lru-cache: 11.2.7
- node-fetch-native: 1.6.7
- ofetch: 1.5.1
- ufo: 1.6.3
- optionalDependencies:
- db0: 0.3.4
- ioredis: 5.10.1
-
- untun@0.1.3:
- dependencies:
- citty: 0.1.6
- consola: 3.4.2
- pathe: 1.1.2
-
- untyped@2.0.0:
- dependencies:
- citty: 0.1.6
- defu: 6.1.6
- jiti: 2.6.1
- knitwork: 1.3.0
- scule: 1.3.0
-
- unwasm@0.5.3:
- dependencies:
- exsolve: 1.0.8
- knitwork: 1.3.0
- magic-string: 0.30.21
- mlly: 1.8.2
- pathe: 2.0.3
- pkg-types: 2.3.0
-
- update-browserslist-db@1.2.3(browserslist@4.28.2):
- dependencies:
- browserslist: 4.28.2
- escalade: 3.2.0
- picocolors: 1.1.1
-
- uqr@0.1.3: {}
-
- uri-js@4.4.1:
- dependencies:
- punycode: 2.3.1
-
- util-deprecate@1.0.2: {}
-
- vite-dev-rpc@1.1.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)):
- dependencies:
- birpc: 2.9.0
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vite-hot-client: 2.1.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
-
- vite-hot-client@2.1.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)):
- dependencies:
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
-
- vite-node@5.3.0(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3):
- dependencies:
- cac: 6.7.14
- es-module-lexer: 2.0.0
- obug: 2.1.1
- pathe: 2.0.3
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- transitivePeerDependencies:
- - '@types/node'
- - jiti
- - less
- - lightningcss
- - sass
- - sass-embedded
- - stylus
- - sugarss
- - terser
- - tsx
- - yaml
-
- vite-plugin-checker@0.12.0(eslint@10.2.0(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.2)(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)):
- dependencies:
- '@babel/code-frame': 7.29.0
- chokidar: 4.0.3
- npm-run-path: 6.0.0
- picocolors: 1.1.1
- picomatch: 4.0.4
- tiny-invariant: 1.3.3
- tinyglobby: 0.2.15
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vscode-uri: 3.1.0
- optionalDependencies:
- eslint: 10.2.0(jiti@2.6.1)
- optionator: 0.9.4
- typescript: 6.0.2
-
- vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)):
- dependencies:
- ansis: 4.2.0
- debug: 4.4.3
- error-stack-parser-es: 1.0.5
- ohash: 2.0.11
- open: 10.2.0
- perfect-debounce: 2.1.0
- sirv: 3.0.2
- unplugin-utils: 0.3.1
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vite-dev-rpc: 1.1.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))
- optionalDependencies:
- '@nuxt/kit': 4.4.2(magicast@0.5.2)
- transitivePeerDependencies:
- - supports-color
-
- vite-plugin-vue-tracer@1.3.0(vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3))(vue@3.5.32(typescript@6.0.2)):
- dependencies:
- estree-walker: 3.0.3
- exsolve: 1.0.8
- magic-string: 0.30.21
- pathe: 2.0.3
- source-map-js: 1.2.1
- vite: 7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3)
- vue: 3.5.32(typescript@6.0.2)
-
- vite@7.3.1(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.1)(yaml@2.8.3):
- dependencies:
- esbuild: 0.27.7
- fdir: 6.5.0(picomatch@4.0.4)
- picomatch: 4.0.4
- postcss: 8.5.8
- rollup: 4.60.1
- tinyglobby: 0.2.15
- optionalDependencies:
- fsevents: 2.3.3
- jiti: 2.6.1
- lightningcss: 1.32.0
- terser: 5.46.1
- yaml: 2.8.3
-
- vscode-uri@3.1.0: {}
-
- vue-bundle-renderer@2.2.0:
- dependencies:
- ufo: 1.6.3
-
- vue-devtools-stub@0.1.0: {}
-
- vue-eslint-parser@10.4.0(eslint@10.2.0(jiti@2.6.1)):
- dependencies:
- debug: 4.4.3
- eslint: 10.2.0(jiti@2.6.1)
- eslint-scope: 9.1.2
- eslint-visitor-keys: 5.0.1
- espree: 11.2.0
- esquery: 1.7.0
- semver: 7.7.4
- transitivePeerDependencies:
- - supports-color
-
- vue-router@5.0.4(@vue/compiler-sfc@3.5.32)(pinia@3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2)))(vue@3.5.32(typescript@6.0.2)):
- dependencies:
- '@babel/generator': 7.29.1
- '@vue-macros/common': 3.1.2(vue@3.5.32(typescript@6.0.2))
- '@vue/devtools-api': 8.1.1
- ast-walker-scope: 0.8.3
- chokidar: 5.0.0
- json5: 2.2.3
- local-pkg: 1.1.2
- magic-string: 0.30.21
- mlly: 1.8.2
- muggle-string: 0.4.1
- pathe: 2.0.3
- picomatch: 4.0.4
- scule: 1.3.0
- tinyglobby: 0.2.15
- unplugin: 3.0.0
- unplugin-utils: 0.3.1
- vue: 3.5.32(typescript@6.0.2)
- yaml: 2.8.3
- optionalDependencies:
- '@vue/compiler-sfc': 3.5.32
- pinia: 3.0.4(typescript@6.0.2)(vue@3.5.32(typescript@6.0.2))
-
- vue@3.5.32(typescript@6.0.2):
- dependencies:
- '@vue/compiler-dom': 3.5.32
- '@vue/compiler-sfc': 3.5.32
- '@vue/runtime-dom': 3.5.32
- '@vue/server-renderer': 3.5.32(vue@3.5.32(typescript@6.0.2))
- '@vue/shared': 3.5.32
- optionalDependencies:
- typescript: 6.0.2
-
- webidl-conversions@3.0.1: {}
-
- webpack-virtual-modules@0.6.2: {}
-
- whatwg-url@5.0.0:
- dependencies:
- tr46: 0.0.3
- webidl-conversions: 3.0.1
-
- which@2.0.2:
- dependencies:
- isexe: 2.0.0
-
- which@6.0.1:
- dependencies:
- isexe: 4.0.0
-
- word-wrap@1.2.5: {}
-
- wrap-ansi@7.0.0:
- dependencies:
- ansi-styles: 4.3.0
- string-width: 4.2.3
- strip-ansi: 6.0.1
-
- wrap-ansi@8.1.0:
- dependencies:
- ansi-styles: 6.2.3
- string-width: 5.1.2
- strip-ansi: 7.2.0
-
- wrap-ansi@9.0.2:
- dependencies:
- ansi-styles: 6.2.3
- string-width: 7.2.0
- strip-ansi: 7.2.0
-
- ws@8.20.0: {}
-
- wsl-utils@0.1.0:
- dependencies:
- is-wsl: 3.1.1
-
- wsl-utils@0.3.1:
- dependencies:
- is-wsl: 3.1.1
- powershell-utils: 0.1.0
-
- xml-name-validator@4.0.0: {}
-
- y18n@5.0.8: {}
-
- yallist@3.1.1: {}
-
- yallist@5.0.0: {}
-
- yaml@2.8.3: {}
-
- yargs-parser@22.0.0: {}
-
- yargs@18.0.0:
- dependencies:
- cliui: 9.0.1
- escalade: 3.2.0
- get-caller-file: 2.0.5
- string-width: 7.2.0
- y18n: 5.0.8
- yargs-parser: 22.0.0
-
- yocto-queue@0.1.0: {}
-
- yocto-queue@1.2.2: {}
-
- youch-core@0.3.3:
- dependencies:
- '@poppinss/exception': 1.2.3
- error-stack-parser-es: 1.0.5
-
- youch@4.1.1:
- dependencies:
- '@poppinss/colors': 4.1.6
- '@poppinss/dumper': 0.7.0
- '@speed-highlight/core': 1.2.15
- cookie-es: 3.1.1
- youch-core: 0.3.3
-
- zip-stream@6.0.1:
- dependencies:
- archiver-utils: 5.0.2
- compress-commons: 6.0.2
- readable-stream: 4.7.0
diff --git a/packages/alienmark/pnpm-lock.yaml b/packages/alienmark/pnpm-lock.yaml
deleted file mode 100644
index a506f9eb..00000000
--- a/packages/alienmark/pnpm-lock.yaml
+++ /dev/null
@@ -1,1252 +0,0 @@
-lockfileVersion: '9.0'
-
-settings:
- autoInstallPeers: true
- excludeLinksFromLockfile: false
-
-importers:
-
- .:
- devDependencies:
- '@types/node':
- specifier: ^25.6.0
- version: 25.6.0
- tsdown:
- specifier: ^0.21.9
- version: 0.21.9(typescript@6.0.3)
- typescript:
- specifier: ^6.0.3
- version: 6.0.3
- vitest:
- specifier: ^4.1.4
- version: 4.1.4(@types/node@25.6.0)(vite@8.0.8(@types/node@25.6.0))
-
-packages:
-
- '@babel/generator@8.0.0-rc.3':
- resolution: {integrity: sha512-em37/13/nR320G4jab/nIIHZgc2Wz2y/D39lxnTyxB4/D/omPQncl/lSdlnJY1OhQcRGugTSIF2l/69o31C9dA==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- '@babel/helper-string-parser@8.0.0-rc.3':
- resolution: {integrity: sha512-AmwWFx1m8G/a5cXkxLxTiWl+YEoWuoFLUCwqMlNuWO1tqAYITQAbCRPUkyBHv1VOFgfjVOqEj6L3u15J5ZCzTA==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- '@babel/helper-validator-identifier@8.0.0-rc.3':
- resolution: {integrity: sha512-8AWCJ2VJJyDFlGBep5GpaaQ9AAaE/FjAcrqI7jyssYhtL7WGV0DOKpJsQqM037xDbpRLHXsY8TwU7zDma7coOw==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- '@babel/parser@8.0.0-rc.3':
- resolution: {integrity: sha512-B20dvP3MfNc/XS5KKCHy/oyWl5IA6Cn9YjXRdDlCjNmUFrjvLXMNUfQq/QUy9fnG2gYkKKcrto2YaF9B32ToOQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
-
- '@babel/types@8.0.0-rc.3':
- resolution: {integrity: sha512-mOm5ZrYmphGfqVWoH5YYMTITb3cDXsFgmvFlvkvWDMsR9X8RFnt7a0Wb6yNIdoFsiMO9WjYLq+U/FMtqIYAF8Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
-
- '@emnapi/core@1.9.2':
- resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
-
- '@emnapi/runtime@1.9.2':
- resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
-
- '@emnapi/wasi-threads@1.2.1':
- resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
-
- '@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
-
- '@jridgewell/resolve-uri@3.1.2':
- resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
- engines: {node: '>=6.0.0'}
-
- '@jridgewell/sourcemap-codec@1.5.5':
- resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
-
- '@jridgewell/trace-mapping@0.3.31':
- resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
-
- '@napi-rs/wasm-runtime@1.1.4':
- resolution: {integrity: sha512-3NQNNgA1YSlJb/kMH1ildASP9HW7/7kYnRI2szWJaofaS1hWmbGI4H+d3+22aGzXXN9IJ+n+GiFVcGipJP18ow==}
- peerDependencies:
- '@emnapi/core': ^1.7.1
- '@emnapi/runtime': ^1.7.1
-
- '@oxc-project/types@0.124.0':
- resolution: {integrity: sha512-VBFWMTBvHxS11Z5Lvlr3IWgrwhMTXV+Md+EQF0Xf60+wAdsGFTBx7X7K/hP4pi8N7dcm1RvcHwDxZ16Qx8keUg==}
-
- '@oxc-project/types@0.126.0':
- resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==}
-
- '@quansync/fs@1.0.0':
- resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
-
- '@rolldown/binding-android-arm64@1.0.0-rc.15':
- resolution: {integrity: sha512-YYe6aWruPZDtHNpwu7+qAHEMbQ/yRl6atqb/AhznLTnD3UY99Q1jE7ihLSahNWkF4EqRPVC4SiR4O0UkLK02tA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [android]
-
- '@rolldown/binding-android-arm64@1.0.0-rc.16':
- resolution: {integrity: sha512-rhY3k7Bsae9qQfOtph2Pm2jZEA+s8Gmjoz4hhmx70K9iMQ/ddeae+xhRQcM5IuVx5ry1+bGfkvMn7D6MJggVSA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [android]
-
- '@rolldown/binding-darwin-arm64@1.0.0-rc.15':
- resolution: {integrity: sha512-oArR/ig8wNTPYsXL+Mzhs0oxhxfuHRfG7Ikw7jXsw8mYOtk71W0OkF2VEVh699pdmzjPQsTjlD1JIOoHkLP1Fg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [darwin]
-
- '@rolldown/binding-darwin-arm64@1.0.0-rc.16':
- resolution: {integrity: sha512-rNz0yK078yrNn3DrdgN+PKiMOW8HfQ92jQiXxwX8yW899ayV00MLVdaCNeVBhG/TbH3ouYVObo8/yrkiectkcQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [darwin]
-
- '@rolldown/binding-darwin-x64@1.0.0-rc.15':
- resolution: {integrity: sha512-YzeVqOqjPYvUbJSWJ4EDL8ahbmsIXQpgL3JVipmN+MX0XnXMeWomLN3Fb+nwCmP/jfyqte5I3XRSm7OfQrbyxw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [darwin]
-
- '@rolldown/binding-darwin-x64@1.0.0-rc.16':
- resolution: {integrity: sha512-r/OmdR00HmD4i79Z//xO06uEPOq5hRXdhw7nzkxQxwSavs3PSHa1ijntdpOiZ2mzOQ3fVVu8C1M19FoNM+dMUQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [darwin]
-
- '@rolldown/binding-freebsd-x64@1.0.0-rc.15':
- resolution: {integrity: sha512-9Erhx956jeQ0nNTyif1+QWAXDRD38ZNjr//bSHrt6wDwB+QkAfl2q6Mn1k6OBPerznjRmbM10lgRb1Pli4xZPw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@rolldown/binding-freebsd-x64@1.0.0-rc.16':
- resolution: {integrity: sha512-KcRE5w8h0OnjUatG8pldyD14/CQ5Phs1oxfR+3pKDjboHRo9+MkqQaiIZlZRpsxC15paeXme/I127tUa9TXJ6g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [freebsd]
-
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15':
- resolution: {integrity: sha512-cVwk0w8QbZJGTnP/AHQBs5yNwmpgGYStL88t4UIaqcvYJWBfS0s3oqVLZPwsPU6M0zlW4GqjP0Zq5MnAGwFeGA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16':
- resolution: {integrity: sha512-bT0guA1bpxEJ/ZhTRniQf7rNF8ybvXOuWbNIeLABaV5NGjx4EtOWBTSRGWFU9ZWVkPOZ+HNFP8RMcBokBiZ0Kg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm]
- os: [linux]
-
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15':
- resolution: {integrity: sha512-eBZ/u8iAK9SoHGanqe/jrPnY0JvBN6iXbVOsbO38mbz+ZJsaobExAm1Iu+rxa4S1l2FjG0qEZn4Rc6X8n+9M+w==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16':
- resolution: {integrity: sha512-+tHktCHWV8BDQSjemUqm/Jl/TPk3QObCTIjmdDy/nlupcujZghmKK2962LYrqFpWu+ai01AN/REOH3NEpqvYQg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15':
- resolution: {integrity: sha512-ZvRYMGrAklV9PEkgt4LQM6MjQX2P58HPAuecwYObY2DhS2t35R0I810bKi0wmaYORt6m/2Sm+Z+nFgb0WhXNcQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16':
- resolution: {integrity: sha512-3fPzdREH806oRLxpTWW1Gt4tQHs0TitZFOECB2xzCFLPKnSOy90gwA7P29cksYilFO6XVRY1kzga0cL2nRjKPg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15':
- resolution: {integrity: sha512-VDpgGBzgfg5hLg+uBpCLoFG5kVvEyafmfxGUV0UHLcL5irxAK7PKNeC2MwClgk6ZAiNhmo9FLhRYgvMmedLtnQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16':
- resolution: {integrity: sha512-EKwI1tSrLs7YVw+JPJT/G2dJQ1jl9qlTTTEG0V2Ok/RdOenRfBw2PQdLPyjhIu58ocdBfP7vIRN/pvMsPxs/AQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [ppc64]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15':
- resolution: {integrity: sha512-y1uXY3qQWCzcPgRJATPSOUP4tCemh4uBdY7e3EZbVwCJTY3gLJWnQABgeUetvED+bt1FQ01OeZwvhLS2bpNrAQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16':
- resolution: {integrity: sha512-Uknladnb3Sxqu6SEcqBldQyJUpk8NleooZEc0MbRBJ4inEhRYWZX0NJu12vNf2mqAq7gsofAxHrGghiUYjhaLQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [s390x]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15':
- resolution: {integrity: sha512-023bTPBod7J3Y/4fzAN6QtpkSABR0rigtrwaP+qSEabUh5zf6ELr9Nc7GujaROuPY3uwdSIXWrvhn1KxOvurWA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16':
- resolution: {integrity: sha512-FIb8+uG49sZBtLTn+zt1AJ20TqVcqWeSIyoVt0or7uAWesgKaHbiBh6OpA/k9v0LTt+PTrb1Lao133kP4uVxkg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.15':
- resolution: {integrity: sha512-witB2O0/hU4CgfOOKUoeFgQ4GktPi1eEbAhaLAIpgD6+ZnhcPkUtPsoKKHRzmOoWPZue46IThdSgdo4XneOLYw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.16':
- resolution: {integrity: sha512-RuERhF9/EgWxZEXYWCOaViUWHIboceK4/ivdtQ3R0T44NjLkIIlGIAVAuCddFxsZ7vnRHtNQUrt2vR2n2slB2w==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.15':
- resolution: {integrity: sha512-UCL68NJ0Ud5zRipXZE9dF5PmirzJE4E4BCIOOssEnM7wLDsxjc6Qb0sGDxTNRTP53I6MZpygyCpY8Aa8sPfKPg==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.16':
- resolution: {integrity: sha512-mXcXnvd9GpazCxeUCCnZ2+YF7nut+ZOEbE4GtaiPtyY6AkhZWbK70y1KK3j+RDhjVq5+U8FySkKRb/+w0EeUwA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [openharmony]
-
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.15':
- resolution: {integrity: sha512-ApLruZq/ig+nhaE7OJm4lDjayUnOHVUa77zGeqnqZ9pn0ovdVbbNPerVibLXDmWeUZXjIYIT8V3xkT58Rm9u5Q==}
- engines: {node: '>=14.0.0'}
- cpu: [wasm32]
-
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.16':
- resolution: {integrity: sha512-3Q2KQxnC8IJOLqXmUMoYwyIPZU9hzRbnHaoV3Euz+VVnjZKcY8ktnNP8T9R4/GGQtb27C/UYKABxesKWb8lsvQ==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [wasm32]
-
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15':
- resolution: {integrity: sha512-KmoUoU7HnN+Si5YWJigfTws1jz1bKBYDQKdbLspz0UaqjjFkddHsqorgiW1mxcAj88lYUE6NC/zJNwT+SloqtA==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [win32]
-
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16':
- resolution: {integrity: sha512-tj7XRemQcOcFwv7qhpUxMTBbI5mWMlE4c1Omhg5+h8GuLXzyj8HviYgR+bB2DMDgRqUE+jiDleqSCRjx4aYk/Q==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [arm64]
- os: [win32]
-
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15':
- resolution: {integrity: sha512-3P2A8L+x75qavWLe/Dll3EYBJLQmtkJN8rfh+U/eR3MqMgL/h98PhYI+JFfXuDPgPeCB7iZAKiqii5vqOvnA0g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [win32]
-
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16':
- resolution: {integrity: sha512-PH5DRZT+F4f2PTXRXR8uJxnBq2po/xFtddyabTJVJs/ZYVHqXPEgNIr35IHTEa6bpa0Q8Awg+ymkTaGnKITw4g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- cpu: [x64]
- os: [win32]
-
- '@rolldown/pluginutils@1.0.0-rc.15':
- resolution: {integrity: sha512-UromN0peaE53IaBRe9W7CjrZgXl90fqGpK+mIZbA3qSTeYqg3pqpROBdIPvOG3F5ereDHNwoHBI2e50n1BDr1g==}
-
- '@rolldown/pluginutils@1.0.0-rc.16':
- resolution: {integrity: sha512-45+YtqxLYKDWQouLKCrpIZhke+nXxhsw+qAHVzHDVwttyBlHNBVs2K25rDXrZzhpTp9w1FlAlvweV1H++fdZoA==}
-
- '@standard-schema/spec@1.1.0':
- resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
-
- '@tybys/wasm-util@0.10.1':
- resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
-
- '@types/chai@5.2.3':
- resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
-
- '@types/deep-eql@4.0.2':
- resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
-
- '@types/estree@1.0.8':
- resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
-
- '@types/jsesc@2.5.1':
- resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
-
- '@types/node@25.6.0':
- resolution: {integrity: sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==}
-
- '@vitest/expect@4.1.4':
- resolution: {integrity: sha512-iPBpra+VDuXmBFI3FMKHSFXp3Gx5HfmSCE8X67Dn+bwephCnQCaB7qWK2ldHa+8ncN8hJU8VTMcxjPpyMkUjww==}
-
- '@vitest/mocker@4.1.4':
- resolution: {integrity: sha512-R9HTZBhW6yCSGbGQnDnH3QHfJxokKN4KB+Yvk9Q1le7eQNYwiCyKxmLmurSpFy6BzJanSLuEUDrD+j97Q+ZLPg==}
- peerDependencies:
- msw: ^2.4.9
- vite: ^6.0.0 || ^7.0.0 || ^8.0.0
- peerDependenciesMeta:
- msw:
- optional: true
- vite:
- optional: true
-
- '@vitest/pretty-format@4.1.4':
- resolution: {integrity: sha512-ddmDHU0gjEUyEVLxtZa7xamrpIefdEETu3nZjWtHeZX4QxqJ7tRxSteHVXJOcr8jhiLoGAhkK4WJ3WqBpjx42A==}
-
- '@vitest/runner@4.1.4':
- resolution: {integrity: sha512-xTp7VZ5aXP5ZJrn15UtJUWlx6qXLnGtF6jNxHepdPHpMfz/aVPx+htHtgcAL2mDXJgKhpoo2e9/hVJsIeFbytQ==}
-
- '@vitest/snapshot@4.1.4':
- resolution: {integrity: sha512-MCjCFgaS8aZz+m5nTcEcgk/xhWv0rEH4Yl53PPlMXOZ1/Ka2VcZU6CJ+MgYCZbcJvzGhQRjVrGQNZqkGPttIKw==}
-
- '@vitest/spy@4.1.4':
- resolution: {integrity: sha512-XxNdAsKW7C+FLydqFJLb5KhJtl3PGCMmYwFRfhvIgxJvLSXhhVI1zM8f1qD3Zg7RCjTSzDVyct6sghs9UEgBEQ==}
-
- '@vitest/utils@4.1.4':
- resolution: {integrity: sha512-13QMT+eysM5uVGa1rG4kegGYNp6cnQcsTc67ELFbhNLQO+vgsygtYJx2khvdt4gVQqSSpC/KT5FZZxUpP3Oatw==}
-
- ansis@4.2.0:
- resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
- engines: {node: '>=14'}
-
- assertion-error@2.0.1:
- resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
- engines: {node: '>=12'}
-
- ast-kit@3.0.0-beta.1:
- resolution: {integrity: sha512-trmleAnZ2PxN/loHWVhhx1qeOHSRXq4TDsBBxq3GqeJitfk3+jTQ+v/C1km/KYq9M7wKqCewMh+/NAvVH7m+bw==}
- engines: {node: '>=20.19.0'}
-
- birpc@4.0.0:
- resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
-
- cac@7.0.0:
- resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
- engines: {node: '>=20.19.0'}
-
- chai@6.2.2:
- resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
- engines: {node: '>=18'}
-
- convert-source-map@2.0.0:
- resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
-
- defu@6.1.7:
- resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
-
- detect-libc@2.1.2:
- resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
- engines: {node: '>=8'}
-
- dts-resolver@2.1.3:
- resolution: {integrity: sha512-bihc7jPC90VrosXNzK0LTE2cuLP6jr0Ro8jk+kMugHReJVLIpHz/xadeq3MhuwyO4TD4OA3L1Q8pBBFRc08Tsw==}
- engines: {node: '>=20.19.0'}
- peerDependencies:
- oxc-resolver: '>=11.0.0'
- peerDependenciesMeta:
- oxc-resolver:
- optional: true
-
- empathic@2.0.0:
- resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
- engines: {node: '>=14'}
-
- es-module-lexer@2.0.0:
- resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==}
-
- estree-walker@3.0.3:
- resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
-
- expect-type@1.3.0:
- resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
- engines: {node: '>=12.0.0'}
-
- fdir@6.5.0:
- resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
- engines: {node: '>=12.0.0'}
- peerDependencies:
- picomatch: ^3 || ^4
- peerDependenciesMeta:
- picomatch:
- optional: true
-
- fsevents@2.3.3:
- resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
- engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
- os: [darwin]
-
- get-tsconfig@4.14.0:
- resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==}
-
- hookable@6.1.1:
- resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
-
- import-without-cache@0.3.3:
- resolution: {integrity: sha512-bDxwDdF04gm550DfZHgffvlX+9kUlcz32UD0AeBTmVPFiWkrexF2XVmiuFFbDhiFuP8fQkrkvI2KdSNPYWAXkQ==}
- engines: {node: '>=20.19.0'}
-
- jsesc@3.1.0:
- resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
- engines: {node: '>=6'}
- hasBin: true
-
- lightningcss-android-arm64@1.32.0:
- resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [android]
-
- lightningcss-darwin-arm64@1.32.0:
- resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [darwin]
-
- lightningcss-darwin-x64@1.32.0:
- resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [darwin]
-
- lightningcss-freebsd-x64@1.32.0:
- resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [freebsd]
-
- lightningcss-linux-arm-gnueabihf@1.32.0:
- resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm]
- os: [linux]
-
- lightningcss-linux-arm64-gnu@1.32.0:
- resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [glibc]
-
- lightningcss-linux-arm64-musl@1.32.0:
- resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [linux]
- libc: [musl]
-
- lightningcss-linux-x64-gnu@1.32.0:
- resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [glibc]
-
- lightningcss-linux-x64-musl@1.32.0:
- resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [linux]
- libc: [musl]
-
- lightningcss-win32-arm64-msvc@1.32.0:
- resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
- engines: {node: '>= 12.0.0'}
- cpu: [arm64]
- os: [win32]
-
- lightningcss-win32-x64-msvc@1.32.0:
- resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
- engines: {node: '>= 12.0.0'}
- cpu: [x64]
- os: [win32]
-
- lightningcss@1.32.0:
- resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
- engines: {node: '>= 12.0.0'}
-
- magic-string@0.30.21:
- resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
-
- nanoid@3.3.11:
- resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
- engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
- hasBin: true
-
- obug@2.1.1:
- resolution: {integrity: sha512-uTqF9MuPraAQ+IsnPf366RG4cP9RtUi7MLO1N3KEc+wb0a6yKpeL0lmk2IB1jY5KHPAlTc6T/JRdC/YqxHNwkQ==}
-
- pathe@2.0.3:
- resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
-
- picocolors@1.1.1:
- resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
-
- picomatch@4.0.4:
- resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
- engines: {node: '>=12'}
-
- postcss@8.5.10:
- resolution: {integrity: sha512-pMMHxBOZKFU6HgAZ4eyGnwXF/EvPGGqUr0MnZ5+99485wwW41kW91A4LOGxSHhgugZmSChL5AlElNdwlNgcnLQ==}
- engines: {node: ^10 || ^12 || >=14}
-
- quansync@1.0.0:
- resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
-
- resolve-pkg-maps@1.0.0:
- resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
-
- rolldown-plugin-dts@0.23.2:
- resolution: {integrity: sha512-PbSqLawLgZBGcOGT3yqWBGn4cX+wh2nt5FuBGdcMHyOhoukmjbhYAl8NT9sE4U38Cm9tqLOIQeOrvzeayM0DLQ==}
- engines: {node: '>=20.19.0'}
- peerDependencies:
- '@ts-macro/tsc': ^0.3.6
- '@typescript/native-preview': '>=7.0.0-dev.20260325.1'
- rolldown: ^1.0.0-rc.12
- typescript: ^5.0.0 || ^6.0.0
- vue-tsc: ~3.2.0
- peerDependenciesMeta:
- '@ts-macro/tsc':
- optional: true
- '@typescript/native-preview':
- optional: true
- typescript:
- optional: true
- vue-tsc:
- optional: true
-
- rolldown@1.0.0-rc.15:
- resolution: {integrity: sha512-Ff31guA5zT6WjnGp0SXw76X6hzGRk/OQq2hE+1lcDe+lJdHSgnSX6nK3erbONHyCbpSj9a9E+uX/OvytZoWp2g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
-
- rolldown@1.0.0-rc.16:
- resolution: {integrity: sha512-rzi5WqKzEZw3SooTt7cgm4eqIoujPIyGcJNGFL7iPEuajQw7vxMHUkXylu4/vhCkJGXsgRmxqMKXUpT6FEgl0g==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
-
- semver@7.7.4:
- resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==}
- engines: {node: '>=10'}
- hasBin: true
-
- siginfo@2.0.0:
- resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
-
- source-map-js@1.2.1:
- resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
- engines: {node: '>=0.10.0'}
-
- stackback@0.0.2:
- resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
-
- std-env@4.1.0:
- resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==}
-
- tinybench@2.9.0:
- resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
-
- tinyexec@1.1.1:
- resolution: {integrity: sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==}
- engines: {node: '>=18'}
-
- tinyglobby@0.2.16:
- resolution: {integrity: sha512-pn99VhoACYR8nFHhxqix+uvsbXineAasWm5ojXoN8xEwK5Kd3/TrhNn1wByuD52UxWRLy8pu+kRMniEi6Eq9Zg==}
- engines: {node: '>=12.0.0'}
-
- tinyrainbow@3.1.0:
- resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
- engines: {node: '>=14.0.0'}
-
- tree-kill@1.2.2:
- resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
- hasBin: true
-
- tsdown@0.21.9:
- resolution: {integrity: sha512-tZPv2zMaMnjj9H9h0SDqpSXa9YWVZWHlG46DnSgNTFX6aq001MSI8kuBzJumr/u099nWj+1v5S7rhbnHk5jCHA==}
- engines: {node: '>=20.19.0'}
- hasBin: true
- peerDependencies:
- '@arethetypeswrong/core': ^0.18.1
- '@tsdown/css': 0.21.9
- '@tsdown/exe': 0.21.9
- '@vitejs/devtools': '*'
- publint: ^0.3.0
- typescript: ^5.0.0 || ^6.0.0
- unplugin-unused: ^0.5.0
- peerDependenciesMeta:
- '@arethetypeswrong/core':
- optional: true
- '@tsdown/css':
- optional: true
- '@tsdown/exe':
- optional: true
- '@vitejs/devtools':
- optional: true
- publint:
- optional: true
- typescript:
- optional: true
- unplugin-unused:
- optional: true
-
- tslib@2.8.1:
- resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
-
- typescript@6.0.3:
- resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
- engines: {node: '>=14.17'}
- hasBin: true
-
- unconfig-core@7.5.0:
- resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
-
- undici-types@7.19.2:
- resolution: {integrity: sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==}
-
- unrun@0.2.36:
- resolution: {integrity: sha512-ICAGv44LHSKjCdI4B4rk99lJLHXBweutO4MUwu3cavMlYtXID0Tn5e1Kwe/Uj6BSAuHHXfi1JheFVCYhcXHfAg==}
- engines: {node: '>=20.19.0'}
- hasBin: true
- peerDependencies:
- synckit: ^0.11.11
- peerDependenciesMeta:
- synckit:
- optional: true
-
- vite@8.0.8:
- resolution: {integrity: sha512-dbU7/iLVa8KZALJyLOBOQ88nOXtNG8vxKuOT4I2mD+Ya70KPceF4IAmDsmU0h1Qsn5bPrvsY9HJstCRh3hG6Uw==}
- engines: {node: ^20.19.0 || >=22.12.0}
- hasBin: true
- peerDependencies:
- '@types/node': ^20.19.0 || >=22.12.0
- '@vitejs/devtools': ^0.1.0
- esbuild: ^0.27.0 || ^0.28.0
- jiti: '>=1.21.0'
- less: ^4.0.0
- sass: ^1.70.0
- sass-embedded: ^1.70.0
- stylus: '>=0.54.8'
- sugarss: ^5.0.0
- terser: ^5.16.0
- tsx: ^4.8.1
- yaml: ^2.4.2
- peerDependenciesMeta:
- '@types/node':
- optional: true
- '@vitejs/devtools':
- optional: true
- esbuild:
- optional: true
- jiti:
- optional: true
- less:
- optional: true
- sass:
- optional: true
- sass-embedded:
- optional: true
- stylus:
- optional: true
- sugarss:
- optional: true
- terser:
- optional: true
- tsx:
- optional: true
- yaml:
- optional: true
-
- vitest@4.1.4:
- resolution: {integrity: sha512-tFuJqTxKb8AvfyqMfnavXdzfy3h3sWZRWwfluGbkeR7n0HUev+FmNgZ8SDrRBTVrVCjgH5cA21qGbCffMNtWvg==}
- 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.1.4
- '@vitest/browser-preview': 4.1.4
- '@vitest/browser-webdriverio': 4.1.4
- '@vitest/coverage-istanbul': 4.1.4
- '@vitest/coverage-v8': 4.1.4
- '@vitest/ui': 4.1.4
- happy-dom: '*'
- jsdom: '*'
- vite: ^6.0.0 || ^7.0.0 || ^8.0.0
- peerDependenciesMeta:
- '@edge-runtime/vm':
- optional: true
- '@opentelemetry/api':
- optional: true
- '@types/node':
- optional: true
- '@vitest/browser-playwright':
- optional: true
- '@vitest/browser-preview':
- optional: true
- '@vitest/browser-webdriverio':
- optional: true
- '@vitest/coverage-istanbul':
- optional: true
- '@vitest/coverage-v8':
- optional: true
- '@vitest/ui':
- optional: true
- happy-dom:
- optional: true
- jsdom:
- optional: true
-
- why-is-node-running@2.3.0:
- resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
- engines: {node: '>=8'}
- hasBin: true
-
-snapshots:
-
- '@babel/generator@8.0.0-rc.3':
- dependencies:
- '@babel/parser': 8.0.0-rc.3
- '@babel/types': 8.0.0-rc.3
- '@jridgewell/gen-mapping': 0.3.13
- '@jridgewell/trace-mapping': 0.3.31
- '@types/jsesc': 2.5.1
- jsesc: 3.1.0
-
- '@babel/helper-string-parser@8.0.0-rc.3': {}
-
- '@babel/helper-validator-identifier@8.0.0-rc.3': {}
-
- '@babel/parser@8.0.0-rc.3':
- dependencies:
- '@babel/types': 8.0.0-rc.3
-
- '@babel/types@8.0.0-rc.3':
- dependencies:
- '@babel/helper-string-parser': 8.0.0-rc.3
- '@babel/helper-validator-identifier': 8.0.0-rc.3
-
- '@emnapi/core@1.9.2':
- dependencies:
- '@emnapi/wasi-threads': 1.2.1
- tslib: 2.8.1
- optional: true
-
- '@emnapi/runtime@1.9.2':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@emnapi/wasi-threads@1.2.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@jridgewell/gen-mapping@0.3.13':
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
- '@jridgewell/trace-mapping': 0.3.31
-
- '@jridgewell/resolve-uri@3.1.2': {}
-
- '@jridgewell/sourcemap-codec@1.5.5': {}
-
- '@jridgewell/trace-mapping@0.3.31':
- dependencies:
- '@jridgewell/resolve-uri': 3.1.2
- '@jridgewell/sourcemap-codec': 1.5.5
-
- '@napi-rs/wasm-runtime@1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
- dependencies:
- '@emnapi/core': 1.9.2
- '@emnapi/runtime': 1.9.2
- '@tybys/wasm-util': 0.10.1
- optional: true
-
- '@oxc-project/types@0.124.0': {}
-
- '@oxc-project/types@0.126.0': {}
-
- '@quansync/fs@1.0.0':
- dependencies:
- quansync: 1.0.0
-
- '@rolldown/binding-android-arm64@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-android-arm64@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-darwin-arm64@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-darwin-arm64@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-darwin-x64@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-darwin-x64@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-freebsd-x64@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-freebsd-x64@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-linux-arm-gnueabihf@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-linux-arm64-gnu@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-linux-arm64-musl@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-linux-ppc64-gnu@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-linux-s390x-gnu@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-linux-x64-gnu@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-linux-x64-musl@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-openharmony-arm64@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.15':
- dependencies:
- '@emnapi/core': 1.9.2
- '@emnapi/runtime': 1.9.2
- '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- optional: true
-
- '@rolldown/binding-wasm32-wasi@1.0.0-rc.16':
- dependencies:
- '@emnapi/core': 1.9.2
- '@emnapi/runtime': 1.9.2
- '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
- optional: true
-
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-win32-arm64-msvc@1.0.0-rc.16':
- optional: true
-
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.15':
- optional: true
-
- '@rolldown/binding-win32-x64-msvc@1.0.0-rc.16':
- optional: true
-
- '@rolldown/pluginutils@1.0.0-rc.15': {}
-
- '@rolldown/pluginutils@1.0.0-rc.16': {}
-
- '@standard-schema/spec@1.1.0': {}
-
- '@tybys/wasm-util@0.10.1':
- dependencies:
- tslib: 2.8.1
- optional: true
-
- '@types/chai@5.2.3':
- dependencies:
- '@types/deep-eql': 4.0.2
- assertion-error: 2.0.1
-
- '@types/deep-eql@4.0.2': {}
-
- '@types/estree@1.0.8': {}
-
- '@types/jsesc@2.5.1': {}
-
- '@types/node@25.6.0':
- dependencies:
- undici-types: 7.19.2
-
- '@vitest/expect@4.1.4':
- dependencies:
- '@standard-schema/spec': 1.1.0
- '@types/chai': 5.2.3
- '@vitest/spy': 4.1.4
- '@vitest/utils': 4.1.4
- chai: 6.2.2
- tinyrainbow: 3.1.0
-
- '@vitest/mocker@4.1.4(vite@8.0.8(@types/node@25.6.0))':
- dependencies:
- '@vitest/spy': 4.1.4
- estree-walker: 3.0.3
- magic-string: 0.30.21
- optionalDependencies:
- vite: 8.0.8(@types/node@25.6.0)
-
- '@vitest/pretty-format@4.1.4':
- dependencies:
- tinyrainbow: 3.1.0
-
- '@vitest/runner@4.1.4':
- dependencies:
- '@vitest/utils': 4.1.4
- pathe: 2.0.3
-
- '@vitest/snapshot@4.1.4':
- dependencies:
- '@vitest/pretty-format': 4.1.4
- '@vitest/utils': 4.1.4
- magic-string: 0.30.21
- pathe: 2.0.3
-
- '@vitest/spy@4.1.4': {}
-
- '@vitest/utils@4.1.4':
- dependencies:
- '@vitest/pretty-format': 4.1.4
- convert-source-map: 2.0.0
- tinyrainbow: 3.1.0
-
- ansis@4.2.0: {}
-
- assertion-error@2.0.1: {}
-
- ast-kit@3.0.0-beta.1:
- dependencies:
- '@babel/parser': 8.0.0-rc.3
- estree-walker: 3.0.3
- pathe: 2.0.3
-
- birpc@4.0.0: {}
-
- cac@7.0.0: {}
-
- chai@6.2.2: {}
-
- convert-source-map@2.0.0: {}
-
- defu@6.1.7: {}
-
- detect-libc@2.1.2: {}
-
- dts-resolver@2.1.3: {}
-
- empathic@2.0.0: {}
-
- es-module-lexer@2.0.0: {}
-
- estree-walker@3.0.3:
- dependencies:
- '@types/estree': 1.0.8
-
- expect-type@1.3.0: {}
-
- fdir@6.5.0(picomatch@4.0.4):
- optionalDependencies:
- picomatch: 4.0.4
-
- fsevents@2.3.3:
- optional: true
-
- get-tsconfig@4.14.0:
- dependencies:
- resolve-pkg-maps: 1.0.0
-
- hookable@6.1.1: {}
-
- import-without-cache@0.3.3: {}
-
- jsesc@3.1.0: {}
-
- lightningcss-android-arm64@1.32.0:
- optional: true
-
- lightningcss-darwin-arm64@1.32.0:
- optional: true
-
- lightningcss-darwin-x64@1.32.0:
- optional: true
-
- lightningcss-freebsd-x64@1.32.0:
- optional: true
-
- lightningcss-linux-arm-gnueabihf@1.32.0:
- optional: true
-
- lightningcss-linux-arm64-gnu@1.32.0:
- optional: true
-
- lightningcss-linux-arm64-musl@1.32.0:
- optional: true
-
- lightningcss-linux-x64-gnu@1.32.0:
- optional: true
-
- lightningcss-linux-x64-musl@1.32.0:
- optional: true
-
- lightningcss-win32-arm64-msvc@1.32.0:
- optional: true
-
- lightningcss-win32-x64-msvc@1.32.0:
- optional: true
-
- lightningcss@1.32.0:
- dependencies:
- detect-libc: 2.1.2
- optionalDependencies:
- lightningcss-android-arm64: 1.32.0
- lightningcss-darwin-arm64: 1.32.0
- lightningcss-darwin-x64: 1.32.0
- lightningcss-freebsd-x64: 1.32.0
- lightningcss-linux-arm-gnueabihf: 1.32.0
- lightningcss-linux-arm64-gnu: 1.32.0
- lightningcss-linux-arm64-musl: 1.32.0
- lightningcss-linux-x64-gnu: 1.32.0
- lightningcss-linux-x64-musl: 1.32.0
- lightningcss-win32-arm64-msvc: 1.32.0
- lightningcss-win32-x64-msvc: 1.32.0
-
- magic-string@0.30.21:
- dependencies:
- '@jridgewell/sourcemap-codec': 1.5.5
-
- nanoid@3.3.11: {}
-
- obug@2.1.1: {}
-
- pathe@2.0.3: {}
-
- picocolors@1.1.1: {}
-
- picomatch@4.0.4: {}
-
- postcss@8.5.10:
- dependencies:
- nanoid: 3.3.11
- picocolors: 1.1.1
- source-map-js: 1.2.1
-
- quansync@1.0.0: {}
-
- resolve-pkg-maps@1.0.0: {}
-
- rolldown-plugin-dts@0.23.2(rolldown@1.0.0-rc.16)(typescript@6.0.3):
- dependencies:
- '@babel/generator': 8.0.0-rc.3
- '@babel/helper-validator-identifier': 8.0.0-rc.3
- '@babel/parser': 8.0.0-rc.3
- '@babel/types': 8.0.0-rc.3
- ast-kit: 3.0.0-beta.1
- birpc: 4.0.0
- dts-resolver: 2.1.3
- get-tsconfig: 4.14.0
- obug: 2.1.1
- picomatch: 4.0.4
- rolldown: 1.0.0-rc.16
- optionalDependencies:
- typescript: 6.0.3
- transitivePeerDependencies:
- - oxc-resolver
-
- rolldown@1.0.0-rc.15:
- dependencies:
- '@oxc-project/types': 0.124.0
- '@rolldown/pluginutils': 1.0.0-rc.15
- optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0-rc.15
- '@rolldown/binding-darwin-arm64': 1.0.0-rc.15
- '@rolldown/binding-darwin-x64': 1.0.0-rc.15
- '@rolldown/binding-freebsd-x64': 1.0.0-rc.15
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.15
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.15
- '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.15
- '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.15
- '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.15
- '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.15
- '@rolldown/binding-linux-x64-musl': 1.0.0-rc.15
- '@rolldown/binding-openharmony-arm64': 1.0.0-rc.15
- '@rolldown/binding-wasm32-wasi': 1.0.0-rc.15
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.15
- '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.15
-
- rolldown@1.0.0-rc.16:
- dependencies:
- '@oxc-project/types': 0.126.0
- '@rolldown/pluginutils': 1.0.0-rc.16
- optionalDependencies:
- '@rolldown/binding-android-arm64': 1.0.0-rc.16
- '@rolldown/binding-darwin-arm64': 1.0.0-rc.16
- '@rolldown/binding-darwin-x64': 1.0.0-rc.16
- '@rolldown/binding-freebsd-x64': 1.0.0-rc.16
- '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-rc.16
- '@rolldown/binding-linux-arm64-gnu': 1.0.0-rc.16
- '@rolldown/binding-linux-arm64-musl': 1.0.0-rc.16
- '@rolldown/binding-linux-ppc64-gnu': 1.0.0-rc.16
- '@rolldown/binding-linux-s390x-gnu': 1.0.0-rc.16
- '@rolldown/binding-linux-x64-gnu': 1.0.0-rc.16
- '@rolldown/binding-linux-x64-musl': 1.0.0-rc.16
- '@rolldown/binding-openharmony-arm64': 1.0.0-rc.16
- '@rolldown/binding-wasm32-wasi': 1.0.0-rc.16
- '@rolldown/binding-win32-arm64-msvc': 1.0.0-rc.16
- '@rolldown/binding-win32-x64-msvc': 1.0.0-rc.16
-
- semver@7.7.4: {}
-
- siginfo@2.0.0: {}
-
- source-map-js@1.2.1: {}
-
- stackback@0.0.2: {}
-
- std-env@4.1.0: {}
-
- tinybench@2.9.0: {}
-
- tinyexec@1.1.1: {}
-
- tinyglobby@0.2.16:
- dependencies:
- fdir: 6.5.0(picomatch@4.0.4)
- picomatch: 4.0.4
-
- tinyrainbow@3.1.0: {}
-
- tree-kill@1.2.2: {}
-
- tsdown@0.21.9(typescript@6.0.3):
- dependencies:
- ansis: 4.2.0
- cac: 7.0.0
- defu: 6.1.7
- empathic: 2.0.0
- hookable: 6.1.1
- import-without-cache: 0.3.3
- obug: 2.1.1
- picomatch: 4.0.4
- rolldown: 1.0.0-rc.16
- rolldown-plugin-dts: 0.23.2(rolldown@1.0.0-rc.16)(typescript@6.0.3)
- semver: 7.7.4
- tinyexec: 1.1.1
- tinyglobby: 0.2.16
- tree-kill: 1.2.2
- unconfig-core: 7.5.0
- unrun: 0.2.36
- optionalDependencies:
- typescript: 6.0.3
- transitivePeerDependencies:
- - '@ts-macro/tsc'
- - '@typescript/native-preview'
- - oxc-resolver
- - synckit
- - vue-tsc
-
- tslib@2.8.1:
- optional: true
-
- typescript@6.0.3: {}
-
- unconfig-core@7.5.0:
- dependencies:
- '@quansync/fs': 1.0.0
- quansync: 1.0.0
-
- undici-types@7.19.2: {}
-
- unrun@0.2.36:
- dependencies:
- rolldown: 1.0.0-rc.16
-
- vite@8.0.8(@types/node@25.6.0):
- dependencies:
- lightningcss: 1.32.0
- picomatch: 4.0.4
- postcss: 8.5.10
- rolldown: 1.0.0-rc.15
- tinyglobby: 0.2.16
- optionalDependencies:
- '@types/node': 25.6.0
- fsevents: 2.3.3
-
- vitest@4.1.4(@types/node@25.6.0)(vite@8.0.8(@types/node@25.6.0)):
- dependencies:
- '@vitest/expect': 4.1.4
- '@vitest/mocker': 4.1.4(vite@8.0.8(@types/node@25.6.0))
- '@vitest/pretty-format': 4.1.4
- '@vitest/runner': 4.1.4
- '@vitest/snapshot': 4.1.4
- '@vitest/spy': 4.1.4
- '@vitest/utils': 4.1.4
- es-module-lexer: 2.0.0
- expect-type: 1.3.0
- magic-string: 0.30.21
- obug: 2.1.1
- pathe: 2.0.3
- picomatch: 4.0.4
- std-env: 4.1.0
- tinybench: 2.9.0
- tinyexec: 1.1.1
- tinyglobby: 0.2.16
- tinyrainbow: 3.1.0
- vite: 8.0.8(@types/node@25.6.0)
- why-is-node-running: 2.3.0
- optionalDependencies:
- '@types/node': 25.6.0
- transitivePeerDependencies:
- - msw
-
- why-is-node-running@2.3.0:
- dependencies:
- siginfo: 2.0.0
- stackback: 0.0.2
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index b8f96313..e11f9e1a 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -16,6 +16,9 @@ importers:
'@tailwindcss/vite':
specifier: ^4.2.2
version: 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ alienmark:
+ specifier: workspace:*
+ version: link:../../packages/alienmark
nuxt:
specifier: ^4.4.2
version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3)
From c6ff80c37b6f92c8522b67e113eedd56d4b1e5bf Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 25 Apr 2026 14:06:18 +1000
Subject: [PATCH 31/51] chore: update frontend and alienmark dependencies
---
.gitignore | 1 +
apps/frontend/package.json | 12 ++++++------
packages/alienmark/package.json | 4 ++--
pnpm-lock.yaml | 16 ++++++++--------
4 files changed, 17 insertions(+), 16 deletions(-)
diff --git a/.gitignore b/.gitignore
index 9d018783..92558663 100644
--- a/.gitignore
+++ b/.gitignore
@@ -39,6 +39,7 @@ staticfiles/
# Frontend generated files
node_modules/
+.pnpm-store/
dist/
dist-ssr/
coverage/
diff --git a/apps/frontend/package.json b/apps/frontend/package.json
index 69df48f0..107bd6e7 100644
--- a/apps/frontend/package.json
+++ b/apps/frontend/package.json
@@ -11,18 +11,18 @@
},
"dependencies": {
"@pinia/nuxt": "^0.11.3",
- "@tailwindcss/vite": "^4.2.2",
+ "@tailwindcss/vite": "^4.2.4",
"alienmark": "workspace:*",
"nuxt": "^4.4.2",
"pinia": "^3.0.4",
- "tailwindcss": "^4.2.2",
- "vue": "^3.5.31",
- "vue-router": "^5.0.4"
+ "tailwindcss": "^4.2.4",
+ "vue": "^3.5.33",
+ "vue-router": "^5.0.6"
},
"packageManager": "pnpm@10.33.0+sha512.10568bb4a6afb58c9eb3630da90cc9516417abebd3fabbe6739f0ae795728da1491e9db5a544c76ad8eb7570f5c4bb3d6c637b2cb41bfdcdb47fa823c8649319",
"devDependencies": {
"@nuxt/eslint": "^1.15.2",
- "eslint": "^10.2.0",
- "typescript": "^6.0.2"
+ "eslint": "^10.2.1",
+ "typescript": "^6.0.3"
}
}
diff --git a/packages/alienmark/package.json b/packages/alienmark/package.json
index 1bfcf6d9..009a43ff 100644
--- a/packages/alienmark/package.json
+++ b/packages/alienmark/package.json
@@ -20,8 +20,8 @@
"packageManager": "pnpm@10.33.0",
"devDependencies": {
"@types/node": "^25.6.0",
- "tsdown": "^0.21.9",
+ "tsdown": "^0.21.10",
"typescript": "^6.0.3",
- "vitest": "^4.1.4"
+ "vitest": "^4.1.5"
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index e11f9e1a..98e51d56 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -14,7 +14,7 @@ importers:
specifier: ^0.11.3
version: 0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))
'@tailwindcss/vite':
- specifier: ^4.2.2
+ specifier: ^4.2.4
version: 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
alienmark:
specifier: workspace:*
@@ -26,23 +26,23 @@ importers:
specifier: ^3.0.4
version: 3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))
tailwindcss:
- specifier: ^4.2.2
+ specifier: ^4.2.4
version: 4.2.4
vue:
- specifier: ^3.5.31
+ specifier: ^3.5.33
version: 3.5.33(typescript@6.0.3)
vue-router:
- specifier: ^5.0.4
+ specifier: ^5.0.6
version: 5.0.6(@vue/compiler-sfc@3.5.33)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(vue@3.5.33(typescript@6.0.3))
devDependencies:
'@nuxt/eslint':
specifier: ^1.15.2
version: 1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
eslint:
- specifier: ^10.2.0
+ specifier: ^10.2.1
version: 10.2.1(jiti@2.6.1)
typescript:
- specifier: ^6.0.2
+ specifier: ^6.0.3
version: 6.0.3
packages/alienmark:
@@ -51,13 +51,13 @@ importers:
specifier: ^25.6.0
version: 25.6.0
tsdown:
- specifier: ^0.21.9
+ specifier: ^0.21.10
version: 0.21.10(typescript@6.0.3)
typescript:
specifier: ^6.0.3
version: 6.0.3
vitest:
- specifier: ^4.1.4
+ specifier: ^4.1.5
version: 4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
packages:
From ef79d65cd5a5cfd98777c443be5632a7ec13b010 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 25 Apr 2026 15:46:56 +1000
Subject: [PATCH 32/51] fix: fix backend task registry typo
---
apps/backend/tasks/periodic_tasks_registry.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/apps/backend/tasks/periodic_tasks_registry.py b/apps/backend/tasks/periodic_tasks_registry.py
index f628438e..c8cb7fec 100644
--- a/apps/backend/tasks/periodic_tasks_registry.py
+++ b/apps/backend/tasks/periodic_tasks_registry.py
@@ -14,7 +14,7 @@
},
{
"name": "clear expired sessions",
- "task": "users.tasks.clear_expired_sessions",
+ "task": "users.tasks.clean_expired_sessions",
"queue_name": "maintenance",
"schedule": {
"every": 1,
From ab18a77ff2576b0020b791052886ba27438659f7 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Tue, 28 Apr 2026 10:48:10 +1000
Subject: [PATCH 33/51] chore: remove drf-spectacular
---
apps/backend/backend/settings/base.py | 1 -
apps/backend/backend/settings/test.py | 1 -
apps/backend/openapi.yaml | 1292 -------------------------
apps/backend/pyproject.toml | 1 -
apps/backend/uv.lock | 149 ---
5 files changed, 1444 deletions(-)
delete mode 100644 apps/backend/openapi.yaml
diff --git a/apps/backend/backend/settings/base.py b/apps/backend/backend/settings/base.py
index bfe13eb7..2159943f 100644
--- a/apps/backend/backend/settings/base.py
+++ b/apps/backend/backend/settings/base.py
@@ -165,7 +165,6 @@
"django_filters",
"django_rq",
"django_tasks_rq",
- 'drf_spectacular',
]
INTERNAL_IPS = []
diff --git a/apps/backend/backend/settings/test.py b/apps/backend/backend/settings/test.py
index 634cdb22..7a33d2fd 100644
--- a/apps/backend/backend/settings/test.py
+++ b/apps/backend/backend/settings/test.py
@@ -31,7 +31,6 @@
"django_filters",
"django_rq",
"django_tasks_rq",
- "drf_spectacular",
]
AUTH_USER_MODEL = "users.User"
diff --git a/apps/backend/openapi.yaml b/apps/backend/openapi.yaml
deleted file mode 100644
index 8025df3e..00000000
--- a/apps/backend/openapi.yaml
+++ /dev/null
@@ -1,1292 +0,0 @@
-openapi: 3.0.3
-info:
- title: AlienCommons
- version: 1.0.0
-paths:
- /api/v1/article_events/:
- get:
- operationId: article_events_list
- description: |-
- A viewset that provides default `list()` and `retrieve()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ReadOnlyModelViewSet.
- parameters:
- - name: page
- required: false
- in: query
- description: A page number within the paginated result set.
- schema:
- type: integer
- tags:
- - article_events
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PaginatedArticleEventList'
- description: ''
- /api/v1/article_events/{id}/:
- get:
- operationId: article_events_retrieve
- description: |-
- A viewset that provides default `list()` and `retrieve()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ReadOnlyModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this article event.
- required: true
- tags:
- - article_events
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ArticleEvent'
- description: ''
- /api/v1/article_snapshots/:
- get:
- operationId: article_snapshots_list
- description: |-
- A viewset that provides default `list()` and `retrieve()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ReadOnlyModelViewSet.
- parameters:
- - name: page
- required: false
- in: query
- description: A page number within the paginated result set.
- schema:
- type: integer
- tags:
- - article_snapshots
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PaginatedArticleSnapshotList'
- description: ''
- /api/v1/article_snapshots/{id}/:
- get:
- operationId: article_snapshots_retrieve
- description: |-
- A viewset that provides default `list()` and `retrieve()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ReadOnlyModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this article snapshot.
- required: true
- tags:
- - article_snapshots
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ArticleSnapshot'
- description: ''
- /api/v1/article_snapshots/pending_ones/:
- get:
- operationId: article_snapshots_pending_ones_retrieve
- description: Return not moderated article snapshots
- tags:
- - article_snapshots
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ArticleSnapshot'
- description: ''
- /api/v1/auth/login/:
- post:
- operationId: auth_login_create
- description: |-
- A viewset that collects 2 API endpoints which relates to user module
-
- Login, Refresh Login Token
- tags:
- - auth
- security:
- - jwtAuth: []
- - {}
- responses:
- '200':
- description: No response body
- /api/v1/auth/refresh_login_token/:
- post:
- operationId: auth_refresh_login_token_create
- description: |-
- A viewset that collects 2 API endpoints which relates to user module
-
- Login, Refresh Login Token
- tags:
- - auth
- security:
- - jwtAuth: []
- - {}
- responses:
- '200':
- description: No response body
- /api/v1/log/collect/:
- post:
- operationId: log_collect_create
- tags:
- - log
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ListFELog'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/ListFELog'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/ListFELog'
- required: true
- security:
- - jwtAuth: []
- - {}
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ListFELog'
- description: ''
- /api/v1/pages/youtube_channel_snapshot/:
- get:
- operationId: pages_youtube_channel_snapshot_retrieve
- description: Return YouTube Channel Snapshot
- tags:
- - pages
- security:
- - jwtAuth: []
- - {}
- responses:
- '200':
- description: No response body
- /api/v1/profiles/:
- get:
- operationId: profiles_list
- description: |-
- A viewset that collects 4 API endpoints which relates to user module
-
- Register, User List, Profile Info, Update (username, signature, avatar)
- parameters:
- - name: page
- required: false
- in: query
- description: A page number within the paginated result set.
- schema:
- type: integer
- tags:
- - profiles
- security:
- - jwtAuth: []
- - {}
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PaginatedProfileListList'
- description: ''
- post:
- operationId: profiles_create
- description: |-
- A viewset that collects 4 API endpoints which relates to user module
-
- Register, User List, Profile Info, Update (username, signature, avatar)
- tags:
- - profiles
- requestBody:
- content:
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/ProfileCreate'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/ProfileCreate'
- application/json:
- schema:
- $ref: '#/components/schemas/ProfileCreate'
- required: true
- security:
- - jwtAuth: []
- - {}
- responses:
- '201':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ProfileCreate'
- description: ''
- /api/v1/profiles/{id}/:
- get:
- operationId: profiles_retrieve
- description: |-
- A viewset that collects 4 API endpoints which relates to user module
-
- Register, User List, Profile Info, Update (username, signature, avatar)
- parameters:
- - in: path
- name: id
- schema:
- type: integer
- description: A unique integer value identifying this user.
- required: true
- tags:
- - profiles
- security:
- - jwtAuth: []
- - {}
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/ProfileRetrieve'
- description: ''
- /api/v1/profiles/me/:
- get:
- operationId: profiles_me_retrieve
- description: |-
- A viewset that collects 4 API endpoints which relates to user module
-
- Register, User List, Profile Info, Update (username, signature, avatar)
- tags:
- - profiles
- security:
- - jwtAuth: []
- responses:
- '200':
- description: No response body
- patch:
- operationId: profiles_me_partial_update
- description: |-
- A viewset that collects 4 API endpoints which relates to user module
-
- Register, User List, Profile Info, Update (username, signature, avatar)
- tags:
- - profiles
- security:
- - jwtAuth: []
- responses:
- '200':
- description: No response body
- /api/v1/published_articles/:
- get:
- operationId: published_articles_list
- description: |-
- A viewset that provides default `list()` and `retrieve()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ReadOnlyModelViewSet.
- parameters:
- - name: page
- required: false
- in: query
- description: A page number within the paginated result set.
- schema:
- type: integer
- tags:
- - published_articles
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PaginatedPublishedArticleList'
- description: ''
- /api/v1/published_articles/{id}/:
- get:
- operationId: published_articles_retrieve
- description: |-
- A viewset that provides default `list()` and `retrieve()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ReadOnlyModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this published article.
- required: true
- tags:
- - published_articles
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PublishedArticle'
- description: ''
- /api/v1/source_articles/:
- get:
- operationId: source_articles_list
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: query
- name: article_status
- schema:
- type: integer
- - name: page
- required: false
- in: query
- description: A page number within the paginated result set.
- schema:
- type: integer
- - in: query
- name: status
- schema:
- type: integer
- enum:
- - 0
- - 1
- - 2
- - 3
- - 4
- - 5
- description: |-
- * `0` - Draft
- * `1` - Pending
- * `2` - Published
- * `3` - Rejected
- * `4` - Unpublished
- * `5` - Deleted
- tags:
- - source_articles
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PaginatedSourceArticleReadList'
- description: ''
- post:
- operationId: source_articles_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- security:
- - jwtAuth: []
- responses:
- '201':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- description: ''
- /api/v1/source_articles/{id}/:
- get:
- operationId: source_articles_retrieve
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
- put:
- operationId: source_articles_update
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- description: ''
- patch:
- operationId: source_articles_partial_update
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PatchedSourceArticleWrite'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/PatchedSourceArticleWrite'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/PatchedSourceArticleWrite'
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleWrite'
- description: ''
- delete:
- operationId: source_articles_destroy
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- security:
- - jwtAuth: []
- responses:
- '204':
- description: No response body
- /api/v1/source_articles/{id}/approve/:
- post:
- operationId: source_articles_approve_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- required: true
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
- /api/v1/source_articles/{id}/reject/:
- post:
- operationId: source_articles_reject_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- required: true
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
- /api/v1/source_articles/{id}/submit/:
- post:
- operationId: source_articles_submit_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- required: true
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
- /api/v1/source_articles/{id}/trash/:
- post:
- operationId: source_articles_trash_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- required: true
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
- /api/v1/source_articles/{id}/unpublish/:
- post:
- operationId: source_articles_unpublish_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- required: true
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
- /api/v1/source_articles/{id}/withdraw/:
- post:
- operationId: source_articles_withdraw_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- parameters:
- - in: path
- name: id
- schema:
- type: string
- format: uuid
- description: A UUID string identifying this source article.
- required: true
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- required: true
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
- /api/v1/source_articles/images/:
- post:
- operationId: source_articles_images_create
- description: |-
- A viewset that provides default `create()`, `retrieve()`, `update()`,
- `partial_update()`, `destroy()` and `list()` actions.
- Responses are wrapped with format_api_response().
- This viewset should always be used to replace drf ModelViewSet.
- tags:
- - source_articles
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- application/x-www-form-urlencoded:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- multipart/form-data:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- required: true
- security:
- - jwtAuth: []
- responses:
- '200':
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/SourceArticleRead'
- description: ''
-components:
- schemas:
- ArticleEvent:
- type: object
- description: Serializer for article moderation events. All fields are ready-only
- except annotation.
- properties:
- id:
- type: string
- format: uuid
- readOnly: true
- annotation:
- type: string
- readOnly: true
- nullable: true
- event_type:
- allOf:
- - $ref: '#/components/schemas/EventTypeEnum'
- readOnly: true
- created_at:
- type: string
- format: date-time
- readOnly: true
- article:
- type: string
- format: uuid
- readOnly: true
- snapshot:
- type: string
- format: uuid
- readOnly: true
- nullable: true
- actor:
- type: integer
- readOnly: true
- nullable: true
- required:
- - actor
- - annotation
- - article
- - created_at
- - event_type
- - id
- - snapshot
- ArticleSnapshot:
- type: object
- description: Serializer for article snapshots. All fields are ready-only.
- properties:
- id:
- type: string
- format: uuid
- readOnly: true
- moderation_status_display:
- type: string
- readOnly: true
- article_id:
- type: string
- readOnly: true
- title:
- type: string
- readOnly: true
- content:
- readOnly: true
- content_hash:
- type: string
- readOnly: true
- created_at:
- type: string
- format: date-time
- readOnly: true
- moderation_status:
- allOf:
- - $ref: '#/components/schemas/ModerationStatusEnum'
- readOnly: true
- article:
- type: string
- format: uuid
- readOnly: true
- required:
- - article
- - article_id
- - content
- - content_hash
- - created_at
- - id
- - moderation_status
- - moderation_status_display
- - title
- EventTypeEnum:
- enum:
- - 1
- - 2
- - 3
- - 4
- - 5
- - 6
- type: integer
- description: |-
- * `1` - Submit
- * `2` - Withdraw
- * `3` - Approve
- * `4` - Reject
- * `5` - Unpublish
- * `6` - Delete
- LevelEnum:
- enum:
- - debug
- - info
- - warn
- - error
- type: string
- description: |-
- * `debug` - DEBUG
- * `info` - INFO
- * `warn` - WARN
- * `error` - ERROR
- ListFELog:
- type: object
- properties:
- logs:
- type: array
- items:
- $ref: '#/components/schemas/SingleFELog'
- required:
- - logs
- ModerationStatusEnum:
- enum:
- - 1
- - 2
- - 3
- - 4
- type: integer
- description: |-
- * `1` - Pending
- * `2` - Withdrawn
- * `3` - Approved
- * `4` - Rejected
- PaginatedArticleEventList:
- type: object
- required:
- - count
- - results
- properties:
- count:
- type: integer
- example: 123
- next:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=4
- previous:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=2
- results:
- type: array
- items:
- $ref: '#/components/schemas/ArticleEvent'
- PaginatedArticleSnapshotList:
- type: object
- required:
- - count
- - results
- properties:
- count:
- type: integer
- example: 123
- next:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=4
- previous:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=2
- results:
- type: array
- items:
- $ref: '#/components/schemas/ArticleSnapshot'
- PaginatedProfileListList:
- type: object
- required:
- - count
- - results
- properties:
- count:
- type: integer
- example: 123
- next:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=4
- previous:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=2
- results:
- type: array
- items:
- $ref: '#/components/schemas/ProfileList'
- PaginatedPublishedArticleList:
- type: object
- required:
- - count
- - results
- properties:
- count:
- type: integer
- example: 123
- next:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=4
- previous:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=2
- results:
- type: array
- items:
- $ref: '#/components/schemas/PublishedArticle'
- PaginatedSourceArticleReadList:
- type: object
- required:
- - count
- - results
- properties:
- count:
- type: integer
- example: 123
- next:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=4
- previous:
- type: string
- nullable: true
- format: uri
- example: http://api.example.org/accounts/?page=2
- results:
- type: array
- items:
- $ref: '#/components/schemas/SourceArticleRead'
- PatchedSourceArticleWrite:
- type: object
- description: Serializer for the author, can be used to create/update
- properties:
- title:
- type: string
- maxLength: 60
- minLength: 5
- content: {}
- ProfileCreate:
- type: object
- description: Register a new user.
- properties:
- email:
- type: string
- format: email
- password:
- type: string
- writeOnly: true
- confirm_password:
- type: string
- writeOnly: true
- required:
- - confirm_password
- - email
- - password
- ProfileList:
- type: object
- description: List all user profiles
- properties:
- id:
- type: integer
- readOnly: true
- avatar:
- type: string
- format: uri
- readOnly: true
- username:
- type: string
- readOnly: true
- required:
- - avatar
- - id
- - username
- ProfileRetrieve:
- type: object
- description: Retrieve one user profile.
- properties:
- id:
- type: integer
- readOnly: true
- email:
- type: string
- format: email
- readOnly: true
- avatar:
- type: string
- format: uri
- readOnly: true
- signature:
- type: string
- readOnly: true
- username:
- type: string
- readOnly: true
- is_moderator:
- type: boolean
- readOnly: true
- date_joined:
- type: string
- format: date-time
- readOnly: true
- required:
- - avatar
- - date_joined
- - email
- - id
- - is_moderator
- - signature
- - username
- PublishedArticle:
- type: object
- description: Serializer for published articles. All fields are ready-only.
- properties:
- id:
- type: string
- format: uuid
- readOnly: true
- created_at:
- type: string
- format: date-time
- readOnly: true
- updated_at:
- type: string
- format: date-time
- readOnly: true
- title:
- type: string
- readOnly: true
- content:
- readOnly: true
- article:
- type: string
- format: uuid
- readOnly: true
- required:
- - article
- - content
- - created_at
- - id
- - title
- - updated_at
- SingleFELog:
- type: object
- properties:
- level:
- $ref: '#/components/schemas/LevelEnum'
- message:
- type: string
- extra:
- nullable: true
- timestamp:
- type: string
- format: date-time
- page:
- type: string
- maxLength: 255
- required:
- - level
- - message
- - page
- - timestamp
- SourceArticleRead:
- type: object
- description: Serializer for moderators
- properties:
- id:
- type: string
- format: uuid
- readOnly: true
- author_username:
- type: string
- status_display:
- type: string
- readOnly: true
- last_snapshot_id:
- type: string
- format: uuid
- published_version_id:
- type: string
- format: uuid
- created_at:
- type: string
- format: date-time
- readOnly: true
- updated_at:
- type: string
- format: date-time
- readOnly: true
- is_deleted:
- type: boolean
- readOnly: true
- title:
- type: string
- readOnly: true
- content:
- readOnly: true
- status:
- allOf:
- - $ref: '#/components/schemas/StatusEnum'
- readOnly: true
- last_moderation_at:
- type: string
- format: date-time
- readOnly: true
- nullable: true
- author:
- type: integer
- readOnly: true
- nullable: true
- required:
- - author
- - author_username
- - content
- - created_at
- - id
- - is_deleted
- - last_moderation_at
- - last_snapshot_id
- - published_version_id
- - status
- - status_display
- - title
- - updated_at
- SourceArticleWrite:
- type: object
- description: Serializer for the author, can be used to create/update
- properties:
- title:
- type: string
- maxLength: 60
- minLength: 5
- content: {}
- StatusEnum:
- enum:
- - 0
- - 1
- - 2
- - 3
- - 4
- - 5
- type: integer
- description: |-
- * `0` - Draft
- * `1` - Pending
- * `2` - Published
- * `3` - Rejected
- * `4` - Unpublished
- * `5` - Deleted
- securitySchemes:
- jwtAuth:
- type: http
- scheme: bearer
- bearerFormat: JWT
diff --git a/apps/backend/pyproject.toml b/apps/backend/pyproject.toml
index 8a1e13ed..cb3a73fd 100644
--- a/apps/backend/pyproject.toml
+++ b/apps/backend/pyproject.toml
@@ -9,7 +9,6 @@ dependencies = [
"django-redis>=6.0.0",
"django-tasks-rq>=0.12.0",
"djangorestframework>=3.17.1",
- "drf-spectacular>=0.29.0",
"environs>=15.0.1",
"gunicorn>=25.3.0",
"pillow>=12.2.0",
diff --git a/apps/backend/uv.lock b/apps/backend/uv.lock
index 2d05cfc0..ba09ddb5 100644
--- a/apps/backend/uv.lock
+++ b/apps/backend/uv.lock
@@ -13,7 +13,6 @@ dependencies = [
{ name = "django-redis" },
{ name = "django-tasks-rq" },
{ name = "djangorestframework" },
- { name = "drf-spectacular" },
{ name = "environs" },
{ name = "gunicorn" },
{ name = "pillow" },
@@ -34,7 +33,6 @@ requires-dist = [
{ name = "django-redis", specifier = ">=6.0.0" },
{ name = "django-tasks-rq", specifier = ">=0.12.0" },
{ name = "djangorestframework", specifier = ">=3.17.1" },
- { name = "drf-spectacular", specifier = ">=0.29.0" },
{ name = "environs", specifier = ">=15.0.1" },
{ name = "gunicorn", specifier = ">=25.3.0" },
{ name = "pillow", specifier = ">=12.2.0" },
@@ -54,15 +52,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" },
]
-[[package]]
-name = "attrs"
-version = "26.1.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
-]
-
[[package]]
name = "certifi"
version = "2026.2.25"
@@ -275,23 +264,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5a/e1/2c516bdc83652b1a60c6119366ac2c0607b479ed05cd6093f916ca8928f8/djangorestframework-3.17.1-py3-none-any.whl", hash = "sha256:c3c74dd3e83a5a3efc37b3c18d92bd6f86a6791c7b7d4dff62bb068500e76457", size = 898844, upload-time = "2026-03-24T16:58:31.845Z" },
]
-[[package]]
-name = "drf-spectacular"
-version = "0.29.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "django" },
- { name = "djangorestframework" },
- { name = "inflection" },
- { name = "jsonschema" },
- { name = "pyyaml" },
- { name = "uritemplate" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/5e/0e/a4f50d83e76cbe797eda88fc0083c8ca970cfa362b5586359ef06ec6f70a/drf_spectacular-0.29.0.tar.gz", hash = "sha256:0a069339ea390ce7f14a75e8b5af4a0860a46e833fd4af027411a3e94fc1a0cc", size = 241722, upload-time = "2025-11-02T03:40:26.348Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/32/d9/502c56fc3ca960075d00956283f1c44e8cafe433dada03f9ed2821f3073b/drf_spectacular-0.29.0-py3-none-any.whl", hash = "sha256:d1ee7c9535d89848affb4427347f7c4a22c5d22530b8842ef133d7b72e19b41a", size = 105433, upload-time = "2025-11-02T03:40:24.823Z" },
-]
-
[[package]]
name = "environs"
version = "15.0.1"
@@ -338,42 +310,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
]
-[[package]]
-name = "inflection"
-version = "0.5.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091, upload-time = "2020-08-22T08:16:29.139Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454, upload-time = "2020-08-22T08:16:27.816Z" },
-]
-
-[[package]]
-name = "jsonschema"
-version = "4.26.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "attrs" },
- { name = "jsonschema-specifications" },
- { name = "referencing" },
- { name = "rpds-py" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" },
-]
-
-[[package]]
-name = "jsonschema-specifications"
-version = "2025.9.1"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "referencing" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" },
-]
-
[[package]]
name = "marshmallow"
version = "4.3.0"
@@ -446,32 +382,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0b/d7/1959b9648791274998a9c3526f6d0ec8fd2233e4d4acce81bbae76b44b2a/python_dotenv-1.2.2-py3-none-any.whl", hash = "sha256:1d8214789a24de455a8b8bd8ae6fe3c6b69a5e3d64aa8a8e5d68e694bbcb285a", size = 22101, upload-time = "2026-03-01T16:00:25.09Z" },
]
-[[package]]
-name = "pyyaml"
-version = "6.0.3"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/05/8e/961c0007c59b8dd7729d542c61a4d537767a59645b82a0b521206e1e25c2/pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f", size = 130960, upload-time = "2025-09-25T21:33:16.546Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/9d/8c/f4bd7f6465179953d3ac9bc44ac1a8a3e6122cf8ada906b4f96c60172d43/pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac", size = 181814, upload-time = "2025-09-25T21:32:35.712Z" },
- { url = "https://files.pythonhosted.org/packages/bd/9c/4d95bb87eb2063d20db7b60faa3840c1b18025517ae857371c4dd55a6b3a/pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310", size = 173809, upload-time = "2025-09-25T21:32:36.789Z" },
- { url = "https://files.pythonhosted.org/packages/92/b5/47e807c2623074914e29dabd16cbbdd4bf5e9b2db9f8090fa64411fc5382/pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7", size = 766454, upload-time = "2025-09-25T21:32:37.966Z" },
- { url = "https://files.pythonhosted.org/packages/02/9e/e5e9b168be58564121efb3de6859c452fccde0ab093d8438905899a3a483/pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788", size = 836355, upload-time = "2025-09-25T21:32:39.178Z" },
- { url = "https://files.pythonhosted.org/packages/88/f9/16491d7ed2a919954993e48aa941b200f38040928474c9e85ea9e64222c3/pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5", size = 794175, upload-time = "2025-09-25T21:32:40.865Z" },
- { url = "https://files.pythonhosted.org/packages/dd/3f/5989debef34dc6397317802b527dbbafb2b4760878a53d4166579111411e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764", size = 755228, upload-time = "2025-09-25T21:32:42.084Z" },
- { url = "https://files.pythonhosted.org/packages/d7/ce/af88a49043cd2e265be63d083fc75b27b6ed062f5f9fd6cdc223ad62f03e/pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35", size = 789194, upload-time = "2025-09-25T21:32:43.362Z" },
- { url = "https://files.pythonhosted.org/packages/23/20/bb6982b26a40bb43951265ba29d4c246ef0ff59c9fdcdf0ed04e0687de4d/pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac", size = 156429, upload-time = "2025-09-25T21:32:57.844Z" },
- { url = "https://files.pythonhosted.org/packages/f4/f4/a4541072bb9422c8a883ab55255f918fa378ecf083f5b85e87fc2b4eda1b/pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3", size = 143912, upload-time = "2025-09-25T21:32:59.247Z" },
- { url = "https://files.pythonhosted.org/packages/7c/f9/07dd09ae774e4616edf6cda684ee78f97777bdd15847253637a6f052a62f/pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3", size = 189108, upload-time = "2025-09-25T21:32:44.377Z" },
- { url = "https://files.pythonhosted.org/packages/4e/78/8d08c9fb7ce09ad8c38ad533c1191cf27f7ae1effe5bb9400a46d9437fcf/pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba", size = 183641, upload-time = "2025-09-25T21:32:45.407Z" },
- { url = "https://files.pythonhosted.org/packages/7b/5b/3babb19104a46945cf816d047db2788bcaf8c94527a805610b0289a01c6b/pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c", size = 831901, upload-time = "2025-09-25T21:32:48.83Z" },
- { url = "https://files.pythonhosted.org/packages/8b/cc/dff0684d8dc44da4d22a13f35f073d558c268780ce3c6ba1b87055bb0b87/pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702", size = 861132, upload-time = "2025-09-25T21:32:50.149Z" },
- { url = "https://files.pythonhosted.org/packages/b1/5e/f77dc6b9036943e285ba76b49e118d9ea929885becb0a29ba8a7c75e29fe/pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c", size = 839261, upload-time = "2025-09-25T21:32:51.808Z" },
- { url = "https://files.pythonhosted.org/packages/ce/88/a9db1376aa2a228197c58b37302f284b5617f56a5d959fd1763fb1675ce6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065", size = 805272, upload-time = "2025-09-25T21:32:52.941Z" },
- { url = "https://files.pythonhosted.org/packages/da/92/1446574745d74df0c92e6aa4a7b0b3130706a4142b2d1a5869f2eaa423c6/pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65", size = 829923, upload-time = "2025-09-25T21:32:54.537Z" },
- { url = "https://files.pythonhosted.org/packages/f0/7a/1c7270340330e575b92f397352af856a8c06f230aa3e76f86b39d01b416a/pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9", size = 174062, upload-time = "2025-09-25T21:32:55.767Z" },
- { url = "https://files.pythonhosted.org/packages/f1/12/de94a39c2ef588c7e6455cfbe7343d3b2dc9d6b6b2f40c4c6565744c873d/pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b", size = 149341, upload-time = "2025-09-25T21:32:56.828Z" },
-]
-
[[package]]
name = "redis"
version = "7.4.0"
@@ -481,19 +391,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/74/3a/95deec7db1eb53979973ebd156f3369a72732208d1391cd2e5d127062a32/redis-7.4.0-py3-none-any.whl", hash = "sha256:a9c74a5c893a5ef8455a5adb793a31bb70feb821c86eccb62eebef5a19c429ec", size = 409772, upload-time = "2026-03-24T09:14:35.968Z" },
]
-[[package]]
-name = "referencing"
-version = "0.37.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "attrs" },
- { name = "rpds-py" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" },
-]
-
[[package]]
name = "requests"
version = "2.33.1"
@@ -509,43 +406,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl", hash = "sha256:4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a", size = 64947, upload-time = "2026-03-30T16:09:13.83Z" },
]
-[[package]]
-name = "rpds-py"
-version = "0.30.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/86/81/dad16382ebbd3d0e0328776d8fd7ca94220e4fa0798d1dc5e7da48cb3201/rpds_py-0.30.0-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:68f19c879420aa08f61203801423f6cd5ac5f0ac4ac82a2368a9fcd6a9a075e0", size = 362099, upload-time = "2025-11-30T20:23:27.316Z" },
- { url = "https://files.pythonhosted.org/packages/2b/60/19f7884db5d5603edf3c6bce35408f45ad3e97e10007df0e17dd57af18f8/rpds_py-0.30.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:ec7c4490c672c1a0389d319b3a9cfcd098dcdc4783991553c332a15acf7249be", size = 353192, upload-time = "2025-11-30T20:23:29.151Z" },
- { url = "https://files.pythonhosted.org/packages/bf/c4/76eb0e1e72d1a9c4703c69607cec123c29028bff28ce41588792417098ac/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f251c812357a3fed308d684a5079ddfb9d933860fc6de89f2b7ab00da481e65f", size = 384080, upload-time = "2025-11-30T20:23:30.785Z" },
- { url = "https://files.pythonhosted.org/packages/72/87/87ea665e92f3298d1b26d78814721dc39ed8d2c74b86e83348d6b48a6f31/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac98b175585ecf4c0348fd7b29c3864bda53b805c773cbf7bfdaffc8070c976f", size = 394841, upload-time = "2025-11-30T20:23:32.209Z" },
- { url = "https://files.pythonhosted.org/packages/77/ad/7783a89ca0587c15dcbf139b4a8364a872a25f861bdb88ed99f9b0dec985/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3e62880792319dbeb7eb866547f2e35973289e7d5696c6e295476448f5b63c87", size = 516670, upload-time = "2025-11-30T20:23:33.742Z" },
- { url = "https://files.pythonhosted.org/packages/5b/3c/2882bdac942bd2172f3da574eab16f309ae10a3925644e969536553cb4ee/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4e7fc54e0900ab35d041b0601431b0a0eb495f0851a0639b6ef90f7741b39a18", size = 408005, upload-time = "2025-11-30T20:23:35.253Z" },
- { url = "https://files.pythonhosted.org/packages/ce/81/9a91c0111ce1758c92516a3e44776920b579d9a7c09b2b06b642d4de3f0f/rpds_py-0.30.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:47e77dc9822d3ad616c3d5759ea5631a75e5809d5a28707744ef79d7a1bcfcad", size = 382112, upload-time = "2025-11-30T20:23:36.842Z" },
- { url = "https://files.pythonhosted.org/packages/cf/8e/1da49d4a107027e5fbc64daeab96a0706361a2918da10cb41769244b805d/rpds_py-0.30.0-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:b4dc1a6ff022ff85ecafef7979a2c6eb423430e05f1165d6688234e62ba99a07", size = 399049, upload-time = "2025-11-30T20:23:38.343Z" },
- { url = "https://files.pythonhosted.org/packages/df/5a/7ee239b1aa48a127570ec03becbb29c9d5a9eb092febbd1699d567cae859/rpds_py-0.30.0-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4559c972db3a360808309e06a74628b95eaccbf961c335c8fe0d590cf587456f", size = 415661, upload-time = "2025-11-30T20:23:40.263Z" },
- { url = "https://files.pythonhosted.org/packages/70/ea/caa143cf6b772f823bc7929a45da1fa83569ee49b11d18d0ada7f5ee6fd6/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:0ed177ed9bded28f8deb6ab40c183cd1192aa0de40c12f38be4d59cd33cb5c65", size = 565606, upload-time = "2025-11-30T20:23:42.186Z" },
- { url = "https://files.pythonhosted.org/packages/64/91/ac20ba2d69303f961ad8cf55bf7dbdb4763f627291ba3d0d7d67333cced9/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:ad1fa8db769b76ea911cb4e10f049d80bf518c104f15b3edb2371cc65375c46f", size = 591126, upload-time = "2025-11-30T20:23:44.086Z" },
- { url = "https://files.pythonhosted.org/packages/21/20/7ff5f3c8b00c8a95f75985128c26ba44503fb35b8e0259d812766ea966c7/rpds_py-0.30.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:46e83c697b1f1c72b50e5ee5adb4353eef7406fb3f2043d64c33f20ad1c2fc53", size = 553371, upload-time = "2025-11-30T20:23:46.004Z" },
- { url = "https://files.pythonhosted.org/packages/72/c7/81dadd7b27c8ee391c132a6b192111ca58d866577ce2d9b0ca157552cce0/rpds_py-0.30.0-cp314-cp314-win32.whl", hash = "sha256:ee454b2a007d57363c2dfd5b6ca4a5d7e2c518938f8ed3b706e37e5d470801ed", size = 215298, upload-time = "2025-11-30T20:23:47.696Z" },
- { url = "https://files.pythonhosted.org/packages/3e/d2/1aaac33287e8cfb07aab2e6b8ac1deca62f6f65411344f1433c55e6f3eb8/rpds_py-0.30.0-cp314-cp314-win_amd64.whl", hash = "sha256:95f0802447ac2d10bcc69f6dc28fe95fdf17940367b21d34e34c737870758950", size = 228604, upload-time = "2025-11-30T20:23:49.501Z" },
- { url = "https://files.pythonhosted.org/packages/e8/95/ab005315818cc519ad074cb7784dae60d939163108bd2b394e60dc7b5461/rpds_py-0.30.0-cp314-cp314-win_arm64.whl", hash = "sha256:613aa4771c99f03346e54c3f038e4cc574ac09a3ddfb0e8878487335e96dead6", size = 222391, upload-time = "2025-11-30T20:23:50.96Z" },
- { url = "https://files.pythonhosted.org/packages/9e/68/154fe0194d83b973cdedcdcc88947a2752411165930182ae41d983dcefa6/rpds_py-0.30.0-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:7e6ecfcb62edfd632e56983964e6884851786443739dbfe3582947e87274f7cb", size = 364868, upload-time = "2025-11-30T20:23:52.494Z" },
- { url = "https://files.pythonhosted.org/packages/83/69/8bbc8b07ec854d92a8b75668c24d2abcb1719ebf890f5604c61c9369a16f/rpds_py-0.30.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a1d0bc22a7cdc173fedebb73ef81e07faef93692b8c1ad3733b67e31e1b6e1b8", size = 353747, upload-time = "2025-11-30T20:23:54.036Z" },
- { url = "https://files.pythonhosted.org/packages/ab/00/ba2e50183dbd9abcce9497fa5149c62b4ff3e22d338a30d690f9af970561/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d08f00679177226c4cb8c5265012eea897c8ca3b93f429e546600c971bcbae7", size = 383795, upload-time = "2025-11-30T20:23:55.556Z" },
- { url = "https://files.pythonhosted.org/packages/05/6f/86f0272b84926bcb0e4c972262f54223e8ecc556b3224d281e6598fc9268/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5965af57d5848192c13534f90f9dd16464f3c37aaf166cc1da1cae1fd5a34898", size = 393330, upload-time = "2025-11-30T20:23:57.033Z" },
- { url = "https://files.pythonhosted.org/packages/cb/e9/0e02bb2e6dc63d212641da45df2b0bf29699d01715913e0d0f017ee29438/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a4e86e34e9ab6b667c27f3211ca48f73dba7cd3d90f8d5b11be56e5dbc3fb4e", size = 518194, upload-time = "2025-11-30T20:23:58.637Z" },
- { url = "https://files.pythonhosted.org/packages/ee/ca/be7bca14cf21513bdf9c0606aba17d1f389ea2b6987035eb4f62bd923f25/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5d3e6b26f2c785d65cc25ef1e5267ccbe1b069c5c21b8cc724efee290554419", size = 408340, upload-time = "2025-11-30T20:24:00.2Z" },
- { url = "https://files.pythonhosted.org/packages/c2/c7/736e00ebf39ed81d75544c0da6ef7b0998f8201b369acf842f9a90dc8fce/rpds_py-0.30.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:626a7433c34566535b6e56a1b39a7b17ba961e97ce3b80ec62e6f1312c025551", size = 383765, upload-time = "2025-11-30T20:24:01.759Z" },
- { url = "https://files.pythonhosted.org/packages/4a/3f/da50dfde9956aaf365c4adc9533b100008ed31aea635f2b8d7b627e25b49/rpds_py-0.30.0-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:acd7eb3f4471577b9b5a41baf02a978e8bdeb08b4b355273994f8b87032000a8", size = 396834, upload-time = "2025-11-30T20:24:03.687Z" },
- { url = "https://files.pythonhosted.org/packages/4e/00/34bcc2565b6020eab2623349efbdec810676ad571995911f1abdae62a3a0/rpds_py-0.30.0-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fe5fa731a1fa8a0a56b0977413f8cacac1768dad38d16b3a296712709476fbd5", size = 415470, upload-time = "2025-11-30T20:24:05.232Z" },
- { url = "https://files.pythonhosted.org/packages/8c/28/882e72b5b3e6f718d5453bd4d0d9cf8df36fddeb4ddbbab17869d5868616/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:74a3243a411126362712ee1524dfc90c650a503502f135d54d1b352bd01f2404", size = 565630, upload-time = "2025-11-30T20:24:06.878Z" },
- { url = "https://files.pythonhosted.org/packages/3b/97/04a65539c17692de5b85c6e293520fd01317fd878ea1995f0367d4532fb1/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3e8eeb0544f2eb0d2581774be4c3410356eba189529a6b3e36bbbf9696175856", size = 591148, upload-time = "2025-11-30T20:24:08.445Z" },
- { url = "https://files.pythonhosted.org/packages/85/70/92482ccffb96f5441aab93e26c4d66489eb599efdcf96fad90c14bbfb976/rpds_py-0.30.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:dbd936cde57abfee19ab3213cf9c26be06d60750e60a8e4dd85d1ab12c8b1f40", size = 556030, upload-time = "2025-11-30T20:24:10.956Z" },
- { url = "https://files.pythonhosted.org/packages/20/53/7c7e784abfa500a2b6b583b147ee4bb5a2b3747a9166bab52fec4b5b5e7d/rpds_py-0.30.0-cp314-cp314t-win32.whl", hash = "sha256:dc824125c72246d924f7f796b4f63c1e9dc810c7d9e2355864b3c3a73d59ade0", size = 211570, upload-time = "2025-11-30T20:24:12.735Z" },
- { url = "https://files.pythonhosted.org/packages/d0/02/fa464cdfbe6b26e0600b62c528b72d8608f5cc49f96b8d6e38c95d60c676/rpds_py-0.30.0-cp314-cp314t-win_amd64.whl", hash = "sha256:27f4b0e92de5bfbc6f86e43959e6edd1425c33b5e69aab0984a72047f2bcf1e3", size = 226532, upload-time = "2025-11-30T20:24:14.634Z" },
-]
-
[[package]]
name = "rq"
version = "2.8.0"
@@ -656,15 +516,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/3e/6f/73a4d37deefb159556d39d654b5bad67b6874d1ad0b20b96fb5a04de3949/ua_parser_builtins-202603-py3-none-any.whl", hash = "sha256:67478397a68fac1a98fd0a31c416ea7c65a719141fc151d0211316f2cd337cc9", size = 89573, upload-time = "2026-03-01T20:50:02.491Z" },
]
-[[package]]
-name = "uritemplate"
-version = "4.2.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/98/60/f174043244c5306c9988380d2cb10009f91563fc4b31293d27e17201af56/uritemplate-4.2.0.tar.gz", hash = "sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e", size = 33267, upload-time = "2025-06-02T15:12:06.318Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl", hash = "sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686", size = 11488, upload-time = "2025-06-02T15:12:03.405Z" },
-]
-
[[package]]
name = "urllib3"
version = "2.6.3"
From ab587c3be82c5b981d3fe17a11f30d324fafcb79 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Thu, 30 Apr 2026 17:28:27 +1000
Subject: [PATCH 34/51] feat(alienmark): add internal Fastify service app
---
apps/alienmark/Dockerfile | 44 +++
apps/alienmark/package.json | 24 ++
apps/alienmark/src/server.ts | 76 +++++
apps/alienmark/tsconfig.json | 22 ++
infra/compose/docker-compose.dev.yml | 11 +
infra/compose/docker-compose.pro.yml | 11 +
infra/compose/docker-compose.stg.yml | 11 +
make/docker.mk | 2 +-
make/node.mk | 15 +-
package.json | 4 +
packages/alienmark/package.json | 10 +-
pnpm-lock.yaml | 445 +++++++++++++++++++++++----
pnpm-workspace.yaml | 2 +-
13 files changed, 620 insertions(+), 57 deletions(-)
create mode 100644 apps/alienmark/Dockerfile
create mode 100644 apps/alienmark/package.json
create mode 100644 apps/alienmark/src/server.ts
create mode 100644 apps/alienmark/tsconfig.json
diff --git a/apps/alienmark/Dockerfile b/apps/alienmark/Dockerfile
new file mode 100644
index 00000000..d7fac2d4
--- /dev/null
+++ b/apps/alienmark/Dockerfile
@@ -0,0 +1,44 @@
+ARG NODE_IMAGE=node:24-slim
+
+FROM ${NODE_IMAGE} AS deps
+
+ENV PNPM_HOME="/pnpm"
+ENV PATH="$PNPM_HOME:$PATH"
+
+WORKDIR /workspace
+
+RUN corepack enable
+
+COPY package.json pnpm-lock.yaml pnpm-workspace.yaml ./
+COPY apps/alienmark/package.json apps/alienmark/package.json
+COPY packages/alienmark/package.json packages/alienmark/package.json
+
+RUN pnpm install --frozen-lockfile
+
+FROM deps AS build
+
+COPY apps/alienmark apps/alienmark
+COPY packages/alienmark packages/alienmark
+
+RUN pnpm --filter alienmark build
+RUN pnpm --filter alienmark-service build
+
+FROM ${NODE_IMAGE} AS runtime
+
+ENV NODE_ENV=production
+ENV HOST=0.0.0.0
+ENV PORT=8787
+
+WORKDIR /workspace
+
+COPY --from=build /workspace/package.json /workspace/pnpm-lock.yaml /workspace/pnpm-workspace.yaml ./
+COPY --from=build /workspace/node_modules ./node_modules
+COPY --from=build /workspace/apps/alienmark/package.json apps/alienmark/package.json
+COPY --from=build /workspace/apps/alienmark/node_modules apps/alienmark/node_modules
+COPY --from=build /workspace/apps/alienmark/dist apps/alienmark/dist
+COPY --from=build /workspace/packages/alienmark/package.json packages/alienmark/package.json
+COPY --from=build /workspace/packages/alienmark/dist packages/alienmark/dist
+
+EXPOSE 8787
+
+CMD ["node", "apps/alienmark/dist/server.mjs"]
diff --git a/apps/alienmark/package.json b/apps/alienmark/package.json
new file mode 100644
index 00000000..8d6857d8
--- /dev/null
+++ b/apps/alienmark/package.json
@@ -0,0 +1,24 @@
+{
+ "name": "alienmark-service",
+ "version": "0.1.0",
+ "private": true,
+ "description": "Internal HTTP service for AlienMark.",
+ "type": "module",
+ "main": "./dist/server.mjs",
+ "scripts": {
+ "build": "tsdown src/server.ts --format esm --dts false",
+ "check": "tsc --noEmit",
+ "dev": "tsx watch src/server.ts",
+ "start": "node dist/server.mjs"
+ },
+ "dependencies": {
+ "alienmark": "workspace:*",
+ "fastify": "^5.6.2"
+ },
+ "devDependencies": {
+ "@types/node": "^25.6.0",
+ "tsdown": "^0.21.10",
+ "tsx": "^4.21.0",
+ "typescript": "^6.0.3"
+ }
+}
diff --git a/apps/alienmark/src/server.ts b/apps/alienmark/src/server.ts
new file mode 100644
index 00000000..e57765a6
--- /dev/null
+++ b/apps/alienmark/src/server.ts
@@ -0,0 +1,76 @@
+import Fastify from "fastify";
+import { renderMarkdown } from "alienmark";
+
+interface RenderHtmlBody {
+ markdown: string;
+}
+
+const DEFAULT_HOST = "0.0.0.0";
+const DEFAULT_PORT = 8787;
+
+function readPort(): number {
+ const rawPort = process.env.PORT;
+
+ if (!rawPort) {
+ return DEFAULT_PORT;
+ }
+
+ const port = Number(rawPort);
+
+ if (!Number.isInteger(port) || port <= 0 || port > 65535) {
+ throw new Error(`Invalid PORT value: ${rawPort}`);
+ }
+
+ return port;
+}
+
+function readHost(): string {
+ return process.env.HOST || DEFAULT_HOST;
+}
+
+const app = Fastify({
+ logger: true,
+ bodyLimit: 1024 * 1024,
+});
+
+app.get("/health", async () => {
+ return {
+ ok: true,
+ service: "alienmark",
+ };
+});
+
+app.post<{ Body: RenderHtmlBody }>(
+ "/render-html",
+ {
+ schema: {
+ body: {
+ type: "object",
+ required: ["markdown"],
+ additionalProperties: false,
+ properties: {
+ markdown: { type: "string" },
+ },
+ },
+ response: {
+ 200: {
+ type: "object",
+ required: ["html"],
+ properties: {
+ html: { type: "string" },
+ },
+ },
+ },
+ },
+ },
+ async (request) => {
+ return {
+ html: renderMarkdown(request.body.markdown),
+ };
+ },
+);
+
+const host = readHost();
+const port = readPort();
+
+await app.listen({ host, port });
diff --git a/apps/alienmark/tsconfig.json b/apps/alienmark/tsconfig.json
new file mode 100644
index 00000000..5917723c
--- /dev/null
+++ b/apps/alienmark/tsconfig.json
@@ -0,0 +1,22 @@
+{
+ "compilerOptions": {
+ "rootDir": "./src",
+ "outDir": "./dist",
+ "module": "NodeNext",
+ "target": "ESNext",
+ "types": ["node"],
+ "lib": ["ESNext"],
+ "sourceMap": true,
+ "declaration": true,
+ "declarationMap": true,
+ "noUncheckedIndexedAccess": true,
+ "exactOptionalPropertyTypes": true,
+ "strict": true,
+ "verbatimModuleSyntax": true,
+ "isolatedModules": true,
+ "noUncheckedSideEffectImports": true,
+ "moduleDetection": "force",
+ "skipLibCheck": true
+ },
+ "include": ["src"]
+}
diff --git a/infra/compose/docker-compose.dev.yml b/infra/compose/docker-compose.dev.yml
index cff81cf7..396e815e 100644
--- a/infra/compose/docker-compose.dev.yml
+++ b/infra/compose/docker-compose.dev.yml
@@ -42,6 +42,8 @@ services:
restart: unless-stopped
command: >
sh -c "gunicorn backend.wsgi:application --bind 0.0.0.0:8000"
+ depends_on:
+ - alienmark
volumes:
- ../../apps/backend:/code
ports:
@@ -91,6 +93,15 @@ services:
volumes:
- ../../apps/frontend:/code
- /code/node_modules
+
+ alienmark:
+ build:
+ context: ../..
+ dockerfile: apps/alienmark/Dockerfile
+ restart: unless-stopped
+ environment:
+ HOST: 0.0.0.0
+ PORT: 8787
alloy:
image: grafana/alloy:latest
diff --git a/infra/compose/docker-compose.pro.yml b/infra/compose/docker-compose.pro.yml
index 078afc11..4ea34ee0 100644
--- a/infra/compose/docker-compose.pro.yml
+++ b/infra/compose/docker-compose.pro.yml
@@ -36,6 +36,8 @@ services:
restart: unless-stopped
command: >
sh -c "gunicorn backend.wsgi:application --bind 0.0.0.0:8000"
+ depends_on:
+ - alienmark
labels:
- "traefik.enable=true"
- "traefik.http.routers.backend-production.rule=Host(`api.aliencommons.com`)"
@@ -116,6 +118,15 @@ services:
- "traefik.http.routers.frontend-production.tls.certresolver=le"
- "traefik.http.services.frontend-production.loadbalancer.server.port=80"
+ alienmark:
+ build:
+ context: ../..
+ dockerfile: apps/alienmark/Dockerfile
+ restart: unless-stopped
+ environment:
+ HOST: 0.0.0.0
+ PORT: 8787
+
media:
image: nginx:alpine
labels:
diff --git a/infra/compose/docker-compose.stg.yml b/infra/compose/docker-compose.stg.yml
index 05b22a35..b27aaa82 100644
--- a/infra/compose/docker-compose.stg.yml
+++ b/infra/compose/docker-compose.stg.yml
@@ -36,6 +36,8 @@ services:
restart: unless-stopped
command: >
sh -c "gunicorn backend.wsgi:application --bind 0.0.0.0:8000"
+ depends_on:
+ - alienmark
labels:
- "traefik.enable=true"
- "traefik.http.routers.backend-api-stg.rule=Host(`api-stg.aliencommons.com`)"
@@ -119,6 +121,15 @@ services:
- "traefik.http.routers.frontend-stg.entrypoints=websecure"
- "traefik.http.routers.frontend-stg.tls.certresolver=le"
- "traefik.http.services.frontend-stg.loadbalancer.server.port=80"
+
+ alienmark:
+ build:
+ context: ../..
+ dockerfile: apps/alienmark/Dockerfile
+ restart: unless-stopped
+ environment:
+ HOST: 0.0.0.0
+ PORT: 8787
media:
image: nginx:alpine
diff --git a/make/docker.mk b/make/docker.mk
index c14ae6a3..2e8d62e9 100644
--- a/make/docker.mk
+++ b/make/docker.mk
@@ -15,7 +15,7 @@ DEV_MANAGE_TEST = $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=ba
DB = postgres redis
OBSERVE = alloy loki grafana
-APP = backend-api backend-task-scheduler backend-task-worker frontend
+APP = backend-api backend-task-scheduler backend-task-worker frontend alienmark
.PHONY: dev-db-up dev-observe-up dev-up dev-down dev-down-v \
dev-backend-bash dev-backend-shell dev-backend-runserver \
diff --git a/make/node.mk b/make/node.mk
index 5c808155..3eac4690 100644
--- a/make/node.mk
+++ b/make/node.mk
@@ -1,8 +1,9 @@
PNPM = pnpm
PNPM_FRONTEND = $(PNPM) --filter frontend
PNPM_ALIENMARK = $(PNPM) --filter alienmark
+PNPM_ALIENMARK_SERVICE = $(PNPM) --filter alienmark-service
-.PHONY: node-install node-build node-test node-check frontend-dev frontend-build frontend-preview alienmark-dev alienmark-build alienmark-test alienmark-check
+.PHONY: node-install node-build node-test node-check frontend-dev frontend-build frontend-preview alienmark-dev alienmark-build alienmark-test alienmark-check alienmark-service-dev alienmark-service-build alienmark-service-start alienmark-service-check
# NODE WORKSPACE
node-install:
@@ -37,3 +38,15 @@ alienmark-test:
alienmark-check:
$(PNPM_ALIENMARK) check
+
+alienmark-service-dev:
+ $(PNPM_ALIENMARK_SERVICE) dev
+
+alienmark-service-build:
+ $(PNPM_ALIENMARK_SERVICE) build
+
+alienmark-service-start:
+ $(PNPM_ALIENMARK_SERVICE) start
+
+alienmark-service-check:
+ $(PNPM_ALIENMARK_SERVICE) check
diff --git a/package.json b/package.json
index e3accf89..8bb33405 100644
--- a/package.json
+++ b/package.json
@@ -10,6 +10,10 @@
"alienmark:build": "pnpm --filter alienmark build",
"alienmark:test": "pnpm --filter alienmark test",
"alienmark:check": "pnpm --filter alienmark check",
+ "alienmark-service:dev": "pnpm --filter alienmark-service dev",
+ "alienmark-service:build": "pnpm --filter alienmark-service build",
+ "alienmark-service:start": "pnpm --filter alienmark-service start",
+ "alienmark-service:check": "pnpm --filter alienmark-service check",
"node:build": "pnpm -r --if-present build",
"node:test": "pnpm -r --if-present test",
"node:check": "pnpm -r --if-present check"
diff --git a/packages/alienmark/package.json b/packages/alienmark/package.json
index 009a43ff..16e4ba5d 100644
--- a/packages/alienmark/package.json
+++ b/packages/alienmark/package.json
@@ -3,8 +3,14 @@
"version": "0.1.0",
"description": "AlienMark markdown parser and HTML renderer.",
"type": "module",
- "main": "./dist/index.js",
- "types": "./dist/index.d.ts",
+ "main": "./dist/index.mjs",
+ "types": "./dist/index.d.mts",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.mts",
+ "import": "./dist/index.mjs"
+ }
+ },
"files": [
"dist"
],
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 98e51d56..96f2310f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -8,6 +8,28 @@ importers:
.: {}
+ apps/alienmark:
+ dependencies:
+ alienmark:
+ specifier: workspace:*
+ version: link:../../packages/alienmark
+ fastify:
+ specifier: ^5.6.2
+ version: 5.8.5
+ devDependencies:
+ '@types/node':
+ specifier: ^25.6.0
+ version: 25.6.0
+ tsdown:
+ specifier: ^0.21.10
+ version: 0.21.10(typescript@6.0.3)
+ tsx:
+ specifier: ^4.21.0
+ version: 4.21.0
+ typescript:
+ specifier: ^6.0.3
+ version: 6.0.3
+
apps/frontend:
dependencies:
'@pinia/nuxt':
@@ -15,13 +37,13 @@ importers:
version: 0.11.3(magicast@0.5.2)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))
'@tailwindcss/vite':
specifier: ^4.2.4
- version: 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ version: 4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
alienmark:
specifier: workspace:*
version: link:../../packages/alienmark
nuxt:
specifier: ^4.4.2
- version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3)
+ version: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)
pinia:
specifier: ^3.0.4
version: 3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))
@@ -37,7 +59,7 @@ importers:
devDependencies:
'@nuxt/eslint':
specifier: ^1.15.2
- version: 1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ version: 1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
eslint:
specifier: ^10.2.1
version: 10.2.1(jiti@2.6.1)
@@ -58,7 +80,7 @@ importers:
version: 6.0.3
vitest:
specifier: ^4.1.5
- version: 4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ version: 4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
packages:
@@ -470,6 +492,24 @@ packages:
resolution: {integrity: sha512-rZAP3aVgB9ds9KOeUSL+zZ21hPmo8dh6fnIFwRQj5EAZl9gzR7wxYbYXYysAM8CTqGmUGyp2S4kUdV17MnGuWQ==}
engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ '@fastify/ajv-compiler@4.0.5':
+ resolution: {integrity: sha512-KoWKW+MhvfTRWL4qrhUwAAZoaChluo0m0vbiJlGMt2GXvL4LVPQEjt8kSpHI3IBq5Rez8fg+XeH3cneztq+C7A==}
+
+ '@fastify/error@4.2.0':
+ resolution: {integrity: sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==}
+
+ '@fastify/fast-json-stringify-compiler@5.0.3':
+ resolution: {integrity: sha512-uik7yYHkLr6fxd8hJSZ8c+xF4WafPK+XzneQDPU+D10r5X19GW8lJcom2YijX2+qtFF1ENJlHXKFM9ouXNJYgQ==}
+
+ '@fastify/forwarded@3.0.1':
+ resolution: {integrity: sha512-JqDochHFqXs3C3Ml3gOY58zM7OqO9ENqPo0UqAjAjH8L01fRZqwX9iLeX34//kiJubF7r2ZQHtBRU36vONbLlw==}
+
+ '@fastify/merge-json-schemas@0.2.1':
+ resolution: {integrity: sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==}
+
+ '@fastify/proxy-addr@5.1.0':
+ resolution: {integrity: sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==}
+
'@humanfs/core@0.19.2':
resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
engines: {node: '>=18.18.0'}
@@ -1147,6 +1187,9 @@ packages:
peerDependencies:
pinia: ^3.0.4
+ '@pinojs/redact@0.4.0':
+ resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
+
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
engines: {node: '>=14'}
@@ -1928,6 +1971,9 @@ packages:
resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==}
engines: {node: '>=6.5'}
+ abstract-logging@2.0.1:
+ resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
+
acorn-import-attributes@1.9.5:
resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==}
peerDependencies:
@@ -1947,9 +1993,20 @@ packages:
resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==}
engines: {node: '>= 14'}
+ ajv-formats@3.0.1:
+ resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==}
+ peerDependencies:
+ ajv: ^8.0.0
+ peerDependenciesMeta:
+ ajv:
+ optional: true
+
ajv@6.15.0:
resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
+ ajv@8.20.0:
+ resolution: {integrity: sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==}
+
ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -2011,6 +2068,10 @@ packages:
async@3.2.6:
resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==}
+ atomic-sleep@1.0.0:
+ resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==}
+ engines: {node: '>=8.0.0'}
+
autoprefixer@10.5.0:
resolution: {integrity: sha512-FMhOoZV4+qR6aTUALKX2rEqGG+oyATvwBt9IIzVR5rMa2HRWPkxf+P+PAJLD1I/H5/II+HuZcBJYEFBpq39ong==}
engines: {node: ^10 || ^12 || >=14}
@@ -2018,6 +2079,9 @@ packages:
peerDependencies:
postcss: ^8.1.0
+ avvio@9.2.0:
+ resolution: {integrity: sha512-2t/sy01ArdHHE0vRH5Hsay+RtCZt3dLPji7W7/MMOCEgze5b7SNDC4j5H6FnVgPkI1MTNFGzHdHrVXDDl7QSSQ==}
+
b4a@1.8.0:
resolution: {integrity: sha512-qRuSmNSkGQaHwNbM7J78Wwy+ghLEYF1zNrSeMxj4Kgw6y33O3mXcQ6Ie9fRvfU/YnxWkOchPXbaLb73TkIsfdg==}
peerDependencies:
@@ -2247,6 +2311,10 @@ packages:
cookie-es@3.1.1:
resolution: {integrity: sha512-UaXxwISYJPTr9hwQxMFYZ7kNhSXboMXP+Z3TRX6f1/NyaGPfuNUZOWP1pUEb75B2HjfklIYLVRfWiFZJyC6Npg==}
+ cookie@1.1.1:
+ resolution: {integrity: sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==}
+ engines: {node: '>=18'}
+
copy-anything@4.0.5:
resolution: {integrity: sha512-7Vv6asjS4gMOuILabD3l739tsaxFQmC+a7pLZm02zyvs8p977bL3zEgq3yDk5rn9B0PbYgIv++jmHcuUab4RhA==}
engines: {node: '>=18'}
@@ -2398,6 +2466,10 @@ packages:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
+ dequal@2.0.3:
+ resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
+ engines: {node: '>=6'}
+
destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
@@ -2686,6 +2758,9 @@ packages:
exsolve@1.0.8:
resolution: {integrity: sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==}
+ fast-decode-uri-component@1.0.1:
+ resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==}
+
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
@@ -2699,6 +2774,9 @@ packages:
fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+ fast-json-stringify@6.3.0:
+ resolution: {integrity: sha512-oRCntNDY/329HJPlmdNLIdogNtt6Vyjb1WuT01Soss3slIdyUp8kAcDU3saQTOquEK8KFVfwIIF7FebxUAu+yA==}
+
fast-levenshtein@2.0.6:
resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
@@ -2706,15 +2784,24 @@ packages:
resolution: {integrity: sha512-71pTBPrA9WPPsJQ0Q06ZlTQQVJPYd87xZsvFwxFqru7a6kdriMVW1Hjd37W3W13ZuF/K/Zzq6eVlAHVoZCHuQw==}
hasBin: true
+ fast-querystring@1.1.2:
+ resolution: {integrity: sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==}
+
fast-string-truncated-width@1.2.1:
resolution: {integrity: sha512-Q9acT/+Uu3GwGj+5w/zsGuQjh9O1TyywhIwAxHudtWrgF09nHOPrvTLhQevPbttcxjr/SNN7mJmfOw/B1bXgow==}
fast-string-width@1.1.0:
resolution: {integrity: sha512-O3fwIVIH5gKB38QNbdg+3760ZmGz0SZMgvwJbA1b2TGXceKE6A2cOlfogh1iw8lr049zPyd7YADHy+B7U4W9bQ==}
+ fast-uri@3.1.0:
+ resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==}
+
fast-wrap-ansi@0.1.6:
resolution: {integrity: sha512-HlUwET7a5gqjURj70D5jl7aC3Zmy4weA1SHUfM0JFI0Ptq987NH2TwbBFLoERhfwk+E+eaq4EK3jXoT+R3yp3w==}
+ fastify@5.8.5:
+ resolution: {integrity: sha512-Yqptv59pQzPgQUSIm87hMqHJmdkb1+GPxdE6vW6FRyVE9G86mt7rOghitiU4JHRaTyDUk9pfeKmDeu70lAwM4Q==}
+
fastq@1.20.1:
resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
@@ -2738,6 +2825,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ find-my-way@9.5.0:
+ resolution: {integrity: sha512-VW2RfnmscZO5KgBY5XVyKREMW5nMZcxDy+buTOsL+zIPnBlbKm+00sgzoQzq1EVh4aALZLfKdwv6atBGcjvjrQ==}
+ engines: {node: '>=20'}
+
find-up-simple@1.0.1:
resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==}
engines: {node: '>=18'}
@@ -2924,6 +3015,10 @@ packages:
resolution: {integrity: sha512-HuEDBTI70aYdx1v6U97SbNx9F1+svQKBDo30o0b9fw055LMepzpOOd0Ccg9Q6tbqmBSJaMuY0fB7yw9/vjBYCA==}
engines: {node: '>=12.22.0'}
+ ipaddr.js@2.3.0:
+ resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==}
+ engines: {node: '>= 10'}
+
iron-webcrypto@1.2.1:
resolution: {integrity: sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg==}
@@ -3034,12 +3129,18 @@ packages:
json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+ json-schema-ref-resolver@3.0.0:
+ resolution: {integrity: sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==}
+
json-schema-to-typescript-lite@15.0.0:
resolution: {integrity: sha512-5mMORSQm9oTLyjM4mWnyNBi2T042Fhg1/0gCIB6X8U/LVpM2A+Nmj2yEyArqVouDmFThDxpEXcnTgSrjkGJRFA==}
json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+ json-schema-traverse@1.0.0:
+ resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
+
json-stable-stringify-without-jsonify@1.0.1:
resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
@@ -3073,6 +3174,9 @@ packages:
resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
engines: {node: '>= 0.8.0'}
+ light-my-request@6.6.0:
+ resolution: {integrity: sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==}
+
lightningcss-android-arm64@1.32.0:
resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
engines: {node: '>= 12.0.0'}
@@ -3394,6 +3498,10 @@ packages:
resolution: {integrity: sha512-08+12qcOVEA0fS9g/VxKS27HaT94nRutUT77J2dr8zv/unzXopvhBuF8tNLWsoLQ5IgrQ6eptGeGqUYat82U1w==}
engines: {node: '>=20'}
+ on-exit-leak-free@2.1.2:
+ resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
+ engines: {node: '>=14.0.0'}
+
on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
@@ -3518,6 +3626,16 @@ packages:
typescript:
optional: true
+ pino-abstract-transport@3.0.0:
+ resolution: {integrity: sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==}
+
+ pino-std-serializers@7.1.0:
+ resolution: {integrity: sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==}
+
+ pino@10.3.1:
+ resolution: {integrity: sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==}
+ hasBin: true
+
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
@@ -3716,6 +3834,12 @@ packages:
process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
+ process-warning@4.0.1:
+ resolution: {integrity: sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==}
+
+ process-warning@5.0.0:
+ resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==}
+
process@0.11.10:
resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==}
engines: {node: '>= 0.6.0'}
@@ -3733,6 +3857,9 @@ packages:
queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+ quick-format-unescaped@4.0.4:
+ resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==}
+
radix3@1.1.2:
resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
@@ -3761,6 +3888,10 @@ packages:
resolution: {integrity: sha512-9u/XQ1pvrQtYyMpZe7DXKv2p5CNvyVwzUB6uhLAnQwHMSgKMBR62lc7AHljaeteeHXn11XTAaLLUVZYVZyuRBQ==}
engines: {node: '>= 20.19.0'}
+ real-require@0.2.0:
+ resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==}
+ engines: {node: '>= 12.13.0'}
+
redis-errors@1.2.0:
resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==}
engines: {node: '>=4'}
@@ -3785,6 +3916,10 @@ packages:
resolution: {integrity: sha512-dLsljMd9sqwRkby8zhO1gSg3PnJIBFid8f4CQj/sXx+7cKx+E7u0PKhZ+U4wmhx7EfmtvnA318oVaIkAB1lRJw==}
hasBin: true
+ require-from-string@2.0.2:
+ resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
+ engines: {node: '>=0.10.0'}
+
reserved-identifiers@1.2.0:
resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
engines: {node: '>=18'}
@@ -3801,6 +3936,10 @@ packages:
engines: {node: '>= 0.4'}
hasBin: true
+ ret@0.5.0:
+ resolution: {integrity: sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==}
+ engines: {node: '>=10'}
+
reusify@1.1.0:
resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
@@ -3866,6 +4005,14 @@ packages:
safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
+ safe-regex2@5.1.1:
+ resolution: {integrity: sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==}
+ hasBin: true
+
+ safe-stable-stringify@2.5.0:
+ resolution: {integrity: sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==}
+ engines: {node: '>=10'}
+
sax@1.6.0:
resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==}
engines: {node: '>=11.0.0'}
@@ -3877,6 +4024,9 @@ packages:
scule@1.3.0:
resolution: {integrity: sha512-6FtHJEvt+pVMIB9IBY+IcCJ6Z5f1iQnytgyfKMhDKgmzYG+TeH/wx1y3l27rshSbLiSanrR9ffZDrEsmjlQF2g==}
+ secure-json-parse@4.1.0:
+ resolution: {integrity: sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==}
+
semver@6.3.1:
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
hasBin: true
@@ -3905,6 +4055,9 @@ packages:
resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
engines: {node: '>= 18'}
+ set-cookie-parser@2.7.2:
+ resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
+
setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
@@ -3945,6 +4098,9 @@ packages:
resolution: {integrity: sha512-KAkBqZl3c2GvNgNhcoyJae1aKldDW0LO279wF9bk1PnluRTETKBq0WyzRXxEhoQLk56yHaOY4JCBEKDuJIET5g==}
engines: {node: '>=20.0.0'}
+ sonic-boom@4.2.1:
+ resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==}
+
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@@ -3973,6 +4129,10 @@ packages:
resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==}
engines: {node: '>=0.10.0'}
+ split2@4.2.0:
+ resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
+ engines: {node: '>= 10.x'}
+
srvx@0.11.15:
resolution: {integrity: sha512-iXsux0UcOjdvs0LCMa2Ws3WwcDUozA3JN3BquNXkaFPP7TpRqgunKdEgoZ/uwb1J6xaYHfxtz9Twlh6yzwM6Tg==}
engines: {node: '>=20.16.0'}
@@ -4093,6 +4253,10 @@ packages:
text-decoder@1.2.7:
resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==}
+ thread-stream@4.0.0:
+ resolution: {integrity: sha512-4iMVL6HAINXWf1ZKZjIPcz5wYaOdPhtO8ATvZ+Xqp3BTdaqtAwQkNmKORqcIo5YkQqGXq5cwfswDwMqqQNrpJA==}
+ engines: {node: '>=20'}
+
tiny-invariant@1.3.3:
resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==}
@@ -4123,6 +4287,10 @@ packages:
resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
engines: {node: '>=20'}
+ toad-cache@3.7.0:
+ resolution: {integrity: sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==}
+ engines: {node: '>=12'}
+
toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
@@ -4175,6 +4343,11 @@ packages:
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+ tsx@4.21.0:
+ resolution: {integrity: sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
type-check@0.4.0:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
@@ -5033,6 +5206,29 @@ snapshots:
'@eslint/core': 1.2.1
levn: 0.4.1
+ '@fastify/ajv-compiler@4.0.5':
+ dependencies:
+ ajv: 8.20.0
+ ajv-formats: 3.0.1(ajv@8.20.0)
+ fast-uri: 3.1.0
+
+ '@fastify/error@4.2.0': {}
+
+ '@fastify/fast-json-stringify-compiler@5.0.3':
+ dependencies:
+ fast-json-stringify: 6.3.0
+
+ '@fastify/forwarded@3.0.1': {}
+
+ '@fastify/merge-json-schemas@0.2.1':
+ dependencies:
+ dequal: 2.0.3
+
+ '@fastify/proxy-addr@5.1.0':
+ dependencies:
+ '@fastify/forwarded': 3.0.1
+ ipaddr.js: 2.3.0
+
'@humanfs/core@0.19.2':
dependencies:
'@humanfs/types': 0.15.0
@@ -5175,11 +5371,11 @@ snapshots:
'@nuxt/devalue@2.0.2': {}
- '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@nuxt/devtools-kit@3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
execa: 8.0.1
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
transitivePeerDependencies:
- magicast
@@ -5194,9 +5390,9 @@ snapshots:
pkg-types: 2.3.0
semver: 7.7.4
- '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@nuxt/devtools@3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
'@nuxt/devtools-wizard': 3.2.4
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@vue/devtools-core': 8.1.1(vue@3.5.33(typescript@6.0.3))
@@ -5224,9 +5420,9 @@ snapshots:
sirv: 3.0.2
structured-clone-es: 2.0.0
tinyglobby: 0.2.16
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
- vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
+ vite-plugin-inspect: 11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
+ vite-plugin-vue-tracer: 1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
which: 6.0.1
ws: 8.20.0
transitivePeerDependencies:
@@ -5275,10 +5471,10 @@ snapshots:
- supports-color
- typescript
- '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@nuxt/eslint@1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(magicast@0.5.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))':
dependencies:
'@eslint/config-inspector': 1.5.0(eslint@10.2.1(jiti@2.6.1))
- '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@nuxt/devtools-kit': 3.2.4(magicast@0.5.2)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
'@nuxt/eslint-config': 1.15.2(@typescript-eslint/utils@8.59.0(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3))(@vue/compiler-sfc@3.5.33)(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
'@nuxt/eslint-plugin': 1.15.2(eslint@10.2.1(jiti@2.6.1))(typescript@6.0.3)
'@nuxt/kit': 4.4.2(magicast@0.5.2)
@@ -5328,7 +5524,7 @@ snapshots:
transitivePeerDependencies:
- magicast
- '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.17)(srvx@0.11.15)(typescript@6.0.3)':
+ '@nuxt/nitro-server@4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.17)(srvx@0.11.15)(typescript@6.0.3)':
dependencies:
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@nuxt/devalue': 2.0.2
@@ -5347,7 +5543,7 @@ snapshots:
klona: 2.0.6
mocked-exports: 0.1.1
nitropack: 2.13.3(rolldown@1.0.0-rc.17)(srvx@0.11.15)
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)
nypm: 0.6.6
ohash: 2.0.11
pathe: 2.0.3
@@ -5415,12 +5611,12 @@ snapshots:
rc9: 3.0.1
std-env: 4.1.0
- '@nuxt/vite-builder@4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@10.2.1(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))(yaml@2.8.3)':
+ '@nuxt/vite-builder@4.4.2(0dac59c5fe09697779378f8445196126)':
dependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
'@rollup/plugin-replace': 6.0.3(rollup@4.60.2)
- '@vitejs/plugin-vue': 6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
- '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@vitejs/plugin-vue': 6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@vitejs/plugin-vue-jsx': 5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
autoprefixer: 10.5.0(postcss@8.5.10)
consola: 3.4.2
cssnano: 7.1.7(postcss@8.5.10)
@@ -5433,7 +5629,7 @@ snapshots:
magic-string: 0.30.21
mlly: 1.8.2
mocked-exports: 0.1.1
- nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3)
+ nuxt: 4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3)
nypm: 0.6.6
pathe: 2.0.3
pkg-types: 2.3.0
@@ -5442,9 +5638,9 @@ snapshots:
std-env: 4.1.0
ufo: 1.6.3
unenv: 2.0.0-rc.24
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-node: 5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-plugin-checker: 0.12.0(eslint@10.2.1(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
+ vite-node: 5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
+ vite-plugin-checker: 0.12.0(eslint@10.2.1(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
vue: 3.5.33(typescript@6.0.3)
vue-bundle-renderer: 2.2.0
optionalDependencies:
@@ -5749,6 +5945,8 @@ snapshots:
transitivePeerDependencies:
- magicast
+ '@pinojs/redact@0.4.0': {}
+
'@pkgjs/parseargs@0.11.0':
optional: true
@@ -6048,12 +6246,12 @@ snapshots:
'@tailwindcss/oxide-win32-arm64-msvc': 4.2.4
'@tailwindcss/oxide-win32-x64-msvc': 4.2.4
- '@tailwindcss/vite@4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@tailwindcss/vite@4.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))':
dependencies:
'@tailwindcss/node': 4.2.4
'@tailwindcss/oxide': 4.2.4
tailwindcss: 4.2.4
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
'@tybys/wasm-util@0.10.1':
dependencies:
@@ -6256,22 +6454,22 @@ snapshots:
- rollup
- supports-color
- '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@vitejs/plugin-vue-jsx@5.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@babel/core': 7.29.0
'@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0)
'@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0)
'@rolldown/pluginutils': 1.0.0-rc.17
'@vue/babel-plugin-jsx': 2.0.1(@babel/core@7.29.0)
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
vue: 3.5.33(typescript@6.0.3)
transitivePeerDependencies:
- supports-color
- '@vitejs/plugin-vue@6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
+ '@vitejs/plugin-vue@6.0.6(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))':
dependencies:
'@rolldown/pluginutils': 1.0.0-rc.13
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
vue: 3.5.33(typescript@6.0.3)
'@vitest/expect@4.1.5':
@@ -6283,13 +6481,13 @@ snapshots:
chai: 6.2.2
tinyrainbow: 3.1.0
- '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))':
+ '@vitest/mocker@4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))':
dependencies:
'@vitest/spy': 4.1.5
estree-walker: 3.0.3
magic-string: 0.30.21
optionalDependencies:
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
'@vitest/pretty-format@4.1.5':
dependencies:
@@ -6451,6 +6649,8 @@ snapshots:
dependencies:
event-target-shim: 5.0.1
+ abstract-logging@2.0.1: {}
+
acorn-import-attributes@1.9.5(acorn@8.16.0):
dependencies:
acorn: 8.16.0
@@ -6463,6 +6663,10 @@ snapshots:
agent-base@7.1.4: {}
+ ajv-formats@3.0.1(ajv@8.20.0):
+ optionalDependencies:
+ ajv: 8.20.0
+
ajv@6.15.0:
dependencies:
fast-deep-equal: 3.1.3
@@ -6470,6 +6674,13 @@ snapshots:
json-schema-traverse: 0.4.1
uri-js: 4.4.1
+ ajv@8.20.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-uri: 3.1.0
+ json-schema-traverse: 1.0.0
+ require-from-string: 2.0.2
+
ansi-regex@5.0.1: {}
ansi-regex@6.2.2: {}
@@ -6537,6 +6748,8 @@ snapshots:
async@3.2.6: {}
+ atomic-sleep@1.0.0: {}
+
autoprefixer@10.5.0(postcss@8.5.10):
dependencies:
browserslist: 4.28.2
@@ -6546,6 +6759,11 @@ snapshots:
postcss: 8.5.10
postcss-value-parser: 4.2.0
+ avvio@9.2.0:
+ dependencies:
+ '@fastify/error': 4.2.0
+ fastq: 1.20.1
+
b4a@1.8.0: {}
balanced-match@1.0.2: {}
@@ -6740,6 +6958,8 @@ snapshots:
cookie-es@3.1.1: {}
+ cookie@1.1.1: {}
+
copy-anything@4.0.5:
dependencies:
is-what: 5.5.0
@@ -6874,6 +7094,8 @@ snapshots:
depd@2.0.0: {}
+ dequal@2.0.3: {}
+
destr@2.0.5: {}
detect-libc@2.1.2: {}
@@ -7209,6 +7431,8 @@ snapshots:
exsolve@1.0.8: {}
+ fast-decode-uri-component@1.0.1: {}
+
fast-deep-equal@3.1.3: {}
fast-fifo@1.3.2: {}
@@ -7223,20 +7447,53 @@ snapshots:
fast-json-stable-stringify@2.1.0: {}
+ fast-json-stringify@6.3.0:
+ dependencies:
+ '@fastify/merge-json-schemas': 0.2.1
+ ajv: 8.20.0
+ ajv-formats: 3.0.1(ajv@8.20.0)
+ fast-uri: 3.1.0
+ json-schema-ref-resolver: 3.0.0
+ rfdc: 1.4.1
+
fast-levenshtein@2.0.6: {}
fast-npm-meta@1.5.0: {}
+ fast-querystring@1.1.2:
+ dependencies:
+ fast-decode-uri-component: 1.0.1
+
fast-string-truncated-width@1.2.1: {}
fast-string-width@1.1.0:
dependencies:
fast-string-truncated-width: 1.2.1
+ fast-uri@3.1.0: {}
+
fast-wrap-ansi@0.1.6:
dependencies:
fast-string-width: 1.1.0
+ fastify@5.8.5:
+ dependencies:
+ '@fastify/ajv-compiler': 4.0.5
+ '@fastify/error': 4.2.0
+ '@fastify/fast-json-stringify-compiler': 5.0.3
+ '@fastify/proxy-addr': 5.1.0
+ abstract-logging: 2.0.1
+ avvio: 9.2.0
+ fast-json-stringify: 6.3.0
+ find-my-way: 9.5.0
+ light-my-request: 6.6.0
+ pino: 10.3.1
+ process-warning: 5.0.0
+ rfdc: 1.4.1
+ secure-json-parse: 4.1.0
+ semver: 7.7.4
+ toad-cache: 3.7.0
+
fastq@1.20.1:
dependencies:
reusify: 1.1.0
@@ -7255,6 +7512,12 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ find-my-way@9.5.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-querystring: 1.1.2
+ safe-regex2: 5.1.1
+
find-up-simple@1.0.1: {}
find-up@5.0.0:
@@ -7437,6 +7700,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ ipaddr.js@2.3.0: {}
+
iron-webcrypto@1.2.1: {}
is-builtin-module@5.0.0:
@@ -7516,6 +7781,10 @@ snapshots:
json-buffer@3.0.1: {}
+ json-schema-ref-resolver@3.0.0:
+ dependencies:
+ dequal: 2.0.3
+
json-schema-to-typescript-lite@15.0.0:
dependencies:
'@apidevtools/json-schema-ref-parser': 14.2.1(@types/json-schema@7.0.15)
@@ -7523,6 +7792,8 @@ snapshots:
json-schema-traverse@0.4.1: {}
+ json-schema-traverse@1.0.0: {}
+
json-stable-stringify-without-jsonify@1.0.1: {}
json5@2.2.3: {}
@@ -7551,6 +7822,12 @@ snapshots:
prelude-ls: 1.2.1
type-check: 0.4.0
+ light-my-request@6.6.0:
+ dependencies:
+ cookie: 1.1.1
+ process-warning: 4.0.1
+ set-cookie-parser: 2.7.2
+
lightningcss-android-arm64@1.32.0:
optional: true
@@ -7888,16 +8165,16 @@ snapshots:
dependencies:
boolbase: 1.0.0
- nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3):
+ nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3):
dependencies:
'@dxup/nuxt': 0.4.1(magicast@0.5.2)(typescript@6.0.3)
'@nuxt/cli': 3.34.0(@nuxt/schema@4.4.2)(cac@6.7.14)(magicast@0.5.2)
- '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
+ '@nuxt/devtools': 3.2.4(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3))
'@nuxt/kit': 4.4.2(magicast@0.5.2)
- '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.17)(srvx@0.11.15)(typescript@6.0.3)
+ '@nuxt/nitro-server': 4.4.2(@babel/core@7.29.0)(db0@0.3.4)(ioredis@5.10.1)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(tsx@4.21.0)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(yaml@2.8.3))(rolldown@1.0.0-rc.17)(srvx@0.11.15)(typescript@6.0.3)
'@nuxt/schema': 4.4.2
'@nuxt/telemetry': 2.8.0(@nuxt/kit@4.4.2(magicast@0.5.2))
- '@nuxt/vite-builder': 4.4.2(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@types/node@25.6.0)(eslint@10.2.1(jiti@2.6.1))(lightningcss@1.32.0)(magicast@0.5.2)(nuxt@4.4.2(@babel/core@7.29.0)(@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0))(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)(@parcel/watcher@2.5.6)(@types/node@25.6.0)(@vue/compiler-sfc@3.5.33)(cac@6.7.14)(db0@0.3.4)(eslint@10.2.1(jiti@2.6.1))(ioredis@5.10.1)(lightningcss@1.32.0)(magicast@0.5.2)(optionator@0.9.4)(pinia@3.0.4(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3)))(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(srvx@0.11.15)(terser@5.46.2)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(yaml@2.8.3))(optionator@0.9.4)(rolldown@1.0.0-rc.17)(rollup-plugin-visualizer@7.0.1(rolldown@1.0.0-rc.17)(rollup@4.60.2))(rollup@4.60.2)(terser@5.46.2)(typescript@6.0.3)(vue@3.5.33(typescript@6.0.3))(yaml@2.8.3)
+ '@nuxt/vite-builder': 4.4.2(0dac59c5fe09697779378f8445196126)
'@unhead/vue': 2.1.13(vue@3.5.33(typescript@6.0.3))
'@vue/shared': 3.5.33
c12: 3.3.4(magicast@0.5.2)
@@ -8043,6 +8320,8 @@ snapshots:
on-change@6.0.2: {}
+ on-exit-leak-free@2.1.2: {}
+
on-finished@2.4.1:
dependencies:
ee-first: 1.1.1
@@ -8228,6 +8507,26 @@ snapshots:
optionalDependencies:
typescript: 6.0.3
+ pino-abstract-transport@3.0.0:
+ dependencies:
+ split2: 4.2.0
+
+ pino-std-serializers@7.1.0: {}
+
+ pino@10.3.1:
+ dependencies:
+ '@pinojs/redact': 0.4.0
+ atomic-sleep: 1.0.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 3.0.0
+ pino-std-serializers: 7.1.0
+ process-warning: 5.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 4.2.1
+ thread-stream: 4.0.0
+
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
@@ -8414,6 +8713,10 @@ snapshots:
process-nextick-args@2.0.1: {}
+ process-warning@4.0.1: {}
+
+ process-warning@5.0.0: {}
+
process@0.11.10: {}
punycode@2.3.1: {}
@@ -8424,6 +8727,8 @@ snapshots:
queue-microtask@1.2.3: {}
+ quick-format-unescaped@4.0.4: {}
+
radix3@1.1.2: {}
range-parser@1.2.1: {}
@@ -8459,6 +8764,8 @@ snapshots:
readdirp@5.0.0: {}
+ real-require@0.2.0: {}
+
redis-errors@1.2.0: {}
redis-parser@3.0.0:
@@ -8480,6 +8787,8 @@ snapshots:
dependencies:
jsesc: 3.1.0
+ require-from-string@2.0.2: {}
+
reserved-identifiers@1.2.0: {}
resolve-from@5.0.0: {}
@@ -8493,6 +8802,8 @@ snapshots:
path-parse: 1.0.7
supports-preserve-symlinks-flag: 1.0.0
+ ret@0.5.0: {}
+
reusify@1.1.0: {}
rfdc@1.4.1: {}
@@ -8589,6 +8900,12 @@ snapshots:
safe-buffer@5.2.1: {}
+ safe-regex2@5.1.1:
+ dependencies:
+ ret: 0.5.0
+
+ safe-stable-stringify@2.5.0: {}
+
sax@1.6.0: {}
scslre@0.3.0:
@@ -8599,6 +8916,8 @@ snapshots:
scule@1.3.0: {}
+ secure-json-parse@4.1.0: {}
+
semver@6.3.1: {}
semver@7.7.4: {}
@@ -8636,6 +8955,8 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ set-cookie-parser@2.7.2: {}
+
setprototypeof@1.2.0: {}
shebang-command@2.0.0:
@@ -8672,6 +8993,10 @@ snapshots:
smob@1.6.1: {}
+ sonic-boom@4.2.1:
+ dependencies:
+ atomic-sleep: 1.0.0
+
source-map-js@1.2.1: {}
source-map-support@0.5.21:
@@ -8694,6 +9019,8 @@ snapshots:
speakingurl@14.0.1: {}
+ split2@4.2.0: {}
+
srvx@0.11.15: {}
stable-hash-x@0.2.0: {}
@@ -8830,6 +9157,10 @@ snapshots:
transitivePeerDependencies:
- react-native-b4a
+ thread-stream@4.0.0:
+ dependencies:
+ real-require: 0.2.0
+
tiny-invariant@1.3.3: {}
tinybench@2.9.0: {}
@@ -8854,6 +9185,8 @@ snapshots:
'@sindresorhus/base62': 1.0.0
reserved-identifiers: 1.2.0
+ toad-cache@3.7.0: {}
+
toidentifier@1.0.1: {}
totalist@3.0.1: {}
@@ -8896,6 +9229,13 @@ snapshots:
tslib@2.8.1:
optional: true
+ tsx@4.21.0:
+ dependencies:
+ esbuild: 0.27.7
+ get-tsconfig: 4.14.0
+ optionalDependencies:
+ fsevents: 2.3.3
+
type-check@0.4.0:
dependencies:
prelude-ls: 1.2.1
@@ -9076,23 +9416,23 @@ snapshots:
util-deprecate@1.0.2: {}
- vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vite-dev-rpc@1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)):
dependencies:
birpc: 2.9.0
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-hot-client: 2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
+ vite-hot-client: 2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
- vite-hot-client@2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vite-hot-client@2.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)):
dependencies:
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
- vite-node@5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3):
+ vite-node@5.3.0(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3):
dependencies:
cac: 6.7.14
es-module-lexer: 2.0.0
obug: 2.1.1
pathe: 2.0.3
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
transitivePeerDependencies:
- '@types/node'
- jiti
@@ -9106,7 +9446,7 @@ snapshots:
- tsx
- yaml
- vite-plugin-checker@0.12.0(eslint@10.2.1(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vite-plugin-checker@0.12.0(eslint@10.2.1(jiti@2.6.1))(optionator@0.9.4)(typescript@6.0.3)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)):
dependencies:
'@babel/code-frame': 7.29.0
chokidar: 4.0.3
@@ -9115,14 +9455,14 @@ snapshots:
picomatch: 4.0.4
tiny-invariant: 1.3.3
tinyglobby: 0.2.16
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
vscode-uri: 3.1.0
optionalDependencies:
eslint: 10.2.1(jiti@2.6.1)
optionator: 0.9.4
typescript: 6.0.3
- vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vite-plugin-inspect@11.3.3(@nuxt/kit@4.4.2(magicast@0.5.2))(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)):
dependencies:
ansis: 4.2.0
debug: 4.4.3
@@ -9132,24 +9472,24 @@ snapshots:
perfect-debounce: 2.1.0
sirv: 3.0.2
unplugin-utils: 0.3.1
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
- vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
+ vite-dev-rpc: 1.1.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
optionalDependencies:
'@nuxt/kit': 4.4.2(magicast@0.5.2)
transitivePeerDependencies:
- supports-color
- vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)):
+ vite-plugin-vue-tracer@1.3.0(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))(vue@3.5.33(typescript@6.0.3)):
dependencies:
estree-walker: 3.0.3
exsolve: 1.0.8
magic-string: 0.30.21
pathe: 2.0.3
source-map-js: 1.2.1
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
vue: 3.5.33(typescript@6.0.3)
- vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3):
+ vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3):
dependencies:
esbuild: 0.27.7
fdir: 6.5.0(picomatch@4.0.4)
@@ -9163,12 +9503,13 @@ snapshots:
jiti: 2.6.1
lightningcss: 1.32.0
terser: 5.46.2
+ tsx: 4.21.0
yaml: 2.8.3
- vitest@4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)):
+ vitest@4.1.5(@types/node@25.6.0)(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)):
dependencies:
'@vitest/expect': 4.1.5
- '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3))
+ '@vitest/mocker': 4.1.5(vite@7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3))
'@vitest/pretty-format': 4.1.5
'@vitest/runner': 4.1.5
'@vitest/snapshot': 4.1.5
@@ -9185,7 +9526,7 @@ snapshots:
tinyexec: 1.1.1
tinyglobby: 0.2.16
tinyrainbow: 3.1.0
- vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(yaml@2.8.3)
+ vite: 7.3.2(@types/node@25.6.0)(jiti@2.6.1)(lightningcss@1.32.0)(terser@5.46.2)(tsx@4.21.0)(yaml@2.8.3)
why-is-node-running: 2.3.0
optionalDependencies:
'@types/node': 25.6.0
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index d6f93c7d..5c0aa455 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,5 +1,5 @@
packages:
- - "apps/frontend"
+ - "apps/*"
- "packages/*"
allowBuilds:
From ae44eef8c389536950750dbeda1466a73d79374d Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Thu, 30 Apr 2026 17:29:29 +1000
Subject: [PATCH 35/51] chore: update README
---
README.md | 9 ---------
1 file changed, 9 deletions(-)
diff --git a/README.md b/README.md
index 4c160978..01ccac76 100644
--- a/README.md
+++ b/README.md
@@ -8,15 +8,6 @@ A website for every Technical Minecraft player.
This is a monorepo-based web project with frontend-backend separation architecture.
-Frontend: **Nuxt (Vue/Vite)**
-Backend: **Django + Django Rest Framework**
-Database: **PostgreSQL**
-Cache: **Redis**
-Documentation: **MkDocs**
-Observability: **Grafana + Loki + Alloy**
-Proxy: **Treafik**
-Deployment: **Docker**
-
[](https://skillicons.dev)
[](https://skillicons.dev)
From 6e3df3ff56f798e667d80b9e11027fca2639bea0 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Thu, 30 Apr 2026 22:30:01 +1000
Subject: [PATCH 36/51] feature: add alienmark client in backend
---
apps/backend/backend/settings/base.py | 3 ++
.../backend/settings/{staging.py => stg.py} | 2 +-
apps/backend/backend/settings/test.py | 3 ++
apps/backend/core/utils/alienmark.py | 39 +++++++++++++++++++
apps/backend/ruff.toml | 2 +-
5 files changed, 47 insertions(+), 2 deletions(-)
rename apps/backend/backend/settings/{staging.py => stg.py} (81%)
create mode 100644 apps/backend/core/utils/alienmark.py
diff --git a/apps/backend/backend/settings/base.py b/apps/backend/backend/settings/base.py
index 2159943f..41f53380 100644
--- a/apps/backend/backend/settings/base.py
+++ b/apps/backend/backend/settings/base.py
@@ -476,6 +476,9 @@
VERIFICATION_CODE_TTL = 600
MAX_VERIFICATION_ATTEMPTS = 10
+ALIENMARK_SERVICE_URL: str = "http://alienmark:8787"
+ALIENMARK_TIMEOUT_SECONDS: float = 3.0
+
YOUTUBE_CHANNEL_ID = env.str("YOUTUBE_CHANNEL_ID")
YOUTUBE_CHANNEL_HANDLE = env.str("YOUTUBE_CHANNEL_HANDLE")
YOUTUBE_REQUEST_HEADERS = {
diff --git a/apps/backend/backend/settings/staging.py b/apps/backend/backend/settings/stg.py
similarity index 81%
rename from apps/backend/backend/settings/staging.py
rename to apps/backend/backend/settings/stg.py
index f0681f08..97827f16 100644
--- a/apps/backend/backend/settings/staging.py
+++ b/apps/backend/backend/settings/stg.py
@@ -3,7 +3,7 @@
DEBUG = False
CSRF_TRUSTED_ORIGINS=[
- "https://api.staging.aliencommons.lazyalienserver.top",
+ "https://api-stg.aliencommons.lazyalienserver.top",
]
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
USE_X_FORWARDED_HOST = True
diff --git a/apps/backend/backend/settings/test.py b/apps/backend/backend/settings/test.py
index 7a33d2fd..27074684 100644
--- a/apps/backend/backend/settings/test.py
+++ b/apps/backend/backend/settings/test.py
@@ -62,6 +62,9 @@
DEFAULT_FROM_EMAIL = "AlienCommons Test "
SERVER_EMAIL = "server@test.local"
+ALIENMARK_SERVICE_URL: str = "http://alienmark:8787"
+ALIENMARK_TIMEOUT_SECONDS: float = 3.0
+
YOUTUBE_CHANNEL_ID = "test-channel-id"
YOUTUBE_CHANNEL_HANDLE = "@test-channel"
YOUTUBE_REQUEST_HEADERS = {"Referer": "http://testserver"}
diff --git a/apps/backend/core/utils/alienmark.py b/apps/backend/core/utils/alienmark.py
new file mode 100644
index 00000000..a790ec79
--- /dev/null
+++ b/apps/backend/core/utils/alienmark.py
@@ -0,0 +1,39 @@
+import requests
+from django.conf import settings
+
+from core.exceptions import ServiceError
+
+
+def render_markdown_to_html(markdown: str) -> str:
+ """
+ Render Markdown by calling the internal alienmark service.
+ """
+ try:
+ response = requests.post(
+ f"{settings.ALIENMARK_SERVICE_URL}/render-html",
+ json={"markdown": markdown},
+ timeout=settings.ALIENMARK_TIMEOUT_SECONDS,
+ )
+ response.raise_for_status()
+ except requests.RequestException as exc:
+ raise ServiceError(
+ detail="Failed to render markdown.",
+ code="alienmark_render_failed",
+ ) from exc
+
+ try:
+ data = response.json()
+ html = data["html"]
+ except (ValueError, KeyError, TypeError) as exc:
+ raise ServiceError(
+ detail="Invalid response from markdown renderer.",
+ code="alienmark_invalid_response",
+ ) from exc
+
+ if not isinstance(html, str):
+ raise ServiceError(
+ detail="Invalid html returned from markdown renderer.",
+ code="alienmark_invalid_response",
+ )
+
+ return html
diff --git a/apps/backend/ruff.toml b/apps/backend/ruff.toml
index 82d692b1..4beccd19 100644
--- a/apps/backend/ruff.toml
+++ b/apps/backend/ruff.toml
@@ -1,4 +1,4 @@
[lint.per-file-ignores]
"backend/settings/dev.py" = ["F403", "F405"]
"backend/settings/pro.py" = ["F403", "F405"]
-"backend/settings/staging.py" = ["F403", "F405"]
+"backend/settings/stg.py" = ["F403", "F405"]
From b4f073545e8f2dec86b7124a66ab9a1a7ec2fa91 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Thu, 30 Apr 2026 22:36:25 +1000
Subject: [PATCH 37/51] delete youtube client
---
apps/backend/backend/settings/base.py | 9 ---
apps/backend/backend/settings/test.py | 7 --
apps/backend/core/utils/youtube.py | 27 -------
apps/backend/pages/__init__.py | 0
apps/backend/pages/apps.py | 6 --
apps/backend/pages/migrations/__init__.py | 0
apps/backend/pages/tasks.py | 16 ----
apps/backend/pages/tests.py | 68 -----------------
apps/backend/pages/urls.py | 9 ---
apps/backend/pages/views.py | 73 -------------------
apps/backend/tasks/periodic_tasks_registry.py | 48 +++++-------
env/.env.dev | 5 --
12 files changed, 20 insertions(+), 248 deletions(-)
delete mode 100644 apps/backend/core/utils/youtube.py
delete mode 100644 apps/backend/pages/__init__.py
delete mode 100644 apps/backend/pages/apps.py
delete mode 100644 apps/backend/pages/migrations/__init__.py
delete mode 100644 apps/backend/pages/tasks.py
delete mode 100644 apps/backend/pages/tests.py
delete mode 100644 apps/backend/pages/urls.py
delete mode 100644 apps/backend/pages/views.py
diff --git a/apps/backend/backend/settings/base.py b/apps/backend/backend/settings/base.py
index 41f53380..243b182f 100644
--- a/apps/backend/backend/settings/base.py
+++ b/apps/backend/backend/settings/base.py
@@ -156,7 +156,6 @@
"django.contrib.staticfiles",
"core.apps.CoreConfig",
"users.apps.UsersConfig",
- "pages.apps.PagesConfig",
"logs.apps.LogsConfig",
"articles.apps.ArticlesConfig",
"tasks.apps.TasksConfig",
@@ -478,11 +477,3 @@
ALIENMARK_SERVICE_URL: str = "http://alienmark:8787"
ALIENMARK_TIMEOUT_SECONDS: float = 3.0
-
-YOUTUBE_CHANNEL_ID = env.str("YOUTUBE_CHANNEL_ID")
-YOUTUBE_CHANNEL_HANDLE = env.str("YOUTUBE_CHANNEL_HANDLE")
-YOUTUBE_REQUEST_HEADERS = {
- "Referer": "http://localhost:8000",
-}
-YOUTUBE_API_KEY = env.str("YOUTUBE_API_KEY")
-YOUTUBE_API_URL = f"https://youtube.googleapis.com/youtube/v3/channels?part=snippet,statistics&id={YOUTUBE_CHANNEL_ID}&key={YOUTUBE_API_KEY}"
diff --git a/apps/backend/backend/settings/test.py b/apps/backend/backend/settings/test.py
index 27074684..3e254e8e 100644
--- a/apps/backend/backend/settings/test.py
+++ b/apps/backend/backend/settings/test.py
@@ -22,7 +22,6 @@
"django.contrib.sessions",
"django.contrib.messages",
"django.contrib.staticfiles",
- "pages.apps.PagesConfig",
"logs.apps.LogsConfig",
"articles.apps.ArticlesConfig",
"tasks.apps.TasksConfig",
@@ -65,12 +64,6 @@
ALIENMARK_SERVICE_URL: str = "http://alienmark:8787"
ALIENMARK_TIMEOUT_SECONDS: float = 3.0
-YOUTUBE_CHANNEL_ID = "test-channel-id"
-YOUTUBE_CHANNEL_HANDLE = "@test-channel"
-YOUTUBE_REQUEST_HEADERS = {"Referer": "http://testserver"}
-YOUTUBE_API_KEY = "test-api-key"
-YOUTUBE_API_URL = "https://example.com/youtube"
-
REST_FRAMEWORK = {
"DEFAULT_PERMISSION_CLASSES": [
"rest_framework.permissions.IsAuthenticated",
diff --git a/apps/backend/core/utils/youtube.py b/apps/backend/core/utils/youtube.py
deleted file mode 100644
index cea80f82..00000000
--- a/apps/backend/core/utils/youtube.py
+++ /dev/null
@@ -1,27 +0,0 @@
-from django.conf import settings
-
-import requests
-
-from .cache import set_cache
-
-
-YOUTUBE_API_URL = settings.YOUTUBE_API_URL
-YOUTUBE_REQUEST_HEADERS = settings.YOUTUBE_REQUEST_HEADERS
-
-
-def fetch_youtube_data():
- """
- Fetch YouTube Data and Update Cache
- """
- namespace = 'youtube_data'
- entity = 'channel_stats'
- identifier = settings.YOUTUBE_CHANNEL_ID
-
- header, url = YOUTUBE_REQUEST_HEADERS, YOUTUBE_API_URL
- response = requests.get(url, headers=header)
- data = response.json()
-
- set_cache(
- namespace=namespace, entity=entity, identifier=identifier,
- value=data, timeout=None
- )
diff --git a/apps/backend/pages/__init__.py b/apps/backend/pages/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/backend/pages/apps.py b/apps/backend/pages/apps.py
deleted file mode 100644
index 4b6237c5..00000000
--- a/apps/backend/pages/apps.py
+++ /dev/null
@@ -1,6 +0,0 @@
-from django.apps import AppConfig
-
-
-class PagesConfig(AppConfig):
- default_auto_field = "django.db.models.BigAutoField"
- name = "pages"
diff --git a/apps/backend/pages/migrations/__init__.py b/apps/backend/pages/migrations/__init__.py
deleted file mode 100644
index e69de29b..00000000
diff --git a/apps/backend/pages/tasks.py b/apps/backend/pages/tasks.py
deleted file mode 100644
index cf41d05f..00000000
--- a/apps/backend/pages/tasks.py
+++ /dev/null
@@ -1,16 +0,0 @@
-from django.tasks import task
-
-from core.utils.youtube import fetch_youtube_data
-from logs.logging import get_logger
-
-logger = get_logger(__name__)
-
-
-@task
-def refresh_youtube_cache():
- try:
- fetch_youtube_data()
- logger.info("YouTube channel data successfully refreshed")
- except Exception:
- logger.exception("Failed to fetch YouTube channel data")
- raise
diff --git a/apps/backend/pages/tests.py b/apps/backend/pages/tests.py
deleted file mode 100644
index fa0267dd..00000000
--- a/apps/backend/pages/tests.py
+++ /dev/null
@@ -1,68 +0,0 @@
-from unittest.mock import patch
-
-from django.conf import settings
-from django.urls import reverse
-
-from rest_framework import status
-
-from core.tests.testcases import BaseAPITestCase
-from core.utils.cache import set_cache
-
-
-class YoutubeSnapshotViewTests(BaseAPITestCase):
- def setUp(self):
- self.url = reverse("youtube_channel_snapshot")
-
- @patch("pages.views.days_since_start", return_value=42)
- def test_returns_cached_youtube_snapshot_in_standard_response(self, days_since_start_mock):
- set_cache(
- namespace="youtube_data",
- entity="channel_stats",
- identifier=settings.YOUTUBE_CHANNEL_ID,
- value={
- "items": [
- {
- "snippet": {
- "thumbnails": {
- "high": {"url": "https://example.com/thumb.jpg"},
- }
- },
- "statistics": {
- "subscriberCount": "1000",
- "videoCount": "25",
- "viewCount": "50000",
- },
- }
- ]
- },
- )
-
- response = self.get_json(self.url)
-
- self.assert_success_response(
- response,
- status_code=status.HTTP_200_OK,
- code="ok",
- message="ok",
- )
- self.assertEqual(
- response.data["data"],
- {
- "thumbnail_url": "https://example.com/thumb.jpg",
- "subscriber_count": "1000",
- "video_count": "25",
- "view_count": "50000",
- "since": 42,
- },
- )
- days_since_start_mock.assert_called_once()
-
- def test_returns_not_found_when_youtube_snapshot_is_missing(self):
- response = self.get_json(self.url)
-
- self.assert_error_response(
- response,
- status_code=status.HTTP_404_NOT_FOUND,
- code="not_found",
- message="Request failed",
- )
diff --git a/apps/backend/pages/urls.py b/apps/backend/pages/urls.py
deleted file mode 100644
index 6f7bb8fa..00000000
--- a/apps/backend/pages/urls.py
+++ /dev/null
@@ -1,9 +0,0 @@
-from django.urls import path
-
-from .views import (
- YoutubeSnapshotView,
-)
-
-urlpatterns = [
- path('pages/youtube_channel_snapshot/', YoutubeSnapshotView.as_view(), name='youtube_channel_snapshot'),
-]
diff --git a/apps/backend/pages/views.py b/apps/backend/pages/views.py
deleted file mode 100644
index 8b9bd7f7..00000000
--- a/apps/backend/pages/views.py
+++ /dev/null
@@ -1,73 +0,0 @@
-from django.conf import settings
-
-from rest_framework.permissions import AllowAny
-from rest_framework.views import APIView
-from rest_framework.exceptions import NotFound
-
-from datetime import datetime
-
-from core.utils.cache import get_cache
-from core.views.mixins import FormattedResponseMixin
-from logs.logging import get_logger
-
-logger = get_logger(__name__)
-
-
-def days_since_start(date="2023-03-17"):
- now = datetime.now()
- delta = now - datetime.strptime(date, "%Y-%m-%d")
- return delta.days
-
-
-def _fetch_youtube_cache():
- """
- Fetch cached YouTube data
- """
- namespace = 'youtube_data'
- entity = 'channel_stats'
- identifier = settings.YOUTUBE_CHANNEL_ID
-
- raw_data = get_cache(
- namespace=namespace, entity=entity, identifier=identifier
- )
-
- if not raw_data:
- return None
-
- items = raw_data.get("items") or []
- if not items:
- return None
-
- data = items[0]
-
- return data
-
-
-class YoutubeSnapshotView(FormattedResponseMixin, APIView):
- """
- Return YouTube Channel Snapshot
- """
- permission_classes = (AllowAny,)
-
- def get(self, request):
- data = _fetch_youtube_cache()
-
- if data:
- thumbnail_url = data["snippet"]["thumbnails"]["high"]["url"]
- subscriber_count = data["statistics"]["subscriberCount"]
- video_count = data["statistics"]["videoCount"]
- view_count = data["statistics"]["viewCount"]
-
- return self.format_success_response(
- data={
- "thumbnail_url": thumbnail_url,
- "subscriber_count": subscriber_count,
- "video_count": video_count,
- "view_count": view_count,
- "since": days_since_start(),
- }
- )
-
- else:
- logger.error("No YouTube data found in cache")
- raise NotFound("No YouTube data found in cache")
diff --git a/apps/backend/tasks/periodic_tasks_registry.py b/apps/backend/tasks/periodic_tasks_registry.py
index c8cb7fec..796357ba 100644
--- a/apps/backend/tasks/periodic_tasks_registry.py
+++ b/apps/backend/tasks/periodic_tasks_registry.py
@@ -3,32 +3,24 @@
"""
periodic_tasks = [
- {
- "name": "update youtube cache",
- "task": "pages.tasks.refresh_youtube_cache",
- "queue_name": "maintenance",
- "schedule": {
- 'every': 1,
- 'period': 'minute'
- },
- },
- {
- "name": "clear expired sessions",
- "task": "users.tasks.clean_expired_sessions",
- "queue_name": "maintenance",
- "schedule": {
- "every": 1,
- "period": "day",
- },
- },
- {
- "name": "cleanup unreferenced article images",
- "task": "articles.tasks.cleanup_unreferenced_article_images",
- "queue_name": "maintenance",
- "schedule": {
- 'every': 1,
- 'period': 'day'
- },
- "args": [1], # grace_days=1
- },
+
+ {
+ "name": "clear expired sessions",
+ "task": "users.tasks.clean_expired_sessions",
+ "queue_name": "maintenance",
+ "schedule": {
+ "every": 1,
+ "period": "day",
+ },
+ },
+ {
+ "name": "cleanup unreferenced article images",
+ "task": "articles.tasks.cleanup_unreferenced_article_images",
+ "queue_name": "maintenance",
+ "schedule": {
+ 'every': 1,
+ 'period': 'day'
+ },
+ "args": [1], # grace_days=1
+ },
]
diff --git a/env/.env.dev b/env/.env.dev
index 80868c32..fe5d2511 100644
--- a/env/.env.dev
+++ b/env/.env.dev
@@ -15,11 +15,6 @@ EMAIL_HOST_PASSWORD=
EMAIL_USE_TLS=False
EMAIL_USE_SSL=False
-# Third-Party API
-YOUTUBE_API_KEY=AIzaSyCgEjoZtPN_GdVdpg6Iqd52c1QnrtdlvB4
-YOUTUBE_CHANNEL_HANDLE=@lastranslation
-YOUTUBE_CHANNEL_ID=UCqFzvR6Atp0qBXiEzL3Bbvw
-
# PostgreSQL
POSTGRES_DB=postgres_dev
POSTGRES_USER=backend_dev_root
From 5e0d6f90ca88453a64a740b77b24e3708096439b Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 14:46:52 +1000
Subject: [PATCH 38/51] feat(backend): delete article action annotation feature
---
apps/backend/articles/admin.py | 6 +-
.../articles/migrations/0001_initial.py | 78 -----------------
.../articles/migrations/0002_initial.py | 84 -------------------
...nt_id_alter_articlesnapshot_id_and_more.py | 59 -------------
apps/backend/articles/models.py | 5 --
apps/backend/articles/serializers.py | 38 ++-------
apps/backend/articles/services/articles.py | 28 +++----
apps/backend/articles/tests/test_views.py | 2 -
apps/backend/articles/views.py | 61 ++------------
apps/backend/tasks/migrations/0001_initial.py | 52 ------------
.../migrations/0002_alter_periodictask_id.py | 19 -----
apps/backend/users/migrations/0001_initial.py | 82 ------------------
12 files changed, 28 insertions(+), 486 deletions(-)
delete mode 100644 apps/backend/articles/migrations/0001_initial.py
delete mode 100644 apps/backend/articles/migrations/0002_initial.py
delete mode 100644 apps/backend/articles/migrations/0003_alter_articleevent_id_alter_articlesnapshot_id_and_more.py
delete mode 100644 apps/backend/tasks/migrations/0001_initial.py
delete mode 100644 apps/backend/tasks/migrations/0002_alter_periodictask_id.py
delete mode 100644 apps/backend/users/migrations/0001_initial.py
diff --git a/apps/backend/articles/admin.py b/apps/backend/articles/admin.py
index d4411605..e19dbe8d 100644
--- a/apps/backend/articles/admin.py
+++ b/apps/backend/articles/admin.py
@@ -141,9 +141,11 @@ class ArticleEventAdmin(admin.ModelAdmin):
fieldsets = [
("Key Info", {
- "fields": ("id", "event_type", "actor", "source_article", "article_snapshot", "annotation")
+ "fields": ("id", "event_type", "actor", "source_article", "article_snapshot")
+ }),
+ ("Timestamps", {
+ "fields": ("created_at",)
}),
- ("Timestamps", {"fields": ("created_at",)}),
]
def type_display(self, obj):
diff --git a/apps/backend/articles/migrations/0001_initial.py b/apps/backend/articles/migrations/0001_initial.py
deleted file mode 100644
index 97aca507..00000000
--- a/apps/backend/articles/migrations/0001_initial.py
+++ /dev/null
@@ -1,78 +0,0 @@
-# Generated by Django 6.0.3 on 2026-04-05 01:37
-
-import uuid
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- ]
-
- operations = [
- migrations.CreateModel(
- name='ArticleEvent',
- fields=[
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
- ('annotation', models.TextField(blank=True, help_text='The annotation of the article event', null=True, verbose_name='annotation')),
- ('event_type', models.IntegerField(choices=[(1, 'Submit'), (2, 'Withdraw'), (3, 'Approve'), (4, 'Reject'), (5, 'Unpublish'), (6, 'Delete')], help_text='The event type of the article event', verbose_name='event type')),
- ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the article event', verbose_name='created at')),
- ],
- options={
- 'verbose_name': 'article event',
- 'verbose_name_plural': 'article events',
- 'ordering': ['-created_at'],
- },
- ),
- migrations.CreateModel(
- name='ArticleSnapshot',
- fields=[
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
- ('title', models.CharField(db_index=True, default='', help_text='The title of the article snapshot', max_length=60, verbose_name='title')),
- ('content', models.JSONField(blank=True, default=dict, help_text='The content of the article snapshot', verbose_name='content')),
- ('content_hash', models.CharField(blank=True, db_index=True, default='', help_text='The content hash of the article snapshot', max_length=64, verbose_name='content hash')),
- ('moderation_status', models.IntegerField(choices=[(1, 'Pending'), (2, 'Withdrawn'), (3, 'Approved'), (4, 'Rejected')], db_index=True, default=1, help_text='The moderation status of the article snapshot', verbose_name='moderation status')),
- ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the article snapshot', verbose_name='created at')),
- ],
- options={
- 'verbose_name': 'article snapshot',
- 'verbose_name_plural': 'article snapshots',
- 'ordering': ['-created_at'],
- },
- ),
- migrations.CreateModel(
- name='PublishedArticle',
- fields=[
- ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created at')),
- ('updated_at', models.DateTimeField(auto_now=True, db_index=True, verbose_name='updated at')),
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
- ('title', models.CharField(db_index=True, default='', help_text='The title of the published article', max_length=60, verbose_name='title')),
- ('content', models.JSONField(blank=True, default=dict, help_text='The content of the published article', verbose_name='content')),
- ],
- options={
- 'verbose_name': 'published article',
- 'verbose_name_plural': 'published articles',
- 'ordering': ['-created_at'],
- },
- ),
- migrations.CreateModel(
- name='SourceArticle',
- fields=[
- ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, verbose_name='created at')),
- ('updated_at', models.DateTimeField(auto_now=True, db_index=True, verbose_name='updated at')),
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
- ('is_deleted', models.BooleanField(db_index=True, default=False, verbose_name='deleted')),
- ('title', models.CharField(db_index=True, default='', help_text='The title of the article', max_length=60, verbose_name='title')),
- ('content', models.JSONField(blank=True, default=dict, help_text='The content of the article', verbose_name='content')),
- ('status', models.IntegerField(choices=[(0, 'Draft'), (1, 'Pending'), (2, 'Published'), (3, 'Unpublished')], db_index=True, default=0, help_text='The status of the article', verbose_name='status')),
- ('last_moderation_at', models.DateTimeField(blank=True, help_text='The last moderation DateTime of the article', null=True, verbose_name='last moderation at')),
- ],
- options={
- 'verbose_name': 'source article',
- 'verbose_name_plural': 'source articles',
- 'ordering': ['-created_at'],
- },
- ),
- ]
diff --git a/apps/backend/articles/migrations/0002_initial.py b/apps/backend/articles/migrations/0002_initial.py
deleted file mode 100644
index e6526cc2..00000000
--- a/apps/backend/articles/migrations/0002_initial.py
+++ /dev/null
@@ -1,84 +0,0 @@
-# Generated by Django 6.0.3 on 2026-04-05 01:37
-
-import django.db.models.deletion
-from django.conf import settings
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- ('articles', '0001_initial'),
- migrations.swappable_dependency(settings.AUTH_USER_MODEL),
- ]
-
- operations = [
- migrations.AddField(
- model_name='articleevent',
- name='actor',
- field=models.ForeignKey(help_text='The actor of the article event', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='article_events', to=settings.AUTH_USER_MODEL, verbose_name='actor'),
- ),
- migrations.AddField(
- model_name='articleevent',
- name='article_snapshot',
- field=models.ForeignKey(help_text='The article snapshot of the article event', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='article_events', to='articles.articlesnapshot', verbose_name='snapshot'),
- ),
- migrations.AddField(
- model_name='sourcearticle',
- name='author',
- field=models.ForeignKey(help_text='The author of the article', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='source_articles', to=settings.AUTH_USER_MODEL, verbose_name='author'),
- ),
- migrations.AddField(
- model_name='publishedarticle',
- name='source_article',
- field=models.OneToOneField(help_text='The source article of the published version', on_delete=django.db.models.deletion.CASCADE, related_name='published_version', to='articles.sourcearticle', verbose_name='source article'),
- ),
- migrations.AddField(
- model_name='articlesnapshot',
- name='source_article',
- field=models.ForeignKey(help_text='The source article of the article snapshot', on_delete=django.db.models.deletion.CASCADE, related_name='article_snapshots', to='articles.sourcearticle', verbose_name='source article'),
- ),
- migrations.AddField(
- model_name='articleevent',
- name='source_article',
- field=models.ForeignKey(help_text='The source article of the article event', on_delete=django.db.models.deletion.CASCADE, related_name='article_events', to='articles.sourcearticle', verbose_name='source articles'),
- ),
- migrations.AddIndex(
- model_name='sourcearticle',
- index=models.Index(fields=['author', 'created_at'], name='articles_so_author__7d3dd5_idx'),
- ),
- migrations.AddIndex(
- model_name='sourcearticle',
- index=models.Index(fields=['status', 'created_at'], name='articles_so_status_044214_idx'),
- ),
- migrations.AddIndex(
- model_name='articlesnapshot',
- index=models.Index(fields=['source_article', 'created_at'], name='articles_ar_source__073c0f_idx'),
- ),
- migrations.AddIndex(
- model_name='articlesnapshot',
- index=models.Index(fields=['moderation_status', 'created_at'], name='articles_ar_moderat_f773c4_idx'),
- ),
- migrations.AddIndex(
- model_name='articlesnapshot',
- index=models.Index(fields=['source_article', 'content_hash'], name='articles_ar_source__a682c0_idx'),
- ),
- migrations.AddIndex(
- model_name='articleevent',
- index=models.Index(fields=['source_article', 'created_at'], name='articles_ar_source__fe04d1_idx'),
- ),
- migrations.AddIndex(
- model_name='articleevent',
- index=models.Index(fields=['actor', 'created_at'], name='articles_ar_actor_i_7fd01f_idx'),
- ),
- migrations.AddIndex(
- model_name='articleevent',
- index=models.Index(fields=['article_snapshot', 'created_at'], name='articles_ar_article_9394d1_idx'),
- ),
- migrations.AddIndex(
- model_name='articleevent',
- index=models.Index(fields=['event_type', 'created_at'], name='articles_ar_event_t_b530f1_idx'),
- ),
- ]
diff --git a/apps/backend/articles/migrations/0003_alter_articleevent_id_alter_articlesnapshot_id_and_more.py b/apps/backend/articles/migrations/0003_alter_articleevent_id_alter_articlesnapshot_id_and_more.py
deleted file mode 100644
index 8be57202..00000000
--- a/apps/backend/articles/migrations/0003_alter_articleevent_id_alter_articlesnapshot_id_and_more.py
+++ /dev/null
@@ -1,59 +0,0 @@
-# Generated by Django 6.0.3 on 2026-04-05 12:34
-
-import uuid
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('articles', '0002_initial'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='articleevent',
- name='id',
- field=models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID'),
- ),
- migrations.AlterField(
- model_name='articlesnapshot',
- name='id',
- field=models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID'),
- ),
- migrations.AlterField(
- model_name='publishedarticle',
- name='created_at',
- field=models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at'),
- ),
- migrations.AlterField(
- model_name='publishedarticle',
- name='id',
- field=models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID'),
- ),
- migrations.AlterField(
- model_name='publishedarticle',
- name='updated_at',
- field=models.DateTimeField(auto_now=True, db_index=True, help_text='The updated DateTime of the object', verbose_name='updated at'),
- ),
- migrations.AlterField(
- model_name='sourcearticle',
- name='created_at',
- field=models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at'),
- ),
- migrations.AlterField(
- model_name='sourcearticle',
- name='id',
- field=models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID'),
- ),
- migrations.AlterField(
- model_name='sourcearticle',
- name='is_deleted',
- field=models.BooleanField(db_index=True, default=False, help_text='Whether the object is deleted', verbose_name='deleted'),
- ),
- migrations.AlterField(
- model_name='sourcearticle',
- name='updated_at',
- field=models.DateTimeField(auto_now=True, db_index=True, help_text='The updated DateTime of the object', verbose_name='updated at'),
- ),
- ]
diff --git a/apps/backend/articles/models.py b/apps/backend/articles/models.py
index 9023be41..c8263c51 100644
--- a/apps/backend/articles/models.py
+++ b/apps/backend/articles/models.py
@@ -214,11 +214,6 @@ class EventType(models.IntegerChoices):
verbose_name=_("snapshot"),
help_text=_("The article snapshot of the article event"),
)
- annotation = models.TextField(
- null=True, blank=True,
- verbose_name=_("annotation"),
- help_text=_("The annotation of the article event"),
- )
event_type = models.IntegerField(
choices=EventType.choices,
verbose_name=_("event type"),
diff --git a/apps/backend/articles/serializers.py b/apps/backend/articles/serializers.py
index c96f61f4..ec22fdec 100644
--- a/apps/backend/articles/serializers.py
+++ b/apps/backend/articles/serializers.py
@@ -4,12 +4,10 @@
from django.utils import timezone
from rest_framework import serializers
-from rest_framework.request import Request
from core.validators import (
FileTypeValidator, FileSizeValidator
)
-from core.utils.permissions import is_moderator
from .models import SourceArticle, PublishedArticle, ArticleSnapshot, ArticleEvent
import uuid
@@ -24,7 +22,6 @@ class SourceArticleReadSerializer(serializers.ModelSerializer):
"""
Serializer for moderators
"""
-
author_username = serializers.CharField(source='author.username')
status_display = serializers.SerializerMethodField()
last_snapshot_id = serializers.SerializerMethodField()
@@ -37,8 +34,10 @@ class Meta:
'id',
'author',
'title',
- 'content',
+ 'markdown',
+ 'version',
'status',
+ 'last_saved_at',
'last_moderation_at',
'created_at',
'updated_at',
@@ -82,7 +81,6 @@ class SourceArticleWriteSerializer(serializers.ModelSerializer):
"""
Serializer for the author, can be used to create/update
"""
-
title = serializers.CharField(
required=False,
allow_blank=True,
@@ -147,7 +145,6 @@ class PublishedArticleSerializer(serializers.ModelSerializer):
"""
Serializer for published articles. All fields are ready-only.
"""
-
class Meta:
model = PublishedArticle
fields = '__all__'
@@ -192,7 +189,8 @@ def get_source_article_id(self, obj):
class ArticleEventSerializer(serializers.ModelSerializer):
"""
- Serializer for article moderation events. All fields are ready-only except annotation.
+ Serializer for article moderation events.
+ All fields are read-only.
"""
class Meta:
model = ArticleEvent
@@ -201,41 +199,15 @@ class Meta:
'id',
'source_article',
'article_snapshot',
- 'annotation',
'event_type',
'actor',
'created_at'
]
- def _get_request(self):
- req = self.context.get("request")
- return req if isinstance(req, Request) else None
-
- def _get_user(self):
- req = self._get_request()
- return getattr(req, "user", None)
-
- def get_fields(self):
- fields = super().get_fields()
- user = self._get_user()
-
- if is_moderator(user):
- fields['annotation'].read_only = False
-
- return fields
-
def create(self, validated_data):
return ArticleEvent.objects.create(**validated_data)
-class ArticleActionInputSerializer(serializers.Serializer):
- """
- The input serializer for all article actions,
- which include submit, approve, reject, unpublish and delete
- """
- annotation = serializers.CharField(required=False, allow_blank=True)
-
-
class ArticleActionOutputSerializer(serializers.Serializer):
event_type = serializers.IntegerField()
actor_id = serializers.UUIDField()
diff --git a/apps/backend/articles/services/articles.py b/apps/backend/articles/services/articles.py
index 5a38c139..09562fe8 100644
--- a/apps/backend/articles/services/articles.py
+++ b/apps/backend/articles/services/articles.py
@@ -28,53 +28,52 @@ def _get_locked_source_article(source_article_id):
@transaction.atomic
-def submit(*, source_article_id, actor, annotation=None):
+def submit(*, source_article_id, actor):
source_article = _get_locked_source_article(source_article_id)
- workflow = ArticleWorkflow(source_article=source_article, actor=actor, annotation=annotation)
+ workflow = ArticleWorkflow(source_article=source_article, actor=actor)
return workflow.submit()
@transaction.atomic
-def withdraw(*, source_article_id, actor, annotation=None):
+def withdraw(*, source_article_id, actor):
source_article = _get_locked_source_article(source_article_id)
- workflow = ArticleWorkflow(source_article=source_article, actor=actor, annotation=annotation)
+ workflow = ArticleWorkflow(source_article=source_article, actor=actor)
return workflow.withdraw()
@transaction.atomic
-def approve(*, source_article_id, actor, annotation=None):
+def approve(*, source_article_id, actor):
source_article = _get_locked_source_article(source_article_id)
- workflow = ArticleWorkflow(source_article=source_article, actor=actor, annotation=annotation)
+ workflow = ArticleWorkflow(source_article=source_article, actor=actor)
return workflow.approve()
@transaction.atomic
-def reject(*, source_article_id, actor, annotation=None):
+def reject(*, source_article_id, actor):
source_article = _get_locked_source_article(source_article_id)
- workflow = ArticleWorkflow(source_article=source_article, actor=actor, annotation=annotation)
+ workflow = ArticleWorkflow(source_article=source_article, actor=actor)
return workflow.reject()
@transaction.atomic
-def unpublish(*, source_article_id, actor, annotation=None):
+def unpublish(*, source_article_id, actor):
source_article = _get_locked_source_article(source_article_id)
- workflow = ArticleWorkflow(source_article=source_article, actor=actor, annotation=annotation)
+ workflow = ArticleWorkflow(source_article=source_article, actor=actor)
return workflow.unpublish()
@transaction.atomic
-def soft_delete(*, source_article_id, actor, annotation=None):
+def soft_delete(*, source_article_id, actor):
source_article = _get_locked_source_article(source_article_id)
- workflow = ArticleWorkflow(source_article=source_article, actor=actor, annotation=annotation)
+ workflow = ArticleWorkflow(source_article=source_article, actor=actor)
return workflow.soft_delete()
class ArticleWorkflow:
- def __init__(self, *, source_article, actor, annotation=None):
+ def __init__(self, *, source_article, actor):
self.source_article = source_article
self.article_snapshot = self._get_last_snapshot()
self.actor = actor
- self.annotation = annotation
def _get_last_snapshot(self):
"""
@@ -163,7 +162,6 @@ def _create_article_event(self, event_type: ArticleEvent.EventType) -> ArticleEv
return ArticleEvent.objects.create(
source_article=self.source_article,
article_snapshot=self.article_snapshot,
- annotation=self.annotation,
event_type=event_type,
actor=self.actor,
)
diff --git a/apps/backend/articles/tests/test_views.py b/apps/backend/articles/tests/test_views.py
index 55a8ad11..8a30f417 100644
--- a/apps/backend/articles/tests/test_views.py
+++ b/apps/backend/articles/tests/test_views.py
@@ -93,7 +93,6 @@ def test_approve_endpoint_requires_moderator(self):
self.authenticate(self.author)
response = self.post_json(
reverse("source_article-approve", args=[article.id]),
- {"annotation": "looks good"},
)
self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
@@ -110,7 +109,6 @@ def test_moderator_can_approve_pending_article(self):
self.authenticate(self.moderator)
response = self.post_json(
reverse("source_article-approve", args=[article.id]),
- {"annotation": "approved"},
)
article.refresh_from_db()
diff --git a/apps/backend/articles/views.py b/apps/backend/articles/views.py
index 4de405fd..3dd74681 100644
--- a/apps/backend/articles/views.py
+++ b/apps/backend/articles/views.py
@@ -20,7 +20,6 @@
PublishedArticleSerializer,
ArticleSnapshotSerializer,
ArticleEventSerializer,
- ArticleActionInputSerializer,
ArticleActionOutputSerializer,
)
from .services.articles import (
@@ -121,15 +120,7 @@ def upload_images(self, request):
@action(detail=True, methods=['post'])
def submit(self, request, pk=None):
- input_serializer = ArticleActionInputSerializer(data=request.data)
- input_serializer.is_valid(raise_exception=True)
-
- result = submit(
- source_article_id=pk,
- actor=request.user,
- annotation=input_serializer.validated_data.get("annotation", None)
- )
-
+ result = submit(source_article_id=pk, actor=request.user)
output_serializer = ArticleActionOutputSerializer(instance=result)
return self.format_success_response(
@@ -141,15 +132,7 @@ def submit(self, request, pk=None):
@action(detail=True, methods=['post'])
def withdraw(self, request, pk=None):
- input_serializer = ArticleActionInputSerializer(data=request.data)
- input_serializer.is_valid(raise_exception=True)
-
- result = withdraw(
- source_article_id=pk,
- actor=request.user,
- annotation=input_serializer.validated_data.get("annotation", None)
- )
-
+ result = withdraw(source_article_id=pk, actor=request.user)
output_serializer = ArticleActionOutputSerializer(instance=result)
return self.format_success_response(
@@ -161,15 +144,7 @@ def withdraw(self, request, pk=None):
@action(detail=True, methods=['post'])
def approve(self, request, pk=None):
- input_serializer = ArticleActionInputSerializer(data=request.data)
- input_serializer.is_valid(raise_exception=True)
-
- result = approve(
- source_article_id=pk,
- actor=request.user,
- annotation=input_serializer.validated_data.get("annotation", None)
- )
-
+ result = approve(source_article_id=pk, actor=request.user)
output_serializer = ArticleActionOutputSerializer(instance=result)
return self.format_success_response(
@@ -181,15 +156,7 @@ def approve(self, request, pk=None):
@action(detail=True, methods=['post'])
def reject(self, request, pk=None):
- input_serializer = ArticleActionInputSerializer(data=request.data)
- input_serializer.is_valid(raise_exception=True)
-
- result = reject(
- source_article_id=pk,
- actor=request.user,
- annotation=input_serializer.validated_data.get("annotation", None)
- )
-
+ result = reject(source_article_id=pk, actor=request.user)
output_serializer = ArticleActionOutputSerializer(instance=result)
return self.format_success_response(
@@ -201,15 +168,7 @@ def reject(self, request, pk=None):
@action(detail=True, methods=['post'])
def unpublish(self, request, pk=None):
- input_serializer = ArticleActionInputSerializer(data=request.data)
- input_serializer.is_valid(raise_exception=True)
-
- result = unpublish(
- source_article_id=pk,
- actor=request.user,
- annotation=input_serializer.validated_data.get("annotation", None)
- )
-
+ result = unpublish(source_article_id=pk, actor=request.user)
output_serializer = ArticleActionOutputSerializer(instance=result)
return self.format_success_response(
@@ -221,15 +180,7 @@ def unpublish(self, request, pk=None):
@action(detail=True, methods=['post'])
def trash(self, request, pk=None):
- input_serializer = ArticleActionInputSerializer(data=request.data)
- input_serializer.is_valid(raise_exception=True)
-
- result = soft_delete(
- source_article_id=pk,
- actor=request.user,
- annotation=input_serializer.validated_data.get("annotation", None)
- )
-
+ result = soft_delete(source_article_id=pk, actor=request.user)
output_serializer = ArticleActionOutputSerializer(instance=result)
return self.format_success_response(
diff --git a/apps/backend/tasks/migrations/0001_initial.py b/apps/backend/tasks/migrations/0001_initial.py
deleted file mode 100644
index 43808b21..00000000
--- a/apps/backend/tasks/migrations/0001_initial.py
+++ /dev/null
@@ -1,52 +0,0 @@
-# Generated by Django 6.0.3 on 2026-04-05 01:37
-
-import django.db.models.deletion
-import uuid
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- ]
-
- operations = [
- migrations.CreateModel(
- name='IntervalSchedule',
- fields=[
- ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
- ('every', models.PositiveIntegerField(help_text='Number of interval periods to wait before next execution', verbose_name='number of periods')),
- ('period', models.CharField(choices=[('millisecond', 'millisecond'), ('second', 'second'), ('minute', 'minute'), ('hour', 'hour'), ('day', 'day'), ('week', 'week')], help_text='The type of period used by the schedule', max_length=50, verbose_name='interval period')),
- ],
- options={
- 'verbose_name': 'interval schedule',
- 'verbose_name_plural': 'interval schedules',
- 'constraints': [models.UniqueConstraint(fields=('every', 'period'), name='unique_interval_schedule')],
- },
- ),
- migrations.CreateModel(
- name='PeriodicTask',
- fields=[
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='ID')),
- ('name', models.CharField(help_text='A short, unique description for this task', max_length=150, unique=True, verbose_name='name')),
- ('description', models.TextField(blank=True, default='', help_text='A extended description for this task', verbose_name='description')),
- ('task', models.CharField(help_text='The path of the task function to be run', max_length=255, verbose_name='task path')),
- ('queue_name', models.CharField(help_text='The name of the queue that this task belongs to', max_length=100, verbose_name='queue name')),
- ('args', models.JSONField(blank=True, default=list, help_text='The positional arguments passed to the function', verbose_name='positional arguments')),
- ('kwargs', models.JSONField(blank=True, default=dict, help_text='The keyword arguments passed to the function', verbose_name='keyword arguments')),
- ('is_enabled', models.BooleanField(db_index=True, default=True, help_text='Only enabled tasks will be queued', verbose_name='enabled')),
- ('last_enqueued_at', models.DateTimeField(blank=True, editable=False, help_text='The last enqueued DateTime of the task', null=True, verbose_name='last enqueued at')),
- ('next_enqueue_at', models.DateTimeField(blank=True, help_text='The next enqueue DateTime of the task', verbose_name='next enqueue at')),
- ('last_started_at', models.DateTimeField(blank=True, editable=False, help_text='The last started DateTime of the task', null=True, verbose_name='last started at')),
- ('last_finished_at', models.DateTimeField(blank=True, editable=False, help_text='The last finished DateTime of the task', null=True, verbose_name='last finished at')),
- ('interval', models.ForeignKey(help_text='The time between two task executions', on_delete=django.db.models.deletion.PROTECT, related_name='periodic_tasks', to='tasks.intervalschedule', verbose_name='interval')),
- ],
- options={
- 'verbose_name': 'periodic task',
- 'verbose_name_plural': 'periodic tasks',
- 'ordering': ['-next_enqueue_at'],
- },
- ),
- ]
diff --git a/apps/backend/tasks/migrations/0002_alter_periodictask_id.py b/apps/backend/tasks/migrations/0002_alter_periodictask_id.py
deleted file mode 100644
index 5e9f724f..00000000
--- a/apps/backend/tasks/migrations/0002_alter_periodictask_id.py
+++ /dev/null
@@ -1,19 +0,0 @@
-# Generated by Django 6.0.3 on 2026-04-05 12:34
-
-import uuid
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- dependencies = [
- ('tasks', '0001_initial'),
- ]
-
- operations = [
- migrations.AlterField(
- model_name='periodictask',
- name='id',
- field=models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID'),
- ),
- ]
diff --git a/apps/backend/users/migrations/0001_initial.py b/apps/backend/users/migrations/0001_initial.py
deleted file mode 100644
index 6f11301f..00000000
--- a/apps/backend/users/migrations/0001_initial.py
+++ /dev/null
@@ -1,82 +0,0 @@
-# Generated by Django 6.0.3 on 2026-04-05 12:34
-
-import django.db.models.deletion
-import django.utils.timezone
-import users.models.users
-import uuid
-from django.conf import settings
-from django.db import migrations, models
-
-
-class Migration(migrations.Migration):
-
- initial = True
-
- dependencies = [
- ('auth', '0012_alter_user_first_name_max_length'),
- ]
-
- operations = [
- migrations.CreateModel(
- name='User',
- fields=[
- ('password', models.CharField(max_length=128, verbose_name='password')),
- ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
- ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
- ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
- ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
- ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
- ('username', models.CharField(help_text='The username of the user', max_length=30, unique=True, verbose_name='username')),
- ('avatar', models.ImageField(blank=True, help_text='The avatar of the user', null=True, storage=users.models.users.AvatarStorage(), upload_to=users.models.users.avatar_upload_to, verbose_name='avatar')),
- ('signature', models.CharField(blank=True, default='This player is somewhat mysterious...', help_text='The signature of the user', max_length=60, verbose_name='signature')),
- ('is_moderator', models.BooleanField(default=False, help_text='Whether the user is a moderator', verbose_name='moderator status')),
- ('is_email_verified', models.BooleanField(default=False, editable=False, help_text='Whether at least an email of the user is verified', verbose_name='email verified')),
- ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
- ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
- ],
- options={
- 'verbose_name': 'user',
- 'verbose_name_plural': 'users',
- },
- managers=[
- ('objects', users.models.users.ProfileManager()),
- ],
- ),
- migrations.CreateModel(
- name='UserSession',
- fields=[
- ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
- ('session_key', models.CharField(help_text="The session's session key", max_length=40, unique=True, verbose_name='session key')),
- ('user_agent', models.TextField(blank=True, help_text="The session's user agent", null=True, verbose_name='user agent')),
- ('browser', models.CharField(blank=True, help_text="The session's browser", max_length=100, null=True, verbose_name='browser')),
- ('os', models.CharField(blank=True, help_text="The session's operating system", max_length=100, null=True, verbose_name='operating system')),
- ('device', models.CharField(blank=True, help_text="The session's device", max_length=100, null=True, verbose_name='device')),
- ('ip_address', models.GenericIPAddressField(blank=True, help_text="The session's IP address", null=True, verbose_name='IP address')),
- ('last_accessed_at', models.DateField(help_text="The session's last accessed Date", verbose_name='last accessed at')),
- ('user', models.ForeignKey(help_text='The user of the session', on_delete=django.db.models.deletion.CASCADE, related_name='user_sessions', to=settings.AUTH_USER_MODEL, verbose_name='user')),
- ],
- options={
- 'verbose_name': 'user session',
- 'verbose_name_plural': 'user sessions',
- 'ordering': ['-created_at'],
- },
- ),
- migrations.CreateModel(
- name='EmailAddress',
- fields=[
- ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
- ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
- ('email', models.EmailField(help_text='The email of the email address', max_length=254, unique=True, verbose_name='email')),
- ('is_verified', models.BooleanField(default=False, help_text='Whether the email is verified', verbose_name='verified')),
- ('is_primary', models.BooleanField(default=False, help_text='Whether the email is the primary email of the user', verbose_name='primary')),
- ('user', models.ForeignKey(help_text='The user of the email address', on_delete=django.db.models.deletion.CASCADE, related_name='related_emails', to=settings.AUTH_USER_MODEL, verbose_name='user')),
- ],
- options={
- 'verbose_name': 'email',
- 'verbose_name_plural': 'emails',
- 'constraints': [models.UniqueConstraint(condition=models.Q(('is_primary', True)), fields=('user',), name='unique_user_primary_emails')],
- },
- ),
- ]
From 75926460526085ae20b247aae4d43aa5c5e8172e Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 14:54:23 +1000
Subject: [PATCH 39/51] refactor(backend): rename content_hash to hash
---
apps/backend/articles/models.py | 24 +++++++++++-----------
apps/backend/articles/serializers.py | 10 ++++-----
apps/backend/articles/services/articles.py | 4 ++--
3 files changed, 18 insertions(+), 20 deletions(-)
diff --git a/apps/backend/articles/models.py b/apps/backend/articles/models.py
index c8263c51..fac79db8 100644
--- a/apps/backend/articles/models.py
+++ b/apps/backend/articles/models.py
@@ -22,7 +22,7 @@ class SourceArticle(UUIDPrimaryKeyMixin,
- is_deleted
"""
default_title = _("Untitled")
- default_markdown = _("# Untitled")
+ default_markdown = ""
class ArticleStatus(models.IntegerChoices):
"""
@@ -45,8 +45,8 @@ class ArticleStatus(models.IntegerChoices):
)
markdown = models.TextField(
blank=True, default=default_markdown,
- verbose_name=_("content in markdown"),
- help_text=_("The content of the article (in Markdown format)"),
+ verbose_name=_("article in markdown"),
+ help_text=_("The article in Markdown format"),
)
version = models.PositiveIntegerField(
default=1,
@@ -61,7 +61,7 @@ class ArticleStatus(models.IntegerChoices):
last_saved_at = models.DateTimeField(
blank=True, null=True,
verbose_name=_("last saved at"),
- help_text=_("The last saved DateTime of the Markdown content"),
+ help_text=_("The last saved DateTime of the article"),
)
last_moderation_at = models.DateTimeField(
blank=True, null=True,
@@ -105,8 +105,8 @@ class PublishedArticle(UUIDPrimaryKeyMixin,
help_text=_("The title of the published article"),
)
html = models.TextField(
- verbose_name=_("content in html"),
- help_text=_("The content of the article (in HTML format)"),
+ verbose_name=_("article in html"),
+ help_text=_("The article in HTML format"),
)
publication_at = models.DateTimeField(
db_index=True,
@@ -152,13 +152,13 @@ class SnapshotStatus(models.IntegerChoices):
help_text=_("The title of the article snapshot"),
)
markdown = models.TextField(
- verbose_name=_("content in markdown"),
- help_text=_("The content of the article (in Markdown format)"),
+ verbose_name=_("article in markdown"),
+ help_text=_("The article in Markdown format"),
)
- content_hash = models.CharField(
+ hash = models.CharField(
max_length=64, default="", db_index=True,
- verbose_name=_("content hash"),
- help_text=_("The content hash of the article snapshot"),
+ verbose_name=_("hash"),
+ help_text=_("The hash value of the article snapshot"),
)
source_version = models.PositiveIntegerField(
verbose_name=_("source version"),
@@ -178,7 +178,7 @@ class Meta:
indexes = [
models.Index(fields=['source_article', 'created_at']),
models.Index(fields=['moderation_status', 'created_at']),
- models.Index(fields=['source_article', 'content_hash']),
+ models.Index(fields=['source_article', 'hash']),
]
def __str__(self):
diff --git a/apps/backend/articles/serializers.py b/apps/backend/articles/serializers.py
index ec22fdec..b76b4868 100644
--- a/apps/backend/articles/serializers.py
+++ b/apps/backend/articles/serializers.py
@@ -94,12 +94,10 @@ class SourceArticleWriteSerializer(serializers.ModelSerializer):
class Meta:
model = SourceArticle
- fields = ['title', 'content']
+ fields = ['title', 'markdown']
def create(self, validated_data):
validated_data.setdefault("title", "Untitled")
- validated_data.setdefault("content", {"type": "doc", "content": [{"type": "paragraph"}]})
-
return super().create(validated_data)
def validate_title(self, value):
@@ -152,7 +150,7 @@ class Meta:
'id',
'source_article',
'title',
- 'content',
+ 'html',
'created_at',
'updated_at',
)
@@ -172,8 +170,8 @@ class Meta:
'id',
'source_article',
'title',
- 'content',
- 'content_hash',
+ 'markdown',
+ 'hash',
'created_at',
'moderation_status',
'moderation_status_display',
diff --git a/apps/backend/articles/services/articles.py b/apps/backend/articles/services/articles.py
index 09562fe8..d4fa498a 100644
--- a/apps/backend/articles/services/articles.py
+++ b/apps/backend/articles/services/articles.py
@@ -215,7 +215,7 @@ def submit(self):
self.source_article.markdown
)
- if self.article_snapshot and self.article_snapshot.content_hash == current_hash:
+ if self.article_snapshot and self.article_snapshot.hash == current_hash:
raise ServiceError(
detail="Please modify before submission.",
code='no_change_error'
@@ -225,7 +225,7 @@ def submit(self):
source_article=self.source_article,
title=self.source_article.title,
markdown=self.source_article.markdown,
- content_hash=current_hash,
+ hash=current_hash,
moderation_status=ArticleSnapshot.SnapshotStatus.PENDING
)
self.article_snapshot = new_snapshot
From 55729d3db023585bfd9832c88af76a9ff80e3618 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 14:59:41 +1000
Subject: [PATCH 40/51] feat(backend): integrate render html into article
workflow
---
apps/backend/articles/services/articles.py | 10 +++++-----
apps/backend/core/utils/alienmark.py | 2 +-
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/apps/backend/articles/services/articles.py b/apps/backend/articles/services/articles.py
index d4fa498a..980711ed 100644
--- a/apps/backend/articles/services/articles.py
+++ b/apps/backend/articles/services/articles.py
@@ -7,6 +7,7 @@
from articles.models import SourceArticle, PublishedArticle, ArticleSnapshot, ArticleEvent
from core.exceptions import ServiceError
+from core.utils.alienmark import render_md_to_html
from logs.logging import get_logger
logger = get_logger(__name__)
@@ -137,20 +138,19 @@ def _create_or_update_published_article(self) -> PublishedArticle:
Return the published_article.
"""
published_article = self._get_the_published_article()
+ html = render_md_to_html(self.article_snapshot.markdown)
if published_article:
published_article.title = self.article_snapshot.title
-
- # TODO: Markdown content needs to be rendered into html
- published_article.html = self.article_snapshot.markdown
- published_article.save(update_fields=['title', 'markdown'])
+ published_article.html = html
+ published_article.save(update_fields=['title', 'html'])
return published_article
published_article = PublishedArticle.objects.create(
source_article=self.source_article,
title=self.article_snapshot.title,
- html=self.article_snapshot.mardkwon, # TODO: Markdown content needs to be rendered into html
+ html=html
)
return published_article
diff --git a/apps/backend/core/utils/alienmark.py b/apps/backend/core/utils/alienmark.py
index a790ec79..52b24a0f 100644
--- a/apps/backend/core/utils/alienmark.py
+++ b/apps/backend/core/utils/alienmark.py
@@ -4,7 +4,7 @@
from core.exceptions import ServiceError
-def render_markdown_to_html(markdown: str) -> str:
+def render_md_to_html(markdown: str) -> str:
"""
Render Markdown by calling the internal alienmark service.
"""
From d449fa622c8c9ad17fb41b46c8a59f97ceee5397 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 15:08:38 +1000
Subject: [PATCH 41/51] fix(backend): fix several naming
---
apps/backend/articles/admin.py | 10 +++++-----
apps/backend/articles/services/articles.py | 7 ++-----
apps/backend/articles/tasks.py | 1 +
apps/backend/articles/views.py | 3 ++-
4 files changed, 10 insertions(+), 11 deletions(-)
diff --git a/apps/backend/articles/admin.py b/apps/backend/articles/admin.py
index e19dbe8d..ee67d721 100644
--- a/apps/backend/articles/admin.py
+++ b/apps/backend/articles/admin.py
@@ -29,7 +29,7 @@ class SourceArticleAdmin(admin.ModelAdmin):
readonly_fields = ("id", "created_at", "updated_at", "last_moderation_at")
fieldsets = [
- ("Basic", {"fields": ("id", "title", "content")}),
+ ("Basic", {"fields": ("id", "title", "markdown")}),
("Ownership & Status", {"fields": ("author", "status", "is_deleted")}),
("Timestamps", {"fields": ("created_at", "updated_at")}),
]
@@ -75,10 +75,10 @@ class PublishedArticleAdmin(admin.ModelAdmin):
list_per_page = 25
date_hierarchy = "created_at"
- readonly_fields = ("id", "created_at", "source_article", "title", "content")
+ readonly_fields = ("id", "created_at", "source_article", "title", "html")
fieldsets = [
- ("Basic", {"fields": ("id", "title", "content")}),
+ ("Basic", {"fields": ("id", "title", "html")}),
("Key Info", {"fields": ("source_article", )}),
("Timestamps", {"fields": ("created_at",)}),
]
@@ -103,12 +103,12 @@ class ArticleSnapshotAdmin(admin.ModelAdmin):
date_hierarchy = "created_at"
readonly_fields = (
- "id", "created_at", "source_article", "title", "content", "content_hash",
+ "id", "created_at", "source_article", "title", "markdown", "hash",
"moderation_status", "moderation_status_display",
)
fieldsets = [
- ("Basic", {"fields": ("id", "title", "content", "content_hash")}),
+ ("Basic", {"fields": ("id", "title", "markdown", "hash")}),
("Key Info", {"fields": ("source_article", "moderation_status", "moderation_status_display")}),
("Timestamps", {"fields": ("created_at",)}),
]
diff --git a/apps/backend/articles/services/articles.py b/apps/backend/articles/services/articles.py
index 980711ed..37626f2d 100644
--- a/apps/backend/articles/services/articles.py
+++ b/apps/backend/articles/services/articles.py
@@ -95,10 +95,7 @@ def _hash_and_normalize(title, markdown):
It strips the spaces before and after the title and the summary.
Return: hash_value
"""
- items_to_hash = {
- 'title': title.strip(),
- 'markdown': markdown,
- }
+ items_to_hash = {'title': title.strip(), 'markdown': markdown}
items_json = json.dumps(items_to_hash, sort_keys=True)
hash_value = hashlib.blake2b(items_json.encode("utf-8")).hexdigest()
@@ -268,7 +265,7 @@ def approve(self):
if not self.article_snapshot:
raise ServiceError(
detail="There are no snapshots for this article!",
- code='no_change_error'
+ code='no_snapshot_error'
)
self._create_or_update_published_article()
diff --git a/apps/backend/articles/tasks.py b/apps/backend/articles/tasks.py
index 05c53f2b..81f77ff2 100644
--- a/apps/backend/articles/tasks.py
+++ b/apps/backend/articles/tasks.py
@@ -8,6 +8,7 @@
from articles.models import SourceArticle
+# TODO: 重写!
def _extract_media_relpaths_from_tiptap(doc):
"""
Extract relative storage paths from TipTap JSON doc.
diff --git a/apps/backend/articles/views.py b/apps/backend/articles/views.py
index 3dd74681..ec805e20 100644
--- a/apps/backend/articles/views.py
+++ b/apps/backend/articles/views.py
@@ -178,8 +178,9 @@ def unpublish(self, request, pk=None):
status_code=status.HTTP_200_OK,
)
- @action(detail=True, methods=['post'])
+ @action(detail=True, methods=['post'], url_path="delete")
def trash(self, request, pk=None):
+ """Soft delete the article"""
result = soft_delete(source_article_id=pk, actor=request.user)
output_serializer = ArticleActionOutputSerializer(instance=result)
From ce5703970d18e5b8ad2b36976ea2e53bdc8728fa Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 20:53:25 +1000
Subject: [PATCH 42/51] feat(alienmark): syntax update
---
packages/alienmark/src/ast/nodes.ts | 9 +++++-
packages/alienmark/src/parser/inline.ts | 28 +++++++++++++++++--
packages/alienmark/src/parser/parse.ts | 4 +--
.../alienmark/src/renderer/render-html.ts | 2 ++
packages/alienmark/test/alienmark.test.ts | 18 ++++++++++--
5 files changed, 53 insertions(+), 8 deletions(-)
diff --git a/packages/alienmark/src/ast/nodes.ts b/packages/alienmark/src/ast/nodes.ts
index 88b84f7a..658f976b 100644
--- a/packages/alienmark/src/ast/nodes.ts
+++ b/packages/alienmark/src/ast/nodes.ts
@@ -12,7 +12,8 @@ export type InlineNode =
| StrongNode
| EmphasisNode
| InlineCodeNode
- | LinkNode;
+ | LinkNode
+ | ImageNode;
export interface DocumentNode {
type: "document";
@@ -83,6 +84,12 @@ export interface LinkNode {
children: InlineNode[];
}
+export interface ImageNode {
+ type: "image";
+ url: string;
+ alt: string;
+}
+
export interface ParseOptions {
trimTrailingWhitespace?: boolean;
}
diff --git a/packages/alienmark/src/parser/inline.ts b/packages/alienmark/src/parser/inline.ts
index 6a3e8580..150102a1 100644
--- a/packages/alienmark/src/parser/inline.ts
+++ b/packages/alienmark/src/parser/inline.ts
@@ -1,10 +1,11 @@
import type {
EmphasisNode,
+ ImageNode,
InlineCodeNode,
InlineNode,
LinkNode,
StrongNode,
- TextNode
+ TextNode,
} from "../ast/nodes.js";
export function parseInline(input: string): InlineNode[] {
@@ -31,8 +32,9 @@ export function parseInline(input: string): InlineNode[] {
break;
}
- if (input.startsWith("**", index)) {
- const closeIndex = input.indexOf("**", index + 2);
+ if (input.startsWith("**", index) || input.startsWith("__", index)) {
+ const marker = input.slice(index, index + 2);
+ const closeIndex = input.indexOf(marker, index + 2);
if (closeIndex !== -1) {
flushText();
@@ -46,6 +48,26 @@ export function parseInline(input: string): InlineNode[] {
}
}
+ if (input.startsWith("![", index)) {
+ const labelEnd = input.indexOf("]", index + 2);
+
+ if (labelEnd !== -1 && input[labelEnd + 1] === "(") {
+ const urlEnd = input.indexOf(")", labelEnd + 2);
+
+ if (urlEnd !== -1) {
+ flushText();
+ const imageNode: ImageNode = {
+ type: "image",
+ alt: input.slice(index + 2, labelEnd),
+ url: input.slice(labelEnd + 2, urlEnd),
+ };
+ nodes.push(imageNode);
+ index = urlEnd + 1;
+ continue;
+ }
+ }
+ }
+
if (current === "*" || current === "_") {
const closeIndex = input.indexOf(current, index + 1);
diff --git a/packages/alienmark/src/parser/parse.ts b/packages/alienmark/src/parser/parse.ts
index a21586a1..de3a12dc 100644
--- a/packages/alienmark/src/parser/parse.ts
+++ b/packages/alienmark/src/parser/parse.ts
@@ -43,7 +43,7 @@ export function parse(markdown: string, options: ParseOptions = {}): DocumentNod
continue;
}
- const headingMatch = line.match(/^(#{1,6})\s+(.*)$/);
+ const headingMatch = line.match(/^(#{1,4})\s+(.*)$/);
if (headingMatch) {
const markers = headingMatch[1] ?? "";
const text = headingMatch[2] ?? "";
@@ -210,7 +210,7 @@ function parseParagraph(
isHorizontalRule(line) ||
line.startsWith(">") ||
isListLine(line) ||
- /^(#{1,6})\s+/.test(line))
+ /^(#{1,4})\s+/.test(line))
) {
break;
}
diff --git a/packages/alienmark/src/renderer/render-html.ts b/packages/alienmark/src/renderer/render-html.ts
index 290a5324..bf7e2e5a 100644
--- a/packages/alienmark/src/renderer/render-html.ts
+++ b/packages/alienmark/src/renderer/render-html.ts
@@ -53,6 +53,8 @@ function renderInlineNode(node: InlineNode): string {
return `${escapeHtml(node.value)}`;
case "link":
return `${renderInlineNodes(node.children)}`;
+ case "image":
+ return `
`;
}
}
diff --git a/packages/alienmark/test/alienmark.test.ts b/packages/alienmark/test/alienmark.test.ts
index 601f49c5..0d06baa8 100644
--- a/packages/alienmark/test/alienmark.test.ts
+++ b/packages/alienmark/test/alienmark.test.ts
@@ -9,11 +9,25 @@ describe("alienmark", () => {
expect(html).toBe("Hello
This is a paragraph.
");
});
+ it("only supports headings from h1 to h4", () => {
+ const html = renderMarkdown("#### Supported\n\n##### Not supported");
+
+ expect(html).toBe("Supported
##### Not supported
");
+ });
+
it("renders inline markdown", () => {
- const html = renderMarkdown("Use **bold**, *italic*, `code`, and [links](https://example.com).");
+ const html = renderMarkdown("Use **bold**, __bold too__, *italic*, `code`, and [links](https://example.com).");
+
+ expect(html).toBe(
+ 'Use bold, bold too, italic, code, and links.
',
+ );
+ });
+
+ it("renders images", () => {
+ const html = renderMarkdown('Logo: ');
expect(html).toBe(
- 'Use bold, italic, code, and links.
',
+ 'Logo: 
',
);
});
From 0347bcabc0631ef5f3c4b7abb752d6df1216fd8e Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 20:57:36 +1000
Subject: [PATCH 43/51] chore(alienmark): update alienmark documentation
---
docs/alienmark/docs/index.en.md | 3 ++-
docs/alienmark/docs/index.zh.md | 3 ++-
docs/alienmark/docs/syntax.en.md | 29 ++++++++++++++++++++++++-----
docs/alienmark/docs/syntax.zh.md | 29 ++++++++++++++++++++++++-----
docs/alienmark/uv.lock | 2 +-
5 files changed, 53 insertions(+), 13 deletions(-)
diff --git a/docs/alienmark/docs/index.en.md b/docs/alienmark/docs/index.en.md
index aa1ecb5d..ed7e8126 100644
--- a/docs/alienmark/docs/index.en.md
+++ b/docs/alienmark/docs/index.en.md
@@ -19,12 +19,13 @@ The current implementation focuses on a solid core Markdown subset instead of fu
Supported today:
-- headings
+- headings from level 1 to level 4
- paragraphs
- strong emphasis
- emphasis
- inline code
- links
+- images
- fenced code blocks
- blockquotes
- ordered and unordered lists
diff --git a/docs/alienmark/docs/index.zh.md b/docs/alienmark/docs/index.zh.md
index b4aaad50..7eac3b78 100644
--- a/docs/alienmark/docs/index.zh.md
+++ b/docs/alienmark/docs/index.zh.md
@@ -19,12 +19,13 @@ AlienMark 当前提供:
目前已经支持:
-- 标题
+- 1 到 4 级标题
- 段落
- 粗体
- 斜体
- 行内代码
- 链接
+- 图片
- 围栏代码块
- 引用块
- 有序列表和无序列表
diff --git a/docs/alienmark/docs/syntax.en.md b/docs/alienmark/docs/syntax.en.md
index e0cc01f8..2e8cb8f8 100644
--- a/docs/alienmark/docs/syntax.en.md
+++ b/docs/alienmark/docs/syntax.en.md
@@ -4,7 +4,7 @@ This page documents the Markdown syntax that AlienMark currently supports.
## Headings
-AlienMark supports ATX headings from level 1 to level 6.
+AlienMark supports ATX headings from level 1 to level 4.
Input:
@@ -12,14 +12,17 @@ Input:
# Heading 1
## Heading 2
### Heading 3
+#### Heading 4
```
Output:
```html
-Heading 1
Heading 2
Heading 3
+Heading 1
Heading 2
Heading 3
Heading 4
```
+Lines that start with five or more `#` markers are treated as normal paragraphs.
+
## Paragraphs
Non-empty lines that do not match a block syntax are grouped into paragraphs. Consecutive lines are joined with spaces.
@@ -39,18 +42,18 @@ Output:
## Strong Emphasis
-Double asterisks create strong emphasis.
+Double asterisks or double underscores create strong emphasis.
Input:
```md
-Use **bold** text.
+Use **bold** and __also bold__ text.
```
Output:
```html
-Use bold text.
+Use bold and also bold text.
```
## Emphasis
@@ -101,6 +104,22 @@ Output:
AlienCommons
```
+## Images
+
+AlienMark supports inline image syntax. The alt text is emitted as the `alt` attribute.
+
+Input:
+
+```md
+
+```
+
+Output:
+
+```html
+
+```
+
## Fenced Code Blocks
Triple backticks create fenced code blocks. A language name after the opening fence is emitted as a `language-*` class on the `code` tag.
diff --git a/docs/alienmark/docs/syntax.zh.md b/docs/alienmark/docs/syntax.zh.md
index 39f30850..5be84827 100644
--- a/docs/alienmark/docs/syntax.zh.md
+++ b/docs/alienmark/docs/syntax.zh.md
@@ -4,7 +4,7 @@
## 标题
-AlienMark 支持 1 到 6 级 ATX 标题。
+AlienMark 支持 1 到 4 级 ATX 标题。
输入:
@@ -12,14 +12,17 @@ AlienMark 支持 1 到 6 级 ATX 标题。
# 一级标题
## 二级标题
### 三级标题
+#### 四级标题
```
输出:
```html
-一级标题
二级标题
三级标题
+一级标题
二级标题
三级标题
四级标题
```
+以五个或更多 `#` 开头的行会被当作普通段落处理。
+
## 段落
没有命中其他块级语法的非空行会被归并为段落。连续多行会用空格连接。
@@ -39,18 +42,18 @@ AlienMark 支持 1 到 6 级 ATX 标题。
## 粗体
-双星号用于表示粗体。
+双星号或双下划线用于表示粗体。
输入:
```md
-使用 **粗体** 文本。
+使用 **粗体** 和 __也是粗体__ 文本。
```
输出:
```html
-使用 粗体 文本。
+使用 粗体 和 也是粗体 文本。
```
## 斜体
@@ -101,6 +104,22 @@ AlienMark 当前支持 Markdown 的内联链接写法。
AlienCommons
```
+## 图片
+
+AlienMark 当前支持 Markdown 的内联图片写法。图片描述会被输出为 `alt` 属性。
+
+输入:
+
+```md
+
+```
+
+输出:
+
+```html
+
+```
+
## 围栏代码块
三个反引号用于表示围栏代码块。若在起始围栏后写语言名,会在 `code` 标签上输出 `language-*` 类名。
diff --git a/docs/alienmark/uv.lock b/docs/alienmark/uv.lock
index 720b7fd6..799c9278 100644
--- a/docs/alienmark/uv.lock
+++ b/docs/alienmark/uv.lock
@@ -3,7 +3,7 @@ revision = 3
requires-python = ">=3.14"
[[package]]
-name = "alienmark"
+name = "alienmark-docs"
version = "0.1.0"
source = { virtual = "." }
dependencies = [
From 1be814b0d288d257280f32be4ec3bc6f54c2ff50 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 21:06:31 +1000
Subject: [PATCH 44/51] chore: add agents.md to root and docs/
---
AGENTS.md | 33 +++++++++++++++++++++++++++++++++
docs/AGENTS.md | 30 ++++++++++++++++++++++++++++++
2 files changed, 63 insertions(+)
create mode 100644 AGENTS.md
create mode 100644 docs/AGENTS.md
diff --git a/AGENTS.md b/AGENTS.md
new file mode 100644
index 00000000..756056e0
--- /dev/null
+++ b/AGENTS.md
@@ -0,0 +1,33 @@
+# Agent Guide
+
+Keep changes small, intentional, and consistent with the existing project.
+
+## Project Shape
+
+This is a monorepo. The main areas are:
+
+- `apps/` for deployable applications.
+- `packages/` for reusable packages.
+- `docs/` for documentation.
+- `infra/`, `o11y/`, and `make/` for operations and tooling.
+
+Prefer the conventions already present in the area you are editing.
+
+## Working Rules
+
+- Read the nearby code before changing it.
+- Do not rewrite unrelated files or reformat broad areas without a reason.
+- Do not remove or revert user changes unless explicitly asked.
+- Keep secrets, credentials, and local environment files out of commits.
+- Use existing scripts, Make targets, and package commands when available.
+- Add or update tests when the change affects behavior.
+
+## Verification
+
+Run the smallest relevant checks for the change. If a check cannot be run, mention that in the final response.
+
+## Git
+
+- Use focused commits and clear commit messages.
+- Feature work should normally branch from the active development branch.
+- Production releases should be represented by tags, not by editing this file.
diff --git a/docs/AGENTS.md b/docs/AGENTS.md
new file mode 100644
index 00000000..f9d0c771
--- /dev/null
+++ b/docs/AGENTS.md
@@ -0,0 +1,30 @@
+# Documentation Agent Guide
+
+These rules apply to documentation under `docs/`.
+
+## Scope
+
+Each subdirectory is a separate documentation project. Prefer shared guidance here, and add a more specific `AGENTS.md` inside a subproject only when that project needs its own rules.
+
+## Writing
+
+- Keep documentation clear, practical, and close to the current project behavior.
+- Prefer small, focused edits over broad rewrites.
+- Preserve the existing page structure, heading style, and terminology.
+- Do not invent features, commands, or deployment steps that are not present in the project.
+
+## Languages
+
+- When a page exists in both English and Chinese, update both versions together.
+- Keep the English and Chinese pages equivalent in meaning, even if the wording is not literal.
+- If only one language exists for a page, follow the existing structure and do not create a second language unless the task asks for it.
+
+## MkDocs
+
+- Keep `mkdocs.yml` navigation in sync with added, moved, or removed pages.
+- Use existing MkDocs and Material conventions already present in the subproject.
+- Do not commit generated site output unless the task explicitly asks for it.
+
+## Verification
+
+Run the smallest relevant documentation build or check when practical. If it is not run, mention that in the final response.
From 778a2ab49076a3d1a4199222e4b5c455f5b3ee72 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 21:12:25 +1000
Subject: [PATCH 45/51] fix(backend): several minor fixes
---
apps/backend/backend/settings/base.py | 15 +++++----------
apps/backend/backend/settings/test.py | 5 -----
apps/backend/backend/urls.py | 1 -
3 files changed, 5 insertions(+), 16 deletions(-)
diff --git a/apps/backend/backend/settings/base.py b/apps/backend/backend/settings/base.py
index 243b182f..1bee5f49 100644
--- a/apps/backend/backend/settings/base.py
+++ b/apps/backend/backend/settings/base.py
@@ -439,11 +439,6 @@
CORS_ALLOWED_ORIGINS = env.list("CORS_ALLOWED_ORIGINS", default=[])
CORS_ALLOW_CREDENTIALS = True
-SPECTACULAR_SETTINGS = {
- 'TITLE': 'AlienCommons',
- 'VERSION': '1.0.0',
-}
-
RQ_QUEUES = {
"default": {
"URL": f"{REDIS_URL}/0",
@@ -468,12 +463,12 @@
'default_avatar/Sword.webp',
]
-SESSION_EXPIRY_REFRESH_INTERVAL = 600
-SESSION_EXPIRY_REFRESH_FIELD = 'last_expiry_refresh_at'
+SESSION_EXPIRY_REFRESH_INTERVAL: int = 600
+SESSION_EXPIRY_REFRESH_FIELD: str = 'last_expiry_refresh_at'
-VERIFICATION_CODE_RESEND_COOLDOWN = 60
-VERIFICATION_CODE_TTL = 600
-MAX_VERIFICATION_ATTEMPTS = 10
+VERIFICATION_CODE_RESEND_COOLDOWN: int = 60
+VERIFICATION_CODE_TTL: int = 600
+MAX_VERIFICATION_ATTEMPTS: int = 10
ALIENMARK_SERVICE_URL: str = "http://alienmark:8787"
ALIENMARK_TIMEOUT_SECONDS: float = 3.0
diff --git a/apps/backend/backend/settings/test.py b/apps/backend/backend/settings/test.py
index 3e254e8e..4e7cd280 100644
--- a/apps/backend/backend/settings/test.py
+++ b/apps/backend/backend/settings/test.py
@@ -79,11 +79,6 @@
"DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
}
-SPECTACULAR_SETTINGS = {
- "TITLE": "AlienCommons Test",
- "VERSION": "1.0.0",
-}
-
MIDDLEWARE = [
"core.middleware.RequestMetaMiddleware",
"django.middleware.security.SecurityMiddleware",
diff --git a/apps/backend/backend/urls.py b/apps/backend/backend/urls.py
index cf3efa06..3944cc6d 100644
--- a/apps/backend/backend/urls.py
+++ b/apps/backend/backend/urls.py
@@ -8,7 +8,6 @@
urlpatterns = [
path("admin/", admin.site.urls),
- path("api/v1/", include("pages.urls")),
path("api/v1/", include("users.urls")),
path("api/v1/", include("articles.urls")),
]
From 564d86a88d0554ee22c78ba504357ae4d4d6337d Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 21:15:29 +1000
Subject: [PATCH 46/51] chore: update backend-lint workflow
---
.github/workflows/backend-lint.yml | 2 --
1 file changed, 2 deletions(-)
diff --git a/.github/workflows/backend-lint.yml b/.github/workflows/backend-lint.yml
index 46aff475..2136d251 100644
--- a/.github/workflows/backend-lint.yml
+++ b/.github/workflows/backend-lint.yml
@@ -41,8 +41,6 @@ jobs:
backend
core
logs
- pages
tasks
users
manage.py
- env_bootstrap.py
From cbdd92a18b757891f82d7c6a63c322717ad1766e Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Fri, 1 May 2026 23:11:06 +1000
Subject: [PATCH 47/51] feat(backend): configure S3 media storage for stg and
pro
---
AGENTS.md | 10 ++++
apps/backend/backend/settings/base.py | 1 +
apps/backend/backend/settings/pro.py | 24 +++++++++-
apps/backend/backend/settings/stg.py | 24 +++++++++-
apps/backend/backend/settings/test.py | 1 +
apps/backend/pyproject.toml | 1 +
apps/backend/uv.lock | 68 +++++++++++++++++++++++++++
7 files changed, 127 insertions(+), 2 deletions(-)
diff --git a/AGENTS.md b/AGENTS.md
index 756056e0..d781fa5e 100644
--- a/AGENTS.md
+++ b/AGENTS.md
@@ -13,6 +13,16 @@ This is a monorepo. The main areas are:
Prefer the conventions already present in the area you are editing.
+## Environments
+
+The project uses three environments:
+
+- `dev` is local development.
+- `stg` is hosted on AWS and should mirror production as closely as practical.
+- `pro` is the production environment and is hosted on AWS.
+
+DNS is managed in Cloudflare for `aliencommons.com`.
+
## Working Rules
- Read the nearby code before changing it.
diff --git a/apps/backend/backend/settings/base.py b/apps/backend/backend/settings/base.py
index 1bee5f49..eef63953 100644
--- a/apps/backend/backend/settings/base.py
+++ b/apps/backend/backend/settings/base.py
@@ -161,6 +161,7 @@
"tasks.apps.TasksConfig",
"corsheaders",
"rest_framework",
+ "storages",
"django_filters",
"django_rq",
"django_tasks_rq",
diff --git a/apps/backend/backend/settings/pro.py b/apps/backend/backend/settings/pro.py
index a76dd2b7..805581f5 100644
--- a/apps/backend/backend/settings/pro.py
+++ b/apps/backend/backend/settings/pro.py
@@ -2,7 +2,7 @@
DEBUG = False
-CSRF_TRUSTED_ORIGINS=[
+CSRF_TRUSTED_ORIGINS = [
"https://api.aliencommons.lazyalienserver.top",
]
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
@@ -11,3 +11,25 @@
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = "Lax"
CSRF_COOKIE_SAMESITE = "Lax"
+
+AWS_STORAGE_BUCKET_NAME = env.str("AWS_STORAGE_BUCKET_NAME")
+AWS_S3_REGION_NAME = env.str("AWS_S3_REGION_NAME")
+AWS_S3_CUSTOM_DOMAIN = env.str("AWS_S3_CUSTOM_DOMAIN")
+
+STORAGES = {
+ **STORAGES,
+ "default": {
+ "BACKEND": "storages.backends.s3.S3Storage",
+ "OPTIONS": {
+ "bucket_name": AWS_STORAGE_BUCKET_NAME,
+ "region_name": AWS_S3_REGION_NAME,
+ "location": "media",
+ "custom_domain": AWS_S3_CUSTOM_DOMAIN,
+ "default_acl": None,
+ "file_overwrite": False,
+ "querystring_auth": False,
+ },
+ },
+}
+
+MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
diff --git a/apps/backend/backend/settings/stg.py b/apps/backend/backend/settings/stg.py
index 97827f16..ff2d4319 100644
--- a/apps/backend/backend/settings/stg.py
+++ b/apps/backend/backend/settings/stg.py
@@ -2,7 +2,7 @@
DEBUG = False
-CSRF_TRUSTED_ORIGINS=[
+CSRF_TRUSTED_ORIGINS = [
"https://api-stg.aliencommons.lazyalienserver.top",
]
SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https")
@@ -11,3 +11,25 @@
CSRF_COOKIE_SECURE = True
SESSION_COOKIE_SAMESITE = "Lax"
CSRF_COOKIE_SAMESITE = "Lax"
+
+AWS_STORAGE_BUCKET_NAME = env.str("AWS_STORAGE_BUCKET_NAME")
+AWS_S3_REGION_NAME = env.str("AWS_S3_REGION_NAME")
+AWS_S3_CUSTOM_DOMAIN = env.str("AWS_S3_CUSTOM_DOMAIN")
+
+STORAGES = {
+ **STORAGES,
+ "default": {
+ "BACKEND": "storages.backends.s3.S3Storage",
+ "OPTIONS": {
+ "bucket_name": AWS_STORAGE_BUCKET_NAME,
+ "region_name": AWS_S3_REGION_NAME,
+ "location": "media",
+ "custom_domain": AWS_S3_CUSTOM_DOMAIN,
+ "default_acl": None,
+ "file_overwrite": False,
+ "querystring_auth": False,
+ },
+ },
+}
+
+MEDIA_URL = f"https://{AWS_S3_CUSTOM_DOMAIN}/media/"
diff --git a/apps/backend/backend/settings/test.py b/apps/backend/backend/settings/test.py
index 4e7cd280..3c3d271c 100644
--- a/apps/backend/backend/settings/test.py
+++ b/apps/backend/backend/settings/test.py
@@ -27,6 +27,7 @@
"tasks.apps.TasksConfig",
"corsheaders",
"rest_framework",
+ "storages",
"django_filters",
"django_rq",
"django_tasks_rq",
diff --git a/apps/backend/pyproject.toml b/apps/backend/pyproject.toml
index cb3a73fd..cc8cfe8b 100644
--- a/apps/backend/pyproject.toml
+++ b/apps/backend/pyproject.toml
@@ -7,6 +7,7 @@ dependencies = [
"django-cors-headers>=4.9.0",
"django-filter>=25.2",
"django-redis>=6.0.0",
+ "django-storages[s3]>=1.14.6",
"django-tasks-rq>=0.12.0",
"djangorestframework>=3.17.1",
"environs>=15.0.1",
diff --git a/apps/backend/uv.lock b/apps/backend/uv.lock
index ba09ddb5..567d7db0 100644
--- a/apps/backend/uv.lock
+++ b/apps/backend/uv.lock
@@ -11,6 +11,7 @@ dependencies = [
{ name = "django-cors-headers" },
{ name = "django-filter" },
{ name = "django-redis" },
+ { name = "django-storages", extra = ["s3"] },
{ name = "django-tasks-rq" },
{ name = "djangorestframework" },
{ name = "environs" },
@@ -31,6 +32,7 @@ requires-dist = [
{ name = "django-cors-headers", specifier = ">=4.9.0" },
{ name = "django-filter", specifier = ">=25.2" },
{ name = "django-redis", specifier = ">=6.0.0" },
+ { name = "django-storages", extras = ["s3"], specifier = ">=1.14.6" },
{ name = "django-tasks-rq", specifier = ">=0.12.0" },
{ name = "djangorestframework", specifier = ">=3.17.1" },
{ name = "environs", specifier = ">=15.0.1" },
@@ -52,6 +54,34 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" },
]
+[[package]]
+name = "boto3"
+version = "1.43.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "botocore" },
+ { name = "jmespath" },
+ { name = "s3transfer" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/98/36/028c12ed6ed85009a21b5472eb76c27f9b0341c6986f06f83475b40aaf51/boto3-1.43.1.tar.gz", hash = "sha256:9e4f85a7884797ff0f52c257094730ed228aaa07fa8134775ff8f86909cf4f2a", size = 113175, upload-time = "2026-04-30T20:27:04.569Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/e5/d1/b8b2d5420c51cd8f7ec044ceecbf24b060156680b26519e1d482e160c3c8/boto3-1.43.1-py3-none-any.whl", hash = "sha256:3840bf0345b9aefcc5915176a19d227f63cfba7778c65e6e52d61c6ea0a10fdc", size = 140498, upload-time = "2026-04-30T20:27:01.791Z" },
+]
+
+[[package]]
+name = "botocore"
+version = "1.43.1"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "jmespath" },
+ { name = "python-dateutil" },
+ { name = "urllib3" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/03/b7/416ae6f1461d6fec3b3aaffc4759371319c71a21f7ab4c3106ee574fda8d/botocore-1.43.1.tar.gz", hash = "sha256:270d6357d662550fdb84973ec247e02bece0b6283d90bf37319c7753515336e4", size = 15296915, upload-time = "2026-04-30T20:26:50.962Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/09/48/dc2290d2af8b1dc3a44d210555a90f0cb76ef913c52b0c4f31a43cce27b8/botocore-1.43.1-py3-none-any.whl", hash = "sha256:955edc6a398b9c4100cf0d5a31433fdba3835500bf38c1ef171e6e75f4b477d2", size = 14979119, upload-time = "2026-04-30T20:26:46.031Z" },
+]
+
[[package]]
name = "certifi"
version = "2026.2.25"
@@ -207,6 +237,23 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/4a/93/4f4d8db1d8ad6adbbdae46dc1d1453729af4dff8b722b8ced5f44447be82/django_rq-4.1.0-py3-none-any.whl", hash = "sha256:ba6e30cfbaefc3b96d9d9c9bd752ad5a9aa8b886e5d9483500b307c1733d2d39", size = 67426, upload-time = "2026-04-05T10:32:46.105Z" },
]
+[[package]]
+name = "django-storages"
+version = "1.14.6"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "django" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/ff/d6/2e50e378fff0408d558f36c4acffc090f9a641fd6e084af9e54d45307efa/django_storages-1.14.6.tar.gz", hash = "sha256:7a25ce8f4214f69ac9c7ce87e2603887f7ae99326c316bc8d2d75375e09341c9", size = 87587, upload-time = "2025-04-02T02:34:55.103Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/1f/21/3cedee63417bc5553eed0c204be478071c9ab208e5e259e97287590194f1/django_storages-1.14.6-py3-none-any.whl", hash = "sha256:11b7b6200e1cb5ffcd9962bd3673a39c7d6a6109e8096f0e03d46fab3d3aabd9", size = 33095, upload-time = "2025-04-02T02:34:53.291Z" },
+]
+
+[package.optional-dependencies]
+s3 = [
+ { name = "boto3" },
+]
+
[[package]]
name = "django-stubs-ext"
version = "6.0.2"
@@ -310,6 +357,15 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" },
]
+[[package]]
+name = "jmespath"
+version = "1.1.0"
+source = { registry = "https://pypi.org/simple" }
+sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" },
+]
+
[[package]]
name = "marshmallow"
version = "4.3.0"
@@ -460,6 +516,18 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/63/b6/aeadee5443e49baa2facd51131159fd6301cc4ccfc1541e4df7b021c37dd/ruff-0.15.11-py3-none-win_arm64.whl", hash = "sha256:063fed18cc1bbe0ee7393957284a6fe8b588c6a406a285af3ee3f46da2391ee4", size = 11032614, upload-time = "2026-04-16T18:46:34.487Z" },
]
+[[package]]
+name = "s3transfer"
+version = "0.17.0"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "botocore" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/9b/ec/7c692cde9125b77e84b307354d4fb705f98b8ccad59a036d5957ca75bfc3/s3transfer-0.17.0.tar.gz", hash = "sha256:9edeb6d1c3c2f89d6050348548834ad8289610d886e5bf7b7207728bd43ce33a", size = 155337, upload-time = "2026-04-29T22:07:36.33Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/87/72/c6c32d2b657fa3dad1de340254e14390b1e334ce38268b7ad51abda3c8c2/s3transfer-0.17.0-py3-none-any.whl", hash = "sha256:ce3801712acf4ad3e89fb9990df97b4972e93f4b3b0004d214be5bce12814c20", size = 86811, upload-time = "2026-04-29T22:07:34.966Z" },
+]
+
[[package]]
name = "six"
version = "1.17.0"
From ee6f93bbf639d76d63fec124f52c49eed9267b13 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 2 May 2026 11:34:45 +1000
Subject: [PATCH 48/51] refactor(backend): complete article markdown migration
---
.../articles/migrations/0001_initial.py | 81 +++++++++++++++++
.../articles/migrations/0002_initial.py | 88 +++++++++++++++++++
apps/backend/articles/services/articles.py | 7 +-
apps/backend/articles/tasks.py | 46 +++++-----
apps/backend/articles/tests/test_models.py | 14 +--
apps/backend/articles/tests/test_services.py | 25 ++++--
apps/backend/articles/tests/test_views.py | 8 +-
apps/backend/backend/settings/base.py | 2 -
apps/backend/backend/settings/test.py | 1 -
apps/backend/core/tests/factories.py | 13 +--
apps/backend/core/tests/test_view_mixins.py | 2 +-
apps/backend/pyproject.toml | 1 +
apps/backend/tasks/migrations/0001_initial.py | 52 +++++++++++
apps/backend/tasks/periodic_tasks_registry.py | 1 -
apps/backend/users/migrations/0001_initial.py | 82 +++++++++++++++++
apps/backend/uv.lock | 37 ++++++++
infra/compose/docker-compose.dev.yml | 4 +
make/docker.mk | 5 +-
18 files changed, 411 insertions(+), 58 deletions(-)
create mode 100644 apps/backend/articles/migrations/0001_initial.py
create mode 100644 apps/backend/articles/migrations/0002_initial.py
create mode 100644 apps/backend/tasks/migrations/0001_initial.py
create mode 100644 apps/backend/users/migrations/0001_initial.py
diff --git a/apps/backend/articles/migrations/0001_initial.py b/apps/backend/articles/migrations/0001_initial.py
new file mode 100644
index 00000000..24667499
--- /dev/null
+++ b/apps/backend/articles/migrations/0001_initial.py
@@ -0,0 +1,81 @@
+# Generated by Django 6.0.4 on 2026-05-02 01:21
+
+import uuid
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='ArticleEvent',
+ fields=[
+ ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('event_type', models.IntegerField(choices=[(1, 'Submit'), (2, 'Withdraw'), (3, 'Approve'), (4, 'Reject'), (5, 'Unpublish'), (6, 'Delete')], help_text='The event type of the article event', verbose_name='event type')),
+ ],
+ options={
+ 'verbose_name': 'article event',
+ 'verbose_name_plural': 'article events',
+ 'ordering': ['-created_at'],
+ },
+ ),
+ migrations.CreateModel(
+ name='ArticleSnapshot',
+ fields=[
+ ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(db_index=True, help_text='The title of the article snapshot', max_length=100, verbose_name='title')),
+ ('markdown', models.TextField(help_text='The article in Markdown format', verbose_name='article in markdown')),
+ ('hash', models.CharField(db_index=True, default='', help_text='The hash value of the article snapshot', max_length=64, verbose_name='hash')),
+ ('source_version', models.PositiveIntegerField(help_text='The source version of the article snapshot', verbose_name='source version')),
+ ('moderation_status', models.IntegerField(choices=[(1, 'Pending'), (2, 'Withdrawn'), (3, 'Approved'), (4, 'Rejected')], db_index=True, default=1, help_text='The moderation status of the article snapshot', verbose_name='moderation status')),
+ ],
+ options={
+ 'verbose_name': 'article snapshot',
+ 'verbose_name_plural': 'article snapshots',
+ 'ordering': ['-created_at'],
+ },
+ ),
+ migrations.CreateModel(
+ name='PublishedArticle',
+ fields=[
+ ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
+ ('updated_at', models.DateTimeField(auto_now=True, db_index=True, help_text='The updated DateTime of the object', verbose_name='updated at')),
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('title', models.CharField(db_index=True, help_text='The title of the published article', max_length=100, verbose_name='title')),
+ ('html', models.TextField(help_text='The article in HTML format', verbose_name='article in html')),
+ ('publication_at', models.DateTimeField(db_index=True, help_text='Th DateTime of publication of the published article', verbose_name='published at')),
+ ],
+ options={
+ 'verbose_name': 'published article',
+ 'verbose_name_plural': 'published articles',
+ 'ordering': ['-created_at'],
+ },
+ ),
+ migrations.CreateModel(
+ name='SourceArticle',
+ fields=[
+ ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
+ ('updated_at', models.DateTimeField(auto_now=True, db_index=True, help_text='The updated DateTime of the object', verbose_name='updated at')),
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('is_deleted', models.BooleanField(db_index=True, default=False, help_text='Whether the object is deleted', verbose_name='deleted')),
+ ('title', models.CharField(blank=True, db_index=True, default='Untitled', help_text='The title of the article', max_length=100, verbose_name='title')),
+ ('markdown', models.TextField(blank=True, default='', help_text='The article in Markdown format', verbose_name='article in markdown')),
+ ('version', models.PositiveIntegerField(default=1, help_text='The current draft version of the source article', verbose_name='version')),
+ ('status', models.IntegerField(choices=[(0, 'Draft'), (1, 'Pending'), (2, 'Published'), (3, 'Unpublished')], db_index=True, default=0, help_text='The status of the article', verbose_name='status')),
+ ('last_saved_at', models.DateTimeField(blank=True, help_text='The last saved DateTime of the article', null=True, verbose_name='last saved at')),
+ ('last_moderation_at', models.DateTimeField(blank=True, help_text='The last moderation DateTime of the source article', null=True, verbose_name='last moderation at')),
+ ],
+ options={
+ 'verbose_name': 'source article',
+ 'verbose_name_plural': 'source articles',
+ 'ordering': ['-created_at'],
+ },
+ ),
+ ]
diff --git a/apps/backend/articles/migrations/0002_initial.py b/apps/backend/articles/migrations/0002_initial.py
new file mode 100644
index 00000000..62354028
--- /dev/null
+++ b/apps/backend/articles/migrations/0002_initial.py
@@ -0,0 +1,88 @@
+# Generated by Django 6.0.4 on 2026-05-02 01:21
+
+import django.db.models.deletion
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('articles', '0001_initial'),
+ migrations.swappable_dependency(settings.AUTH_USER_MODEL),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name='articleevent',
+ name='actor',
+ field=models.ForeignKey(help_text='The actor of the article event', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='article_events', to=settings.AUTH_USER_MODEL, verbose_name='actor'),
+ ),
+ migrations.AddField(
+ model_name='articleevent',
+ name='article_snapshot',
+ field=models.ForeignKey(help_text='The article snapshot of the article event', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='article_events', to='articles.articlesnapshot', verbose_name='snapshot'),
+ ),
+ migrations.AddField(
+ model_name='sourcearticle',
+ name='author',
+ field=models.ForeignKey(help_text='The author of the article', null=True, on_delete=django.db.models.deletion.SET_NULL, related_name='source_articles', to=settings.AUTH_USER_MODEL, verbose_name='author'),
+ ),
+ migrations.AddField(
+ model_name='publishedarticle',
+ name='source_article',
+ field=models.OneToOneField(help_text='The source article of the published version', on_delete=django.db.models.deletion.CASCADE, related_name='published_version', to='articles.sourcearticle', verbose_name='source article'),
+ ),
+ migrations.AddField(
+ model_name='articlesnapshot',
+ name='source_article',
+ field=models.ForeignKey(help_text='The source article of the article snapshot', on_delete=django.db.models.deletion.CASCADE, related_name='article_snapshots', to='articles.sourcearticle', verbose_name='source article'),
+ ),
+ migrations.AddField(
+ model_name='articleevent',
+ name='source_article',
+ field=models.ForeignKey(help_text='The source article of the article event', on_delete=django.db.models.deletion.CASCADE, related_name='article_events', to='articles.sourcearticle', verbose_name='source articles'),
+ ),
+ migrations.AddIndex(
+ model_name='sourcearticle',
+ index=models.Index(fields=['author', 'created_at'], name='articles_so_author__7d3dd5_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='sourcearticle',
+ index=models.Index(fields=['status', 'created_at'], name='articles_so_status_044214_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='sourcearticle',
+ index=models.Index(fields=['author', 'status', 'updated_at'], name='articles_so_author__c55948_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='articlesnapshot',
+ index=models.Index(fields=['source_article', 'created_at'], name='articles_ar_source__073c0f_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='articlesnapshot',
+ index=models.Index(fields=['moderation_status', 'created_at'], name='articles_ar_moderat_f773c4_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='articlesnapshot',
+ index=models.Index(fields=['source_article', 'hash'], name='articles_ar_source__1bad11_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='articleevent',
+ index=models.Index(fields=['source_article', 'created_at'], name='articles_ar_source__fe04d1_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='articleevent',
+ index=models.Index(fields=['actor', 'created_at'], name='articles_ar_actor_i_7fd01f_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='articleevent',
+ index=models.Index(fields=['article_snapshot', 'created_at'], name='articles_ar_article_9394d1_idx'),
+ ),
+ migrations.AddIndex(
+ model_name='articleevent',
+ index=models.Index(fields=['event_type', 'created_at'], name='articles_ar_event_t_b530f1_idx'),
+ ),
+ ]
diff --git a/apps/backend/articles/services/articles.py b/apps/backend/articles/services/articles.py
index 37626f2d..6c4ffbba 100644
--- a/apps/backend/articles/services/articles.py
+++ b/apps/backend/articles/services/articles.py
@@ -140,14 +140,16 @@ def _create_or_update_published_article(self) -> PublishedArticle:
if published_article:
published_article.title = self.article_snapshot.title
published_article.html = html
- published_article.save(update_fields=['title', 'html'])
+ published_article.publication_at = timezone.now()
+ published_article.save(update_fields=['title', 'html', 'publication_at'])
return published_article
published_article = PublishedArticle.objects.create(
source_article=self.source_article,
title=self.article_snapshot.title,
- html=html
+ html=html,
+ publication_at=timezone.now(),
)
return published_article
@@ -223,6 +225,7 @@ def submit(self):
title=self.source_article.title,
markdown=self.source_article.markdown,
hash=current_hash,
+ source_version=self.source_article.version,
moderation_status=ArticleSnapshot.SnapshotStatus.PENDING
)
self.article_snapshot = new_snapshot
diff --git a/apps/backend/articles/tasks.py b/apps/backend/articles/tasks.py
index 81f77ff2..d49ab750 100644
--- a/apps/backend/articles/tasks.py
+++ b/apps/backend/articles/tasks.py
@@ -3,15 +3,18 @@
from django.tasks import task
from pathlib import Path
+import re
from urllib.parse import urlparse
from articles.models import SourceArticle
-# TODO: 重写!
-def _extract_media_relpaths_from_tiptap(doc):
+MARKDOWN_IMAGE_RE = re.compile(r"!\[[^\]]*]\(\s*(<[^>]+>|[^)\s]+)")
+
+
+def _extract_media_relpaths_from_markdown(markdown):
"""
- Extract relative storage paths from TipTap JSON doc.
+ Extract relative storage paths from Markdown image references.
Example src:
- "/media/article_images/2026/01/xx.webp"
- "http://localhost:8000/media/article_images/2026/01/xx.webp"
@@ -25,6 +28,10 @@ def normalize_src(src):
if not src:
return None
+ src = src.strip()
+ if src.startswith("<") and src.endswith(">"):
+ src = src[1:-1]
+
# absolute url -> take path part
if src.startswith("http://") or src.startswith("https://"):
src = urlparse(src).path # "/media/xxx"
@@ -35,23 +42,11 @@ def normalize_src(src):
return src[len(media_url):] # strip "/media/" -> "article_images/..."
- def walk(node):
- if isinstance(node, dict):
- if node.get("type") == "image":
- attrs = node.get("attrs") or {}
- src = attrs.get("src")
- rel = normalize_src(src)
- if rel:
- relpaths.add(rel)
-
- for v in node.values():
- walk(v)
-
- elif isinstance(node, list):
- for item in node:
- walk(item)
+ for match in MARKDOWN_IMAGE_RE.finditer(markdown):
+ rel = normalize_src(match.group(1))
+ if rel:
+ relpaths.add(rel)
- walk(doc)
return relpaths
@@ -69,21 +64,20 @@ def _iter_article_image_files():
@task
def cleanup_unreferenced_article_images(grace_days=1):
"""
- Delete article_images/* files that are not referenced by any SourceArticle.content.
+ Delete article_images/* files that are not referenced by any SourceArticle.markdown.
grace_days:
- Only delete files older than N days to avoid removing images uploaded
- but not yet saved into content (or in-flight edits).
+ but not yet saved into markdown (or in-flight edits).
"""
# 1) Build a set of all referenced storage-relative paths
referenced = set()
- qs = SourceArticle.objects.filter(is_deleted=False).values_list("content", flat=True)
- for content in qs:
- if not content:
+ qs = SourceArticle.objects.filter(is_deleted=False).values_list("markdown", flat=True)
+ for markdown in qs:
+ if not markdown:
continue
- # content is a JSONField dict
- referenced |= _extract_media_relpaths_from_tiptap(content)
+ referenced |= _extract_media_relpaths_from_markdown(markdown)
# 2) Walk media/article_images and delete unreferenced, older-than-grace files
deleted = 0
diff --git a/apps/backend/articles/tests/test_models.py b/apps/backend/articles/tests/test_models.py
index 78e15beb..cf916cd8 100644
--- a/apps/backend/articles/tests/test_models.py
+++ b/apps/backend/articles/tests/test_models.py
@@ -4,6 +4,7 @@
PublishedArticle,
SourceArticle,
)
+from articles.services.articles import ArticleWorkflow
from core.tests.factories import create_source_article, create_user
from core.tests.testcases import BaseTestCase
@@ -30,7 +31,8 @@ def test_published_article_string_representation_references_source_article(self)
published = PublishedArticle.objects.create(
source_article=article,
title=article.title,
- content=article.content,
+ html=article.markdown,
+ publication_at=article.created_at,
)
self.assertEqual(str(published), "Published version of article Ship log")
@@ -40,8 +42,9 @@ def test_article_snapshot_string_representation_uses_source_article_id(self):
snapshot = ArticleSnapshot.objects.create(
source_article=article,
title=article.title,
- content=article.content,
- content_hash="hash-value",
+ markdown=article.markdown,
+ hash="hash-value",
+ source_version=article.version,
)
self.assertEqual(str(snapshot), f"Snapshot of article {article.id}")
@@ -51,8 +54,9 @@ def test_article_event_string_representation_includes_operation_actor_and_articl
snapshot = ArticleSnapshot.objects.create(
source_article=article,
title=article.title,
- content=article.content,
- content_hash="hash-value",
+ markdown=article.markdown,
+ hash=ArticleWorkflow._hash_and_normalize(article.title, article.markdown),
+ source_version=article.version,
)
event = ArticleEvent.objects.create(
source_article=article,
diff --git a/apps/backend/articles/tests/test_services.py b/apps/backend/articles/tests/test_services.py
index 6d96a33b..4a3eb00d 100644
--- a/apps/backend/articles/tests/test_services.py
+++ b/apps/backend/articles/tests/test_services.py
@@ -1,6 +1,7 @@
from django.utils import timezone
from datetime import timedelta
+from unittest.mock import patch
from articles.models import (
ArticleEvent,
@@ -46,7 +47,8 @@ def test_submit_creates_pending_snapshot_and_event(self):
self.assertEqual(article.status, SourceArticle.ArticleStatus.PENDING)
self.assertEqual(snapshot.title, article.title)
- self.assertEqual(snapshot.content, article.content)
+ self.assertEqual(snapshot.markdown, article.markdown)
+ self.assertEqual(snapshot.source_version, article.version)
self.assertEqual(
snapshot.moderation_status,
ArticleSnapshot.SnapshotStatus.PENDING,
@@ -56,7 +58,7 @@ def test_submit_creates_pending_snapshot_and_event(self):
self.assertEqual(result["event_id"], event.id)
self.assertEqual(result["article_snapshot_id"], snapshot.id)
- def test_submit_rejects_unchanged_content_after_previous_snapshot(self):
+ def test_submit_rejects_unchanged_markdown_after_previous_snapshot(self):
article = create_source_article(author=self.author)
create_article_snapshot(article)
@@ -99,7 +101,8 @@ def test_withdraw_restores_draft_and_marks_snapshot_withdrawn(self):
self.assertEqual(event.event_type, ArticleEvent.EventType.WITHDRAW)
self.assertEqual(result["article_snapshot_id"], snapshot.id)
- def test_approve_creates_published_article_and_marks_snapshot_approved(self):
+ @patch("articles.services.articles.render_md_to_html", return_value="Hello
")
+ def test_approve_creates_published_article_and_marks_snapshot_approved(self, render_mock):
article = create_source_article(
author=self.author,
status=SourceArticle.ArticleStatus.PENDING,
@@ -120,22 +123,25 @@ def test_approve_creates_published_article_and_marks_snapshot_approved(self):
ArticleSnapshot.SnapshotStatus.APPROVED,
)
self.assertEqual(published.title, snapshot.title)
- self.assertEqual(published.content, snapshot.content)
+ self.assertEqual(published.html, "Hello
")
+ self.assertIsNotNone(published.publication_at)
self.assertEqual(event.event_type, ArticleEvent.EventType.APPROVE)
self.assertEqual(result["event_id"], event.id)
+ render_mock.assert_called_once_with(snapshot.markdown)
- def test_approve_updates_existing_published_article(self):
+ @patch("articles.services.articles.render_md_to_html", return_value="Updated
")
+ def test_approve_updates_existing_published_article(self, render_mock):
article = create_source_article(
author=self.author,
status=SourceArticle.ArticleStatus.PENDING,
title="Updated title",
- content={"blocks": [{"type": "paragraph", "text": "Updated"}]},
+ markdown="Updated",
)
snapshot = create_article_snapshot(article)
published = create_published_article(
article,
title="Old title",
- content={"blocks": [{"type": "paragraph", "text": "Old"}]},
+ html="Old
",
)
approve(source_article_id=article.id, actor=self.moderator)
@@ -144,7 +150,8 @@ def test_approve_updates_existing_published_article(self):
self.assertEqual(PublishedArticle.objects.filter(source_article=article).count(), 1)
self.assertEqual(published.id, PublishedArticle.objects.get(source_article=article).id)
self.assertEqual(published.title, snapshot.title)
- self.assertEqual(published.content, snapshot.content)
+ self.assertEqual(published.html, "Updated
")
+ render_mock.assert_called_once_with(snapshot.markdown)
def test_reject_restores_draft_and_marks_snapshot_rejected(self):
article = create_source_article(
@@ -194,7 +201,7 @@ def test_soft_delete_marks_source_article_deleted_and_removes_published_article(
status=SourceArticle.ArticleStatus.PUBLISHED,
)
snapshot = create_article_snapshot(article)
- create_published_article(article, title=snapshot.title, content=snapshot.content)
+ create_published_article(article, title=snapshot.title, html=snapshot.markdown)
result = soft_delete(source_article_id=article.id, actor=self.author)
diff --git a/apps/backend/articles/tests/test_views.py b/apps/backend/articles/tests/test_views.py
index 8a30f417..6e752506 100644
--- a/apps/backend/articles/tests/test_views.py
+++ b/apps/backend/articles/tests/test_views.py
@@ -1,6 +1,7 @@
from django.urls import reverse
from rest_framework import status
+from unittest.mock import patch
from core.tests.factories import (
create_article_snapshot,
@@ -30,7 +31,7 @@ def test_create_source_article_returns_formatted_response(self):
reverse("source_article-list"),
{
"title": "Draft title",
- "content": {"type": "doc", "content": [{"type": "paragraph"}]},
+ "markdown": "Hello from Markdown",
},
)
@@ -41,6 +42,7 @@ def test_create_source_article_returns_formatted_response(self):
message="created",
)
self.assertEqual(response.data["data"]["title"], "Draft title")
+ self.assertEqual(response.data["data"]["markdown"], "Hello from Markdown")
self.assert_uuid_equal(response.data["data"]["author"], self.author.id)
self.assertEqual(SourceArticle.objects.count(), 1)
@@ -99,7 +101,8 @@ def test_approve_endpoint_requires_moderator(self):
self.assertFalse(PublishedArticle.objects.filter(source_article=article).exists())
self.assertEqual(ArticleEvent.objects.filter(source_article=article).count(), 0)
- def test_moderator_can_approve_pending_article(self):
+ @patch("articles.services.articles.render_md_to_html", return_value="Hello
")
+ def test_moderator_can_approve_pending_article(self, render_mock):
article = create_source_article(
author=self.author,
status=SourceArticle.ArticleStatus.PENDING,
@@ -127,6 +130,7 @@ def test_moderator_can_approve_pending_article(self):
ArticleSnapshot.SnapshotStatus.APPROVED,
)
self.assertTrue(PublishedArticle.objects.filter(source_article=article).exists())
+ render_mock.assert_called_once_with(snapshot.markdown)
def test_pending_snapshots_endpoint_only_lists_pending_ones_for_moderator(self):
pending_article = create_source_article(
diff --git a/apps/backend/backend/settings/base.py b/apps/backend/backend/settings/base.py
index eef63953..efd2f301 100644
--- a/apps/backend/backend/settings/base.py
+++ b/apps/backend/backend/settings/base.py
@@ -427,8 +427,6 @@
],
"DEFAULT_THROTTLE_CLASSES": [],
"DEFAULT_CONTENT_NEGOTIATION_CLASS": "rest_framework.negotiation.DefaultContentNegotiation",
- "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
-
"DEFAULT_PAGINATION_CLASS": "core.pagination.StandardPagination",
"PAGE_SIZE": 20,
diff --git a/apps/backend/backend/settings/test.py b/apps/backend/backend/settings/test.py
index 3c3d271c..9df466eb 100644
--- a/apps/backend/backend/settings/test.py
+++ b/apps/backend/backend/settings/test.py
@@ -77,7 +77,6 @@
"PAGE_SIZE": 20,
"DATETIME_FORMAT": "%Y-%m-%dT%H:%M:%S%z",
"DATE_FORMAT": "%Y-%m-%d",
- "DEFAULT_SCHEMA_CLASS": "drf_spectacular.openapi.AutoSchema",
}
MIDDLEWARE = [
diff --git a/apps/backend/core/tests/factories.py b/apps/backend/core/tests/factories.py
index e7aa2d12..7ee33a91 100644
--- a/apps/backend/core/tests/factories.py
+++ b/apps/backend/core/tests/factories.py
@@ -1,4 +1,5 @@
from django.contrib.auth import get_user_model
+from django.utils import timezone
from articles.models import ArticleSnapshot, PublishedArticle, SourceArticle
from articles.services.articles import ArticleWorkflow
@@ -30,7 +31,7 @@ def create_source_article(**kwargs):
defaults = {
"author": kwargs.pop("author", create_user()),
"title": "First draft",
- "content": {"blocks": [{"type": "paragraph", "text": "Hello"}]},
+ "markdown": "Hello",
"status": SourceArticle.ArticleStatus.DRAFT,
}
defaults.update(kwargs)
@@ -41,11 +42,12 @@ def create_article_snapshot(article, **kwargs):
defaults = {
"source_article": article,
"title": article.title,
- "content": article.content,
- "content_hash": ArticleWorkflow._hash_and_normalize(
+ "markdown": article.markdown,
+ "hash": ArticleWorkflow._hash_and_normalize(
article.title,
- article.content,
+ article.markdown,
),
+ "source_version": article.version,
"moderation_status": ArticleSnapshot.SnapshotStatus.PENDING,
}
defaults.update(kwargs)
@@ -56,7 +58,8 @@ def create_published_article(article, **kwargs):
defaults = {
"source_article": article,
"title": article.title,
- "content": article.content,
+ "html": article.markdown,
+ "publication_at": timezone.now(),
}
defaults.update(kwargs)
return PublishedArticle.objects.create(**defaults)
diff --git a/apps/backend/core/tests/test_view_mixins.py b/apps/backend/core/tests/test_view_mixins.py
index b5564884..7cc77d37 100644
--- a/apps/backend/core/tests/test_view_mixins.py
+++ b/apps/backend/core/tests/test_view_mixins.py
@@ -48,7 +48,7 @@ def setUp(self):
SourceArticle.objects.create(
author=self.user,
title=f"Article {index}",
- content={"index": index},
+ markdown=f"Article {index}",
)
def test_paginated_list_response_is_wrapped_with_standard_api_shape(self):
diff --git a/apps/backend/pyproject.toml b/apps/backend/pyproject.toml
index cc8cfe8b..b1d916a3 100644
--- a/apps/backend/pyproject.toml
+++ b/apps/backend/pyproject.toml
@@ -13,6 +13,7 @@ dependencies = [
"environs>=15.0.1",
"gunicorn>=25.3.0",
"pillow>=12.2.0",
+ "psycopg[binary]>=3.3.2",
"requests>=2.33.1",
"user-agents>=2.2.0",
]
diff --git a/apps/backend/tasks/migrations/0001_initial.py b/apps/backend/tasks/migrations/0001_initial.py
new file mode 100644
index 00000000..8c6665a6
--- /dev/null
+++ b/apps/backend/tasks/migrations/0001_initial.py
@@ -0,0 +1,52 @@
+# Generated by Django 6.0.4 on 2026-05-02 01:21
+
+import django.db.models.deletion
+import uuid
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='IntervalSchedule',
+ fields=[
+ ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+ ('every', models.PositiveIntegerField(help_text='Number of interval periods to wait before next execution', verbose_name='number of periods')),
+ ('period', models.CharField(choices=[('millisecond', 'millisecond'), ('second', 'second'), ('minute', 'minute'), ('hour', 'hour'), ('day', 'day'), ('week', 'week')], help_text='The type of period used by the schedule', max_length=50, verbose_name='interval period')),
+ ],
+ options={
+ 'verbose_name': 'interval schedule',
+ 'verbose_name_plural': 'interval schedules',
+ 'constraints': [models.UniqueConstraint(fields=('every', 'period'), name='unique_interval_schedule')],
+ },
+ ),
+ migrations.CreateModel(
+ name='PeriodicTask',
+ fields=[
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('name', models.CharField(help_text='A short, unique description for this task', max_length=150, unique=True, verbose_name='name')),
+ ('description', models.TextField(blank=True, default='', help_text='A extended description for this task', verbose_name='description')),
+ ('task', models.CharField(help_text='The path of the task function to be run', max_length=255, verbose_name='task path')),
+ ('queue_name', models.CharField(help_text='The name of the queue that this task belongs to', max_length=100, verbose_name='queue name')),
+ ('args', models.JSONField(blank=True, default=list, help_text='The positional arguments passed to the function', verbose_name='positional arguments')),
+ ('kwargs', models.JSONField(blank=True, default=dict, help_text='The keyword arguments passed to the function', verbose_name='keyword arguments')),
+ ('is_enabled', models.BooleanField(db_index=True, default=True, help_text='Only enabled tasks will be queued', verbose_name='enabled')),
+ ('last_enqueued_at', models.DateTimeField(blank=True, editable=False, help_text='The last enqueued DateTime of the task', null=True, verbose_name='last enqueued at')),
+ ('next_enqueue_at', models.DateTimeField(blank=True, help_text='The next enqueue DateTime of the task', verbose_name='next enqueue at')),
+ ('last_started_at', models.DateTimeField(blank=True, editable=False, help_text='The last started DateTime of the task', null=True, verbose_name='last started at')),
+ ('last_finished_at', models.DateTimeField(blank=True, editable=False, help_text='The last finished DateTime of the task', null=True, verbose_name='last finished at')),
+ ('interval', models.ForeignKey(help_text='The time between two task executions', on_delete=django.db.models.deletion.PROTECT, related_name='periodic_tasks', to='tasks.intervalschedule', verbose_name='interval')),
+ ],
+ options={
+ 'verbose_name': 'periodic task',
+ 'verbose_name_plural': 'periodic tasks',
+ 'ordering': ['-next_enqueue_at'],
+ },
+ ),
+ ]
diff --git a/apps/backend/tasks/periodic_tasks_registry.py b/apps/backend/tasks/periodic_tasks_registry.py
index 796357ba..d43b8d56 100644
--- a/apps/backend/tasks/periodic_tasks_registry.py
+++ b/apps/backend/tasks/periodic_tasks_registry.py
@@ -3,7 +3,6 @@
"""
periodic_tasks = [
-
{
"name": "clear expired sessions",
"task": "users.tasks.clean_expired_sessions",
diff --git a/apps/backend/users/migrations/0001_initial.py b/apps/backend/users/migrations/0001_initial.py
new file mode 100644
index 00000000..dc2c2dae
--- /dev/null
+++ b/apps/backend/users/migrations/0001_initial.py
@@ -0,0 +1,82 @@
+# Generated by Django 6.0.4 on 2026-05-02 01:21
+
+import django.db.models.deletion
+import django.utils.timezone
+import users.models.users
+import uuid
+from django.conf import settings
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ initial = True
+
+ dependencies = [
+ ('auth', '0012_alter_user_first_name_max_length'),
+ ]
+
+ operations = [
+ migrations.CreateModel(
+ name='User',
+ fields=[
+ ('password', models.CharField(max_length=128, verbose_name='password')),
+ ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')),
+ ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')),
+ ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')),
+ ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')),
+ ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')),
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('username', models.CharField(help_text='The username of the user', max_length=30, unique=True, verbose_name='username')),
+ ('avatar', models.ImageField(blank=True, help_text='The avatar of the user', null=True, storage=users.models.users.AvatarStorage(), upload_to=users.models.users.avatar_upload_to, verbose_name='avatar')),
+ ('signature', models.CharField(blank=True, default='This player is somewhat mysterious...', help_text='The signature of the user', max_length=60, verbose_name='signature')),
+ ('is_moderator', models.BooleanField(default=False, help_text='Whether the user is a moderator', verbose_name='moderator status')),
+ ('is_email_verified', models.BooleanField(default=False, editable=False, help_text='Whether at least an email of the user is verified', verbose_name='email verified')),
+ ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.group', verbose_name='groups')),
+ ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.permission', verbose_name='user permissions')),
+ ],
+ options={
+ 'verbose_name': 'user',
+ 'verbose_name_plural': 'users',
+ },
+ managers=[
+ ('objects', users.models.users.ProfileManager()),
+ ],
+ ),
+ migrations.CreateModel(
+ name='UserSession',
+ fields=[
+ ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('session_key', models.CharField(help_text="The session's session key", max_length=40, unique=True, verbose_name='session key')),
+ ('user_agent', models.TextField(blank=True, help_text="The session's user agent", null=True, verbose_name='user agent')),
+ ('browser', models.CharField(blank=True, help_text="The session's browser", max_length=100, null=True, verbose_name='browser')),
+ ('os', models.CharField(blank=True, help_text="The session's operating system", max_length=100, null=True, verbose_name='operating system')),
+ ('device', models.CharField(blank=True, help_text="The session's device", max_length=100, null=True, verbose_name='device')),
+ ('ip_address', models.GenericIPAddressField(blank=True, help_text="The session's IP address", null=True, verbose_name='IP address')),
+ ('last_accessed_at', models.DateField(help_text="The session's last accessed Date", verbose_name='last accessed at')),
+ ('user', models.ForeignKey(help_text='The user of the session', on_delete=django.db.models.deletion.CASCADE, related_name='user_sessions', to=settings.AUTH_USER_MODEL, verbose_name='user')),
+ ],
+ options={
+ 'verbose_name': 'user session',
+ 'verbose_name_plural': 'user sessions',
+ 'ordering': ['-created_at'],
+ },
+ ),
+ migrations.CreateModel(
+ name='EmailAddress',
+ fields=[
+ ('created_at', models.DateTimeField(auto_now_add=True, db_index=True, help_text='The created DateTime of the object', verbose_name='created at')),
+ ('id', models.UUIDField(default=uuid.uuid4, editable=False, help_text='The UUID of the object', primary_key=True, serialize=False, verbose_name='ID')),
+ ('email', models.EmailField(help_text='The email of the email address', max_length=254, unique=True, verbose_name='email')),
+ ('is_verified', models.BooleanField(default=False, help_text='Whether the email is verified', verbose_name='verified')),
+ ('is_primary', models.BooleanField(default=False, help_text='Whether the email is the primary email of the user', verbose_name='primary')),
+ ('user', models.ForeignKey(help_text='The user of the email address', on_delete=django.db.models.deletion.CASCADE, related_name='related_emails', to=settings.AUTH_USER_MODEL, verbose_name='user')),
+ ],
+ options={
+ 'verbose_name': 'email',
+ 'verbose_name_plural': 'emails',
+ 'constraints': [models.UniqueConstraint(condition=models.Q(('is_primary', True)), fields=('user',), name='unique_user_primary_emails')],
+ },
+ ),
+ ]
diff --git a/apps/backend/uv.lock b/apps/backend/uv.lock
index 567d7db0..95dd93b1 100644
--- a/apps/backend/uv.lock
+++ b/apps/backend/uv.lock
@@ -17,6 +17,7 @@ dependencies = [
{ name = "environs" },
{ name = "gunicorn" },
{ name = "pillow" },
+ { name = "psycopg", extra = ["binary"] },
{ name = "requests" },
{ name = "user-agents" },
]
@@ -38,6 +39,7 @@ requires-dist = [
{ name = "environs", specifier = ">=15.0.1" },
{ name = "gunicorn", specifier = ">=25.3.0" },
{ name = "pillow", specifier = ">=12.2.0" },
+ { name = "psycopg", extras = ["binary"], specifier = ">=3.3.2" },
{ name = "requests", specifier = ">=2.33.1" },
{ name = "user-agents", specifier = ">=2.2.0" },
]
@@ -417,6 +419,41 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ff/6e/cf826fae916b8658848d7b9f38d88da6396895c676e8086fc0988073aaf8/pillow-12.2.0-cp314-cp314t-win_arm64.whl", hash = "sha256:aa88ccfe4e32d362816319ed727a004423aab09c5cea43c01a4b435643fa34eb", size = 2556579, upload-time = "2026-04-01T14:45:52.529Z" },
]
+[[package]]
+name = "psycopg"
+version = "3.3.4"
+source = { registry = "https://pypi.org/simple" }
+dependencies = [
+ { name = "tzdata", marker = "sys_platform == 'win32'" },
+]
+sdist = { url = "https://files.pythonhosted.org/packages/db/2f/cb91e5502ec9de1de6f1b76cfbf69531932725361168bb06963620c77e2e/psycopg-3.3.4.tar.gz", hash = "sha256:e21207764952cff81b6b8bdacad9a3939f2793367fdac2987b3aac36a651b5bc", size = 165799, upload-time = "2026-05-01T23:31:55.179Z" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/5c/e0/7b3dee031daae7743609ce3c746565d4a3ed7c2c186479eb48e34e838c64/psycopg-3.3.4-py3-none-any.whl", hash = "sha256:b6bbc25ccf05c8fad3b061d9db2ef0909a555171b84b07f29458a447253d679a", size = 213001, upload-time = "2026-05-01T23:20:50.816Z" },
+]
+
+[package.optional-dependencies]
+binary = [
+ { name = "psycopg-binary", marker = "implementation_name != 'pypy'" },
+]
+
+[[package]]
+name = "psycopg-binary"
+version = "3.3.4"
+source = { registry = "https://pypi.org/simple" }
+wheels = [
+ { url = "https://files.pythonhosted.org/packages/48/a6/828c9185701dab71b234c2a76c38a08b098ebfec5020716b4e93807492b5/psycopg_binary-3.3.4-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:28b7398fdd19db3232c884fb24550bdfe951221f510e195e233299e4c9b78f97", size = 4607292, upload-time = "2026-05-01T23:30:38.962Z" },
+ { url = "https://files.pythonhosted.org/packages/92/58/5b40dbc9d839045c9dae956960e4fb6d20bcabe6c59a2aa34fc3a371913f/psycopg_binary-3.3.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:1fbaa292a3c8bb61b45df1ad3da1908ccee7cb889db9425e3557d9e34e2a4829", size = 4687023, upload-time = "2026-05-01T23:30:47.227Z" },
+ { url = "https://files.pythonhosted.org/packages/85/a9/793f0ac107a9003b48441d0d1f9f616d96e0f37458dd8dc12528ceff55fb/psycopg_binary-3.3.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94596f9e7633ee3f6440711d43bb70aa31cc0a46a900ab8b4201a366ace5c9e7", size = 5486985, upload-time = "2026-05-01T23:30:55.517Z" },
+ { url = "https://files.pythonhosted.org/packages/8f/26/42e8533497e2592334f68ec529cf5f840f7fa4e99575a4bb61aa184dbfbf/psycopg_binary-3.3.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8c0056529e68dbe9184cd4019a1f3d8f3a4ead2f6fc7a5afcf27d3314edd1277", size = 5168745, upload-time = "2026-05-01T23:31:01.904Z" },
+ { url = "https://files.pythonhosted.org/packages/15/af/b7151776cc08d5935d45c833ec818a9beb417cf7c08239af1aafbdae78ee/psycopg_binary-3.3.4-cp314-cp314-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c09aad7051326e7603c14e50636db9c01f78272dc54b3accff03d46370461e6", size = 6761486, upload-time = "2026-05-01T23:31:14.511Z" },
+ { url = "https://files.pythonhosted.org/packages/d0/ed/c92533b9124712d592cbf1cd6c76da933a2e0acea81dfe1fbe7e735f0cff/psycopg_binary-3.3.4-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:514404ed543efd620c85602b747df2a23cf1241b4067199e1a66f2d2757aaa41", size = 4997427, upload-time = "2026-05-01T23:31:20.901Z" },
+ { url = "https://files.pythonhosted.org/packages/a2/23/ccadfd0de416aa188356daa199453af24087b042e296088706d190ae0295/psycopg_binary-3.3.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:46893c26858be12cc49ca4226ed6a60b4bfccadd946b3bebb783a60b38788228", size = 4533549, upload-time = "2026-05-01T23:31:26.204Z" },
+ { url = "https://files.pythonhosted.org/packages/fd/a0/c8f43cee36386f7bc891ab41a9d31ea07cf9826038e732da79f26b1e5f34/psycopg_binary-3.3.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:df1d567fc430f6df15c9fcf67d87685fc49bdb325adc0db5af1adfb2f44eb5c9", size = 4210256, upload-time = "2026-05-01T23:31:33.884Z" },
+ { url = "https://files.pythonhosted.org/packages/4e/2c/c1547871be3790676e8868b38655496422f94f0978dfb66b74bdba2f1676/psycopg_binary-3.3.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:6b9016b1714da4dd5ecaaa75b82098aa5a0b87854ce9b092e21c27c4ae23e014", size = 3946204, upload-time = "2026-05-01T23:31:39.626Z" },
+ { url = "https://files.pythonhosted.org/packages/c4/b1/f6670f00fa7ea601584623f6c11602ab92117d83eaff885e0210f6de7418/psycopg_binary-3.3.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:47c656a8a7ba6eb0cff1801a4caaa9c8bdc12d03080e273aff1c8ac39971a77e", size = 4255811, upload-time = "2026-05-01T23:31:44.986Z" },
+ { url = "https://files.pythonhosted.org/packages/eb/e6/5fff07a70d1f945ed90ae131c3bd76cab32beff7c58c6db15ad5820b6d1f/psycopg_binary-3.3.4-cp314-cp314-win_amd64.whl", hash = "sha256:c37e024c07308cd06cf3ec51bfd0e7f6157585a4d84d1bce4a7f5f7913719bf8", size = 3666849, upload-time = "2026-05-01T23:31:51.165Z" },
+]
+
[[package]]
name = "python-dateutil"
version = "2.9.0.post0"
diff --git a/infra/compose/docker-compose.dev.yml b/infra/compose/docker-compose.dev.yml
index 396e815e..639eed15 100644
--- a/infra/compose/docker-compose.dev.yml
+++ b/infra/compose/docker-compose.dev.yml
@@ -32,6 +32,7 @@ services:
- redis
volumes:
- ../../apps/backend:/code
+ - /code/.venv
backend-api:
<<: *stack-env
@@ -46,6 +47,7 @@ services:
- alienmark
volumes:
- ../../apps/backend:/code
+ - /code/.venv
ports:
- "8000:8000"
@@ -63,6 +65,7 @@ services:
- postgres
volumes:
- ../../apps/backend:/code
+ - /code/.venv
backend-task-worker:
<<: *stack-env
@@ -78,6 +81,7 @@ services:
- postgres
volumes:
- ../../apps/backend:/code
+ - /code/.venv
frontend:
image: node:24
diff --git a/make/docker.mk b/make/docker.mk
index 2e8d62e9..8e35faa9 100644
--- a/make/docker.mk
+++ b/make/docker.mk
@@ -20,7 +20,7 @@ APP = backend-api backend-task-scheduler backend-task-worker frontend alienmark
.PHONY: dev-db-up dev-observe-up dev-up dev-down dev-down-v \
dev-backend-bash dev-backend-shell dev-backend-runserver \
dev-backend-makemigrations dev-backend-migrate dev-backend-createsuperuser \
- dev-backend-test dev-backend-check dev-backend-apidoc \
+ dev-backend-test dev-backend-check \
dev-backend-init-tasks dev-backend-runscheduler dev-backend-runrqworker \
stg-up stg-down stg-down-v stg-backend-api-bash stg-backend-api-log stg-frontend-log \
pro-up pro-down pro-backend-api-bash pro-backend-api-log pro-frontend-log \
@@ -69,9 +69,6 @@ dev-backend-test:
dev-backend-check:
$(DEV_MANAGE_NO_DEPS) check
-dev-backend-apidoc:
- $(DEV_COMPOSE) run --rm --no-deps -e DJANGO_SETTINGS_MODULE=backend.settings.test backend-api python manage.py spectacular --file openapi.yaml --validate
-
dev-backend-init-tasks:
$(DEV_MANAGE) init_tasks
From e163b63cac3fa8ce2252676caee4c2b6ed22deaa Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 2 May 2026 11:39:51 +1000
Subject: [PATCH 49/51] chore(backend): add AGENTS.md
---
apps/backend/AGENTS.md | 54 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 54 insertions(+)
create mode 100644 apps/backend/AGENTS.md
diff --git a/apps/backend/AGENTS.md b/apps/backend/AGENTS.md
new file mode 100644
index 00000000..d573a28c
--- /dev/null
+++ b/apps/backend/AGENTS.md
@@ -0,0 +1,54 @@
+# Backend Agent Guide
+
+This directory contains the Django backend for AlienCommons. Keep backend changes small, intentional, and consistent with the existing Django/DRF style.
+
+## Project Shape
+
+- `backend/` contains Django project settings, URL configuration, ASGI, and WSGI entrypoints.
+- `core/` contains shared response formatting, exception handling, pagination, viewset mixins, validators, middleware, and utility code.
+- `users/`, `articles/`, `tasks/`, and `logs/` are Django apps with their own models, services, views, serializers, admin, migrations, and tests where applicable.
+- Runtime services include PostgreSQL, Redis/RQ task queues, Django sessions/cache, S3-backed media in staging/production, and the internal AlienMark rendering service.
+- Tests live next to the app they cover under each app's `tests/` package.
+
+## Working Rules
+
+- Read nearby models, serializers, services, permissions, views, and tests before changing behavior.
+- Preserve the existing service-layer pattern: keep business workflow logic out of views when there is already a service module for that domain.
+- Use the local formatted response and exception handling utilities instead of returning ad hoc DRF responses from API views.
+- Keep authentication, permission, session, email verification, article workflow, scheduler, and storage changes especially conservative; these are cross-cutting surfaces.
+- Do not put secrets, access keys, bucket names that should be environment-specific, or local environment values into source files.
+- Prefer environment variables for deployment-specific settings. EC2/ECS IAM roles should provide AWS credentials where possible; do not add static AWS keys to settings.
+- Treat migrations as part of model changes. Add focused migrations when models change, and avoid editing existing applied migrations unless the project is still deliberately rewriting history.
+- Keep generated/static/media artifacts out of code changes unless the task is explicitly about those assets.
+
+## Verification
+
+- Use the smallest relevant checks for the change.
+- For normal backend behavior changes, prefer:
+
+ ```bash
+ uv run python manage.py test
+ ```
+
+- For lint-sensitive changes, prefer:
+
+ ```bash
+ uv run ruff check articles backend core logs tasks users manage.py
+ ```
+
+- If local dependencies or services make a check impossible, say exactly what was not run and why.
+- After any backend change, inspect the backend GitHub workflows under `.github/workflows/` and decide whether they need updates. In particular, check backend lint, backend tests, and backend API docs workflows when dependencies, commands, settings modules, app names, generated schema behavior, or verification steps change.
+
+## Settings And Environments
+
+- `backend.settings.base` is the shared production-like foundation.
+- `backend.settings.dev`, `backend.settings.stg`, and `backend.settings.pro` layer deployment-specific behavior on top of base.
+- `backend.settings.test` is intentionally independent and should remain fast, deterministic, and isolated from PostgreSQL, Redis, S3, and external services unless a test explicitly opts into an integration path.
+- Be careful when touching storage settings: static files and media files have different lifecycles. Static files are deploy artifacts; media files are user/runtime data.
+
+## API And Data Contracts
+
+- Keep API responses wrapped in the project-standard envelope with `success`, `message`, `code`, `data`, `errors`, and `meta`.
+- Keep serializer validation errors and service-layer errors compatible with the custom exception handler.
+- Preserve existing URL naming and router conventions unless the change explicitly requires a versioned API contract change.
+- Add or update tests when behavior, permissions, workflow state transitions, task scheduling, storage behavior, or API contracts change.
From 2cbfaf8939ab83961f49db1ce58b3fcbe0a5d5c7 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 2 May 2026 11:56:34 +1000
Subject: [PATCH 50/51] fix: fix workflow and uv files after failed github
actions
---
.github/workflows/alienmark-ci.yml | 6 ++++
.github/workflows/backend-api-docs.yml | 48 --------------------------
.github/workflows/backend-tests.yml | 2 +-
docs/contributors/uv.lock | 2 +-
docs/users/uv.lock | 34 +++++++++---------
5 files changed, 25 insertions(+), 67 deletions(-)
delete mode 100644 .github/workflows/backend-api-docs.yml
diff --git a/.github/workflows/alienmark-ci.yml b/.github/workflows/alienmark-ci.yml
index e390a77d..d7ab2acf 100644
--- a/.github/workflows/alienmark-ci.yml
+++ b/.github/workflows/alienmark-ci.yml
@@ -22,6 +22,12 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4
+ - name: Set up pnpm
+ uses: pnpm/action-setup@v4
+ with:
+ version: 10.33.0
+ run_install: false
+
- name: Set up Node.js
uses: actions/setup-node@v4
with:
diff --git a/.github/workflows/backend-api-docs.yml b/.github/workflows/backend-api-docs.yml
deleted file mode 100644
index 7d25f264..00000000
--- a/.github/workflows/backend-api-docs.yml
+++ /dev/null
@@ -1,48 +0,0 @@
-name: "Backend: API Docs"
-
-on:
- push:
- branches:
- - main
- paths:
- - "apps/backend/**"
- - ".github/workflows/backend-api-docs.yml"
-
-permissions:
- contents: read
-
-jobs:
- generate-openapi:
- runs-on: ubuntu-latest
-
- defaults:
- run:
- working-directory: apps/backend
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
-
- - name: Set up Python
- uses: actions/setup-python@v5
- with:
- python-version: "3.14"
-
- - name: Install uv
- uses: astral-sh/setup-uv@v7
- with:
- enable-cache: true
-
- - name: Install backend dependencies
- run: uv sync --locked --dev
-
- - name: Generate OpenAPI schema
- env:
- DJANGO_ENV: test
- run: uv run python manage.py spectacular --file openapi.yaml --validate
-
- - name: Upload OpenAPI schema artifact
- uses: actions/upload-artifact@v4
- with:
- name: backend-openapi-schema
- path: apps/backend/openapi.yaml
diff --git a/.github/workflows/backend-tests.yml b/.github/workflows/backend-tests.yml
index 0db125c9..db9a3367 100644
--- a/.github/workflows/backend-tests.yml
+++ b/.github/workflows/backend-tests.yml
@@ -36,5 +36,5 @@ jobs:
- name: Run Backend tests
env:
- DJANGO_ENV: test
+ DJANGO_SETTINGS_MODULE: backend.settings.test
run: uv run python manage.py test
diff --git a/docs/contributors/uv.lock b/docs/contributors/uv.lock
index 4d86cc4c..e744aa5d 100644
--- a/docs/contributors/uv.lock
+++ b/docs/contributors/uv.lock
@@ -3,7 +3,7 @@ revision = 3
requires-python = ">=3.14"
[[package]]
-name = "alien-commons-contributors-docs"
+name = "alien-commons-contributor-docs"
version = "0.0.1"
source = { virtual = "." }
dependencies = [
diff --git a/docs/users/uv.lock b/docs/users/uv.lock
index ec43b480..28980e66 100644
--- a/docs/users/uv.lock
+++ b/docs/users/uv.lock
@@ -2,6 +2,23 @@ version = 1
revision = 3
requires-python = ">=3.14"
+[[package]]
+name = "alien-commons-user-guide"
+version = "0.1.0"
+source = { virtual = "." }
+dependencies = [
+ { name = "mkdocs" },
+ { name = "mkdocs-material" },
+ { name = "mkdocs-static-i18n" },
+]
+
+[package.metadata]
+requires-dist = [
+ { name = "mkdocs", specifier = ">=1.6.1" },
+ { name = "mkdocs-material", specifier = ">=9.7.6" },
+ { name = "mkdocs-static-i18n", specifier = ">=1.3.1" },
+]
+
[[package]]
name = "babel"
version = "2.18.0"
@@ -399,23 +416,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" },
]
-[[package]]
-name = "users"
-version = "0.1.0"
-source = { virtual = "." }
-dependencies = [
- { name = "mkdocs" },
- { name = "mkdocs-material" },
- { name = "mkdocs-static-i18n" },
-]
-
-[package.metadata]
-requires-dist = [
- { name = "mkdocs", specifier = ">=1.6.1" },
- { name = "mkdocs-material", specifier = ">=9.7.6" },
- { name = "mkdocs-static-i18n", specifier = ">=1.3.1" },
-]
-
[[package]]
name = "watchdog"
version = "6.0.0"
From 5715da3ceb69f40da8b1e0be13580a454cf813d8 Mon Sep 17 00:00:00 2001
From: Typogalaxy <136544101+Typogalaxy@users.noreply.github.com>
Date: Sat, 2 May 2026 11:58:27 +1000
Subject: [PATCH 51/51] fix alienmark-ci pnpm setting
---
.github/workflows/alienmark-ci.yml | 1 -
1 file changed, 1 deletion(-)
diff --git a/.github/workflows/alienmark-ci.yml b/.github/workflows/alienmark-ci.yml
index d7ab2acf..829cb1ac 100644
--- a/.github/workflows/alienmark-ci.yml
+++ b/.github/workflows/alienmark-ci.yml
@@ -25,7 +25,6 @@ jobs:
- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
- version: 10.33.0
run_install: false
- name: Set up Node.js