SPB Git

spb/spbgit Public MIT

SPB Git — the platform hosting itself

JavaScript 73.9% CSS 11.7% Nunjucks 11.6% Shell 2.7%

chore: project skeleton — config, lint, header tooling, fonts

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Simon-Pierre Boucher committed yesterday (Aug 10, 2026)

Showing 10 changed files with +6,934 and −0

added .env.example +38 −0
@@ -0,0 +1,38 @@
1 +# ─────────────────────────────────────────────
2 +# SPB Git — Personal Git Platform
3 +# ─────────────────────────────────────────────
4 +# Author : Simon-Pierre Boucher
5 +# Contact : contact@spboucher.ai
6 +# File : .env.example
7 +# Purpose : Example environment configuration (copy to .env)
8 +# License : MIT © Simon-Pierre Boucher
9 +# ─────────────────────────────────────────────
10 +
11 +# Port the Fastify server listens on (ngrok upstreams to this)
12 +SPBGIT_PORT=7420
13 +
14 +# Bind address — keep loopback, ngrok terminates TLS in front
15 +SPBGIT_HOST=127.0.0.1
16 +
17 +# Public origin used for canonical URLs, OG cards, feeds, clone URLs
18 +SPBGIT_PUBLIC_URL=https://git.spboucher.ai
19 +
20 +# Where bare repositories live (source of truth)
21 +SPBGIT_GIT_ROOT=/srv/git
22 +
23 +# Metadata (meta.json, tokens.json, activity.jsonl)
24 +SPBGIT_DATA_DIR=/srv/spbgit/data
25 +
26 +# Rendered HTML, language stats, archives, OG images
27 +SPBGIT_CACHE_DIR=/srv/spbgit/cache
28 +
29 +# pino log level: trace | debug | info | warn | error
30 +SPBGIT_LOG_LEVEL=info
31 +
32 +# development enables template reload + pretty errors
33 +SPBGIT_ENV=production
34 +
35 +# For local development, use project-relative dirs instead:
36 +# SPBGIT_GIT_ROOT=./dev/git
37 +# SPBGIT_DATA_DIR=./dev/data
38 +# SPBGIT_CACHE_DIR=./dev/cache
added .gitignore +22 −0
@@ -0,0 +1,22 @@
1 +# ─────────────────────────────────────────────
2 +# SPB Git — Personal Git Platform
3 +# ─────────────────────────────────────────────
4 +# Author : Simon-Pierre Boucher
5 +# Contact : contact@spboucher.ai
6 +# File : .gitignore
7 +# Purpose : Git ignore rules for the SPB Git project
8 +# License : MIT © Simon-Pierre Boucher
9 +# ─────────────────────────────────────────────
10 +
11 +node_modules/
12 +dev/
13 +dist/
14 +coverage/
15 +logs/
16 +*.log
17 +.env
18 +.env.local
19 +.DS_Store
20 +src/web/assets/fonts/*.woff2
21 +src/web/assets/fonts/*.woff
22 +src/web/assets/fonts/*.ttf
added CLAUDE.md +395 −0
@@ -0,0 +1,395 @@
1 +# CLAUDE.md — **SPB Git** · Personal Git Platform for Simon-Pierre Boucher
2 +
3 +> **Read this entire document before writing a single line of code.**
4 +> This file is the single source of truth for the project. Every architectural decision, naming convention, UI detail, and non-negotiable rule lives here. When in doubt, re-read this file. When this file conflicts with your instinct, this file wins.
5 +
6 +---
7 +
8 +## 0. Identity & Non-Negotiables
9 +
10 +| Key | Value |
11 +|---|---|
12 +| **Product name** | SPB Git |
13 +| **Owner / sole user** | Simon-Pierre Boucher |
14 +| **Contact** | [contact@spboucher.ai](mailto:contact@spboucher.ai) |
15 +| **Public domain** | `https://git.spboucher.ai` (ngrok custom domain) |
16 +| **Deployment host** | Node **m3u96a** |
17 +| **Runtime** | Node.js ≥ 20, ESM only |
18 +| **Visibility model** | **ALL repositories are PUBLIC (read-only)**. Write access = owner only. No sign-up, no visitor accounts, ever. |
19 +
20 +### 0.1 THE GOLDEN RULE — Mandatory Author Header
21 +
22 +**Every single file you generate — source, config, script, style, test, docs tooling — MUST begin with an author header.** No exceptions. A file without this header is a bug.
23 +
24 +Canonical template (adapt comment syntax per language):
25 +
26 +```js
27 +/**
28 + * ─────────────────────────────────────────────
29 + * SPB Git — Personal Git Platform
30 + * ─────────────────────────────────────────────
31 + * Author : Simon-Pierre Boucher
32 + * Contact : contact@spboucher.ai
33 + * File : <relative/path/filename.ext>
34 + * Purpose : <one-line description>
35 + * License : MIT © Simon-Pierre Boucher
36 + * ─────────────────────────────────────────────
37 + */
38 +```
39 +
40 +Per-language syntax:
41 +
42 +| Language | Syntax |
43 +|---|---|
44 +| JS / TS / CSS / SCSS | `/** ... */` block |
45 +| Python / Bash / YAML / Dockerfile / TOML | `#` lines |
46 +| HTML / Vue / Markdown (when appropriate) | `<!-- ... -->` |
47 +| SQL | `-- ` lines |
48 +| EJS / Nunjucks templates | `<%# ... %>` / `{# ... #}` |
49 +
50 +Additionally, the server itself must **inject/verify** this header: a lint script `npm run check:headers` fails CI if any tracked file in *this* project lacks the header. Provide `scripts/inject-headers.mjs` to add headers in bulk.
51 +
52 +---
53 +
54 +## 1. Product Vision
55 +
56 +SPB Git is not a toy. It is a **polished, self-hosted software forge** — the personal equivalent of GitHub — that serves three purposes:
57 +
58 +1. **Canonical home** for all of Simon-Pierre's repositories, clonable by anyone at `https://git.spboucher.ai/<repo>.git`.
59 +2. **Public showcase / portfolio**: every repo page must look as good as (or better than) a GitHub repo page — rendered README with badges, syntax-highlighted code browsing, commit graphs, language stats.
60 +3. **Frictionless daily driver**: a powerful CLI (`spbgit`) that manages *all* repos from the terminal — create, commit, push, sync, open — in single commands.
61 +
62 +The bar for quality is: *"If a stranger lands on git.spboucher.ai, they should assume a small team built this."*
63 +
64 +---
65 +
66 +## 2. High-Level Architecture
67 +
68 +```
69 +┌──────────────────────────── node m3u96a ────────────────────────────┐
70 +│ │
71 +│ ┌─────────────┐ ┌───────────────────────────────────────────────┐ │
72 +│ │ ngrok │ │ SPB Git Server (Node 20) │ │
73 +│ │ tunnel │──▶│ Fastify app :7420 │ │
74 +│ │ git.spboucher│ │ ├─ / Web UI (SSR, Nunjucks) │ │
75 +│ │ .ai │ │ ├─ /api/v1/* JSON API │ │
76 +│ └─────────────┘ │ ├─ /:repo.git/* Git Smart HTTP (backend) │ │
77 +│ │ ├─ /raw/* Raw file serving │ │
78 +│ │ └─ /archive/* zip/tar.gz snapshots │ │
79 +│ └───────────────┬───────────────────────────────┘ │
80 +│ │ │
81 +│ ┌──────────────────────────┼───────────────────────────┐ │
82 +│ │ │ │ │
83 +│ ┌──────▼──────┐ ┌────────────────▼─────────┐ ┌──────────────▼───┐ │
84 +│ │ /srv/git/ │ │ /srv/spbgit/data/ │ │ /srv/spbgit/ │ │
85 +│ │ *.git │ │ meta.json (repo index) │ │ cache/ │ │
86 +│ │ bare repos │ │ tokens, hooks, stats │ │ rendered HTML, │ │
87 +│ │ (source of │ │ │ │ lang stats, zips │ │
88 +│ │ truth) │ │ │ │ │ │
89 +│ └─────────────┘ └──────────────────────────┘ └──────────────────┘ │
90 +└───────────────────────────────────────────────────────────────────────┘
91 +```
92 +
93 +**Principles:**
94 +- **Filesystem is the database.** Bare Git repos under `/srv/git/` are the source of truth. A single `meta.json` holds per-repo metadata (description, topics, pinned, homepage, created date). No SQL/NoSQL database.
95 +- **Cache aggressively, invalidate on push.** Rendered READMEs, language stats, commit counts, and archives are cached in `/srv/spbgit/cache/` keyed by `<repo>@<commit-sha>`; a post-receive hook busts the cache.
96 +- **SSR-first web UI.** Server-rendered pages (Nunjucks templates + a small vanilla JS layer). No SPA framework. Fast, crawlable, sharp.
97 +
98 +### 2.1 Repository Layout of *this* project
99 +
100 +```
101 +spbgit/
102 +├── CLAUDE.md # this file
103 +├── README.md # project readme (with badges, of course)
104 +├── package.json
105 +├── src/
106 +│ ├── server.mjs # Fastify bootstrap
107 +│ ├── config.mjs # env + config loading (zod-validated)
108 +│ ├── git/
109 +│ │ ├── smart-http.mjs # upload-pack / receive-pack over HTTP
110 +│ │ ├── repo.mjs # repo model: branches, tree, blob, log, blame
111 +│ │ ├── hooks.mjs # post-receive hook installer + handlers
112 +│ │ └── archive.mjs # zip / tar.gz snapshot generation
113 +│ ├── auth/
114 +│ │ └── token.mjs # owner PAT verification (argon2-hashed)
115 +│ ├── render/
116 +│ │ ├── markdown.mjs # GFM pipeline (markdown-it + plugins)
117 +│ │ ├── highlight.mjs # code highlighting (shiki)
118 +│ │ └── og-image.mjs # dynamic Open Graph card per repo (satori/resvg)
119 +│ ├── api/
120 +│ │ └── v1.mjs # JSON API routes
121 +│ ├── web/
122 +│ │ ├── routes.mjs # HTML routes
123 +│ │ ├── views/ # Nunjucks templates
124 +│ │ └── assets/ # css (hand-written, design tokens), js, fonts, logo
125 +│ └── stats/
126 +│ ├── languages.mjs # linguist-style language detection + percentages
127 +│ └── activity.mjs # commit calendar / punch-card data
128 +├── cli/
129 +│ ├── spbgit.mjs # entry point (bin)
130 +│ └── commands/ # one file per command
131 +├── deploy/
132 +│ ├── ngrok.yml
133 +│ ├── ecosystem.config.cjs # pm2: server + ngrok, autorestart
134 +│ ├── spbgit.service # systemd alternative
135 +│ ├── setup-m3u96a.sh # idempotent server bootstrap script
136 +│ └── backup.sh # nightly tar of /srv/git + meta.json
137 +├── scripts/
138 +│ ├── inject-headers.mjs
139 +│ └── check-headers.mjs
140 +└── test/ # vitest: unit + integration (smart HTTP round-trip)
141 +```
142 +
143 +---
144 +
145 +## 3. Git Hosting Engine
146 +
147 +### 3.1 Smart HTTP protocol
148 +
149 +- Implement Git Smart HTTP v2 by spawning `git upload-pack` / `git receive-pack` (via `git http-backend` or direct spawn with proper pkt-line streaming — **stream, never buffer** packfiles).
150 +- Routes:
151 + - `GET /:repo.git/info/refs?service=git-upload-pack` → public (clone/fetch/pull).
152 + - `POST /:repo.git/git-upload-pack` → public.
153 + - `GET /:repo.git/info/refs?service=git-receive-pack`**auth required**.
154 + - `POST /:repo.git/git-receive-pack`**auth required** (push).
155 +- Auth for push: HTTP Basic where username = `spb` and password = a **Personal Access Token**. Tokens are generated by `spbgit token new`, stored argon2-hashed in `data/tokens.json`, revocable, with a label and last-used timestamp.
156 +- Set correct `Content-Type`, chunked encoding, gzip request body support (`Content-Encoding: gzip` from git clients), and side-band progress passthrough.
157 +- Repo names: `^[a-z0-9][a-z0-9._-]{0,63}$`. Reject path traversal hard.
158 +
159 +### 3.2 Post-receive hooks (installed automatically in every bare repo)
160 +
161 +On every push, the hook POSTs to `http://127.0.0.1:7420/internal/hooks/post-receive` (localhost-only route) which:
162 +1. Busts all caches for that repo.
163 +2. Recomputes language stats + default-branch README render (warm cache).
164 +3. Appends an event to the **activity feed** (`data/activity.jsonl`).
165 +4. Regenerates the repo's OG image.
166 +
167 +### 3.3 Repo lifecycle
168 +
169 +- `POST /api/v1/repos` (auth) → `git init --bare`, install hooks, write `meta.json` entry, set `HEAD` to `refs/heads/main`.
170 +- `PATCH /api/v1/repos/:name` (auth) → description, topics (max 10), homepage URL, pinned flag, default branch.
171 +- `DELETE /api/v1/repos/:name` (auth) → moves repo to `/srv/git/.trash/<name>-<timestamp>.git` (soft delete, recoverable for 30 days).
172 +- Everything is public: there is **no** `private` field anywhere in the codebase. Don't build one.
173 +
174 +---
175 +
176 +## 4. Web UI — "It must look sharp" (Design Spec)
177 +
178 +### 4.1 Design system
179 +
180 +- **Aesthetic:** modern developer-forge. Dark theme by default, light theme toggle (persisted in `localStorage`, respects `prefers-color-scheme` on first visit).
181 +- **Design tokens** (CSS custom properties in `assets/css/tokens.css`):
182 + - Dark: background `#0b0e14`, surface `#11151c`, border `#1f2530`, text `#e6e9ef`, muted `#8b93a3`, accent `#4f8cff`, accent-2 `#22d3aa`, danger `#ff5d5d`.
183 + - Radius `10px`, subtle 1px borders, no heavy shadows; hover states elevate with border-color shifts, not box-shadows.
184 +- **Typography:** `Inter` (UI) + `JetBrains Mono` (code), self-hosted woff2 in `assets/fonts/` — no third-party font CDNs.
185 +- **Layout:** max-width `1200px`, sticky top nav: logo "**SPB Git**" (monogram SVG), global search input (`/` focuses it), theme toggle, link to `spboucher.ai`.
186 +- Fully responsive down to 360px. Code views scroll horizontally, never break the page.
187 +- Footer on every page: `© Simon-Pierre Boucher · contact@spboucher.ai · Powered by SPB Git`.
188 +
189 +### 4.2 Pages
190 +
191 +**`/` — Home / repo index**
192 +- Hero strip: avatar/monogram, "Simon-Pierre Boucher", tagline, contact link, count badges (X repos · Y commits · Z languages).
193 +- **Pinned repos** grid (up to 6 cards) then full repo list.
194 +- Repo card: name, description, top language with colored dot (GitHub linguist colors), star-like "clone count" if tracked, last-pushed relative time ("3 h ago"), topic chips.
195 +- Controls: search-as-you-type filter, sort by *Recently pushed / Name / Created*, filter by language and topic.
196 +- **Activity feed** sidebar: last 15 pushes ("pushed 3 commits to `api-tools` · 2 h ago").
197 +- **Commit calendar** (GitHub-style contribution heatmap, last 52 weeks, SVG, tooltip per day).
198 +
199 +**`/:repo` — Repo home**
200 +- Header: repo name (breadcrumb `spb / name`), description, topic chips, homepage link, language bar (stacked percentage bar like GitHub, with legend).
201 +- **Clone box**: HTTPS URL with copy button + `spbgit clone <name>` snippet + "Download ZIP".
202 +- Meta row: default branch selector, branch/tag counts, commit count, repo size, license badge (auto-detected from `LICENSE`).
203 +- File table for the current tree: icon, name, last commit message touching that path, relative date (computed efficiently via a single `git log` walk, cached).
204 +- **README.md rendered below the file table.** See §5 — this must be pixel-perfect.
205 +
206 +**`/:repo/tree/:ref/*path`** — directory browsing (same file table pattern).
207 +
208 +**`/:repo/blob/:ref/*path`** — file view:
209 +- Sticky header: path breadcrumb, size, LOC, buttons: **Raw**, **Blame**, **History**, **Copy permalink** (permalink pins the commit SHA).
210 +- Shiki-highlighted code with line numbers; clickable line anchors (`#L42`, ranges `#L10-L20` with highlight).
211 +- Markdown files render as HTML by default with a "View source" toggle. Images display inline. Jupyter notebooks: at minimum render as pretty JSON with a note (nice-to-have: nbconvert-style render).
212 +- Binary files: show size + download button; images/SVG preview inline.
213 +
214 +**`/:repo/commits/:ref`** — paginated history (40/page): avatar-less but with identicon per author email, message (first line, expandable body), short SHA chip (copy on click), relative + absolute date, files-changed count.
215 +
216 +**`/:repo/commit/:sha`** — full diff view: per-file collapsible diffs, syntax-highlighted, green/red gutters, stats header (+X −Y across N files), rename/binary detection.
217 +
218 +**`/:repo/blame/:ref/*path`** — blame view with commit hunks grouped and color-aged (newer = brighter accent).
219 +
220 +**`/:repo/branches`, `/:repo/tags`** — lists with ahead/behind counts vs default branch (branches) and archive download links (tags → releases-lite).
221 +
222 +**`/search?q=`** — global search across repo names, descriptions, topics, and README content (build a tiny inverted index in cache; refresh on push). Grouped results.
223 +
224 +**Error pages** — custom 404/500 with the design system (404: "This ref does not exist in any timeline.").
225 +
226 +### 4.3 Meta / polish
227 +
228 +- Every page: proper `<title>`, meta description, canonical URL, **Open Graph + Twitter card** with the dynamically generated per-repo OG image (repo name, description, language bar — generated with satori → resvg, cached).
229 +- `sitemap.xml` + `robots.txt` + RSS/Atom feed of activity at `/feed.atom`.
230 +- Favicon set (SVG + PNG) with the SPB monogram.
231 +- Lighthouse targets: Performance ≥ 95, A11y ≥ 95. No render-blocking third-party requests at all.
232 +
233 +---
234 +
235 +## 5. README & Markdown Rendering — Badge-Perfect (Critical)
236 +
237 +This is a flagship feature. The rendered README **must be indistinguishable from GitHub's rendering quality**.
238 +
239 +Pipeline (`src/render/markdown.mjs`), built on `markdown-it` +:
240 +- **GFM tables**, **task lists** (rendered checkboxes, disabled), **strikethrough**, **autolinks**, **footnotes**.
241 +- **Heading anchors** with hover link icon; auto-generated slug IDs (GitHub algorithm) so `#installation` links work.
242 +- **Syntax highlighting** in fenced blocks via **shiki** (same themes as file view; dual dark/light output via CSS variables). Support ` ```mermaid ` blocks → render client-side with mermaid.js (lazy-loaded only when present).
243 +- **Badges & images:**
244 + - Badges (`img.shields.io`, etc.) must render **inline, on one line, correctly sized** — CSS: `img[src*="shields.io"], img[height] { display: inline-block; vertical-align: middle; }` and consecutive badge images separated by single spaces must not wrap awkwardly.
245 + - **Relative image paths resolve to the raw endpoint**: `./docs/demo.png``/raw/:repo/:ref/docs/demo.png`. Same for relative links → blob URLs. This is mandatory; broken relative images are a failing grade.
246 + - `<img>`/`<picture>`/`<details>`/`<summary>`/`<kbd>`/`<sup>`/`<sub>`/`align` attributes: allowed. Sanitize with a strict allowlist (DOMPurify-style via `sanitize-html`): no scripts, no event handlers, no iframes (except a curated allowlist: YouTube embeds off by default).
247 +- **HTML in Markdown** (centered headers, badge tables — the classic GitHub README style) must render correctly.
248 +- Emoji shortcodes (`:rocket:` → 🚀).
249 +- Look for `README.md` case-insensitively, then `readme.rst`/`README.txt` fallbacks (plain render).
250 +- Cache the rendered HTML per `(repo, sha, theme-agnostic)`.
251 +
252 +Typography of rendered Markdown mirrors GitHub's `.markdown-body`: 16px base, 1.6 line-height, bordered tables with zebra rows, blockquote left-border in muted accent, `code` chips with surface background, hr as 1px border.
253 +
254 +---
255 +
256 +## 6. `spbgit` CLI — Terminal Command Center
257 +
258 +A standalone Node CLI (`cli/spbgit.mjs`, exposed as `bin: { "spbgit": ... }`, installable via `npm i -g` from the repo or `npm link`). Zero heavy deps — use `commander` (or hand-rolled parser), `picocolors` for output, native `fetch`.
259 +
260 +### 6.1 Configuration
261 +
262 +`~/.spbgit/config.json`:
263 +```json
264 +{
265 + "server": "https://git.spboucher.ai",
266 + "token": "<PAT>",
267 + "workspace": "~/code",
268 + "author": { "name": "Simon-Pierre Boucher", "email": "contact@spboucher.ai" }
269 +}
270 +```
271 +- `spbgit init` — interactive setup wizard (server URL, token paste, workspace dir); sets `git config` user.name/email globally if missing; chmod 600 the config.
272 +- Token is **never** printed back, never logged, never in argv.
273 +
274 +### 6.2 Commands (full spec)
275 +
276 +| Command | Behavior |
277 +|---|---|
278 +| `spbgit init` | Setup wizard (above). |
279 +| `spbgit token new [--label "laptop"]` / `token list` / `token revoke <id>` | Manage PATs via API. |
280 +| `spbgit list` (`ls`) | Table of server repos: name, description, language, last push, clone-URL. `--json` for scripting. |
281 +| `spbgit create <name> [-d "desc"] [--topics a,b] [--push]` | Create on server; with `--push`, also init current dir, add remote `origin`, create initial commit, push. |
282 +| `spbgit clone <name> [dir]` | Clone into workspace (or dir). |
283 +| `spbgit clone --all` | Clone every server repo missing from the workspace. |
284 +| `spbgit status [name\|--all]` | Aggregated status across all workspace repos: branch, ahead/behind, dirty file count. One aligned, colorized row per repo; clean repos dimmed. |
285 +| `spbgit commit <name\|--all> -m "msg"` | `git add -A && git commit` in target repo(s). Skips clean repos with a note. |
286 +| `spbgit push [name\|--all]` | Push current branch; `--all` iterates every workspace repo with commits ahead. |
287 +| `spbgit pull [name\|--all]` | Pull with `--ff-only` by default; `--rebase` flag. |
288 +| `spbgit sync [-m "msg"]` | **The killer command**: for every workspace repo → add-all, commit (default msg `chore: sync YYYY-MM-DD HH:mm`), pull --rebase, push. Summary table at the end: ✓ synced / ↑ pushed n / ✗ conflict (with instructions). Never force-pushes. |
289 +| `spbgit open [name]` | Opens `https://git.spboucher.ai/<name>` (or home) in browser (`open`/`xdg-open`/`start`). |
290 +| `spbgit info <name>` | Server-side details: size, branches, commit count, topics, clone URL. |
291 +| `spbgit rm <name> --confirm` | Soft-delete on server (types the repo name to confirm, GitHub-style). |
292 +| `spbgit doctor` | Diagnoses: config present, token valid (API ping), server reachable, git installed, workspace exists. |
293 +
294 +### 6.3 CLI UX rules
295 +
296 +- Colorized, aligned output; respects `NO_COLOR` and `--json` everywhere.
297 +- Exit codes: 0 ok, 1 user error, 2 network/auth, 3 partial failure in `--all` operations.
298 +- All multi-repo operations run with a concurrency limit of 4 and stream per-repo progress lines.
299 +- Helpful errors: on 401 → "Token invalid or revoked. Run `spbgit token new` then `spbgit init`."
300 +
301 +---
302 +
303 +## 7. JSON API (`/api/v1`)
304 +
305 +Public reads, token-gated writes (`Authorization: Bearer <PAT>`).
306 +
307 +- `GET /api/v1/repos` · `GET /api/v1/repos/:name` · `GET /api/v1/repos/:name/languages` · `GET /api/v1/repos/:name/commits?ref&page`
308 +- `POST /api/v1/repos` · `PATCH /api/v1/repos/:name` · `DELETE /api/v1/repos/:name` (auth)
309 +- `POST /api/v1/tokens` · `GET /api/v1/tokens` · `DELETE /api/v1/tokens/:id` (auth; creation of the *first* token happens server-side via `deploy/setup` script printing a bootstrap token once)
310 +- `GET /api/v1/stats` — totals for the home hero.
311 +- Rate limit public endpoints (200 req/min/IP, `@fastify/rate-limit`), sane JSON error envelope `{ "error": { "code", "message" } }`.
312 +
313 +---
314 +
315 +## 8. Deployment — node m3u96a + ngrok + `git.spboucher.ai`
316 +
317 +### 8.1 `deploy/setup-m3u96a.sh` (idempotent)
318 +
319 +1. Install Node 20 (via nvm or distro), git, ngrok.
320 +2. Create dirs: `/srv/git`, `/srv/spbgit/{data,cache}`, correct ownership.
321 +3. Clone/pull this repo to `/srv/spbgit/app`, `npm ci --omit=dev`.
322 +4. Generate bootstrap PAT, print it **once** to stdout.
323 +5. Install pm2 config (or systemd unit) and start.
324 +
325 +### 8.2 ngrok (`deploy/ngrok.yml`)
326 +
327 +```yaml
328 +version: 3
329 +agent:
330 + authtoken: ${NGROK_AUTHTOKEN}
331 +endpoints:
332 + - name: spbgit
333 + url: https://git.spboucher.ai
334 + upstream:
335 + url: http://127.0.0.1:7420
336 +```
337 +- Document the DNS step: CNAME `git.spboucher.ai` → the ngrok-provided edge target, plus domain registration in the ngrok dashboard.
338 +- ngrok provides TLS termination; the app still sets `trustProxy: true` and derives client IPs from `x-forwarded-for` for rate limiting.
339 +
340 +### 8.3 Process management (`deploy/ecosystem.config.cjs`)
341 +
342 +- Two pm2 apps: `spbgit-server` (`node src/server.mjs`) and `spbgit-tunnel` (`ngrok start --config deploy/ngrok.yml spbgit`), both `autorestart: true`, `max_restarts` sane, logs to `/srv/spbgit/logs/`.
343 +- `pm2 save` + `pm2 startup` documented so everything survives reboot of m3u96a.
344 +- Provide the systemd unit as the documented alternative.
345 +
346 +### 8.4 Backups & ops
347 +
348 +- `deploy/backup.sh` — nightly cron: `tar.zst` of `/srv/git` + `data/` into `/srv/spbgit/backups/`, keep 14, log result.
349 +- `GET /healthz` (uptime, repo count, cache size) for monitoring; pm2 healthcheck hits it.
350 +- Structured logs (pino), request logging with latency, log rotation.
351 +
352 +---
353 +
354 +## 9. Security Checklist (verify each before "done")
355 +
356 +- [ ] Path traversal impossible in repo names, tree paths, raw endpoint (normalize + verify prefix).
357 +- [ ] Push requires valid PAT; tokens argon2-hashed at rest; constant-time compare.
358 +- [ ] Rendered Markdown sanitized (no script/style/iframe/event-handlers) while keeping badges, `<details>`, alignment HTML working.
359 +- [ ] Raw endpoint serves with `Content-Type` sniffing disabled (`X-Content-Type-Options: nosniff`) and correct types; HTML files served as `text/plain` from `/raw` to prevent stored-XSS-via-repo.
360 +- [ ] CSP header on web UI (self + data: images + shields.io/img allowlist for remote images in READMEs — use a relaxed `img-src *` since READMEs embed arbitrary badges, but everything else locked down).
361 +- [ ] Localhost-only guard on `/internal/*` hook routes.
362 +- [ ] No secrets in code, logs, or error messages. `.env` + zod-validated config.
363 +
364 +---
365 +
366 +## 10. Quality Bar & Definition of Done
367 +
368 +**Engineering standards:** ESM, small modules, JSDoc on exported functions, vitest coverage on the git plumbing (tree/log/blame parsing) and an end-to-end test that spins the server, creates a repo via API, pushes via real `git` CLI, and asserts the web UI + API reflect it. `npm run lint` (eslint) + `npm run check:headers` both green.
369 +
370 +**The platform is DONE when every box below is checked:**
371 +
372 +- [ ] `bash deploy/setup-m3u96a.sh` on a fresh m3u96a gets the whole stack live at `https://git.spboucher.ai` and survives a reboot.
373 +- [ ] `git clone https://git.spboucher.ai/anything.git` works for a stranger with no auth; pushing without a PAT is rejected with 401.
374 +- [ ] `spbgit init``spbgit create demo --push` → repo instantly visible on the home page with correct language stats.
375 +- [ ] `spbgit sync` walks every workspace repo and prints an accurate summary table.
376 +- [ ] A README containing a badge row, a centered HTML header, a mermaid diagram, a task list, relative images, and code blocks renders flawlessly in dark **and** light theme.
377 +- [ ] Repo pages have working file browser, blob view with line anchors, commits, single-commit diff, blame, branches, tags, ZIP download.
378 +- [ ] Home page shows pinned repos, activity feed, and the contribution heatmap.
379 +- [ ] Every generated file in the codebase carries the **Simon-Pierre Boucher / contact@spboucher.ai** header (`npm run check:headers` passes).
380 +- [ ] OG image cards, sitemap, Atom feed, custom 404 — all present.
381 +- [ ] Lighthouse ≥ 95 / 95 on home and a repo page.
382 +
383 +---
384 +
385 +## 11. Build Order (follow this sequence)
386 +
387 +1. **Skeleton**: config, Fastify bootstrap, logging, healthz, header scripts.
388 +2. **Git core**: bare-repo model + Smart HTTP (clone/push round-trip test passes) + hooks + PAT auth.
389 +3. **API v1** + `meta.json` model.
390 +4. **CLI** (init → create → push → sync working end-to-end against local server).
391 +5. **Web UI**: design tokens → layout → home → repo page → README pipeline (badges!) → blob/commits/diff/blame → search/stats/heatmap.
392 +6. **Polish**: OG images, feeds, error pages, a11y pass, Lighthouse.
393 +7. **Deploy**: scripts, ngrok, pm2, backups; go live on m3u96a; run the full DoD checklist.
394 +
395 +Work in small commits with conventional-commit messages (`feat:`, `fix:`, `chore:`). At the end of each phase, state which DoD boxes are now satisfied.
added LICENSE +21 −0
@@ -0,0 +1,21 @@
1 +MIT License
2 +
3 +Copyright (c) 2026 Simon-Pierre Boucher <contact@spboucher.ai>
4 +
5 +Permission is hereby granted, free of charge, to any person obtaining a copy
6 +of this software and associated documentation files (the "Software"), to deal
7 +in the Software without restriction, including without limitation the rights
8 +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 +copies of the Software, and to permit persons to whom the Software is
10 +furnished to do so, subject to the following conditions:
11 +
12 +The above copyright notice and this permission notice shall be included in all
13 +copies or substantial portions of the Software.
14 +
15 +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 +SOFTWARE.
added eslint.config.mjs +85 −0
@@ -0,0 +1,85 @@
1 +/**
2 + * ─────────────────────────────────────────────
3 + * SPB Git — Personal Git Platform
4 + * ─────────────────────────────────────────────
5 + * Author : Simon-Pierre Boucher
6 + * Contact : contact@spboucher.ai
7 + * File : eslint.config.mjs
8 + * Purpose : ESLint flat configuration for the whole project
9 + * License : MIT © Simon-Pierre Boucher
10 + * ─────────────────────────────────────────────
11 + */
12 +
13 +import js from '@eslint/js';
14 +
15 +export default [
16 + js.configs.recommended,
17 + {
18 + ignores: ['node_modules/**', 'dev/**', 'coverage/**', 'dist/**', 'src/web/assets/vendor/**'],
19 + },
20 + {
21 + files: ['**/*.mjs', '**/*.cjs', '**/*.js'],
22 + languageOptions: {
23 + ecmaVersion: 2024,
24 + sourceType: 'module',
25 + globals: {
26 + console: 'readonly',
27 + process: 'readonly',
28 + Buffer: 'readonly',
29 + URL: 'readonly',
30 + URLSearchParams: 'readonly',
31 + fetch: 'readonly',
32 + setTimeout: 'readonly',
33 + clearTimeout: 'readonly',
34 + setInterval: 'readonly',
35 + clearInterval: 'readonly',
36 + queueMicrotask: 'readonly',
37 + AbortController: 'readonly',
38 + TextEncoder: 'readonly',
39 + TextDecoder: 'readonly',
40 + crypto: 'readonly',
41 + structuredClone: 'readonly',
42 + },
43 + },
44 + rules: {
45 + 'no-unused-vars': ['error', { argsIgnorePattern: '^_', varsIgnorePattern: '^_' }],
46 + 'no-console': 'off',
47 + eqeqeq: ['error', 'smart'],
48 + 'prefer-const': 'error',
49 + 'no-var': 'error',
50 + },
51 + },
52 + {
53 + files: ['deploy/ecosystem.config.cjs'],
54 + languageOptions: {
55 + sourceType: 'commonjs',
56 + globals: { module: 'writable', require: 'readonly', __dirname: 'readonly', process: 'readonly' },
57 + },
58 + },
59 + {
60 + files: ['src/web/assets/js/**/*.js'],
61 + languageOptions: {
62 + sourceType: 'script',
63 + globals: {
64 + window: 'readonly',
65 + document: 'readonly',
66 + localStorage: 'readonly',
67 + navigator: 'readonly',
68 + location: 'readonly',
69 + matchMedia: 'readonly',
70 + requestAnimationFrame: 'readonly',
71 + history: 'readonly',
72 + CustomEvent: 'readonly',
73 + fetch: 'readonly',
74 + setTimeout: 'readonly',
75 + clearTimeout: 'readonly',
76 + console: 'readonly',
77 + },
78 + },
79 + rules: {
80 + // Plain browser scripts (no build step): var + empty catch are idiomatic.
81 + 'no-var': 'off',
82 + 'no-unused-vars': ['error', { caughtErrors: 'none' }],
83 + },
84 + },
85 +];
added package-lock.json +6042 −0
@@ -0,0 +1,6042 @@
1 +{
2 + "name": "spbgit",
3 + "version": "1.0.0",
4 + "lockfileVersion": 3,
5 + "requires": true,
6 + "packages": {
7 + "": {
8 + "name": "spbgit",
9 + "version": "1.0.0",
10 + "hasInstallScript": true,
11 + "license": "MIT",
12 + "dependencies": {
13 + "@fastify/rate-limit": "^10.1.1",
14 + "@fastify/static": "^8.0.3",
15 + "@resvg/resvg-js": "^2.6.2",
16 + "argon2": "^0.41.1",
17 + "commander": "^12.1.0",
18 + "fastify": "^5.2.0",
19 + "markdown-it": "^14.1.0",
20 + "markdown-it-anchor": "^9.2.0",
21 + "markdown-it-emoji": "^3.0.0",
22 + "markdown-it-footnote": "^4.0.0",
23 + "markdown-it-task-lists": "^2.1.1",
24 + "mermaid": "^11.4.1",
25 + "nunjucks": "^3.2.4",
26 + "picocolors": "^1.1.1",
27 + "sanitize-html": "^2.13.1",
28 + "satori": "^0.12.0",
29 + "shiki": "^1.24.4",
30 + "zod": "^3.24.1"
31 + },
32 + "bin": {
33 + "spbgit": "cli/spbgit.mjs"
34 + },
35 + "devDependencies": {
36 + "@eslint/js": "^9.17.0",
37 + "eslint": "^9.17.0",
38 + "vitest": "^2.1.8"
39 + },
40 + "engines": {
41 + "node": ">=20"
42 + }
43 + },
44 + "node_modules/@antfu/install-pkg": {
45 + "version": "1.1.0",
46 + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz",
47 + "integrity": "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
48 + "license": "MIT",
49 + "dependencies": {
50 + "package-manager-detector": "^1.3.0",
51 + "tinyexec": "^1.0.1"
52 + },
53 + "funding": {
54 + "url": "https://github.com/sponsors/antfu"
55 + }
56 + },
57 + "node_modules/@braintree/sanitize-url": {
58 + "version": "7.1.2",
59 + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz",
60 + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==",
61 + "license": "MIT"
62 + },
63 + "node_modules/@chevrotain/types": {
64 + "version": "11.1.2",
65 + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz",
66 + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==",
67 + "license": "Apache-2.0"
68 + },
69 + "node_modules/@esbuild/aix-ppc64": {
70 + "version": "0.21.5",
71 + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz",
72 + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==",
73 + "cpu": [
74 + "ppc64"
75 + ],
76 + "dev": true,
77 + "license": "MIT",
78 + "optional": true,
79 + "os": [
80 + "aix"
81 + ],
82 + "engines": {
83 + "node": ">=12"
84 + }
85 + },
86 + "node_modules/@esbuild/android-arm": {
87 + "version": "0.21.5",
88 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz",
89 + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==",
90 + "cpu": [
91 + "arm"
92 + ],
93 + "dev": true,
94 + "license": "MIT",
95 + "optional": true,
96 + "os": [
97 + "android"
98 + ],
99 + "engines": {
100 + "node": ">=12"
101 + }
102 + },
103 + "node_modules/@esbuild/android-arm64": {
104 + "version": "0.21.5",
105 + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz",
106 + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==",
107 + "cpu": [
108 + "arm64"
109 + ],
110 + "dev": true,
111 + "license": "MIT",
112 + "optional": true,
113 + "os": [
114 + "android"
115 + ],
116 + "engines": {
117 + "node": ">=12"
118 + }
119 + },
120 + "node_modules/@esbuild/android-x64": {
121 + "version": "0.21.5",
122 + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz",
123 + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==",
124 + "cpu": [
125 + "x64"
126 + ],
127 + "dev": true,
128 + "license": "MIT",
129 + "optional": true,
130 + "os": [
131 + "android"
132 + ],
133 + "engines": {
134 + "node": ">=12"
135 + }
136 + },
137 + "node_modules/@esbuild/darwin-arm64": {
138 + "version": "0.21.5",
139 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz",
140 + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==",
141 + "cpu": [
142 + "arm64"
143 + ],
144 + "dev": true,
145 + "license": "MIT",
146 + "optional": true,
147 + "os": [
148 + "darwin"
149 + ],
150 + "engines": {
151 + "node": ">=12"
152 + }
153 + },
154 + "node_modules/@esbuild/darwin-x64": {
155 + "version": "0.21.5",
156 + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz",
157 + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==",
158 + "cpu": [
159 + "x64"
160 + ],
161 + "dev": true,
162 + "license": "MIT",
163 + "optional": true,
164 + "os": [
165 + "darwin"
166 + ],
167 + "engines": {
168 + "node": ">=12"
169 + }
170 + },
171 + "node_modules/@esbuild/freebsd-arm64": {
172 + "version": "0.21.5",
173 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz",
174 + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==",
175 + "cpu": [
176 + "arm64"
177 + ],
178 + "dev": true,
179 + "license": "MIT",
180 + "optional": true,
181 + "os": [
182 + "freebsd"
183 + ],
184 + "engines": {
185 + "node": ">=12"
186 + }
187 + },
188 + "node_modules/@esbuild/freebsd-x64": {
189 + "version": "0.21.5",
190 + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz",
191 + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==",
192 + "cpu": [
193 + "x64"
194 + ],
195 + "dev": true,
196 + "license": "MIT",
197 + "optional": true,
198 + "os": [
199 + "freebsd"
200 + ],
201 + "engines": {
202 + "node": ">=12"
203 + }
204 + },
205 + "node_modules/@esbuild/linux-arm": {
206 + "version": "0.21.5",
207 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz",
208 + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==",
209 + "cpu": [
210 + "arm"
211 + ],
212 + "dev": true,
213 + "license": "MIT",
214 + "optional": true,
215 + "os": [
216 + "linux"
217 + ],
218 + "engines": {
219 + "node": ">=12"
220 + }
221 + },
222 + "node_modules/@esbuild/linux-arm64": {
223 + "version": "0.21.5",
224 + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz",
225 + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==",
226 + "cpu": [
227 + "arm64"
228 + ],
229 + "dev": true,
230 + "license": "MIT",
231 + "optional": true,
232 + "os": [
233 + "linux"
234 + ],
235 + "engines": {
236 + "node": ">=12"
237 + }
238 + },
239 + "node_modules/@esbuild/linux-ia32": {
240 + "version": "0.21.5",
241 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz",
242 + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==",
243 + "cpu": [
244 + "ia32"
245 + ],
246 + "dev": true,
247 + "license": "MIT",
248 + "optional": true,
249 + "os": [
250 + "linux"
251 + ],
252 + "engines": {
253 + "node": ">=12"
254 + }
255 + },
256 + "node_modules/@esbuild/linux-loong64": {
257 + "version": "0.21.5",
258 + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz",
259 + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==",
260 + "cpu": [
261 + "loong64"
262 + ],
263 + "dev": true,
264 + "license": "MIT",
265 + "optional": true,
266 + "os": [
267 + "linux"
268 + ],
269 + "engines": {
270 + "node": ">=12"
271 + }
272 + },
273 + "node_modules/@esbuild/linux-mips64el": {
274 + "version": "0.21.5",
275 + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz",
276 + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==",
277 + "cpu": [
278 + "mips64el"
279 + ],
280 + "dev": true,
281 + "license": "MIT",
282 + "optional": true,
283 + "os": [
284 + "linux"
285 + ],
286 + "engines": {
287 + "node": ">=12"
288 + }
289 + },
290 + "node_modules/@esbuild/linux-ppc64": {
291 + "version": "0.21.5",
292 + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz",
293 + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==",
294 + "cpu": [
295 + "ppc64"
296 + ],
297 + "dev": true,
298 + "license": "MIT",
299 + "optional": true,
300 + "os": [
301 + "linux"
302 + ],
303 + "engines": {
304 + "node": ">=12"
305 + }
306 + },
307 + "node_modules/@esbuild/linux-riscv64": {
308 + "version": "0.21.5",
309 + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz",
310 + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==",
311 + "cpu": [
312 + "riscv64"
313 + ],
314 + "dev": true,
315 + "license": "MIT",
316 + "optional": true,
317 + "os": [
318 + "linux"
319 + ],
320 + "engines": {
321 + "node": ">=12"
322 + }
323 + },
324 + "node_modules/@esbuild/linux-s390x": {
325 + "version": "0.21.5",
326 + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz",
327 + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==",
328 + "cpu": [
329 + "s390x"
330 + ],
331 + "dev": true,
332 + "license": "MIT",
333 + "optional": true,
334 + "os": [
335 + "linux"
336 + ],
337 + "engines": {
338 + "node": ">=12"
339 + }
340 + },
341 + "node_modules/@esbuild/linux-x64": {
342 + "version": "0.21.5",
343 + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz",
344 + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==",
345 + "cpu": [
346 + "x64"
347 + ],
348 + "dev": true,
349 + "license": "MIT",
350 + "optional": true,
351 + "os": [
352 + "linux"
353 + ],
354 + "engines": {
355 + "node": ">=12"
356 + }
357 + },
358 + "node_modules/@esbuild/netbsd-x64": {
359 + "version": "0.21.5",
360 + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz",
361 + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==",
362 + "cpu": [
363 + "x64"
364 + ],
365 + "dev": true,
366 + "license": "MIT",
367 + "optional": true,
368 + "os": [
369 + "netbsd"
370 + ],
371 + "engines": {
372 + "node": ">=12"
373 + }
374 + },
375 + "node_modules/@esbuild/openbsd-x64": {
376 + "version": "0.21.5",
377 + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz",
378 + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==",
379 + "cpu": [
380 + "x64"
381 + ],
382 + "dev": true,
383 + "license": "MIT",
384 + "optional": true,
385 + "os": [
386 + "openbsd"
387 + ],
388 + "engines": {
389 + "node": ">=12"
390 + }
391 + },
392 + "node_modules/@esbuild/sunos-x64": {
393 + "version": "0.21.5",
394 + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz",
395 + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==",
396 + "cpu": [
397 + "x64"
398 + ],
399 + "dev": true,
400 + "license": "MIT",
401 + "optional": true,
402 + "os": [
403 + "sunos"
404 + ],
405 + "engines": {
406 + "node": ">=12"
407 + }
408 + },
409 + "node_modules/@esbuild/win32-arm64": {
410 + "version": "0.21.5",
411 + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz",
412 + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==",
413 + "cpu": [
414 + "arm64"
415 + ],
416 + "dev": true,
417 + "license": "MIT",
418 + "optional": true,
419 + "os": [
420 + "win32"
421 + ],
422 + "engines": {
423 + "node": ">=12"
424 + }
425 + },
426 + "node_modules/@esbuild/win32-ia32": {
427 + "version": "0.21.5",
428 + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz",
429 + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==",
430 + "cpu": [
431 + "ia32"
432 + ],
433 + "dev": true,
434 + "license": "MIT",
435 + "optional": true,
436 + "os": [
437 + "win32"
438 + ],
439 + "engines": {
440 + "node": ">=12"
441 + }
442 + },
443 + "node_modules/@esbuild/win32-x64": {
444 + "version": "0.21.5",
445 + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz",
446 + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==",
447 + "cpu": [
448 + "x64"
449 + ],
450 + "dev": true,
451 + "license": "MIT",
452 + "optional": true,
453 + "os": [
454 + "win32"
455 + ],
456 + "engines": {
457 + "node": ">=12"
458 + }
459 + },
460 + "node_modules/@eslint-community/eslint-utils": {
461 + "version": "4.10.1",
462 + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz",
463 + "integrity": "sha512-cuadcxVFE8sDK6iWJbs8Sn0av2Nrh2QSGQhVlBW9AaAHqHwjWsZHT8LJ4hFGPh7ASBV2deFdM7H/DPjulmh8rg==",
464 + "dev": true,
465 + "license": "MIT",
466 + "dependencies": {
467 + "eslint-visitor-keys": "^3.4.3"
468 + },
469 + "engines": {
470 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
471 + },
472 + "funding": {
473 + "url": "https://opencollective.com/eslint"
474 + },
475 + "peerDependencies": {
476 + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0"
477 + }
478 + },
479 + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": {
480 + "version": "3.4.3",
481 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
482 + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
483 + "dev": true,
484 + "license": "Apache-2.0",
485 + "engines": {
486 + "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
487 + },
488 + "funding": {
489 + "url": "https://opencollective.com/eslint"
490 + }
491 + },
492 + "node_modules/@eslint-community/regexpp": {
493 + "version": "4.12.2",
494 + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz",
495 + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==",
496 + "dev": true,
497 + "license": "MIT",
498 + "engines": {
499 + "node": "^12.0.0 || ^14.0.0 || >=16.0.0"
500 + }
501 + },
502 + "node_modules/@eslint/config-array": {
503 + "version": "0.21.2",
504 + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.2.tgz",
505 + "integrity": "sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==",
506 + "dev": true,
507 + "license": "Apache-2.0",
508 + "dependencies": {
509 + "@eslint/object-schema": "^2.1.7",
510 + "debug": "^4.3.1",
511 + "minimatch": "^3.1.5"
512 + },
513 + "engines": {
514 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
515 + }
516 + },
517 + "node_modules/@eslint/config-helpers": {
518 + "version": "0.4.2",
519 + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz",
520 + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
521 + "dev": true,
522 + "license": "Apache-2.0",
523 + "dependencies": {
524 + "@eslint/core": "^0.17.0"
525 + },
526 + "engines": {
527 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
528 + }
529 + },
530 + "node_modules/@eslint/core": {
531 + "version": "0.17.0",
532 + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz",
533 + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==",
534 + "dev": true,
535 + "license": "Apache-2.0",
536 + "dependencies": {
537 + "@types/json-schema": "^7.0.15"
538 + },
539 + "engines": {
540 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
541 + }
542 + },
543 + "node_modules/@eslint/eslintrc": {
544 + "version": "3.3.6",
545 + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.6.tgz",
546 + "integrity": "sha512-l2Ul9PrHsPCKcEY/ac7VgFj9D80C7S68sOKc618SyHDPK36s1XcFebXY0iTzUVn4Yq+YbwvSnDmCz9yxjX+QrA==",
547 + "dev": true,
548 + "license": "MIT",
549 + "dependencies": {
550 + "ajv": "^6.14.0",
551 + "debug": "^4.3.2",
552 + "espree": "^10.0.1",
553 + "globals": "^14.0.0",
554 + "ignore": "^5.2.0",
555 + "import-fresh": "^3.2.1",
556 + "js-yaml": "^4.3.0",
557 + "minimatch": "^3.1.5",
558 + "strip-json-comments": "^3.1.1"
559 + },
560 + "engines": {
561 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
562 + },
563 + "funding": {
564 + "url": "https://opencollective.com/eslint"
565 + }
566 + },
567 + "node_modules/@eslint/js": {
568 + "version": "9.39.5",
569 + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.5.tgz",
570 + "integrity": "sha512-QywQuszQh77pIXCsq998c8hbhSTI/azTty1Z6N53dmAudKHhy573j3yvRLsX2BSp8YpLtoCEG8E9DJe+8zUh4A==",
571 + "dev": true,
572 + "license": "MIT",
573 + "engines": {
574 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
575 + },
576 + "funding": {
577 + "url": "https://eslint.org/donate"
578 + }
579 + },
580 + "node_modules/@eslint/object-schema": {
581 + "version": "2.1.7",
582 + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz",
583 + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==",
584 + "dev": true,
585 + "license": "Apache-2.0",
586 + "engines": {
587 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
588 + }
589 + },
590 + "node_modules/@eslint/plugin-kit": {
591 + "version": "0.4.1",
592 + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz",
593 + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
594 + "dev": true,
595 + "license": "Apache-2.0",
596 + "dependencies": {
597 + "@eslint/core": "^0.17.0",
598 + "levn": "^0.4.1"
599 + },
600 + "engines": {
601 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
602 + }
603 + },
604 + "node_modules/@fastify/accept-negotiator": {
605 + "version": "2.1.0",
606 + "resolved": "https://registry.npmjs.org/@fastify/accept-negotiator/-/accept-negotiator-2.1.0.tgz",
607 + "integrity": "sha512-F3EVbzWt+xcnVaOHmWyIlpuFtbxOln7HDZQsh09MtMmMm/CipMayNt8hnIL8VQi54u2ZociDbf+iluGYkf7B1A==",
608 + "funding": [
609 + {
610 + "type": "github",
611 + "url": "https://github.com/sponsors/fastify"
612 + },
613 + {
614 + "type": "opencollective",
615 + "url": "https://opencollective.com/fastify"
616 + }
617 + ],
618 + "license": "MIT"
619 + },
620 + "node_modules/@fastify/ajv-compiler": {
621 + "version": "4.0.6",
622 + "resolved": "https://registry.npmjs.org/@fastify/ajv-compiler/-/ajv-compiler-4.0.6.tgz",
623 + "integrity": "sha512-NtuzM0SfaMJbGlnjr9LWQUN5LzgSrbB8tf/wRZNas+4E1O/Nmzl53e7ruT61HDZyRCJGC6FxIogmNZO1c5ETBA==",
624 + "funding": [
625 + {
626 + "type": "github",
627 + "url": "https://github.com/sponsors/fastify"
628 + },
629 + {
630 + "type": "opencollective",
631 + "url": "https://opencollective.com/fastify"
632 + }
633 + ],
634 + "license": "MIT",
635 + "dependencies": {
636 + "ajv": "^8.12.0",
637 + "ajv-formats": "^3.0.1",
638 + "fast-uri": "^4.0.0"
639 + }
640 + },
641 + "node_modules/@fastify/ajv-compiler/node_modules/ajv": {
642 + "version": "8.20.0",
643 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
644 + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
645 + "license": "MIT",
646 + "dependencies": {
647 + "fast-deep-equal": "^3.1.3",
648 + "fast-uri": "^3.0.1",
649 + "json-schema-traverse": "^1.0.0",
650 + "require-from-string": "^2.0.2"
651 + },
652 + "funding": {
653 + "type": "github",
654 + "url": "https://github.com/sponsors/epoberezkin"
655 + }
656 + },
657 + "node_modules/@fastify/ajv-compiler/node_modules/ajv/node_modules/fast-uri": {
658 + "version": "3.1.5",
659 + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz",
660 + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==",
661 + "funding": [
662 + {
663 + "type": "github",
664 + "url": "https://github.com/sponsors/fastify"
665 + },
666 + {
667 + "type": "opencollective",
668 + "url": "https://opencollective.com/fastify"
669 + }
670 + ],
671 + "license": "BSD-3-Clause"
672 + },
673 + "node_modules/@fastify/ajv-compiler/node_modules/json-schema-traverse": {
674 + "version": "1.0.0",
675 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
676 + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
677 + "license": "MIT"
678 + },
679 + "node_modules/@fastify/error": {
680 + "version": "4.2.0",
681 + "resolved": "https://registry.npmjs.org/@fastify/error/-/error-4.2.0.tgz",
682 + "integrity": "sha512-RSo3sVDXfHskiBZKBPRgnQTtIqpi/7zhJOEmAxCiBcM7d0uwdGdxLlsCaLzGs8v8NnxIRlfG0N51p5yFaOentQ==",
683 + "funding": [
684 + {
685 + "type": "github",
686 + "url": "https://github.com/sponsors/fastify"
687 + },
688 + {
689 + "type": "opencollective",
690 + "url": "https://opencollective.com/fastify"
691 + }
692 + ],
693 + "license": "MIT"
694 + },
695 + "node_modules/@fastify/fast-json-stringify-compiler": {
696 + "version": "5.1.0",
697 + "resolved": "https://registry.npmjs.org/@fastify/fast-json-stringify-compiler/-/fast-json-stringify-compiler-5.1.0.tgz",
698 + "integrity": "sha512-PxcYtKLbQ8Z+yApiqjK8FwxIwvEj38k2OiLc17u8dkJSlmfi2wHHPaSnaoqBPQqtvF8YVsDgDpP2snDCfFrpfw==",
699 + "funding": [
700 + {
701 + "type": "github",
702 + "url": "https://github.com/sponsors/fastify"
703 + },
704 + {
705 + "type": "opencollective",
706 + "url": "https://opencollective.com/fastify"
707 + }
708 + ],
709 + "license": "MIT",
710 + "dependencies": {
711 + "fast-json-stringify": "^7.0.0"
712 + }
713 + },
714 + "node_modules/@fastify/forwarded": {
715 + "version": "3.0.2",
716 + "resolved": "https://registry.npmjs.org/@fastify/forwarded/-/forwarded-3.0.2.tgz",
717 + "integrity": "sha512-NE8HgKLgYejV9lDpqkEFaDKMLYelJBVfHekhB0UKvX0ghagXRJqg68feg8er1NPXxG4N9i6vPxzt8E+3wHfcmA==",
718 + "funding": [
719 + {
720 + "type": "github",
721 + "url": "https://github.com/sponsors/fastify"
722 + },
723 + {
724 + "type": "opencollective",
725 + "url": "https://opencollective.com/fastify"
726 + }
727 + ],
728 + "license": "MIT"
729 + },
730 + "node_modules/@fastify/merge-json-schemas": {
731 + "version": "0.2.1",
732 + "resolved": "https://registry.npmjs.org/@fastify/merge-json-schemas/-/merge-json-schemas-0.2.1.tgz",
733 + "integrity": "sha512-OA3KGBCy6KtIvLf8DINC5880o5iBlDX4SxzLQS8HorJAbqluzLRn80UXU0bxZn7UOFhFgpRJDasfwn9nG4FG4A==",
734 + "funding": [
735 + {
736 + "type": "github",
737 + "url": "https://github.com/sponsors/fastify"
738 + },
739 + {
740 + "type": "opencollective",
741 + "url": "https://opencollective.com/fastify"
742 + }
743 + ],
744 + "license": "MIT",
745 + "dependencies": {
746 + "dequal": "^2.0.3"
747 + }
748 + },
749 + "node_modules/@fastify/proxy-addr": {
750 + "version": "5.1.0",
751 + "resolved": "https://registry.npmjs.org/@fastify/proxy-addr/-/proxy-addr-5.1.0.tgz",
752 + "integrity": "sha512-INS+6gh91cLUjB+PVHfu1UqcB76Sqtpyp7bnL+FYojhjygvOPA9ctiD/JDKsyD9Xgu4hUhCSJBPig/w7duNajw==",
753 + "funding": [
754 + {
755 + "type": "github",
756 + "url": "https://github.com/sponsors/fastify"
757 + },
758 + {
759 + "type": "opencollective",
760 + "url": "https://opencollective.com/fastify"
761 + }
762 + ],
763 + "license": "MIT",
764 + "dependencies": {
765 + "@fastify/forwarded": "^3.0.0",
766 + "ipaddr.js": "^2.1.0"
767 + }
768 + },
769 + "node_modules/@fastify/rate-limit": {
770 + "version": "10.3.0",
771 + "resolved": "https://registry.npmjs.org/@fastify/rate-limit/-/rate-limit-10.3.0.tgz",
772 + "integrity": "sha512-eIGkG9XKQs0nyynatApA3EVrojHOuq4l6fhB4eeCk4PIOeadvOJz9/4w3vGI44Go17uaXOWEcPkaD8kuKm7g6Q==",
773 + "funding": [
774 + {
775 + "type": "github",
776 + "url": "https://github.com/sponsors/fastify"
777 + },
778 + {
779 + "type": "opencollective",
780 + "url": "https://opencollective.com/fastify"
781 + }
782 + ],
783 + "license": "MIT",
784 + "dependencies": {
785 + "@lukeed/ms": "^2.0.2",
786 + "fastify-plugin": "^5.0.0",
787 + "toad-cache": "^3.7.0"
788 + }
789 + },
790 + "node_modules/@fastify/send": {
791 + "version": "4.1.1",
792 + "resolved": "https://registry.npmjs.org/@fastify/send/-/send-4.1.1.tgz",
793 + "integrity": "sha512-BYo+EiaKwlxH+WetGk6hAs1d39iP0y1gqB8lGF/qwkJ9ZZ/cBY1vx5NvExb9Sc3yRMFjD5X4Eyh4e4+TzRkzdw==",
794 + "funding": [
795 + {
796 + "type": "github",
797 + "url": "https://github.com/sponsors/fastify"
798 + },
799 + {
800 + "type": "opencollective",
801 + "url": "https://opencollective.com/fastify"
802 + }
803 + ],
804 + "license": "MIT",
805 + "dependencies": {
806 + "@lukeed/ms": "^2.0.2",
807 + "escape-html": "~1.0.3",
808 + "fast-decode-uri-component": "^1.0.1",
809 + "http-errors": "^2.0.0",
810 + "mime": "^3"
811 + }
812 + },
813 + "node_modules/@fastify/static": {
814 + "version": "8.3.0",
815 + "resolved": "https://registry.npmjs.org/@fastify/static/-/static-8.3.0.tgz",
816 + "integrity": "sha512-yKxviR5PH1OKNnisIzZKmgZSus0r2OZb8qCSbqmw34aolT4g3UlzYfeBRym+HJ1J471CR8e2ldNub4PubD1coA==",
817 + "funding": [
818 + {
819 + "type": "github",
820 + "url": "https://github.com/sponsors/fastify"
821 + },
822 + {
823 + "type": "opencollective",
824 + "url": "https://opencollective.com/fastify"
825 + }
826 + ],
827 + "license": "MIT",
828 + "dependencies": {
829 + "@fastify/accept-negotiator": "^2.0.0",
830 + "@fastify/send": "^4.0.0",
831 + "content-disposition": "^0.5.4",
832 + "fastify-plugin": "^5.0.0",
833 + "fastq": "^1.17.1",
834 + "glob": "^11.0.0"
835 + }
836 + },
837 + "node_modules/@humanfs/core": {
838 + "version": "0.19.2",
839 + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.2.tgz",
840 + "integrity": "sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==",
841 + "dev": true,
842 + "license": "Apache-2.0",
843 + "dependencies": {
844 + "@humanfs/types": "^0.15.0"
845 + },
846 + "engines": {
847 + "node": ">=18.18.0"
848 + }
849 + },
850 + "node_modules/@humanfs/node": {
851 + "version": "0.16.8",
852 + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.8.tgz",
853 + "integrity": "sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==",
854 + "dev": true,
855 + "license": "Apache-2.0",
856 + "dependencies": {
857 + "@humanfs/core": "^0.19.2",
858 + "@humanfs/types": "^0.15.0",
859 + "@humanwhocodes/retry": "^0.4.0"
860 + },
861 + "engines": {
862 + "node": ">=18.18.0"
863 + }
864 + },
865 + "node_modules/@humanfs/types": {
866 + "version": "0.15.0",
867 + "resolved": "https://registry.npmjs.org/@humanfs/types/-/types-0.15.0.tgz",
868 + "integrity": "sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==",
869 + "dev": true,
870 + "license": "Apache-2.0",
871 + "engines": {
872 + "node": ">=18.18.0"
873 + }
874 + },
875 + "node_modules/@humanwhocodes/module-importer": {
876 + "version": "1.0.1",
877 + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz",
878 + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==",
879 + "dev": true,
880 + "license": "Apache-2.0",
881 + "engines": {
882 + "node": ">=12.22"
883 + },
884 + "funding": {
885 + "type": "github",
886 + "url": "https://github.com/sponsors/nzakas"
887 + }
888 + },
889 + "node_modules/@humanwhocodes/retry": {
890 + "version": "0.4.3",
891 + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.3.tgz",
892 + "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==",
893 + "dev": true,
894 + "license": "Apache-2.0",
895 + "engines": {
896 + "node": ">=18.18"
897 + },
898 + "funding": {
899 + "type": "github",
900 + "url": "https://github.com/sponsors/nzakas"
901 + }
902 + },
903 + "node_modules/@iconify/types": {
904 + "version": "2.0.0",
905 + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz",
906 + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==",
907 + "license": "MIT"
908 + },
909 + "node_modules/@iconify/utils": {
910 + "version": "3.1.4",
911 + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.4.tgz",
912 + "integrity": "sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==",
913 + "license": "MIT",
914 + "dependencies": {
915 + "@antfu/install-pkg": "^1.1.0",
916 + "@iconify/types": "^2.0.0",
917 + "import-meta-resolve": "^4.2.0"
918 + }
919 + },
920 + "node_modules/@isaacs/cliui": {
921 + "version": "9.0.0",
922 + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz",
923 + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==",
924 + "license": "BlueOak-1.0.0",
925 + "engines": {
926 + "node": ">=18"
927 + }
928 + },
929 + "node_modules/@jridgewell/sourcemap-codec": {
930 + "version": "1.5.5",
931 + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
932 + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==",
933 + "dev": true,
934 + "license": "MIT"
935 + },
936 + "node_modules/@lukeed/ms": {
937 + "version": "2.0.2",
938 + "resolved": "https://registry.npmjs.org/@lukeed/ms/-/ms-2.0.2.tgz",
939 + "integrity": "sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==",
940 + "license": "MIT",
941 + "engines": {
942 + "node": ">=8"
943 + }
944 + },
945 + "node_modules/@mermaid-js/parser": {
946 + "version": "1.2.0",
947 + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.2.0.tgz",
948 + "integrity": "sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==",
949 + "license": "MIT",
950 + "dependencies": {
951 + "@chevrotain/types": "~11.1.2"
952 + }
953 + },
954 + "node_modules/@napi-rs/lzma-linux-x64-gnu": {
955 + "version": "1.5.1",
956 + "resolved": "https://registry.npmjs.org/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.5.1.tgz",
957 + "integrity": "sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==",
958 + "cpu": [
959 + "x64"
960 + ],
961 + "dev": true,
962 + "libc": [
963 + "glibc"
964 + ],
965 + "license": "MIT",
966 + "optional": true,
967 + "os": [
968 + "linux"
969 + ],
970 + "engines": {
971 + "node": "^22.20 || ^24.12 || >=25"
972 + }
973 + },
974 + "node_modules/@phc/format": {
975 + "version": "1.0.0",
976 + "resolved": "https://registry.npmjs.org/@phc/format/-/format-1.0.0.tgz",
977 + "integrity": "sha512-m7X9U6BG2+J+R1lSOdCiITLLrxm+cWlNI3HUFA92oLO77ObGNzaKdh8pMLqdZcshtkKuV84olNNXDfMc4FezBQ==",
978 + "license": "MIT",
979 + "engines": {
980 + "node": ">=10"
981 + }
982 + },
983 + "node_modules/@pinojs/redact": {
984 + "version": "0.4.0",
985 + "resolved": "https://registry.npmjs.org/@pinojs/redact/-/redact-0.4.0.tgz",
986 + "integrity": "sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==",
987 + "license": "MIT"
988 + },
989 + "node_modules/@resvg/resvg-js": {
990 + "version": "2.6.2",
991 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js/-/resvg-js-2.6.2.tgz",
992 + "integrity": "sha512-xBaJish5OeGmniDj9cW5PRa/PtmuVU3ziqrbr5xJj901ZDN4TosrVaNZpEiLZAxdfnhAe7uQ7QFWfjPe9d9K2Q==",
993 + "license": "MPL-2.0",
994 + "engines": {
995 + "node": ">= 10"
996 + },
997 + "optionalDependencies": {
998 + "@resvg/resvg-js-android-arm-eabi": "2.6.2",
999 + "@resvg/resvg-js-android-arm64": "2.6.2",
1000 + "@resvg/resvg-js-darwin-arm64": "2.6.2",
1001 + "@resvg/resvg-js-darwin-x64": "2.6.2",
1002 + "@resvg/resvg-js-linux-arm-gnueabihf": "2.6.2",
1003 + "@resvg/resvg-js-linux-arm64-gnu": "2.6.2",
1004 + "@resvg/resvg-js-linux-arm64-musl": "2.6.2",
1005 + "@resvg/resvg-js-linux-x64-gnu": "2.6.2",
1006 + "@resvg/resvg-js-linux-x64-musl": "2.6.2",
1007 + "@resvg/resvg-js-win32-arm64-msvc": "2.6.2",
1008 + "@resvg/resvg-js-win32-ia32-msvc": "2.6.2",
1009 + "@resvg/resvg-js-win32-x64-msvc": "2.6.2"
1010 + }
1011 + },
1012 + "node_modules/@resvg/resvg-js-android-arm-eabi": {
1013 + "version": "2.6.2",
1014 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm-eabi/-/resvg-js-android-arm-eabi-2.6.2.tgz",
1015 + "integrity": "sha512-FrJibrAk6v29eabIPgcTUMPXiEz8ssrAk7TXxsiZzww9UTQ1Z5KAbFJs+Z0Ez+VZTYgnE5IQJqBcoSiMebtPHA==",
1016 + "cpu": [
1017 + "arm"
1018 + ],
1019 + "license": "MPL-2.0",
1020 + "optional": true,
1021 + "os": [
1022 + "android"
1023 + ],
1024 + "engines": {
1025 + "node": ">= 10"
1026 + }
1027 + },
1028 + "node_modules/@resvg/resvg-js-android-arm64": {
1029 + "version": "2.6.2",
1030 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-android-arm64/-/resvg-js-android-arm64-2.6.2.tgz",
1031 + "integrity": "sha512-VcOKezEhm2VqzXpcIJoITuvUS/fcjIw5NA/w3tjzWyzmvoCdd+QXIqy3FBGulWdClvp4g+IfUemigrkLThSjAQ==",
1032 + "cpu": [
1033 + "arm64"
1034 + ],
1035 + "license": "MPL-2.0",
1036 + "optional": true,
1037 + "os": [
1038 + "android"
1039 + ],
1040 + "engines": {
1041 + "node": ">= 10"
1042 + }
1043 + },
1044 + "node_modules/@resvg/resvg-js-darwin-arm64": {
1045 + "version": "2.6.2",
1046 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-arm64/-/resvg-js-darwin-arm64-2.6.2.tgz",
1047 + "integrity": "sha512-nmok2LnAd6nLUKI16aEB9ydMC6Lidiiq2m1nEBDR1LaaP7FGs4AJ90qDraxX+CWlVuRlvNjyYJTNv8qFjtL9+A==",
1048 + "cpu": [
1049 + "arm64"
1050 + ],
1051 + "license": "MPL-2.0",
1052 + "optional": true,
1053 + "os": [
1054 + "darwin"
1055 + ],
1056 + "engines": {
1057 + "node": ">= 10"
1058 + }
1059 + },
1060 + "node_modules/@resvg/resvg-js-darwin-x64": {
1061 + "version": "2.6.2",
1062 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-darwin-x64/-/resvg-js-darwin-x64-2.6.2.tgz",
1063 + "integrity": "sha512-GInyZLjgWDfsVT6+SHxQVRwNzV0AuA1uqGsOAW+0th56J7Nh6bHHKXHBWzUrihxMetcFDmQMAX1tZ1fZDYSRsw==",
1064 + "cpu": [
1065 + "x64"
1066 + ],
1067 + "license": "MPL-2.0",
1068 + "optional": true,
1069 + "os": [
1070 + "darwin"
1071 + ],
1072 + "engines": {
1073 + "node": ">= 10"
1074 + }
1075 + },
1076 + "node_modules/@resvg/resvg-js-linux-arm-gnueabihf": {
1077 + "version": "2.6.2",
1078 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm-gnueabihf/-/resvg-js-linux-arm-gnueabihf-2.6.2.tgz",
1079 + "integrity": "sha512-YIV3u/R9zJbpqTTNwTZM5/ocWetDKGsro0SWp70eGEM9eV2MerWyBRZnQIgzU3YBnSBQ1RcxRZvY/UxwESfZIw==",
1080 + "cpu": [
1081 + "arm"
1082 + ],
1083 + "license": "MPL-2.0",
1084 + "optional": true,
1085 + "os": [
1086 + "linux"
1087 + ],
1088 + "engines": {
1089 + "node": ">= 10"
1090 + }
1091 + },
1092 + "node_modules/@resvg/resvg-js-linux-arm64-gnu": {
1093 + "version": "2.6.2",
1094 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-gnu/-/resvg-js-linux-arm64-gnu-2.6.2.tgz",
1095 + "integrity": "sha512-zc2BlJSim7YR4FZDQ8OUoJg5holYzdiYMeobb9pJuGDidGL9KZUv7SbiD4E8oZogtYY42UZEap7dqkkYuA91pg==",
1096 + "cpu": [
1097 + "arm64"
1098 + ],
1099 + "libc": [
1100 + "glibc"
1101 + ],
1102 + "license": "MPL-2.0",
1103 + "optional": true,
1104 + "os": [
1105 + "linux"
1106 + ],
1107 + "engines": {
1108 + "node": ">= 10"
1109 + }
1110 + },
1111 + "node_modules/@resvg/resvg-js-linux-arm64-musl": {
1112 + "version": "2.6.2",
1113 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-arm64-musl/-/resvg-js-linux-arm64-musl-2.6.2.tgz",
1114 + "integrity": "sha512-3h3dLPWNgSsD4lQBJPb4f+kvdOSJHa5PjTYVsWHxLUzH4IFTJUAnmuWpw4KqyQ3NA5QCyhw4TWgxk3jRkQxEKg==",
1115 + "cpu": [
1116 + "arm64"
1117 + ],
1118 + "libc": [
1119 + "musl"
1120 + ],
1121 + "license": "MPL-2.0",
1122 + "optional": true,
1123 + "os": [
1124 + "linux"
1125 + ],
1126 + "engines": {
1127 + "node": ">= 10"
1128 + }
1129 + },
1130 + "node_modules/@resvg/resvg-js-linux-x64-gnu": {
1131 + "version": "2.6.2",
1132 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-gnu/-/resvg-js-linux-x64-gnu-2.6.2.tgz",
1133 + "integrity": "sha512-IVUe+ckIerA7xMZ50duAZzwf1U7khQe2E0QpUxu5MBJNao5RqC0zwV/Zm965vw6D3gGFUl7j4m+oJjubBVoftw==",
1134 + "cpu": [
1135 + "x64"
1136 + ],
1137 + "libc": [
1138 + "glibc"
1139 + ],
1140 + "license": "MPL-2.0",
1141 + "optional": true,
1142 + "os": [
1143 + "linux"
1144 + ],
1145 + "engines": {
1146 + "node": ">= 10"
1147 + }
1148 + },
1149 + "node_modules/@resvg/resvg-js-linux-x64-musl": {
1150 + "version": "2.6.2",
1151 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-linux-x64-musl/-/resvg-js-linux-x64-musl-2.6.2.tgz",
1152 + "integrity": "sha512-UOf83vqTzoYQO9SZ0fPl2ZIFtNIz/Rr/y+7X8XRX1ZnBYsQ/tTb+cj9TE+KHOdmlTFBxhYzVkP2lRByCzqi4jQ==",
1153 + "cpu": [
1154 + "x64"
1155 + ],
1156 + "libc": [
1157 + "musl"
1158 + ],
1159 + "license": "MPL-2.0",
1160 + "optional": true,
1161 + "os": [
1162 + "linux"
1163 + ],
1164 + "engines": {
1165 + "node": ">= 10"
1166 + }
1167 + },
1168 + "node_modules/@resvg/resvg-js-win32-arm64-msvc": {
1169 + "version": "2.6.2",
1170 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-arm64-msvc/-/resvg-js-win32-arm64-msvc-2.6.2.tgz",
1171 + "integrity": "sha512-7C/RSgCa+7vqZ7qAbItfiaAWhyRSoD4l4BQAbVDqRRsRgY+S+hgS3in0Rxr7IorKUpGE69X48q6/nOAuTJQxeQ==",
1172 + "cpu": [
1173 + "arm64"
1174 + ],
1175 + "license": "MPL-2.0",
1176 + "optional": true,
1177 + "os": [
1178 + "win32"
1179 + ],
1180 + "engines": {
1181 + "node": ">= 10"
1182 + }
1183 + },
1184 + "node_modules/@resvg/resvg-js-win32-ia32-msvc": {
1185 + "version": "2.6.2",
1186 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-ia32-msvc/-/resvg-js-win32-ia32-msvc-2.6.2.tgz",
1187 + "integrity": "sha512-har4aPAlvjnLcil40AC77YDIk6loMawuJwFINEM7n0pZviwMkMvjb2W5ZirsNOZY4aDbo5tLx0wNMREp5Brk+w==",
1188 + "cpu": [
1189 + "ia32"
1190 + ],
1191 + "license": "MPL-2.0",
1192 + "optional": true,
1193 + "os": [
1194 + "win32"
1195 + ],
1196 + "engines": {
1197 + "node": ">= 10"
1198 + }
1199 + },
1200 + "node_modules/@resvg/resvg-js-win32-x64-msvc": {
1201 + "version": "2.6.2",
1202 + "resolved": "https://registry.npmjs.org/@resvg/resvg-js-win32-x64-msvc/-/resvg-js-win32-x64-msvc-2.6.2.tgz",
1203 + "integrity": "sha512-ZXtYhtUr5SSaBrUDq7DiyjOFJqBVL/dOBN7N/qmi/pO0IgiWW/f/ue3nbvu9joWE5aAKDoIzy/CxsY0suwGosQ==",
1204 + "cpu": [
1205 + "x64"
1206 + ],
1207 + "license": "MPL-2.0",
1208 + "optional": true,
1209 + "os": [
1210 + "win32"
1211 + ],
1212 + "engines": {
1213 + "node": ">= 10"
1214 + }
1215 + },
1216 + "node_modules/@rollup/rollup-android-arm-eabi": {
1217 + "version": "4.62.4",
1218 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.62.4.tgz",
1219 + "integrity": "sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==",
1220 + "cpu": [
1221 + "arm"
1222 + ],
1223 + "dev": true,
1224 + "license": "MIT",
1225 + "optional": true,
1226 + "os": [
1227 + "android"
1228 + ]
1229 + },
1230 + "node_modules/@rollup/rollup-android-arm64": {
1231 + "version": "4.62.4",
1232 + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.62.4.tgz",
1233 + "integrity": "sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==",
1234 + "cpu": [
1235 + "arm64"
1236 + ],
1237 + "dev": true,
1238 + "license": "MIT",
1239 + "optional": true,
1240 + "os": [
1241 + "android"
1242 + ]
1243 + },
1244 + "node_modules/@rollup/rollup-darwin-arm64": {
1245 + "version": "4.62.4",
1246 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.62.4.tgz",
1247 + "integrity": "sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==",
1248 + "cpu": [
1249 + "arm64"
1250 + ],
1251 + "dev": true,
1252 + "license": "MIT",
1253 + "optional": true,
1254 + "os": [
1255 + "darwin"
1256 + ]
1257 + },
1258 + "node_modules/@rollup/rollup-darwin-x64": {
1259 + "version": "4.62.4",
1260 + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.62.4.tgz",
1261 + "integrity": "sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==",
1262 + "cpu": [
1263 + "x64"
1264 + ],
1265 + "dev": true,
1266 + "license": "MIT",
1267 + "optional": true,
1268 + "os": [
1269 + "darwin"
1270 + ]
1271 + },
1272 + "node_modules/@rollup/rollup-freebsd-arm64": {
1273 + "version": "4.62.4",
1274 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.62.4.tgz",
1275 + "integrity": "sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==",
1276 + "cpu": [
1277 + "arm64"
1278 + ],
1279 + "dev": true,
1280 + "license": "MIT",
1281 + "optional": true,
1282 + "os": [
1283 + "freebsd"
1284 + ]
1285 + },
1286 + "node_modules/@rollup/rollup-freebsd-x64": {
1287 + "version": "4.62.4",
1288 + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.62.4.tgz",
1289 + "integrity": "sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==",
1290 + "cpu": [
1291 + "x64"
1292 + ],
1293 + "dev": true,
1294 + "license": "MIT",
1295 + "optional": true,
1296 + "os": [
1297 + "freebsd"
1298 + ]
1299 + },
1300 + "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
1301 + "version": "4.62.4",
1302 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.62.4.tgz",
1303 + "integrity": "sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==",
1304 + "cpu": [
1305 + "arm"
1306 + ],
1307 + "dev": true,
1308 + "libc": [
1309 + "glibc"
1310 + ],
1311 + "license": "MIT",
1312 + "optional": true,
1313 + "os": [
1314 + "linux"
1315 + ]
1316 + },
1317 + "node_modules/@rollup/rollup-linux-arm-musleabihf": {
1318 + "version": "4.62.4",
1319 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.62.4.tgz",
1320 + "integrity": "sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==",
1321 + "cpu": [
1322 + "arm"
1323 + ],
1324 + "dev": true,
1325 + "libc": [
1326 + "musl"
1327 + ],
1328 + "license": "MIT",
1329 + "optional": true,
1330 + "os": [
1331 + "linux"
1332 + ]
1333 + },
1334 + "node_modules/@rollup/rollup-linux-arm64-gnu": {
1335 + "version": "4.62.4",
1336 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.62.4.tgz",
1337 + "integrity": "sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==",
1338 + "cpu": [
1339 + "arm64"
1340 + ],
1341 + "dev": true,
1342 + "libc": [
1343 + "glibc"
1344 + ],
1345 + "license": "MIT",
1346 + "optional": true,
1347 + "os": [
1348 + "linux"
1349 + ]
1350 + },
1351 + "node_modules/@rollup/rollup-linux-arm64-musl": {
1352 + "version": "4.62.4",
1353 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.62.4.tgz",
1354 + "integrity": "sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==",
1355 + "cpu": [
1356 + "arm64"
1357 + ],
1358 + "dev": true,
1359 + "libc": [
1360 + "musl"
1361 + ],
1362 + "license": "MIT",
1363 + "optional": true,
1364 + "os": [
1365 + "linux"
1366 + ]
1367 + },
1368 + "node_modules/@rollup/rollup-linux-loong64-gnu": {
1369 + "version": "4.62.4",
1370 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.62.4.tgz",
1371 + "integrity": "sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==",
1372 + "cpu": [
1373 + "loong64"
1374 + ],
1375 + "dev": true,
1376 + "libc": [
1377 + "glibc"
1378 + ],
1379 + "license": "MIT",
1380 + "optional": true,
1381 + "os": [
1382 + "linux"
1383 + ]
1384 + },
1385 + "node_modules/@rollup/rollup-linux-loong64-musl": {
1386 + "version": "4.62.4",
1387 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.62.4.tgz",
1388 + "integrity": "sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==",
1389 + "cpu": [
1390 + "loong64"
1391 + ],
1392 + "dev": true,
1393 + "libc": [
1394 + "musl"
1395 + ],
1396 + "license": "MIT",
1397 + "optional": true,
1398 + "os": [
1399 + "linux"
1400 + ]
1401 + },
1402 + "node_modules/@rollup/rollup-linux-ppc64-gnu": {
1403 + "version": "4.62.4",
1404 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.62.4.tgz",
1405 + "integrity": "sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==",
1406 + "cpu": [
1407 + "ppc64"
1408 + ],
1409 + "dev": true,
1410 + "libc": [
1411 + "glibc"
1412 + ],
1413 + "license": "MIT",
1414 + "optional": true,
1415 + "os": [
1416 + "linux"
1417 + ]
1418 + },
1419 + "node_modules/@rollup/rollup-linux-ppc64-musl": {
1420 + "version": "4.62.4",
1421 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.62.4.tgz",
1422 + "integrity": "sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==",
1423 + "cpu": [
1424 + "ppc64"
1425 + ],
1426 + "dev": true,
1427 + "libc": [
1428 + "musl"
1429 + ],
1430 + "license": "MIT",
1431 + "optional": true,
1432 + "os": [
1433 + "linux"
1434 + ]
1435 + },
1436 + "node_modules/@rollup/rollup-linux-riscv64-gnu": {
1437 + "version": "4.62.4",
1438 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.62.4.tgz",
1439 + "integrity": "sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==",
1440 + "cpu": [
1441 + "riscv64"
1442 + ],
1443 + "dev": true,
1444 + "libc": [
1445 + "glibc"
1446 + ],
1447 + "license": "MIT",
1448 + "optional": true,
1449 + "os": [
1450 + "linux"
1451 + ]
1452 + },
1453 + "node_modules/@rollup/rollup-linux-riscv64-musl": {
1454 + "version": "4.62.4",
1455 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.62.4.tgz",
1456 + "integrity": "sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==",
1457 + "cpu": [
1458 + "riscv64"
1459 + ],
1460 + "dev": true,
1461 + "libc": [
1462 + "musl"
1463 + ],
1464 + "license": "MIT",
1465 + "optional": true,
1466 + "os": [
1467 + "linux"
1468 + ]
1469 + },
1470 + "node_modules/@rollup/rollup-linux-s390x-gnu": {
1471 + "version": "4.62.4",
1472 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.62.4.tgz",
1473 + "integrity": "sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==",
1474 + "cpu": [
1475 + "s390x"
1476 + ],
1477 + "dev": true,
1478 + "libc": [
1479 + "glibc"
1480 + ],
1481 + "license": "MIT",
1482 + "optional": true,
1483 + "os": [
1484 + "linux"
1485 + ]
1486 + },
1487 + "node_modules/@rollup/rollup-linux-x64-gnu": {
1488 + "version": "4.62.4",
1489 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.62.4.tgz",
1490 + "integrity": "sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==",
1491 + "cpu": [
1492 + "x64"
1493 + ],
1494 + "dev": true,
1495 + "libc": [
1496 + "glibc"
1497 + ],
1498 + "license": "MIT",
1499 + "optional": true,
1500 + "os": [
1501 + "linux"
1502 + ]
1503 + },
1504 + "node_modules/@rollup/rollup-linux-x64-musl": {
1505 + "version": "4.62.4",
1506 + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.62.4.tgz",
1507 + "integrity": "sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==",
1508 + "cpu": [
1509 + "x64"
1510 + ],
1511 + "dev": true,
1512 + "libc": [
1513 + "musl"
1514 + ],
1515 + "license": "MIT",
1516 + "optional": true,
1517 + "os": [
1518 + "linux"
1519 + ]
1520 + },
1521 + "node_modules/@rollup/rollup-openbsd-x64": {
1522 + "version": "4.62.4",
1523 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.62.4.tgz",
1524 + "integrity": "sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==",
1525 + "cpu": [
1526 + "x64"
1527 + ],
1528 + "dev": true,
1529 + "license": "MIT",
1530 + "optional": true,
1531 + "os": [
1532 + "openbsd"
1533 + ]
1534 + },
1535 + "node_modules/@rollup/rollup-openharmony-arm64": {
1536 + "version": "4.62.4",
1537 + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.62.4.tgz",
1538 + "integrity": "sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==",
1539 + "cpu": [
1540 + "arm64"
1541 + ],
1542 + "dev": true,
1543 + "license": "MIT",
1544 + "optional": true,
1545 + "os": [
1546 + "openharmony"
1547 + ]
1548 + },
1549 + "node_modules/@rollup/rollup-win32-arm64-msvc": {
1550 + "version": "4.62.4",
1551 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.62.4.tgz",
1552 + "integrity": "sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==",
1553 + "cpu": [
1554 + "arm64"
1555 + ],
1556 + "dev": true,
1557 + "license": "MIT",
1558 + "optional": true,
1559 + "os": [
1560 + "win32"
1561 + ]
1562 + },
1563 + "node_modules/@rollup/rollup-win32-ia32-msvc": {
1564 + "version": "4.62.4",
1565 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.62.4.tgz",
1566 + "integrity": "sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==",
1567 + "cpu": [
1568 + "ia32"
1569 + ],
1570 + "dev": true,
1571 + "license": "MIT",
1572 + "optional": true,
1573 + "os": [
1574 + "win32"
1575 + ]
1576 + },
1577 + "node_modules/@rollup/rollup-win32-x64-gnu": {
1578 + "version": "4.62.4",
1579 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.62.4.tgz",
1580 + "integrity": "sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==",
1581 + "cpu": [
1582 + "x64"
1583 + ],
1584 + "dev": true,
1585 + "license": "MIT",
1586 + "optional": true,
1587 + "os": [
1588 + "win32"
1589 + ]
1590 + },
1591 + "node_modules/@rollup/rollup-win32-x64-msvc": {
1592 + "version": "4.62.4",
1593 + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.62.4.tgz",
1594 + "integrity": "sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==",
1595 + "cpu": [
1596 + "x64"
1597 + ],
1598 + "dev": true,
1599 + "license": "MIT",
1600 + "optional": true,
1601 + "os": [
1602 + "win32"
1603 + ]
1604 + },
1605 + "node_modules/@shikijs/core": {
1606 + "version": "1.29.2",
1607 + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.29.2.tgz",
1608 + "integrity": "sha512-vju0lY9r27jJfOY4Z7+Rt/nIOjzJpZ3y+nYpqtUZInVoXQ/TJZcfGnNOGnKjFdVZb8qexiCuSlZRKcGfhhTTZQ==",
1609 + "license": "MIT",
1610 + "dependencies": {
1611 + "@shikijs/engine-javascript": "1.29.2",
1612 + "@shikijs/engine-oniguruma": "1.29.2",
1613 + "@shikijs/types": "1.29.2",
1614 + "@shikijs/vscode-textmate": "^10.0.1",
1615 + "@types/hast": "^3.0.4",
1616 + "hast-util-to-html": "^9.0.4"
1617 + }
1618 + },
1619 + "node_modules/@shikijs/engine-javascript": {
1620 + "version": "1.29.2",
1621 + "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.29.2.tgz",
1622 + "integrity": "sha512-iNEZv4IrLYPv64Q6k7EPpOCE/nuvGiKl7zxdq0WFuRPF5PAE9PRo2JGq/d8crLusM59BRemJ4eOqrFrC4wiQ+A==",
1623 + "license": "MIT",
1624 + "dependencies": {
1625 + "@shikijs/types": "1.29.2",
1626 + "@shikijs/vscode-textmate": "^10.0.1",
1627 + "oniguruma-to-es": "^2.2.0"
1628 + }
1629 + },
1630 + "node_modules/@shikijs/engine-oniguruma": {
1631 + "version": "1.29.2",
1632 + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.29.2.tgz",
1633 + "integrity": "sha512-7iiOx3SG8+g1MnlzZVDYiaeHe7Ez2Kf2HrJzdmGwkRisT7r4rak0e655AcM/tF9JG/kg5fMNYlLLKglbN7gBqA==",
1634 + "license": "MIT",
1635 + "dependencies": {
1636 + "@shikijs/types": "1.29.2",
1637 + "@shikijs/vscode-textmate": "^10.0.1"
1638 + }
1639 + },
1640 + "node_modules/@shikijs/langs": {
1641 + "version": "1.29.2",
1642 + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-1.29.2.tgz",
1643 + "integrity": "sha512-FIBA7N3LZ+223U7cJDUYd5shmciFQlYkFXlkKVaHsCPgfVLiO+e12FmQE6Tf9vuyEsFe3dIl8qGWKXgEHL9wmQ==",
1644 + "license": "MIT",
1645 + "dependencies": {
1646 + "@shikijs/types": "1.29.2"
1647 + }
1648 + },
1649 + "node_modules/@shikijs/themes": {
1650 + "version": "1.29.2",
1651 + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-1.29.2.tgz",
1652 + "integrity": "sha512-i9TNZlsq4uoyqSbluIcZkmPL9Bfi3djVxRnofUHwvx/h6SRW3cwgBC5SML7vsDcWyukY0eCzVN980rqP6qNl9g==",
1653 + "license": "MIT",
1654 + "dependencies": {
1655 + "@shikijs/types": "1.29.2"
1656 + }
1657 + },
1658 + "node_modules/@shikijs/types": {
1659 + "version": "1.29.2",
1660 + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.29.2.tgz",
1661 + "integrity": "sha512-VJjK0eIijTZf0QSTODEXCqinjBn0joAHQ+aPSBzrv4O2d/QSbsMw+ZeSRx03kV34Hy7NzUvV/7NqfYGRLrASmw==",
1662 + "license": "MIT",
1663 + "dependencies": {
1664 + "@shikijs/vscode-textmate": "^10.0.1",
1665 + "@types/hast": "^3.0.4"
1666 + }
1667 + },
1668 + "node_modules/@shikijs/vscode-textmate": {
1669 + "version": "10.0.2",
1670 + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz",
1671 + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==",
1672 + "license": "MIT"
1673 + },
1674 + "node_modules/@shuding/opentype.js": {
1675 + "version": "1.4.0-beta.0",
1676 + "resolved": "https://registry.npmjs.org/@shuding/opentype.js/-/opentype.js-1.4.0-beta.0.tgz",
1677 + "integrity": "sha512-3NgmNyH3l/Hv6EvsWJbsvpcpUba6R8IREQ83nH83cyakCw7uM1arZKNfHwv1Wz6jgqrF/j4x5ELvR6PnK9nTcA==",
1678 + "license": "MIT",
1679 + "dependencies": {
1680 + "fflate": "^0.7.3",
1681 + "string.prototype.codepointat": "^0.2.1"
1682 + },
1683 + "bin": {
1684 + "ot": "bin/ot"
1685 + },
1686 + "engines": {
1687 + "node": ">= 8.0.0"
1688 + }
1689 + },
1690 + "node_modules/@types/d3": {
1691 + "version": "7.4.3",
1692 + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz",
1693 + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
1694 + "license": "MIT",
1695 + "dependencies": {
1696 + "@types/d3-array": "*",
1697 + "@types/d3-axis": "*",
1698 + "@types/d3-brush": "*",
1699 + "@types/d3-chord": "*",
1700 + "@types/d3-color": "*",
1701 + "@types/d3-contour": "*",
1702 + "@types/d3-delaunay": "*",
1703 + "@types/d3-dispatch": "*",
1704 + "@types/d3-drag": "*",
1705 + "@types/d3-dsv": "*",
1706 + "@types/d3-ease": "*",
1707 + "@types/d3-fetch": "*",
1708 + "@types/d3-force": "*",
1709 + "@types/d3-format": "*",
1710 + "@types/d3-geo": "*",
1711 + "@types/d3-hierarchy": "*",
1712 + "@types/d3-interpolate": "*",
1713 + "@types/d3-path": "*",
1714 + "@types/d3-polygon": "*",
1715 + "@types/d3-quadtree": "*",
1716 + "@types/d3-random": "*",
1717 + "@types/d3-scale": "*",
1718 + "@types/d3-scale-chromatic": "*",
1719 + "@types/d3-selection": "*",
1720 + "@types/d3-shape": "*",
1721 + "@types/d3-time": "*",
1722 + "@types/d3-time-format": "*",
1723 + "@types/d3-timer": "*",
1724 + "@types/d3-transition": "*",
1725 + "@types/d3-zoom": "*"
1726 + }
1727 + },
1728 + "node_modules/@types/d3-array": {
1729 + "version": "3.2.2",
1730 + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz",
1731 + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==",
1732 + "license": "MIT"
1733 + },
1734 + "node_modules/@types/d3-axis": {
1735 + "version": "3.0.6",
1736 + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz",
1737 + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
1738 + "license": "MIT",
1739 + "dependencies": {
1740 + "@types/d3-selection": "*"
1741 + }
1742 + },
1743 + "node_modules/@types/d3-brush": {
1744 + "version": "3.0.6",
1745 + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz",
1746 + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
1747 + "license": "MIT",
1748 + "dependencies": {
1749 + "@types/d3-selection": "*"
1750 + }
1751 + },
1752 + "node_modules/@types/d3-chord": {
1753 + "version": "3.0.6",
1754 + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz",
1755 + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==",
1756 + "license": "MIT"
1757 + },
1758 + "node_modules/@types/d3-color": {
1759 + "version": "3.1.3",
1760 + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz",
1761 + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==",
1762 + "license": "MIT"
1763 + },
1764 + "node_modules/@types/d3-contour": {
1765 + "version": "3.0.6",
1766 + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz",
1767 + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
1768 + "license": "MIT",
1769 + "dependencies": {
1770 + "@types/d3-array": "*",
1771 + "@types/geojson": "*"
1772 + }
1773 + },
1774 + "node_modules/@types/d3-delaunay": {
1775 + "version": "6.0.4",
1776 + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
1777 + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==",
1778 + "license": "MIT"
1779 + },
1780 + "node_modules/@types/d3-dispatch": {
1781 + "version": "3.0.7",
1782 + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz",
1783 + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==",
1784 + "license": "MIT"
1785 + },
1786 + "node_modules/@types/d3-drag": {
1787 + "version": "3.0.7",
1788 + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz",
1789 + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
1790 + "license": "MIT",
1791 + "dependencies": {
1792 + "@types/d3-selection": "*"
1793 + }
1794 + },
1795 + "node_modules/@types/d3-dsv": {
1796 + "version": "3.0.7",
1797 + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz",
1798 + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==",
1799 + "license": "MIT"
1800 + },
1801 + "node_modules/@types/d3-ease": {
1802 + "version": "3.0.2",
1803 + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz",
1804 + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==",
1805 + "license": "MIT"
1806 + },
1807 + "node_modules/@types/d3-fetch": {
1808 + "version": "3.0.7",
1809 + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz",
1810 + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
1811 + "license": "MIT",
1812 + "dependencies": {
1813 + "@types/d3-dsv": "*"
1814 + }
1815 + },
1816 + "node_modules/@types/d3-force": {
1817 + "version": "3.0.10",
1818 + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz",
1819 + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==",
1820 + "license": "MIT"
1821 + },
1822 + "node_modules/@types/d3-format": {
1823 + "version": "3.0.4",
1824 + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz",
1825 + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==",
1826 + "license": "MIT"
1827 + },
1828 + "node_modules/@types/d3-geo": {
1829 + "version": "3.1.1",
1830 + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.1.tgz",
1831 + "integrity": "sha512-65Emv9fQiQQqphLlRkuQ5ypPsOmWPhtBGCMv61JDPEPMvsx+gzhGf74yw1a78xFKPj6zw4AgQICJoQv0vK9M2w==",
1832 + "license": "MIT",
1833 + "dependencies": {
1834 + "@types/geojson": "*"
1835 + }
1836 + },
1837 + "node_modules/@types/d3-hierarchy": {
1838 + "version": "3.1.7",
1839 + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz",
1840 + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==",
1841 + "license": "MIT"
1842 + },
1843 + "node_modules/@types/d3-interpolate": {
1844 + "version": "3.0.4",
1845 + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz",
1846 + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
1847 + "license": "MIT",
1848 + "dependencies": {
1849 + "@types/d3-color": "*"
1850 + }
1851 + },
1852 + "node_modules/@types/d3-path": {
1853 + "version": "3.1.1",
1854 + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz",
1855 + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==",
1856 + "license": "MIT"
1857 + },
1858 + "node_modules/@types/d3-polygon": {
1859 + "version": "3.0.2",
1860 + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz",
1861 + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==",
1862 + "license": "MIT"
1863 + },
1864 + "node_modules/@types/d3-quadtree": {
1865 + "version": "3.0.6",
1866 + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz",
1867 + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==",
1868 + "license": "MIT"
1869 + },
1870 + "node_modules/@types/d3-random": {
1871 + "version": "3.0.4",
1872 + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.4.tgz",
1873 + "integrity": "sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==",
1874 + "license": "MIT"
1875 + },
1876 + "node_modules/@types/d3-scale": {
1877 + "version": "4.0.9",
1878 + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz",
1879 + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
1880 + "license": "MIT",
1881 + "dependencies": {
1882 + "@types/d3-time": "*"
1883 + }
1884 + },
1885 + "node_modules/@types/d3-scale-chromatic": {
1886 + "version": "3.1.0",
1887 + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
1888 + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==",
1889 + "license": "MIT"
1890 + },
1891 + "node_modules/@types/d3-selection": {
1892 + "version": "3.0.11",
1893 + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz",
1894 + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==",
1895 + "license": "MIT"
1896 + },
1897 + "node_modules/@types/d3-shape": {
1898 + "version": "3.1.8",
1899 + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz",
1900 + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==",
1901 + "license": "MIT",
1902 + "dependencies": {
1903 + "@types/d3-path": "*"
1904 + }
1905 + },
1906 + "node_modules/@types/d3-time": {
1907 + "version": "3.0.4",
1908 + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz",
1909 + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==",
1910 + "license": "MIT"
1911 + },
1912 + "node_modules/@types/d3-time-format": {
1913 + "version": "4.0.3",
1914 + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz",
1915 + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==",
1916 + "license": "MIT"
1917 + },
1918 + "node_modules/@types/d3-timer": {
1919 + "version": "3.0.2",
1920 + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz",
1921 + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==",
1922 + "license": "MIT"
1923 + },
1924 + "node_modules/@types/d3-transition": {
1925 + "version": "3.0.9",
1926 + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz",
1927 + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
1928 + "license": "MIT",
1929 + "dependencies": {
1930 + "@types/d3-selection": "*"
1931 + }
1932 + },
1933 + "node_modules/@types/d3-zoom": {
1934 + "version": "3.0.8",
1935 + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz",
1936 + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
1937 + "license": "MIT",
1938 + "dependencies": {
1939 + "@types/d3-interpolate": "*",
1940 + "@types/d3-selection": "*"
1941 + }
1942 + },
1943 + "node_modules/@types/estree": {
1944 + "version": "1.0.9",
1945 + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz",
1946 + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==",
1947 + "dev": true,
1948 + "license": "MIT"
1949 + },
1950 + "node_modules/@types/geojson": {
1951 + "version": "7946.0.16",
1952 + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz",
1953 + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==",
1954 + "license": "MIT"
1955 + },
1956 + "node_modules/@types/hast": {
1957 + "version": "3.0.5",
1958 + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz",
1959 + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==",
1960 + "license": "MIT",
1961 + "dependencies": {
1962 + "@types/unist": "*"
1963 + }
1964 + },
1965 + "node_modules/@types/json-schema": {
1966 + "version": "7.0.15",
1967 + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz",
1968 + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
1969 + "dev": true,
1970 + "license": "MIT"
1971 + },
1972 + "node_modules/@types/linkify-it": {
1973 + "version": "5.0.0",
1974 + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
1975 + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
1976 + "license": "MIT",
1977 + "peer": true
1978 + },
1979 + "node_modules/@types/markdown-it": {
1980 + "version": "14.1.2",
1981 + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz",
1982 + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==",
1983 + "license": "MIT",
1984 + "peer": true,
1985 + "dependencies": {
1986 + "@types/linkify-it": "^5",
1987 + "@types/mdurl": "^2"
1988 + }
1989 + },
1990 + "node_modules/@types/mdast": {
1991 + "version": "4.0.4",
1992 + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz",
1993 + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==",
1994 + "license": "MIT",
1995 + "dependencies": {
1996 + "@types/unist": "*"
1997 + }
1998 + },
1999 + "node_modules/@types/mdurl": {
2000 + "version": "2.0.0",
2001 + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
2002 + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
2003 + "license": "MIT",
2004 + "peer": true
2005 + },
2006 + "node_modules/@types/trusted-types": {
2007 + "version": "2.0.7",
2008 + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz",
2009 + "integrity": "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
2010 + "license": "MIT",
2011 + "optional": true
2012 + },
2013 + "node_modules/@types/unist": {
2014 + "version": "3.0.3",
2015 + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz",
2016 + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==",
2017 + "license": "MIT"
2018 + },
2019 + "node_modules/@ungap/structured-clone": {
2020 + "version": "1.3.3",
2021 + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz",
2022 + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==",
2023 + "license": "ISC"
2024 + },
2025 + "node_modules/@upsetjs/venn.js": {
2026 + "version": "2.0.0",
2027 + "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz",
2028 + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==",
2029 + "license": "MIT",
2030 + "optionalDependencies": {
2031 + "d3-selection": "^3.0.0",
2032 + "d3-transition": "^3.0.1"
2033 + }
2034 + },
2035 + "node_modules/@vitest/expect": {
2036 + "version": "2.1.9",
2037 + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz",
2038 + "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==",
2039 + "dev": true,
2040 + "license": "MIT",
2041 + "dependencies": {
2042 + "@vitest/spy": "2.1.9",
2043 + "@vitest/utils": "2.1.9",
2044 + "chai": "^5.1.2",
2045 + "tinyrainbow": "^1.2.0"
2046 + },
2047 + "funding": {
2048 + "url": "https://opencollective.com/vitest"
2049 + }
2050 + },
2051 + "node_modules/@vitest/mocker": {
2052 + "version": "2.1.9",
2053 + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz",
2054 + "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==",
2055 + "dev": true,
2056 + "license": "MIT",
2057 + "dependencies": {
2058 + "@vitest/spy": "2.1.9",
2059 + "estree-walker": "^3.0.3",
2060 + "magic-string": "^0.30.12"
2061 + },
2062 + "funding": {
2063 + "url": "https://opencollective.com/vitest"
2064 + },
2065 + "peerDependencies": {
2066 + "msw": "^2.4.9",
2067 + "vite": "^5.0.0"
2068 + },
2069 + "peerDependenciesMeta": {
2070 + "msw": {
2071 + "optional": true
2072 + },
2073 + "vite": {
2074 + "optional": true
2075 + }
2076 + }
2077 + },
2078 + "node_modules/@vitest/pretty-format": {
2079 + "version": "2.1.9",
2080 + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz",
2081 + "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==",
2082 + "dev": true,
2083 + "license": "MIT",
2084 + "dependencies": {
2085 + "tinyrainbow": "^1.2.0"
2086 + },
2087 + "funding": {
2088 + "url": "https://opencollective.com/vitest"
2089 + }
2090 + },
2091 + "node_modules/@vitest/runner": {
2092 + "version": "2.1.9",
2093 + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz",
2094 + "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==",
2095 + "dev": true,
2096 + "license": "MIT",
2097 + "dependencies": {
2098 + "@vitest/utils": "2.1.9",
2099 + "pathe": "^1.1.2"
2100 + },
2101 + "funding": {
2102 + "url": "https://opencollective.com/vitest"
2103 + }
2104 + },
2105 + "node_modules/@vitest/snapshot": {
2106 + "version": "2.1.9",
2107 + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz",
2108 + "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==",
2109 + "dev": true,
2110 + "license": "MIT",
2111 + "dependencies": {
2112 + "@vitest/pretty-format": "2.1.9",
2113 + "magic-string": "^0.30.12",
2114 + "pathe": "^1.1.2"
2115 + },
2116 + "funding": {
2117 + "url": "https://opencollective.com/vitest"
2118 + }
2119 + },
2120 + "node_modules/@vitest/spy": {
2121 + "version": "2.1.9",
2122 + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz",
2123 + "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==",
2124 + "dev": true,
2125 + "license": "MIT",
2126 + "dependencies": {
2127 + "tinyspy": "^3.0.2"
2128 + },
2129 + "funding": {
2130 + "url": "https://opencollective.com/vitest"
2131 + }
2132 + },
2133 + "node_modules/@vitest/utils": {
2134 + "version": "2.1.9",
2135 + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz",
2136 + "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==",
2137 + "dev": true,
2138 + "license": "MIT",
2139 + "dependencies": {
2140 + "@vitest/pretty-format": "2.1.9",
2141 + "loupe": "^3.1.2",
2142 + "tinyrainbow": "^1.2.0"
2143 + },
2144 + "funding": {
2145 + "url": "https://opencollective.com/vitest"
2146 + }
2147 + },
2148 + "node_modules/a-sync-waterfall": {
2149 + "version": "1.0.1",
2150 + "resolved": "https://registry.npmjs.org/a-sync-waterfall/-/a-sync-waterfall-1.0.1.tgz",
2151 + "integrity": "sha512-RYTOHHdWipFUliRFMCS4X2Yn2X8M87V/OpSqWzKKOGhzqyUxzyVmhHDH9sAvG+ZuQf/TAOFsLCpMw09I1ufUnA==",
2152 + "license": "MIT"
2153 + },
2154 + "node_modules/abstract-logging": {
2155 + "version": "2.0.1",
2156 + "resolved": "https://registry.npmjs.org/abstract-logging/-/abstract-logging-2.0.1.tgz",
2157 + "integrity": "sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==",
2158 + "license": "MIT"
2159 + },
2160 + "node_modules/acorn": {
2161 + "version": "8.18.0",
2162 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.18.0.tgz",
2163 + "integrity": "sha512-lGq+9yr1/GuAWaVYIHRjvvySG5/4VfKIvC8EWxStPdcDh/Ka7FG3twP6v4d5BkravUilhIAsG4Qj83t02LWUPQ==",
2164 + "dev": true,
2165 + "license": "MIT",
2166 + "bin": {
2167 + "acorn": "bin/acorn"
2168 + },
2169 + "engines": {
2170 + "node": ">=0.4.0"
2171 + }
2172 + },
2173 + "node_modules/acorn-jsx": {
2174 + "version": "5.3.2",
2175 + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz",
2176 + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==",
2177 + "dev": true,
2178 + "license": "MIT",
2179 + "peerDependencies": {
2180 + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0"
2181 + }
2182 + },
2183 + "node_modules/ajv": {
2184 + "version": "6.15.0",
2185 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz",
2186 + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==",
2187 + "dev": true,
2188 + "license": "MIT",
2189 + "dependencies": {
2190 + "fast-deep-equal": "^3.1.1",
2191 + "fast-json-stable-stringify": "^2.0.0",
2192 + "json-schema-traverse": "^0.4.1",
2193 + "uri-js": "^4.2.2"
2194 + },
2195 + "funding": {
2196 + "type": "github",
2197 + "url": "https://github.com/sponsors/epoberezkin"
2198 + }
2199 + },
2200 + "node_modules/ajv-formats": {
2201 + "version": "3.0.1",
2202 + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-3.0.1.tgz",
2203 + "integrity": "sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==",
2204 + "license": "MIT",
2205 + "dependencies": {
2206 + "ajv": "^8.0.0"
2207 + },
2208 + "peerDependencies": {
2209 + "ajv": "^8.0.0"
2210 + },
2211 + "peerDependenciesMeta": {
2212 + "ajv": {
2213 + "optional": true
2214 + }
2215 + }
2216 + },
2217 + "node_modules/ajv-formats/node_modules/ajv": {
2218 + "version": "8.20.0",
2219 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
2220 + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
2221 + "license": "MIT",
2222 + "dependencies": {
2223 + "fast-deep-equal": "^3.1.3",
2224 + "fast-uri": "^3.0.1",
2225 + "json-schema-traverse": "^1.0.0",
2226 + "require-from-string": "^2.0.2"
2227 + },
2228 + "funding": {
2229 + "type": "github",
2230 + "url": "https://github.com/sponsors/epoberezkin"
2231 + }
2232 + },
2233 + "node_modules/ajv-formats/node_modules/fast-uri": {
2234 + "version": "3.1.5",
2235 + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz",
2236 + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==",
2237 + "funding": [
2238 + {
2239 + "type": "github",
2240 + "url": "https://github.com/sponsors/fastify"
2241 + },
2242 + {
2243 + "type": "opencollective",
2244 + "url": "https://opencollective.com/fastify"
2245 + }
2246 + ],
2247 + "license": "BSD-3-Clause"
2248 + },
2249 + "node_modules/ajv-formats/node_modules/json-schema-traverse": {
2250 + "version": "1.0.0",
2251 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
2252 + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
2253 + "license": "MIT"
2254 + },
2255 + "node_modules/ansi-styles": {
2256 + "version": "4.3.0",
2257 + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
2258 + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
2259 + "dev": true,
2260 + "license": "MIT",
2261 + "dependencies": {
2262 + "color-convert": "^2.0.1"
2263 + },
2264 + "engines": {
2265 + "node": ">=8"
2266 + },
2267 + "funding": {
2268 + "url": "https://github.com/chalk/ansi-styles?sponsor=1"
2269 + }
2270 + },
2271 + "node_modules/argon2": {
2272 + "version": "0.41.1",
2273 + "resolved": "https://registry.npmjs.org/argon2/-/argon2-0.41.1.tgz",
2274 + "integrity": "sha512-dqCW8kJXke8Ik+McUcMDltrbuAWETPyU6iq+4AhxqKphWi7pChB/Zgd/Tp/o8xRLbg8ksMj46F/vph9wnxpTzQ==",
2275 + "hasInstallScript": true,
2276 + "license": "MIT",
2277 + "dependencies": {
2278 + "@phc/format": "^1.0.0",
2279 + "node-addon-api": "^8.1.0",
2280 + "node-gyp-build": "^4.8.1"
2281 + },
2282 + "engines": {
2283 + "node": ">=16.17.0"
2284 + }
2285 + },
2286 + "node_modules/argparse": {
2287 + "version": "2.0.1",
2288 + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
2289 + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
2290 + "license": "Python-2.0"
2291 + },
2292 + "node_modules/asap": {
2293 + "version": "2.0.6",
2294 + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz",
2295 + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==",
2296 + "license": "MIT"
2297 + },
2298 + "node_modules/assertion-error": {
2299 + "version": "2.0.1",
2300 + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz",
2301 + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==",
2302 + "dev": true,
2303 + "license": "MIT",
2304 + "engines": {
2305 + "node": ">=12"
2306 + }
2307 + },
2308 + "node_modules/atomic-sleep": {
2309 + "version": "1.0.0",
2310 + "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz",
2311 + "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==",
2312 + "license": "MIT",
2313 + "engines": {
2314 + "node": ">=8.0.0"
2315 + }
2316 + },
2317 + "node_modules/avvio": {
2318 + "version": "9.3.0",
2319 + "resolved": "https://registry.npmjs.org/avvio/-/avvio-9.3.0.tgz",
2320 + "integrity": "sha512-g2tQ7LE7oOSqDfwEm3M+ZCMTJc7KiZCdJ4UwyZJb5ckTKyYu50OYmvv0mCFXPuYXoM4zkSt8zM9XQ9KCvxA74A==",
2321 + "funding": [
2322 + {
2323 + "type": "github",
2324 + "url": "https://github.com/sponsors/fastify"
2325 + },
2326 + {
2327 + "type": "opencollective",
2328 + "url": "https://opencollective.com/fastify"
2329 + }
2330 + ],
2331 + "license": "MIT",
2332 + "dependencies": {
2333 + "@fastify/error": "^4.0.0",
2334 + "fastq": "^1.17.1"
2335 + }
2336 + },
2337 + "node_modules/balanced-match": {
2338 + "version": "1.0.2",
2339 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
2340 + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
2341 + "dev": true,
2342 + "license": "MIT"
2343 + },
2344 + "node_modules/base64-js": {
2345 + "version": "0.0.8",
2346 + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz",
2347 + "integrity": "sha512-3XSA2cR/h/73EzlXXdU6YNycmYI7+kicTxks4eJg2g39biHR84slg2+des+p7iHYhbRg/udIS4TD53WabcOUkw==",
2348 + "license": "MIT",
2349 + "engines": {
2350 + "node": ">= 0.4"
2351 + }
2352 + },
2353 + "node_modules/brace-expansion": {
2354 + "version": "1.1.18",
2355 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.18.tgz",
2356 + "integrity": "sha512-Edep/X9fGqVNmzKBVsDYIOtD+z1tuezV70LBjdCst9Tqu76lsnvRiZ6oTic1n+/BIwX6QDGAO94PN4N2SADvtw==",
2357 + "dev": true,
2358 + "license": "MIT",
2359 + "dependencies": {
2360 + "balanced-match": "^1.0.0",
2361 + "concat-map": "0.0.1"
2362 + }
2363 + },
2364 + "node_modules/cac": {
2365 + "version": "6.7.14",
2366 + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
2367 + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
2368 + "dev": true,
2369 + "license": "MIT",
2370 + "engines": {
2371 + "node": ">=8"
2372 + }
2373 + },
2374 + "node_modules/callsites": {
2375 + "version": "3.1.0",
2376 + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz",
2377 + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==",
2378 + "dev": true,
2379 + "license": "MIT",
2380 + "engines": {
2381 + "node": ">=6"
2382 + }
2383 + },
2384 + "node_modules/camelize": {
2385 + "version": "1.0.1",
2386 + "resolved": "https://registry.npmjs.org/camelize/-/camelize-1.0.1.tgz",
2387 + "integrity": "sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==",
2388 + "license": "MIT",
2389 + "funding": {
2390 + "url": "https://github.com/sponsors/ljharb"
2391 + }
2392 + },
2393 + "node_modules/ccount": {
2394 + "version": "2.0.1",
2395 + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz",
2396 + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==",
2397 + "license": "MIT",
2398 + "funding": {
2399 + "type": "github",
2400 + "url": "https://github.com/sponsors/wooorm"
2401 + }
2402 + },
2403 + "node_modules/chai": {
2404 + "version": "5.3.3",
2405 + "resolved": "https://registry.npmjs.org/chai/-/chai-5.3.3.tgz",
2406 + "integrity": "sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==",
2407 + "dev": true,
2408 + "license": "MIT",
2409 + "dependencies": {
2410 + "assertion-error": "^2.0.1",
2411 + "check-error": "^2.1.1",
2412 + "deep-eql": "^5.0.1",
2413 + "loupe": "^3.1.0",
2414 + "pathval": "^2.0.0"
2415 + },
2416 + "engines": {
2417 + "node": ">=18"
2418 + }
2419 + },
2420 + "node_modules/chalk": {
2421 + "version": "4.1.2",
2422 + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
2423 + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
2424 + "dev": true,
2425 + "license": "MIT",
2426 + "dependencies": {
2427 + "ansi-styles": "^4.1.0",
2428 + "supports-color": "^7.1.0"
2429 + },
2430 + "engines": {
2431 + "node": ">=10"
2432 + },
2433 + "funding": {
2434 + "url": "https://github.com/chalk/chalk?sponsor=1"
2435 + }
2436 + },
2437 + "node_modules/character-entities-html4": {
2438 + "version": "2.1.0",
2439 + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz",
2440 + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==",
2441 + "license": "MIT",
2442 + "funding": {
2443 + "type": "github",
2444 + "url": "https://github.com/sponsors/wooorm"
2445 + }
2446 + },
2447 + "node_modules/character-entities-legacy": {
2448 + "version": "3.0.0",
2449 + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz",
2450 + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==",
2451 + "license": "MIT",
2452 + "funding": {
2453 + "type": "github",
2454 + "url": "https://github.com/sponsors/wooorm"
2455 + }
2456 + },
2457 + "node_modules/check-error": {
2458 + "version": "2.1.3",
2459 + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.3.tgz",
2460 + "integrity": "sha512-PAJdDJusoxnwm1VwW07VWwUN1sl7smmC3OKggvndJFadxxDRyFJBX/ggnu/KE4kQAB7a3Dp8f/YXC1FlUprWmA==",
2461 + "dev": true,
2462 + "license": "MIT",
2463 + "engines": {
2464 + "node": ">= 16"
2465 + }
2466 + },
2467 + "node_modules/color-convert": {
2468 + "version": "2.0.1",
2469 + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
2470 + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
2471 + "dev": true,
2472 + "license": "MIT",
2473 + "dependencies": {
2474 + "color-name": "~1.1.4"
2475 + },
2476 + "engines": {
2477 + "node": ">=7.0.0"
2478 + }
2479 + },
2480 + "node_modules/color-name": {
2481 + "version": "1.1.4",
2482 + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
2483 + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
2484 + "license": "MIT"
2485 + },
2486 + "node_modules/comma-separated-tokens": {
2487 + "version": "2.0.3",
2488 + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz",
2489 + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==",
2490 + "license": "MIT",
2491 + "funding": {
2492 + "type": "github",
2493 + "url": "https://github.com/sponsors/wooorm"
2494 + }
2495 + },
2496 + "node_modules/commander": {
2497 + "version": "12.1.0",
2498 + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz",
2499 + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==",
2500 + "license": "MIT",
2501 + "engines": {
2502 + "node": ">=18"
2503 + }
2504 + },
2505 + "node_modules/concat-map": {
2506 + "version": "0.0.1",
2507 + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
2508 + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
2509 + "dev": true,
2510 + "license": "MIT"
2511 + },
2512 + "node_modules/content-disposition": {
2513 + "version": "0.5.4",
2514 + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz",
2515 + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==",
2516 + "license": "MIT",
2517 + "dependencies": {
2518 + "safe-buffer": "5.2.1"
2519 + },
2520 + "engines": {
2521 + "node": ">= 0.6"
2522 + }
2523 + },
2524 + "node_modules/cookie": {
2525 + "version": "1.1.1",
2526 + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz",
2527 + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==",
2528 + "license": "MIT",
2529 + "engines": {
2530 + "node": ">=18"
2531 + },
2532 + "funding": {
2533 + "type": "opencollective",
2534 + "url": "https://opencollective.com/express"
2535 + }
2536 + },
2537 + "node_modules/cose-base": {
2538 + "version": "1.0.3",
2539 + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz",
2540 + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
2541 + "license": "MIT",
2542 + "dependencies": {
2543 + "layout-base": "^1.0.0"
2544 + }
2545 + },
2546 + "node_modules/cross-spawn": {
2547 + "version": "7.0.6",
2548 + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz",
2549 + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
2550 + "license": "MIT",
2551 + "dependencies": {
2552 + "path-key": "^3.1.0",
2553 + "shebang-command": "^2.0.0",
2554 + "which": "^2.0.1"
2555 + },
2556 + "engines": {
2557 + "node": ">= 8"
2558 + }
2559 + },
2560 + "node_modules/css-background-parser": {
2561 + "version": "0.1.0",
2562 + "resolved": "https://registry.npmjs.org/css-background-parser/-/css-background-parser-0.1.0.tgz",
2563 + "integrity": "sha512-2EZLisiZQ+7m4wwur/qiYJRniHX4K5Tc9w93MT3AS0WS1u5kaZ4FKXlOTBhOjc+CgEgPiGY+fX1yWD8UwpEqUA==",
2564 + "license": "MIT"
2565 + },
2566 + "node_modules/css-box-shadow": {
2567 + "version": "1.0.0-3",
2568 + "resolved": "https://registry.npmjs.org/css-box-shadow/-/css-box-shadow-1.0.0-3.tgz",
2569 + "integrity": "sha512-9jaqR6e7Ohds+aWwmhe6wILJ99xYQbfmK9QQB9CcMjDbTxPZjwEmUQpU91OG05Xgm8BahT5fW+svbsQGjS/zPg==",
2570 + "license": "MIT"
2571 + },
2572 + "node_modules/css-color-keywords": {
2573 + "version": "1.0.0",
2574 + "resolved": "https://registry.npmjs.org/css-color-keywords/-/css-color-keywords-1.0.0.tgz",
2575 + "integrity": "sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==",
2576 + "license": "ISC",
2577 + "engines": {
2578 + "node": ">=4"
2579 + }
2580 + },
2581 + "node_modules/css-gradient-parser": {
2582 + "version": "0.0.16",
2583 + "resolved": "https://registry.npmjs.org/css-gradient-parser/-/css-gradient-parser-0.0.16.tgz",
2584 + "integrity": "sha512-3O5QdqgFRUbXvK1x5INf1YkBz1UKSWqrd63vWsum8MNHDBYD5urm3QtxZbKU259OrEXNM26lP/MPY3d1IGkBgA==",
2585 + "license": "MIT",
2586 + "engines": {
2587 + "node": ">=16"
2588 + }
2589 + },
2590 + "node_modules/css-to-react-native": {
2591 + "version": "3.2.0",
2592 + "resolved": "https://registry.npmjs.org/css-to-react-native/-/css-to-react-native-3.2.0.tgz",
2593 + "integrity": "sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==",
2594 + "license": "MIT",
2595 + "dependencies": {
2596 + "camelize": "^1.0.0",
2597 + "css-color-keywords": "^1.0.0",
2598 + "postcss-value-parser": "^4.0.2"
2599 + }
2600 + },
2601 + "node_modules/cytoscape": {
2602 + "version": "3.34.0",
2603 + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.0.tgz",
2604 + "integrity": "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==",
2605 + "license": "MIT",
2606 + "engines": {
2607 + "node": ">=0.10"
2608 + }
2609 + },
2610 + "node_modules/cytoscape-cose-bilkent": {
2611 + "version": "4.1.0",
2612 + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz",
2613 + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
2614 + "license": "MIT",
2615 + "dependencies": {
2616 + "cose-base": "^1.0.0"
2617 + },
2618 + "peerDependencies": {
2619 + "cytoscape": "^3.2.0"
2620 + }
2621 + },
2622 + "node_modules/cytoscape-fcose": {
2623 + "version": "2.2.0",
2624 + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz",
2625 + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
2626 + "license": "MIT",
2627 + "dependencies": {
2628 + "cose-base": "^2.2.0"
2629 + },
2630 + "peerDependencies": {
2631 + "cytoscape": "^3.2.0"
2632 + }
2633 + },
2634 + "node_modules/cytoscape-fcose/node_modules/cose-base": {
2635 + "version": "2.2.0",
2636 + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz",
2637 + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
2638 + "license": "MIT",
2639 + "dependencies": {
2640 + "layout-base": "^2.0.0"
2641 + }
2642 + },
2643 + "node_modules/cytoscape-fcose/node_modules/layout-base": {
2644 + "version": "2.0.1",
2645 + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz",
2646 + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==",
2647 + "license": "MIT"
2648 + },
2649 + "node_modules/d3": {
2650 + "version": "7.9.0",
2651 + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz",
2652 + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
2653 + "license": "ISC",
2654 + "dependencies": {
2655 + "d3-array": "3",
2656 + "d3-axis": "3",
2657 + "d3-brush": "3",
2658 + "d3-chord": "3",
2659 + "d3-color": "3",
2660 + "d3-contour": "4",
2661 + "d3-delaunay": "6",
2662 + "d3-dispatch": "3",
2663 + "d3-drag": "3",
2664 + "d3-dsv": "3",
2665 + "d3-ease": "3",
2666 + "d3-fetch": "3",
2667 + "d3-force": "3",
2668 + "d3-format": "3",
2669 + "d3-geo": "3",
2670 + "d3-hierarchy": "3",
2671 + "d3-interpolate": "3",
2672 + "d3-path": "3",
2673 + "d3-polygon": "3",
2674 + "d3-quadtree": "3",
2675 + "d3-random": "3",
2676 + "d3-scale": "4",
2677 + "d3-scale-chromatic": "3",
2678 + "d3-selection": "3",
2679 + "d3-shape": "3",
2680 + "d3-time": "3",
2681 + "d3-time-format": "4",
2682 + "d3-timer": "3",
2683 + "d3-transition": "3",
2684 + "d3-zoom": "3"
2685 + },
2686 + "engines": {
2687 + "node": ">=12"
2688 + }
2689 + },
2690 + "node_modules/d3-array": {
2691 + "version": "3.2.4",
2692 + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz",
2693 + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
2694 + "license": "ISC",
2695 + "dependencies": {
2696 + "internmap": "1 - 2"
2697 + },
2698 + "engines": {
2699 + "node": ">=12"
2700 + }
2701 + },
2702 + "node_modules/d3-axis": {
2703 + "version": "3.0.0",
2704 + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz",
2705 + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
2706 + "license": "ISC",
2707 + "engines": {
2708 + "node": ">=12"
2709 + }
2710 + },
2711 + "node_modules/d3-brush": {
2712 + "version": "3.0.0",
2713 + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz",
2714 + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
2715 + "license": "ISC",
2716 + "dependencies": {
2717 + "d3-dispatch": "1 - 3",
2718 + "d3-drag": "2 - 3",
2719 + "d3-interpolate": "1 - 3",
2720 + "d3-selection": "3",
2721 + "d3-transition": "3"
2722 + },
2723 + "engines": {
2724 + "node": ">=12"
2725 + }
2726 + },
2727 + "node_modules/d3-chord": {
2728 + "version": "3.0.1",
2729 + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz",
2730 + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
2731 + "license": "ISC",
2732 + "dependencies": {
2733 + "d3-path": "1 - 3"
2734 + },
2735 + "engines": {
2736 + "node": ">=12"
2737 + }
2738 + },
2739 + "node_modules/d3-color": {
2740 + "version": "3.1.0",
2741 + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz",
2742 + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
2743 + "license": "ISC",
2744 + "engines": {
2745 + "node": ">=12"
2746 + }
2747 + },
2748 + "node_modules/d3-contour": {
2749 + "version": "4.0.2",
2750 + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz",
2751 + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
2752 + "license": "ISC",
2753 + "dependencies": {
2754 + "d3-array": "^3.2.0"
2755 + },
2756 + "engines": {
2757 + "node": ">=12"
2758 + }
2759 + },
2760 + "node_modules/d3-delaunay": {
2761 + "version": "6.0.4",
2762 + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz",
2763 + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
2764 + "license": "ISC",
2765 + "dependencies": {
2766 + "delaunator": "5"
2767 + },
2768 + "engines": {
2769 + "node": ">=12"
2770 + }
2771 + },
2772 + "node_modules/d3-dispatch": {
2773 + "version": "3.0.1",
2774 + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz",
2775 + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
2776 + "license": "ISC",
2777 + "engines": {
2778 + "node": ">=12"
2779 + }
2780 + },
2781 + "node_modules/d3-drag": {
2782 + "version": "3.0.0",
2783 + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz",
2784 + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
2785 + "license": "ISC",
2786 + "dependencies": {
2787 + "d3-dispatch": "1 - 3",
2788 + "d3-selection": "3"
2789 + },
2790 + "engines": {
2791 + "node": ">=12"
2792 + }
2793 + },
2794 + "node_modules/d3-dsv": {
2795 + "version": "3.0.1",
2796 + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz",
2797 + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
2798 + "license": "ISC",
2799 + "dependencies": {
2800 + "commander": "7",
2801 + "iconv-lite": "0.6",
2802 + "rw": "1"
2803 + },
2804 + "bin": {
2805 + "csv2json": "bin/dsv2json.js",
2806 + "csv2tsv": "bin/dsv2dsv.js",
2807 + "dsv2dsv": "bin/dsv2dsv.js",
2808 + "dsv2json": "bin/dsv2json.js",
2809 + "json2csv": "bin/json2dsv.js",
2810 + "json2dsv": "bin/json2dsv.js",
2811 + "json2tsv": "bin/json2dsv.js",
2812 + "tsv2csv": "bin/dsv2dsv.js",
2813 + "tsv2json": "bin/dsv2json.js"
2814 + },
2815 + "engines": {
2816 + "node": ">=12"
2817 + }
2818 + },
2819 + "node_modules/d3-dsv/node_modules/commander": {
2820 + "version": "7.2.0",
2821 + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz",
2822 + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
2823 + "license": "MIT",
2824 + "engines": {
2825 + "node": ">= 10"
2826 + }
2827 + },
2828 + "node_modules/d3-ease": {
2829 + "version": "3.0.1",
2830 + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz",
2831 + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
2832 + "license": "BSD-3-Clause",
2833 + "engines": {
2834 + "node": ">=12"
2835 + }
2836 + },
2837 + "node_modules/d3-fetch": {
2838 + "version": "3.0.1",
2839 + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz",
2840 + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
2841 + "license": "ISC",
2842 + "dependencies": {
2843 + "d3-dsv": "1 - 3"
2844 + },
2845 + "engines": {
2846 + "node": ">=12"
2847 + }
2848 + },
2849 + "node_modules/d3-force": {
2850 + "version": "3.0.0",
2851 + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz",
2852 + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
2853 + "license": "ISC",
2854 + "dependencies": {
2855 + "d3-dispatch": "1 - 3",
2856 + "d3-quadtree": "1 - 3",
2857 + "d3-timer": "1 - 3"
2858 + },
2859 + "engines": {
2860 + "node": ">=12"
2861 + }
2862 + },
2863 + "node_modules/d3-format": {
2864 + "version": "3.1.2",
2865 + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz",
2866 + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==",
2867 + "license": "ISC",
2868 + "engines": {
2869 + "node": ">=12"
2870 + }
2871 + },
2872 + "node_modules/d3-geo": {
2873 + "version": "3.1.1",
2874 + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz",
2875 + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
2876 + "license": "ISC",
2877 + "dependencies": {
2878 + "d3-array": "2.5.0 - 3"
2879 + },
2880 + "engines": {
2881 + "node": ">=12"
2882 + }
2883 + },
2884 + "node_modules/d3-hierarchy": {
2885 + "version": "3.1.2",
2886 + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz",
2887 + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
2888 + "license": "ISC",
2889 + "engines": {
2890 + "node": ">=12"
2891 + }
2892 + },
2893 + "node_modules/d3-interpolate": {
2894 + "version": "3.0.1",
2895 + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz",
2896 + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
2897 + "license": "ISC",
2898 + "dependencies": {
2899 + "d3-color": "1 - 3"
2900 + },
2901 + "engines": {
2902 + "node": ">=12"
2903 + }
2904 + },
2905 + "node_modules/d3-path": {
2906 + "version": "3.1.0",
2907 + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz",
2908 + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
2909 + "license": "ISC",
2910 + "engines": {
2911 + "node": ">=12"
2912 + }
2913 + },
2914 + "node_modules/d3-polygon": {
2915 + "version": "3.0.1",
2916 + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz",
2917 + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
2918 + "license": "ISC",
2919 + "engines": {
2920 + "node": ">=12"
2921 + }
2922 + },
2923 + "node_modules/d3-quadtree": {
2924 + "version": "3.0.1",
2925 + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz",
2926 + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
2927 + "license": "ISC",
2928 + "engines": {
2929 + "node": ">=12"
2930 + }
2931 + },
2932 + "node_modules/d3-random": {
2933 + "version": "3.0.1",
2934 + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz",
2935 + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
2936 + "license": "ISC",
2937 + "engines": {
2938 + "node": ">=12"
2939 + }
2940 + },
2941 + "node_modules/d3-sankey": {
2942 + "version": "0.12.3",
2943 + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz",
2944 + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
2945 + "license": "BSD-3-Clause",
2946 + "dependencies": {
2947 + "d3-array": "1 - 2",
2948 + "d3-shape": "^1.2.0"
2949 + }
2950 + },
2951 + "node_modules/d3-sankey/node_modules/d3-array": {
2952 + "version": "2.12.1",
2953 + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz",
2954 + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
2955 + "license": "BSD-3-Clause",
2956 + "dependencies": {
2957 + "internmap": "^1.0.0"
2958 + }
2959 + },
2960 + "node_modules/d3-sankey/node_modules/d3-path": {
2961 + "version": "1.0.9",
2962 + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz",
2963 + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==",
2964 + "license": "BSD-3-Clause"
2965 + },
2966 + "node_modules/d3-sankey/node_modules/d3-shape": {
2967 + "version": "1.3.7",
2968 + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz",
2969 + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
2970 + "license": "BSD-3-Clause",
2971 + "dependencies": {
2972 + "d3-path": "1"
2973 + }
2974 + },
2975 + "node_modules/d3-sankey/node_modules/internmap": {
2976 + "version": "1.0.1",
2977 + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz",
2978 + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==",
2979 + "license": "ISC"
2980 + },
2981 + "node_modules/d3-scale": {
2982 + "version": "4.0.2",
2983 + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz",
2984 + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
2985 + "license": "ISC",
2986 + "dependencies": {
2987 + "d3-array": "2.10.0 - 3",
2988 + "d3-format": "1 - 3",
2989 + "d3-interpolate": "1.2.0 - 3",
2990 + "d3-time": "2.1.1 - 3",
2991 + "d3-time-format": "2 - 4"
2992 + },
2993 + "engines": {
2994 + "node": ">=12"
2995 + }
2996 + },
2997 + "node_modules/d3-scale-chromatic": {
2998 + "version": "3.1.0",
2999 + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz",
3000 + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
3001 + "license": "ISC",
3002 + "dependencies": {
3003 + "d3-color": "1 - 3",
3004 + "d3-interpolate": "1 - 3"
3005 + },
3006 + "engines": {
3007 + "node": ">=12"
3008 + }
3009 + },
3010 + "node_modules/d3-selection": {
3011 + "version": "3.0.0",
3012 + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz",
3013 + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
3014 + "license": "ISC",
3015 + "engines": {
3016 + "node": ">=12"
3017 + }
3018 + },
3019 + "node_modules/d3-shape": {
3020 + "version": "3.2.0",
3021 + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz",
3022 + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
3023 + "license": "ISC",
3024 + "dependencies": {
3025 + "d3-path": "^3.1.0"
3026 + },
3027 + "engines": {
3028 + "node": ">=12"
3029 + }
3030 + },
3031 + "node_modules/d3-time": {
3032 + "version": "3.1.0",
3033 + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz",
3034 + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
3035 + "license": "ISC",
3036 + "dependencies": {
3037 + "d3-array": "2 - 3"
3038 + },
3039 + "engines": {
3040 + "node": ">=12"
3041 + }
3042 + },
3043 + "node_modules/d3-time-format": {
3044 + "version": "4.1.0",
3045 + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz",
3046 + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
3047 + "license": "ISC",
3048 + "dependencies": {
3049 + "d3-time": "1 - 3"
3050 + },
3051 + "engines": {
3052 + "node": ">=12"
3053 + }
3054 + },
3055 + "node_modules/d3-timer": {
3056 + "version": "3.0.1",
3057 + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz",
3058 + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
3059 + "license": "ISC",
3060 + "engines": {
3061 + "node": ">=12"
3062 + }
3063 + },
3064 + "node_modules/d3-transition": {
3065 + "version": "3.0.1",
3066 + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz",
3067 + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
3068 + "license": "ISC",
3069 + "dependencies": {
3070 + "d3-color": "1 - 3",
3071 + "d3-dispatch": "1 - 3",
3072 + "d3-ease": "1 - 3",
3073 + "d3-interpolate": "1 - 3",
3074 + "d3-timer": "1 - 3"
3075 + },
3076 + "engines": {
3077 + "node": ">=12"
3078 + },
3079 + "peerDependencies": {
3080 + "d3-selection": "2 - 3"
3081 + }
3082 + },
3083 + "node_modules/d3-zoom": {
3084 + "version": "3.0.0",
3085 + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz",
3086 + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
3087 + "license": "ISC",
3088 + "dependencies": {
3089 + "d3-dispatch": "1 - 3",
3090 + "d3-drag": "2 - 3",
3091 + "d3-interpolate": "1 - 3",
3092 + "d3-selection": "2 - 3",
3093 + "d3-transition": "2 - 3"
3094 + },
3095 + "engines": {
3096 + "node": ">=12"
3097 + }
3098 + },
3099 + "node_modules/dagre-d3-es": {
3100 + "version": "7.0.14",
3101 + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz",
3102 + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==",
3103 + "license": "MIT",
3104 + "dependencies": {
3105 + "d3": "^7.9.0",
3106 + "lodash-es": "^4.17.21"
3107 + }
3108 + },
3109 + "node_modules/dayjs": {
3110 + "version": "1.11.21",
3111 + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz",
3112 + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==",
3113 + "license": "MIT"
3114 + },
3115 + "node_modules/debug": {
3116 + "version": "4.4.3",
3117 + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz",
3118 + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==",
3119 + "dev": true,
3120 + "license": "MIT",
3121 + "dependencies": {
3122 + "ms": "^2.1.3"
3123 + },
3124 + "engines": {
3125 + "node": ">=6.0"
3126 + },
3127 + "peerDependenciesMeta": {
3128 + "supports-color": {
3129 + "optional": true
3130 + }
3131 + }
3132 + },
3133 + "node_modules/deep-eql": {
3134 + "version": "5.0.2",
3135 + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz",
3136 + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==",
3137 + "dev": true,
3138 + "license": "MIT",
3139 + "engines": {
3140 + "node": ">=6"
3141 + }
3142 + },
3143 + "node_modules/deep-is": {
3144 + "version": "0.1.4",
3145 + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz",
3146 + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==",
3147 + "dev": true,
3148 + "license": "MIT"
3149 + },
3150 + "node_modules/deepmerge": {
3151 + "version": "4.3.1",
3152 + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz",
3153 + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==",
3154 + "license": "MIT",
3155 + "engines": {
3156 + "node": ">=0.10.0"
3157 + }
3158 + },
3159 + "node_modules/delaunator": {
3160 + "version": "5.1.0",
3161 + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz",
3162 + "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==",
3163 + "license": "ISC",
3164 + "dependencies": {
3165 + "robust-predicates": "^3.0.2"
3166 + }
3167 + },
3168 + "node_modules/depd": {
3169 + "version": "2.0.0",
3170 + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
3171 + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==",
3172 + "license": "MIT",
3173 + "engines": {
3174 + "node": ">= 0.8"
3175 + }
3176 + },
3177 + "node_modules/dequal": {
3178 + "version": "2.0.3",
3179 + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz",
3180 + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==",
3181 + "license": "MIT",
3182 + "engines": {
3183 + "node": ">=6"
3184 + }
3185 + },
3186 + "node_modules/devlop": {
3187 + "version": "1.1.0",
3188 + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz",
3189 + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==",
3190 + "license": "MIT",
3191 + "dependencies": {
3192 + "dequal": "^2.0.0"
3193 + },
3194 + "funding": {
3195 + "type": "github",
3196 + "url": "https://github.com/sponsors/wooorm"
3197 + }
3198 + },
3199 + "node_modules/dom-serializer": {
3200 + "version": "3.1.1",
3201 + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-3.1.1.tgz",
3202 + "integrity": "sha512-4MEa38/QexBob6gFNwu+EGdWvhJ1OKuNwdYY3Y3NyeWDQfnGeDYQUDfIRzWu5B5gsv03so2Uxd28YC6zrsx3Lw==",
3203 + "license": "MIT",
3204 + "dependencies": {
3205 + "domelementtype": "^3.0.0",
3206 + "domhandler": "^6.0.0",
3207 + "entities": "^8.0.0"
3208 + },
3209 + "engines": {
3210 + "node": ">=20.19.0"
3211 + },
3212 + "funding": {
3213 + "type": "github",
3214 + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1"
3215 + }
3216 + },
3217 + "node_modules/dom-serializer/node_modules/entities": {
3218 + "version": "8.0.0",
3219 + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz",
3220 + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==",
3221 + "license": "BSD-2-Clause",
3222 + "engines": {
3223 + "node": ">=20.19.0"
3224 + },
3225 + "funding": {
3226 + "url": "https://github.com/fb55/entities?sponsor=1"
3227 + }
3228 + },
3229 + "node_modules/domelementtype": {
3230 + "version": "3.0.0",
3231 + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-3.0.0.tgz",
3232 + "integrity": "sha512-umCQid3jKbDmVjx8jGaW7uUykm4DEUeyV21hPxNMo2nV955DhUThwqyOIDtreepP31hl84X7G5U9ZfsWvIB3Pg==",
3233 + "funding": [
3234 + {
3235 + "type": "github",
3236 + "url": "https://github.com/sponsors/fb55"
3237 + }
3238 + ],
3239 + "license": "BSD-2-Clause",
3240 + "engines": {
3241 + "node": ">=20.19.0"
3242 + }
3243 + },
3244 + "node_modules/domhandler": {
3245 + "version": "6.0.1",
3246 + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-6.0.1.tgz",
3247 + "integrity": "sha512-gYzvtM72ZtxQO0T048kd6HWSbbGCNOUwcnfQ01cqIJ4X2IYKFFHZ5mKvrQETcFXxsRObZulDaKmy//R7TPtsBg==",
3248 + "license": "BSD-2-Clause",
3249 + "dependencies": {
3250 + "domelementtype": "^3.0.0"
3251 + },
3252 + "engines": {
3253 + "node": ">=20.19.0"
3254 + },
3255 + "funding": {
3256 + "type": "github",
3257 + "url": "https://github.com/fb55/domhandler?sponsor=1"
3258 + }
3259 + },
3260 + "node_modules/dompurify": {
3261 + "version": "3.4.13",
3262 + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.13.tgz",
3263 + "integrity": "sha512-2vmYIoqjze2d+kakP8S/nS5shfsl587kzwEjcGlTdiksUVgFHnFCsLYDVj/JNqJVOQZGSYBTmuycv0PodwmnMQ==",
3264 + "license": "(MPL-2.0 OR Apache-2.0)",
3265 + "optionalDependencies": {
3266 + "@types/trusted-types": "^2.0.7"
3267 + }
3268 + },
3269 + "node_modules/domutils": {
3270 + "version": "4.0.2",
3271 + "resolved": "https://registry.npmjs.org/domutils/-/domutils-4.0.2.tgz",
3272 + "integrity": "sha512-qI4JLRKnSzqFqr7hAlS5xQDusBCjKSEG4t4+7aNrIQMHBcsC2TGEhuyABJdYkgSewL57PNLYEiibY2iPKhKpaA==",
3273 + "license": "BSD-2-Clause",
3274 + "dependencies": {
3275 + "dom-serializer": "^3.0.0",
3276 + "domelementtype": "^3.0.0",
3277 + "domhandler": "^6.0.0"
3278 + },
3279 + "engines": {
3280 + "node": ">=20.19.0"
3281 + },
3282 + "funding": {
3283 + "type": "github",
3284 + "url": "https://github.com/fb55/domutils?sponsor=1"
3285 + }
3286 + },
3287 + "node_modules/emoji-regex": {
3288 + "version": "10.6.0",
3289 + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz",
3290 + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==",
3291 + "license": "MIT"
3292 + },
3293 + "node_modules/emoji-regex-xs": {
3294 + "version": "1.0.0",
3295 + "resolved": "https://registry.npmjs.org/emoji-regex-xs/-/emoji-regex-xs-1.0.0.tgz",
3296 + "integrity": "sha512-LRlerrMYoIDrT6jgpeZ2YYl/L8EulRTt5hQcYjy5AInh7HWXKimpqx68aknBFpGL2+/IcogTcaydJEgaTmOpDg==",
3297 + "license": "MIT"
3298 + },
3299 + "node_modules/entities": {
3300 + "version": "4.5.0",
3301 + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
3302 + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
3303 + "license": "BSD-2-Clause",
3304 + "engines": {
3305 + "node": ">=0.12"
3306 + },
3307 + "funding": {
3308 + "url": "https://github.com/fb55/entities?sponsor=1"
3309 + }
3310 + },
3311 + "node_modules/es-module-lexer": {
3312 + "version": "1.7.0",
3313 + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.7.0.tgz",
3314 + "integrity": "sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==",
3315 + "dev": true,
3316 + "license": "MIT"
3317 + },
3318 + "node_modules/es-toolkit": {
3319 + "version": "1.50.0",
3320 + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.50.0.tgz",
3321 + "integrity": "sha512-OyZKhUVvEep9ITEiwHn8GKnMRQIVqoSIX7WnRbkWgJkllCujilqP2rD0u979tkl8wqyc8ICwlc1UBVv/Sl1G6w==",
3322 + "license": "MIT",
3323 + "workspaces": [
3324 + "docs",
3325 + "benchmarks",
3326 + "tests/types"
3327 + ]
3328 + },
3329 + "node_modules/esbuild": {
3330 + "version": "0.21.5",
3331 + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz",
3332 + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==",
3333 + "dev": true,
3334 + "hasInstallScript": true,
3335 + "license": "MIT",
3336 + "bin": {
3337 + "esbuild": "bin/esbuild"
3338 + },
3339 + "engines": {
3340 + "node": ">=12"
3341 + },
3342 + "optionalDependencies": {
3343 + "@esbuild/aix-ppc64": "0.21.5",
3344 + "@esbuild/android-arm": "0.21.5",
3345 + "@esbuild/android-arm64": "0.21.5",
3346 + "@esbuild/android-x64": "0.21.5",
3347 + "@esbuild/darwin-arm64": "0.21.5",
3348 + "@esbuild/darwin-x64": "0.21.5",
3349 + "@esbuild/freebsd-arm64": "0.21.5",
3350 + "@esbuild/freebsd-x64": "0.21.5",
3351 + "@esbuild/linux-arm": "0.21.5",
3352 + "@esbuild/linux-arm64": "0.21.5",
3353 + "@esbuild/linux-ia32": "0.21.5",
3354 + "@esbuild/linux-loong64": "0.21.5",
3355 + "@esbuild/linux-mips64el": "0.21.5",
3356 + "@esbuild/linux-ppc64": "0.21.5",
3357 + "@esbuild/linux-riscv64": "0.21.5",
3358 + "@esbuild/linux-s390x": "0.21.5",
3359 + "@esbuild/linux-x64": "0.21.5",
3360 + "@esbuild/netbsd-x64": "0.21.5",
3361 + "@esbuild/openbsd-x64": "0.21.5",
3362 + "@esbuild/sunos-x64": "0.21.5",
3363 + "@esbuild/win32-arm64": "0.21.5",
3364 + "@esbuild/win32-ia32": "0.21.5",
3365 + "@esbuild/win32-x64": "0.21.5"
3366 + }
3367 + },
3368 + "node_modules/escape-html": {
3369 + "version": "1.0.3",
3370 + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
3371 + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==",
3372 + "license": "MIT"
3373 + },
3374 + "node_modules/escape-string-regexp": {
3375 + "version": "4.0.0",
3376 + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
3377 + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
3378 + "license": "MIT",
3379 + "engines": {
3380 + "node": ">=10"
3381 + },
3382 + "funding": {
3383 + "url": "https://github.com/sponsors/sindresorhus"
3384 + }
3385 + },
3386 + "node_modules/eslint": {
3387 + "version": "9.39.5",
3388 + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.5.tgz",
3389 + "integrity": "sha512-DgZS62aPLXKlnxILS/AYCoRvHaZeXceIzlXPkkGGzJWSow1aEk0lbTlxUSlyjC8jcaKxAdOnTDz+o1JFSBsyjw==",
3390 + "dev": true,
3391 + "license": "MIT",
3392 + "dependencies": {
3393 + "@eslint-community/eslint-utils": "^4.8.0",
3394 + "@eslint-community/regexpp": "^4.12.1",
3395 + "@eslint/config-array": "^0.21.2",
3396 + "@eslint/config-helpers": "^0.4.2",
3397 + "@eslint/core": "^0.17.0",
3398 + "@eslint/eslintrc": "^3.3.6",
3399 + "@eslint/js": "9.39.5",
3400 + "@eslint/plugin-kit": "^0.4.1",
3401 + "@humanfs/node": "^0.16.6",
3402 + "@humanwhocodes/module-importer": "^1.0.1",
3403 + "@humanwhocodes/retry": "^0.4.2",
3404 + "@types/estree": "^1.0.6",
3405 + "ajv": "^6.14.0",
3406 + "chalk": "^4.0.0",
3407 + "cross-spawn": "^7.0.6",
3408 + "debug": "^4.3.2",
3409 + "escape-string-regexp": "^4.0.0",
3410 + "eslint-scope": "^8.4.0",
3411 + "eslint-visitor-keys": "^4.2.1",
3412 + "espree": "^10.4.0",
3413 + "esquery": "^1.5.0",
3414 + "esutils": "^2.0.2",
3415 + "fast-deep-equal": "^3.1.3",
3416 + "file-entry-cache": "^8.0.0",
3417 + "find-up": "^5.0.0",
3418 + "glob-parent": "^6.0.2",
3419 + "ignore": "^5.2.0",
3420 + "imurmurhash": "^0.1.4",
3421 + "is-glob": "^4.0.0",
3422 + "json-stable-stringify-without-jsonify": "^1.0.1",
3423 + "lodash.merge": "^4.6.2",
3424 + "minimatch": "^3.1.5",
3425 + "natural-compare": "^1.4.0",
3426 + "optionator": "^0.9.3"
3427 + },
3428 + "bin": {
3429 + "eslint": "bin/eslint.js"
3430 + },
3431 + "engines": {
3432 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
3433 + },
3434 + "funding": {
3435 + "url": "https://eslint.org/donate"
3436 + },
3437 + "peerDependencies": {
3438 + "jiti": "*"
3439 + },
3440 + "peerDependenciesMeta": {
3441 + "jiti": {
3442 + "optional": true
3443 + }
3444 + }
3445 + },
3446 + "node_modules/eslint-scope": {
3447 + "version": "8.4.0",
3448 + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
3449 + "integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
3450 + "dev": true,
3451 + "license": "BSD-2-Clause",
3452 + "dependencies": {
3453 + "esrecurse": "^4.3.0",
3454 + "estraverse": "^5.2.0"
3455 + },
3456 + "engines": {
3457 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
3458 + },
3459 + "funding": {
3460 + "url": "https://opencollective.com/eslint"
3461 + }
3462 + },
3463 + "node_modules/eslint-visitor-keys": {
3464 + "version": "4.2.1",
3465 + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
3466 + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
3467 + "dev": true,
3468 + "license": "Apache-2.0",
3469 + "engines": {
3470 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
3471 + },
3472 + "funding": {
3473 + "url": "https://opencollective.com/eslint"
3474 + }
3475 + },
3476 + "node_modules/espree": {
3477 + "version": "10.4.0",
3478 + "resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
3479 + "integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
3480 + "dev": true,
3481 + "license": "BSD-2-Clause",
3482 + "dependencies": {
3483 + "acorn": "^8.15.0",
3484 + "acorn-jsx": "^5.3.2",
3485 + "eslint-visitor-keys": "^4.2.1"
3486 + },
3487 + "engines": {
3488 + "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
3489 + },
3490 + "funding": {
3491 + "url": "https://opencollective.com/eslint"
3492 + }
3493 + },
3494 + "node_modules/esquery": {
3495 + "version": "1.7.0",
3496 + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.7.0.tgz",
3497 + "integrity": "sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==",
3498 + "dev": true,
3499 + "license": "BSD-3-Clause",
3500 + "dependencies": {
3501 + "estraverse": "^5.1.0"
3502 + },
3503 + "engines": {
3504 + "node": ">=0.10"
3505 + }
3506 + },
3507 + "node_modules/esrecurse": {
3508 + "version": "4.3.0",
3509 + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
3510 + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
3511 + "dev": true,
3512 + "license": "BSD-2-Clause",
3513 + "dependencies": {
3514 + "estraverse": "^5.2.0"
3515 + },
3516 + "engines": {
3517 + "node": ">=4.0"
3518 + }
3519 + },
3520 + "node_modules/estraverse": {
3521 + "version": "5.3.0",
3522 + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz",
3523 + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==",
3524 + "dev": true,
3525 + "license": "BSD-2-Clause",
3526 + "engines": {
3527 + "node": ">=4.0"
3528 + }
3529 + },
3530 + "node_modules/estree-walker": {
3531 + "version": "3.0.3",
3532 + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz",
3533 + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==",
3534 + "dev": true,
3535 + "license": "MIT",
3536 + "dependencies": {
3537 + "@types/estree": "^1.0.0"
3538 + }
3539 + },
3540 + "node_modules/esutils": {
3541 + "version": "2.0.3",
3542 + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz",
3543 + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==",
3544 + "dev": true,
3545 + "license": "BSD-2-Clause",
3546 + "engines": {
3547 + "node": ">=0.10.0"
3548 + }
3549 + },
3550 + "node_modules/expect-type": {
3551 + "version": "1.4.0",
3552 + "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.4.0.tgz",
3553 + "integrity": "sha512-KfYbmpRm0VbLjEvVa9yGwCi9GI34xvi7A/HXYWQO65CSD2u3MczUJSuwXKFIxlGsgBQizV9q5J9NHj4VG0n+pA==",
3554 + "dev": true,
3555 + "license": "Apache-2.0",
3556 + "engines": {
3557 + "node": ">=12.0.0"
3558 + }
3559 + },
3560 + "node_modules/fast-decode-uri-component": {
3561 + "version": "1.0.1",
3562 + "resolved": "https://registry.npmjs.org/fast-decode-uri-component/-/fast-decode-uri-component-1.0.1.tgz",
3563 + "integrity": "sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==",
3564 + "license": "MIT"
3565 + },
3566 + "node_modules/fast-deep-equal": {
3567 + "version": "3.1.3",
3568 + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
3569 + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
3570 + "license": "MIT"
3571 + },
3572 + "node_modules/fast-json-stable-stringify": {
3573 + "version": "2.1.0",
3574 + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
3575 + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
3576 + "dev": true,
3577 + "license": "MIT"
3578 + },
3579 + "node_modules/fast-json-stringify": {
3580 + "version": "7.0.1",
3581 + "resolved": "https://registry.npmjs.org/fast-json-stringify/-/fast-json-stringify-7.0.1.tgz",
3582 + "integrity": "sha512-eRSayARSbbwlBjpP4vnTTIRD5QPcIrmihPxDeN1DtKnHPg66UuJLx+8hlK1kaFdjvzyQ/dzALoi4vwAQ+T+iZA==",
3583 + "funding": [
3584 + {
3585 + "type": "github",
3586 + "url": "https://github.com/sponsors/fastify"
3587 + },
3588 + {
3589 + "type": "opencollective",
3590 + "url": "https://opencollective.com/fastify"
3591 + }
3592 + ],
3593 + "license": "MIT",
3594 + "dependencies": {
3595 + "@fastify/merge-json-schemas": "^0.2.0",
3596 + "ajv": "^8.12.0",
3597 + "ajv-formats": "^3.0.1",
3598 + "fast-uri": "^4.0.0",
3599 + "json-schema-ref-resolver": "^3.0.0",
3600 + "rfdc": "^1.2.0"
3601 + }
3602 + },
3603 + "node_modules/fast-json-stringify/node_modules/ajv": {
3604 + "version": "8.20.0",
3605 + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz",
3606 + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==",
3607 + "license": "MIT",
3608 + "dependencies": {
3609 + "fast-deep-equal": "^3.1.3",
3610 + "fast-uri": "^3.0.1",
3611 + "json-schema-traverse": "^1.0.0",
3612 + "require-from-string": "^2.0.2"
3613 + },
3614 + "funding": {
3615 + "type": "github",
3616 + "url": "https://github.com/sponsors/epoberezkin"
3617 + }
3618 + },
3619 + "node_modules/fast-json-stringify/node_modules/ajv/node_modules/fast-uri": {
3620 + "version": "3.1.5",
3621 + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.5.tgz",
3622 + "integrity": "sha512-gHwA1O9LDIcKunMKhObS/HimwtehO1nPUECKAu5TpKgaO19fcWEl4bliWe1jWxVFvIXztJjjQ4L8XQ1EU9f7Jw==",
3623 + "funding": [
3624 + {
3625 + "type": "github",
3626 + "url": "https://github.com/sponsors/fastify"
3627 + },
3628 + {
3629 + "type": "opencollective",
3630 + "url": "https://opencollective.com/fastify"
3631 + }
3632 + ],
3633 + "license": "BSD-3-Clause"
3634 + },
3635 + "node_modules/fast-json-stringify/node_modules/json-schema-traverse": {
3636 + "version": "1.0.0",
3637 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz",
3638 + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==",
3639 + "license": "MIT"
3640 + },
3641 + "node_modules/fast-levenshtein": {
3642 + "version": "2.0.6",
3643 + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
3644 + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
3645 + "dev": true,
3646 + "license": "MIT"
3647 + },
3648 + "node_modules/fast-querystring": {
3649 + "version": "1.1.2",
3650 + "resolved": "https://registry.npmjs.org/fast-querystring/-/fast-querystring-1.1.2.tgz",
3651 + "integrity": "sha512-g6KuKWmFXc0fID8WWH0jit4g0AGBoJhCkJMb1RmbsSEUNvQ+ZC8D6CUZ+GtF8nMzSPXnhiePyyqqipzNNEnHjg==",
3652 + "license": "MIT",
3653 + "dependencies": {
3654 + "fast-decode-uri-component": "^1.0.1"
3655 + }
3656 + },
3657 + "node_modules/fast-uri": {
3658 + "version": "4.1.2",
3659 + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-4.1.2.tgz",
3660 + "integrity": "sha512-TyGmBcbDTZXcb2cj5MV89DrF42DKvb3y5DDUNh95iO+IMeAzMkVSxK1PZRrRIpc9yg8U2GhGdbofNa0LS/a4Bw==",
3661 + "funding": [
3662 + {
3663 + "type": "github",
3664 + "url": "https://github.com/sponsors/fastify"
3665 + },
3666 + {
3667 + "type": "opencollective",
3668 + "url": "https://opencollective.com/fastify"
3669 + }
3670 + ],
3671 + "license": "BSD-3-Clause"
3672 + },
3673 + "node_modules/fastify": {
3674 + "version": "5.11.3",
3675 + "resolved": "https://registry.npmjs.org/fastify/-/fastify-5.11.3.tgz",
3676 + "integrity": "sha512-W6hzDP8s0iSeL7LGwY6Oc/ZxuXWOvFEMs6p2L0Si415YRo27W5pBKdOTXxhemBDeSTAcpYf5evRA9onF2OYhPA==",
3677 + "funding": [
3678 + {
3679 + "type": "github",
3680 + "url": "https://github.com/sponsors/fastify"
3681 + },
3682 + {
3683 + "type": "opencollective",
3684 + "url": "https://opencollective.com/fastify"
3685 + }
3686 + ],
3687 + "license": "MIT",
3688 + "dependencies": {
3689 + "@fastify/ajv-compiler": "^4.0.5",
3690 + "@fastify/error": "^4.0.0",
3691 + "@fastify/fast-json-stringify-compiler": "^5.0.0",
3692 + "@fastify/proxy-addr": "^5.0.0",
3693 + "abstract-logging": "^2.0.1",
3694 + "avvio": "^9.0.0",
3695 + "fast-json-stringify": "^7.0.0",
3696 + "find-my-way": "^9.6.0",
3697 + "light-my-request": "^6.0.0",
3698 + "pino": "^9.14.0 || ^10.1.0",
3699 + "process-warning": "^5.0.0",
3700 + "rfdc": "^1.3.1",
3701 + "secure-json-parse": "^4.0.0",
3702 + "semver": "^7.6.0",
3703 + "toad-cache": "^3.7.0"
3704 + }
3705 + },
3706 + "node_modules/fastify-plugin": {
3707 + "version": "5.1.0",
3708 + "resolved": "https://registry.npmjs.org/fastify-plugin/-/fastify-plugin-5.1.0.tgz",
3709 + "integrity": "sha512-FAIDA8eovSt5qcDgcBvDuX/v0Cjz0ohGhENZ/wpc3y+oZCY2afZ9Baqql3g/lC+OHRnciQol4ww7tuthOb9idw==",
3710 + "funding": [
3711 + {
3712 + "type": "github",
3713 + "url": "https://github.com/sponsors/fastify"
3714 + },
3715 + {
3716 + "type": "opencollective",
3717 + "url": "https://opencollective.com/fastify"
3718 + }
3719 + ],
3720 + "license": "MIT"
3721 + },
3722 + "node_modules/fastq": {
3723 + "version": "1.20.1",
3724 + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz",
3725 + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
3726 + "license": "ISC",
3727 + "dependencies": {
3728 + "reusify": "^1.0.4"
3729 + }
3730 + },
3731 + "node_modules/fflate": {
3732 + "version": "0.7.5",
3733 + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.7.5.tgz",
3734 + "integrity": "sha512-QieYf//cis6ywHNi5qW1+PXPQ4bC+XVJAtS4AXIML8P76GroEiOxm/oQtn1f02UkJY1+KsXMJcC+R2v/Eg4G3g==",
3735 + "license": "MIT"
3736 + },
3737 + "node_modules/file-entry-cache": {
3738 + "version": "8.0.0",
3739 + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz",
3740 + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==",
3741 + "dev": true,
3742 + "license": "MIT",
3743 + "dependencies": {
3744 + "flat-cache": "^4.0.0"
3745 + },
3746 + "engines": {
3747 + "node": ">=16.0.0"
3748 + }
3749 + },
3750 + "node_modules/find-my-way": {
3751 + "version": "9.7.0",
3752 + "resolved": "https://registry.npmjs.org/find-my-way/-/find-my-way-9.7.0.tgz",
3753 + "integrity": "sha512-f2JHn75x2JlwUwLenZypgczR7YWMb/uO9BvUXtus+JMgkbIkLADd38cI4EiV+OQqrGo1Zlq6V8wnqMJ8e62wUQ==",
3754 + "license": "MIT",
3755 + "dependencies": {
3756 + "fast-deep-equal": "^3.1.3",
3757 + "fast-querystring": "^1.0.0",
3758 + "safe-regex2": "^5.0.0"
3759 + },
3760 + "engines": {
3761 + "node": ">=20"
3762 + }
3763 + },
3764 + "node_modules/find-up": {
3765 + "version": "5.0.0",
3766 + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz",
3767 + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==",
3768 + "dev": true,
3769 + "license": "MIT",
3770 + "dependencies": {
3771 + "locate-path": "^6.0.0",
3772 + "path-exists": "^4.0.0"
3773 + },
3774 + "engines": {
3775 + "node": ">=10"
3776 + },
3777 + "funding": {
3778 + "url": "https://github.com/sponsors/sindresorhus"
3779 + }
3780 + },
3781 + "node_modules/flat-cache": {
3782 + "version": "4.0.1",
3783 + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz",
3784 + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==",
3785 + "dev": true,
3786 + "license": "MIT",
3787 + "dependencies": {
3788 + "flatted": "^3.2.9",
3789 + "keyv": "^4.5.4"
3790 + },
3791 + "engines": {
3792 + "node": ">=16"
3793 + }
3794 + },
3795 + "node_modules/flatted": {
3796 + "version": "3.4.4",
3797 + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.4.4.tgz",
3798 + "integrity": "sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==",
3799 + "dev": true,
3800 + "license": "ISC"
3801 + },
3802 + "node_modules/foreground-child": {
3803 + "version": "3.3.1",
3804 + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz",
3805 + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==",
3806 + "license": "ISC",
3807 + "dependencies": {
3808 + "cross-spawn": "^7.0.6",
3809 + "signal-exit": "^4.0.1"
3810 + },
3811 + "engines": {
3812 + "node": ">=14"
3813 + },
3814 + "funding": {
3815 + "url": "https://github.com/sponsors/isaacs"
3816 + }
3817 + },
3818 + "node_modules/fsevents": {
3819 + "version": "2.3.3",
3820 + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
3821 + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
3822 + "dev": true,
3823 + "hasInstallScript": true,
3824 + "license": "MIT",
3825 + "optional": true,
3826 + "os": [
3827 + "darwin"
3828 + ],
3829 + "engines": {
3830 + "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
3831 + }
3832 + },
3833 + "node_modules/glob": {
3834 + "version": "11.1.0",
3835 + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz",
3836 + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==",
3837 + "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",
3838 + "license": "BlueOak-1.0.0",
3839 + "dependencies": {
3840 + "foreground-child": "^3.3.1",
3841 + "jackspeak": "^4.1.1",
3842 + "minimatch": "^10.1.1",
3843 + "minipass": "^7.1.2",
3844 + "package-json-from-dist": "^1.0.0",
3845 + "path-scurry": "^2.0.0"
3846 + },
3847 + "bin": {
3848 + "glob": "dist/esm/bin.mjs"
3849 + },
3850 + "engines": {
3851 + "node": "20 || >=22"
3852 + },
3853 + "funding": {
3854 + "url": "https://github.com/sponsors/isaacs"
3855 + }
3856 + },
3857 + "node_modules/glob-parent": {
3858 + "version": "6.0.2",
3859 + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
3860 + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
3861 + "dev": true,
3862 + "license": "ISC",
3863 + "dependencies": {
3864 + "is-glob": "^4.0.3"
3865 + },
3866 + "engines": {
3867 + "node": ">=10.13.0"
3868 + }
3869 + },
3870 + "node_modules/glob/node_modules/balanced-match": {
3871 + "version": "4.0.4",
3872 + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz",
3873 + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==",
3874 + "license": "MIT",
3875 + "engines": {
3876 + "node": "18 || 20 || >=22"
3877 + }
3878 + },
3879 + "node_modules/glob/node_modules/brace-expansion": {
3880 + "version": "5.0.9",
3881 + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.9.tgz",
3882 + "integrity": "sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==",
3883 + "license": "MIT",
3884 + "dependencies": {
3885 + "balanced-match": "^4.0.2"
3886 + },
3887 + "engines": {
3888 + "node": "20 || >=22"
3889 + }
3890 + },
3891 + "node_modules/glob/node_modules/minimatch": {
3892 + "version": "10.2.6",
3893 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz",
3894 + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==",
3895 + "license": "BlueOak-1.0.0",
3896 + "dependencies": {
3897 + "brace-expansion": "^5.0.8"
3898 + },
3899 + "engines": {
3900 + "node": "18 || 20 || >=22"
3901 + },
3902 + "funding": {
3903 + "url": "https://github.com/sponsors/isaacs"
3904 + }
3905 + },
3906 + "node_modules/globals": {
3907 + "version": "14.0.0",
3908 + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz",
3909 + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==",
3910 + "dev": true,
3911 + "license": "MIT",
3912 + "engines": {
3913 + "node": ">=18"
3914 + },
3915 + "funding": {
3916 + "url": "https://github.com/sponsors/sindresorhus"
3917 + }
3918 + },
3919 + "node_modules/hachure-fill": {
3920 + "version": "0.5.2",
3921 + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz",
3922 + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==",
3923 + "license": "MIT"
3924 + },
3925 + "node_modules/has-flag": {
3926 + "version": "4.0.0",
3927 + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
3928 + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
3929 + "dev": true,
3930 + "license": "MIT",
3931 + "engines": {
3932 + "node": ">=8"
3933 + }
3934 + },
3935 + "node_modules/hast-util-to-html": {
3936 + "version": "9.0.5",
3937 + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.5.tgz",
3938 + "integrity": "sha512-OguPdidb+fbHQSU4Q4ZiLKnzWo8Wwsf5bZfbvu7//a9oTYoqD/fWpe96NuHkoS9h0ccGOTe0C4NGXdtS0iObOw==",
3939 + "license": "MIT",
3940 + "dependencies": {
3941 + "@types/hast": "^3.0.0",
3942 + "@types/unist": "^3.0.0",
3943 + "ccount": "^2.0.0",
3944 + "comma-separated-tokens": "^2.0.0",
3945 + "hast-util-whitespace": "^3.0.0",
3946 + "html-void-elements": "^3.0.0",
3947 + "mdast-util-to-hast": "^13.0.0",
3948 + "property-information": "^7.0.0",
3949 + "space-separated-tokens": "^2.0.0",
3950 + "stringify-entities": "^4.0.0",
3951 + "zwitch": "^2.0.4"
3952 + },
3953 + "funding": {
3954 + "type": "opencollective",
3955 + "url": "https://opencollective.com/unified"
3956 + }
3957 + },
3958 + "node_modules/hast-util-whitespace": {
3959 + "version": "3.0.0",
3960 + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz",
3961 + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==",
3962 + "license": "MIT",
3963 + "dependencies": {
3964 + "@types/hast": "^3.0.0"
3965 + },
3966 + "funding": {
3967 + "type": "opencollective",
3968 + "url": "https://opencollective.com/unified"
3969 + }
3970 + },
3971 + "node_modules/hex-rgb": {
3972 + "version": "4.3.0",
3973 + "resolved": "https://registry.npmjs.org/hex-rgb/-/hex-rgb-4.3.0.tgz",
3974 + "integrity": "sha512-Ox1pJVrDCyGHMG9CFg1tmrRUMRPRsAWYc/PinY0XzJU4K7y7vjNoLKIQ7BR5UJMCxNN8EM1MNDmHWA/B3aZUuw==",
3975 + "license": "MIT",
3976 + "engines": {
3977 + "node": ">=6"
3978 + },
3979 + "funding": {
3980 + "url": "https://github.com/sponsors/sindresorhus"
3981 + }
3982 + },
3983 + "node_modules/html-void-elements": {
3984 + "version": "3.0.0",
3985 + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz",
3986 + "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==",
3987 + "license": "MIT",
3988 + "funding": {
3989 + "type": "github",
3990 + "url": "https://github.com/sponsors/wooorm"
3991 + }
3992 + },
3993 + "node_modules/htmlparser2": {
3994 + "version": "12.0.0",
3995 + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-12.0.0.tgz",
3996 + "integrity": "sha512-Tz7u1i95/g2x2jz81+x0FBVhBhY5aRTvD3tXXdFaljuNdzDLJ8UGNRrTcj2cgQvAg3iW/h77Fz15nLW0L0CrZw==",
3997 + "funding": [
3998 + "https://github.com/fb55/htmlparser2?sponsor=1",
3999 + {
4000 + "type": "github",
4001 + "url": "https://github.com/sponsors/fb55"
4002 + }
4003 + ],
4004 + "license": "MIT",
4005 + "dependencies": {
4006 + "domelementtype": "^3.0.0",
4007 + "domhandler": "^6.0.0",
4008 + "domutils": "^4.0.2",
4009 + "entities": "^8.0.0"
4010 + },
4011 + "engines": {
4012 + "node": ">=20.19.0"
4013 + }
4014 + },
4015 + "node_modules/htmlparser2/node_modules/entities": {
4016 + "version": "8.0.0",
4017 + "resolved": "https://registry.npmjs.org/entities/-/entities-8.0.0.tgz",
4018 + "integrity": "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA==",
4019 + "license": "BSD-2-Clause",
4020 + "engines": {
4021 + "node": ">=20.19.0"
4022 + },
4023 + "funding": {
4024 + "url": "https://github.com/fb55/entities?sponsor=1"
4025 + }
4026 + },
4027 + "node_modules/http-errors": {
4028 + "version": "2.0.1",
4029 + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz",
4030 + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==",
4031 + "license": "MIT",
4032 + "dependencies": {
4033 + "depd": "~2.0.0",
4034 + "inherits": "~2.0.4",
4035 + "setprototypeof": "~1.2.0",
4036 + "statuses": "~2.0.2",
4037 + "toidentifier": "~1.0.1"
4038 + },
4039 + "engines": {
4040 + "node": ">= 0.8"
4041 + },
4042 + "funding": {
4043 + "type": "opencollective",
4044 + "url": "https://opencollective.com/express"
4045 + }
4046 + },
4047 + "node_modules/iconv-lite": {
4048 + "version": "0.6.3",
4049 + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz",
4050 + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
4051 + "license": "MIT",
4052 + "dependencies": {
4053 + "safer-buffer": ">= 2.1.2 < 3.0.0"
4054 + },
4055 + "engines": {
4056 + "node": ">=0.10.0"
4057 + }
4058 + },
4059 + "node_modules/ignore": {
4060 + "version": "5.3.2",
4061 + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz",
4062 + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==",
4063 + "dev": true,
4064 + "license": "MIT",
4065 + "engines": {
4066 + "node": ">= 4"
4067 + }
4068 + },
4069 + "node_modules/import-fresh": {
4070 + "version": "3.3.1",
4071 + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz",
4072 + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==",
4073 + "dev": true,
4074 + "license": "MIT",
4075 + "dependencies": {
4076 + "parent-module": "^1.0.0",
4077 + "resolve-from": "^4.0.0"
4078 + },
4079 + "engines": {
4080 + "node": ">=6"
4081 + },
4082 + "funding": {
4083 + "url": "https://github.com/sponsors/sindresorhus"
4084 + }
4085 + },
4086 + "node_modules/import-meta-resolve": {
4087 + "version": "4.2.0",
4088 + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
4089 + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
4090 + "license": "MIT",
4091 + "funding": {
4092 + "type": "github",
4093 + "url": "https://github.com/sponsors/wooorm"
4094 + }
4095 + },
4096 + "node_modules/imurmurhash": {
4097 + "version": "0.1.4",
4098 + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
4099 + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==",
4100 + "dev": true,
4101 + "license": "MIT",
4102 + "engines": {
4103 + "node": ">=0.8.19"
4104 + }
4105 + },
4106 + "node_modules/inherits": {
4107 + "version": "2.0.4",
4108 + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
4109 + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
4110 + "license": "ISC"
4111 + },
4112 + "node_modules/internmap": {
4113 + "version": "2.0.3",
4114 + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz",
4115 + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
4116 + "license": "ISC",
4117 + "engines": {
4118 + "node": ">=12"
4119 + }
4120 + },
4121 + "node_modules/ipaddr.js": {
4122 + "version": "2.5.0",
4123 + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.5.0.tgz",
4124 + "integrity": "sha512-aq+t5NAc+cS6rZQQVWC2x98CPqGtKKTMDd4Gaodv0wShnItdKg/51djkGJ1hqH+Oy0ivDftCbSLCQob8zso01w==",
4125 + "license": "MIT",
4126 + "engines": {
4127 + "node": ">= 10"
4128 + }
4129 + },
4130 + "node_modules/is-extglob": {
4131 + "version": "2.1.1",
4132 + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
4133 + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
4134 + "dev": true,
4135 + "license": "MIT",
4136 + "engines": {
4137 + "node": ">=0.10.0"
4138 + }
4139 + },
4140 + "node_modules/is-glob": {
4141 + "version": "4.0.3",
4142 + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
4143 + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
4144 + "dev": true,
4145 + "license": "MIT",
4146 + "dependencies": {
4147 + "is-extglob": "^2.1.1"
4148 + },
4149 + "engines": {
4150 + "node": ">=0.10.0"
4151 + }
4152 + },
4153 + "node_modules/is-plain-object": {
4154 + "version": "5.0.0",
4155 + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
4156 + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
4157 + "license": "MIT",
4158 + "engines": {
4159 + "node": ">=0.10.0"
4160 + }
4161 + },
4162 + "node_modules/isexe": {
4163 + "version": "2.0.0",
4164 + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
4165 + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==",
4166 + "license": "ISC"
4167 + },
4168 + "node_modules/jackspeak": {
4169 + "version": "4.2.3",
4170 + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz",
4171 + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==",
4172 + "license": "BlueOak-1.0.0",
4173 + "dependencies": {
4174 + "@isaacs/cliui": "^9.0.0"
4175 + },
4176 + "engines": {
4177 + "node": "20 || >=22"
4178 + },
4179 + "funding": {
4180 + "url": "https://github.com/sponsors/isaacs"
4181 + }
4182 + },
4183 + "node_modules/js-yaml": {
4184 + "version": "4.3.1",
4185 + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.1.tgz",
4186 + "integrity": "sha512-CY6crGq313MX8GkwvB7tzgp99vjQxY1++5y10/BKN/GUfHqWaOGQMNZkBvqSzsZKWk/ijwHlWzzkLulsGHhjWQ==",
4187 + "dev": true,
4188 + "funding": [
4189 + {
4190 + "type": "github",
4191 + "url": "https://github.com/sponsors/puzrin"
4192 + },
4193 + {
4194 + "type": "github",
4195 + "url": "https://github.com/sponsors/nodeca"
4196 + }
4197 + ],
4198 + "license": "MIT",
4199 + "dependencies": {
4200 + "argparse": "^2.0.1"
4201 + },
4202 + "bin": {
4203 + "js-yaml": "bin/js-yaml.js"
4204 + }
4205 + },
4206 + "node_modules/json-buffer": {
4207 + "version": "3.0.1",
4208 + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
4209 + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
4210 + "dev": true,
4211 + "license": "MIT"
4212 + },
4213 + "node_modules/json-schema-ref-resolver": {
4214 + "version": "3.0.0",
4215 + "resolved": "https://registry.npmjs.org/json-schema-ref-resolver/-/json-schema-ref-resolver-3.0.0.tgz",
4216 + "integrity": "sha512-hOrZIVL5jyYFjzk7+y7n5JDzGlU8rfWDuYyHwGa2WA8/pcmMHezp2xsVwxrebD/Q9t8Nc5DboieySDpCp4WG4A==",
4217 + "funding": [
4218 + {
4219 + "type": "github",
4220 + "url": "https://github.com/sponsors/fastify"
4221 + },
4222 + {
4223 + "type": "opencollective",
4224 + "url": "https://opencollective.com/fastify"
4225 + }
4226 + ],
4227 + "license": "MIT",
4228 + "dependencies": {
4229 + "dequal": "^2.0.3"
4230 + }
4231 + },
4232 + "node_modules/json-schema-traverse": {
4233 + "version": "0.4.1",
4234 + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
4235 + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
4236 + "dev": true,
4237 + "license": "MIT"
4238 + },
4239 + "node_modules/json-stable-stringify-without-jsonify": {
4240 + "version": "1.0.1",
4241 + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
4242 + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==",
4243 + "dev": true,
4244 + "license": "MIT"
4245 + },
4246 + "node_modules/katex": {
4247 + "version": "0.16.47",
4248 + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz",
4249 + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==",
4250 + "funding": [
4251 + "https://opencollective.com/katex",
4252 + "https://github.com/sponsors/katex"
4253 + ],
4254 + "license": "MIT",
4255 + "dependencies": {
4256 + "commander": "^8.3.0"
4257 + },
4258 + "bin": {
4259 + "katex": "cli.js"
4260 + }
4261 + },
4262 + "node_modules/katex/node_modules/commander": {
4263 + "version": "8.3.0",
4264 + "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz",
4265 + "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
4266 + "license": "MIT",
4267 + "engines": {
4268 + "node": ">= 12"
4269 + }
4270 + },
4271 + "node_modules/keyv": {
4272 + "version": "4.5.4",
4273 + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz",
4274 + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
4275 + "dev": true,
4276 + "license": "MIT",
4277 + "dependencies": {
4278 + "json-buffer": "3.0.1"
4279 + }
4280 + },
4281 + "node_modules/khroma": {
4282 + "version": "2.1.0",
4283 + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz",
4284 + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
4285 + },
4286 + "node_modules/launder": {
4287 + "version": "1.7.1",
4288 + "resolved": "https://registry.npmjs.org/launder/-/launder-1.7.1.tgz",
4289 + "integrity": "sha512-mU6WRz5EusL9ZZuiZ5SO4Y6C0P9PAUR9iwdb6bzj4KDihm28DiHFw+/yk9DBH4f+Pv1wuzQ4e2jV3oQ7mkIqvw==",
4290 + "license": "MIT",
4291 + "dependencies": {
4292 + "dayjs": "^1.11.7"
4293 + }
4294 + },
4295 + "node_modules/layout-base": {
4296 + "version": "1.0.2",
4297 + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz",
4298 + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==",
4299 + "license": "MIT"
4300 + },
4301 + "node_modules/levn": {
4302 + "version": "0.4.1",
4303 + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz",
4304 + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==",
4305 + "dev": true,
4306 + "license": "MIT",
4307 + "dependencies": {
4308 + "prelude-ls": "^1.2.1",
4309 + "type-check": "~0.4.0"
4310 + },
4311 + "engines": {
4312 + "node": ">= 0.8.0"
4313 + }
4314 + },
4315 + "node_modules/light-my-request": {
4316 + "version": "6.6.0",
4317 + "resolved": "https://registry.npmjs.org/light-my-request/-/light-my-request-6.6.0.tgz",
4318 + "integrity": "sha512-CHYbu8RtboSIoVsHZ6Ye4cj4Aw/yg2oAFimlF7mNvfDV192LR7nDiKtSIfCuLT7KokPSTn/9kfVLm5OGN0A28A==",
4319 + "funding": [
4320 + {
4321 + "type": "github",
4322 + "url": "https://github.com/sponsors/fastify"
4323 + },
4324 + {
4325 + "type": "opencollective",
4326 + "url": "https://opencollective.com/fastify"
4327 + }
4328 + ],
4329 + "license": "BSD-3-Clause",
4330 + "dependencies": {
4331 + "cookie": "^1.0.1",
4332 + "process-warning": "^4.0.0",
4333 + "set-cookie-parser": "^2.6.0"
4334 + }
4335 + },
4336 + "node_modules/light-my-request/node_modules/process-warning": {
4337 + "version": "4.0.1",
4338 + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-4.0.1.tgz",
4339 + "integrity": "sha512-3c2LzQ3rY9d0hc1emcsHhfT9Jwz0cChib/QN89oME2R451w5fy3f0afAhERFZAwrbDU43wk12d0ORBpDVME50Q==",
4340 + "funding": [
4341 + {
4342 + "type": "github",
4343 + "url": "https://github.com/sponsors/fastify"
4344 + },
4345 + {
4346 + "type": "opencollective",
4347 + "url": "https://opencollective.com/fastify"
4348 + }
4349 + ],
4350 + "license": "MIT"
4351 + },
4352 + "node_modules/linebreak": {
4353 + "version": "1.1.0",
4354 + "resolved": "https://registry.npmjs.org/linebreak/-/linebreak-1.1.0.tgz",
4355 + "integrity": "sha512-MHp03UImeVhB7XZtjd0E4n6+3xr5Dq/9xI/5FptGk5FrbDR3zagPa2DS6U8ks/3HjbKWG9Q1M2ufOzxV2qLYSQ==",
4356 + "license": "MIT",
4357 + "dependencies": {
4358 + "base64-js": "0.0.8",
4359 + "unicode-trie": "^2.0.0"
4360 + }
4361 + },
4362 + "node_modules/linkify-it": {
4363 + "version": "5.0.2",
4364 + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz",
4365 + "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==",
4366 + "funding": [
4367 + {
4368 + "type": "github",
4369 + "url": "https://github.com/sponsors/puzrin"
4370 + },
4371 + {
4372 + "type": "github",
4373 + "url": "https://github.com/sponsors/markdown-it"
4374 + }
4375 + ],
4376 + "license": "MIT",
4377 + "dependencies": {
4378 + "uc.micro": "^2.0.0"
4379 + }
4380 + },
4381 + "node_modules/locate-path": {
4382 + "version": "6.0.0",
4383 + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz",
4384 + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==",
4385 + "dev": true,
4386 + "license": "MIT",
4387 + "dependencies": {
4388 + "p-locate": "^5.0.0"
4389 + },
4390 + "engines": {
4391 + "node": ">=10"
4392 + },
4393 + "funding": {
4394 + "url": "https://github.com/sponsors/sindresorhus"
4395 + }
4396 + },
4397 + "node_modules/lodash-es": {
4398 + "version": "4.18.1",
4399 + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz",
4400 + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==",
4401 + "license": "MIT"
4402 + },
4403 + "node_modules/lodash.merge": {
4404 + "version": "4.6.2",
4405 + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
4406 + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
4407 + "dev": true,
4408 + "license": "MIT"
4409 + },
4410 + "node_modules/loupe": {
4411 + "version": "3.2.1",
4412 + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.2.1.tgz",
4413 + "integrity": "sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==",
4414 + "dev": true,
4415 + "license": "MIT"
4416 + },
4417 + "node_modules/lru-cache": {
4418 + "version": "11.5.2",
4419 + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.5.2.tgz",
4420 + "integrity": "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==",
4421 + "license": "BlueOak-1.0.0",
4422 + "engines": {
4423 + "node": "20 || >=22"
4424 + }
4425 + },
4426 + "node_modules/magic-string": {
4427 + "version": "0.30.21",
4428 + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz",
4429 + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==",
4430 + "dev": true,
4431 + "license": "MIT",
4432 + "dependencies": {
4433 + "@jridgewell/sourcemap-codec": "^1.5.5"
4434 + }
4435 + },
4436 + "node_modules/markdown-it": {
4437 + "version": "14.3.0",
4438 + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.0.tgz",
4439 + "integrity": "sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==",
4440 + "funding": [
4441 + {
4442 + "type": "github",
4443 + "url": "https://github.com/sponsors/puzrin"
4444 + },
4445 + {
4446 + "type": "github",
4447 + "url": "https://github.com/sponsors/markdown-it"
4448 + }
4449 + ],
4450 + "license": "MIT",
4451 + "dependencies": {
4452 + "argparse": "^2.0.1",
4453 + "entities": "^4.5.0",
4454 + "linkify-it": "^5.0.2",
4455 + "mdurl": "^2.0.0",
4456 + "punycode.js": "^2.3.1",
4457 + "uc.micro": "^2.1.0"
4458 + },
4459 + "bin": {
4460 + "markdown-it": "bin/markdown-it.mjs"
4461 + }
4462 + },
4463 + "node_modules/markdown-it-anchor": {
4464 + "version": "9.2.1",
4465 + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-9.2.1.tgz",
4466 + "integrity": "sha512-p6APiLJDFAW2GEvaavDvhIBn7jrX2jLv77NkBGgNacFTurbORYc4pyYySg/mI6mpR6cHQuAtzKtmqgQr4K8dsQ==",
4467 + "license": "Unlicense",
4468 + "peerDependencies": {
4469 + "@types/markdown-it": "*",
4470 + "markdown-it": "*"
4471 + }
4472 + },
4473 + "node_modules/markdown-it-emoji": {
4474 + "version": "3.1.0",
4475 + "resolved": "https://registry.npmjs.org/markdown-it-emoji/-/markdown-it-emoji-3.1.0.tgz",
4476 + "integrity": "sha512-NhmMEH2ywduD4Nty1E8uB5NqfLhAT1VR0dyvoJyStKOqCzbZmVdn/+8wj7zpDsb/fLBikpCPsWwxqKlvMmbz4g==",
4477 + "license": "MIT"
4478 + },
4479 + "node_modules/markdown-it-footnote": {
4480 + "version": "4.0.0",
4481 + "resolved": "https://registry.npmjs.org/markdown-it-footnote/-/markdown-it-footnote-4.0.0.tgz",
4482 + "integrity": "sha512-WYJ7urf+khJYl3DqofQpYfEYkZKbmXmwxQV8c8mO/hGIhgZ1wOe7R4HLFNwqx7TjILbnC98fuyeSsin19JdFcQ==",
4483 + "license": "MIT"
4484 + },
4485 + "node_modules/markdown-it-task-lists": {
4486 + "version": "2.1.1",
4487 + "resolved": "https://registry.npmjs.org/markdown-it-task-lists/-/markdown-it-task-lists-2.1.1.tgz",
4488 + "integrity": "sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==",
4489 + "license": "ISC"
4490 + },
4491 + "node_modules/marked": {
4492 + "version": "16.4.2",
4493 + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz",
4494 + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==",
4495 + "license": "MIT",
4496 + "bin": {
4497 + "marked": "bin/marked.js"
4498 + },
4499 + "engines": {
4500 + "node": ">= 20"
4501 + }
4502 + },
4503 + "node_modules/mdast-util-to-hast": {
4504 + "version": "13.2.1",
4505 + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz",
4506 + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==",
4507 + "license": "MIT",
4508 + "dependencies": {
4509 + "@types/hast": "^3.0.0",
4510 + "@types/mdast": "^4.0.0",
4511 + "@ungap/structured-clone": "^1.0.0",
4512 + "devlop": "^1.0.0",
4513 + "micromark-util-sanitize-uri": "^2.0.0",
4514 + "trim-lines": "^3.0.0",
4515 + "unist-util-position": "^5.0.0",
4516 + "unist-util-visit": "^5.0.0",
4517 + "vfile": "^6.0.0"
4518 + },
4519 + "funding": {
4520 + "type": "opencollective",
4521 + "url": "https://opencollective.com/unified"
4522 + }
4523 + },
4524 + "node_modules/mdurl": {
4525 + "version": "2.1.0",
4526 + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz",
4527 + "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==",
4528 + "license": "MIT"
4529 + },
4530 + "node_modules/mermaid": {
4531 + "version": "11.16.1",
4532 + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.16.1.tgz",
4533 + "integrity": "sha512-TQsq6u22fAn3rek5VOubrhKPo1g5hwC3FXUN9hiyupTckcYiGuuKGkNQrKYwGJkXUxZdojwRG46gsSCFZMDp4g==",
4534 + "license": "MIT",
4535 + "dependencies": {
4536 + "@braintree/sanitize-url": "^7.1.2",
4537 + "@iconify/utils": "^3.0.2",
4538 + "@mermaid-js/parser": "^1.2.0",
4539 + "@types/d3": "^7.4.3",
4540 + "@upsetjs/venn.js": "^2.0.0",
4541 + "cytoscape": "^3.33.3",
4542 + "cytoscape-cose-bilkent": "^4.1.0",
4543 + "cytoscape-fcose": "^2.2.0",
4544 + "d3": "^7.9.0",
4545 + "d3-sankey": "^0.12.3",
4546 + "dagre-d3-es": "7.0.14",
4547 + "dayjs": "^1.11.20",
4548 + "dompurify": "^3.3.3",
4549 + "es-toolkit": "^1.45.1",
4550 + "katex": "^0.16.45",
4551 + "khroma": "^2.1.0",
4552 + "marked": "^16.3.0",
4553 + "roughjs": "^4.6.6",
4554 + "stylis": "^4.3.6",
4555 + "ts-dedent": "^2.2.0",
4556 + "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0"
4557 + }
4558 + },
4559 + "node_modules/micromark-util-character": {
4560 + "version": "2.1.1",
4561 + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz",
4562 + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==",
4563 + "funding": [
4564 + {
4565 + "type": "GitHub Sponsors",
4566 + "url": "https://github.com/sponsors/unifiedjs"
4567 + },
4568 + {
4569 + "type": "OpenCollective",
4570 + "url": "https://opencollective.com/unified"
4571 + }
4572 + ],
4573 + "license": "MIT",
4574 + "dependencies": {
4575 + "micromark-util-symbol": "^2.0.0",
4576 + "micromark-util-types": "^2.0.0"
4577 + }
4578 + },
4579 + "node_modules/micromark-util-encode": {
4580 + "version": "2.0.1",
4581 + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz",
4582 + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==",
4583 + "funding": [
4584 + {
4585 + "type": "GitHub Sponsors",
4586 + "url": "https://github.com/sponsors/unifiedjs"
4587 + },
4588 + {
4589 + "type": "OpenCollective",
4590 + "url": "https://opencollective.com/unified"
4591 + }
4592 + ],
4593 + "license": "MIT"
4594 + },
4595 + "node_modules/micromark-util-sanitize-uri": {
4596 + "version": "2.0.1",
4597 + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz",
4598 + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==",
4599 + "funding": [
4600 + {
4601 + "type": "GitHub Sponsors",
4602 + "url": "https://github.com/sponsors/unifiedjs"
4603 + },
4604 + {
4605 + "type": "OpenCollective",
4606 + "url": "https://opencollective.com/unified"
4607 + }
4608 + ],
4609 + "license": "MIT",
4610 + "dependencies": {
4611 + "micromark-util-character": "^2.0.0",
4612 + "micromark-util-encode": "^2.0.0",
4613 + "micromark-util-symbol": "^2.0.0"
4614 + }
4615 + },
4616 + "node_modules/micromark-util-symbol": {
4617 + "version": "2.0.1",
4618 + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz",
4619 + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==",
4620 + "funding": [
4621 + {
4622 + "type": "GitHub Sponsors",
4623 + "url": "https://github.com/sponsors/unifiedjs"
4624 + },
4625 + {
4626 + "type": "OpenCollective",
4627 + "url": "https://opencollective.com/unified"
4628 + }
4629 + ],
4630 + "license": "MIT"
4631 + },
4632 + "node_modules/micromark-util-types": {
4633 + "version": "2.0.2",
4634 + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.2.tgz",
4635 + "integrity": "sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==",
4636 + "funding": [
4637 + {
4638 + "type": "GitHub Sponsors",
4639 + "url": "https://github.com/sponsors/unifiedjs"
4640 + },
4641 + {
4642 + "type": "OpenCollective",
4643 + "url": "https://opencollective.com/unified"
4644 + }
4645 + ],
4646 + "license": "MIT"
4647 + },
4648 + "node_modules/mime": {
4649 + "version": "3.0.0",
4650 + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz",
4651 + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==",
4652 + "license": "MIT",
4653 + "bin": {
4654 + "mime": "cli.js"
4655 + },
4656 + "engines": {
4657 + "node": ">=10.0.0"
4658 + }
4659 + },
4660 + "node_modules/minimatch": {
4661 + "version": "3.1.5",
4662 + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz",
4663 + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==",
4664 + "dev": true,
4665 + "license": "ISC",
4666 + "dependencies": {
4667 + "brace-expansion": "^1.1.7"
4668 + },
4669 + "engines": {
4670 + "node": "*"
4671 + }
4672 + },
4673 + "node_modules/minipass": {
4674 + "version": "7.1.3",
4675 + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz",
4676 + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==",
4677 + "license": "BlueOak-1.0.0",
4678 + "engines": {
4679 + "node": ">=16 || 14 >=14.17"
4680 + }
4681 + },
4682 + "node_modules/ms": {
4683 + "version": "2.1.3",
4684 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
4685 + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
4686 + "dev": true,
4687 + "license": "MIT"
4688 + },
4689 + "node_modules/nanoid": {
4690 + "version": "3.3.18",
4691 + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.18.tgz",
4692 + "integrity": "sha512-DTg4MJbGMWkfi6VZFdNt2/caMbQy4Ou+Op/hJQvGEWcnVfoA1QA+xzRKAzw9jD6+GVOOeYr/mIcuDSdug6F6+w==",
4693 + "funding": [
4694 + {
4695 + "type": "github",
4696 + "url": "https://github.com/sponsors/ai"
4697 + }
4698 + ],
4699 + "license": "MIT",
4700 + "bin": {
4701 + "nanoid": "bin/nanoid.cjs"
4702 + },
4703 + "engines": {
4704 + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
4705 + }
4706 + },
4707 + "node_modules/natural-compare": {
4708 + "version": "1.4.0",
4709 + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
4710 + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
4711 + "dev": true,
4712 + "license": "MIT"
4713 + },
4714 + "node_modules/node-addon-api": {
4715 + "version": "8.9.1",
4716 + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.1.tgz",
4717 + "integrity": "sha512-4eUQWVPCUUUiBjLnHS3cXWeC6ryoPUc0U3rP7IuzapoGbzMqd/r6KKO0clr0b+snQhsrueFEhCZDdK+LK7hxKg==",
4718 + "license": "MIT",
4719 + "engines": {
4720 + "node": "^18 || ^20 || >= 21"
4721 + }
4722 + },
4723 + "node_modules/node-gyp-build": {
4724 + "version": "4.8.4",
4725 + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz",
4726 + "integrity": "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==",
4727 + "license": "MIT",
4728 + "bin": {
4729 + "node-gyp-build": "bin.js",
4730 + "node-gyp-build-optional": "optional.js",
4731 + "node-gyp-build-test": "build-test.js"
4732 + }
4733 + },
4734 + "node_modules/nunjucks": {
4735 + "version": "3.2.4",
4736 + "resolved": "https://registry.npmjs.org/nunjucks/-/nunjucks-3.2.4.tgz",
4737 + "integrity": "sha512-26XRV6BhkgK0VOxfbU5cQI+ICFUtMLixv1noZn1tGU38kQH5A5nmmbk/O45xdyBhD1esk47nKrY0mvQpZIhRjQ==",
4738 + "license": "BSD-2-Clause",
4739 + "dependencies": {
4740 + "a-sync-waterfall": "^1.0.0",
4741 + "asap": "^2.0.3",
4742 + "commander": "^5.1.0"
4743 + },
4744 + "bin": {
4745 + "nunjucks-precompile": "bin/precompile"
4746 + },
4747 + "engines": {
4748 + "node": ">= 6.9.0"
4749 + },
4750 + "peerDependencies": {
4751 + "chokidar": "^3.3.0"
4752 + },
4753 + "peerDependenciesMeta": {
4754 + "chokidar": {
4755 + "optional": true
4756 + }
4757 + }
4758 + },
4759 + "node_modules/nunjucks/node_modules/commander": {
4760 + "version": "5.1.0",
4761 + "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz",
4762 + "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==",
4763 + "license": "MIT",
4764 + "engines": {
4765 + "node": ">= 6"
4766 + }
4767 + },
4768 + "node_modules/on-exit-leak-free": {
4769 + "version": "2.1.2",
4770 + "resolved": "https://registry.npmjs.org/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz",
4771 + "integrity": "sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==",
4772 + "license": "MIT",
4773 + "engines": {
4774 + "node": ">=14.0.0"
4775 + }
4776 + },
4777 + "node_modules/oniguruma-to-es": {
4778 + "version": "2.3.0",
4779 + "resolved": "https://registry.npmjs.org/oniguruma-to-es/-/oniguruma-to-es-2.3.0.tgz",
4780 + "integrity": "sha512-bwALDxriqfKGfUufKGGepCzu9x7nJQuoRoAFp4AnwehhC2crqrDIAP/uN2qdlsAvSMpeRC3+Yzhqc7hLmle5+g==",
4781 + "license": "MIT",
4782 + "dependencies": {
4783 + "emoji-regex-xs": "^1.0.0",
4784 + "regex": "^5.1.1",
4785 + "regex-recursion": "^5.1.1"
4786 + }
4787 + },
4788 + "node_modules/optionator": {
4789 + "version": "0.9.4",
4790 + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
4791 + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
4792 + "dev": true,
4793 + "license": "MIT",
4794 + "dependencies": {
4795 + "deep-is": "^0.1.3",
4796 + "fast-levenshtein": "^2.0.6",
4797 + "levn": "^0.4.1",
4798 + "prelude-ls": "^1.2.1",
4799 + "type-check": "^0.4.0",
4800 + "word-wrap": "^1.2.5"
4801 + },
4802 + "engines": {
4803 + "node": ">= 0.8.0"
4804 + }
4805 + },
4806 + "node_modules/p-limit": {
4807 + "version": "3.1.0",
4808 + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz",
4809 + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==",
4810 + "dev": true,
4811 + "license": "MIT",
4812 + "dependencies": {
4813 + "yocto-queue": "^0.1.0"
4814 + },
4815 + "engines": {
4816 + "node": ">=10"
4817 + },
4818 + "funding": {
4819 + "url": "https://github.com/sponsors/sindresorhus"
4820 + }
4821 + },
4822 + "node_modules/p-locate": {
4823 + "version": "5.0.0",
4824 + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz",
4825 + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==",
4826 + "dev": true,
4827 + "license": "MIT",
4828 + "dependencies": {
4829 + "p-limit": "^3.0.2"
4830 + },
4831 + "engines": {
4832 + "node": ">=10"
4833 + },
4834 + "funding": {
4835 + "url": "https://github.com/sponsors/sindresorhus"
4836 + }
4837 + },
4838 + "node_modules/package-json-from-dist": {
4839 + "version": "1.0.1",
4840 + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz",
4841 + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==",
4842 + "license": "BlueOak-1.0.0"
4843 + },
4844 + "node_modules/package-manager-detector": {
4845 + "version": "1.8.0",
4846 + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz",
4847 + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==",
4848 + "license": "MIT"
4849 + },
4850 + "node_modules/pako": {
4851 + "version": "0.2.9",
4852 + "resolved": "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz",
4853 + "integrity": "sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==",
4854 + "license": "MIT"
4855 + },
4856 + "node_modules/parent-module": {
4857 + "version": "1.0.1",
4858 + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz",
4859 + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==",
4860 + "dev": true,
4861 + "license": "MIT",
4862 + "dependencies": {
4863 + "callsites": "^3.0.0"
4864 + },
4865 + "engines": {
4866 + "node": ">=6"
4867 + }
4868 + },
4869 + "node_modules/parse-css-color": {
4870 + "version": "0.2.1",
4871 + "resolved": "https://registry.npmjs.org/parse-css-color/-/parse-css-color-0.2.1.tgz",
4872 + "integrity": "sha512-bwS/GGIFV3b6KS4uwpzCFj4w297Yl3uqnSgIPsoQkx7GMLROXfMnWvxfNkL0oh8HVhZA4hvJoEoEIqonfJ3BWg==",
4873 + "license": "MIT",
4874 + "dependencies": {
4875 + "color-name": "^1.1.4",
4876 + "hex-rgb": "^4.1.0"
4877 + }
4878 + },
4879 + "node_modules/parse-srcset": {
4880 + "version": "1.0.2",
4881 + "resolved": "https://registry.npmjs.org/parse-srcset/-/parse-srcset-1.0.2.tgz",
4882 + "integrity": "sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==",
4883 + "license": "MIT"
4884 + },
4885 + "node_modules/path-data-parser": {
4886 + "version": "0.1.0",
4887 + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz",
4888 + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==",
4889 + "license": "MIT"
4890 + },
4891 + "node_modules/path-exists": {
4892 + "version": "4.0.0",
4893 + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
4894 + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
4895 + "dev": true,
4896 + "license": "MIT",
4897 + "engines": {
4898 + "node": ">=8"
4899 + }
4900 + },
4901 + "node_modules/path-key": {
4902 + "version": "3.1.1",
4903 + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
4904 + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
4905 + "license": "MIT",
4906 + "engines": {
4907 + "node": ">=8"
4908 + }
4909 + },
4910 + "node_modules/path-scurry": {
4911 + "version": "2.0.2",
4912 + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz",
4913 + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==",
4914 + "license": "BlueOak-1.0.0",
4915 + "dependencies": {
4916 + "lru-cache": "^11.0.0",
4917 + "minipass": "^7.1.2"
4918 + },
4919 + "engines": {
4920 + "node": "18 || 20 || >=22"
4921 + },
4922 + "funding": {
4923 + "url": "https://github.com/sponsors/isaacs"
4924 + }
4925 + },
4926 + "node_modules/pathe": {
4927 + "version": "1.1.2",
4928 + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz",
4929 + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==",
4930 + "dev": true,
4931 + "license": "MIT"
4932 + },
4933 + "node_modules/pathval": {
4934 + "version": "2.0.1",
4935 + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.1.tgz",
4936 + "integrity": "sha512-//nshmD55c46FuFw26xV/xFAaB5HF9Xdap7HJBBnrKdAd6/GxDBaNA1870O79+9ueg61cZLSVc+OaFlfmObYVQ==",
4937 + "dev": true,
4938 + "license": "MIT",
4939 + "engines": {
4940 + "node": ">= 14.16"
4941 + }
4942 + },
4943 + "node_modules/picocolors": {
4944 + "version": "1.1.1",
4945 + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz",
4946 + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==",
4947 + "license": "ISC"
4948 + },
4949 + "node_modules/pino": {
4950 + "version": "10.3.1",
4951 + "resolved": "https://registry.npmjs.org/pino/-/pino-10.3.1.tgz",
4952 + "integrity": "sha512-r34yH/GlQpKZbU1BvFFqOjhISRo1MNx1tWYsYvmj6KIRHSPMT2+yHOEb1SG6NMvRoHRF0a07kCOox/9yakl1vg==",
4953 + "license": "MIT",
4954 + "dependencies": {
4955 + "@pinojs/redact": "^0.4.0",
4956 + "atomic-sleep": "^1.0.0",
4957 + "on-exit-leak-free": "^2.1.0",
4958 + "pino-abstract-transport": "^3.0.0",
4959 + "pino-std-serializers": "^7.0.0",
4960 + "process-warning": "^5.0.0",
4961 + "quick-format-unescaped": "^4.0.3",
4962 + "real-require": "^0.2.0",
4963 + "safe-stable-stringify": "^2.3.1",
4964 + "sonic-boom": "^4.0.1",
4965 + "thread-stream": "^4.0.0"
4966 + },
4967 + "bin": {
4968 + "pino": "bin.js"
4969 + }
4970 + },
4971 + "node_modules/pino-abstract-transport": {
4972 + "version": "3.0.0",
4973 + "resolved": "https://registry.npmjs.org/pino-abstract-transport/-/pino-abstract-transport-3.0.0.tgz",
4974 + "integrity": "sha512-wlfUczU+n7Hy/Ha5j9a/gZNy7We5+cXp8YL+X+PG8S0KXxw7n/JXA3c46Y0zQznIJ83URJiwy7Lh56WLokNuxg==",
4975 + "license": "MIT",
4976 + "dependencies": {
4977 + "split2": "^4.0.0"
4978 + }
4979 + },
4980 + "node_modules/pino-std-serializers": {
4981 + "version": "7.1.0",
4982 + "resolved": "https://registry.npmjs.org/pino-std-serializers/-/pino-std-serializers-7.1.0.tgz",
4983 + "integrity": "sha512-BndPH67/JxGExRgiX1dX0w1FvZck5Wa4aal9198SrRhZjH3GxKQUKIBnYJTdj2HDN3UQAS06HlfcSbQj2OHmaw==",
4984 + "license": "MIT"
4985 + },
4986 + "node_modules/points-on-curve": {
4987 + "version": "0.2.0",
4988 + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz",
4989 + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==",
4990 + "license": "MIT"
4991 + },
4992 + "node_modules/points-on-path": {
4993 + "version": "0.2.1",
4994 + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz",
4995 + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==",
4996 + "license": "MIT",
4997 + "dependencies": {
4998 + "path-data-parser": "0.1.0",
4999 + "points-on-curve": "0.2.0"
5000 + }
5001 + },
5002 + "node_modules/postcss": {
5003 + "version": "8.5.26",
5004 + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.26.tgz",
5005 + "integrity": "sha512-u82N74LFzG8ca+dD8puPnplTXoGH4fTPpVGuIbt36G3qvNlkvfD0lEAZSxaly3KX8TS/L1A1gsCEmvKmBcVbkQ==",
5006 + "funding": [
5007 + {
5008 + "type": "opencollective",
5009 + "url": "https://opencollective.com/postcss/"
5010 + },
5011 + {
5012 + "type": "tidelift",
5013 + "url": "https://tidelift.com/funding/github/npm/postcss"
5014 + },
5015 + {
5016 + "type": "github",
5017 + "url": "https://github.com/sponsors/ai"
5018 + }
5019 + ],
5020 + "license": "MIT",
5021 + "dependencies": {
5022 + "nanoid": "^3.3.17",
5023 + "picocolors": "^1.1.1",
5024 + "source-map-js": "^1.2.1"
5025 + },
5026 + "engines": {
5027 + "node": "^10 || ^12 || >=14"
5028 + }
5029 + },
5030 + "node_modules/postcss-value-parser": {
5031 + "version": "4.2.0",
5032 + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
5033 + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
5034 + "license": "MIT"
5035 + },
5036 + "node_modules/prelude-ls": {
5037 + "version": "1.2.1",
5038 + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
5039 + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==",
5040 + "dev": true,
5041 + "license": "MIT",
5042 + "engines": {
5043 + "node": ">= 0.8.0"
5044 + }
5045 + },
5046 + "node_modules/process-warning": {
5047 + "version": "5.1.0",
5048 + "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-5.1.0.tgz",
5049 + "integrity": "sha512-jQSaVHsPgtyw60e1rQ/A+/ArPEj/S8pS/vFnyGa/gYFXrKk/6RuDkoqVDQ5NI5MmS01698ltlAk0NoDBNLujRw==",
5050 + "funding": [
5051 + {
5052 + "type": "github",
5053 + "url": "https://github.com/sponsors/fastify"
5054 + },
5055 + {
5056 + "type": "opencollective",
5057 + "url": "https://opencollective.com/fastify"
5058 + }
5059 + ],
5060 + "license": "MIT"
5061 + },
5062 + "node_modules/property-information": {
5063 + "version": "7.2.0",
5064 + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz",
5065 + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==",
5066 + "license": "MIT",
5067 + "funding": {
5068 + "type": "github",
5069 + "url": "https://github.com/sponsors/wooorm"
5070 + }
5071 + },
5072 + "node_modules/punycode": {
5073 + "version": "2.3.1",
5074 + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
5075 + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
5076 + "dev": true,
5077 + "license": "MIT",
5078 + "engines": {
5079 + "node": ">=6"
5080 + }
5081 + },
5082 + "node_modules/punycode.js": {
5083 + "version": "2.3.1",
5084 + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
5085 + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
5086 + "license": "MIT",
5087 + "engines": {
5088 + "node": ">=6"
5089 + }
5090 + },
5091 + "node_modules/quick-format-unescaped": {
5092 + "version": "4.0.4",
5093 + "resolved": "https://registry.npmjs.org/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz",
5094 + "integrity": "sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==",
5095 + "license": "MIT"
5096 + },
5097 + "node_modules/real-require": {
5098 + "version": "0.2.0",
5099 + "resolved": "https://registry.npmjs.org/real-require/-/real-require-0.2.0.tgz",
5100 + "integrity": "sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==",
5101 + "license": "MIT",
5102 + "engines": {
5103 + "node": ">= 12.13.0"
5104 + }
5105 + },
5106 + "node_modules/regex": {
5107 + "version": "5.1.1",
5108 + "resolved": "https://registry.npmjs.org/regex/-/regex-5.1.1.tgz",
5109 + "integrity": "sha512-dN5I359AVGPnwzJm2jN1k0W9LPZ+ePvoOeVMMfqIMFz53sSwXkxaJoxr50ptnsC771lK95BnTrVSZxq0b9yCGw==",
5110 + "license": "MIT",
5111 + "dependencies": {
5112 + "regex-utilities": "^2.3.0"
5113 + }
5114 + },
5115 + "node_modules/regex-recursion": {
5116 + "version": "5.1.1",
5117 + "resolved": "https://registry.npmjs.org/regex-recursion/-/regex-recursion-5.1.1.tgz",
5118 + "integrity": "sha512-ae7SBCbzVNrIjgSbh7wMznPcQel1DNlDtzensnFxpiNpXt1U2ju/bHugH422r+4LAVS1FpW1YCwilmnNsjum9w==",
5119 + "license": "MIT",
5120 + "dependencies": {
5121 + "regex": "^5.1.1",
5122 + "regex-utilities": "^2.3.0"
5123 + }
5124 + },
5125 + "node_modules/regex-utilities": {
5126 + "version": "2.3.0",
5127 + "resolved": "https://registry.npmjs.org/regex-utilities/-/regex-utilities-2.3.0.tgz",
5128 + "integrity": "sha512-8VhliFJAWRaUiVvREIiW2NXXTmHs4vMNnSzuJVhscgmGav3g9VDxLrQndI3dZZVVdp0ZO/5v0xmX516/7M9cng==",
5129 + "license": "MIT"
5130 + },
5131 + "node_modules/require-from-string": {
5132 + "version": "2.0.2",
5133 + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz",
5134 + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==",
5135 + "license": "MIT",
5136 + "engines": {
5137 + "node": ">=0.10.0"
5138 + }
5139 + },
5140 + "node_modules/resolve-from": {
5141 + "version": "4.0.0",
5142 + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
5143 + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
5144 + "dev": true,
5145 + "license": "MIT",
5146 + "engines": {
5147 + "node": ">=4"
5148 + }
5149 + },
5150 + "node_modules/ret": {
5151 + "version": "0.5.0",
5152 + "resolved": "https://registry.npmjs.org/ret/-/ret-0.5.0.tgz",
5153 + "integrity": "sha512-I1XxrZSQ+oErkRR4jYbAyEEu2I0avBvvMM5JN+6EBprOGRCs63ENqZ3vjavq8fBw2+62G5LF5XelKwuJpcvcxw==",
5154 + "license": "MIT",
5155 + "engines": {
5156 + "node": ">=10"
5157 + }
5158 + },
5159 + "node_modules/reusify": {
5160 + "version": "1.1.0",
5161 + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz",
5162 + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==",
5163 + "license": "MIT",
5164 + "engines": {
5165 + "iojs": ">=1.0.0",
5166 + "node": ">=0.10.0"
5167 + }
5168 + },
5169 + "node_modules/rfdc": {
5170 + "version": "1.4.1",
5171 + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz",
5172 + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==",
5173 + "license": "MIT"
5174 + },
5175 + "node_modules/robust-predicates": {
5176 + "version": "3.0.3",
5177 + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz",
5178 + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==",
5179 + "license": "Unlicense"
5180 + },
5181 + "node_modules/rollup": {
5182 + "version": "4.62.4",
5183 + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.62.4.tgz",
5184 + "integrity": "sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==",
5185 + "dev": true,
5186 + "license": "MIT",
5187 + "dependencies": {
5188 + "@types/estree": "1.0.9"
5189 + },
5190 + "bin": {
5191 + "rollup": "dist/bin/rollup"
5192 + },
5193 + "engines": {
5194 + "node": ">=18.0.0",
5195 + "npm": ">=8.0.0"
5196 + },
5197 + "optionalDependencies": {
5198 + "@napi-rs/lzma-linux-x64-gnu": "1.5.1",
5199 + "@rollup/rollup-android-arm-eabi": "4.62.4",
5200 + "@rollup/rollup-android-arm64": "4.62.4",
5201 + "@rollup/rollup-darwin-arm64": "4.62.4",
5202 + "@rollup/rollup-darwin-x64": "4.62.4",
5203 + "@rollup/rollup-freebsd-arm64": "4.62.4",
5204 + "@rollup/rollup-freebsd-x64": "4.62.4",
5205 + "@rollup/rollup-linux-arm-gnueabihf": "4.62.4",
5206 + "@rollup/rollup-linux-arm-musleabihf": "4.62.4",
5207 + "@rollup/rollup-linux-arm64-gnu": "4.62.4",
5208 + "@rollup/rollup-linux-arm64-musl": "4.62.4",
5209 + "@rollup/rollup-linux-loong64-gnu": "4.62.4",
5210 + "@rollup/rollup-linux-loong64-musl": "4.62.4",
5211 + "@rollup/rollup-linux-ppc64-gnu": "4.62.4",
5212 + "@rollup/rollup-linux-ppc64-musl": "4.62.4",
5213 + "@rollup/rollup-linux-riscv64-gnu": "4.62.4",
5214 + "@rollup/rollup-linux-riscv64-musl": "4.62.4",
5215 + "@rollup/rollup-linux-s390x-gnu": "4.62.4",
5216 + "@rollup/rollup-linux-x64-gnu": "4.62.4",
5217 + "@rollup/rollup-linux-x64-musl": "4.62.4",
5218 + "@rollup/rollup-openbsd-x64": "4.62.4",
5219 + "@rollup/rollup-openharmony-arm64": "4.62.4",
5220 + "@rollup/rollup-win32-arm64-msvc": "4.62.4",
5221 + "@rollup/rollup-win32-ia32-msvc": "4.62.4",
5222 + "@rollup/rollup-win32-x64-gnu": "4.62.4",
5223 + "@rollup/rollup-win32-x64-msvc": "4.62.4",
5224 + "fsevents": "~2.3.2"
5225 + }
5226 + },
5227 + "node_modules/roughjs": {
5228 + "version": "4.6.6",
5229 + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz",
5230 + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==",
5231 + "license": "MIT",
5232 + "dependencies": {
5233 + "hachure-fill": "^0.5.2",
5234 + "path-data-parser": "^0.1.0",
5235 + "points-on-curve": "^0.2.0",
5236 + "points-on-path": "^0.2.1"
5237 + }
5238 + },
5239 + "node_modules/rw": {
5240 + "version": "1.3.3",
5241 + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz",
5242 + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==",
5243 + "license": "BSD-3-Clause"
5244 + },
5245 + "node_modules/safe-buffer": {
5246 + "version": "5.2.1",
5247 + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
5248 + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
5249 + "funding": [
5250 + {
5251 + "type": "github",
5252 + "url": "https://github.com/sponsors/feross"
5253 + },
5254 + {
5255 + "type": "patreon",
5256 + "url": "https://www.patreon.com/feross"
5257 + },
5258 + {
5259 + "type": "consulting",
5260 + "url": "https://feross.org/support"
5261 + }
5262 + ],
5263 + "license": "MIT"
5264 + },
5265 + "node_modules/safe-regex2": {
5266 + "version": "5.1.1",
5267 + "resolved": "https://registry.npmjs.org/safe-regex2/-/safe-regex2-5.1.1.tgz",
5268 + "integrity": "sha512-mOSBvHGDZMuIEZMdOz/aCEYDCv0E7nfcNsIhUF+/P+xC7Hyf3FkvymqgPbg9D1EdSGu+uKbJgy09K/RKKc7kJA==",
5269 + "funding": [
5270 + {
5271 + "type": "github",
5272 + "url": "https://github.com/sponsors/fastify"
5273 + },
5274 + {
5275 + "type": "opencollective",
5276 + "url": "https://opencollective.com/fastify"
5277 + }
5278 + ],
5279 + "license": "MIT",
5280 + "dependencies": {
5281 + "ret": "~0.5.0"
5282 + },
5283 + "bin": {
5284 + "safe-regex2": "bin/safe-regex2.js"
5285 + }
5286 + },
5287 + "node_modules/safe-stable-stringify": {
5288 + "version": "2.5.0",
5289 + "resolved": "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz",
5290 + "integrity": "sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA==",
5291 + "license": "MIT",
5292 + "engines": {
5293 + "node": ">=10"
5294 + }
5295 + },
5296 + "node_modules/safer-buffer": {
5297 + "version": "2.1.2",
5298 + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
5299 + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
5300 + "license": "MIT"
5301 + },
5302 + "node_modules/sanitize-html": {
5303 + "version": "2.17.6",
5304 + "resolved": "https://registry.npmjs.org/sanitize-html/-/sanitize-html-2.17.6.tgz",
5305 + "integrity": "sha512-M4bo9tfv1yfhQZZKkc6dL07ALrGJtfvNOuhX3hU9AVPR/uPQ+nKOJBqTYc7LfMQblTW04mtSWDJWEyLvygJsLA==",
5306 + "license": "MIT",
5307 + "dependencies": {
5308 + "deepmerge": "^4.2.2",
5309 + "escape-string-regexp": "^4.0.0",
5310 + "htmlparser2": "^12.0.0",
5311 + "is-plain-object": "^5.0.0",
5312 + "launder": "^1.7.1",
5313 + "parse-srcset": "^1.0.2",
5314 + "postcss": "^8.3.11"
5315 + },
5316 + "engines": {
5317 + "node": ">=22.12.0"
5318 + }
5319 + },
5320 + "node_modules/satori": {
5321 + "version": "0.12.2",
5322 + "resolved": "https://registry.npmjs.org/satori/-/satori-0.12.2.tgz",
5323 + "integrity": "sha512-3C/laIeE6UUe9A+iQ0A48ywPVCCMKCNSTU5Os101Vhgsjd3AAxGNjyq0uAA8kulMPK5n0csn8JlxPN9riXEjLA==",
5324 + "license": "MPL-2.0",
5325 + "dependencies": {
5326 + "@shuding/opentype.js": "1.4.0-beta.0",
5327 + "css-background-parser": "^0.1.0",
5328 + "css-box-shadow": "1.0.0-3",
5329 + "css-gradient-parser": "^0.0.16",
5330 + "css-to-react-native": "^3.0.0",
5331 + "emoji-regex": "^10.2.1",
5332 + "escape-html": "^1.0.3",
5333 + "linebreak": "^1.1.0",
5334 + "parse-css-color": "^0.2.1",
5335 + "postcss-value-parser": "^4.2.0",
5336 + "yoga-wasm-web": "^0.3.3"
5337 + },
5338 + "engines": {
5339 + "node": ">=16"
5340 + }
5341 + },
5342 + "node_modules/secure-json-parse": {
5343 + "version": "4.1.0",
5344 + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-4.1.0.tgz",
5345 + "integrity": "sha512-l4KnYfEyqYJxDwlNVyRfO2E4NTHfMKAWdUuA8J0yve2Dz/E/PdBepY03RvyJpssIpRFwJoCD55wA+mEDs6ByWA==",
5346 + "funding": [
5347 + {
5348 + "type": "github",
5349 + "url": "https://github.com/sponsors/fastify"
5350 + },
5351 + {
5352 + "type": "opencollective",
5353 + "url": "https://opencollective.com/fastify"
5354 + }
5355 + ],
5356 + "license": "BSD-3-Clause"
5357 + },
5358 + "node_modules/semver": {
5359 + "version": "7.8.5",
5360 + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz",
5361 + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==",
5362 + "license": "ISC",
5363 + "bin": {
5364 + "semver": "bin/semver.js"
5365 + },
5366 + "engines": {
5367 + "node": ">=10"
5368 + }
5369 + },
5370 + "node_modules/set-cookie-parser": {
5371 + "version": "2.7.2",
5372 + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz",
5373 + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==",
5374 + "license": "MIT"
5375 + },
5376 + "node_modules/setprototypeof": {
5377 + "version": "1.2.0",
5378 + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
5379 + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
5380 + "license": "ISC"
5381 + },
5382 + "node_modules/shebang-command": {
5383 + "version": "2.0.0",
5384 + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
5385 + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
5386 + "license": "MIT",
5387 + "dependencies": {
5388 + "shebang-regex": "^3.0.0"
5389 + },
5390 + "engines": {
5391 + "node": ">=8"
5392 + }
5393 + },
5394 + "node_modules/shebang-regex": {
5395 + "version": "3.0.0",
5396 + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
5397 + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
5398 + "license": "MIT",
5399 + "engines": {
5400 + "node": ">=8"
5401 + }
5402 + },
5403 + "node_modules/shiki": {
5404 + "version": "1.29.2",
5405 + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.29.2.tgz",
5406 + "integrity": "sha512-njXuliz/cP+67jU2hukkxCNuH1yUi4QfdZZY+sMr5PPrIyXSu5iTb/qYC4BiWWB0vZ+7TbdvYUCeL23zpwCfbg==",
5407 + "license": "MIT",
5408 + "dependencies": {
5409 + "@shikijs/core": "1.29.2",
5410 + "@shikijs/engine-javascript": "1.29.2",
5411 + "@shikijs/engine-oniguruma": "1.29.2",
5412 + "@shikijs/langs": "1.29.2",
5413 + "@shikijs/themes": "1.29.2",
5414 + "@shikijs/types": "1.29.2",
5415 + "@shikijs/vscode-textmate": "^10.0.1",
5416 + "@types/hast": "^3.0.4"
5417 + }
5418 + },
5419 + "node_modules/siginfo": {
5420 + "version": "2.0.0",
5421 + "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
5422 + "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
5423 + "dev": true,
5424 + "license": "ISC"
5425 + },
5426 + "node_modules/signal-exit": {
5427 + "version": "4.1.0",
5428 + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
5429 + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
5430 + "license": "ISC",
5431 + "engines": {
5432 + "node": ">=14"
5433 + },
5434 + "funding": {
5435 + "url": "https://github.com/sponsors/isaacs"
5436 + }
5437 + },
5438 + "node_modules/sonic-boom": {
5439 + "version": "4.2.1",
5440 + "resolved": "https://registry.npmjs.org/sonic-boom/-/sonic-boom-4.2.1.tgz",
5441 + "integrity": "sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==",
5442 + "license": "MIT",
5443 + "dependencies": {
5444 + "atomic-sleep": "^1.0.0"
5445 + }
5446 + },
5447 + "node_modules/source-map-js": {
5448 + "version": "1.2.1",
5449 + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz",
5450 + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
5451 + "license": "BSD-3-Clause",
5452 + "engines": {
5453 + "node": ">=0.10.0"
5454 + }
5455 + },
5456 + "node_modules/space-separated-tokens": {
5457 + "version": "2.0.2",
5458 + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz",
5459 + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==",
5460 + "license": "MIT",
5461 + "funding": {
5462 + "type": "github",
5463 + "url": "https://github.com/sponsors/wooorm"
5464 + }
5465 + },
5466 + "node_modules/split2": {
5467 + "version": "4.2.0",
5468 + "resolved": "https://registry.npmjs.org/split2/-/split2-4.2.0.tgz",
5469 + "integrity": "sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==",
5470 + "license": "ISC",
5471 + "engines": {
5472 + "node": ">= 10.x"
5473 + }
5474 + },
5475 + "node_modules/stackback": {
5476 + "version": "0.0.2",
5477 + "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
5478 + "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
5479 + "dev": true,
5480 + "license": "MIT"
5481 + },
5482 + "node_modules/statuses": {
5483 + "version": "2.0.2",
5484 + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz",
5485 + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==",
5486 + "license": "MIT",
5487 + "engines": {
5488 + "node": ">= 0.8"
5489 + }
5490 + },
5491 + "node_modules/std-env": {
5492 + "version": "3.10.0",
5493 + "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.10.0.tgz",
5494 + "integrity": "sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==",
5495 + "dev": true,
5496 + "license": "MIT"
5497 + },
5498 + "node_modules/string.prototype.codepointat": {
5499 + "version": "0.2.1",
5500 + "resolved": "https://registry.npmjs.org/string.prototype.codepointat/-/string.prototype.codepointat-0.2.1.tgz",
5501 + "integrity": "sha512-2cBVCj6I4IOvEnjgO/hWqXjqBGsY+zwPmHl12Srk9IXSZ56Jwwmy+66XO5Iut/oQVR7t5ihYdLB0GMa4alEUcg==",
5502 + "license": "MIT"
5503 + },
5504 + "node_modules/stringify-entities": {
5505 + "version": "4.0.4",
5506 + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz",
5507 + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==",
5508 + "license": "MIT",
5509 + "dependencies": {
5510 + "character-entities-html4": "^2.0.0",
5511 + "character-entities-legacy": "^3.0.0"
5512 + },
5513 + "funding": {
5514 + "type": "github",
5515 + "url": "https://github.com/sponsors/wooorm"
5516 + }
5517 + },
5518 + "node_modules/strip-json-comments": {
5519 + "version": "3.1.1",
5520 + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz",
5521 + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
5522 + "dev": true,
5523 + "license": "MIT",
5524 + "engines": {
5525 + "node": ">=8"
5526 + },
5527 + "funding": {
5528 + "url": "https://github.com/sponsors/sindresorhus"
5529 + }
5530 + },
5531 + "node_modules/stylis": {
5532 + "version": "4.4.0",
5533 + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz",
5534 + "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==",
5535 + "license": "MIT"
5536 + },
5537 + "node_modules/supports-color": {
5538 + "version": "7.2.0",
5539 + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
5540 + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
5541 + "dev": true,
5542 + "license": "MIT",
5543 + "dependencies": {
5544 + "has-flag": "^4.0.0"
5545 + },
5546 + "engines": {
5547 + "node": ">=8"
5548 + }
5549 + },
5550 + "node_modules/thread-stream": {
5551 + "version": "4.2.0",
5552 + "resolved": "https://registry.npmjs.org/thread-stream/-/thread-stream-4.2.0.tgz",
5553 + "integrity": "sha512-e2zZ96wSChazBsbENf/Pcm/4swHt2cEKQ92rhUjkL9GCKiTDJIaTBenjE/m9DXi0QBmTMDkFDdOomUy20A1tDQ==",
5554 + "license": "MIT",
5555 + "dependencies": {
5556 + "real-require": "^1.0.0"
5557 + },
5558 + "engines": {
5559 + "node": ">=20"
5560 + }
5561 + },
5562 + "node_modules/thread-stream/node_modules/real-require": {
5563 + "version": "1.0.0",
5564 + "resolved": "https://registry.npmjs.org/real-require/-/real-require-1.0.0.tgz",
5565 + "integrity": "sha512-P4nbQYQfePJxRSmY+v/KINxVucm4NF3p3s7pJveMTtom52FR4YGltUQLB8idDXwDDWW+eYrWDFbuzUnjoWHF7g==",
5566 + "license": "MIT"
5567 + },
5568 + "node_modules/tiny-inflate": {
5569 + "version": "1.0.3",
5570 + "resolved": "https://registry.npmjs.org/tiny-inflate/-/tiny-inflate-1.0.3.tgz",
5571 + "integrity": "sha512-pkY1fj1cKHb2seWDy0B16HeWyczlJA9/WW3u3c4z/NiWDsO3DOU5D7nhTLE9CF0yXv/QZFY7sEJmj24dK+Rrqw==",
5572 + "license": "MIT"
5573 + },
5574 + "node_modules/tinybench": {
5575 + "version": "2.9.0",
5576 + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz",
5577 + "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==",
5578 + "dev": true,
5579 + "license": "MIT"
5580 + },
5581 + "node_modules/tinyexec": {
5582 + "version": "1.3.0",
5583 + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.3.0.tgz",
5584 + "integrity": "sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==",
5585 + "license": "MIT",
5586 + "engines": {
5587 + "node": ">=18"
5588 + }
5589 + },
5590 + "node_modules/tinypool": {
5591 + "version": "1.1.1",
5592 + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz",
5593 + "integrity": "sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==",
5594 + "dev": true,
5595 + "license": "MIT",
5596 + "engines": {
5597 + "node": "^18.0.0 || >=20.0.0"
5598 + }
5599 + },
5600 + "node_modules/tinyrainbow": {
5601 + "version": "1.2.0",
5602 + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz",
5603 + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==",
5604 + "dev": true,
5605 + "license": "MIT",
5606 + "engines": {
5607 + "node": ">=14.0.0"
5608 + }
5609 + },
5610 + "node_modules/tinyspy": {
5611 + "version": "3.0.2",
5612 + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz",
5613 + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==",
5614 + "dev": true,
5615 + "license": "MIT",
5616 + "engines": {
5617 + "node": ">=14.0.0"
5618 + }
5619 + },
5620 + "node_modules/toad-cache": {
5621 + "version": "3.7.4",
5622 + "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.4.tgz",
5623 + "integrity": "sha512-m1TdR/rvT7kgGJZhspNtXdsdYk0fddFpJJFlG5s+UkPFo6lkLoZ3YLOaovPYjq1R75NP5JfeTlSHaOsE09peCg==",
5624 + "license": "MIT",
5625 + "engines": {
5626 + "node": ">=20"
5627 + }
5628 + },
5629 + "node_modules/toidentifier": {
5630 + "version": "1.0.1",
5631 + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
5632 + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
5633 + "license": "MIT",
5634 + "engines": {
5635 + "node": ">=0.6"
5636 + }
5637 + },
5638 + "node_modules/trim-lines": {
5639 + "version": "3.0.1",
5640 + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz",
5641 + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==",
5642 + "license": "MIT",
5643 + "funding": {
5644 + "type": "github",
5645 + "url": "https://github.com/sponsors/wooorm"
5646 + }
5647 + },
5648 + "node_modules/ts-dedent": {
5649 + "version": "2.3.0",
5650 + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.3.0.tgz",
5651 + "integrity": "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==",
5652 + "license": "MIT",
5653 + "engines": {
5654 + "node": ">=6.10"
5655 + }
5656 + },
5657 + "node_modules/type-check": {
5658 + "version": "0.4.0",
5659 + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
5660 + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==",
5661 + "dev": true,
5662 + "license": "MIT",
5663 + "dependencies": {
5664 + "prelude-ls": "^1.2.1"
5665 + },
5666 + "engines": {
5667 + "node": ">= 0.8.0"
5668 + }
5669 + },
5670 + "node_modules/uc.micro": {
5671 + "version": "2.1.0",
5672 + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
5673 + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
5674 + "license": "MIT"
5675 + },
5676 + "node_modules/unicode-trie": {
5677 + "version": "2.0.0",
5678 + "resolved": "https://registry.npmjs.org/unicode-trie/-/unicode-trie-2.0.0.tgz",
5679 + "integrity": "sha512-x7bc76x0bm4prf1VLg79uhAzKw8DVboClSN5VxJuQ+LKDOVEW9CdH+VY7SP+vX7xCYQqzzgQpFqz15zeLvAtZQ==",
5680 + "license": "MIT",
5681 + "dependencies": {
5682 + "pako": "^0.2.5",
5683 + "tiny-inflate": "^1.0.0"
5684 + }
5685 + },
5686 + "node_modules/unist-util-is": {
5687 + "version": "6.0.1",
5688 + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz",
5689 + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==",
5690 + "license": "MIT",
5691 + "dependencies": {
5692 + "@types/unist": "^3.0.0"
5693 + },
5694 + "funding": {
5695 + "type": "opencollective",
5696 + "url": "https://opencollective.com/unified"
5697 + }
5698 + },
5699 + "node_modules/unist-util-position": {
5700 + "version": "5.0.0",
5701 + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz",
5702 + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==",
5703 + "license": "MIT",
5704 + "dependencies": {
5705 + "@types/unist": "^3.0.0"
5706 + },
5707 + "funding": {
5708 + "type": "opencollective",
5709 + "url": "https://opencollective.com/unified"
5710 + }
5711 + },
5712 + "node_modules/unist-util-stringify-position": {
5713 + "version": "4.0.0",
5714 + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz",
5715 + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==",
5716 + "license": "MIT",
5717 + "dependencies": {
5718 + "@types/unist": "^3.0.0"
5719 + },
5720 + "funding": {
5721 + "type": "opencollective",
5722 + "url": "https://opencollective.com/unified"
5723 + }
5724 + },
5725 + "node_modules/unist-util-visit": {
5726 + "version": "5.1.0",
5727 + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz",
5728 + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==",
5729 + "license": "MIT",
5730 + "dependencies": {
5731 + "@types/unist": "^3.0.0",
5732 + "unist-util-is": "^6.0.0",
5733 + "unist-util-visit-parents": "^6.0.0"
5734 + },
5735 + "funding": {
5736 + "type": "opencollective",
5737 + "url": "https://opencollective.com/unified"
5738 + }
5739 + },
5740 + "node_modules/unist-util-visit-parents": {
5741 + "version": "6.0.2",
5742 + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz",
5743 + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==",
5744 + "license": "MIT",
5745 + "dependencies": {
5746 + "@types/unist": "^3.0.0",
5747 + "unist-util-is": "^6.0.0"
5748 + },
5749 + "funding": {
5750 + "type": "opencollective",
5751 + "url": "https://opencollective.com/unified"
5752 + }
5753 + },
5754 + "node_modules/uri-js": {
5755 + "version": "4.4.1",
5756 + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
5757 + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
5758 + "dev": true,
5759 + "license": "BSD-2-Clause",
5760 + "dependencies": {
5761 + "punycode": "^2.1.0"
5762 + }
5763 + },
5764 + "node_modules/uuid": {
5765 + "version": "14.0.1",
5766 + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz",
5767 + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==",
5768 + "funding": [
5769 + "https://github.com/sponsors/broofa",
5770 + "https://github.com/sponsors/ctavan"
5771 + ],
5772 + "license": "MIT",
5773 + "bin": {
5774 + "uuid": "dist-node/bin/uuid"
5775 + }
5776 + },
5777 + "node_modules/vfile": {
5778 + "version": "6.0.3",
5779 + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz",
5780 + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==",
5781 + "license": "MIT",
5782 + "dependencies": {
5783 + "@types/unist": "^3.0.0",
5784 + "vfile-message": "^4.0.0"
5785 + },
5786 + "funding": {
5787 + "type": "opencollective",
5788 + "url": "https://opencollective.com/unified"
5789 + }
5790 + },
5791 + "node_modules/vfile-message": {
5792 + "version": "4.0.3",
5793 + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz",
5794 + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==",
5795 + "license": "MIT",
5796 + "dependencies": {
5797 + "@types/unist": "^3.0.0",
5798 + "unist-util-stringify-position": "^4.0.0"
5799 + },
5800 + "funding": {
5801 + "type": "opencollective",
5802 + "url": "https://opencollective.com/unified"
5803 + }
5804 + },
5805 + "node_modules/vite": {
5806 + "version": "5.4.21",
5807 + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.21.tgz",
5808 + "integrity": "sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==",
5809 + "dev": true,
5810 + "license": "MIT",
5811 + "dependencies": {
5812 + "esbuild": "^0.21.3",
5813 + "postcss": "^8.4.43",
5814 + "rollup": "^4.20.0"
5815 + },
5816 + "bin": {
5817 + "vite": "bin/vite.js"
5818 + },
5819 + "engines": {
5820 + "node": "^18.0.0 || >=20.0.0"
5821 + },
5822 + "funding": {
5823 + "url": "https://github.com/vitejs/vite?sponsor=1"
5824 + },
5825 + "optionalDependencies": {
5826 + "fsevents": "~2.3.3"
5827 + },
5828 + "peerDependencies": {
5829 + "@types/node": "^18.0.0 || >=20.0.0",
5830 + "less": "*",
5831 + "lightningcss": "^1.21.0",
5832 + "sass": "*",
5833 + "sass-embedded": "*",
5834 + "stylus": "*",
5835 + "sugarss": "*",
5836 + "terser": "^5.4.0"
5837 + },
5838 + "peerDependenciesMeta": {
5839 + "@types/node": {
5840 + "optional": true
5841 + },
5842 + "less": {
5843 + "optional": true
5844 + },
5845 + "lightningcss": {
5846 + "optional": true
5847 + },
5848 + "sass": {
5849 + "optional": true
5850 + },
5851 + "sass-embedded": {
5852 + "optional": true
5853 + },
5854 + "stylus": {
5855 + "optional": true
5856 + },
5857 + "sugarss": {
5858 + "optional": true
5859 + },
5860 + "terser": {
5861 + "optional": true
5862 + }
5863 + }
5864 + },
5865 + "node_modules/vite-node": {
5866 + "version": "2.1.9",
5867 + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz",
5868 + "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==",
5869 + "dev": true,
5870 + "license": "MIT",
5871 + "dependencies": {
5872 + "cac": "^6.7.14",
5873 + "debug": "^4.3.7",
5874 + "es-module-lexer": "^1.5.4",
5875 + "pathe": "^1.1.2",
5876 + "vite": "^5.0.0"
5877 + },
5878 + "bin": {
5879 + "vite-node": "vite-node.mjs"
5880 + },
5881 + "engines": {
5882 + "node": "^18.0.0 || >=20.0.0"
5883 + },
5884 + "funding": {
5885 + "url": "https://opencollective.com/vitest"
5886 + }
5887 + },
5888 + "node_modules/vitest": {
5889 + "version": "2.1.9",
5890 + "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz",
5891 + "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==",
5892 + "dev": true,
5893 + "license": "MIT",
5894 + "dependencies": {
5895 + "@vitest/expect": "2.1.9",
5896 + "@vitest/mocker": "2.1.9",
5897 + "@vitest/pretty-format": "^2.1.9",
5898 + "@vitest/runner": "2.1.9",
5899 + "@vitest/snapshot": "2.1.9",
5900 + "@vitest/spy": "2.1.9",
5901 + "@vitest/utils": "2.1.9",
5902 + "chai": "^5.1.2",
5903 + "debug": "^4.3.7",
5904 + "expect-type": "^1.1.0",
5905 + "magic-string": "^0.30.12",
5906 + "pathe": "^1.1.2",
5907 + "std-env": "^3.8.0",
5908 + "tinybench": "^2.9.0",
5909 + "tinyexec": "^0.3.1",
5910 + "tinypool": "^1.0.1",
5911 + "tinyrainbow": "^1.2.0",
5912 + "vite": "^5.0.0",
5913 + "vite-node": "2.1.9",
5914 + "why-is-node-running": "^2.3.0"
5915 + },
5916 + "bin": {
5917 + "vitest": "vitest.mjs"
5918 + },
5919 + "engines": {
5920 + "node": "^18.0.0 || >=20.0.0"
5921 + },
5922 + "funding": {
5923 + "url": "https://opencollective.com/vitest"
5924 + },
5925 + "peerDependencies": {
5926 + "@edge-runtime/vm": "*",
5927 + "@types/node": "^18.0.0 || >=20.0.0",
5928 + "@vitest/browser": "2.1.9",
5929 + "@vitest/ui": "2.1.9",
5930 + "happy-dom": "*",
5931 + "jsdom": "*"
5932 + },
5933 + "peerDependenciesMeta": {
5934 + "@edge-runtime/vm": {
5935 + "optional": true
5936 + },
5937 + "@types/node": {
5938 + "optional": true
5939 + },
5940 + "@vitest/browser": {
5941 + "optional": true
5942 + },
5943 + "@vitest/ui": {
5944 + "optional": true
5945 + },
5946 + "happy-dom": {
5947 + "optional": true
5948 + },
5949 + "jsdom": {
5950 + "optional": true
5951 + }
5952 + }
5953 + },
5954 + "node_modules/vitest/node_modules/tinyexec": {
5955 + "version": "0.3.2",
5956 + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz",
5957 + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==",
5958 + "dev": true,
5959 + "license": "MIT"
5960 + },
5961 + "node_modules/which": {
5962 + "version": "2.0.2",
5963 + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
5964 + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
5965 + "license": "ISC",
5966 + "dependencies": {
5967 + "isexe": "^2.0.0"
5968 + },
5969 + "bin": {
5970 + "node-which": "bin/node-which"
5971 + },
5972 + "engines": {
5973 + "node": ">= 8"
5974 + }
5975 + },
5976 + "node_modules/why-is-node-running": {
5977 + "version": "2.3.0",
5978 + "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz",
5979 + "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==",
5980 + "dev": true,
5981 + "license": "MIT",
5982 + "dependencies": {
5983 + "siginfo": "^2.0.0",
5984 + "stackback": "0.0.2"
5985 + },
5986 + "bin": {
5987 + "why-is-node-running": "cli.js"
5988 + },
5989 + "engines": {
5990 + "node": ">=8"
5991 + }
5992 + },
5993 + "node_modules/word-wrap": {
5994 + "version": "1.2.5",
5995 + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
5996 + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
5997 + "dev": true,
5998 + "license": "MIT",
5999 + "engines": {
6000 + "node": ">=0.10.0"
6001 + }
6002 + },
6003 + "node_modules/yocto-queue": {
6004 + "version": "0.1.0",
6005 + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
6006 + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==",
6007 + "dev": true,
6008 + "license": "MIT",
6009 + "engines": {
6010 + "node": ">=10"
6011 + },
6012 + "funding": {
6013 + "url": "https://github.com/sponsors/sindresorhus"
6014 + }
6015 + },
6016 + "node_modules/yoga-wasm-web": {
6017 + "version": "0.3.3",
6018 + "resolved": "https://registry.npmjs.org/yoga-wasm-web/-/yoga-wasm-web-0.3.3.tgz",
6019 + "integrity": "sha512-N+d4UJSJbt/R3wqY7Coqs5pcV0aUj2j9IaQ3rNj9bVCLld8tTGKRa2USARjnvZJWVx1NDmQev8EknoczaOQDOA==",
6020 + "license": "MIT"
6021 + },
6022 + "node_modules/zod": {
6023 + "version": "3.25.76",
6024 + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz",
6025 + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==",
6026 + "license": "MIT",
6027 + "funding": {
6028 + "url": "https://github.com/sponsors/colinhacks"
6029 + }
6030 + },
6031 + "node_modules/zwitch": {
6032 + "version": "2.0.4",
6033 + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz",
6034 + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==",
6035 + "license": "MIT",
6036 + "funding": {
6037 + "type": "github",
6038 + "url": "https://github.com/sponsors/wooorm"
6039 + }
6040 + }
6041 + }
6042 +}
added package.json +50 −0
@@ -0,0 +1,50 @@
1 +{
2 + "name": "spbgit",
3 + "version": "1.0.0",
4 + "description": "SPB Git — Personal Git Platform for Simon-Pierre Boucher",
5 + "author": "Simon-Pierre Boucher <contact@spboucher.ai>",
6 + "license": "MIT",
7 + "type": "module",
8 + "engines": {
9 + "node": ">=20"
10 + },
11 + "bin": {
12 + "spbgit": "cli/spbgit.mjs"
13 + },
14 + "scripts": {
15 + "start": "node src/server.mjs",
16 + "dev": "SPBGIT_ENV=development node --watch src/server.mjs",
17 + "lint": "eslint .",
18 + "test": "vitest run",
19 + "test:watch": "vitest",
20 + "check:headers": "node scripts/check-headers.mjs",
21 + "inject:headers": "node scripts/inject-headers.mjs",
22 + "fetch:fonts": "node scripts/fetch-fonts.mjs",
23 + "postinstall": "node scripts/fetch-fonts.mjs --best-effort"
24 + },
25 + "dependencies": {
26 + "@fastify/rate-limit": "^10.1.1",
27 + "@fastify/static": "^8.0.3",
28 + "@resvg/resvg-js": "^2.6.2",
29 + "argon2": "^0.41.1",
30 + "commander": "^12.1.0",
31 + "fastify": "^5.2.0",
32 + "markdown-it": "^14.1.0",
33 + "markdown-it-anchor": "^9.2.0",
34 + "markdown-it-emoji": "^3.0.0",
35 + "markdown-it-footnote": "^4.0.0",
36 + "markdown-it-task-lists": "^2.1.1",
37 + "mermaid": "^11.4.1",
38 + "nunjucks": "^3.2.4",
39 + "picocolors": "^1.1.1",
40 + "sanitize-html": "^2.13.1",
41 + "satori": "^0.12.0",
42 + "shiki": "^1.24.4",
43 + "zod": "^3.24.1"
44 + },
45 + "devDependencies": {
46 + "@eslint/js": "^9.17.0",
47 + "eslint": "^9.17.0",
48 + "vitest": "^2.1.8"
49 + }
50 +}
added scripts/check-headers.mjs +97 −0
@@ -0,0 +1,97 @@
1 +/**
2 + * ─────────────────────────────────────────────
3 + * SPB Git — Personal Git Platform
4 + * ─────────────────────────────────────────────
5 + * Author : Simon-Pierre Boucher
6 + * Contact : contact@spboucher.ai
7 + * File : scripts/check-headers.mjs
8 + * Purpose : CI gate — fail if any tracked file lacks the author header
9 + * License : MIT © Simon-Pierre Boucher
10 + * ─────────────────────────────────────────────
11 + */
12 +
13 +import { execFileSync } from 'node:child_process';
14 +import { readFileSync, readdirSync, statSync } from 'node:fs';
15 +import { extname, join, relative } from 'node:path';
16 +import process from 'node:process';
17 +
18 +const ROOT = new URL('..', import.meta.url).pathname;
19 +
20 +/** Files that structurally cannot (or should not) carry a comment header. */
21 +const EXEMPT_PATTERNS = [
22 + /(^|\/)package(-lock)?\.json$/,
23 + /\.json$/,
24 + /\.jsonl$/,
25 + /\.lock$/,
26 + /(^|\/)LICENSE$/,
27 + /\.(woff2?|ttf|otf|eot|png|jpe?g|gif|ico|webp|zip|gz|zst|pdf)$/i,
28 + /(^|\/)\.DS_Store$/,
29 + /(^|\/)\.env$/,
30 + /(^|\/)node_modules\//,
31 + /(^|\/)dev\//,
32 + /(^|\/)coverage\//,
33 + /(^|\/)dist\//,
34 + /(^|\/)logs\//,
35 + /(^|\/)\.git\//,
36 + /(^|\/)\.claude\//,
37 + /(^|\/)src\/web\/assets\/vendor\//,
38 +];
39 +
40 +const REQUIRED_MARKERS = ['SPB Git', 'Simon-Pierre Boucher', 'contact@spboucher.ai'];
41 +const HEAD_LINES = 40;
42 +
43 +/** @returns {string[]} repo-relative paths of files to check */
44 +function listFiles() {
45 + try {
46 + const out = execFileSync('git', ['ls-files'], { cwd: ROOT, encoding: 'utf8' });
47 + const files = out.split('\n').filter(Boolean);
48 + if (files.length > 0) return files;
49 + } catch {
50 + /* not a git repo yet — fall through to fs walk */
51 + }
52 + const acc = [];
53 + const walk = (dir) => {
54 + for (const entry of readdirSync(dir)) {
55 + const full = join(dir, entry);
56 + const rel = relative(ROOT, full);
57 + if (EXEMPT_PATTERNS.some((re) => re.test(rel + (statSync(full).isDirectory() ? '/' : '')))) continue;
58 + if (statSync(full).isDirectory()) walk(full);
59 + else acc.push(rel);
60 + }
61 + };
62 + walk(ROOT);
63 + return acc;
64 +}
65 +
66 +function isExempt(path) {
67 + return EXEMPT_PATTERNS.some((re) => re.test(path));
68 +}
69 +
70 +function hasHeader(path) {
71 + let content;
72 + try {
73 + content = readFileSync(join(ROOT, path), 'utf8');
74 + } catch {
75 + return false;
76 + }
77 + const head = content.split('\n').slice(0, HEAD_LINES).join('\n');
78 + return REQUIRED_MARKERS.every((marker) => head.includes(marker));
79 +}
80 +
81 +const failures = [];
82 +for (const file of listFiles()) {
83 + if (isExempt(file)) continue;
84 + const ext = extname(file);
85 + if (ext === '' && !/(^|\/)(Dockerfile|Makefile|\.gitignore|\.gitattributes)$/.test(file)) {
86 + // extensionless files other than well-known ones: still required to carry a header
87 + }
88 + if (!hasHeader(file)) failures.push(file);
89 +}
90 +
91 +if (failures.length > 0) {
92 + console.error('✗ Missing SPB Git author header in:');
93 + for (const f of failures) console.error(` - ${f}`);
94 + console.error(`\n${failures.length} file(s) failed. Run: npm run inject:headers`);
95 + process.exit(1);
96 +}
97 +console.log('✓ All files carry the SPB Git author header.');
added scripts/fetch-fonts.mjs +57 −0
@@ -0,0 +1,57 @@
1 +/**
2 + * ─────────────────────────────────────────────
3 + * SPB Git — Personal Git Platform
4 + * ─────────────────────────────────────────────
5 + * Author : Simon-Pierre Boucher
6 + * Contact : contact@spboucher.ai
7 + * File : scripts/fetch-fonts.mjs
8 + * Purpose : Download self-hosted Inter / JetBrains Mono fonts (web + OG rendering)
9 + * License : MIT © Simon-Pierre Boucher
10 + * ─────────────────────────────────────────────
11 + */
12 +
13 +import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
14 +import { join } from 'node:path';
15 +import process from 'node:process';
16 +
17 +const ROOT = new URL('..', import.meta.url).pathname;
18 +const FONTS_DIR = join(ROOT, 'src/web/assets/fonts');
19 +const BEST_EFFORT = process.argv.includes('--best-effort');
20 +
21 +/** woff2 → served to browsers; woff → consumed by satori for OG images. */
22 +const FONTS = [
23 + ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-400-normal.woff2', 'inter-400.woff2'],
24 + ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-500-normal.woff2', 'inter-500.woff2'],
25 + ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-600-normal.woff2', 'inter-600.woff2'],
26 + ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-700-normal.woff2', 'inter-700.woff2'],
27 + ['https://cdn.jsdelivr.net/npm/@fontsource/jetbrains-mono@5.1.1/files/jetbrains-mono-latin-400-normal.woff2', 'jetbrains-mono-400.woff2'],
28 + ['https://cdn.jsdelivr.net/npm/@fontsource/jetbrains-mono@5.1.1/files/jetbrains-mono-latin-600-normal.woff2', 'jetbrains-mono-600.woff2'],
29 + ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-400-normal.woff', 'og/inter-400.woff'],
30 + ['https://cdn.jsdelivr.net/npm/@fontsource/inter@5.1.0/files/inter-latin-700-normal.woff', 'og/inter-700.woff'],
31 + ['https://cdn.jsdelivr.net/npm/@fontsource/jetbrains-mono@5.1.1/files/jetbrains-mono-latin-400-normal.woff', 'og/jetbrains-mono-400.woff'],
32 +];
33 +
34 +mkdirSync(join(FONTS_DIR, 'og'), { recursive: true });
35 +
36 +let failures = 0;
37 +for (const [url, name] of FONTS) {
38 + const dest = join(FONTS_DIR, name);
39 + if (existsSync(dest)) continue;
40 + try {
41 + const res = await fetch(url);
42 + if (!res.ok) throw new Error(`HTTP ${res.status}`);
43 + writeFileSync(dest, Buffer.from(await res.arrayBuffer()));
44 + console.log(`✓ ${name}`);
45 + } catch (err) {
46 + failures += 1;
47 + console.warn(`✗ ${name}: ${err.message}`);
48 + }
49 +}
50 +
51 +if (failures > 0 && !BEST_EFFORT) {
52 + console.error(`${failures} font(s) failed to download. Re-run: npm run fetch:fonts`);
53 + process.exit(1);
54 +}
55 +if (failures > 0) {
56 + console.warn('Continuing despite font download failures (best-effort mode). OG images will use a plain-SVG fallback.');
57 +}
added scripts/inject-headers.mjs +127 −0
@@ -0,0 +1,127 @@
1 +/**
2 + * ─────────────────────────────────────────────
3 + * SPB Git — Personal Git Platform
4 + * ─────────────────────────────────────────────
5 + * Author : Simon-Pierre Boucher
6 + * Contact : contact@spboucher.ai
7 + * File : scripts/inject-headers.mjs
8 + * Purpose : Bulk-inject the mandatory author header into project files
9 + * License : MIT © Simon-Pierre Boucher
10 + * ─────────────────────────────────────────────
11 + */
12 +
13 +import { execFileSync } from 'node:child_process';
14 +import { readFileSync, writeFileSync, readdirSync, statSync } from 'node:fs';
15 +import { basename, extname, join, relative } from 'node:path';
16 +import process from 'node:process';
17 +
18 +const ROOT = new URL('..', import.meta.url).pathname;
19 +
20 +const EXEMPT_PATTERNS = [
21 + /\.json$/, /\.jsonl$/, /\.lock$/,
22 + /(^|\/)LICENSE$/,
23 + /\.(woff2?|ttf|otf|eot|png|jpe?g|gif|ico|webp|zip|gz|zst|pdf)$/i,
24 + /(^|\/)\.DS_Store$/,
25 + /(^|\/)\.env$/,
26 + /(^|\/)node_modules\//, /(^|\/)dev\//, /(^|\/)coverage\//,
27 + /(^|\/)dist\//, /(^|\/)logs\//, /(^|\/)\.git\//, /(^|\/)\.claude\//,
28 + /(^|\/)src\/web\/assets\/vendor\//,
29 +];
30 +
31 +const REQUIRED_MARKERS = ['SPB Git', 'Simon-Pierre Boucher', 'contact@spboucher.ai'];
32 +
33 +/**
34 + * Build the header block for a given comment style.
35 + * @param {string} file repo-relative path
36 + * @param {'block'|'hash'|'html'|'dash'|'njk'} style
37 + */
38 +function buildHeader(file, style) {
39 + const lines = [
40 + '─────────────────────────────────────────────',
41 + ' SPB Git — Personal Git Platform',
42 + '─────────────────────────────────────────────',
43 + ' Author : Simon-Pierre Boucher',
44 + ' Contact : contact@spboucher.ai',
45 + ` File : ${file}`,
46 + ' Purpose : (added by inject-headers)',
47 + ' License : MIT © Simon-Pierre Boucher',
48 + '─────────────────────────────────────────────',
49 + ];
50 + switch (style) {
51 + case 'block':
52 + return `/**\n${lines.map((l) => ` * ${l}`).join('\n')}\n */\n\n`;
53 + case 'hash':
54 + return `${lines.map((l) => `# ${l}`).join('\n')}\n\n`;
55 + case 'html':
56 + return `<!--\n${lines.map((l) => ` ${l}`).join('\n')}\n-->\n\n`;
57 + case 'dash':
58 + return `${lines.map((l) => `-- ${l}`).join('\n')}\n\n`;
59 + case 'njk':
60 + return `{#\n${lines.map((l) => ` ${l}`).join('\n')}\n#}\n`;
61 + default:
62 + throw new Error(`unknown style ${style}`);
63 + }
64 +}
65 +
66 +/** @returns {'block'|'hash'|'html'|'dash'|'njk'|null} */
67 +function styleFor(file) {
68 + const ext = extname(file).toLowerCase();
69 + const base = basename(file);
70 + if (['.js', '.mjs', '.cjs', '.ts', '.css', '.scss'].includes(ext)) return 'block';
71 + if (['.py', '.sh', '.bash', '.yml', '.yaml', '.toml', '.service', '.gitignore', '.gitattributes', '.example'].includes(ext)) return 'hash';
72 + if (base === 'Dockerfile' || base === 'Makefile' || base === '.gitignore' || base === '.gitattributes') return 'hash';
73 + if (['.html', '.md', '.vue', '.svg'].includes(ext)) return 'html';
74 + if (ext === '.sql') return 'dash';
75 + if (ext === '.njk') return 'njk';
76 + return null;
77 +}
78 +
79 +function listFiles() {
80 + try {
81 + const out = execFileSync('git', ['ls-files'], { cwd: ROOT, encoding: 'utf8' });
82 + const files = out.split('\n').filter(Boolean);
83 + if (files.length > 0) return files;
84 + } catch {
85 + /* fall through */
86 + }
87 + const acc = [];
88 + const walk = (dir) => {
89 + for (const entry of readdirSync(dir)) {
90 + const full = join(dir, entry);
91 + const rel = relative(ROOT, full);
92 + if (EXEMPT_PATTERNS.some((re) => re.test(rel + (statSync(full).isDirectory() ? '/' : '')))) continue;
93 + if (statSync(full).isDirectory()) walk(full);
94 + else acc.push(rel);
95 + }
96 + };
97 + walk(ROOT);
98 + return acc;
99 +}
100 +
101 +let injected = 0;
102 +for (const file of listFiles()) {
103 + if (EXEMPT_PATTERNS.some((re) => re.test(file))) continue;
104 + const style = styleFor(file);
105 + if (!style) continue;
106 + const full = join(ROOT, file);
107 + let content;
108 + try {
109 + content = readFileSync(full, 'utf8');
110 + } catch {
111 + continue;
112 + }
113 + const head = content.split('\n').slice(0, 40).join('\n');
114 + if (REQUIRED_MARKERS.every((m) => head.includes(m))) continue;
115 + const header = buildHeader(file, style);
116 + if (content.startsWith('#!')) {
117 + const nl = content.indexOf('\n') + 1;
118 + content = content.slice(0, nl) + header + content.slice(nl);
119 + } else {
120 + content = header + content;
121 + }
122 + writeFileSync(full, content);
123 + console.log(`+ header → ${file}`);
124 + injected += 1;
125 +}
126 +console.log(injected > 0 ? `Injected ${injected} header(s).` : 'Nothing to do — all headers present.');
127 +process.exit(0);
128