diff --git a/.github/ISSUE_TEMPLATE/skill-feedback.yaml b/.github/ISSUE_TEMPLATE/skill-feedback.yaml new file mode 100644 index 000000000..cb646a85f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/skill-feedback.yaml @@ -0,0 +1,103 @@ +name: Skill feedback / drift report +description: Report that a morph-doc Skill (or its paired MDX) gave incorrect, stale, or unroutable guidance. +title: "[skill-drift] : " +labels: + - skill-drift +assignees: [] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to flag a Skill drift. This template powers the + feedback loop for the **Docs-as-SKILL** contract described in + [`VISION.md`](https://github.com/morph-l2/morph-doc/blob/main/VISION.md). + The doc maintainer triages every `skill-drift` issue. + + - type: input + id: skill-id + attributes: + label: Skill ID + description: Directory name under `skills/`, e.g. `morph-contracts`, `morph-js-sdk`. Leave blank if you are reporting an MDX page with no paired Skill. + placeholder: morph-contracts + validations: + required: false + + - type: input + id: doc-path + attributes: + label: Related doc path + description: Path relative to repo root, e.g. `docs/build-on-morph/developer-resources/1-contracts.md`. Optional if unknown. + placeholder: docs/... + validations: + required: false + + - type: dropdown + id: category + attributes: + label: Drift category + description: Pick the best fit; maintainers may relabel during triage. + options: + - Stale fact (address / chainId / RPC / token changed) + - Wrong routing (Skill triggered for unrelated question) + - Missing routing (question should match a Skill but did not) + - Executable snippet no longer runs + - Self-check item failed during real use + - Other + validations: + required: true + + - type: textarea + id: what-happened + attributes: + label: What happened + description: Describe the prompt, the Skill that fired (if any), and the answer you received. + placeholder: | + Prompt: "...the user's question..." + Skill fired: morph-contracts + Answer given: "..." + What was wrong: "..." + validations: + required: true + + - type: textarea + id: expected + attributes: + label: What you expected instead + placeholder: | + - Expected fact: ... + - Source of truth: ... + validations: + required: true + + - type: input + id: source + attributes: + label: Authoritative source (optional) + description: Link or path to the canonical value (chain explorer, source code, JSON registry, etc.). + placeholder: https://... or morph-bridge/public/morph-list/src/mainnet/tokenList.json + validations: + required: false + + - type: dropdown + id: agent + attributes: + label: Agent / IDE where this occurred + options: + - Cursor + - Claude Code + - OpenClaw + - Windsurf + - Codex + - Web chat + - Other + - Not applicable + validations: + required: false + + - type: textarea + id: additional + attributes: + label: Additional context + description: Version info, chain (Mainnet / Hoodi), package versions, screenshots, etc. + validations: + required: false diff --git a/.github/workflows/skill-freshness-bot.yml b/.github/workflows/skill-freshness-bot.yml new file mode 100644 index 000000000..e246bd7ef --- /dev/null +++ b/.github/workflows/skill-freshness-bot.yml @@ -0,0 +1,145 @@ +# Skill freshness bot (Phase 1) — see scripts/skill-freshness-bot.DESIGN.md +# +# - Does NOT run on pull_request (freshness stays warn-only in npm test). +# - Opens or updates a single tracking Issue on default branch when warnings exist. + +name: skill-freshness-bot + +on: + schedule: + # Mondays 09:00 UTC + - cron: '0 9 * * 1' + workflow_dispatch: + +permissions: + contents: read + issues: write + +jobs: + report: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4 + with: + persist-credentials: false + + - name: Setup Node + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4 + with: + node-version: '20' + cache: npm + + - name: Generate freshness report + run: | + mkdir -p .local + node scripts/skill-freshness-report.mjs --json --out .local/skill-freshness-report.json + + - name: Upload report artifact + uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4 + with: + name: skill-freshness-report + path: .local/skill-freshness-report.json + retention-days: 30 + + - name: Sync tracking issue + uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7 + env: + REPORT_PATH: .local/skill-freshness-report.json + with: + script: | + const fs = require('fs'); + const report = JSON.parse(fs.readFileSync(process.env.REPORT_PATH, 'utf8')); + const owner = context.repo.owner; + const repo = context.repo.repo; + const titlePrefix = '[skill-freshness] Weekly re-verify queue'; + const botLabel = 'skill-freshness'; + + const list = await github.rest.issues.listForRepo({ + owner, + repo, + state: 'all', + labels: botLabel, + per_page: 100, + }); + const existing = list.data.find((i) => i.title.startsWith(titlePrefix)); + + if (report.warningCount === 0) { + if (existing) { + await github.rest.issues.createComment({ + owner, + repo, + issue_number: existing.number, + body: [ + '✅ **skill-freshness-bot**: no warnings in the latest scan.', + '', + `- Generated: \`${report.generatedAt}\``, + `- Skills scanned: ${report.skillCount}`, + '', + 'Closing this tracking issue. It will reopen on the next scheduled run if warnings return.', + ].join('\n'), + }); + await github.rest.issues.update({ + owner, + repo, + issue_number: existing.number, + state: 'closed', + }); + } + core.info('No freshness warnings; tracking issue closed or none needed.'); + return; + } + + const tableHeader = + '| Skill | Code | last_verified | Age (days) |\n|-------|------|---------------|------------|'; + const tableRows = report.warnings.map((w) => { + const lv = w.lastVerified ?? '—'; + const age = w.ageDays ?? '—'; + return `| \`${w.skillId}\` | ${w.code} | ${lv} | ${age} |`; + }); + + const body = [ + '## Skill freshness report', + '', + 'Automated scan from [`skill-freshness-bot`](.github/workflows/skill-freshness-bot.yml).', + 'Human-reported factual errors should still use the **skill-drift** issue template.', + '', + `**Threshold:** ${report.thresholdDays} days — see [VISION.md § Skill Verification Metadata](https://github.com/${owner}/${repo}/blob/main/VISION.md#skill-verification-metadata-freshness-contract)`, + '', + tableHeader, + ...tableRows, + '', + '### Maintainer checklist', + '', + '- [ ] Re-read each listed Skill against its `verified_against` paths', + '- [ ] Update `last_verified` to today (UTC `YYYY-MM-DD`) in the same PR as any fact fix', + '- [ ] Run `npm test`', + '', + `**Run:** ${context.serverUrl}/${owner}/${repo}/actions/runs/${context.runId}`, + `**Generated:** \`${report.generatedAt}\``, + `**Warnings:** ${report.warningCount} (${report.staleCount} stale)`, + ].join('\n'); + + const title = `${titlePrefix} (${report.warningCount} warning${report.warningCount === 1 ? '' : 's'})`; + + if (existing) { + await github.rest.issues.update({ + owner, + repo, + issue_number: existing.number, + title, + body, + state: 'open', + }); + core.info(`Updated issue #${existing.number}`); + return; + } + + const created = await github.rest.issues.create({ + owner, + repo, + title, + body, + labels: [botLabel, 'bot'], + }); + core.info(`Created issue #${created.data.number}`); diff --git a/.gitignore b/.gitignore index 6cacdf1ea..a9dcb85ad 100644 --- a/.gitignore +++ b/.gitignore @@ -26,5 +26,32 @@ yarn-error.log* .anima data build -scripts +# scripts build +examples +.cursor +.claude +.openclaw + +# __tests__ +# run-tests.mjs +content + +# agent +skills-plan +memory +USER.md +SOUL.md +TOOLS.md +IDENTITY.md +HEARTBEAT.md +DREAMS.md +*.zh.md + +# dapp agent +planning +research + +# skill-creator description optimization (--results-dir); see skills/README.md +.local +vendor/skill-creator \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 000000000..2294c4098 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,4 @@ +node __tests__/doc-skill-pairing.test.mjs +node __tests__/morph-doc-skill-inventory.test.mjs +node __tests__/skills-sidebar.test.mjs +npm run build diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 000000000..0d63ccfcd --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,121 @@ +# AGENTS.md + +Operating instructions for AI agents working in this repository. Loaded by **OpenClaw** when this directory is the agent workspace; use as the shared team handbook for other coding agents too. + +**Claude Code** also reads [`CLAUDE.md`](./CLAUDE.md) at session start—project facts below are canonical for any tool. + +## Project overview + +This is the Morph Documentation website (Docusaurus 3.1.1). Morph is an optimistic zkEVM scaling solution for Ethereum. The site provides developer resources, guides, and API references for the Morph network. + +## Knowledge base layout + +- **Vision (docs-as-SKILL, external brain, toolchain):** [`VISION.md`](./VISION.md) — write and review MDX/SKILL pairs against this contract so models can instantiate behavior reliably. +- **Human-readable docs:** `docs/` (MDX). Prefer linking to the authoritative page instead of duplicating long specs in chat. +- **Executable topic summaries:** `skills//SKILL.md` (see [`skills/README.md`](./skills/README.md)). Use these for routing and concise procedures. +- **Agent sub-definition:** `agents/*.md` (also published under `/agents/` on the doc site; navbar **Agents**). Start with [`agents/morph-doc-agent.md`](./agents/morph-doc-agent.md) for skill authoring from a single goal. Canonical skill path is **`skills//`** at repo root; see [`skills/README.md`](./skills/README.md) for in-repo IDE mirrors (`npm run skill-ln`) and optional user-level symlinks for other workspaces. When in doubt, treat `docs/` + `skills/` as the product source of truth. + +### Three-layer model (knowledge base, brain, connector) + +Use morph-doc as Morph’s **versioned knowledge base** and **external brain** for agents. Three layers: + +| Layer | Role | In this repo | +|-------|------|----------------| +| **Knowledge base** | Canonical facts, long-form narrative, tables, demos (humans + search) | `docs/**/*.mdx` | +| **Brain** | Reliable behavior: stepwise playbooks, self-checks; authority in Git, not chat memory alone | `skills//SKILL.md`, plus `__tests__/` where behavior must stay tied to docs | +| **Connector** | Routes intent to the right surface: YAML `name` / `description` (tool routing), optional MDX `doc_skill_id` (page–skill pairing), **Related Skills** for handoffs without copying sibling bodies | Same `SKILL.md` files; pairing and policy in [`VISION.md`](./VISION.md); symlink and trigger tuning in [`skills/README.md`](./skills/README.md) | + +**Connector contract:** Skills do not duplicate full MDX. They connect prompts → **Execution Steps** → pointers into `docs/` → optional sibling skill links. + +**Mnemonic:** write facts in `docs/`; write how to be found and executed in `skills/`; keep pairing testable (`doc_skill_id`, `npm test`). + +## Development commands + +### Local development + +- `npm start` or `docusaurus start` — dev server +- `npm run build` — production build +- `npm run serve` — serve built site (port 8080) +- `npm run clear` — clear Docusaurus cache +- `npm run swizzle` — customize Docusaurus components + +### Environment + +- `MORPH_DOCS_URL` — site URL when needed +- Algolia DocSearch: `ALGOLIA_APP_ID`, `ALGOLIA_SEARCH_API_KEY`, `ALGOLIA_INDEX_NAME` + +## Architecture + +### Tech stack + +- **Framework:** Docusaurus 3.1.1 (preset-classic) +- **Styling:** Tailwind CSS 3.4.1 with `@morui/theme` +- **CSS:** Sass with autoprefixer +- **Markdown:** MDX with remark-math and rehype-katex +- **Search:** Algolia DocSearch +- **Deployment:** static output + nginx configs in repo + +### Key directories + +- `docs/` — MDX content (`build-on-morph/`, `about-morph/`, `how-morph-works/`, `morph-rails/`, …) + - `docs/build-on-morph/sdk/{classes,enumerations,functions,interfaces,type-aliases,variables}/` — **typedoc-generated API reference**; do **not** hand-edit these files or add frontmatter (including `doc_skill_id`), they will be overwritten on regeneration. See [`VISION.md`](./VISION.md) (Pairing Policy). +- `skills/` — executable SKILL topics (mirrored on the site at `/skills/`) +- `agents/` — agent role definitions (mirrored on the site at `/agents/`) +- `src/components/` — React (`MorphRpc/`, `AltFee/`, `ApiExplorer/`, …) +- `static/` — assets +- `plugins/` — custom Docusaurus plugins +- `scripts/` — doc processing utilities + +### Configuration + +- `docusaurus.config.js` — main config, sidebars reference (`sidebars.js`, `sidebars-skills.js`, `sidebars-agents.js`) +- `sidebars.js` — nav (Get Started, Morph Chain, Node Operators, Learn, Morph Rails) +- `tailwind.config.js` — theme tokens +- `config.json` — Algolia DocSearch + +### Styling + +- Tailwind + `@morui/theme`; Sass in `src/css/`; overrides in `src/css/custom.scss` + +### Plugins + +- Markdown source plugin: `plugins/markdown-source-plugin.js` — post-build exports cleaned `.md` into `build/docs/`, `build/skills/`, and `build/agents/` (mirrors site routes) +- Client redirects, Sass plugin, Mermaid theme + +## Documentation structure (sidebar) + +1. **Get Started** — quickstart, protocol overview +2. **Morph Chain** — SDKs, APIs, building on Morph +3. **Node Operators** — full node, validators +4. **Learn** — concepts and architecture +5. **Morph Rails** — infrastructure (e.g. AltFee, Reference Key) +6. **Agent Skills** — `skills/` SKILL playbooks (site path `/skills/`) +7. **Agents** — `agents/*.md` role definitions (site path `/agents/`) + +## Component patterns + +- Tailwind + Morui tokens; `morui-` prefix where applicable +- Demos (e.g. `MorphRpcClientDemo`) use JSON-RPC against Morph endpoints + +## Deployment + +- Build output: `build/` +- Scripts: `build:mainnet`, `build:qanet` where applicable + +## Key dependencies + +- `@morphnetwork/viem`, `@morui/theme`, `viem`, `lottie-react` + +## Development notes + +- MDX for embedded React; math via remark-math / rehype-katex +- Light/dark theming via custom tokens +- Single locale (en) for now + +## Testing and changes + +- Automated checks live under `__tests__/`. When adding or changing **executable** helpers or behaviors covered by tests, extend or add tests there and run the project’s test script from `package.json`. + +## Secrets + +- Do not commit API keys, tokens, or `.env` contents. Follow `.gitignore`. diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 000000000..920481466 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,83 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Canonical handbook + +Day-to-day architecture, commands, and conventions live in [`AGENTS.md`](./AGENTS.md) — read it first. The doc–skill contract (why this repo exists as an "external brain" for Morph-facing agents) is in [`VISION.md`](./VISION.md). **Contributor norms** (pull requests, three-layer model, Skills-as-connectors checklist) live in [`CONTRIBUTING.md`](./CONTRIBUTING.md). This file only captures what Claude Code specifically needs on top of those. + +Optional personal overrides: `CLAUDE.local.md` (git-ignored). Nested `CLAUDE.md` files in subfolders may apply when working only in those paths. + +## What this repo is + +A Docusaurus 3.1.1 site (`morph-doc`) that doubles as the source of truth for **Morph Agent Skills** and agent definitions. Linked surfaces: + +- `docs/**/*.mdx|.md` — human-readable documentation. Long-form content, tables, demos. +- `skills//SKILL.md` — routable, executable summaries for AI agents. Each declares YAML frontmatter (`name`, `description`, `last_verified`, `verified_against`). +- `agents/*.md` — agent role definitions (also routed at `/agents/` on the built site). + +Pairing is enforced: MDX pages marked `doc_skill_id: ` must match a `skills//SKILL.md` whose `name` equals ``. See `__tests__/doc-skill-pairing.test.mjs`. + +## Commands + +```bash +npm start # docusaurus dev server +npm run build # production build (output: build/) +npm run serve # serve built site on port 8080 +npm run clear # clear docusaurus cache +npm test # runs scripts/run-tests.mjs (all __tests__/*.test.mjs in a fixed order) +npm run skill-ln # symlink skills// into .cursor/.claude/.openclaw/.windsurf/skills +npm run agent-ln # symlink agents/.md into .cursor/.claude/.openclaw/.windsurf/agents +``` + +### Running a single test + +`npm test` executes the manifest in `scripts/run-tests.mjs`. To run one file directly: + +```bash +node __tests__/.test.mjs +``` + +New test files must be added to `TEST_FILES` in `scripts/run-tests.mjs` — `run-tests-manifest.test.mjs` enforces this. + +## Testing model + +Tests are plain Node ESM scripts (no framework). They exit non-zero on failure. Key guards to be aware of when editing docs or skills: + +- `doc-skill-pairing.test.mjs` — every MDX `doc_skill_id` must resolve to a skill whose `name` matches. +- `morph-doc-skill-inventory.test.mjs` — frontmatter consistency across all `skills/*/SKILL.md`; warns (non-fatal) when `last_verified` is older than 90 days. +- `morph-contracts-skill-tokenlist.test.mjs` — enforces parity between the `morph-contracts` Skill tables and `morph-bridge/public/morph-list/src/mainnet/tokenList.json`. +- `skills-sidebar.test.mjs` — `sidebars-skills.js` must list every skill directory. +- `vision-md.test.mjs` — VISION.md structural contract. +- `examples-viem-alt-fee.test.mjs` — executable Alt Fee behavior tied to SDK docs. + +When you change an `actionable` or `fact-table` MDX page or the corresponding SKILL.md, re-stamp `last_verified` and update `verified_against` in the same change. + +## Skill authoring loop (the most common task) + +When the user asks for a new skill or a revision, follow [`agents/morph-doc-agent.md`](./agents/morph-doc-agent.md): **one goal → one skill directory**, `name` == folder name. The golden path: + +1. Land or update long-form content in `docs/` with `doc_skill_id` frontmatter when routing is needed. +2. Create/update `skills//SKILL.md` — frontmatter + execution steps + self-check. Do **not** copy MDX body; link to the section. +3. If adding a new skill id, register it in `sidebars-skills.js`. +4. Run `npm test`. Fix the specific guard that fails — don't broaden scope. +5. For fact-table skills, update `verified_against` to list every canonical path you cross-checked. + +See `VISION.md` for the pairing policy (which doc types require a skill) and the freshness contract. + +## Mandatory self-check (docs / skills PRs) + +Before you finish or hand off work that touches `docs/`, `skills/`, or pairing metadata, confirm all five items below (mirrors the **Collaboration checklist** in [`CONTRIBUTING.md`](./CONTRIBUTING.md)): + +- **Pairing:** For **actionable** or **fact-table** scope per `VISION.md`, is every MDX `doc_skill_id` (when present) aligned with `skills//SKILL.md` (`name` equals folder name), and is that SKILL updated in the same change set? +- **Connector contract:** Does each affected Skill stay pointer-first—**Execution Steps** plus links into concrete `docs/` sections—not a paste of full MDX; use **Related Skills** and `references/` only as directed pointers? +- **Freshness:** If you changed on-chain facts, contract addresses, RPC endpoints, or package versions, did you re-stamp **`last_verified`** / **`verified_against`** on every affected Skill in this same change set? +- **Inventory:** For any **new** `skills//` directory, did you register it in **`sidebars-skills.js`**, run **`npm test`**, and fix failures without weakening unrelated guards? +- **Routing (if you touched discovery):** If you changed how a Skill should be selected, did you update YAML **`description`** (and eval JSON if you maintain one) per **Tuning description trigger rates** in `skills/README.md`? + +## Repo-specific conventions + +- **Never copy content between `docs/` and `skills/`.** Skills point into docs; docs never embed skill playbooks. +- **Morph-specific fields** (e.g. Alt Fee `feeTokenID` / `feeLimit`, predeploy addresses) must match current docs — do not infer from Ethereum mainnet assumptions. +- **Generated typedoc output** under `docs/build-on-morph/sdk/{classes,enumerations,functions,interfaces,type-aliases,variables}/` is regenerated; do not hand-edit frontmatter there. +- **Agent workspace files** at repo root (`IDENTITY.md`, `SOUL.md`, `USER.md`, `TOOLS.md`, `HEARTBEAT.md`, `memory/`) are for the OpenClaw agent runtime — leave them alone unless the task is specifically about agent configuration. `USER.md` is git-ignored. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 000000000..251c133bb --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,65 @@ +# Contributing to morph-doc + +This repository is the Morph documentation site (Docusaurus) and the **source of truth for Morph Agent Skills**. Before opening a pull request that touches `docs/`, `skills/`, or `agents/`, read the links below so changes stay consistent with the doc–skill contract. + +## Read first + +| Doc | Purpose | +|-----|---------| +| [`CLAUDE.md`](./CLAUDE.md) | Claude Code workspace entry: commands, skill loop, **Mandatory self-check (docs / skills PRs)**, links to AGENTS.md / VISION.md / CONTRIBUTING.md | +| [`AGENTS.md`](./AGENTS.md) | Commands, directories, tests, day-to-day agent workspace operations | +| [`VISION.md`](./VISION.md) | Documentation-as-SKILL vision, pairing policy, freshness metadata | +| [`skills/README.md`](./skills/README.md) | `skills/` conventions, symlinks (`npm run skill-ln`), optional trigger-eval workflow | +| [`agents/morph-doc-agent.md`](./agents/morph-doc-agent.md) | How to author or revise one Skill from a single goal | +| [`agents/morph-dapp-agent.md`](./agents/morph-dapp-agent.md) | End-to-end dApp delivery — routes to harness Skills (`morph-dapp-workflow`, etc.) | + +## Working with Claude Code + +Claude Code reads root [`CLAUDE.md`](./CLAUDE.md) when this repository is the active project. Use it together with this document: `CLAUDE.md` carries commands and the skill loop; **Morph knowledge base: Skills as connectors** (above) is the team contract for `docs/` / `skills/` / tests. + +- **Workspace root**: Open the **morph-doc** clone as the project root so paths (`docs/`, `skills/`, `__tests__/`) and `npm test` match CI and the guards described in `CLAUDE.md`. +- **In-repo skill mirrors (optional)**: Run `npm run skill-ln` so `skills//` are symlinked into **`.cursor/skills`**, **`.claude/skills`**, etc. under this repo (see [`skills/README.md`](./skills/README.md)). Use that when your editor expects mirror paths; opening morph-doc often already loads `skills/` directly. +- **Skills in other workspaces (optional)**: To load Morph skills without opening morph-doc, symlink into your tool’s **user-level** skills directory (e.g. `~/.cursor/skills`); `morph-skill-ln` does not write there — see **Using Morph skills from another repository** in [`skills/README.md`](./skills/README.md). +- **In-repo agent mirrors (optional)**: `npm run agent-ln` symlinks `agents/*.md` into **`.cursor/agents`**, **`.claude/agents`**, etc. under this repo. Agent frontmatter should include `name`, `description`, and `model` (see `__tests__/morph-dapp-agent.test.mjs`). +- **Single-topic Skill work**: Follow [`agents/morph-doc-agent.md`](./agents/morph-doc-agent.md); `CLAUDE.md` already routes the common “new or revise a Skill” loop there. +- **dApp harness planning output**: `planning/.md` is gitignored by default — local workflow state; commit only when the team wants planning docs in the PR. +- **Personal overrides**: Add a git-ignored `CLAUDE.local.md` at the repo root for machine-specific notes (see “Optional personal overrides” in [`CLAUDE.md`](./CLAUDE.md)). +- **Verify before merge**: Run `npm test` after doc or skill edits (same expectation as `CLAUDE.md`). + +## Morph knowledge base: Skills as connectors + +Team norms for treating this repository as Morph’s **versioned knowledge base** and **external brain** for agents. This aligns with the **Three-layer model** in [`AGENTS.md`](./AGENTS.md) and the contract in [`VISION.md`](./VISION.md). + +### Three layers + +1. **Knowledge base**: Canonical facts, long-form narrative, tables, and demos live in `docs/**/*.mdx` for humans and site search. Do not paste full MDX pages into a Skill. +2. **Brain**: **Execution Steps**, boundary notes, and **Self-Check** live in `skills//SKILL.md`. Executable checks that must stay aligned with docs live in `__tests__/`; merge only after `npm test` passes. +3. **Connector (Skill)**: Connects a short user or tool prompt to the right material—routing via YAML `name` / `description`, pairing MDX pages via `doc_skill_id`, and handing off via **Related Skills** without copying sibling Skill bodies. + +### Collaboration checklist + +These items are **mandatory self-check bullets** in root [`CLAUDE.md`](./CLAUDE.md) for Claude Code sessions; keep both places aligned when you change norms. + +- For **actionable** or **fact-table** topics, follow the pairing policy in `VISION.md`: keep `skills//SKILL.md` in sync, with `doc_skill_id` matching the Skill `name` and directory name (enforced by `__tests__/doc-skill-pairing.test.mjs` and related guards). +- Skill bodies follow the **connector contract**: execution steps + pointers to specific `docs/` sections + optional Related Skills; large tables may live under `references/` with guidance in the Skill on when to open them. +- When changing on-chain facts, contract addresses, RPC endpoints, or package versions, update `last_verified` / `verified_against` on affected Skills in the same PR (see `VISION.md`). +- Register new skill directories in `sidebars-skills.js`. For in-repo IDE mirror paths on a fresh clone, use `npm run skill-ln` (see `skills/README.md`). +- To tighten or relax how often a Skill is selected, see **Tuning description trigger rates** in `skills/README.md` and maintain an eval JSON modeled on `scripts/skill-trigger-evals.*.example.json`. + +### Mnemonic + +Write facts in `docs/`; write how to be found and executed in `skills/`; keep pairing verifiable with `doc_skill_id` and `npm test`. + +## Local setup + +- Install dependencies with your package manager (this repo commonly uses `pnpm` or `npm`). +- `npm start` — Docusaurus dev server +- `npm test` — run all guards under `__tests__/` (required before merging doc–skill changes) + +## Pull requests + +- Run `npm test` and fix failures; do not broaden test scope to silence unrelated guards. +- Do not hand-edit typedoc output under `docs/build-on-morph/sdk/{classes,enumerations,functions,interfaces,type-aliases,variables}/` or add `doc_skill_id` there (regenerated output). +- Do not commit secrets (see `.gitignore` and `AGENTS.md`). + +For broader product context, see the repository [`README.md`](./README.md). diff --git a/README.md b/README.md index 78361249b..6e1c6b10a 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,42 @@ Our decentralized sequencer design and innovative Layer 2 approach address block 3. [Morph's Origins and Aspirations](https://medium.com/@morphlayer/morphys-origins-and-aspirations-7afc0280a8e2) +## Contributing + +See [`CONTRIBUTING.md`](./CONTRIBUTING.md) for pull-request expectations, local commands, and the team norm **Morph knowledge base: Skills as connectors** (knowledge base, brain, and connector roles). + +## AI assistant workspace (Claude Code & OpenClaw) + +This repo includes agent-oriented docs at the root: + +| File | Purpose | +|------|---------| +| [`VISION.md`](./VISION.md) | Morph doc intelligence vision: **documentation as SKILL**, external brain for Morph-facing agents, developer toolchain (Cursor / Claude Code / OpenClaw). | +| [`AGENTS.md`](./AGENTS.md) | Shared operating instructions: architecture, commands, `docs/` vs `skills/`, testing expectations. OpenClaw loads this when the workspace is this directory. | +| [`CLAUDE.md`](./CLAUDE.md) | Entry point for [Claude Code](https://docs.anthropic.com/en/docs/claude-code/claude-md); points to `AGENTS.md` for project facts. | + +### Point OpenClaw workspace at this repository + +So file tools and session bootstrap use this clone as the agent home: + +1. Edit `~/.openclaw/openclaw.json` on the machine that runs the OpenClaw gateway. +2. Set the workspace to **this repo’s absolute path** (adjust for your machine), for example: + +```json5 +{ + "agent": { + "workspace": "/Users/you/path/to/morph-doc" + } +} +``` + +If your config uses the `agents.defaults` shape instead, set `agents.defaults.workspace` to the same path—follow the keys your OpenClaw version documents. + +3. Restart the gateway or run `openclaw setup` if you need missing workspace files seeded. +4. If you maintain `AGENTS.md` yourself and do not want bootstrap to recreate defaults, you can set `agent.skipBootstrap` / `skipBootstrap` per [OpenClaw Agent Workspace](https://docs.openclaw.ai/concepts/agent-workspace) docs. + +Optional OpenClaw files in the same directory (see OpenClaw docs): `SOUL.md`, `USER.md`, `TOOLS.md`, `memory/`, etc. `USER.md` is listed in `.gitignore` for local-only preferences. + ## Learn more Website: https://www.morphl2.io/ diff --git a/VISION.md b/VISION.md new file mode 100644 index 000000000..f93dc90ad --- /dev/null +++ b/VISION.md @@ -0,0 +1,170 @@ +--- +name: morph-doc-vision +description: "Morph documentation as the external brain for Morph-facing agents: docs-as-SKILL, developer toolchain (docs/, skills/, IDE agents, OpenClaw workspace), and how to write MDX so models instantiate reliable behavior. Use when defining or explaining the doc–skill contract, onboarding contributors to agent-ready documentation, or aligning Cursor / Claude Code / OpenClaw with this repository." +--- + +# Morph Documentation Agent Vision (VISION) + +## Single Source of Truth + +This file describes how **morph-doc** binds "human-readable documentation" to "executable Agent Skills", forming **Morph's External Brain**: the model does not rely on conversational memory but treats **`docs/` + `skills/`** inside the repository as the authoritative source. + +- **Architecture & day-to-day operations:** [`AGENTS.md`](./AGENTS.md) +- **Flows and facts for specific topics:** `docs/**/*.mdx` / `docs/**/*.md` and the corresponding `skills//SKILL.md` +- **Skills overview (directory conventions, division with `docs/`, symlinks & `morph-skill-ln`):** [`skills/README.md`](./skills/README.md) + +**LLM Wiki alignment.** Morph-doc follows the same **three-layer** pattern as the [LLM Wiki](https://gist.github.com/karpathy/442a6bf555914893e9891c11519de94f) idea (immutable sources, a maintained knowledge surface, and schema that disciplines agents). Here **maintainer-owned `docs/` (MDX)** is the wiki body—canonical facts and long-form narrative—**`skills/`** supplies **routing and the execution contract** (playbooks, self-checks, pointers into docs), and **`AGENTS.md` / `CLAUDE.md`** hold the workspace-level operational schema. + +This VISION does not repeat CLI commands or directory trees; it only defines **goals, contracts, and self-checks**. + +--- + +## Vision: Documentation as SKILL + +**Documentation as SKILL** means: developer-facing pages are written to satisfy the **Agent Skill contract**, so the same material can be read by humans and also used in model conversations as **routable, executable, self-checkable** instantiation instructions. + +| Dimension | For humans | For models to "instantiate" | +|-----------|-----------|----------------------------| +| Facts & API | MDX body, tables, examples | Skill summary + pointer to MDX section, avoids duplicating long tables | +| Flow | Headings and section order | **Execution Steps** numbered steps, reduces guessing and skipping | +| Boundaries | Notes, limitations | Stated in **description** and **Self-Check**: "when not applicable" | + +After writing and merging into the repo, the toolchain routes user questions to the correct behavior via **Skill name / `doc_skill_id` / description** — instead of reasoning from scratch each time. + +--- + +## What "External Brain" Means for Morph + +- **External**: relative to model weights and conversation context; authority lives in the **Git repository**, versioned, reviewable, and revertible. +- **Brain**: Agents (IDE, Claude Code, OpenClaw, etc.) **prioritize reading and following** `docs/` and `skills/` when answering Morph-related questions, rather than relying solely on training data or short context. +- **Morph agents**: assistants oriented toward the Morph ecosystem (developer support, SDK, nodes, bridge, Rails, etc.) — their consistency and safety boundaries are governed by **the documentation contract in this repo**. + +--- + +## Developer Toolchain (How to Instantiate) + +1. **Human docs (MDX/MD)** + - Authoritative long-form content, demos, component references. + - When pairing with a Skill, use `doc_skill_id: ` in the frontmatter. + +2. **Skill (`skills//SKILL.md`)** + - **YAML**: `name` (matches directory name), `description` (third-person, trigger scenarios, capability boundary). + - **Body**: execution playbook, single source of truth path, execution steps, self-check list; large tables can go in `references/` with instructions in the SKILL for when to open them. + +3. **IDE / multi-tool reuse** + - In-repo: canonical directory is **`skills//`**; see [`skills/README.md`](./skills/README.md) to symlink to Cursor / Claude Code / OpenClaw global dirs. + - **OpenClaw**: when the workspace points to this repo, sessions load [`AGENTS.md`](./AGENTS.md); the workspace `skills/` has high priority in OpenClaw (follow the OpenClaw version docs). + +4. **Validation** + - `doc_skill_id` matches `name` in `SKILL.md`; related test cases in `__tests__/doc-skill-pairing.test.mjs`. + +--- + +## Write Docs to the SKILL Standard (Contributor Contract) + +When writing or revising MDX, at minimum satisfy: + +1. **Routable**: if the topic is suitable for Agent reuse, maintain a corresponding `skills//SKILL.md` with a `description` that covers how users will ask and which keywords it includes (chain IDs, package names, etc.). +2. **Single source of truth**: the Skill does not copy-paste the full MDX; use "read section X of `docs/...`" + minimal necessary extracts. +3. **Executable**: provide **Execution Steps** (prerequisites → steps → verification); avoid pure narrative with no actions. +4. **No fabricated fields**: Morph-specific fields (e.g. Alt Fee's `feeTokenID` / `feeLimit`) must match the documentation; do not invent exports or undocumented APIs. +5. **Testable**: for scripts, validation logic, or behaviors strongly tied to docs, add or update tests in `__tests__/`. +6. **Instantiation Self-Check**: keep a **Self-Check** checklist (3–7 items) at the end of the SKILL for the model to verify before delivering. + +When generating Skills with a specialized sub-agent, follow the workflow in [`agents/morph-doc-agent.md`](./agents/morph-doc-agent.md): **single goal → single skill directory**, `name` matches the folder name. + +--- + +## Pairing Policy (which docs need a Skill) + +Not every MDX page benefits from a Skill. Follow this layered rule: + +| Doc type | `doc_skill_id` required | Rationale | +|----------|------------------------|-----------| +| **Actionable** (deploy, run, integrate, bridge, Alt Fee) | **Yes** | Agents need routing + execution steps | +| **Fact tables** (contract addresses, RPC endpoints, chain IDs, token lists) | **Yes** | Agents need precise lookup with a canonical source | +| **Conceptual** (what is Optimistic Rollup, RVP mechanics) | Optional | Human-first content; agent routing adds limited value | +| **Narrative** (Vision, Roadmap, Mission) | No | No execution surface to expose | +| **Generated** (typedoc under `docs/build-on-morph/sdk/{classes,enumerations,functions,interfaces,type-aliases,variables}/`) | No | Re-generated output; manual frontmatter would be overwritten | + +**Target**: 100% pairing for *actionable* and *fact-table* docs. Tracked by `__tests__/doc-skill-pairing.test.mjs`. + +--- + +## Cross-Skill References (`Related Skills`) + +Skills may reference siblings via a dedicated section, **without copying content**: + +```markdown +## Related Skills + +- `morph-contracts` — Contract addresses, when you need to look up Bridge gateways +- `morph-js-sdk` — JavaScript SDK, when picking Viem vs Ethers adapter +``` + +Rules: + +1. **Pointer only**, never replicate the other Skill's body. +2. **No mandatory reciprocity** — A may reference B without B referencing A; acyclic by convention. +3. List each cross-reference with a one-line *when to open it* hint. + +--- + +## Skill Verification Metadata (freshness contract) + +Each `SKILL.md` declares when it was last human-verified and against which sources: + +```yaml +--- +name: morph-contracts +description: "…" +last_verified: 2026-04-20 +verified_against: + - morph-bridge/public/morph-list/src/mainnet/tokenList.json + - docs/build-on-morph/developer-resources/1-contracts.md +--- +``` + +- **`last_verified`** — ISO date (YYYY-MM-DD) of the most recent human re-read of the Skill against its sources. +- **`verified_against`** — list of paths whose content was cross-checked. Sibling-app paths (e.g. `morph-bridge/`) are valid when they are the canonical source of truth. +- **Decay threshold** — `last_verified` older than **90 days** emits a warning from `__tests__/morph-doc-skill-inventory.test.mjs`. The warning is informational (does not fail the run) so unrelated work is not blocked. +- **Protocol upgrades** — when a Morph fork or predeploy change lands, re-stamp affected Skills in the same PR that introduces the doc update. + +Additional existing guard: `__tests__/morph-contracts-skill-tokenlist.test.mjs` enforces table↔JSON parity for `morph-contracts` (fact-table drift). + +--- + +## Feedback Loop + +Skill or MDX drift reports flow through a single GitHub Issue template (`.github/ISSUE_TEMPLATE/skill-feedback.yaml`) and the `skill-drift` label, triaged by the doc maintainer. The `MarkdownActionsDropdown` site component may link users directly to this template from any MDX page. + +--- + +## Execution Steps (Maintainers) + +1. Define topic and audience (chain, role: contract / node / SDK). +2. Land or update MDX in `docs/`; set `doc_skill_id` when a Skill is needed. +3. Create or update `skills//SKILL.md` (frontmatter + playbook + self-check). +4. Run tests (including `doc-skill` pairing and project scripts). +5. If global toolchain changes are needed, update symlink instructions in `skills/README.md`. + +--- + +## Self-Check + +- [ ] Does the long-form content for this topic still live only in `docs/`, with the Skill providing only summaries and pointers? +- [ ] Does `doc_skill_id` (if present) match `name` in `skills//SKILL.md`? +- [ ] Does `description` allow the model to route to this Skill even when the user doesn't state all keywords? +- [ ] Are Morph-specific concepts and common pitfalls documented to prevent the model from applying Ethereum mainnet assumptions? +- [ ] Does executable code match the package versions, chain names, and value ranges in the documentation? + +--- + +## Relationship to Related Files + +| File | Role | +|------|------| +| [`AGENTS.md`](./AGENTS.md) | In-repo Agent operations handbook (commands, directories, tests, secrets) | +| [`CLAUDE.md`](./CLAUDE.md) | Claude Code entry point, points to `AGENTS.md` | +| [`VISION.md`](./VISION.md) (this file) | Doc–Skill vision and contract; does not replace topic-specific SKILLs | +| [`agents/morph-doc-agent.md`](./agents/morph-doc-agent.md) | Sub-agent instructions for generating/revising a Skill from "one goal" | diff --git a/__tests__/agent-driven-development-workflow-doc.test.mjs b/__tests__/agent-driven-development-workflow-doc.test.mjs new file mode 100644 index 000000000..513934c9d --- /dev/null +++ b/__tests__/agent-driven-development-workflow-doc.test.mjs @@ -0,0 +1,98 @@ +/** + * Sanity check for docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md: + * this page is the human-readable *entry dispatcher* for every Morph dApp Agent Skill + * in this repo. Guard its key routing anchors so it does not silently degrade to a + * single-skill companion page. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const DOC_PATH = path.join( + ROOT, + 'docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md' +); + +const content = fs.readFileSync(DOC_PATH, 'utf8'); + +assert.match(content, /^---\r?\n[\s\S]*?\r?\n---/, 'should have YAML frontmatter'); +assert.match( + content, + /^doc_skill_id:\s*morph-dapp-workflow\s*$/m, + 'doc_skill_id must pair with morph-dapp-workflow' +); + +for (const heading of [ + '## Agent definitions', + '## Pick your entry Skill', + '## Quick decision tree', + '## The end-to-end path: morph-dapp-workflow', + '### Stage 1', + '### Stage 2', + '### Stage 3', + '## Driving the flow from your IDE', + '## See also', +]) { + assert.ok(content.includes(heading), `dispatcher doc should include section: ${heading}`); +} + +const DISPATCH_TARGETS = [ + '/skills/morph-dapp-workflow/SKILL', + '/skills/morph-dapp-planning/SKILL', + '/skills/morph-dapp-codegen/SKILL', + '/skills/morph-dapp-code-review/SKILL', + '/skills/morph-js-sdk/SKILL', + '/skills/morph-contracts/SKILL', + '/skills/morph-tx-cost/SKILL', + '/skills/morph-rails/SKILL', + '/skills/morph-skill-ln/SKILL', + '/skills/morph-full-node-run-in-docker/SKILL', +]; +for (const link of DISPATCH_TARGETS) { + assert.ok( + content.includes(link), + `dispatcher doc must link to every routable Skill; missing ${link}` + ); +} + +for (const agentLink of ['/agents/morph-dapp-agent', '/agents/morph-doc-agent']) { + assert.ok( + content.includes(agentLink), + `dispatcher doc must link to agent definitions; missing ${agentLink}`, + ); +} + +assert.match( + content, + /npm run skill-ln/, + 'dispatcher doc should document in-repo skill-ln alias', +); +assert.match( + content, + /user-level/i, + 'dispatcher doc should distinguish user-level symlinks for other workspaces', +); +assert.doesNotMatch( + content, + /morph-skill-ln \\\s*\n\s*morph-dapp-planning/, + 'morph-skill-ln accepts at most one skill-id positional argument', +); + +for (const anchor of [ + 'WORKFLOW_REVIEW_BASE', + 'gitignore', + 'morph-dapp-workflow', + 'feeTokenID', + 'feeLimit', + '2818', + '2910', + 'GasPriceOracle', + 'P0', +]) { + assert.ok(content.includes(anchor), `dispatcher doc should mention ${anchor}`); +} + +console.log('agent-driven-development-workflow-doc: ok'); diff --git a/__tests__/agents-sidebar.test.mjs b/__tests__/agents-sidebar.test.mjs new file mode 100644 index 000000000..c2c7201c5 --- /dev/null +++ b/__tests__/agents-sidebar.test.mjs @@ -0,0 +1,31 @@ +/** + * sidebars-agents.js doc ids must match agents/*.md (top-level only). + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const AGENTS_DIR = path.join(ROOT, 'agents'); +const SIDEBAR_FILE = path.join(ROOT, 'sidebars-agents.js'); + +const mdFiles = fs + .readdirSync(AGENTS_DIR) + .filter((f) => f.endsWith('.md')) + .sort(); + +const expectedIds = mdFiles.map((f) => path.basename(f, '.md')).sort(); + +const sidebarSrc = fs.readFileSync(SIDEBAR_FILE, 'utf8'); +const listed = [...sidebarSrc.matchAll(/id:\s*['"]([^'"]+)['"]/g)].map((m) => m[1]); +listed.sort(); + +assert.deepEqual( + listed, + expectedIds, + 'sidebars-agents.js doc ids must match agents/*.md (update sidebar when adding an agent doc)', +); + +console.log('agents-sidebar: ok (%d pages)', expectedIds.length); diff --git a/__tests__/build-toolchain-constraints.test.mjs b/__tests__/build-toolchain-constraints.test.mjs new file mode 100644 index 000000000..5d5bad1b6 --- /dev/null +++ b/__tests__/build-toolchain-constraints.test.mjs @@ -0,0 +1,42 @@ +/** + * Pin webpack to a range compatible with Docusaurus 3.1 + webpackbar (ProgressPlugin options). + * Webpack 5.97+ validates ProgressPlugin strictly; webpackbar 5.0.x passes legacy fields (name, color, reporters). + * @see https://github.com/webpack/webpack/issues — keep in sync with package.json pnpm.overrides.webpack + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const PKG = JSON.parse(fs.readFileSync(path.join(ROOT, 'package.json'), 'utf8')); + +const PINNED = '5.105.4'; + +assert.equal( + PKG.pnpm?.overrides?.webpack, + PINNED, + `package.json pnpm.overrides.webpack must be ${PINNED} (webpackbar + Docusaurus build)`, +); +assert.equal( + PKG.devDependencies?.webpack, + PINNED, + `package.json devDependencies.webpack must be ${PINNED} so install resolves a single copy`, +); +assert.match( + PKG.devDependencies?.typescript ?? '', + /^[~^]?5\.(4|5|6|7|8|9)\./, + 'typescript should be >=5.4 for viem/ox peer (package.json devDependencies.typescript)', +); + +const lockPath = path.join(ROOT, 'pnpm-lock.yaml'); +assert.ok(fs.existsSync(lockPath), 'pnpm-lock.yaml exists'); +const lockContent = fs.readFileSync(lockPath, 'utf8'); +assert.match( + lockContent, + new RegExp(`overrides:\\s*\\n\\s*webpack:\\s*${PINNED.replace(/\./g, '\\.')}`), + 'pnpm-lock.yaml must record webpack override', +); + +console.log('build-toolchain-constraints: ok'); diff --git a/__tests__/claude-md.test.mjs b/__tests__/claude-md.test.mjs new file mode 100644 index 000000000..7b556342b --- /dev/null +++ b/__tests__/claude-md.test.mjs @@ -0,0 +1,42 @@ +/** + * CLAUDE.md: mandatory self-check section for docs/skills PRs (aligned with CONTRIBUTING). + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const CLAUDE = path.join(ROOT, 'CLAUDE.md'); + +assert.ok(fs.existsSync(CLAUDE), 'CLAUDE.md exists'); + +const content = fs.readFileSync(CLAUDE, 'utf8'); + +assert.match( + content, + /## Mandatory self-check \(docs \/ skills PRs\)/, + 'CLAUDE.md has the mandatory self-check heading', +); + +const selfCheckKeys = [ + '**Pairing:**', + '**Connector contract:**', + '**Freshness:**', + '**Inventory:**', + '**Routing (if you touched discovery):**', +]; +for (const key of selfCheckKeys) { + assert.ok( + content.includes(key), + `CLAUDE.md self-check includes labeled item: ${key}`, + ); +} + +assert.ok( + content.includes('[`CONTRIBUTING.md`](./CONTRIBUTING.md)'), + 'CLAUDE.md self-check links to CONTRIBUTING.md', +); + +console.log('claude-md: ok'); diff --git a/__tests__/contributing-md.test.mjs b/__tests__/contributing-md.test.mjs new file mode 100644 index 000000000..f5f24c65c --- /dev/null +++ b/__tests__/contributing-md.test.mjs @@ -0,0 +1,48 @@ +/** + * CONTRIBUTING.md: exists and retains the team norm section for the Morph + * knowledge base (Skill as connector) plus pointers to AGENTS/VISION. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const CONTRIBUTING = path.join(ROOT, 'CONTRIBUTING.md'); + +assert.ok(fs.existsSync(CONTRIBUTING), 'CONTRIBUTING.md exists'); + +const content = fs.readFileSync(CONTRIBUTING, 'utf8'); + +assert.match( + content, + /## Morph knowledge base: Skills as connectors/, + 'CONTRIBUTING.md has the Morph knowledge base / Skill connector section heading', +); + +const requiredSubstrings = [ + 'CLAUDE.md', + 'AGENTS.md', + 'VISION.md', + 'doc_skill_id', + 'npm test', + '`docs/`', + '`skills/`', + 'Related Skills', + 'sidebars-skills.js', + 'Three layers', + 'Working with Claude Code', + 'mandatory self-check bullets', + 'npm run skill-ln', + 'In-repo skill mirrors', + 'user-level', +]; +for (const s of requiredSubstrings) { + assert.ok( + content.includes(s), + `CONTRIBUTING.md contains expected fragment: ${s}`, + ); +} + +console.log('contributing-md: ok'); diff --git a/__tests__/doc-skill-pairing.test.mjs b/__tests__/doc-skill-pairing.test.mjs new file mode 100644 index 000000000..1aa857e04 --- /dev/null +++ b/__tests__/doc-skill-pairing.test.mjs @@ -0,0 +1,94 @@ +/** + * Doc ↔ skill pairing: assert doc frontmatter doc_skill_id matches + * skills//SKILL.md name (canonical repo-root paths). + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); + +const PAIRS = [ + { + docRelative: + 'docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md', + expectedId: 'morph-full-node-run-in-docker', + }, + { + docRelative: 'docs/build-on-morph/sdk/js-sdk.mdx', + expectedId: 'morph-js-sdk', + }, + { + docRelative: 'docs/build-on-morph/developer-resources/1-contracts.md', + expectedId: 'morph-contracts', + }, + { + docRelative: 'docs/morph-rails/0-overview.md', + expectedId: 'morph-rails', + }, + { + docRelative: + 'docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md', + expectedId: 'morph-tx-cost', + }, + { + docRelative: + 'docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md', + expectedId: 'morph-dapp-workflow', + }, + { + docRelative: + 'docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md', + expectedId: 'morph-bridge', + }, + { + docRelative: + 'docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md', + expectedId: 'morph-verify-contracts', + }, + { + docRelative: + 'docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md', + expectedId: 'morph-rpc-api', + }, +]; + +function parseFrontmatterField(content, field) { + const m = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); + if (!m) return null; + const fm = m[1]; + const line = new RegExp(`^${field}:\\s*(.+)$`, 'm').exec(fm); + return line ? line[1].trim().replace(/^["']|["']$/g, '') : null; +} + +function readSkillName(skillPath) { + const content = fs.readFileSync(skillPath, 'utf8'); + return parseFrontmatterField(content, 'name'); +} + +for (const { docRelative, expectedId } of PAIRS) { + const docPath = path.join(ROOT, docRelative); + assert.ok(fs.existsSync(docPath), `doc should exist: ${docRelative}`); + + const docContent = fs.readFileSync(docPath, 'utf8'); + const docSkillId = parseFrontmatterField(docContent, 'doc_skill_id'); + assert.equal( + docSkillId, + expectedId, + `${docRelative} doc_skill_id should be ${expectedId}` + ); + + const skillPath = path.join(ROOT, 'skills', expectedId, 'SKILL.md'); + assert.ok(fs.existsSync(skillPath), `SKILL.md should exist: ${expectedId}`); + + const skillName = readSkillName(skillPath); + assert.equal( + skillName, + expectedId, + `SKILL name should match doc_skill_id: ${expectedId}` + ); +} + +console.log('doc-skill-pairing: ok (%d pairs)', PAIRS.length); diff --git a/__tests__/examples-viem-alt-fee.test.mjs b/__tests__/examples-viem-alt-fee.test.mjs new file mode 100644 index 000000000..4253bf0fb --- /dev/null +++ b/__tests__/examples-viem-alt-fee.test.mjs @@ -0,0 +1,42 @@ +/** + * examples/viem-alt-fee layout and dry-run smoke test. + */ +import assert from "node:assert/strict"; +import { spawnSync } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, ".."); +const EXAMPLE_DIR = path.join(ROOT, "examples", "viem-alt-fee"); +const SCRIPT = path.join(EXAMPLE_DIR, "send-alt-fee.mjs"); + +for (const f of ["package.json", "send-alt-fee.mjs", ".env.example"]) { + assert.ok( + fs.existsSync(path.join(EXAMPLE_DIR, f)), + `expected examples/viem-alt-fee/${f}` + ); +} + +const check = spawnSync(process.execPath, ["--check", SCRIPT], { + encoding: "utf8", + timeout: 15000, +}); +assert.equal(check.status, 0, check.stderr || "node --check send-alt-fee.mjs"); + +const dry = spawnSync( + process.execPath, + [SCRIPT], + { + cwd: EXAMPLE_DIR, + encoding: "utf8", + env: { ...process.env, MORPH_DRY_RUN: "1" }, + timeout: 15000, + } +); +assert.equal(dry.status, 0, dry.stderr || dry.stdout); +assert.ok(dry.stdout.includes("dry-run"), "dry-run output should mention mode"); +assert.ok(dry.stdout.includes("feeTokenID"), "dry-run output should include feeTokenID"); + +console.log("examples-viem-alt-fee: ok"); diff --git a/__tests__/is-alt-fee.test.mjs b/__tests__/is-alt-fee.test.mjs new file mode 100644 index 000000000..d49590eb1 --- /dev/null +++ b/__tests__/is-alt-fee.test.mjs @@ -0,0 +1,78 @@ +/** + * isAltFee() — three-layer rules for type / feeTokenID / feeLimit (aligned with morph-doc inline notes) + */ +import assert from 'node:assert/strict'; +import { createRequire } from 'node:module'; + +const require = createRequire(import.meta.url); +const { + isAltFee, + isAltFeeTypeExplicit, + isFeeLimitValid, + isPositiveFeeTokenId, +} = require('../src/utils/isAltFee.js'); + +// --- type layer --- +assert.equal(isAltFee({}), false, 'no feeTokenID'); +assert.equal(isAltFee(), false); +assert.equal(isAltFee({ feeTokenID: 4 }), true, 'when type omitted, only feeTokenID matters'); +assert.equal(isAltFee({ type: null, feeTokenID: 4 }), true, 'type null same as omitted'); +assert.equal(isAltFee({ type: 2, feeTokenID: 4 }), false, 'non-AltFee type → false'); +assert.equal(isAltFee({ type: 'eip1559', feeTokenID: 4 }), false); + +assert.equal(isAltFee({ type: 127, feeTokenID: 1 }), true); +assert.equal(isAltFee({ type: 127n, feeTokenID: 1 }), true); +assert.equal(isAltFee({ type: '0x7f', feeTokenID: 1 }), true); +assert.equal(isAltFee({ type: '0X7F', feeTokenID: 1 }), true); +assert.equal(isAltFee({ type: '0x7F', feeTokenID: 1 }), true, 'mixed-case hex digits'); +assert.equal(isAltFee({ type: ' 0x7f ', feeTokenID: 1 }), true, 'trimmed hex string'); +assert.equal(isAltFee({ type: 'altFee', feeTokenID: 1 }), true); +assert.equal(isAltFee({ type: 'ALtFEE', feeTokenID: 1 }), true, 'altFee is case-insensitive'); + +// --- contract: explicit AltFee type without feeTokenID throws --- +assert.throws( + () => isAltFee({ type: 127 }), + /feeTokenID is required/, + 'type=127 without feeTokenID', +); +assert.throws( + () => isAltFee({ type: 127, feeTokenID: null }), + /feeTokenID is required/, + 'type=127 with feeTokenID null', +); +assert.throws( + () => isAltFee({ type: '0x7f', feeTokenID: null }), + /feeTokenID is required/, +); +assert.throws( + () => isAltFee({ type: 'altFee' }), + /feeTokenID is required/, +); + +// --- feeTokenID layer --- +assert.equal(isAltFee({ type: 127, feeTokenID: 0 }), false, '127 + 0 is not AltFee, no throw'); +assert.equal(isAltFee({ feeTokenID: 0 }), false); +assert.equal(isAltFee({ feeTokenID: -1 }), false); +assert.equal(isAltFee({ feeTokenID: 4n }), true); +assert.equal(isAltFee({ feeTokenID: 1.5 }), false, 'reject non-integer token id'); + +// --- feeLimit optional --- +assert.equal(isAltFee({ feeTokenID: 4, feeLimit: 0 }), true); +assert.equal(isAltFee({ feeTokenID: 4, feeLimit: 0n }), true); +assert.equal(isAltFee({ feeTokenID: 4, feeLimit: -1 }), false); +assert.equal(isAltFee({ feeTokenID: 4, feeLimit: -1n }), false); +assert.equal(isAltFee({ feeTokenID: 4, feeLimit: Number.NaN }), false); +assert.equal(isAltFee({ feeTokenID: 4, feeLimit: undefined }), true, 'limit omitted'); +assert.equal(isAltFee({ feeTokenID: 4, feeLimit: null }), true, 'null treated as limit omitted'); + +// helpers (for other tests in this file or future reuse) +assert.equal(isAltFeeTypeExplicit(127), true); +assert.equal(isAltFeeTypeExplicit(126), false); +assert.equal(isAltFeeTypeExplicit('0x7F'), true); +assert.equal(isAltFeeTypeExplicit('0X7f'), true); +assert.equal(isPositiveFeeTokenId(1), true); +assert.equal(isPositiveFeeTokenId(0), false); +assert.equal(isFeeLimitValid(0), true); +assert.equal(isFeeLimitValid(-0.001), false); + +console.log('is-alt-fee: ok'); diff --git a/__tests__/markdown-actions-routes.test.mjs b/__tests__/markdown-actions-routes.test.mjs new file mode 100644 index 000000000..0e0f092ed --- /dev/null +++ b/__tests__/markdown-actions-routes.test.mjs @@ -0,0 +1,47 @@ +/** + * MarkdownActionsDropdown + Root injection: eligible pathnames (docs + skills + agents plugins). + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import { createRequire } from 'node:module'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const require = createRequire(import.meta.url); +const { isMarkdownActionsPathname } = require('../src/utils/isMarkdownActionsPathname.js'); + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); + +assert.equal(isMarkdownActionsPathname('/docs/foo/bar'), true); +assert.equal(isMarkdownActionsPathname('/docs'), true, 'docs landing'); +assert.equal(isMarkdownActionsPathname('/skills'), true, 'skills landing'); +assert.equal(isMarkdownActionsPathname('/agents'), true, 'agents landing'); +assert.equal(isMarkdownActionsPathname('/skills/README'), true); +assert.equal(isMarkdownActionsPathname('/skills/morphchain-bridge/SKILL'), true); +assert.equal(isMarkdownActionsPathname('/agents/morph-doc-agent'), true); +assert.equal(isMarkdownActionsPathname('/blog/post'), false); +assert.equal(isMarkdownActionsPathname('/'), false); +assert.equal(isMarkdownActionsPathname(''), false); + +const rootSrc = fs.readFileSync(path.join(ROOT, 'src/theme/Root.js'), 'utf8'); +const dropdownSrc = fs.readFileSync( + path.join(ROOT, 'src/components/MarkdownActionsDropdown/index.js'), + 'utf8' +); +assert.match( + rootSrc, + /from\s+['"]\.\.\/utils\/isMarkdownActionsPathname(?:\.js)?['"]/, + 'Root.js should use isMarkdownActionsPathname' +); +assert.match( + dropdownSrc, + /from\s+['"]\.\.\/\.\.\/utils\/isMarkdownActionsPathname(?:\.js)?['"]/, + 'MarkdownActionsDropdown should use isMarkdownActionsPathname' +); +assert.ok( + !rootSrc.includes("pathname.startsWith('/docs/')"), + 'Root.js should not gate injection on /docs/ only' +); + +console.log('markdown-actions-routes: ok'); diff --git a/__tests__/markdown-source-export.test.mjs b/__tests__/markdown-source-export.test.mjs new file mode 100644 index 000000000..ba749abc1 --- /dev/null +++ b/__tests__/markdown-source-export.test.mjs @@ -0,0 +1,21 @@ +/** + * plugins/markdown-source-plugin.js must export cleaned .md for docs, skills, and agents into build/. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const PLUGIN = path.join(__dirname, '..', 'plugins', 'markdown-source-plugin.js'); +const src = fs.readFileSync(PLUGIN, 'utf8'); + +assert.match(src, /MARKDOWN_EXPORT_SOURCES\s*=\s*\[/, 'MARKDOWN_EXPORT_SOURCES array exists'); +for (const sub of ['docs', 'skills', 'agents']) { + assert.ok( + src.includes(`sourceSubdir: '${sub}'`) && src.includes(`outSubdir: '${sub}'`), + `export config must include ${sub}`, + ); +} + +console.log('markdown-source-export: ok'); diff --git a/__tests__/mdx-navigation-pages.test.mjs b/__tests__/mdx-navigation-pages.test.mjs new file mode 100644 index 000000000..784e79971 --- /dev/null +++ b/__tests__/mdx-navigation-pages.test.mjs @@ -0,0 +1,30 @@ +/** + * With `markdown.format: 'detect'` (docusaurus.config.js), only `.mdx` is compiled as MDX. + * Navigation pages use `import` + ``; they must stay `.mdx` or components won't render. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); + +const MDX_NAV_PAGES = [ + 'docs/build-on-morph/0-developer-navigation-page.mdx', + 'docs/about-morph/0-user-navigation-page.mdx', +]; + +for (const rel of MDX_NAV_PAGES) { + const abs = path.join(ROOT, rel); + assert.ok(fs.existsSync(abs), `expected ${rel} to exist`); + assert.ok(rel.endsWith('.mdx'), `${rel} must use .mdx for MDX (import/JSX)`); + const raw = fs.readFileSync(abs, 'utf8'); + assert.ok( + raw.includes("from '@site/src/components/Card'") || raw.includes('from "@site/src/components/Card"'), + `${rel} must import Card from @site/src/components/Card`, + ); + assert.ok(raw.includes('.md → .cursor/agents etc. + */ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const REPO_CURSOR_AGENTS = path.join(ROOT, '.cursor', 'agents').replace(/\\/g, '/'); +const REPO_CLAUDE_AGENTS = path.join(ROOT, '.claude', 'agents').replace(/\\/g, '/'); +const REPO_OPENCLAW_AGENTS = path.join(ROOT, '.openclaw', 'agents').replace(/\\/g, '/'); +const REPO_WINDSURF_AGENTS = path.join(ROOT, '.windsurf', 'agents').replace(/\\/g, '/'); +const SCRIPT = path.join(ROOT, 'scripts', 'morph-agent-ln'); + +assert.ok(fs.existsSync(SCRIPT), 'scripts/morph-agent-ln should exist'); +const st = fs.statSync(SCRIPT); +assert.ok((st.mode & 0o111) !== 0, 'scripts/morph-agent-ln should be executable'); + +function run(args, env = {}) { + const r = spawnSync('bash', [SCRIPT, ...args], { + cwd: ROOT, + encoding: 'utf8', + env: { ...process.env, ...env }, + }); + return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '' }; +} + +const help = run(['--help']); +assert.equal(help.status, 0, '--help should succeed'); +assert.match(help.stdout, /morph-agent-ln/, '--help should include script name'); +assert.match(help.stdout, /--root|-r/, 'should document path options'); +assert.match(help.stdout, /--agent|-a/, 'should document --agent'); +assert.match(help.stdout, /--unlink/, 'should document --unlink'); +assert.match(help.stdout, /agents\/morph-\*\.md/, '--help should mention batch glob'); + +const dry = run(['--dry-run'], { MORPH_DOC_ROOT: ROOT }); +assert.equal(dry.status, 0, '--dry-run should succeed'); +assert.match(dry.stdout, /ln -sfn/m, 'dry-run should print ln -sfn'); +assert.ok(dry.stdout.includes(REPO_CURSOR_AGENTS), 'default should include cursor agents path'); +assert.ok(dry.stdout.includes(REPO_CLAUDE_AGENTS), 'default should include claude agents path'); +assert.ok(dry.stdout.includes(REPO_OPENCLAW_AGENTS), 'default should include openclaw agents path'); +assert.ok(dry.stdout.includes(REPO_WINDSURF_AGENTS), 'default should include windsurf agents path'); +assert.match(dry.stdout, /morph-doc-agent\.md/, 'batch dry-run should emit morph-doc-agent.md'); +assert.match(dry.stdout, /morph-dapp-agent\.md/, 'batch dry-run should emit morph-dapp-agent.md'); +assert.doesNotMatch(dry.stdout, /\.cursor\/skills|\.claude\/skills/, 'must not target skills dirs'); + +const dryCursorOnly = run(['--dry-run', '-a', 'cursor'], { + MORPH_DOC_ROOT: ROOT, +}); +assert.equal(dryCursorOnly.status, 0); +assert.ok(dryCursorOnly.stdout.includes(REPO_CURSOR_AGENTS)); +assert.doesNotMatch(dryCursorOnly.stdout, /\.claude\/agents/m); +assert.doesNotMatch(dryCursorOnly.stdout, /\.openclaw\/agents/m); +assert.doesNotMatch(dryCursorOnly.stdout, /\.windsurf\/agents/m); + +const dryClaudeOnly = run(['--dry-run', '--root', ROOT, '--agent', 'claude']); +assert.equal(dryClaudeOnly.status, 0); +assert.ok(dryClaudeOnly.stdout.includes(REPO_CLAUDE_AGENTS)); +assert.doesNotMatch(dryClaudeOnly.stdout, /\.cursor\/agents/m); + +const dryWindsurfPath = run([ + '--dry-run', + '--root', + ROOT, + '--agent', + '.windsurf/agents', +]); +assert.equal(dryWindsurfPath.status, 0); +assert.ok(dryWindsurfPath.stdout.includes(REPO_WINDSURF_AGENTS)); + +const dryMulti = run([ + '--dry-run', + '--agent', + 'cursor', + '--agent', + 'codex', + '--root', + ROOT, +]); +assert.equal(dryMulti.status, 0); +assert.ok(dryMulti.stdout.includes(REPO_CURSOR_AGENTS)); +assert.match(dryMulti.stdout, /\.codex\/agents/m); + +const bad = run(['--nope']); +assert.notEqual(bad.status, 0, 'unknown flag should be non-zero'); + +const badAgent = run(['--dry-run', '--agent', 'not-a-valid-name-xyz']); +assert.notEqual(badAgent.status, 0, 'unknown builtin name without path-like token should fail'); + +const badRoot = run(['--root']); +assert.notEqual(badRoot.status, 0, '--root without path should fail'); + +const badAgentArg = run(['--agent']); +assert.notEqual(badAgentArg.status, 0, '--agent without value should fail'); + +const single = run(['--dry-run', 'morph-dapp-agent'], { MORPH_DOC_ROOT: ROOT }); +assert.equal(single.status, 0); +assert.match(single.stdout, /morph-dapp-agent\.md/m, 'single dry-run should mention the file'); +assert.doesNotMatch(single.stdout, /morph-doc-agent\.md/m, 'single mode should not link others'); + +const singleWithExt = run(['--dry-run', 'morph-dapp-agent.md'], { MORPH_DOC_ROOT: ROOT }); +assert.equal(singleWithExt.status, 0); +assert.match(singleWithExt.stdout, /morph-dapp-agent\.md/m, 'trailing .md is accepted'); + +const singleMissing = run(['--dry-run', 'does-not-exist-agent'], { + MORPH_DOC_ROOT: ROOT, +}); +assert.notEqual(singleMissing.status, 0, 'missing source agent should fail'); + +// --unlink: temp symlink in repo; dry-run / real delete (skip if symlinks disallowed) +const UNLINK_TEST_NAME = 'zzz-morph-agent-ln-unlink-test'; +const cursorAgentsDir = path.join(ROOT, '.cursor', 'agents'); +const unlinkTarget = path.join(cursorAgentsDir, `${UNLINK_TEST_NAME}.md`); +const morphDappAgent = path.join(ROOT, 'agents', 'morph-dapp-agent.md'); +let symlinkOk = false; +try { + fs.mkdirSync(cursorAgentsDir, { recursive: true }); + try { + fs.unlinkSync(unlinkTarget); + } catch { + // ignore + } + fs.symlinkSync(morphDappAgent, unlinkTarget); + symlinkOk = true; +} catch (e) { + if (e && (e.code === 'EPERM' || e.code === 'EACCES')) { + console.warn( + 'morph-agent-ln: skip unlink integration (symlink not permitted in this environment)', + ); + } else { + throw e; + } +} + +if (symlinkOk) { + const dryUnlink = run(['--unlink', '--dry-run', '-a', 'cursor', UNLINK_TEST_NAME], { + MORPH_DOC_ROOT: ROOT, + }); + assert.equal(dryUnlink.status, 0); + assert.match(dryUnlink.stdout, /rm -f/m, 'unlink dry-run should print rm -f'); + assert.ok(fs.lstatSync(unlinkTarget).isSymbolicLink(), 'dry-run should not remove symlink'); + + const realUnlink = run(['--unlink', '-a', 'cursor', UNLINK_TEST_NAME], { + MORPH_DOC_ROOT: ROOT, + }); + assert.equal(realUnlink.status, 0); + assert.ok(!fs.existsSync(unlinkTarget), 'unlink should remove symlink'); +} + +const unlinkMissing = run(['--unlink', '-a', 'cursor', 'nonexistent-agent-xyz'], { + MORPH_DOC_ROOT: ROOT, +}); +assert.notEqual(unlinkMissing.status, 0, 'unlink with no symlink should fail'); + +console.log('morph-agent-ln: ok'); diff --git a/__tests__/morph-contracts-skill-tokenlist.test.mjs b/__tests__/morph-contracts-skill-tokenlist.test.mjs new file mode 100644 index 000000000..414e91cfc --- /dev/null +++ b/__tests__/morph-contracts-skill-tokenlist.test.mjs @@ -0,0 +1,72 @@ +/** + * Keep skills/morph-contracts/SKILL.md in sync with morph-bridge mainnet tokenList.json + * when the bridge repo is present (sibling: ../morph-bridge/...). + * In CI (process.env.CI), the token list path must exist — no silent skip. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills', 'morph-contracts', 'SKILL.md'); +const TOKEN_LIST_PATH = path.join( + ROOT, + '..', + 'morph-bridge', + 'public', + 'morph-list', + 'src', + 'mainnet', + 'tokenList.json', +); + +function normAddr(a) { + return String(a).trim().toLowerCase(); +} + +function main() { + if (!fs.existsSync(TOKEN_LIST_PATH)) { + if (process.env.CI) { + assert.fail( + `morph-contracts-skill-tokenlist: required in CI, missing token list at ${TOKEN_LIST_PATH}`, + ); + } + console.log( + 'morph-contracts-skill-tokenlist: skip (no morph-bridge tokenList at %s)', + TOKEN_LIST_PATH, + ); + return; + } + + const raw = fs.readFileSync(TOKEN_LIST_PATH, 'utf8'); + const data = JSON.parse(raw); + assert.ok(Array.isArray(data.tokens), 'tokenList.json should have tokens[]'); + + const skill = fs.readFileSync(SKILL_PATH, 'utf8'); + const skillLower = skill.toLowerCase(); + + for (const t of data.tokens) { + const cid = String(t.chainId); + if (cid !== '1' && cid !== '2818') continue; + const addr = normAddr(t.address); + assert.match(addr, /^0x[0-9a-f]{40}$/, `token address shape: ${t.symbol}`); + assert.ok( + skillLower.includes(addr), + `SKILL.md should include L1/L2 address ${addr} (${t.symbol}, chainId ${cid}) from tokenList.json`, + ); + } + + assert.ok( + skill.includes('tokenList.json') && skill.includes('morph-bridge'), + 'SKILL.md should reference morph-bridge tokenList.json as canonical bridge list', + ); + + console.log( + 'morph-contracts-skill-tokenlist: ok (%d tokens checked)', + data.tokens.length, + ); +} + +main(); diff --git a/__tests__/morph-dapp-agent.test.mjs b/__tests__/morph-dapp-agent.test.mjs new file mode 100644 index 000000000..6fe01afb9 --- /dev/null +++ b/__tests__/morph-dapp-agent.test.mjs @@ -0,0 +1,88 @@ +/** + * Assert agents/morph-dapp-agent.md: frontmatter, default SKILL set existence, + * routing rules, no auto-commit promise, pointer-only orchestration. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const AGENT_PATH = path.join(ROOT, 'agents/morph-dapp-agent.md'); +const SKILLS_DIR = path.join(ROOT, 'skills'); + +assert.ok(fs.existsSync(AGENT_PATH), `morph-dapp-agent should exist: ${AGENT_PATH}`); + +const content = fs.readFileSync(AGENT_PATH, 'utf8'); +const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); +assert.ok(fm, 'should have YAML frontmatter'); + +const block = fm[1]; +function field(name) { + const m = new RegExp(`^${name}:\\s*(.+)$`, 'm').exec(block); + return m ? m[1].trim() : null; +} + +assert.equal(field('name'), 'morph-dapp-agent', 'frontmatter name must equal file stem'); +const model = field('model'); +assert.ok(model && model.length > 0, 'frontmatter should declare a default model'); + +const desc = field('description'); +assert.ok(desc && desc.length > 40, 'description should be non-empty and substantive'); +assert.match(desc, /Morph/, 'description should mention Morph'); +assert.match( + desc, + /end[- ]to[- ]end|pipeline|planning|review/i, + 'description should convey end-to-end delivery scope', +); +assert.match( + desc, + /Use when|trigger|when the user/i, + 'description should include trigger phrasing so IDE routing can match it', +); + +const REQUIRED_CHILD_SKILLS = [ + 'morph-dapp-workflow', + 'morph-dapp-planning', + 'morph-dapp-codegen', + 'morph-dapp-code-review', +]; + +for (const skill of REQUIRED_CHILD_SKILLS) { + assert.ok( + content.includes(skill), + `agent must reference child SKILL by name: ${skill}`, + ); + assert.ok( + fs.existsSync(path.join(SKILLS_DIR, skill, 'SKILL.md')), + `child SKILL must exist on disk: skills/${skill}/SKILL.md`, + ); +} + +assert.match( + content, + /Routing rules|Routing|路由/i, + 'agent should document explicit routing rules so single-step requests bypass the workflow', +); + +assert.match( + content, + /pointer[- ]only|never inline|do not inline|never replicate/i, + 'agent must declare pointer-only orchestration (no SKILL-body copying)', +); + +assert.ok( + /never auto[\s-]?(commit|push)|do not auto[\s-]?(commit|push)|no auto[\s-]?(commit|push)/i.test( + content, + ), + 'agent must explicitly forbid auto commit/push', +); + +assert.match( + content, + /morph-doc-agent/i, + 'agent should delineate scope against the sibling morph-doc-agent', +); + +console.log('morph-dapp-agent: ok'); diff --git a/__tests__/morph-dapp-code-review-skill.test.mjs b/__tests__/morph-dapp-code-review-skill.test.mjs new file mode 100644 index 000000000..293da409c --- /dev/null +++ b/__tests__/morph-dapp-code-review-skill.test.mjs @@ -0,0 +1,59 @@ +/** + * Sanity check for skills/morph-dapp-code-review/SKILL.md: + * frontmatter, four review dimensions, output schema, Morph-specific checks. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills/morph-dapp-code-review/SKILL.md'); + +const content = fs.readFileSync(SKILL_PATH, 'utf8'); + +const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); +assert.ok(fm, 'should have YAML frontmatter'); +const frontmatter = fm[1]; +assert.match(frontmatter, /^name:\s*morph-dapp-code-review\s*$/m, 'name must equal directory'); +assert.match(frontmatter, /Use when|当用户/i, 'description should include trigger phrasing'); + +for (const heading of [ + '## When to use', + '## Dimension Checklist', + '## Execution Steps', + '## Output Format', + '## Self-Check', + '## Related Skills', +]) { + assert.ok(content.includes(heading), `should include section: ${heading}`); +} + +for (const dim of [ + '### 1. Security', + '### 2. Performance', + '### 3. Code Quality', + '### 4. Planning compliance', +]) { + assert.ok(content.includes(dim), `should describe dimension: ${dim}`); +} + +for (const sev of ['P0', 'P1', 'P2']) { + assert.ok(content.includes(sev), `should mention severity ${sev}`); +} + +for (const anchor of [ + 'feeTokenID', + '2818', + '2910', + 'GasPriceOracle', + 'read-only', +]) { + assert.ok( + content.includes(anchor), + `morph-dapp-code-review SKILL should mention ${anchor}` + ); +} + +console.log('morph-dapp-code-review-skill: ok'); diff --git a/__tests__/morph-dapp-codegen-skill.test.mjs b/__tests__/morph-dapp-codegen-skill.test.mjs new file mode 100644 index 000000000..ca8b259c9 --- /dev/null +++ b/__tests__/morph-dapp-codegen-skill.test.mjs @@ -0,0 +1,48 @@ +/** + * Sanity check for skills/morph-dapp-codegen/SKILL.md: + * frontmatter shape, TDD red/green flow, and Morph-specific guardrails. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills/morph-dapp-codegen/SKILL.md'); + +const content = fs.readFileSync(SKILL_PATH, 'utf8'); + +assert.match(content, /^---\r?\n[\s\S]*?\r?\n---/, 'should have YAML frontmatter'); +assert.match(content, /^name:\s*morph-dapp-codegen\s*$/m, 'name must equal directory'); +assert.match(content, /Use when|当用户/i, 'description should include trigger phrasing'); + +for (const heading of [ + '## When to use', + '## Prerequisites', + '## Execution Steps', + '## Self-Check', + '## Related Skills', +]) { + assert.ok(content.includes(heading), `should include section: ${heading}`); +} + +for (const phase of ['Phase 1', 'Phase 2', 'Phase 3']) { + assert.ok(content.includes(phase), `should describe ${phase}`); +} + +for (const anchor of [ + 'feeTokenID', + 'feeLimit', + '@morph-network/chain', + 'GasPriceOracle', + 'morph-dapp-planning', + 'morph-dapp-code-review', +]) { + assert.ok( + content.includes(anchor), + `morph-dapp-codegen SKILL should mention ${anchor}` + ); +} + +console.log('morph-dapp-codegen-skill: ok'); diff --git a/__tests__/morph-dapp-planning-skill.test.mjs b/__tests__/morph-dapp-planning-skill.test.mjs new file mode 100644 index 000000000..9e5b35ec2 --- /dev/null +++ b/__tests__/morph-dapp-planning-skill.test.mjs @@ -0,0 +1,55 @@ +/** + * Sanity check for skills/morph-dapp-planning/SKILL.md: + * frontmatter shape, key sections, and Morph-specific anchors. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills/morph-dapp-planning/SKILL.md'); + +const content = fs.readFileSync(SKILL_PATH, 'utf8'); + +assert.match(content, /^---\r?\n[\s\S]*?\r?\n---/, 'should have YAML frontmatter'); +assert.match(content, /^name:\s*morph-dapp-planning\s*$/m, 'name must equal directory'); +assert.match(content, /Use when|当用户/i, 'description should include trigger phrasing'); + +for (const heading of [ + '## When to use', + '## Execution Steps', + '## Self-Check', + '## Related Skills', +]) { + assert.ok(content.includes(heading), `should include section: ${heading}`); +} + +for (const anchor of [ + 'planning/', + 'Product brief', + 'Figma', + 'Goals', + 'Test Cases', + 'Target Files', + 'Morph Constraints', + 'Open Questions', + 'feeTokenID', + 'feeLimit', + '2818', + '2910', +]) { + assert.ok( + content.includes(anchor), + `morph-dapp-planning SKILL should mention ${anchor}` + ); +} + +assert.ok( + content.includes('(new in Stage 2)') && + content.includes('will be created in Stage 2'), + 'Target Files / Self-Check should document greenfield paths (Stage 2 marker)', +); + +console.log('morph-dapp-planning-skill: ok'); diff --git a/__tests__/morph-dapp-workflow-skill.test.mjs b/__tests__/morph-dapp-workflow-skill.test.mjs new file mode 100644 index 000000000..82fb99554 --- /dev/null +++ b/__tests__/morph-dapp-workflow-skill.test.mjs @@ -0,0 +1,68 @@ +/** + * Sanity check for skills/morph-dapp-workflow/SKILL.md: + * frontmatter (incl. metadata.orchestrates), three-stage flow, + * pointers to child skills, no auto-commit promise. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills/morph-dapp-workflow/SKILL.md'); +const SKILLS_DIR = path.join(ROOT, 'skills'); + +const content = fs.readFileSync(SKILL_PATH, 'utf8'); + +assert.match(content, /^---\r?\n[\s\S]*?\r?\n---/, 'should have YAML frontmatter'); +assert.match(content, /^name:\s*morph-dapp-workflow\s*$/m, 'name must equal directory'); +assert.match(content, /Use when|当用户/i, 'description should include trigger phrasing'); + +const ORCHESTRATES = [ + 'morph-dapp-planning', + 'morph-dapp-codegen', + 'morph-dapp-code-review', +]; + +for (const child of ORCHESTRATES) { + assert.ok( + content.includes(child), + `workflow should reference child skill: ${child}` + ); + assert.ok( + fs.existsSync(path.join(SKILLS_DIR, child, 'SKILL.md')), + `orchestrated child must exist on disk: skills/${child}/SKILL.md` + ); +} + +assert.match( + content, + /metadata:\s*\r?\n\s*orchestrates:/, + 'frontmatter should declare metadata.orchestrates' +); + +for (const stage of ['Stage 1', 'Stage 2', 'Stage 3', 'Stage 4']) { + assert.ok(content.includes(stage), `should describe ${stage}`); +} + +assert.ok( + /never auto[\s-]?(commit|push)|do not auto[\s-]?(commit|push)|no auto[\s-]?(commit|push)/i.test( + content + ), + 'workflow must explicitly forbid auto commit/push' +); + +assert.match( + content, + /WORKFLOW_REVIEW_BASE|git rev-parse HEAD/i, + 'workflow should document review baseline recording (Step 0)', +); + +assert.match( + content, + /planning\/.*gitignore|\.gitignore.*planning/i, + 'workflow should note that planning/ is gitignored by default', +); + +console.log('morph-dapp-workflow-skill: ok'); diff --git a/__tests__/morph-doc-agent.test.mjs b/__tests__/morph-doc-agent.test.mjs new file mode 100644 index 000000000..f46619acd --- /dev/null +++ b/__tests__/morph-doc-agent.test.mjs @@ -0,0 +1,59 @@ +/** + * Assert agents/morph-doc-agent.md: frontmatter, key conventions, discoverability. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const AGENT_PATH = path.join(ROOT, 'agents/morph-doc-agent.md'); + +assert.ok(fs.existsSync(AGENT_PATH), `morph-doc-agent should exist: ${AGENT_PATH}`); + +const content = fs.readFileSync(AGENT_PATH, 'utf8'); +const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); +assert.ok(fm, 'should have YAML frontmatter'); + +const block = fm[1]; +function field(name) { + const m = new RegExp(`^${name}:\\s*(.+)$`, 'm').exec(block); + return m ? m[1].trim() : null; +} + +assert.equal(field('name'), 'morph-doc-agent', 'frontmatter name'); +const model = field('model'); +assert.ok(model && model.length > 0, 'frontmatter should declare a default model'); +const desc = field('description'); +assert.ok(desc && desc.length > 20, 'description should be non-empty and substantive'); +assert.match(desc, /SKILL|skill/i, 'description should mention SKILL/skill'); +assert.match( + desc, + /Use when|when the user/i, + 'description should include trigger phrasing so IDE routing can match it', +); +assert.match(content, /frontmatter|YAML/i, 'body should stress frontmatter/YAML'); +assert.match( + content, + /last_verified.*verified_against|verified_against.*last_verified/i, + 'should require last_verified and verified_against in frontmatter guidance', +); +assert.doesNotMatch( + content, + /Recommended frontmatter.*last_verified/i, + 'last_verified should not be labeled optional/recommended only', +); +assert.match(content, /skills\/<.*>\/SKILL\.md|skills\/morph-/i, 'should point to skills//SKILL.md path'); +assert.match( + content, + /Doc-as-SKILL|SKILL\.md/i, + 'should reflect Doc-as-SKILL or SKILL.md' +); +assert.match( + content, + /existing skill|inventory|audit|Auditing|morph-doc-skill-inventory/i, + 'should describe existing-skill checks and point to morph-doc-skill-inventory tests' +); + +console.log('morph-doc-agent: ok'); diff --git a/__tests__/morph-doc-skill-inventory.test.mjs b/__tests__/morph-doc-skill-inventory.test.mjs new file mode 100644 index 000000000..c0dfdbf7a --- /dev/null +++ b/__tests__/morph-doc-skill-inventory.test.mjs @@ -0,0 +1,75 @@ +/** + * Enumerate skills//SKILL.md: assert frontmatter, name matches directory, description is usable. + * Aligns with agents/morph-doc-agent.md auditing / existing-skill checks. + * + * Also emits freshness warnings (non-failing) when last_verified is missing + * or older than the decay threshold. See VISION.md § Skill Verification Metadata. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + collectFreshnessWarnings, + parseFrontmatter, + parseIsoDate, +} from '../scripts/lib/skill-freshness.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILLS_DIR = path.join(ROOT, 'skills'); + +assert.equal(parseIsoDate('2026-02-31'), null, 'parseIsoDate rejects overflow calendar day'); +assert.equal(parseIsoDate('2026-02-29'), null, 'parseIsoDate rejects non-leap Feb 29'); +assert.ok(parseIsoDate('2024-02-29'), 'parseIsoDate accepts leap-day when valid'); +assert.ok(parseIsoDate('2026-05-14'), 'parseIsoDate accepts valid YYYY-MM-DD'); +assert.equal(parseIsoDate('2026/05/14'), null, 'parseIsoDate rejects non-ISO separators'); +assert.equal(parseIsoDate('2026-13-01'), null, 'parseIsoDate rejects invalid month'); + +const entries = fs.readdirSync(SKILLS_DIR, { withFileTypes: true }); +const skillDirs = entries + .filter((e) => e.isDirectory() && e.name !== 'morph-skill') + .map((e) => e.name); + +assert.ok(skillDirs.length > 0, 'skills/ should contain at least one skill directory'); + +for (const id of skillDirs) { + const skillPath = path.join(SKILLS_DIR, id, 'SKILL.md'); + assert.ok( + fs.existsSync(skillPath), + `each skill directory should have SKILL.md: skills/${id}/SKILL.md` + ); + + const content = fs.readFileSync(skillPath, 'utf8'); + const fm = parseFrontmatter(content); + assert.ok(fm, `skills/${id}/SKILL.md should have YAML frontmatter`); + + const name = fm.field('name'); + const description = fm.field('description'); + + assert.equal( + name, + id, + `SKILL frontmatter name should match directory: skills/${id}` + ); + assert.ok( + description && description.length >= 20, + `skills/${id}/SKILL.md description should be non-empty and substantive (≥20 chars)` + ); + assert.match( + description, + /use when|when the user|当用户|用于|适用于/i, + `skills/${id}/SKILL.md description should include trigger phrasing (e.g. "Use when…")` + ); +} + +const { warnings: freshnessWarnings } = collectFreshnessWarnings(SKILLS_DIR); + +if (freshnessWarnings.length > 0) { + console.warn('morph-doc-skill-inventory: freshness warnings (non-fatal)'); + for (const w of freshnessWarnings) { + console.warn(' ⚠️', w.message); + } +} + +console.log('morph-doc-skill-inventory: ok (%d skills)', skillDirs.length); diff --git a/__tests__/morph-js-sdk-skill.test.mjs b/__tests__/morph-js-sdk-skill.test.mjs new file mode 100644 index 000000000..79e5bc499 --- /dev/null +++ b/__tests__/morph-js-sdk-skill.test.mjs @@ -0,0 +1,23 @@ +/** + * Assert morph-js-sdk SKILL.md has a minimal-example section and key identifiers aligned with docs. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills/morph-js-sdk/SKILL.md'); + +const content = fs.readFileSync(SKILL_PATH, 'utf8'); + +assert.ok(content.includes('## Minimal Example'), 'SKILL should include a Minimal Example section'); +assert.ok(content.includes('morphHoodiTestnet'), 'Viem snippet should include morphHoodiTestnet'); +assert.ok(content.includes('MorphSigner'), 'Ethers snippet should include MorphSigner'); +assert.ok(content.includes('feeTokenID'), 'examples should include feeTokenID'); +assert.ok(content.includes('feeLimit'), 'examples should include feeLimit'); +const tsBlocks = content.match(/```typescript\r?\n[\s\S]*?```/g) ?? []; +assert.ok(tsBlocks.length >= 2, 'should include at least two closed typescript fenced blocks'); + +console.log('morph-js-sdk-skill: ok'); diff --git a/__tests__/morph-rails-skill.test.mjs b/__tests__/morph-rails-skill.test.mjs new file mode 100644 index 000000000..2f1d73e68 --- /dev/null +++ b/__tests__/morph-rails-skill.test.mjs @@ -0,0 +1,41 @@ +/** + * Assert morph-rails SKILL.md has frontmatter, key routing, and topic skill references. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills/morph-rails/SKILL.md'); + +const content = fs.readFileSync(SKILL_PATH, 'utf8'); + +assert.match( + content, + /^---\r?\nname:\s*morph-rails\r?\n/, + 'frontmatter name should be morph-rails' +); +assert.ok(content.includes('description:'), 'should include description field'); +const REQUIRED_DOC_PATHS = [ + 'docs/morph-rails/0-overview.md', + 'docs/about-morph/morph-rails.md', + 'docs/morph-rails/agentic-payment/1-x402-facilitator.md', + 'docs/about-morph/10-altfeetx.md', +]; + +for (const relPath of REQUIRED_DOC_PATHS) { + assert.ok(content.includes(relPath), `should reference ${relPath}`); + assert.ok( + fs.existsSync(path.join(ROOT, relPath)), + `referenced doc is missing: ${relPath}`, + ); +} +assert.ok( + content.includes('morph-js-sdk'), + 'should route to morph-js-sdk' +); +assert.ok(content.includes('## Self-Check'), 'should include Self-Check section'); + +console.log('morph-rails-skill: ok'); diff --git a/__tests__/morph-skill-creator-agent.test.mjs b/__tests__/morph-skill-creator-agent.test.mjs new file mode 100644 index 000000000..67db83709 --- /dev/null +++ b/__tests__/morph-skill-creator-agent.test.mjs @@ -0,0 +1,36 @@ +/** + * agents/morph-skill-creator-agent.md frontmatter and routing pointers. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const AGENT_PATH = path.join(ROOT, 'agents/morph-skill-creator-agent.md'); + +assert.ok(fs.existsSync(AGENT_PATH), AGENT_PATH); + +const content = fs.readFileSync(AGENT_PATH, 'utf8'); +const fm = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); +assert.ok(fm, 'YAML frontmatter'); + +const block = fm[1]; +function field(name) { + const m = new RegExp(`^${name}:\\s*(.+)$`, 'm').exec(block); + return m ? m[1].trim() : null; +} + +assert.equal(field('name'), 'morph-skill-creator-agent'); +assert.ok(field('model')?.length > 0); +const desc = field('description'); +assert.ok(desc && desc.length > 20); +assert.match(desc, /skill-creator|eval/i); +assert.match(desc, /Use when|when the user/i); +assert.match(content, /morph-skill-creator\/SKILL\.md|skills\/morph-skill-creator/); +assert.match(content, /morph-doc-agent/); +assert.match(content, /skills\/README\.md|skill-ln/i); +assert.match(content, /npm test/); + +console.log('morph-skill-creator-agent: ok'); diff --git a/__tests__/morph-skill-creator.test.mjs b/__tests__/morph-skill-creator.test.mjs new file mode 100644 index 000000000..200d93ca2 --- /dev/null +++ b/__tests__/morph-skill-creator.test.mjs @@ -0,0 +1,111 @@ +/** + * morph-skill-creator bridge: path resolution and CLI smoke. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { spawnSync } from 'node:child_process'; +import { fileURLToPath } from 'node:url'; +import { + resolveSkillCreatorInstall, + resolveTriggerEvalSetPath, +} from '../scripts/lib/skill-creator-path.mjs'; +import { + skillCreatorRequirementsPath, + skillCreatorVenvDir, +} from '../scripts/lib/skill-creator-python.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); + +const requirementsPath = skillCreatorRequirementsPath(ROOT); +assert.ok(fs.existsSync(requirementsPath), 'skill-creator-requirements.txt should exist'); +assert.match( + fs.readFileSync(requirementsPath, 'utf8'), + /PyYAML/i, + 'skill-creator Python requirements should include PyYAML', +); +assert.equal( + skillCreatorVenvDir(ROOT), + path.join(ROOT, '.local', 'skill-creator-venv'), + 'skill-creator venv lives under .local/', +); + +const evalPath = resolveTriggerEvalSetPath(ROOT, 'morph-js-sdk'); +assert.ok(evalPath, 'morph-js-sdk trigger eval example should resolve'); +assert.ok(evalPath.includes('skill-trigger-evals.morph-js-sdk'), evalPath); + +const bridgeEval = resolveTriggerEvalSetPath(ROOT, 'morph-bridge'); +assert.ok(bridgeEval, 'morph-bridge trigger eval example should resolve'); +assert.ok(bridgeEval.includes('skill-trigger-evals.morph-bridge'), bridgeEval); + +assert.equal( + resolveTriggerEvalSetPath(ROOT, '__nonexistent-skill-for-test__'), + null, + 'unknown skill id should resolve to no trigger eval set', +); + +const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'morph-skill-creator-')); +const fakeCreator = path.join(tmp, 'skill-creator'); +fs.mkdirSync(path.join(fakeCreator, 'scripts'), { recursive: true }); +fs.writeFileSync(path.join(fakeCreator, 'SKILL.md'), '---\nname: skill-creator\n---\n', 'utf8'); +fs.writeFileSync(path.join(fakeCreator, 'scripts', 'run_loop.py'), '# stub\n', 'utf8'); +fs.writeFileSync(path.join(fakeCreator, 'scripts', 'run_eval.py'), '# stub\n', 'utf8'); +fs.writeFileSync(path.join(fakeCreator, 'scripts', 'quick_validate.py'), '# stub\n', 'utf8'); +fs.writeFileSync( + path.join(fakeCreator, 'scripts', 'aggregate_benchmark.py'), + '# stub\n', + 'utf8', +); + +const prev = process.env.MORPH_SKILL_CREATOR_ROOT; +process.env.MORPH_SKILL_CREATOR_ROOT = fakeCreator; +assert.equal(resolveSkillCreatorInstall()?.root, fakeCreator); + +const incomplete = path.join(tmp, 'skill-creator-incomplete'); +fs.mkdirSync(path.join(incomplete, 'scripts'), { recursive: true }); +fs.writeFileSync(path.join(incomplete, 'SKILL.md'), '---\nname: skill-creator\n---\n', 'utf8'); +fs.writeFileSync(path.join(incomplete, 'scripts', 'run_loop.py'), '# stub\n', 'utf8'); +fs.writeFileSync(path.join(incomplete, 'scripts', 'run_eval.py'), '# stub\n', 'utf8'); +process.env.MORPH_SKILL_CREATOR_ROOT = incomplete; +assert.throws( + () => resolveSkillCreatorInstall(), + /incomplete|missing/i, + 'resolveSkillCreatorInstall should throw when helper scripts are missing', +); +process.env.MORPH_SKILL_CREATOR_ROOT = fakeCreator; +if (prev === undefined) delete process.env.MORPH_SKILL_CREATOR_ROOT; +else process.env.MORPH_SKILL_CREATOR_ROOT = prev; + +const help = spawnSync(process.execPath, ['scripts/morph-skill-creator.mjs', '--help'], { + cwd: ROOT, + encoding: 'utf8', +}); +assert.equal(help.status, 0, help.stderr || help.stdout); +assert.match(help.stdout, /desc-loop/); +assert.match(help.stdout, /run-eval/); + +const missingEval = spawnSync( + process.execPath, + ['scripts/morph-skill-creator.mjs', 'run-eval', 'morph-tx-cost'], + { + cwd: ROOT, + encoding: 'utf8', + env: { ...process.env, MORPH_SKILL_CREATOR_ROOT: fakeCreator }, + }, +); +assert.notEqual(missingEval.status, 0, 'run-eval should fail without trigger eval set'); +assert.match( + `${missingEval.stdout}${missingEval.stderr}`, + /No trigger eval set/i, +); + +const validate = spawnSync( + process.execPath, + ['scripts/morph-skill-creator.mjs', 'validate', 'morph-js-sdk'], + { cwd: ROOT, encoding: 'utf8' }, +); +assert.equal(validate.status, 0, validate.stderr || validate.stdout); + +console.log('morph-skill-creator: ok'); diff --git a/__tests__/morph-skill-ln.test.mjs b/__tests__/morph-skill-ln.test.mjs new file mode 100644 index 000000000..2b2c3e9df --- /dev/null +++ b/__tests__/morph-skill-ln.test.mjs @@ -0,0 +1,154 @@ +/** + * morph-skill-ln: script exists, runs, --dry-run output matches expectations. + */ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const REPO_CURSOR_SKILLS = path.join(ROOT, '.cursor', 'skills').replace(/\\/g, '/'); +const REPO_CLAUDE_SKILLS = path.join(ROOT, '.claude', 'skills').replace(/\\/g, '/'); +const REPO_OPENCLAW_SKILLS = path.join(ROOT, '.openclaw', 'skills').replace(/\\/g, '/'); +const REPO_WINDSURF_SKILLS = path.join(ROOT, '.windsurf', 'skills').replace(/\\/g, '/'); +const SCRIPT = path.join(ROOT, 'scripts', 'morph-skill-ln'); + +assert.ok(fs.existsSync(SCRIPT), 'scripts/morph-skill-ln should exist'); + +function run(args, env = {}) { + const r = spawnSync('bash', [SCRIPT, ...args], { + cwd: ROOT, + encoding: 'utf8', + env: { ...process.env, ...env }, + timeout: 15000, + maxBuffer: 1024 * 1024, + }); + return { status: r.status, stdout: r.stdout ?? '', stderr: r.stderr ?? '' }; +} + +const help = run(['--help']); +assert.equal(help.status, 0, '--help should succeed'); +assert.match(help.stdout, /morph-skill-ln/, '--help should include script name'); +assert.match(help.stdout, /--root|-r/, 'should document path options'); +assert.match(help.stdout, /--agent|-a/, 'should document --agent'); +assert.match(help.stdout, /--unlink/, 'should document --unlink'); + +const dry = run(['--dry-run'], { MORPH_DOC_ROOT: ROOT }); +assert.equal(dry.status, 0, '--dry-run should succeed'); +assert.match(dry.stdout, /ln -sfn/m, 'dry-run should print ln -sfn'); +assert.ok(dry.stdout.includes(REPO_CURSOR_SKILLS), 'default should include cursor'); +assert.ok(dry.stdout.includes(REPO_CLAUDE_SKILLS), 'default should include claude'); +assert.ok(dry.stdout.includes(REPO_OPENCLAW_SKILLS), 'default should include openclaw'); +assert.ok(dry.stdout.includes(REPO_WINDSURF_SKILLS), 'default should include windsurf'); + +const dryCursorOnly = run(['--dry-run', '-a', 'cursor'], { + MORPH_DOC_ROOT: ROOT, +}); +assert.equal(dryCursorOnly.status, 0); +assert.ok(dryCursorOnly.stdout.includes(REPO_CURSOR_SKILLS)); +assert.doesNotMatch(dryCursorOnly.stdout, /\.claude\/skills/m); +assert.doesNotMatch(dryCursorOnly.stdout, /\.openclaw\/skills/m); +assert.doesNotMatch(dryCursorOnly.stdout, /\.windsurf\/skills/m); + +const dryClaudeOnly = run(['--dry-run', '--root', ROOT, '--agent', 'claude']); +assert.equal(dryClaudeOnly.status, 0); +assert.ok(dryClaudeOnly.stdout.includes(REPO_CLAUDE_SKILLS)); +assert.doesNotMatch(dryClaudeOnly.stdout, /\.cursor\/skills/m); + +const dryOpenclawOnly = run(['--dry-run', '--root', ROOT, '-a', 'openclaw']); +assert.equal(dryOpenclawOnly.status, 0); +assert.ok(dryOpenclawOnly.stdout.includes(REPO_OPENCLAW_SKILLS)); +assert.doesNotMatch(dryOpenclawOnly.stdout, /\.cursor\/skills/m); + +const dryWindsurfOnly = run(['--dry-run', '--root', ROOT, '--agent', 'windsurf']); +assert.equal(dryWindsurfOnly.status, 0); +assert.ok(dryWindsurfOnly.stdout.includes(REPO_WINDSURF_SKILLS)); +assert.doesNotMatch(dryWindsurfOnly.stdout, /\.cursor\/skills/m); + +const dryWindsurfPath = run([ + '--dry-run', + '--root', + ROOT, + '--agent', + '.windsurf/skills', +]); +assert.equal(dryWindsurfPath.status, 0); +assert.ok(dryWindsurfPath.stdout.includes(REPO_WINDSURF_SKILLS)); + +const dryMulti = run([ + '--dry-run', + '--agent', + 'cursor', + '--agent', + 'codex', + '--root', + ROOT, +]); +assert.equal(dryMulti.status, 0); +assert.ok(dryMulti.stdout.includes(REPO_CURSOR_SKILLS)); +assert.match(dryMulti.stdout, /\.codex\/skills/m); + +const bad = run(['--nope']); +assert.notEqual(bad.status, 0, 'unknown flag should be non-zero'); + +const badAgent = run(['--dry-run', '--agent', 'not-a-valid-name-xyz']); +assert.notEqual(badAgent.status, 0, 'unknown builtin name without path-like token should fail'); + +const badRoot = run(['--root']); +assert.notEqual(badRoot.status, 0, '--root without path should fail'); + +const badAgentArg = run(['--agent']); +assert.notEqual(badAgentArg.status, 0, '--agent without value should fail'); + +const single = run(['--dry-run', 'morph-js-sdk'], { MORPH_DOC_ROOT: ROOT }); +assert.equal(single.status, 0); +assert.match(single.stdout, /morph-js-sdk/m, 'single-skill dry-run should mention id'); + +// --unlink: temp symlink in repo; dry-run / real delete (skip if symlinks disallowed) +const UNLINK_TEST_ID = 'zzz-morph-skill-ln-unlink-test'; +const cursorSkillsDir = path.join(ROOT, '.cursor', 'skills'); +const unlinkTarget = path.join(cursorSkillsDir, UNLINK_TEST_ID); +const morphJsSdk = path.join(ROOT, 'skills', 'morph-js-sdk'); +let symlinkOk = false; +try { + fs.mkdirSync(cursorSkillsDir, { recursive: true }); + try { + fs.unlinkSync(unlinkTarget); + } catch { + // ignore + } + fs.symlinkSync(morphJsSdk, unlinkTarget); + symlinkOk = true; +} catch (e) { + if (e && (e.code === 'EPERM' || e.code === 'EACCES')) { + console.warn( + 'morph-skill-ln: skip unlink integration (symlink not permitted in this environment)' + ); + } else { + throw e; + } +} + +if (symlinkOk) { + const dryUnlink = run(['--unlink', '--dry-run', '-a', 'cursor', UNLINK_TEST_ID], { + MORPH_DOC_ROOT: ROOT, + }); + assert.equal(dryUnlink.status, 0); + assert.match(dryUnlink.stdout, /rm -f/m, 'unlink dry-run should print rm -f'); + assert.ok(fs.lstatSync(unlinkTarget).isSymbolicLink(), 'dry-run should not remove symlink'); + + const realUnlink = run(['--unlink', '-a', 'cursor', UNLINK_TEST_ID], { + MORPH_DOC_ROOT: ROOT, + }); + assert.equal(realUnlink.status, 0); + assert.ok(!fs.existsSync(unlinkTarget), 'unlink should remove symlink'); +} + +const unlinkMissing = run(['--unlink', '-a', 'cursor', 'nonexistent-skill-xyz'], { + MORPH_DOC_ROOT: ROOT, +}); +assert.notEqual(unlinkMissing.status, 0, 'unlink with no symlink should fail'); + +console.log('morph-skill-ln: ok'); diff --git a/__tests__/morph-tx-cost-skill.test.mjs b/__tests__/morph-tx-cost-skill.test.mjs new file mode 100644 index 000000000..4ff4d2973 --- /dev/null +++ b/__tests__/morph-tx-cost-skill.test.mjs @@ -0,0 +1,45 @@ +/** + * Assert morph-tx-cost SKILL.md has frontmatter, key doc references, and related skill routing. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILL_PATH = path.join(ROOT, 'skills/morph-tx-cost/SKILL.md'); + +const content = fs.readFileSync(SKILL_PATH, 'utf8'); + +assert.match( + content, + /^---\r?\nname:\s*morph-tx-cost\r?\n/, + 'frontmatter name should be morph-tx-cost' +); +assert.ok(content.includes('description:'), 'should include description field'); +assert.ok( + content.includes( + 'docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md' + ), + 'should cite understand-transaction-cost doc as source of truth' +); +assert.ok( + content.includes('l1Fee + l2Fee'), + 'should mention l1Fee + l2Fee (insufficient funds semantics or copy)' +); +assert.ok( + content.includes('getL1Fee'), + 'should mention GasPriceOracle getL1Fee' +); +assert.ok( + content.includes('docs/about-morph/10-altfeetx.md'), + 'should route token gas / AltFee to 10-altfeetx doc' +); +assert.ok( + content.includes('morph-js-sdk'), + 'should route to morph-js-sdk' +); +assert.ok(content.includes('## Self-Check'), 'should include Self-Check section'); + +console.log('morph-tx-cost-skill: ok'); diff --git a/__tests__/run-tests-manifest.test.mjs b/__tests__/run-tests-manifest.test.mjs new file mode 100644 index 000000000..8c3acb93f --- /dev/null +++ b/__tests__/run-tests-manifest.test.mjs @@ -0,0 +1,22 @@ +/** + * Ensure every __tests__/*.test.mjs is listed in scripts/run-tests.mjs TEST_FILES + * so new tests are not omitted from `pnpm test`. + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { TEST_FILES } from '../scripts/run-tests.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const onDisk = fs + .readdirSync(__dirname) + .filter((f) => f.endsWith('.test.mjs')) + .sort(); +const listed = [...TEST_FILES].sort(); + +assert.deepEqual( + onDisk, + listed, + '__tests__/*.test.mjs must match TEST_FILES in scripts/run-tests.mjs', +); diff --git a/__tests__/skill-freshness-report.test.mjs b/__tests__/skill-freshness-report.test.mjs new file mode 100644 index 000000000..d1bbac267 --- /dev/null +++ b/__tests__/skill-freshness-report.test.mjs @@ -0,0 +1,103 @@ +/** + * Locks skill-freshness-report JSON schema and shared date parsing. + */ +import assert from 'node:assert/strict'; +import { spawnSync } from 'node:child_process'; +import fs from 'node:fs'; +import os from 'node:os'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + buildFreshnessReport, + collectFreshnessWarnings, + parseIsoDate, +} from '../scripts/lib/skill-freshness.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); + +assert.equal(parseIsoDate('not-a-date'), null); + +const fixedNow = Date.UTC(2026, 4, 20); // 2026-05-20 +const report = buildFreshnessReport(ROOT, { now: fixedNow }); + +assert.equal(report.schema, 'morph-doc/skill-freshness-report/v1'); +assert.equal(typeof report.generatedAt, 'string'); +assert.equal(report.thresholdDays, 90); +assert.ok(report.skillCount > 0); +assert.equal(report.skillIds.length, report.skillCount); +assert.equal(report.warningCount, report.warnings.length); +assert.equal( + report.staleCount, + report.warnings.filter((w) => w.code === 'stale').length +); + +for (const w of report.warnings) { + assert.ok(w.skillId && typeof w.skillId === 'string'); + assert.ok( + ['missing_last_verified', 'invalid_last_verified', 'future_last_verified', 'stale'].includes( + w.code, + ), + ); + assert.ok(w.message.includes(w.skillId)); +} + +// Synthetic temp skill dir: stale last_verified +const tmpRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'morph-freshness-')); +const tmpSkills = path.join(tmpRoot, 'skills', 'tmp-stale-skill'); +fs.mkdirSync(tmpSkills, { recursive: true }); +fs.writeFileSync( + path.join(tmpSkills, 'SKILL.md'), + `--- +name: tmp-stale-skill +description: "Use when testing skill freshness bot stale detection in CI." +last_verified: 2026-01-01 +--- +# tmp +`, + 'utf8' +); + +const { warnings } = collectFreshnessWarnings(path.join(tmpRoot, 'skills'), { + now: fixedNow, + thresholdDays: 90, +}); +assert.equal(warnings.length, 1); +assert.equal(warnings[0].code, 'stale'); +assert.equal(warnings[0].skillId, 'tmp-stale-skill'); +assert.ok(warnings[0].ageDays > 90); + +const tmpFuture = fs.mkdtempSync(path.join(os.tmpdir(), 'morph-freshness-future-')); +const tmpFutureSkill = path.join(tmpFuture, 'skills', 'tmp-future-skill'); +fs.mkdirSync(tmpFutureSkill, { recursive: true }); +fs.writeFileSync( + path.join(tmpFutureSkill, 'SKILL.md'), + `--- +name: tmp-future-skill +description: "Use when testing skill freshness future last_verified detection in CI." +last_verified: 2099-01-01 +--- +# tmp +`, + 'utf8', +); +const { warnings: futureWarnings } = collectFreshnessWarnings(path.join(tmpFuture, 'skills'), { + now: fixedNow, +}); +assert.equal(futureWarnings.length, 1); +assert.equal(futureWarnings[0].code, 'future_last_verified'); +assert.equal(futureWarnings[0].skillId, 'tmp-future-skill'); +assert.ok(futureWarnings[0].ageDays < 0); +fs.rmSync(tmpFuture, { recursive: true, force: true }); + +const badOut = spawnSync( + process.execPath, + ['scripts/skill-freshness-report.mjs', '--out', '--json'], + { cwd: ROOT, encoding: 'utf8' }, +); +assert.notEqual(badOut.status, 0, '--out without a path should fail'); +assert.match(`${badOut.stdout}${badOut.stderr}`, /--out requires/i); + +fs.rmSync(tmpRoot, { recursive: true, force: true }); + +console.log('skill-freshness-report: ok'); diff --git a/__tests__/skill-trigger-eval-examples.test.mjs b/__tests__/skill-trigger-eval-examples.test.mjs new file mode 100644 index 000000000..e0c1e40db --- /dev/null +++ b/__tests__/skill-trigger-eval-examples.test.mjs @@ -0,0 +1,61 @@ +/** + * Example trigger-eval sets for skill-creator description optimization. + * Files: scripts/skill-trigger-evals.*.example.json — array of { query, should_trigger }. + * @see skills/README.md "Tuning description trigger rates" + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SCRIPTS = path.join(ROOT, 'scripts'); + +const files = fs + .readdirSync(SCRIPTS) + .filter((f) => f.startsWith('skill-trigger-evals.') && f.endsWith('.example.json')) + .sort(); + +assert.ok(files.length > 0, 'expected at least one scripts/skill-trigger-evals.*.example.json'); + +for (const name of files) { + const full = path.join(SCRIPTS, name); + const raw = fs.readFileSync(full, 'utf8'); + let data; + assert.doesNotThrow(() => { + data = JSON.parse(raw); + }, `valid JSON: ${name}`); + + assert.ok(Array.isArray(data), `${name} should be a JSON array`); + assert.ok( + data.length >= 20, + `${name} should have at least 20 rows (skill-creator description optimization set)`, + ); + + for (let i = 0; i < data.length; i++) { + const row = data[i]; + assert.ok(row && typeof row === 'object', `${name}[${i}] should be an object`); + assert.equal( + typeof row.query, + 'string', + `${name}[${i}].query should be a string`, + ); + assert.ok( + row.query.trim().length >= 20, + `${name}[${i}].query should be substantive (>=20 chars)`, + ); + assert.equal( + typeof row.should_trigger, + 'boolean', + `${name}[${i}].should_trigger should be boolean`, + ); + } + + const positive = data.filter((r) => r.should_trigger === true).length; + const negative = data.filter((r) => r.should_trigger === false).length; + assert.ok(positive >= 8, `${name} should include at least 8 should_trigger: true`); + assert.ok(negative >= 8, `${name} should include at least 8 should_trigger: false`); +} + +console.log('skill-trigger-eval-examples: ok (%d example file(s))', files.length); diff --git a/__tests__/skills-readme.test.mjs b/__tests__/skills-readme.test.mjs new file mode 100644 index 000000000..9b1b9b40a --- /dev/null +++ b/__tests__/skills-readme.test.mjs @@ -0,0 +1,50 @@ +/** + * skills/README.md: symlink docs stay aligned with morph-skill-ln behavior. + * @see scripts/morph-skill-ln + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const README = path.join(ROOT, 'skills', 'README.md'); +const SCRIPT = path.join(ROOT, 'scripts', 'morph-skill-ln'); + +const content = fs.readFileSync(README, 'utf8'); +const help = fs.readFileSync(SCRIPT, 'utf8'); + +assert.match(content, /## IDE discovery paths \(in-repo mirrors\)/); +assert.match(content, /project-local/i); +assert.match(content, /npm run skill-ln/); +assert.match(content, /npm run agent-ln/); +assert.match( + content, + /at least \*\*8\*\* `should_trigger: true` and \*\*8\*\* `false`/i, + 'eval set minimum should match skill-trigger-eval-examples.test.mjs', +); +assert.match(content, /skill-trigger-eval-examples\.test\.mjs/); +assert.match(content, /Using Morph skills from another repository/); +assert.match(content, /\$\{HOME\}\/\.cursor\/skills/); + +assert.doesNotMatch( + content, + /symlink the corresponding directory to the global skills path/i, + 'removed misleading global-only symlink instruction', +); +assert.doesNotMatch( + content, + /## Correspondence with `doc_skill_id`/, + 'doc_skill_id is documented once under What is skills/', +); + +assert.match(help, /inside the morph-doc repo/i, 'script help should say project-local'); + +assert.match( + content, + /defaults to \*\*cursor \+ claude \+ openclaw \+ windsurf\*\*/, +); +assert.match(content, /morph-\*\//); + +console.log('skills-readme: ok'); diff --git a/__tests__/skills-sidebar.test.mjs b/__tests__/skills-sidebar.test.mjs new file mode 100644 index 000000000..eb50d5b63 --- /dev/null +++ b/__tests__/skills-sidebar.test.mjs @@ -0,0 +1,40 @@ +/** + * sidebars-skills.js doc ids must match each skills//SKILL.md (avoid missing nav entries). + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const SKILLS_DIR = path.join(ROOT, 'skills'); +const SIDEBAR_FILE = path.join(ROOT, 'sidebars-skills.js'); + +const entries = fs.readdirSync(SKILLS_DIR, { withFileTypes: true }); +const expectedIds = entries + .filter( + (e) => + e.isDirectory() && + fs.existsSync(path.join(SKILLS_DIR, e.name, 'SKILL.md')) + ) + .map((e) => `${e.name}/SKILL`) + .sort(); + +const sidebarSrc = fs.readFileSync(SIDEBAR_FILE, 'utf8'); +const listed = [...sidebarSrc.matchAll(/id:\s*['"]([^'"]+)['"]/g)] + .map((m) => m[1]) + // README and the morph-skill/* mirror pages (flat .md files, not /SKILL.md + // dirs) are excluded from the directory-sync check. + .filter((id) => id !== 'README' && !id.startsWith('morph-skill/')); + +listed.sort(); +const sortedExpected = [...expectedIds].sort(); + +assert.deepEqual( + listed, + sortedExpected, + 'sidebars-skills.js Skill playbook doc ids must match skills/*/SKILL.md directories (update sidebar when adding a skill)' +); + +console.log('skills-sidebar: ok (%d skills)', expectedIds.length); diff --git a/__tests__/vision-md.test.mjs b/__tests__/vision-md.test.mjs new file mode 100644 index 000000000..3ae0b65f6 --- /dev/null +++ b/__tests__/vision-md.test.mjs @@ -0,0 +1,50 @@ +/** + * VISION.md: existence, SKILL-style frontmatter, key section anchors (match VISION.md headings). + */ +import assert from 'node:assert/strict'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const VISION = path.join(ROOT, 'VISION.md'); + +assert.ok(fs.existsSync(VISION), 'VISION.md exists'); + +const content = fs.readFileSync(VISION, 'utf8'); +assert.match(content, /^---\r?\n/, 'VISION.md has YAML frontmatter opening'); + +function parseFrontmatter(raw) { + const m = raw.match(/^---\r?\n([\s\S]*?)\r?\n---/); + if (!m) return null; + const fm = m[1]; + const name = /^name:\s*(.+)$/m.exec(fm); + const desc = /^description:\s*(.+)$/m.exec(fm); + return { + name: name ? name[1].trim().replace(/^["']|["']$/g, '') : null, + description: desc ? desc[1].trim().replace(/^["']|["']$/g, '') : null, + }; +} + +const fm = parseFrontmatter(content); +assert.ok(fm, 'VISION.md frontmatter parseable'); +assert.equal(fm.name, 'morph-doc-vision', 'VISION.md name is morph-doc-vision'); +assert.ok(fm.description && fm.description.length > 20, 'VISION.md description is non-trivial'); + +const headings = [ + 'Documentation as SKILL', + 'External Brain', + 'Developer Toolchain', + 'Write Docs to the SKILL Standard', + 'Execution Steps', + 'Self-Check', +]; +for (const h of headings) { + assert.ok( + content.includes(h), + `VISION.md contains heading/phrase: ${h}` + ); +} + +console.log('vision-md: ok'); diff --git a/agents/morph-dapp-agent.md b/agents/morph-dapp-agent.md new file mode 100644 index 000000000..936e54231 --- /dev/null +++ b/agents/morph-dapp-agent.md @@ -0,0 +1,66 @@ +--- +name: morph-dapp-agent +title: Morph dApp Agent +model: composer-2.5-fast +description: "Morph dApp delivery agent (orchestration layer): routes a Morph feature request to the right harness Skill — full pipeline via morph-dapp-workflow, or atomic planning / TDD codegen / diff review — with pointer-only handoffs and wrap-up artifacts. Use when the user wants IDE-level routing and gates across planning → implementation → review, an end-to-end run from idea to mergeable code, TDD against an existing planning document, or a Morph diff reviewed across security / performance / quality / planning compliance. Prefer this agent over loading morph-dapp-workflow alone when you need explicit routing and three-artifact wrap-up." +--- + +You are **morph-dapp-agent**: a delivery role scoped to the `morph-doc` repository that takes **one Morph dApp goal** from intake to mergeable code by orchestrating four existing SKILLs. You never inline SKILL content — you **route** to the SKILLs and honor their gates. + +## Core Principles (must follow) + +1. **Pointer-only orchestration.** Your job is routing and gate-checking, not re-authoring the SKILLs. When a SKILL is loaded, follow its body; never paraphrase its steps back into your own prompt. This aligns with [`VISION.md`](https://github.com/morph-l2/morph-doc/blob/main/VISION.md) § Cross-Skill References. +2. **Single goal → single pipeline run.** One user goal maps to one `planning/.md` + one code landing + one review report. Do not fan out into parallel multi-feature runs in the same session. +3. **Morph facts come from the repo, never training data.** Addresses, chainIds, RPCs, Alt Fee fields must be resolved via the fact-table SKILLs that the child SKILLs already cite — see [`CLAUDE.md`](https://github.com/morph-l2/morph-doc/blob/main/CLAUDE.md) § Repo-specific conventions. +4. **Read-only on review, no auto commit/push at any stage.** The review SKILL must stay read-only; wrap-up surfaces blockers to the user and stops. + +## Default SKILL set (must be loadable) + +Orchestration layer (routes and gates): + +- `skills/morph-dapp-workflow/SKILL.md` — the three-stage orchestrator (Planning → Code → Review → Wrap-up). + +Child SKILLs the workflow hands off to: + +- `skills/morph-dapp-planning/SKILL.md` — product inputs / API / Figma → planning document at `planning/.md`. +- `skills/morph-dapp-codegen/SKILL.md` — TDD implementation against that planning document. +- `skills/morph-dapp-code-review/SKILL.md` — 4-dimension review (security / performance / quality / planning compliance). + +Fact-table SKILLs are **already referenced by the four child SKILLs above via their `verified_against` and `Related Skills` sections** — do not re-list them here; load them transitively only when the executing child SKILL tells you to. + +If any of the four files above is missing from the current IDE, stop and point the user at [`skills/README.md`](https://github.com/morph-l2/morph-doc/blob/main/skills/README.md) (use `npm run skill-ln` for in-repo mirrors, or user-level symlinks when working outside morph-doc). + +## Routing rules + +Classify every incoming request before picking a SKILL: + +| User intent | Action | +|---|---| +| Full pipeline ("take this requirement to mergeable code", "run planning → review") | Hand off to `morph-dapp-workflow`; it owns stage transitions. | +| Only planning ("help me write/revise the planning document") | Hand off directly to `morph-dapp-planning`; do not invoke the workflow. | +| Only implementation against an existing planning document ("TDD this", "land code for `planning/.md`") | Hand off directly to `morph-dapp-codegen`. | +| Only review ("review this PR / diff") | Hand off directly to `morph-dapp-code-review`. | +| Pure fact lookup ("what is Morph mainnet chainId", "where are predeployed addresses") | Do **not** invoke any of the four dApp SKILLs; defer to the fact-table SKILL cited by the relevant child (e.g. `morph-contracts`, `morph-js-sdk`, `morph-tx-cost`). | +| Ambiguous goal | Ask the user **once** (in a single clarification turn) which stage they want to enter; never guess. | + +## Execution protocol + +1. **Intake.** Restate the user's goal in one sentence; list inputs they provided (product brief link / API doc / Figma URL / existing planning path / commit range). +2. **Classify** per the routing table above. +3. **Hand off** to the chosen SKILL and follow its body verbatim. When `morph-dapp-workflow` is picked, let it drive stage gates; do not second-guess Stage 1/2/3 output inside this agent prompt. +4. **Honor gates.** The workflow's gates (open 🔴 questions cleared, tests green, review blockers summarized) are binding. On failure, stop and surface the specific blocker + the file path to fix — do not "retry" silently. +5. **Wrap-up output.** Always return three artifacts to the user when a full run completes: the planning document path, the changed-file list, and the review report path or inline report. Explicitly note whether any review P0 or still-open 🔴 blocks a merge. + +## What Not To Do + +- Do not inline the body of any child SKILL into this prompt or your reply; cite the SKILL path and let the tool read it. +- Do not skip the planning stage for non-trivial features — if the user pushes to jump straight to code without a planning document, ask once; if they insist, record the decision in the planning document's Open Questions or abort. +- Do not hard-code Morph chainIds, RPC URLs, or predeployed addresses in any generated output — the child SKILLs already enforce this, so reject code that violates it instead of patching it up silently. +- Do not auto `git commit` / `git push`; the review SKILL is read-only and the wrap-up stage defers the merge decision to the user. +- Do not write new SKILLs or refactor existing ones from this agent; for that, hand off to [morph-doc-agent](/agents/morph-doc-agent). + +## Related Skills + +- `morph-dapp-workflow` — default entry for end-to-end runs; it internally delegates to the three below. +- `morph-dapp-planning` / `morph-dapp-codegen` / `morph-dapp-code-review` — atomic stages this agent routes to. +- `morph-doc-agent` — sibling agent; use it (not this one) when the goal is to author or audit a SKILL, not to ship Morph dApp code. diff --git a/agents/morph-doc-agent.md b/agents/morph-doc-agent.md new file mode 100644 index 000000000..4f4298131 --- /dev/null +++ b/agents/morph-doc-agent.md @@ -0,0 +1,92 @@ +--- +name: morph-doc-agent +title: Morph Doc Agent +model: composer-2.5-fast +description: "Dedicated to the Morph doc repository: given a single goal/topic from the user, generates a loadable, executable Agent Skill (skills//SKILL.md under the repo root); or runs conformance checks on existing skills (frontmatter, directory-name consistency, doc_skill_id pairing). Doc-as-SKILL — write or audit following the Skill spec so the model can instantiate the corresponding domain behavior from that SKILL. Use when writing or refactoring morph-doc skills, auditing existing skills, turning a topic into a skill, or when the user says they want a skill doc from a goal." +--- + + + +You are **morph-doc-agent**: in the `morph-doc` repository, you turn a user's **single goal** into **a SKILL that a model can directly use**, or run **conformance checks and gap reports** on existing `skills//SKILL.md` files — not lengthy prose written for humans. + +## Core Principles (must follow) + +1. **Doc-as-SKILL** + The output is an **Agent Skill**: the main file is `SKILL.md`, with optional `references/`, `scripts/`, `assets/`. Do not create auxiliary docs like README or CHANGELOG under the skill directory (unless the repo explicitly requires it). + +2. **Write "docs" to the SKILL spec** + - **Required YAML frontmatter**: `name` (matches directory name, lowercase + hyphens), `description` (third-person, clearly states capability boundary and **trigger scenarios** to help the model route), `last_verified` (ISO date `YYYY-MM-DD`), and `verified_against` (list of source paths cross-checked for facts). See [`VISION.md`](https://github.com/morph-l2/morph-doc/blob/main/VISION.md) § Skill Verification Metadata for semantics and the **90-day decay** rule — missing or stale `last_verified` emits warnings in `npm test`. + - **Body**: concise and executable; assume the model already has general programming knowledge — only add repo/topic-specific flows, constraints, and facts. + - **Cross-skill references**: when pointing to a sibling skill, use a dedicated `## Related Skills` section (pointer only, no content copy). See [`VISION.md`](https://github.com/morph-l2/morph-doc/blob/main/VISION.md) § Cross-Skill References. + +3. **Single goal → single skill** + User provides one goal (topic, scenario, type of questions to cover) → you derive a **skill directory name** (e.g. `morph-`) and produce a **complete** `SKILL.md`. + +4. **Runnable immediately after writing** + Any reader (or model) who places the skill in **`skills//`** in the repo (or symlinks it per [`skills/README.md`](https://github.com/morph-l2/morph-doc/blob/main/skills/README.md) — in-repo mirrors via `morph-skill-ln`, or user-level paths for other workspaces) should be able to trigger it by matching the `description` in conversation — and the model should execute per the SKILL body. Therefore the body must contain: **what to read first, what to do next, what to self-check**. + +## Alignment with this repo + +- **Reference existing examples**: read `skills/morph-js-sdk/SKILL.md`, `skills/morph-contracts/SKILL.md`, etc., and maintain a consistent structure (e.g. "Execution Playbook / Single Source of Truth / Core Concepts / Execution Steps / Self-Check" — trim or adapt by topic, but avoid empty boilerplate). +- **Relationship to site docs**: if the topic has an authoritative page in `docs/`, state the **single source of truth path** (file path) in the SKILL and avoid copy-pasting large blocks of text; for details, use "open that file" + extract the minimum necessary tables/formulas. +- **`doc_skill_id` convention**: if the user requires pairing with a specific MDX/MD doc, the corresponding doc's frontmatter should use `doc_skill_id: `; when generating the SKILL, `name` must match. + +## Execution Steps After Receiving a User "Goal" + +1. **Clarify scope (if goal is too broad)** + Confirm in one sentence: which chain the skill covers (Mainnet/Hoodi), the audience (contract/node/SDK), and **what is out of scope**. + +2. **Classify doc type** + Per [`VISION.md`](https://github.com/morph-l2/morph-doc/blob/main/VISION.md) § Pairing Policy, decide whether the topic is *actionable*, *fact-table*, *conceptual*, *narrative*, or *generated*. Only actionable and fact-table docs need a paired Skill; skip creation for narrative/generated topics and tell the user why. + +3. **Search the repo** + Use search tools to locate specs, examples, and existing components in `docs/` and `src/`; record paths in the SKILL's "Single Source of Truth" or `references/`. Capture these paths — they become `verified_against` entries. + +4. **Draft the `description`** + List how users will ask, keywords, package names/chain IDs — consistent with Cursor Skill trigger semantics. + +5. **Write the `SKILL.md` body** + - Valid YAML in the top frontmatter, including `last_verified` (today's date) and `verified_against` (paths from Step 3). + - Body priority: flows, commands, field tables, common pitfalls, and boundaries with related skills. + - Large API tables can go in `references/.md`; the SKILL body specifies "when to open it". + - If the topic connects to other skills, add a `## Related Skills` section (pointer only). + +6. **Self-check checklist (add as the last section of the SKILL)** + 3–7 checkable items so the model can verify key facts before delivering (addresses, mutual exclusions, chain IDs, etc.). + +7. **Destination path** + Explicitly tell the user the file should land at: **`skills//SKILL.md`** (and optionally reference symlink instructions in [`skills/README.md`](https://github.com/morph-l2/morph-doc/blob/main/skills/README.md)). + +## Auditing Existing Skills + +When the user requests "check / audit / inventory existing skills" or a consistency check before a refactor, follow the steps below in order; **automated validation** defers to the repo tests (see "Alignment with Tests" below). + +1. **Enumerate** + List all **first-level subdirectories** under `skills/` (excluding non-directory files like `README.md`); each skill must have **`skills//SKILL.md`**. + +2. **Frontmatter** + For each `SKILL.md` check: valid YAML frontmatter exists; `name` **equals** the directory name `` (lowercase, hyphenated); `description` is non-empty and contains **trigger scenarios / capability boundary** (for model routing). + +3. **Body structure (sampled or full)** + Confirm at least one executable thread exists: e.g. a "Single Source of Truth" or equivalent pointer to a `docs/` path, "Execution Steps" or "Self-Check" — can be trimmed by topic, but headings without any action are not acceptable. + +4. **Doc pairing** + If a MDX/MD file declares `doc_skill_id`, its value must equal the corresponding directory name, and that `skills//SKILL.md`'s `name` must match. Pairing is locked by [`__tests__/doc-skill-pairing.test.mjs`](https://github.com/morph-l2/morph-doc/blob/main/__tests__/doc-skill-pairing.test.mjs); frontmatter-to-directory-name consistency for all skills is validated by [`__tests__/morph-doc-skill-inventory.test.mjs`](https://github.com/morph-l2/morph-doc/blob/main/__tests__/morph-doc-skill-inventory.test.mjs). + +5. **Output audit report** + Provide a table or list with: passing items, failing items (file path + specific issue), and optional fix suggestions (correct `name`, add `description`, add `doc_skill_id`, etc.). + +### Alignment with Tests + +- Run locally: `npm test` (includes skill inventory and pairing tests). +- When modifying skill specs or audit rules, also update **`__tests__/morph-doc-skill-inventory.test.mjs`** (and `doc-skill-pairing`'s `PAIRS` if needed). + +## What Not To Do + +- Do not write "project background stories" unrelated to execution that consume context. +- Do not stuff multiple duplicate explanations into a skill directory (one source only: SKILL or references). +- Do not omit frontmatter; do not let `name` differ from the folder name. + +## Output Format + +When the user provides only a goal without specifying a path: default output is the complete content for **creating or updating** `skills//SKILL.md`; if `references/` is needed, list relative paths and the summary-level description to write there. diff --git a/agents/morph-skill-creator-agent.md b/agents/morph-skill-creator-agent.md new file mode 100644 index 000000000..9da1ee1e4 --- /dev/null +++ b/agents/morph-skill-creator-agent.md @@ -0,0 +1,58 @@ +--- +name: morph-skill-creator-agent +title: Morph Skill Creator Agent +model: composer-2.5-fast +description: "Morph Skill testing and improvement agent: wires morph-doc skills to Anthropic skill-creator (trigger evals, description optimization loop, behavioral benchmarks) plus morph-doc-agent for content fixes. Use when the user wants to test Skill routing, run eval loops, improve a Skill description, benchmark Skill outputs, or fix stale Morph Skills after skill-drift — not for shipping dApp code (see morph-dapp-agent) or writing MDX (see morph-doc-agent for one-off SKILL authoring)." +--- + +You are **morph-skill-creator-agent**: improve and verify **morph-doc** `skills//SKILL.md` files using the upstream **[skill-creator](https://github.com/anthropics/skills/tree/main/skills/skill-creator)** toolkit, with Morph guards from **`npm test`**. + +## Core Principles + +1. **Two validators.** Morph metadata (`last_verified`, `verified_against`, `doc_skill_id`, trigger phrasing) → **`npm test`**. Anthropic frontmatter shape → upstream `quick_validate.py` (may false-negative on Morph fields — defer to inventory). +2. **Pointer-only.** Load `skills/morph-skill-creator/SKILL.md` for CLI paths; load upstream skill-creator `SKILL.md` for behavioral eval / viewer steps — do not duplicate their bodies here. +3. **Human merge.** Never auto-commit `best_description` or SKILL body changes; surface diffs and run `npm test` before the user opens a PR. +4. **Facts stay in docs.** If evals fail because content is wrong, route fact fixes through **`docs/`** + **`morph-doc-agent`**, not invented addresses in the Skill. + +## Default stack + +| Layer | Artifact | +|-------|----------| +| Bridge playbook | `skills/morph-skill-creator/SKILL.md` | +| CLI | `scripts/morph-skill-creator.mjs` | +| Upstream | `MORPH_SKILL_CREATOR_ROOT` or `vendor/skill-creator` after `npm run skill-creator:install` | +| IDE mirrors / symlink | [`skills/README.md`](https://github.com/morph-l2/morph-doc/blob/main/skills/README.md) — `npm run skill-ln` / `morph-skill-ln` | +| Authoring sibling | `agents/morph-doc-agent.md` | + +## Routing + +| User intent | Action | +|-------------|--------| +| "Test / improve Skill routing / description" | `npm run skill-creator:check` → trigger eval JSON → `npm run skill-creator:run-eval -- ` (one shot) or `desc-loop` (optimize) | +| "Validate Skill before PR" | `npm run skill-creator:validate -- ` then `npm test` | +| "Benchmark Skill outputs / assertions" | Upstream skill-creator eval workflow + `skills//evals/evals.json` | +| "Write a new Skill from scratch" | Hand off to **morph-doc-agent**; return here for evals after draft exists | +| "Skill gave wrong chainId / address" | **skill-drift** issue path + morph-doc-agent; optional desc-loop only if routing was wrong | + +## Execution protocol + +1. **Identify ``** (directory name under `skills/`). +2. Run **`npm run skill-creator:check`**; if missing upstream, run **`npm run skill-creator:install`** once. +3. **`npm run skill-creator:validate -- `** for static guards. +4. For **description** work: confirm trigger eval file exists (see morph-skill-creator SKILL § Step 2); run **`npm run skill-creator:run-eval -- `** for a one-shot LLM trigger benchmark, then **`npm run skill-creator:desc-loop -- `** when the user wants automated description optimization (both need `claude` CLI). +5. For **behavioral** work: scaffold `evals/evals.json` from `scripts/skill-behavior-evals.template.json`; follow upstream skill-creator test-case flow. +6. Apply edits to `skills//SKILL.md`; re-stamp freshness metadata when sources were re-read; **`npm test`**. +7. Report: eval scores, `best_description` candidate, files changed, remaining `skill-drift`-style risks. + +## What Not To Do + +- Do not skip `npm test` after Skill edits. +- Do not treat upstream `quick_validate` failure on `last_verified` as blocking. +- Do not run `desc-loop` without user consent when it invokes paid `claude` CLI runs. +- Do not use this agent for full dApp delivery — use **morph-dapp-agent**. + +## Related Skills + +- `morph-skill-creator` — CLI and step-by-step bridge to Anthropic skill-creator. +- `morph-doc-agent` — single-goal SKILL authoring and pairing audit. +- `morph-skill-ln` — IDE symlink setup before manual routing tests. diff --git a/assets/docs/protocol/general/bridge/withdraw.png b/assets/docs/protocol/general/bridge/withdraw.png index 9b6116a0d..2f0f75908 100644 Binary files a/assets/docs/protocol/general/bridge/withdraw.png and b/assets/docs/protocol/general/bridge/withdraw.png differ diff --git a/docs/about-morph/0-user-navigation-page.md b/docs/about-morph/0-user-navigation-page.mdx similarity index 100% rename from docs/about-morph/0-user-navigation-page.md rename to docs/about-morph/0-user-navigation-page.mdx diff --git a/docs/about-morph/4-morphs-architecture.md b/docs/about-morph/4-morphs-architecture.md index 672301265..046954a52 100644 --- a/docs/about-morph/4-morphs-architecture.md +++ b/docs/about-morph/4-morphs-architecture.md @@ -57,7 +57,7 @@ This modular architecture enhances flexibility, adaptability, and composability Morph’s architecture is further defined by five pivotal roles: Sequencers, Validators, Nodes, Provers, and Layer 1 (Ethereum). Each role carries specific responsibilities and uses distinct components to fulfill its function, contributing to the seamless operation of the network. -For a deeper understanding of Morph’s architecture, please visit our comprehensive [Developer Docs](../build-on-morph/0-developer-navigation-page.md). +For a deeper understanding of Morph’s architecture, please visit our comprehensive [Developer Docs](../build-on-morph/0-developer-navigation-page.mdx). ## Safety and Security diff --git a/docs/build-on-morph/0-developer-navigation-page.md b/docs/build-on-morph/0-developer-navigation-page.mdx similarity index 97% rename from docs/build-on-morph/0-developer-navigation-page.md rename to docs/build-on-morph/0-developer-navigation-page.mdx index 7f75a3cfc..55679f026 100644 --- a/docs/build-on-morph/0-developer-navigation-page.md +++ b/docs/build-on-morph/0-developer-navigation-page.mdx @@ -4,12 +4,13 @@ lang: en-US keywords: [morph,ethereum,rollup,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost-efficient, and high-performing optimistic zk-rollup solution. Try it now! --- + import { CardGroup, Card } from '@site/src/components/Card' If you’re ready to build applications on Morph, you’re in the right place. -For regular users or first-time visitors, we recommend starting with our [For Users section](../about-morph/0-user-navigation-page.md) section to explore introductory content such as definitions, our vision, key concepts, and more. +For regular users or first-time visitors, we recommend starting with our [For Users section](../about-morph/0-user-navigation-page.mdx) section to explore introductory content such as definitions, our vision, key concepts, and more. ### What is Morph? diff --git a/docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md b/docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md index 2fb0ef475..1ce7736ca 100644 --- a/docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md +++ b/docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md @@ -3,6 +3,7 @@ title: Bridge between Morph and Ethereum lang: en-US keywords: [morph,ethereum,rollup,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost-efficient, and high-performing optimistic zk-rollup solution. Try it now! +doc_skill_id: morph-bridge --- Please first review our documentation on [Communication Between Morph and Ethereum](../../how-morph-works/general-protocol-design/2-communicate-between-morph-and-ethereum.md) for some required fundamental knowledge. diff --git a/docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md b/docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md index bb15b888d..1a4edf5f1 100644 --- a/docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md +++ b/docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md @@ -3,6 +3,7 @@ title: Understand Transaction Cost on Morph lang: en-US keywords: [morph,ethereum,rollup,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost-efficient, and high-performing optimistic zk-rollup solution. Try it now! +doc_skill_id: morph-tx-cost --- Transaction fees on Morph work similarly to fees on Ethereum. However, Layer 2 introduces some unique aspects. Morph's optimistic zkEVM makes these differences easy to understand and even easier to handle. diff --git a/docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md b/docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md index 03ba3eb01..dca4d63aa 100644 --- a/docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md +++ b/docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md @@ -3,6 +3,7 @@ title: Verify Your Smart Contracts lang: en-US keywords: [morph,ethereum,rollup,layer2,validity proof,optimistic zk-rollup] description: Upgrade your blockchain experience with Morph - the secure decentralized, cost-efficient, and high-performing optimistic zk-rollup solution. Try it now! +doc_skill_id: morph-verify-contracts --- After deploying your smart contracts, it's crucial to verify your code on our [block explorer](https://explorer-hoodi.morph.network). This can be automated using your development framework, such as Hardhat. @@ -32,7 +33,7 @@ module.exports = { network: 'morph', chainId: 2818, urls: { - apiURL: 'https://explorer-api.morph.network/api? ', + apiURL: 'https://explorer-api.morph.network/api?', browserURL: 'https://explorer.morph.network/', }, }, diff --git a/docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md b/docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md new file mode 100644 index 000000000..af92ff73f --- /dev/null +++ b/docs/build-on-morph/build-on-morph/7-agent-driven-development-workflow.md @@ -0,0 +1,237 @@ +--- +title: Agent-Driven Development Workflow +lang: en-US +keywords: [morph, dapp, workflow, planning, tdd, code review, agent, skill, cursor, claude, dispatch, router] +description: The single entry point for Morph dApp development via Agent Skills. Dispatches a task — from a raw product idea down to a one-line fact lookup — to the right Morph Skill (morph-dapp-workflow for end-to-end, the child skills for one stage, or the fact-table skills for domain lookups). Designed to be driven by agentic IDEs (Cursor, Claude Code, OpenClaw, Windsurf, Codex). +doc_skill_id: morph-dapp-workflow +--- + +This page is the **human-readable entry point** for every Morph dApp Agent Skill in this +repo. Think of it as a router: describe what you are about to do, find the row in the +dispatch table below, and go invoke the matching Skill. The orchestrator +[`morph-dapp-workflow`](/skills/morph-dapp-workflow/SKILL) is only one of the destinations +— for small, focused tasks you should jump straight to a child Skill or a fact-table +Skill. + +Both humans and Morph-facing agents (Cursor, Claude Code, OpenClaw, Windsurf, Codex) read +from the same source: this page plus the SKILL files under +[`skills/`](https://github.com/morph-l2/morph-doc/tree/main/skills). + +## Agent definitions (IDE sub-agents) + +Skills are the **executable playbooks**; **agents** are pointer-only roles that route to +them without copying SKILL bodies. Install agent files with `npm run agent-ln` (see +[`morph-skill-ln`](/skills/morph-skill-ln/SKILL) — **Linking agents**). + +| Role | Agent | When to use | +|---|---|---| +| End-to-end dApp delivery (routing + wrap-up) | [`morph-dapp-agent`](/agents/morph-dapp-agent) | Prefer in Cursor / Claude Code when you want explicit stage routing, gates, and three wrap-up artifacts (planning path, changed files, review report). | +| Author or audit a Skill | [`morph-doc-agent`](/agents/morph-doc-agent) | One goal → `skills//SKILL.md`, or inventory / `doc_skill_id` pairing audit. | +| Test / improve Skill routing & benchmarks | [`morph-skill-creator-agent`](/agents/morph-skill-creator-agent) → [`morph-skill-creator`](/skills/morph-skill-creator/SKILL) | [skill-creator](https://github.com/anthropics/skills/tree/main/skills/skill-creator) bridge: `npm run skill-creator:*`, trigger evals, `desc-loop`, `evals/evals.json`. | + +For the staged pipeline body (Step 0 baseline commit, per-stage gates), load +[`morph-dapp-workflow`](/skills/morph-dapp-workflow/SKILL) — usually via `morph-dapp-agent` +for full runs. + +## Pick your entry Skill + +Scan the left column and pick the first row that matches your task. Each row points to a +single Skill — the Skill then self-describes its own steps. + +| If the task is… | Invoke this Skill | Notes | +|---|---|---| +| End-to-end: product brief / Figma / API doc → merge-ready code | [`morph-dapp-agent`](/agents/morph-dapp-agent) → [`morph-dapp-workflow`](/skills/morph-dapp-workflow/SKILL) | Agent routes; workflow SKILL runs staged gates (records review base at Step 0). | +| Turn requirements into planning output | [`morph-dapp-planning`](/skills/morph-dapp-planning/SKILL) | Outputs `planning/.md` with Goals / Test Cases / Target Files / Morph Constraints. | +| Implement an approved planning document (Red → Green TDD) | [`morph-dapp-codegen`](/skills/morph-dapp-codegen/SKILL) | Requires a planning file. Never auto-commits. | +| Review a diff / PR / working tree | [`morph-dapp-code-review`](/skills/morph-dapp-code-review/SKILL) | Four-dimension review (Security / Performance / Code Quality / Planning compliance), P0/P1/P2. | +| Look up a Morph SDK call or Alt Fee field shape | [`morph-js-sdk`](/skills/morph-js-sdk/SKILL) | Fact table — use from inside the other Skills too. | +| Find a predeployed contract address | [`morph-contracts`](/skills/morph-contracts/SKILL) | Canonical address list. Always prefer this over a block explorer. | +| Compute or display transaction fees (L1 + L2) | [`morph-tx-cost`](/skills/morph-tx-cost/SKILL) | Explains `GasPriceOracle.getL1Fee` and gas math. | +| Route to Morph Rails (Alt Fee, Reference Key, …) | [`morph-rails`](/skills/morph-rails/SKILL) | Product-level rails overview. | +| Install Skills into Cursor / Claude Code / OpenClaw | [`morph-skill-ln`](/skills/morph-skill-ln/SKILL) | Symlink script. | +| Test or improve a Skill (routing / benchmarks) | [`morph-skill-creator`](/skills/morph-skill-creator/SKILL) | Requires `npm run skill-creator:install`; `desc-loop` needs `claude` CLI. | +| Run a Morph full node on a host | [`morph-full-node-run-in-docker`](/skills/morph-full-node-run-in-docker/SKILL) | Node operations, not dApp dev. | + +Rule of thumb: **if there is no planning document yet and the task spans multiple files across +contract / SDK / frontend, start from [`morph-dapp-agent`](/agents/morph-dapp-agent) (or invoke +`morph-dapp-workflow` directly). Otherwise go to a single Skill.** + +**Planning files:** `planning/.md` is gitignored by default — local workflow +state unless your team commits it for review. + +## Quick decision tree + +```text + "I'm about to touch Morph code or docs." + │ + ▼ + Is this a fact lookup (address / fee / SDK field)? + ├─ yes → morph-contracts / morph-tx-cost / morph-js-sdk + └─ no + │ + ▼ + Do I already have a planning document (planning/.md)? + ├─ no + │ │ + │ ▼ + │ Is the change 1 file, obvious, no planning document needed? + │ ├─ yes → edit directly (no Skill) + │ └─ no → morph-dapp-workflow (will call morph-dapp-planning) + └─ yes + │ + ▼ + Am I implementing, reviewing, or both? + ├─ implementing → morph-dapp-codegen + ├─ reviewing a diff → morph-dapp-code-review + └─ both, plus gates → morph-dapp-workflow (resumes at Stage 2) +``` + +## The end-to-end path: morph-dapp-workflow + +When you do invoke the orchestrator, the three stages wire together like this: + +```text + Product brief / Figma / API doc + │ + ▼ + ┌──────────────────────┐ + │ 1. Planning │ → morph-dapp-planning + │ planning/.md │ + └──────────┬───────────┘ + │ Goals · Test Cases · Target Files · Morph Constraints + ▼ + ┌──────────────────────┐ + │ 2. Code (TDD) │ → morph-dapp-codegen + │ red → green → lint │ + └──────────┬───────────┘ + │ tests + impl, no auto-commit + ▼ + ┌──────────────────────┐ + │ 3. Review (4-dim) │ → morph-dapp-code-review + │ P0 / P1 / P2 │ + └──────────────────────┘ +``` + +Each arrow is a **gate**: blocking items must be cleared before the next stage runs. +At workflow **Step 0**, record `WORKFLOW_REVIEW_BASE=$(git rev-parse HEAD)` so Stage 3 +reviews `git diff $WORKFLOW_REVIEW_BASE...HEAD`. Resuming is implicit — the presence of +`planning/.md` (and later, landed tests) tells the orchestrator where to pick up. + +### Stage 1 — Planning + +Skill: [`morph-dapp-planning`](/skills/morph-dapp-planning/SKILL) + +You bring: a product description (and optionally an API doc + Figma URL). +You get: `planning/.md` containing **Goals**, **Test Cases**, **Target Files**, +**Morph Constraints**, **Open Questions**, and a **Self-Check**. + +Morph-specific decisions this stage forces up-front: + +| Decision | Why it matters on Morph | +|---|---| +| Mainnet (`2818`) vs Hoodi (`2910`) vs both | Wrong chain breaks signing & RPC | +| Alt Fee path? | If yes, `feeTokenID` must be chosen from the Token Registry; `feeLimit` is optional (set an explicit cap in product code if you need one) | +| Where do contract addresses come from? | Always [`developer-resources/contracts`](../developer-resources/1-contracts.md) — never an external explorer | +| L1 data fee in user-visible totals? | Use `GasPriceOracle.getL1Fee` per [`understand-transaction-cost-on-morph`](./4-understand-transaction-cost-on-morph.md) | + +The planning document is not done until every 🔴 *Blocker* in *Open Questions* is resolved or +explicitly accepted. The agent will pause at the gate. + +### Stage 2 — TDD Codegen + +Skill: [`morph-dapp-codegen`](/skills/morph-dapp-codegen/SKILL) + +1. **Red** — write failing tests for every *Test Case* in the planning document, get them to compile. +2. **Green** — implement only files in *Target Files* until the suite passes. +3. **Wrap-up** — run lint / type-check / project test script; reconcile against the + planning document's *Self-Check* list. + +Morph-specific guardrails that the test runner alone cannot enforce: + +- Do not hard-code `chainId: 2818` literals — import from `@morph-network/chain` or the + viem chain export. +- Do not mix `feeTokenID` / `feeLimit` into non-Alt-Fee paths (or vice versa). +- Do not commit on the user's behalf. +- Do not ship private keys or mnemonics in tests or examples. + +Inside the `morph-doc` repo the project test entry point is `npm test` +(`scripts/run-tests.mjs`). New `__tests__/*.test.mjs` files **must** be added to +`TEST_FILES` in that script — `run-tests-manifest.test.mjs` enforces it. + +### Stage 3 — Code Review + +Skill: [`morph-dapp-code-review`](/skills/morph-dapp-code-review/SKILL) + +A read-only pass over your `git diff`, scored along four dimensions: + +| Dimension | What it catches (Morph-specific subset) | +|---|---| +| **Security** | Predeploy address copied from the wrong place, Mainnet/Hoodi mix-up, `feeTokenID` not in the Token Registry, missing replay protection on bridge messages | +| **Performance** | Per-tx repeat calls to `eth_gasPrice` / `GasPriceOracle.getL1Fee`, no backoff on bridge polling | +| **Code Quality** | `chainId` literals, RPC URLs hard-coded, Alt Fee fields leaking into vanilla EIP-1559 paths, real keys in samples | +| **Planning compliance** | Every planning *Goal* mapped to code, every *Test Case* has an actual test, no extra files outside *Target Files* | + +Output is graded **P0 (blocks merge) / P1 (recommended) / P2 (optional)**. + +## Driving the flow from your IDE + +All Skills live in +[`skills/`](https://github.com/morph-l2/morph-doc/tree/main/skills) in this repo. +Two ways to make them available to your agent: + +1. **Inside `morph-doc`** — open this repo in Cursor / Claude Code / OpenClaw / Windsurf + and the agent loads `skills/*/SKILL.md` automatically. If your editor only reads + `.cursor/skills` (etc.), run once from the repo root: `npm run skill-ln` and + `npm run agent-ln` (see [`skills/README.md`](https://github.com/morph-l2/morph-doc/blob/main/skills/README.md)). +2. **From any other project** — symlink each needed skill into your tool's **user-level** + skills directory (paths vary by install), or open morph-doc as the workspace. Example + for one skill (repeat per id or use a shell loop): + + ```bash + MORPH_DOC_ROOT="/absolute/path/to/morph-doc" + for id in morph-dapp-planning morph-dapp-codegen morph-dapp-code-review \ + morph-dapp-workflow morph-js-sdk morph-contracts morph-tx-cost; do + ln -sfn "${MORPH_DOC_ROOT}/skills/${id}" "${HOME}/.cursor/skills/${id}" + done + ln -sfn "${MORPH_DOC_ROOT}/agents/morph-dapp-agent.md" "${HOME}/.cursor/agents/morph-dapp-agent.md" + ln -sfn "${MORPH_DOC_ROOT}/agents/morph-doc-agent.md" "${HOME}/.cursor/agents/morph-doc-agent.md" + ``` + + Adjust `~/.cursor/skills` / `~/.cursor/agents` for Claude Code, OpenClaw, or Windsurf + per [`skills/README.md`](https://github.com/morph-l2/morph-doc/blob/main/skills/README.md). + +Once installed, phrase your request so the router can route: + +- Whole feature: *"Use morph-dapp-agent to take this requirement from planning to review-ready + code."* (or invoke `morph-dapp-workflow` directly) +- Single stage: *"Use morph-dapp-codegen against `planning/reward-claim.md`."* +- Fact lookup: *"Use morph-contracts to list the L2-side bridge addresses on Hoodi."* + +## What this flow deliberately does not do + +To stay simple and predictable on a single repo, the Skills intentionally **omit** +features that heavyweight enterprise pipelines often include: + +- No snapshot/rollback state machine — your `git` history is the state. +- No checkpoint files, locks, or oscillation detection. +- No automatic commit, push, or PR creation. +- No multi-stack runs in a single invocation — split contract / SDK / frontend into + separate planning files and run the workflow once per stack. + +If you need any of the above, run the underlying Skills manually and orchestrate them in +your own scripts. + +## See also + +- Agents: [`morph-dapp-agent`](/agents/morph-dapp-agent), [`morph-doc-agent`](/agents/morph-doc-agent) +- Planning: [`morph-dapp-planning`](/skills/morph-dapp-planning/SKILL) +- TDD implementation: [`morph-dapp-codegen`](/skills/morph-dapp-codegen/SKILL) +- Multi-dimension review: [`morph-dapp-code-review`](/skills/morph-dapp-code-review/SKILL) +- Domain facts referenced by all three: + [`morph-js-sdk`](/skills/morph-js-sdk/SKILL), + [`morph-contracts`](/skills/morph-contracts/SKILL), + [`morph-tx-cost`](/skills/morph-tx-cost/SKILL) +- Product rails: [`morph-rails`](/skills/morph-rails/SKILL) +- Install Skills into your IDE: [`morph-skill-ln`](/skills/morph-skill-ln/SKILL) +- The doc–skill contract this page follows: + [`VISION.md`](https://github.com/morph-l2/morph-doc/blob/main/VISION.md) diff --git a/docs/build-on-morph/developer-resources/1-contracts.md b/docs/build-on-morph/developer-resources/1-contracts.md index 5dfd16de0..dba611a78 100644 --- a/docs/build-on-morph/developer-resources/1-contracts.md +++ b/docs/build-on-morph/developer-resources/1-contracts.md @@ -1,6 +1,7 @@ --- title: Contract Addresses lang: en-US +doc_skill_id: morph-contracts --- diff --git a/docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md b/docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md index aaffbf0e0..dac888f62 100644 --- a/docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md +++ b/docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md @@ -1,6 +1,7 @@ --- title: Morph JSON-RPC API Methods lang: en-US +doc_skill_id: morph-rpc-api --- Most methods are similar to Ethereum's. For those methods, we recommend you visit [Ethereum JSON-RPC API](https://ethereum.org/en/developers/docs/apis/json-rpc/#json-rpc-methods). diff --git a/docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md b/docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md index 3b06b3756..903d6c86b 100644 --- a/docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md +++ b/docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md @@ -1,6 +1,7 @@ --- title: Run a full node lang: en-US +doc_skill_id: morph-full-node-run-in-docker --- import Tabs from '@theme/Tabs'; @@ -199,4 +200,4 @@ Edit `morph-node/entrypoint-geth.sh` to change geth startup flags. ### Sync from genesis -You can skip the snapshot steps and run the node directly. This is much slower and **not recommended** for most operators. +You can skip the snapshot steps and run the node directly. This is much slower and **not recommended** for most operators. \ No newline at end of file diff --git a/docs/build-on-morph/sdk/js-sdk.mdx b/docs/build-on-morph/sdk/js-sdk.mdx index f732973e2..843f1f9a0 100644 --- a/docs/build-on-morph/sdk/js-sdk.mdx +++ b/docs/build-on-morph/sdk/js-sdk.mdx @@ -2,6 +2,7 @@ title: Morph SDK lang: en-US description: Official JavaScript/TypeScript SDK for interacting with the Morph Network. +doc_skill_id: morph-js-sdk --- import AltFeeQuickStartDemo from "@site/src/components/AltFee/AltFeeQuickStartDemo"; @@ -35,7 +36,7 @@ Compared with using base libraries (Viem/Ethers) directly, the SDK offers: | Feature | Base libs only | Morph SDK | |---------|---------------|-----------| -| **Alt Fee Transaction support** | ❌ Manual serialize/deserialize needed | ✅ Built-in, just add `feeTokenID` + `feeLimit` | +| **Alt Fee Transaction support** | ❌ Manual serialize/deserialize needed | ✅ Built-in: add `feeTokenID` (required for token gas); `feeLimit` is optional | | **Tx type 0x7f** | ❌ Unsupported without forking/patching | ✅ Fully supported | | **Morph chain config** | ❌ Manual chainId/RPC setup | ✅ Mainnet & Testnet presets | | **Token Registry access** | ❌ Manage ABI yourself | ✅ ABI + addresses exported | @@ -81,8 +82,8 @@ Compared with using base libraries (Viem/Ethers) directly, the SDK offers: Alt Fee Transaction (type `0x7f`) lets users pay gas with registered ERC-20 tokens (e.g., USDT/USDC) instead of ETH. **Key fields:** -- `feeTokenID`: Token ID in the Token Registry -- `feeLimit`: Max token amount the user is willing to pay +- `feeTokenID`: Token ID in the Token Registry (required when paying gas in that token) +- `feeLimit` (optional): Max token amount the user authorizes for gas; if omitted, the chain may use the sender’s token balance as the effective cap (see AltFeeTx spec) --- @@ -706,8 +707,8 @@ Sign standard or Alt Fee transactions. | `maxFeePerGas` | `bigint` | Yes | Max fee | | `maxPriorityFeePerGas` | `bigint` | Yes | Max priority fee | | `nonce` | `number` | No | Tx nonce | -| `feeTokenID` | `number` | No* | Token ID (required for Alt Fee) | -| `feeLimit` | `bigint \| Hex` | No* | Token fee cap (required for Alt Fee). Accepts bigint or hex string. | +| `feeTokenID` | `number` | No* | Token ID (required for Alt Fee / type `0x7f`) | +| `feeLimit` | `bigint \| Hex` | No* | Optional token fee cap. If set, must be ≥ 0. Accepts bigint or hex string. | **Example:** @@ -803,7 +804,7 @@ const populatedTx = await signer.populateTransaction({ to: "0x...", value: parseEther("0.001"), feeTokenID: 3, - feeLimit: 1000000n, // Required for Alt Fee transactions + feeLimit: 1000000n, // optional: explicit cap in token units }); console.log("Populated tx:", populatedTx); @@ -855,7 +856,7 @@ const txResponse = await signer.sendTransaction({ maxFeePerGas: utils.hexlify(15316544), maxPriorityFeePerGas: utils.hexlify(14116544), feeTokenID: 3, - feeLimit: utils.parseUnits("1", 6), // Required! 1 USDT/USDC + feeLimit: utils.parseUnits("1", 6), // optional: e.g. 1 USDT/USDC cap }); ``` diff --git a/docs/how-morph-works/general-protocol-design/3-transaction-statuses-on-morph-mainnet.md b/docs/how-morph-works/general-protocol-design/3-transaction-statuses-on-morph-mainnet.md index 5dac47606..b170248ba 100644 --- a/docs/how-morph-works/general-protocol-design/3-transaction-statuses-on-morph-mainnet.md +++ b/docs/how-morph-works/general-protocol-design/3-transaction-statuses-on-morph-mainnet.md @@ -24,7 +24,7 @@ In Morph’s L2 rollup lifecycle, block states progress as follows: ### Typical time to reach each state -- **Sequencer confirmed / unsafe (`latest`):** Typically within 2–4 seconds, reflecting the L2 block production time. +- **Sequencer confirmed / unsafe (`latest`):** Typically within 0.3 seconds, reflecting the L2 block production time. - **Published to Ethereum / safe (`safe`):** Typically within 5–10 minutes, up to 12 hours in the worst case (e.g., if data submission is delayed). - **Finalized (`finalized`):** Typically within 15–20 minutes, up to 12 hours in the worst case (waiting for L1 finality). diff --git a/docs/morph-rails/0-overview.md b/docs/morph-rails/0-overview.md index f103deba2..3661f6202 100644 --- a/docs/morph-rails/0-overview.md +++ b/docs/morph-rails/0-overview.md @@ -3,6 +3,7 @@ title: What is Morph Rails? lang: en-US keywords: [morph,morph rails,payment,payfi,layer2,middleware] description: Morph Rails is a programmable payment middleware layer constructed atop the Morph blockchain network, abstracting raw on-chain operations into production-grade payment services. +doc_skill_id: morph-rails --- ## 1. Overview diff --git a/docusaurus.config.js b/docusaurus.config.js index 2068949ed..2ae554073 100644 --- a/docusaurus.config.js +++ b/docusaurus.config.js @@ -55,7 +55,43 @@ const config = { locales: ['en'], }, + markdown: { + mermaid: true, + /** .md = CommonMark;.mdx = MDX(skills/SKILL.md 等需避免被当作 MDX) */ + format: 'detect', + }, + + themes: ['@docusaurus/theme-mermaid'], + plugins: [ + [ + '@docusaurus/plugin-content-docs', + /** @type {import('@docusaurus/plugin-content-docs').Options} */ + ({ + id: 'skills', + path: 'skills', + routeBasePath: 'skills', + sidebarPath: require.resolve('./sidebars-skills.js'), + editUrl: ({ docPath }) => + `https://github.com/morph-l2/morph-doc/edit/main/skills/${docPath}`, + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + }), + ], + [ + '@docusaurus/plugin-content-docs', + /** @type {import('@docusaurus/plugin-content-docs').Options} */ + ({ + id: 'agents', + path: 'agents', + routeBasePath: 'agents', + sidebarPath: require.resolve('./sidebars-agents.js'), + editUrl: ({ docPath }) => + `https://github.com/morph-l2/morph-doc/edit/main/agents/${docPath}`, + remarkPlugins: [remarkMath], + rehypePlugins: [rehypeKatex], + }), + ], 'docusaurus-plugin-sass', // Use local plugin instead of npm package to fix /docs/ path require.resolve('./plugins/markdown-source-plugin.js'), @@ -344,6 +380,13 @@ const config = { sidebarId: 'MorphChainSidebar', label: 'Morph Chain', }, + { + type: 'docSidebar', + position: 'left', + sidebarId: 'SkillsSidebar', + docsPluginId: 'skills', + label: 'Agent Skills', + }, { type: 'docSidebar', position: 'left', @@ -361,7 +404,7 @@ const config = { position: 'left', sidebarId: 'LearnSidebar', label: 'Learn', - }, + } ], }, footer: { diff --git a/package.json b/package.json index 66b5c7858..51edc835d 100644 --- a/package.json +++ b/package.json @@ -3,6 +3,15 @@ "version": "4.0.0", "private": true, "scripts": { + "test": "node scripts/run-tests.mjs", + "skill-freshness:report": "node scripts/skill-freshness-report.mjs", + "skill-creator:check": "node scripts/morph-skill-creator.mjs check", + "skill-creator:install": "node scripts/morph-skill-creator.mjs install", + "skill-creator:validate": "node scripts/morph-skill-creator.mjs validate", + "skill-creator:run-eval": "node scripts/morph-skill-creator.mjs run-eval", + "skill-creator:desc-loop": "node scripts/morph-skill-creator.mjs desc-loop", + "skill-ln": "bash scripts/morph-skill-ln", + "agent-ln": "bash scripts/morph-agent-ln", "docusaurus": "docusaurus", "start": "docusaurus start", "build": "docusaurus build", @@ -15,7 +24,8 @@ "deploy": "docusaurus deploy", "clear": "docusaurus clear", "write-translations": "docusaurus write-translations", - "write-heading-ids": "docusaurus write-heading-ids" + "write-heading-ids": "docusaurus write-heading-ids", + "prepare": "husky" }, "dependencies": { "@docsearch/react": "^3.5.2", @@ -23,6 +33,7 @@ "@docusaurus/plugin-client-redirects": "3.1.1", "@docusaurus/preset-classic": "3.1.1", "@docusaurus/theme-common": "3.1.1", + "@docusaurus/theme-mermaid": "3.1.1", "@docusaurus/theme-search-algolia": "3.1.1", "@mdx-js/react": "3.0.1", "@morph-network/viem": "0.1.0", @@ -48,8 +59,15 @@ "@docusaurus/tsconfig": "3.1.1", "@docusaurus/types": "3.1.1", "@types/react": "^18.2.29", + "husky": "^9.1.7", "pre-commit": "^1.2.2", - "typescript": "~5.2.2" + "typescript": "~5.4.5", + "webpack": "5.105.4" + }, + "pnpm": { + "overrides": { + "webpack": "5.105.4" + } }, "browserslist": { "production": [ diff --git a/plugins/markdown-source-plugin.js b/plugins/markdown-source-plugin.js index ebb5916c0..17bd520ee 100644 --- a/plugins/markdown-source-plugin.js +++ b/plugins/markdown-source-plugin.js @@ -2,10 +2,19 @@ const fs = require('fs-extra'); const path = require('path'); /** - * Local Docusaurus plugin to copy raw markdown files to build output - * Modified to output files under /docs/ path to match HTML URLs + * Local Docusaurus plugin to copy cleaned markdown files into build output + * so static hosting can serve plain `.md` alongside HTML (paths mirror site routes). + * + * Sources: docs/, skills/, agents/ → build/docs/, build/skills/, build/agents/ */ +/** @type {{ sourceSubdir: string; outSubdir: string; urlPrefix: string }[]} */ +const MARKDOWN_EXPORT_SOURCES = [ + { sourceSubdir: 'docs', outSubdir: 'docs', urlPrefix: '/docs/' }, + { sourceSubdir: 'skills', outSubdir: 'skills', urlPrefix: '/skills/' }, + { sourceSubdir: 'agents', outSubdir: 'agents', urlPrefix: '/agents/' }, +]; + // Convert Tabs/TabItem components to readable markdown format function convertTabsToMarkdown(content) { const tabsPattern = /]*>([\s\S]*?)<\/Tabs>/g; @@ -48,20 +57,23 @@ function convertDetailsToMarkdown(content) { }); } -// Extract title from frontmatter +// Extract title from frontmatter (fallback `name` for SKILL/agent defs without `title`) function getTitleFromFrontmatter(content) { const frontmatterMatch = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); if (!frontmatterMatch) return null; const frontmatter = frontmatterMatch[1]; const titleMatch = frontmatter.match(/^title:\s*(.+)$/m); - if (titleMatch) return titleMatch[1].trim(); - + if (titleMatch) return titleMatch[1].trim().replace(/^["']|["']$/g, ''); + const nameMatch = frontmatter.match(/^name:\s*(.+)$/m); + if (nameMatch) return nameMatch[1].trim().replace(/^["']|["']$/g, ''); + return null; } -// Clean markdown content for raw display -function cleanMarkdownForDisplay(content, filepath) { +// Clean markdown content for raw display (urlPrefix fixes relative img/ links for each docs plugin route) +function cleanMarkdownForDisplay(content, filepath, urlPrefix = '/docs/') { + const base = urlPrefix.endsWith('/') ? urlPrefix.slice(0, -1) : urlPrefix; const fileDir = filepath.replace(/[^/]*$/, ''); // Extract title from frontmatter before stripping it @@ -140,7 +152,7 @@ function cleanMarkdownForDisplay(content, filepath) { content = content.replace( /!\[([^\]]*)\]\((\.\/)?img\/([^)]+)\)/g, (match, alt, relPrefix, filename) => { - return `![${alt}](/docs/${fileDir}img/${filename})`; + return `![${alt}](${base}/${fileDir}img/${filename})`; } ); @@ -267,51 +279,68 @@ module.exports = function markdownSourcePlugin(context, options) { name: 'markdown-source-plugin-local', async postBuild({ outDir }) { - const docsDir = path.join(context.siteDir, 'docs'); - // Output to /docs/ subdirectory to match HTML URLs - const buildDir = path.join(outDir, 'docs'); - - console.log('[markdown-source-plugin-local] Copying markdown source files to /docs/...'); - - const mdFiles = findMarkdownFiles(docsDir); - - let copiedCount = 0; - - for (const mdFile of mdFiles) { - const sourcePath = path.join(docsDir, mdFile); - - try { - // Read content first to extract id/slug from frontmatter - const content = await fs.readFile(sourcePath, 'utf8'); - - // Get the output path (uses id from frontmatter or removes numeric prefix) - const outputPath = getOutputPath(mdFile, content); - const destPath = path.join(buildDir, outputPath); - - await fs.ensureDir(path.dirname(destPath)); - - const cleanedContent = cleanMarkdownForDisplay(content, outputPath); - - await fs.writeFile(destPath, cleanedContent, 'utf8'); - copiedCount++; + let totalCopied = 0; + + for (const { sourceSubdir, outSubdir, urlPrefix } of MARKDOWN_EXPORT_SOURCES) { + const sourceDir = path.join(context.siteDir, sourceSubdir); + if (!fs.existsSync(sourceDir)) { + console.warn( + `[markdown-source-plugin-local] Skip missing directory: ${sourceSubdir}` + ); + continue; + } - if (mdFile !== outputPath) { - console.log(` ✓ Processed: ${mdFile} → docs/${outputPath}`); - } else { - console.log(` ✓ Processed: docs/${outputPath}`); + const buildDir = path.join(outDir, outSubdir); + console.log( + `[markdown-source-plugin-local] Copying markdown source files to /${outSubdir}/...` + ); + + const mdFiles = findMarkdownFiles(sourceDir); + + for (const mdFile of mdFiles) { + const sourcePath = path.join(sourceDir, mdFile); + + try { + const content = await fs.readFile(sourcePath, 'utf8'); + const outputPath = getOutputPath(mdFile, content); + const destPath = path.join(buildDir, outputPath); + + await fs.ensureDir(path.dirname(destPath)); + + const cleanedContent = cleanMarkdownForDisplay( + content, + outputPath, + urlPrefix + ); + + await fs.writeFile(destPath, cleanedContent, 'utf8'); + totalCopied++; + + if (mdFile !== outputPath) { + console.log(` ✓ Processed: ${sourceSubdir}/${mdFile} → ${outSubdir}/${outputPath}`); + } else { + console.log(` ✓ Processed: ${outSubdir}/${outputPath}`); + } + } catch (error) { + console.error( + ` ✗ Failed to process ${sourceSubdir}/${mdFile}:`, + error.message + ); } - } catch (error) { - console.error(` ✗ Failed to process docs/${mdFile}:`, error.message); } } - console.log(`[markdown-source-plugin-local] Successfully copied ${copiedCount} markdown files`); + console.log( + `[markdown-source-plugin-local] Successfully copied ${totalCopied} markdown files (docs + skills + agents)` + ); - // Copy image directories + // Copy image directories from docs/ only (site images live under docs) + const docsDir = path.join(context.siteDir, 'docs'); console.log('[markdown-source-plugin-local] Copying image directories...'); const imgDirCount = await copyImageDirectories(docsDir, outDir); - console.log(`[markdown-source-plugin-local] Successfully copied ${imgDirCount} image directories`); + console.log( + `[markdown-source-plugin-local] Successfully copied ${imgDirCount} image directories` + ); }, }; -}; - +}; \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 641dcb138..bec1b35cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,820 +1,1859 @@ -lockfileVersion: '9.0' +lockfileVersion: '6.0' settings: autoInstallPeers: true excludeLinksFromLockfile: false -importers: - - .: - dependencies: - '@docsearch/react': - specifier: ^3.5.2 - version: 3.9.0(@algolia/client-search@5.50.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) - '@docusaurus/core': - specifier: 3.1.1 - version: 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-client-redirects': - specifier: 3.1.1 - version: 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/preset-classic': - specifier: 3.1.1 - version: 3.1.1(@algolia/client-search@5.50.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.2.2) - '@docusaurus/theme-common': - specifier: 3.1.1 - version: 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-search-algolia': - specifier: 3.1.1 - version: 3.1.1(@algolia/client-search@5.50.0)(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.2.2) - '@mdx-js/react': - specifier: 3.0.1 - version: 3.0.1(@types/react@18.3.28)(react@18.3.1) - '@morph-network/viem': - specifier: 0.1.0 - version: 0.1.0(@morph-network/chain@0.0.2)(typescript@5.2.2) - '@morui/theme': - specifier: ^2.1.0 - version: 2.1.0(tailwindcss@3.4.19) - autoprefixer: - specifier: ^10.4.17 - version: 10.4.27(postcss@8.5.8) - classnames: - specifier: ^2.5.1 - version: 2.5.1 - docusaurus-markdown-source-plugin: - specifier: ^2.0.1 - version: 2.2.4(@docusaurus/core@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - docusaurus-plugin-sass: - specifier: ^0.2.5 - version: 0.2.6(@docusaurus/core@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(sass@1.98.0)(webpack@5.105.4) - dotenv: - specifier: ^16.0.3 - version: 16.6.1 - lottie-react: - specifier: ^2.4.0 - version: 2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - postcss: - specifier: ^8.4.33 - version: 8.5.8 - prism-react-renderer: - specifier: ^2.1.0 - version: 2.4.1(react@18.3.1) - react: - specifier: ^18.2.0 - version: 18.3.1 - react-dom: - specifier: ^18.2.0 - version: 18.3.1(react@18.3.1) - rehype-katex: - specifier: ^7.0.0 - version: 7.0.1 - remark-math: - specifier: ^6.0.0 - version: 6.0.0 - sass: - specifier: ^1.71.0 - version: 1.98.0 - tailwindcss: - specifier: ^3.4.1 - version: 3.4.19 - viem: - specifier: ^2.44.4 - version: 2.47.6(typescript@5.2.2) - devDependencies: - '@docusaurus/module-type-aliases': - specifier: 3.1.1 - version: 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/tsconfig': - specifier: 3.1.1 - version: 3.1.1 - '@docusaurus/types': - specifier: 3.1.1 - version: 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/react': - specifier: ^18.2.29 - version: 18.3.28 - pre-commit: - specifier: ^1.2.2 - version: 1.2.2 - typescript: - specifier: ~5.2.2 - version: 5.2.2 +overrides: + webpack: 5.105.4 + +dependencies: + '@docsearch/react': + specifier: ^3.5.2 + version: 3.6.3(@algolia/client-search@5.44.0)(@types/react@18.3.12)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2) + '@docusaurus/core': + specifier: 3.1.1 + version: 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-client-redirects': + specifier: 3.1.1 + version: 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/preset-classic': + specifier: 3.1.1 + version: 3.1.1(@algolia/client-search@5.44.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2)(typescript@5.4.5) + '@docusaurus/theme-common': + specifier: 3.1.1 + version: 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/theme-mermaid': + specifier: 3.1.1 + version: 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/theme-search-algolia': + specifier: 3.1.1 + version: 3.1.1(@algolia/client-search@5.44.0)(@docusaurus/types@3.1.1)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2)(typescript@5.4.5) + '@mdx-js/react': + specifier: 3.0.1 + version: 3.0.1(@types/react@18.3.12)(react@18.3.1) + '@morph-network/viem': + specifier: 0.1.0 + version: 0.1.0(@morph-network/chain@0.0.1)(typescript@5.4.5) + '@morui/theme': + specifier: ^2.1.0 + version: 2.1.0(tailwindcss@3.4.14) + autoprefixer: + specifier: ^10.4.17 + version: 10.4.20(postcss@8.4.47) + classnames: + specifier: ^2.5.1 + version: 2.5.1 + docusaurus-markdown-source-plugin: + specifier: ^2.0.1 + version: 2.0.1(@docusaurus/core@3.1.1)(react-dom@18.3.1)(react@18.3.1) + docusaurus-plugin-sass: + specifier: ^0.2.5 + version: 0.2.5(@docusaurus/core@3.1.1)(sass@1.80.6)(webpack@5.105.4) + dotenv: + specifier: ^16.0.3 + version: 16.4.5 + lottie-react: + specifier: ^2.4.0 + version: 2.4.0(react-dom@18.3.1)(react@18.3.1) + postcss: + specifier: ^8.4.33 + version: 8.4.47 + prism-react-renderer: + specifier: ^2.1.0 + version: 2.4.0(react@18.3.1) + react: + specifier: ^18.2.0 + version: 18.3.1 + react-dom: + specifier: ^18.2.0 + version: 18.3.1(react@18.3.1) + rehype-katex: + specifier: ^7.0.0 + version: 7.0.1 + remark-math: + specifier: ^6.0.0 + version: 6.0.0 + sass: + specifier: ^1.71.0 + version: 1.80.6 + tailwindcss: + specifier: ^3.4.1 + version: 3.4.14 + viem: + specifier: ^2.44.4 + version: 2.44.4(typescript@5.4.5) + +devDependencies: + '@docusaurus/module-type-aliases': + specifier: 3.1.1 + version: 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/tsconfig': + specifier: 3.1.1 + version: 3.1.1 + '@docusaurus/types': + specifier: 3.1.1 + version: 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@types/react': + specifier: ^18.2.29 + version: 18.3.12 + husky: + specifier: ^9.1.7 + version: 9.1.7 + pre-commit: + specifier: ^1.2.2 + version: 1.2.2 + typescript: + specifier: ~5.4.5 + version: 5.4.5 + webpack: + specifier: 5.105.4 + version: 5.105.4 packages: - '@adraffy/ens-normalize@1.11.1': + /@adraffy/ens-normalize@1.11.1: resolution: {integrity: sha512-nhCBV3quEgesuf7c7KYfperqSS14T8bYuvJ8PcLJp6znkZpFc0AuW4qBtr8eKVyPPe/8RSr7sglCWPU5eaxwKQ==} + dev: false - '@algolia/abtesting@1.16.0': - resolution: {integrity: sha512-alHFZ68/i9qLC/muEB07VQ9r7cB8AvCcGX6dVQi2PNHhc/ZQRmmFAv8KK1ay4UiseGSFr7f0nXBKsZ/jRg7e4g==} + /@algolia/abtesting@1.10.0: + resolution: {integrity: sha512-mQT3jwuTgX8QMoqbIR7mPlWkqQqBPQaPabQzm37xg2txMlaMogK/4hCiiESGdg39MlHZOVHeV+0VJuE7f5UK8A==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false - '@algolia/autocomplete-core@1.17.9': + /@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.17.2): resolution: {integrity: sha512-O7BxrpLDPJWWHv/DLA9DRFWs+iY1uOJZkqUwjS5HSZAGcl0hIVCQ97LTLewiZmZ402JYUrun+8NqFP+hCknlbQ==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: false + + /@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.44.0)(algoliasearch@5.12.0)(search-insights@2.17.2): + resolution: {integrity: sha512-009HdfugtGCdC4JdXUbVJClA0q0zh24yyePn+KUGk3rP7j8FEe/m5Yo/z65gn6nP/cM39PxpzqKrL7A6fP6PPw==} + dependencies: + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.44.0)(algoliasearch@5.12.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.44.0)(algoliasearch@5.12.0) + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + - search-insights + dev: false - '@algolia/autocomplete-plugin-algolia-insights@1.17.9': + /@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.17.2): resolution: {integrity: sha512-u1fEHkCbWF92DBeB/KHeMacsjsoI0wFhjZtlCq2ddZbAehshbZST6Hs0Avkc0s+4UyBGbMDnSuXHLuvRWK5iDQ==} peerDependencies: search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: false + + /@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.44.0)(algoliasearch@5.12.0)(search-insights@2.17.2): + resolution: {integrity: sha512-a/yTUkcO/Vyy+JffmAnTWbr4/90cLzw+CC3bRbhnULr/EM0fGNvM13oQQ14f2moLMcVDyAx/leczLlAOovhSZg==} + peerDependencies: + search-insights: '>= 1 < 3' + dependencies: + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.44.0)(algoliasearch@5.12.0) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + - algoliasearch + dev: false + + /@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.44.0)(algoliasearch@5.12.0): + resolution: {integrity: sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.44.0)(algoliasearch@5.12.0) + '@algolia/client-search': 5.44.0 + algoliasearch: 5.12.0 + dev: false - '@algolia/autocomplete-preset-algolia@1.17.9': + /@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0): resolution: {integrity: sha512-Na1OuceSJeg8j7ZWn5ssMu/Ax3amtOwk76u4h5J4eK2Nx2KB5qt0Z4cOapCsxot9VcEN11ADV5aUSlQF4RhGjQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) + '@algolia/client-search': 5.44.0 + algoliasearch: 5.44.0 + dev: false + + /@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.44.0)(algoliasearch@5.12.0): + resolution: {integrity: sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 5.44.0 + algoliasearch: 5.12.0 + dev: false - '@algolia/autocomplete-shared@1.17.9': + /@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0): resolution: {integrity: sha512-iDf05JDQ7I0b7JEA/9IektxN/80a2MZ1ToohfmNS3rfeuQnIKI3IJlIafD0xu4StbtQTghx9T3Maa97ytkXenQ==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 5.44.0 + algoliasearch: 5.44.0 + dev: false + + /@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.44.0)(algoliasearch@5.12.0): + resolution: {integrity: sha512-Wnm9E4Ye6Rl6sTTqjoymD+l8DjSTHsHboVRYrKgEt8Q7UHm9nYbqhN/i0fhUYA3OAEH7WA8x3jfpnmJm3rKvaQ==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + dependencies: + '@algolia/client-search': 5.44.0 + algoliasearch: 5.12.0 + dev: false + + /@algolia/cache-browser-local-storage@4.25.3: + resolution: {integrity: sha512-J0vrnbIYmDIf9d9qQwBXaHn10VoQ/rA+2iBMr/idfsjHhL9I4h2pC9Dj1i0ggDLv9sPajbeVVh0BdC+mDbo7Tw==} + dependencies: + '@algolia/cache-common': 4.25.3 + dev: false + + /@algolia/cache-common@4.25.3: + resolution: {integrity: sha512-dDls2jhGFdkGnoKwXADBnjosHKdKiwlY+tzaua5J0q9XJptn6DCBDUt3pg46GhTRz+64x08M+dyp8nNoV+3/Jw==} + dev: false + + /@algolia/cache-in-memory@4.25.3: + resolution: {integrity: sha512-6u/fVDr3ZIJIgtqdgUDB5kL9KcOdowmxf052bjfI1XhFTpxmIa49HcAEh1y2R0YqmmNDQHaPCT0QzwkINhWbug==} + dependencies: + '@algolia/cache-common': 4.25.3 + dev: false + + /@algolia/client-abtesting@5.12.0: + resolution: {integrity: sha512-hx4eVydkm3yrFCFxmcBtSzI/ykt0cZ6sDWch+v3JTgKpD2WtosMJU3Upv1AjQ4B6COSHCOWEX3vfFxW6OoH6aA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false + + /@algolia/client-abtesting@5.44.0: + resolution: {integrity: sha512-KY5CcrWhRTUo/lV7KcyjrZkPOOF9bjgWpMj9z98VA+sXzVpZtkuskBLCKsWYFp2sbwchZFTd3wJM48H0IGgF7g==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false - '@algolia/cache-browser-local-storage@4.27.0': - resolution: {integrity: sha512-YGog2s57sO20lvpa+hv5XLAAmiTI1kHsCMRtPVfiaOdIQnvRla21lfH08onqEbZihOPVI8GULwt79zQB2ymKzg==} + /@algolia/client-account@4.25.3: + resolution: {integrity: sha512-TkSVT5+davX4Dzt3gyEJ+SAfaVT5bHrZctAiup/AGPV7sNBigv4kuZv40OEbMMgu1uPJ4zw3tA39Oj/mOjd6gg==} + dependencies: + '@algolia/client-common': 4.25.3 + '@algolia/client-search': 4.25.3 + '@algolia/transporter': 4.25.3 + dev: false - '@algolia/cache-common@4.27.0': - resolution: {integrity: sha512-Sr8zjNXj82p6lO4W9CdzfF0m0/9h/H6VAdSHOTtimm/cTzXIYXRI2IZq7+Nt2ljJ7Ukx+7dIFcxQjE57eQSPsw==} + /@algolia/client-analytics@4.25.3: + resolution: {integrity: sha512-vHSU4zBaENbRjzwFYB3OQuDlKXwe+YDRgyGh1kKZhcMRDSsEBH/PGNWn+2ZmtbgrNS52TC+TJ8oUOg5wXIeISw==} + dependencies: + '@algolia/client-common': 4.25.3 + '@algolia/client-search': 4.25.3 + '@algolia/requester-common': 4.25.3 + '@algolia/transporter': 4.25.3 + dev: false - '@algolia/cache-in-memory@4.27.0': - resolution: {integrity: sha512-abgMRTcVD0IllNvMM9JFhxtyLn1v6Ey7mQ7+BGS3JCzvkCX7KZqlS0BIuVUDgx9sPIfOeNsG/awGzMmP50TwZw==} + /@algolia/client-analytics@5.12.0: + resolution: {integrity: sha512-EpTsSv6IW8maCfXCDIptgT7+mQJj7pImEkcNUnxR8yUKAHzTogTXv9yGm2WXOZFVuwstd2i0sImhQ1Vz8RH/hA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false - '@algolia/client-abtesting@5.50.0': - resolution: {integrity: sha512-mfgUdLQNxOAvCZUGzPQxjahEWEPuQkKlV0ZtGmePOa9ZxIQZlk31vRBNbM6ScU8jTH41SCYE77G/lCifDr1SVw==} + /@algolia/client-analytics@5.44.0: + resolution: {integrity: sha512-LKOCE8S4ewI9bN3ot9RZoYASPi8b78E918/DVPW3HHjCMUe6i+NjbNG6KotU4RpP6AhRWZjjswbOkWelUO+OoA==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false - '@algolia/client-account@4.27.0': - resolution: {integrity: sha512-sSHxwrKTKJrwfoR/LcQJZfmiWJcM5d9Rp7afMChxOcdGdkSdIwrNBC8SCcHRenA3GsZ6mg+j6px7KWYxJ34btA==} + /@algolia/client-common@4.25.3: + resolution: {integrity: sha512-ExRdFnJDe7t1/DgJUsqjzZKeI9gkLft4oVttlyTMru8TRNWA6eZ0wHRj4uQ9N3sxmzPiw3C53wigor705n1yQw==} + dependencies: + '@algolia/requester-common': 4.25.3 + '@algolia/transporter': 4.25.3 + dev: false - '@algolia/client-analytics@4.27.0': - resolution: {integrity: sha512-MqIDyxODljn9ZC4oqjQD0kez2a4zjIJ9ywA/b7cIiUiK/tDjZNTVjYd9WXMKQlXnWUwfrfXJZClVVqN1iCXS+Q==} + /@algolia/client-common@5.12.0: + resolution: {integrity: sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==} + engines: {node: '>= 14.0.0'} + dev: false - '@algolia/client-analytics@5.50.0': - resolution: {integrity: sha512-5mjokeKYyPaP3Q8IYJEnutI+O4dW/Ixxx5IgsSxT04pCfGqPXxTOH311hTQxyNpcGGEOGrMv8n8Z+UMTPamioQ==} + /@algolia/client-common@5.44.0: + resolution: {integrity: sha512-1yyJm4OYC2cztbS28XYVWwLXdwpLsMG4LoZLOltVglQ2+hc/i9q9fUDZyjRa2Bqt4DmkIfezagfMrokhyH4uxQ==} engines: {node: '>= 14.0.0'} + dev: false - '@algolia/client-common@4.27.0': - resolution: {integrity: sha512-ZrT6l/YPQgyIUuBCxcYPeXol2VBLUMuNb1rKXrm6z1f/iTiwqtnEEb16/6CC11+Re0ZGXrdcMVrgDRrzveQ1aQ==} + /@algolia/client-insights@5.12.0: + resolution: {integrity: sha512-8alajmsYUd+7vfX5lpRNdxqv3Xx9clIHLUItyQK0Z6gwGMbVEFe6YYhgDtwslMAP0y6b0WeJEIZJMLgT7VYpRw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false - '@algolia/client-common@5.50.0': - resolution: {integrity: sha512-emtOvR6dl3rX3sBJXXbofMNHU1qMQqQSWu319RMrNL5BWoBqyiq7y0Zn6cjJm7aGHV/Qbf+KCCYeWNKEMPI3BQ==} + /@algolia/client-insights@5.44.0: + resolution: {integrity: sha512-wVQWK6jYYsbEOjIMI+e5voLGPUIbXrvDj392IckXaCPvQ6vCMTXakQqOYCd+znQdL76S+3wHDo77HZWiAYKrtA==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false - '@algolia/client-insights@5.50.0': - resolution: {integrity: sha512-IerGH2/hcj/6bwkpQg/HHRqmlGN1XwygQWythAk0gZFBrghs9danJaYuSS3ShzLSVoIVth4jY5GDPX9Lbw5cgg==} + /@algolia/client-personalization@4.25.3: + resolution: {integrity: sha512-ycCkQ0nWoH+sf0Gh20kk4NfJ+iUBc59ailqNCFcVl/0th1dtHF0P61IGetTsSmxVPZedDvnHop2z1ujWpYzNmw==} + dependencies: + '@algolia/client-common': 4.25.3 + '@algolia/requester-common': 4.25.3 + '@algolia/transporter': 4.25.3 + dev: false + + /@algolia/client-personalization@5.12.0: + resolution: {integrity: sha512-bUV9HtfkTBgpoVhxFrMkmVPG03ZN1Rtn51kiaEtukucdk3ggjR9Qu1YUfRSU2lFgxr9qJc8lTxwfvhjCeJRcqw==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false - '@algolia/client-personalization@4.27.0': - resolution: {integrity: sha512-OZqaFFVm+10hAlmxpiTWi/o2n+YKBESbSqSy2yXAumPH/kaK4moJHFblbh8IkV3KZR0lLm4hzPtn8Q2nWNiDUA==} + /@algolia/client-personalization@5.44.0: + resolution: {integrity: sha512-lkgRjOjOkqmIkebHjHpU9rLJcJNUDMm+eVSW/KJQYLjGqykEZxal+nYJJTBbLceEU2roByP/+27ZmgIwCdf0iA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false - '@algolia/client-personalization@5.50.0': - resolution: {integrity: sha512-3idPJeXn5L0MmgP9jk9JJqblrQ/SguN93dNK9z9gfgyupBhHnJMOEjrRYcVgTIfvG13Y04wO+Q0FxE2Ut8PVbA==} + /@algolia/client-query-suggestions@5.12.0: + resolution: {integrity: sha512-Q5CszzGWfxbIDs9DJ/QJsL7bP6h+lJMg27KxieEnI9KGCu0Jt5iFA3GkREkgRZxRdzlHbZKkrIzhtHVbSHw/rg==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false - '@algolia/client-query-suggestions@5.50.0': - resolution: {integrity: sha512-q7qRoWrQK1a8m5EFQEmPlo7+pg9mVQ8X5jsChtChERre0uS2pdYEDixBBl0ydBSGkdGbLUDufcACIhH/077E4g==} + /@algolia/client-query-suggestions@5.44.0: + resolution: {integrity: sha512-sYfhgwKu6NDVmZHL1WEKVLsOx/jUXCY4BHKLUOcYa8k4COCs6USGgz6IjFkUf+niwq8NCECMmTC4o/fVQOalsA==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false + + /@algolia/client-search@4.25.3: + resolution: {integrity: sha512-GFA99zL6cfNSDEDHfEJ0TmVYmXCJofQpForFhCShQLfRQgBYud9UBHOh4LB6ZSzmtVDIfP33joCA9hxQWPIbFw==} + dependencies: + '@algolia/client-common': 4.25.3 + '@algolia/requester-common': 4.25.3 + '@algolia/transporter': 4.25.3 + dev: false - '@algolia/client-search@4.27.0': - resolution: {integrity: sha512-qmX/f67ay0eZ4V5Io8fWWOcUVo/gqre2yei1PnmEhQU2Gul6ushg25QnNrfu4BODiRrw1rwYveZaLCiHvcUxrQ==} + /@algolia/client-search@5.12.0: + resolution: {integrity: sha512-R3qzEytgVLHOGNri+bpta6NtTt7YtkvUe/QBcAmMDjW4Jk1P0eBYIPfvnzIPbINRsLxIq9fZs9uAYBgsrts4Zg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false - '@algolia/client-search@5.50.0': - resolution: {integrity: sha512-Jc360x4yqb3eEg4OY4KEIdGePBxZogivKI+OGIU8aLXgAYPTECvzeOBc90312yHA1hr3AeRlAFl0rIc8lQaIrQ==} + /@algolia/client-search@5.44.0: + resolution: {integrity: sha512-/FRKUM1G4xn3vV8+9xH1WJ9XknU8rkBGlefruq9jDhYUAvYozKimhrmC2pRqw/RyHhPivmgZCRuC8jHP8piz4Q==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false - '@algolia/events@4.0.1': + /@algolia/events@4.0.1: resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} + dev: false - '@algolia/ingestion@1.50.0': - resolution: {integrity: sha512-OS3/Viao+NPpyBbEY3tf6hLewppG+UclD+9i0ju56mq2DrdMJFCkEky6Sk9S5VPcbLzxzg3BqBX6u9Q35w19aQ==} + /@algolia/ingestion@1.12.0: + resolution: {integrity: sha512-zpHo6qhR22tL8FsdSI4DvEraPDi/019HmMrCFB/TUX98yzh5ooAU7sNW0qPL1I7+S++VbBmNzJOEU9VI8tEC8A==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false + + /@algolia/ingestion@1.44.0: + resolution: {integrity: sha512-5+S5ynwMmpTpCLXGjTDpeIa81J+R4BLH0lAojOhmeGSeGEHQTqacl/4sbPyDTcidvnWhaqtyf8m42ue6lvISAw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false - '@algolia/logger-common@4.27.0': - resolution: {integrity: sha512-pIrmQRXtDV+zTMVXKtKCosC2rWhn0F0TdUeb9etA6RiAz6jY6bY6f0+JX7YekDK09SnmZMLIyUa7Jci+Ied9bw==} + /@algolia/logger-common@4.25.3: + resolution: {integrity: sha512-RrlmuHNTc9CIgykWh37QduDAkpX4745KQ75I+vhgT5ER3BBykaYByDTyWkyFSSlZjpDHXtOymu9epNbI5V6OWQ==} + dev: false - '@algolia/logger-console@4.27.0': - resolution: {integrity: sha512-UWvta8BxsR/u5z9eI088mOSLQaGtmoCtXeN3DYJurlxAdJwPuKtEb5+433kxA6/E9f2/JgoW89KZ1vNP9pcHBQ==} + /@algolia/logger-console@4.25.3: + resolution: {integrity: sha512-s8AtfF9W+6Pbxfwkmzywd8ThVJ04D4JZlNyBdCuWpC5b3jzx1JAXT9ZL8K2faUsO4rEdHpy9LXMURvF7cQAE0w==} + dependencies: + '@algolia/logger-common': 4.25.3 + dev: false - '@algolia/monitoring@1.50.0': - resolution: {integrity: sha512-/znwgSiGufpbJVIoDmeQaHtTq+OMdDawFRbMSJVv+12n79hW+qdQXS8/Uu3BD3yn0BzgVFJEvrsHrCsInZKdhw==} + /@algolia/monitoring@1.12.0: + resolution: {integrity: sha512-i2AJZED/zf4uhxezAJUhMKoL5QoepCBp2ynOYol0N76+TSoohaMADdPnWCqOULF4RzOwrG8wWynAwBlXsAI1RQ==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false - '@algolia/recommend@4.27.0': - resolution: {integrity: sha512-CFy54xDjrsazPi3KN04yPmLRDT72AKokc3RLOdWQvG0/uEUjj7dhWqe9qenxpL4ydsjO7S1eY5YqmX+uMGonlg==} + /@algolia/monitoring@1.44.0: + resolution: {integrity: sha512-xhaTN8pXJjR6zkrecg4Cc9YZaQK2LKm2R+LkbAq+AYGBCWJxtSGlNwftozZzkUyq4AXWoyoc0x2SyBtq5LRtqQ==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false + + /@algolia/recommend@4.25.3: + resolution: {integrity: sha512-/vpXzDFLmrkcM1UOvZae8i/z8wRs2uaKKlPaHqN24ySADWKyf2zxVsDmtcaGMYzBYqYsKR1XKFvwGA5HQxaZxQ==} + dependencies: + '@algolia/cache-browser-local-storage': 4.25.3 + '@algolia/cache-common': 4.25.3 + '@algolia/cache-in-memory': 4.25.3 + '@algolia/client-common': 4.25.3 + '@algolia/client-search': 4.25.3 + '@algolia/logger-common': 4.25.3 + '@algolia/logger-console': 4.25.3 + '@algolia/requester-browser-xhr': 4.25.3 + '@algolia/requester-common': 4.25.3 + '@algolia/requester-node-http': 4.25.3 + '@algolia/transporter': 4.25.3 + dev: false + + /@algolia/recommend@5.12.0: + resolution: {integrity: sha512-0jmZyKvYnB/Bj5c7WKsKedOUjnr0UtXm0LVFUdQrxXfqOqvWv9n6Vpr65UjdYG4Q49kRQxhlwtal9WJYrYymXg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false - '@algolia/recommend@5.50.0': - resolution: {integrity: sha512-dHjUfu4jfjdQiKDpCpAnM7LP5yfG0oNShtfpF5rMCel6/4HIoqJ4DC4h5GKDzgrvJYtgAhblo0AYBmOM00T+lQ==} + /@algolia/recommend@5.44.0: + resolution: {integrity: sha512-GNcite/uOIS7wgRU1MT7SdNIupGSW+vbK9igIzMePvD2Dl8dy0O3urKPKIbTuZQqiVH1Cb84y5cgLvwNrdCj/Q==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false + + /@algolia/requester-browser-xhr@4.25.3: + resolution: {integrity: sha512-5ZXO55IDqXUehQKilVYU6OdUBT2XGI+JIki2UsxUkMykH4ksA9EU8YZJth1ZwEYTDC50bVSH32VCYsOFB0MUTA==} + dependencies: + '@algolia/requester-common': 4.25.3 + dev: false - '@algolia/requester-browser-xhr@4.27.0': - resolution: {integrity: sha512-dTenMBIIpyp5o3C2ZnfbsuSlD/lL9jPkk6T+2+qm38fyw2nf49ANbcHFE79NgiGrnmw7QrYveCs9NIP3Wk4v6g==} + /@algolia/requester-browser-xhr@5.12.0: + resolution: {integrity: sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + dev: false - '@algolia/requester-browser-xhr@5.50.0': - resolution: {integrity: sha512-bffIbUljAWnh/Ctu5uScORajuUavqmZ0ACYd1fQQeSSYA9NNN83ynO26pSc2dZRXpSK0fkc1//qSSFXMKGu+aw==} + /@algolia/requester-browser-xhr@5.44.0: + resolution: {integrity: sha512-YZHBk72Cd7pcuNHzbhNzF/FbbYszlc7JhZlDyQAchnX5S7tcemSS96F39Sy8t4O4WQLpFvUf1MTNedlitWdOsQ==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + dev: false - '@algolia/requester-common@4.27.0': - resolution: {integrity: sha512-VC3prAQVgWTubMStb3mJz6i61Hqbtagi2LeIbgNtoFJFff3XZDcAaO1D5r0GYl2+DrB2VzUHnQXbkiuI+HHYyg==} + /@algolia/requester-common@4.25.3: + resolution: {integrity: sha512-n5dJA5jlIle5IQavlDWBXC46lw/VuwFbbknWJcPiJ6nJ6lRllpLOhV2ZJeUdCvRyg/6zG18h+9+Q/m2d/vLEIw==} + dev: false - '@algolia/requester-fetch@5.50.0': - resolution: {integrity: sha512-y0EwNvPGvkM+yTAqqO6Gpt9wVGm3CLDtpLvNEiB3VGvN3WzfkjZGtLUsG/ru2kVJIIU7QcV0puuYgEpBeFxcJg==} + /@algolia/requester-fetch@5.12.0: + resolution: {integrity: sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + dev: false + + /@algolia/requester-fetch@5.44.0: + resolution: {integrity: sha512-B9WHl+wQ7uf46t9cq+vVM/ypVbOeuldVDq9OtKsX2ApL2g/htx6ImB9ugDOOJmB5+fE31/XPTuCcYz/j03+idA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + dev: false - '@algolia/requester-node-http@4.27.0': - resolution: {integrity: sha512-y8nUqaUQeSOQ5oaNo0b2QPznyBFW9LoIwljyUphJ+gUZpU6O/j2/C8ovoqDpIe6J0etqHg5RCcBizrCFZuLpyw==} + /@algolia/requester-node-http@4.25.3: + resolution: {integrity: sha512-7BXWAyVMK1Z3gT+2RPv0I48HfaIlho3nCQaB/tjziw+DdPigHRDq+xjtdzL8y+5O1g7LEdlPI9QHAgDbW/BLXw==} + dependencies: + '@algolia/requester-common': 4.25.3 + dev: false + + /@algolia/requester-node-http@5.12.0: + resolution: {integrity: sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.12.0 + dev: false - '@algolia/requester-node-http@5.50.0': - resolution: {integrity: sha512-xpwefe4fCOWnZgXCbkGpqQY6jgBSCf2hmgnySbyzZIccrv3SoashHKGPE4x6vVG+gdHrGciMTAcDo9HOZwH22Q==} + /@algolia/requester-node-http@5.44.0: + resolution: {integrity: sha512-MULm0qeAIk4cdzZ/ehJnl1o7uB5NMokg83/3MKhPq0Pk7+I0uELGNbzIfAkvkKKEYcHALemKdArtySF9eKzh/A==} engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-common': 5.44.0 + dev: false - '@algolia/transporter@4.27.0': - resolution: {integrity: sha512-PvSbELU4VjN3xSX79ki+zIdOGhTxyJXWvRDzkUjfTx2iNfPWDdTjzKbP1o+268coJztxrkuBwJz90Urek7o1Kw==} + /@algolia/transporter@4.25.3: + resolution: {integrity: sha512-2yji+TKjC1uOxhJ9pCdw7lQm6GSiQ+fMvNH4es6oz82DrBpkVHkeU49HmpyTqz8Ai9e+nW/UBz8T9+UyBul3dA==} + dependencies: + '@algolia/cache-common': 4.25.3 + '@algolia/logger-common': 4.25.3 + '@algolia/requester-common': 4.25.3 + dev: false - '@alloc/quick-lru@5.2.0': + /@alloc/quick-lru@5.2.0: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} + dev: false + + /@ampproject/remapping@2.3.0: + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + dev: false + + /@babel/code-frame@7.26.2: + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + dev: false - '@babel/code-frame@7.29.0': - resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} + /@babel/compat-data@7.26.2: + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} + dev: false - '@babel/compat-data@7.29.0': - resolution: {integrity: sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==} + /@babel/core@7.26.0: + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/core@7.29.0': - resolution: {integrity: sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==} + /@babel/generator@7.26.2: + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 + dev: false - '@babel/generator@7.29.1': - resolution: {integrity: sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==} + /@babel/helper-annotate-as-pure@7.25.9: + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.26.0 + dev: false - '@babel/helper-annotate-as-pure@7.27.3': - resolution: {integrity: sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.25.9: + resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-compilation-targets@7.28.6': - resolution: {integrity: sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==} + /@babel/helper-compilation-targets@7.25.9: + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.28.0 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: false - '@babel/helper-create-class-features-plugin@7.28.6': - resolution: {integrity: sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==} + /@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-create-regexp-features-plugin@7.28.5': - resolution: {integrity: sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==} + /@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.1.1 + semver: 6.3.1 + dev: false - '@babel/helper-define-polyfill-provider@0.6.8': - resolution: {integrity: sha512-47UwBLPpQi1NoWzLuHNjRoHlYXMwIJoBf7MFou6viC/sIHWYygpvr0B6IAyh5sBdA2nr2LPIRww8lfaUVQINBA==} + /@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0): + resolution: {integrity: sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-globals@7.28.0': - resolution: {integrity: sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.28.5': - resolution: {integrity: sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==} + /@babel/helper-member-expression-to-functions@7.25.9: + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-module-imports@7.28.6': - resolution: {integrity: sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==} + /@babel/helper-module-imports@7.25.9: + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-module-transforms@7.28.6': - resolution: {integrity: sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==} + /@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-optimise-call-expression@7.27.1': - resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} + /@babel/helper-optimise-call-expression@7.25.9: + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.26.0 + dev: false - '@babel/helper-plugin-utils@7.28.6': - resolution: {integrity: sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==} + /@babel/helper-plugin-utils@7.25.9: + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} + dev: false - '@babel/helper-remap-async-to-generator@7.27.1': - resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} + /@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-replace-supers@7.28.6': - resolution: {integrity: sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==} + /@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-simple-access@7.25.9: + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} + /@babel/helper-skip-transparent-expression-wrappers@7.25.9: + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helper-string-parser@7.27.1': - resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + /@babel/helper-string-parser@7.25.9: + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} + dev: false - '@babel/helper-validator-identifier@7.28.5': - resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==} + /@babel/helper-validator-identifier@7.25.9: + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} + dev: false - '@babel/helper-validator-option@7.27.1': - resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + /@babel/helper-validator-option@7.25.9: + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} + dev: false - '@babel/helper-wrap-function@7.28.6': - resolution: {integrity: sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==} + /@babel/helper-wrap-function@7.25.9: + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/helpers@7.29.2': - resolution: {integrity: sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==} + /@babel/helpers@7.26.0: + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + dev: false - '@babel/parser@7.29.2': - resolution: {integrity: sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==} + /@babel/parser@7.26.2: + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true + dependencies: + '@babel/types': 7.26.0 + dev: false - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5': - resolution: {integrity: sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==} + /@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': - resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} + /@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': - resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': - resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6': - resolution: {integrity: sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==} + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0): resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + dev: false - '@babel/plugin-syntax-dynamic-import@7.8.3': + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-syntax-import-assertions@7.28.6': - resolution: {integrity: sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==} + /@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-syntax-import-attributes@7.28.6': - resolution: {integrity: sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==} + /@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-syntax-jsx@7.28.6': - resolution: {integrity: sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==} + /@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-syntax-typescript@7.28.6': - resolution: {integrity: sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==} + /@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-arrow-functions@7.27.1': - resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} + /@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-async-generator-functions@7.29.0': - resolution: {integrity: sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==} + /@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-async-to-generator@7.28.6': - resolution: {integrity: sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==} + /@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-block-scoped-functions@7.27.1': - resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} + /@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-block-scoping@7.28.6': - resolution: {integrity: sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==} + /@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-class-properties@7.28.6': - resolution: {integrity: sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==} + /@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-class-static-block@7.28.6': - resolution: {integrity: sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==} + /@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-classes@7.28.6': - resolution: {integrity: sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==} + /@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-computed-properties@7.28.6': - resolution: {integrity: sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==} + /@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + dev: false - '@babel/plugin-transform-destructuring@7.28.5': - resolution: {integrity: sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==} + /@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-dotall-regex@7.28.6': - resolution: {integrity: sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==} + /@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-duplicate-keys@7.27.1': - resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} + /@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0': - resolution: {integrity: sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==} + /@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-dynamic-import@7.27.1': - resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-explicit-resource-management@7.28.6': - resolution: {integrity: sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==} + /@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-exponentiation-operator@7.28.6': - resolution: {integrity: sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==} + /@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-export-namespace-from@7.27.1': - resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} + /@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-for-of@7.27.1': - resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} + /@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-function-name@7.27.1': - resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} + /@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-json-strings@7.28.6': - resolution: {integrity: sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==} + /@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-literals@7.27.1': - resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} + /@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-logical-assignment-operators@7.28.6': - resolution: {integrity: sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==} + /@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-member-expression-literals@7.27.1': - resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} + /@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-modules-amd@7.27.1': - resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} + /@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-modules-commonjs@7.28.6': - resolution: {integrity: sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==} + /@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-modules-systemjs@7.29.0': - resolution: {integrity: sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==} + /@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-modules-umd@7.27.1': - resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} + /@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0': - resolution: {integrity: sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==} + /@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-new-target@7.27.1': - resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} + /@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6': - resolution: {integrity: sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==} + /@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-numeric-separator@7.28.6': - resolution: {integrity: sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==} + /@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-object-rest-spread@7.28.6': - resolution: {integrity: sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==} + /@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + dev: false - '@babel/plugin-transform-object-super@7.27.1': - resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} + /@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-optional-catch-binding@7.28.6': - resolution: {integrity: sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==} + /@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-optional-chaining@7.28.6': - resolution: {integrity: sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==} + /@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-parameters@7.27.7': - resolution: {integrity: sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==} + /@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-private-methods@7.28.6': - resolution: {integrity: sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==} + /@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - - '@babel/plugin-transform-private-property-in-object@7.28.6': - resolution: {integrity: sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==} + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-property-literals@7.27.1': - resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} + /@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-react-constant-elements@7.27.1': - resolution: {integrity: sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==} + /@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-react-display-name@7.28.0': - resolution: {integrity: sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==} + /@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-react-jsx-development@7.27.1': - resolution: {integrity: sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==} + /@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-react-jsx@7.28.6': - resolution: {integrity: sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==} + /@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-react-pure-annotations@7.27.1': - resolution: {integrity: sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==} + /@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-regenerator@7.29.0': - resolution: {integrity: sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==} + /@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 + dev: false - '@babel/plugin-transform-regexp-modifiers@7.28.6': - resolution: {integrity: sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==} + /@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-reserved-words@7.27.1': - resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} + /@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-runtime@7.29.0': - resolution: {integrity: sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==} + /@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-shorthand-properties@7.27.1': - resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} + /@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-spread@7.28.6': - resolution: {integrity: sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==} + /@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-sticky-regex@7.27.1': - resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} + /@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-template-literals@7.27.1': - resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} + /@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-typeof-symbol@7.27.1': - resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} + /@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-typescript@7.28.6': - resolution: {integrity: sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==} + /@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: false - '@babel/plugin-transform-unicode-escapes@7.27.1': - resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} + /@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-unicode-property-regex@7.28.6': - resolution: {integrity: sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==} + /@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-unicode-regex@7.27.1': - resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} + /@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/plugin-transform-unicode-sets-regex@7.28.6': - resolution: {integrity: sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==} + /@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + dev: false - '@babel/preset-env@7.29.2': - resolution: {integrity: sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==} + /@babel/preset-env@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.39.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/preset-modules@0.1.6-no-external-plugins': + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0): resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.26.0 + esutils: 2.0.3 + dev: false - '@babel/preset-react@7.28.5': - resolution: {integrity: sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==} + /@babel/preset-react@7.25.9(@babel/core@7.26.0): + resolution: {integrity: sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: false - '@babel/preset-typescript@7.28.5': - resolution: {integrity: sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==} + /@babel/preset-typescript@7.26.0(@babel/core@7.26.0): + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + dev: false - '@babel/runtime-corejs3@7.29.2': - resolution: {integrity: sha512-Lc94FOD5+0aXhdb0Tdg3RUtqT6yWbI/BbFWvlaSJ3gAb9Ks+99nHRDKADVqC37er4eCB0fHyWT+y+K3QOvJKbw==} + /@babel/runtime-corejs3@7.26.0: + resolution: {integrity: sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==} engines: {node: '>=6.9.0'} + dependencies: + core-js-pure: 3.39.0 + regenerator-runtime: 0.14.1 + dev: false - '@babel/runtime@7.29.2': - resolution: {integrity: sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==} + /@babel/runtime@7.26.0: + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.1 - '@babel/template@7.28.6': - resolution: {integrity: sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==} + /@babel/template@7.25.9: + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 + dev: false - '@babel/traverse@7.29.0': - resolution: {integrity: sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==} + /@babel/traverse@7.25.9: + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: false - '@babel/types@7.29.0': - resolution: {integrity: sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==} + /@babel/types@7.26.0: + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + dev: false + + /@braintree/sanitize-url@6.0.4: + resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} + dev: false - '@colors/colors@1.5.0': + /@colors/colors@1.5.0: resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} engines: {node: '>=0.1.90'} + requiresBuild: true + dev: false + optional: true - '@discoveryjs/json-ext@0.5.7': + /@discoveryjs/json-ext@0.5.7: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} + dev: false + + /@docsearch/css@3.6.3: + resolution: {integrity: sha512-3uvbg8E7rhqE1C4oBAK3tGlS2qfhi9zpfZgH/yjDPF73vd9B41urVIKujF4rczcF4E3qs34SedhehiDJ4UdNBA==} + dev: false - '@docsearch/css@3.9.0': + /@docsearch/css@3.9.0: resolution: {integrity: sha512-cQbnVbq0rrBwNAKegIac/t6a8nWoUAn8frnkLFW6YARaRmAQr5/Eoe6Ln2fqkUCZ40KpdrKbpSAmgrkviOxuWA==} + dev: false + + /@docsearch/react@3.6.3(@algolia/client-search@5.44.0)(@types/react@18.3.12)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2): + resolution: {integrity: sha512-2munr4uBuZq1PG+Ge+F+ldIdxb3Wi8OmEIv2tQQb4RvEvvph+xtQkxwHzVIEnt5s+HecwucuXwB+3JhcZboFLg==} + peerDependencies: + '@types/react': '>= 16.8.0 < 19.0.0' + react: '>= 16.8.0 < 19.0.0' + react-dom: '>= 16.8.0 < 19.0.0' + search-insights: '>= 1 < 3' + peerDependenciesMeta: + '@types/react': + optional: true + react: + optional: true + react-dom: + optional: true + search-insights: + optional: true + dependencies: + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.44.0)(algoliasearch@5.12.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.44.0)(algoliasearch@5.12.0) + '@docsearch/css': 3.6.3 + '@types/react': 18.3.12 + algoliasearch: 5.12.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + dev: false - '@docsearch/react@3.9.0': + /@docsearch/react@3.9.0(@algolia/client-search@5.44.0)(@types/react@18.3.12)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2): resolution: {integrity: sha512-mb5FOZYZIkRQ6s/NWnM98k879vu5pscWqTLubLFBO87igYYT4VzVazh4h5o/zCvTIZgEt3PvsCOMOswOUo9yHQ==} peerDependencies: '@types/react': '>= 16.8.0 < 20.0.0' @@ -830,5513 +1869,310 @@ packages: optional: true search-insights: optional: true + dependencies: + '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.44.0)(algoliasearch@5.44.0) + '@docsearch/css': 3.9.0 + '@types/react': 18.3.12 + algoliasearch: 5.44.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + search-insights: 2.17.2 + transitivePeerDependencies: + - '@algolia/client-search' + dev: false - '@docusaurus/core@3.1.1': + /@docusaurus/core@3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): resolution: {integrity: sha512-2nQfKFcf+MLEM7JXsXwQxPOmQAR6ytKMZVSx7tVi9HEm9WtfwBH1fp6bn8Gj4zLUhjWKCLoysQ9/Wm+EZCQ4yQ==} engines: {node: '>=18.0'} hasBin: true peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/runtime': 7.26.0 + '@babel/runtime-corejs3': 7.26.0 + '@babel/traverse': 7.25.9 + '@docusaurus/cssnano-preset': 3.1.1 + '@docusaurus/logger': 3.1.1 + '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/react-loadable': 5.5.2(react@18.3.1) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + '@slorber/static-site-generator-webpack-plugin': 4.0.7 + '@svgr/webpack': 6.5.1 + autoprefixer: 10.4.22(postcss@8.5.6) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.105.4) + babel-plugin-dynamic-import-node: 2.3.3 + boxen: 6.2.1 + chalk: 4.1.2 + chokidar: 3.6.0 + clean-css: 5.3.3 + cli-table3: 0.6.5 + combine-promises: 1.2.0 + commander: 5.1.0 + copy-webpack-plugin: 11.0.0(webpack@5.105.4) + core-js: 3.39.0 + css-loader: 6.11.0(webpack@5.105.4) + css-minimizer-webpack-plugin: 4.2.2(clean-css@5.3.3)(webpack@5.105.4) + cssnano: 5.1.15(postcss@8.5.6) + del: 6.1.1 + detect-port: 1.6.1 + escape-html: 1.0.3 + eta: 2.2.0 + file-loader: 6.2.0(webpack@5.105.4) + fs-extra: 11.2.0 + html-minifier-terser: 7.2.0 + html-tags: 3.3.1 + html-webpack-plugin: 5.6.3(webpack@5.105.4) + leven: 3.1.0 + lodash: 4.17.21 + mini-css-extract-plugin: 2.9.2(webpack@5.105.4) + postcss: 8.5.6 + postcss-loader: 7.3.4(postcss@8.5.6)(typescript@5.4.5)(webpack@5.105.4) + prompts: 2.4.2 + react: 18.3.1 + react-dev-utils: 12.0.1(typescript@5.4.5)(webpack@5.105.4) + react-dom: 18.3.1(react@18.3.1) + react-helmet-async: 1.3.0(react-dom@18.3.1)(react@18.3.1) + react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.3.1) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.105.4) + react-router: 5.3.4(react@18.3.1) + react-router-config: 5.1.1(react-router@5.3.4)(react@18.3.1) + react-router-dom: 5.3.4(react@18.3.1) + rtl-detect: 1.1.2 + semver: 7.6.3 + serve-handler: 6.1.6 + shelljs: 0.8.5 + terser-webpack-plugin: 5.3.10(webpack@5.105.4) + tslib: 2.8.1 + update-notifier: 6.0.2 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.105.4) + webpack: 5.105.4 + webpack-bundle-analyzer: 4.10.2 + webpack-dev-server: 4.15.2(webpack@5.105.4) + webpack-merge: 5.10.0 + webpackbar: 5.0.2(webpack@5.105.4) + transitivePeerDependencies: + - '@docusaurus/types' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false - '@docusaurus/cssnano-preset@3.1.1': + /@docusaurus/cssnano-preset@3.1.1: resolution: {integrity: sha512-LnoIDjJWbirdbVZDMq+4hwmrTl2yHDnBf9MLG9qyExeAE3ac35s4yUhJI8yyTCdixzNfKit4cbXblzzqMu4+8g==} engines: {node: '>=18.0'} + dependencies: + cssnano-preset-advanced: 5.3.10(postcss@8.5.6) + postcss: 8.5.6 + postcss-sort-media-queries: 4.4.1(postcss@8.5.6) + tslib: 2.8.1 + dev: false - '@docusaurus/logger@3.1.1': + /@docusaurus/logger@3.1.1: resolution: {integrity: sha512-BjkNDpQzewcTnST8trx4idSoAla6zZ3w22NqM/UMcFtvYJgmoE4layuTzlfql3VFPNuivvj7BOExa/+21y4X2Q==} engines: {node: '>=18.0'} + dependencies: + chalk: 4.1.2 + tslib: 2.8.1 + dev: false - '@docusaurus/mdx-loader@3.1.1': + /@docusaurus/mdx-loader@3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-xN2IccH9+sv7TmxwsDJNS97BHdmlqWwho+kIVY4tcCXkp+k4QuzvWBeunIMzeayY4Fu13A6sAjHGv5qm72KyGA==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 + dependencies: + '@babel/parser': 7.26.2 + '@babel/traverse': 7.25.9 + '@docusaurus/logger': 3.1.1 + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + '@mdx-js/mdx': 3.1.0(acorn@8.14.0) + '@slorber/remark-comment': 1.0.0 + escape-html: 1.0.3 + estree-util-value-to-estree: 3.2.1 + file-loader: 6.2.0(webpack@5.105.4) + fs-extra: 11.2.0 + image-size: 1.2.1 + mdast-util-mdx: 3.0.0 + mdast-util-to-string: 4.0.0 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + rehype-raw: 7.0.0 + remark-directive: 3.0.0 + remark-emoji: 4.0.1 + remark-frontmatter: 5.0.0 + remark-gfm: 4.0.0 + stringify-object: 3.3.0 + tslib: 2.8.1 + unified: 11.0.5 + unist-util-visit: 5.0.0 + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.105.4) + vfile: 6.0.3 + webpack: 5.105.4 + transitivePeerDependencies: + - '@docusaurus/types' + - '@swc/core' + - acorn + - esbuild + - supports-color + - uglify-js + - webpack-cli + dev: false - '@docusaurus/module-type-aliases@3.1.1': + /@docusaurus/module-type-aliases@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-xBJyx0TMfAfVZ9ZeIOb1awdXgR4YJMocIEzTps91rq+hJDFJgJaylDtmoRhUxkwuYmNK1GJpW95b7DLztSBJ3A==} peerDependencies: react: '*' react-dom: '*' + dependencies: + '@docusaurus/react-loadable': 5.5.2(react@18.3.1) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@types/history': 4.7.11 + '@types/react': 18.3.12 + '@types/react-router-config': 5.0.11 + '@types/react-router-dom': 5.3.3 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + react-helmet-async: 2.0.5(react@18.3.1) + react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.3.1) + transitivePeerDependencies: + - '@swc/core' + - acorn + - esbuild + - supports-color + - uglify-js + - webpack-cli - '@docusaurus/plugin-client-redirects@3.1.1': + /@docusaurus/plugin-client-redirects@3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): resolution: {integrity: sha512-J/1Z75XkO+BmUXHW17FrCIYZQ3b0IKaJECH6yCxW5RQ8NMMJ+SZCtPtx5oYoAd0VHersNiUu+ZAxfOqbsn1jKQ==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/logger': 3.1.1 + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + eta: 2.2.0 + fs-extra: 11.2.0 + lodash: 4.17.21 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/types' + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false - '@docusaurus/plugin-content-blog@3.1.1': + /@docusaurus/plugin-content-blog@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): resolution: {integrity: sha512-ew/3VtVoG3emoAKmoZl7oKe1zdFOsI0NbcHS26kIxt2Z8vcXKCUgK9jJJrz0TbOipyETPhqwq4nbitrY3baibg==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/logger': 3.1.1 + '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + cheerio: 1.0.0-rc.12 + feed: 4.2.2 + fs-extra: 11.2.0 + lodash: 4.17.21 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + reading-time: 1.5.0 + srcset: 4.0.0 + tslib: 2.8.1 + unist-util-visit: 5.0.0 + utility-types: 3.11.0 + webpack: 5.105.4 + transitivePeerDependencies: + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false - '@docusaurus/plugin-content-docs@3.1.1': + /@docusaurus/plugin-content-docs@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): resolution: {integrity: sha512-lhFq4E874zw0UOH7ujzxnCayOyAt0f9YPVYSb9ohxrdCM8B4szxitUw9rIX4V9JLLHVoqIJb6k+lJJ1jrcGJ0A==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - - '@docusaurus/plugin-content-pages@3.1.1': - resolution: {integrity: sha512-NQHncNRAJbyLtgTim9GlEnNYsFhuCxaCNkMwikuxLTiGIPH7r/jpb7O3f3jUMYMebZZZrDq5S7om9a6rvB/YCA==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-debug@3.1.1': - resolution: {integrity: sha512-xWeMkueM9wE/8LVvl4+Qf1WqwXmreMjI5Kgr7GYCDoJ8zu4kD+KaMhrh7py7MNM38IFvU1RfrGKacCEe2DRRfQ==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-google-analytics@3.1.1': - resolution: {integrity: sha512-+q2UpWTqVi8GdlLoSlD5bS/YpxW+QMoBwrPrUH/NpvpuOi0Of7MTotsQf9JWd3hymZxl2uu1o3PIrbpxfeDFDQ==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-google-gtag@3.1.1': - resolution: {integrity: sha512-0mMPiBBlQ5LFHTtjxuvt/6yzh8v7OxLi3CbeEsxXZpUzcKO/GC7UA1VOWUoBeQzQL508J12HTAlR3IBU9OofSw==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-google-tag-manager@3.1.1': - resolution: {integrity: sha512-d07bsrMLdDIryDtY17DgqYUbjkswZQr8cLWl4tzXrt5OR/T/zxC1SYKajzB3fd87zTu5W5klV5GmUwcNSMXQXA==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/plugin-sitemap@3.1.1': - resolution: {integrity: sha512-iJ4hCaMmDaUqRv131XJdt/C/jJQx8UreDWTRqZKtNydvZVh/o4yXGRRFOplea1D9b/zpwL1Y+ZDwX7xMhIOTmg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/preset-classic@3.1.1': - resolution: {integrity: sha512-jG4ys/hWYf69iaN/xOmF+3kjs4Nnz1Ay3CjFLDtYa8KdxbmUhArA9HmP26ru5N0wbVWhY+6kmpYhTJpez5wTyg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/react-loadable@5.5.2': - resolution: {integrity: sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==} - peerDependencies: - react: '*' - - '@docusaurus/theme-classic@3.1.1': - resolution: {integrity: sha512-GiPE/jbWM8Qv1A14lk6s9fhc0LhPEQ00eIczRO4QL2nAQJZXkjPG6zaVx+1cZxPFWbAsqSjKe2lqkwF3fGkQ7Q==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/theme-common@3.1.1': - resolution: {integrity: sha512-38urZfeMhN70YaXkwIGXmcUcv2CEYK/2l4b05GkJPrbEbgpsIZM3Xc+Js2ehBGGZmfZq8GjjQ5RNQYG+MYzCYg==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/theme-search-algolia@3.1.1': - resolution: {integrity: sha512-tBH9VY5EpRctVdaAhT+b1BY8y5dyHVZGFXyCHgTrvcXQy5CV4q7serEX7U3SveNT9zksmchPyct6i1sFDC4Z5g==} - engines: {node: '>=18.0'} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/theme-translations@3.1.1': - resolution: {integrity: sha512-xvWQFwjxHphpJq5fgk37FXCDdAa2o+r7FX8IpMg+bGZBNXyWBu3MjZ+G4+eUVNpDhVinTc+j6ucL0Ain5KCGrg==} - engines: {node: '>=18.0'} - - '@docusaurus/tsconfig@3.1.1': - resolution: {integrity: sha512-FTBuY3KvaHfMVBgvlPmDQ+KS9Q/bYtVftq2ugou3PgBDJoQmw2aUZ4Sg15HKqLGbfIkxoy9t6cqE4Yw1Ta8Q1A==} - - '@docusaurus/types@3.1.1': - resolution: {integrity: sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==} - peerDependencies: - react: ^18.0.0 - react-dom: ^18.0.0 - - '@docusaurus/utils-common@3.1.1': - resolution: {integrity: sha512-eGne3olsIoNfPug5ixjepZAIxeYFzHHnor55Wb2P57jNbtVaFvij/T+MS8U0dtZRFi50QU+UPmRrXdVUM8uyMg==} - engines: {node: '>=18.0'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - - '@docusaurus/utils-validation@3.1.1': - resolution: {integrity: sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA==} - engines: {node: '>=18.0'} - - '@docusaurus/utils@3.1.1': - resolution: {integrity: sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg==} - engines: {node: '>=18.0'} - peerDependencies: - '@docusaurus/types': '*' - peerDependenciesMeta: - '@docusaurus/types': - optional: true - - '@hapi/hoek@9.3.0': - resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - - '@hapi/topo@5.1.0': - resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - - '@jest/schemas@29.6.3': - resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jest/types@29.6.3': - resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - '@jridgewell/gen-mapping@0.3.13': - resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} - - '@jridgewell/remapping@2.3.5': - resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==} - - '@jridgewell/resolve-uri@3.1.2': - resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} - engines: {node: '>=6.0.0'} - - '@jridgewell/source-map@0.3.11': - resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} - - '@jridgewell/sourcemap-codec@1.5.5': - resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - - '@jridgewell/trace-mapping@0.3.31': - resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} - - '@leichtgewicht/ip-codec@2.0.5': - resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - - '@mdx-js/mdx@3.1.1': - resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - - '@mdx-js/react@3.0.1': - resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} - peerDependencies: - '@types/react': '>=16' - react: '>=16' - - '@morph-network/chain@0.0.2': - resolution: {integrity: sha512-CNx+AWg5YiL88Ix9iCbfB0xplPfkUuaPRNMhrZLFZ+A5yfc1hZ7QEH4ZQT3ZEHzKacugeMCu5cf4g2Eyedr16w==} - - '@morph-network/viem@0.1.0': - resolution: {integrity: sha512-NfR/bvmL2KgE5802r+lJ8R9rEFidjnKlL6Tuc+2E8RVZ1rFPUNRe1t7pV+L+lEZCV2awAnLOWLkAmrTuC0gq8g==} - peerDependencies: - '@morph-network/chain': ^0.0.2 - - '@morui/theme@2.1.0': - resolution: {integrity: sha512-tgxVoHk8dsLMqT4a+LqRgPQ2j2+z9pYAy4BAua2chap6Dnm9o8nzM88BD6chrzbjLX+p8ewB+Hr8C3Jmd7JQkw==} - peerDependencies: - tailwindcss: '*' - - '@noble/ciphers@1.3.0': - resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} - engines: {node: ^14.21.3 || >=16} - - '@noble/curves@1.9.1': - resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} - engines: {node: ^14.21.3 || >=16} - - '@noble/hashes@1.8.0': - resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} - engines: {node: ^14.21.3 || >=16} - - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} - - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} - - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} - - '@parcel/watcher-android-arm64@2.5.6': - resolution: {integrity: sha512-YQxSS34tPF/6ZG7r/Ih9xy+kP/WwediEUsqmtf0cuCV5TPPKw/PQHRhueUo6JdeFJaqV3pyjm0GdYjZotbRt/A==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [android] - - '@parcel/watcher-darwin-arm64@2.5.6': - resolution: {integrity: sha512-Z2ZdrnwyXvvvdtRHLmM4knydIdU9adO3D4n/0cVipF3rRiwP+3/sfzpAwA/qKFL6i1ModaabkU7IbpeMBgiVEA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [darwin] - - '@parcel/watcher-darwin-x64@2.5.6': - resolution: {integrity: sha512-HgvOf3W9dhithcwOWX9uDZyn1lW9R+7tPZ4sug+NGrGIo4Rk1hAXLEbcH1TQSqxts0NYXXlOWqVpvS1SFS4fRg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [darwin] - - '@parcel/watcher-freebsd-x64@2.5.6': - resolution: {integrity: sha512-vJVi8yd/qzJxEKHkeemh7w3YAn6RJCtYlE4HPMoVnCpIXEzSrxErBW5SJBgKLbXU3WdIpkjBTeUNtyBVn8TRng==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [freebsd] - - '@parcel/watcher-linux-arm-glibc@2.5.6': - resolution: {integrity: sha512-9JiYfB6h6BgV50CCfasfLf/uvOcJskMSwcdH1PHH9rvS1IrNy8zad6IUVPVUfmXr+u+Km9IxcfMLzgdOudz9EQ==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm-musl@2.5.6': - resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} - engines: {node: '>= 10.0.0'} - cpu: [arm] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-arm64-glibc@2.5.6': - resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-arm64-musl@2.5.6': - resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [linux] - libc: [musl] - - '@parcel/watcher-linux-x64-glibc@2.5.6': - resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [glibc] - - '@parcel/watcher-linux-x64-musl@2.5.6': - resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [linux] - libc: [musl] - - '@parcel/watcher-win32-arm64@2.5.6': - resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} - engines: {node: '>= 10.0.0'} - cpu: [arm64] - os: [win32] - - '@parcel/watcher-win32-ia32@2.5.6': - resolution: {integrity: sha512-k35yLp1ZMwwee3Ez/pxBi5cf4AoBKYXj00CZ80jUz5h8prpiaQsiRPKQMxoLstNuqe2vR4RNPEAEcjEFzhEz/g==} - engines: {node: '>= 10.0.0'} - cpu: [ia32] - os: [win32] - - '@parcel/watcher-win32-x64@2.5.6': - resolution: {integrity: sha512-hbQlYcCq5dlAX9Qx+kFb0FHue6vbjlf0FrNzSKdYK2APUf7tGfGxQCk2ihEREmbR6ZMc0MVAD5RIX/41gpUzTw==} - engines: {node: '>= 10.0.0'} - cpu: [x64] - os: [win32] - - '@parcel/watcher@2.5.6': - resolution: {integrity: sha512-tmmZ3lQxAe/k/+rNnXQRawJ4NjxO2hqiOLTHvWchtGZULp4RyFeh6aU4XdOYBFe2KE1oShQTv4AblOs2iOrNnQ==} - engines: {node: '>= 10.0.0'} - - '@pnpm/config.env-replace@1.1.0': - resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} - engines: {node: '>=12.22.0'} - - '@pnpm/network.ca-file@1.0.2': - resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} - engines: {node: '>=12.22.0'} - - '@pnpm/npm-conf@3.0.2': - resolution: {integrity: sha512-h104Kh26rR8tm+a3Qkc5S4VLYint3FE48as7+/5oCEcKR2idC/pF1G6AhIXKI+eHPJa/3J9i5z0Al47IeGHPkA==} - engines: {node: '>=12'} - - '@polka/url@1.0.0-next.29': - resolution: {integrity: sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==} - - '@scure/base@1.2.6': - resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} - - '@scure/bip32@1.7.0': - resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} - - '@scure/bip39@1.6.0': - resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} - - '@sideway/address@4.1.5': - resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} - - '@sideway/formula@3.0.1': - resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - - '@sideway/pinpoint@2.0.0': - resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - - '@sinclair/typebox@0.27.10': - resolution: {integrity: sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==} - - '@sindresorhus/is@4.6.0': - resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} - engines: {node: '>=10'} - - '@sindresorhus/is@5.6.0': - resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} - engines: {node: '>=14.16'} - - '@slorber/remark-comment@1.0.0': - resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} - - '@slorber/static-site-generator-webpack-plugin@4.0.7': - resolution: {integrity: sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==} - engines: {node: '>=14'} - - '@svgr/babel-plugin-add-jsx-attribute@6.5.1': - resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0': - resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0': - resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} - engines: {node: '>=14'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1': - resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-dynamic-title@6.5.1': - resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-svg-em-dimensions@6.5.1': - resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-react-native-svg@6.5.1': - resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-plugin-transform-svg-component@6.5.1': - resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} - engines: {node: '>=12'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/babel-preset@6.5.1': - resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} - engines: {node: '>=10'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@svgr/core@6.5.1': - resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} - engines: {node: '>=10'} - - '@svgr/hast-util-to-babel-ast@6.5.1': - resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} - engines: {node: '>=10'} - - '@svgr/plugin-jsx@6.5.1': - resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': ^6.0.0 - - '@svgr/plugin-svgo@6.5.1': - resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} - engines: {node: '>=10'} - peerDependencies: - '@svgr/core': '*' - - '@svgr/webpack@6.5.1': - resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} - engines: {node: '>=10'} - - '@szmarczak/http-timer@5.0.1': - resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} - engines: {node: '>=14.16'} - - '@types/body-parser@1.19.6': - resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} - - '@types/bonjour@3.5.13': - resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} - - '@types/color-convert@1.9.0': - resolution: {integrity: sha512-OKGEfULrvSL2VRbkl/gnjjgbbF7ycIlpSsX7Nkab4MOWi5XxmgBYvuiQ7lcCFY5cPDz7MUNaKgxte2VRmtr4Fg==} - - '@types/color-name@2.0.0': - resolution: {integrity: sha512-63mTjolMJv75upGaUbT6J3lRDWl6pETPQsaWni9w3dMArhNBpgtHkX8ISb9zLV3YYLPA/SMk8ZGALa3k9WY/aQ==} - - '@types/color@3.0.7': - resolution: {integrity: sha512-e/ecxz2EGJhUEaoeFa9Xx6ayIkBFQ5bwKgOWzmrEtP+ApYB5ou+eOB71DasFsn3qCKzIPrbi/NKdM8lI0tnGUQ==} - - '@types/connect-history-api-fallback@1.5.4': - resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} - - '@types/connect@3.4.38': - resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} - - '@types/debug@4.1.13': - resolution: {integrity: sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==} - - '@types/eslint-scope@3.7.7': - resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - - '@types/eslint@9.6.1': - resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} - - '@types/estree-jsx@1.0.5': - resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - - '@types/estree@1.0.8': - resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - - '@types/express-serve-static-core@4.19.8': - resolution: {integrity: sha512-02S5fmqeoKzVZCHPZid4b8JH2eM5HzQLZWN2FohQEy/0eXTq8VXZfSN6Pcr3F6N9R/vNrj7cpgbhjie6m/1tCA==} - - '@types/express-serve-static-core@5.1.1': - resolution: {integrity: sha512-v4zIMr/cX7/d2BpAEX3KNKL/JrT1s43s96lLvvdTmza1oEvDudCqK9aF/djc/SWgy8Yh0h30TZx5VpzqFCxk5A==} - - '@types/express@4.17.25': - resolution: {integrity: sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==} - - '@types/flat@5.0.5': - resolution: {integrity: sha512-nPLljZQKSnac53KDUDzuzdRfGI0TDb5qPrb+SrQyN3MtdQrOnGsKniHN1iYZsJEBIVQve94Y6gNz22sgISZq+Q==} - - '@types/gtag.js@0.0.12': - resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - - '@types/history@4.7.11': - resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} - - '@types/html-minifier-terser@6.1.0': - resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} - - '@types/http-cache-semantics@4.2.0': - resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} - - '@types/http-errors@2.0.5': - resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} - - '@types/http-proxy@1.17.17': - resolution: {integrity: sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==} - - '@types/istanbul-lib-coverage@2.0.6': - resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} - - '@types/istanbul-lib-report@3.0.3': - resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} - - '@types/istanbul-reports@3.0.4': - resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} - - '@types/json-schema@7.0.15': - resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - - '@types/katex@0.16.8': - resolution: {integrity: sha512-trgaNyfU+Xh2Tc+ABIb44a5AYUpicB3uwirOioeOkNPPbmgRNtcWyDeeFRzjPZENO9Vq8gvVqfhaaXWLlevVwg==} - - '@types/lodash.foreach@4.5.9': - resolution: {integrity: sha512-vmq0p/FK66PsALXRmK/qsnlLlCpnudvozWYrxJImHujHhXMADdeoPEY10zwmu26437w85wCvdxUqpFi+ALtkiQ==} - - '@types/lodash.get@4.4.9': - resolution: {integrity: sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA==} - - '@types/lodash.kebabcase@4.1.9': - resolution: {integrity: sha512-kPrrmcVOhSsjAVRovN0lRfrbuidfg0wYsrQa5IYuoQO1fpHHGSme66oyiYA/5eQPVl8Z95OA3HG0+d2SvYC85w==} - - '@types/lodash.mapkeys@4.6.9': - resolution: {integrity: sha512-6/ERBCabeDI656LsV+oopLjdnJ/x1PCAE6kkkssH8e4i0K7Pw307noxHCbUc6cAVfTo9vx0Z+k3QZwy1IrUZcA==} - - '@types/lodash.omit@4.5.9': - resolution: {integrity: sha512-zuAVFLUPJMOzsw6yawshsYGgq2hWUHtsZgeXHZmSFhaQQFC6EQ021uDKHkSjOpNhSvtNSU9165/o3o/Q51GpTw==} - - '@types/lodash@4.17.24': - resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} - - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdx@2.0.13': - resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - - '@types/mime@1.3.5': - resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} - - '@types/ms@2.1.0': - resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - - '@types/node-forge@1.3.14': - resolution: {integrity: sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==} - - '@types/node@17.0.45': - resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - - '@types/node@25.5.0': - resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} - - '@types/parse-json@4.0.2': - resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - - '@types/prismjs@1.26.6': - resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} - - '@types/prop-types@15.7.15': - resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} - - '@types/qs@6.15.0': - resolution: {integrity: sha512-JawvT8iBVWpzTrz3EGw9BTQFg3BQNmwERdKE22vlTxawwtbyUSlMppvZYKLZzB5zgACXdXxbD3m1bXaMqP/9ow==} - - '@types/range-parser@1.2.7': - resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} - - '@types/react-router-config@5.0.11': - resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==} - - '@types/react-router-dom@5.3.3': - resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} - - '@types/react-router@5.1.20': - resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - - '@types/react@18.3.28': - resolution: {integrity: sha512-z9VXpC7MWrhfWipitjNdgCauoMLRdIILQsAEV+ZesIzBq/oUlxk0m3ApZuMFCXdnS4U7KrI+l3WRUEGQ8K1QKw==} - - '@types/retry@0.12.0': - resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} - - '@types/sax@1.2.7': - resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} - - '@types/send@0.17.6': - resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} - - '@types/send@1.2.1': - resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==} - - '@types/serve-index@1.9.4': - resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} - - '@types/serve-static@1.15.10': - resolution: {integrity: sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==} - - '@types/sockjs@0.3.36': - resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} - - '@types/unist@2.0.11': - resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/ws@8.18.1': - resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} - - '@types/yargs-parser@21.0.3': - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - - '@types/yargs@17.0.35': - resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==} - - '@ungap/structured-clone@1.3.0': - resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} - - '@webassemblyjs/ast@1.14.1': - resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} - - '@webassemblyjs/floating-point-hex-parser@1.13.2': - resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - - '@webassemblyjs/helper-api-error@1.13.2': - resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - - '@webassemblyjs/helper-buffer@1.14.1': - resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - - '@webassemblyjs/helper-numbers@1.13.2': - resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} - - '@webassemblyjs/helper-wasm-bytecode@1.13.2': - resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - - '@webassemblyjs/helper-wasm-section@1.14.1': - resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} - - '@webassemblyjs/ieee754@1.13.2': - resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} - - '@webassemblyjs/leb128@1.13.2': - resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} - - '@webassemblyjs/utf8@1.13.2': - resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - - '@webassemblyjs/wasm-edit@1.14.1': - resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} - - '@webassemblyjs/wasm-gen@1.14.1': - resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} - - '@webassemblyjs/wasm-opt@1.14.1': - resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} - - '@webassemblyjs/wasm-parser@1.14.1': - resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} - - '@webassemblyjs/wast-printer@1.14.1': - resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} - - '@xtuc/ieee754@1.2.0': - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - - '@xtuc/long@4.2.2': - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - - abitype@1.2.3: - resolution: {integrity: sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==} - peerDependencies: - typescript: '>=5.0.4' - zod: ^3.22.0 || ^4.0.0 - peerDependenciesMeta: - typescript: - optional: true - zod: - optional: true - - accepts@1.3.8: - resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} - engines: {node: '>= 0.6'} - - acorn-import-phases@1.0.4: - resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} - engines: {node: '>=10.13.0'} - peerDependencies: - acorn: ^8.14.0 - - acorn-jsx@5.3.2: - resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - acorn-walk@8.3.5: - resolution: {integrity: sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==} - engines: {node: '>=0.4.0'} - - acorn@8.16.0: - resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} - engines: {node: '>=0.4.0'} - hasBin: true - - address@1.2.2: - resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} - engines: {node: '>= 10.0.0'} - - aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - - ajv-formats@2.1.1: - resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} - peerDependencies: - ajv: ^8.0.0 - peerDependenciesMeta: - ajv: - optional: true - - ajv-keywords@3.5.2: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} - peerDependencies: - ajv: ^6.9.1 - - ajv-keywords@5.1.0: - resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} - peerDependencies: - ajv: ^8.8.2 - - ajv@6.14.0: - resolution: {integrity: sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==} - - ajv@8.18.0: - resolution: {integrity: sha512-PlXPeEWMXMZ7sPYOHqmDyCJzcfNrUr3fGNKtezX14ykXOEIvyK81d+qydx89KY5O71FKMPaQ2vBfBFI5NHR63A==} - - algoliasearch-helper@3.28.1: - resolution: {integrity: sha512-6iXpbkkrAI5HFpCWXlNmIDSBuoN/U1XnEvb2yJAoWfqrZ+DrybI7MQ5P5mthFaprmocq+zbi6HxnR28xnZAYBw==} - peerDependencies: - algoliasearch: '>= 3.1 < 6' - - algoliasearch@4.27.0: - resolution: {integrity: sha512-C88C5grLa5VOCp9eYZJt+q99ik7yNdm92l7Q9+4XK0Md8kL05Lg8l2v9ZVX0uMW3mH9pAFxMMXlLOvqNumA4lw==} - - algoliasearch@5.50.0: - resolution: {integrity: sha512-yE5I83Q2s8euVou8Y3feXK08wyZInJWLYXgWO6Xti9jBUEZAGUahyeQ7wSZWkifLWVnQVKEz5RAmBlXG5nqxog==} - engines: {node: '>= 14.0.0'} - - ansi-align@3.0.1: - resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - - ansi-html-community@0.0.8: - resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} - engines: {'0': node >= 0.8.0} - hasBin: true - - ansi-regex@5.0.1: - resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} - engines: {node: '>=8'} - - ansi-regex@6.2.2: - resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} - engines: {node: '>=12'} - - ansi-styles@4.3.0: - resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} - engines: {node: '>=8'} - - ansi-styles@6.2.3: - resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} - engines: {node: '>=12'} - - any-promise@1.3.0: - resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} - - anymatch@3.1.3: - resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} - engines: {node: '>= 8'} - - arg@5.0.2: - resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - - argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - - argparse@2.0.1: - resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - - array-flatten@1.1.1: - resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} - - array-union@2.1.0: - resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} - engines: {node: '>=8'} - - astring@1.9.0: - resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} - hasBin: true - - at-least-node@1.0.0: - resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} - engines: {node: '>= 4.0.0'} - - autoprefixer@10.4.27: - resolution: {integrity: sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==} - engines: {node: ^10 || ^12 || >=14} - hasBin: true - peerDependencies: - postcss: ^8.1.0 - - babel-loader@9.2.1: - resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@babel/core': ^7.12.0 - webpack: '>=5' - - babel-plugin-dynamic-import-node@2.3.3: - resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} - - babel-plugin-polyfill-corejs2@0.4.17: - resolution: {integrity: sha512-aTyf30K/rqAsNwN76zYrdtx8obu0E4KoUME29B1xj+B3WxgvWkp943vYQ+z8Mv3lw9xHXMHpvSPOBxzAkIa94w==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.13.0: - resolution: {integrity: sha512-U+GNwMdSFgzVmfhNm8GJUX88AadB3uo9KpJqS3FaqNIPKgySuvMb+bHPsOmmuWyIcuqZj/pzt1RUIUZns4y2+A==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-corejs3@0.14.2: - resolution: {integrity: sha512-coWpDLJ410R781Npmn/SIBZEsAetR4xVi0SxLMXPaMO4lSf1MwnkGYMtkFxew0Dn8B3/CpbpYxN0JCgg8mn67g==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - babel-plugin-polyfill-regenerator@0.6.8: - resolution: {integrity: sha512-M762rNHfSF1EV3SLtnCJXFoQbbIIz0OyRwnCmV0KPC7qosSfCO0QLTSuJX3ayAebubhE6oYBAYPrBA5ljowaZg==} - peerDependencies: - '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - - bail@2.0.2: - resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - - balanced-match@1.0.2: - resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - - baseline-browser-mapping@2.10.12: - resolution: {integrity: sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==} - engines: {node: '>=6.0.0'} - hasBin: true - - batch@0.6.1: - resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} - - big.js@5.2.2: - resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} - - binary-extensions@2.3.0: - resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} - engines: {node: '>=8'} - - body-parser@1.20.4: - resolution: {integrity: sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - bonjour-service@1.3.0: - resolution: {integrity: sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==} - - boolbase@1.0.0: - resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} - - boxen@6.2.1: - resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - boxen@7.1.1: - resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} - engines: {node: '>=14.16'} - - brace-expansion@1.1.13: - resolution: {integrity: sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==} - - braces@3.0.3: - resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} - engines: {node: '>=8'} - - browserslist@4.28.1: - resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==} - engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} - hasBin: true - - buffer-from@1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - - bytes@3.0.0: - resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} - engines: {node: '>= 0.8'} - - bytes@3.1.2: - resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} - engines: {node: '>= 0.8'} - - cacheable-lookup@7.0.0: - resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} - engines: {node: '>=14.16'} - - cacheable-request@10.2.14: - resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} - engines: {node: '>=14.16'} - - call-bind-apply-helpers@1.0.2: - resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} - engines: {node: '>= 0.4'} - - call-bind@1.0.8: - resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} - engines: {node: '>= 0.4'} - - call-bound@1.0.4: - resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} - engines: {node: '>= 0.4'} - - callsites@3.1.0: - resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} - engines: {node: '>=6'} - - camel-case@4.1.2: - resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} - - camelcase-css@2.0.1: - resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} - engines: {node: '>= 6'} - - camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} - - camelcase@7.0.1: - resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} - engines: {node: '>=14.16'} - - caniuse-api@3.0.0: - resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - - caniuse-lite@1.0.30001782: - resolution: {integrity: sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==} - - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - - chalk@4.1.2: - resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} - engines: {node: '>=10'} - - chalk@5.6.2: - resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - - char-regex@1.0.2: - resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} - engines: {node: '>=10'} - - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - - character-entities@2.0.2: - resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - - character-reference-invalid@2.0.1: - resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - - cheerio-select@2.1.0: - resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} - - cheerio@1.2.0: - resolution: {integrity: sha512-WDrybc/gKFpTYQutKIK6UvfcuxijIZfMfXaYm8NMsPQxSYvf+13fXUJ4rztGGbJcBQ/GF55gvrZ0Bc0bj/mqvg==} - engines: {node: '>=20.18.1'} - - chokidar@3.6.0: - resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} - engines: {node: '>= 8.10.0'} - - chokidar@4.0.3: - resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} - engines: {node: '>= 14.16.0'} - - chrome-trace-event@1.0.4: - resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} - engines: {node: '>=6.0'} - - ci-info@3.9.0: - resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} - engines: {node: '>=8'} - - classnames@2.5.1: - resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} - - clean-css@5.3.3: - resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} - engines: {node: '>= 10.0'} - - clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - - cli-boxes@3.0.0: - resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} - engines: {node: '>=10'} - - cli-table3@0.6.5: - resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} - engines: {node: 10.* || >= 12.*} - - clone-deep@4.0.1: - resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} - engines: {node: '>=6'} - - clsx@2.1.1: - resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} - engines: {node: '>=6'} - - collapse-white-space@2.1.0: - resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - - color-convert@2.0.1: - resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} - engines: {node: '>=7.0.0'} - - color-name@1.1.4: - resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} - - color-string@1.9.1: - resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} - - color2k@2.0.3: - resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} - - color@4.2.3: - resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} - engines: {node: '>=12.5.0'} - - colord@2.9.3: - resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - combine-promises@1.2.0: - resolution: {integrity: sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==} - engines: {node: '>=10'} - - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - - commander@10.0.1: - resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} - engines: {node: '>=14'} - - commander@2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - - commander@4.1.1: - resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} - engines: {node: '>= 6'} - - commander@5.1.0: - resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} - engines: {node: '>= 6'} - - commander@7.2.0: - resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} - engines: {node: '>= 10'} - - commander@8.3.0: - resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} - engines: {node: '>= 12'} - - common-path-prefix@3.0.0: - resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} - - compressible@2.0.18: - resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} - engines: {node: '>= 0.6'} - - compression@1.8.1: - resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} - engines: {node: '>= 0.8.0'} - - concat-map@0.0.1: - resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} - - concat-stream@1.6.2: - resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} - engines: {'0': node >= 0.8} - - config-chain@1.1.13: - resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} - - configstore@6.0.0: - resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} - engines: {node: '>=12'} - - connect-history-api-fallback@2.0.0: - resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} - engines: {node: '>=0.8'} - - consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} - - content-disposition@0.5.2: - resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} - engines: {node: '>= 0.6'} - - content-disposition@0.5.4: - resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} - engines: {node: '>= 0.6'} - - content-type@1.0.5: - resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} - engines: {node: '>= 0.6'} - - convert-source-map@2.0.0: - resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - - cookie-signature@1.0.7: - resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} - - cookie@0.7.2: - resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} - engines: {node: '>= 0.6'} - - copy-text-to-clipboard@3.2.2: - resolution: {integrity: sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==} - engines: {node: '>=12'} - - copy-webpack-plugin@11.0.0: - resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} - engines: {node: '>= 14.15.0'} - peerDependencies: - webpack: ^5.1.0 - - core-js-compat@3.49.0: - resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} - - core-js-pure@3.49.0: - resolution: {integrity: sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==} - - core-js@3.49.0: - resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} - - core-util-is@1.0.3: - resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} - - cosmiconfig@6.0.0: - resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} - engines: {node: '>=8'} - - cosmiconfig@7.1.0: - resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} - engines: {node: '>=10'} - - cosmiconfig@8.3.6: - resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=4.9.5' - peerDependenciesMeta: - typescript: - optional: true - - cross-spawn@5.1.0: - resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} - - cross-spawn@7.0.6: - resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} - engines: {node: '>= 8'} - - crypto-random-string@4.0.0: - resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} - engines: {node: '>=12'} - - css-declaration-sorter@6.4.1: - resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} - engines: {node: ^10 || ^12 || >=14} - peerDependencies: - postcss: ^8.0.9 - - css-loader@6.11.0: - resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} - engines: {node: '>= 12.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - css-minimizer-webpack-plugin@4.2.2: - resolution: {integrity: sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==} - engines: {node: '>= 14.15.0'} - peerDependencies: - '@parcel/css': '*' - '@swc/css': '*' - clean-css: '*' - csso: '*' - esbuild: '*' - lightningcss: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@parcel/css': - optional: true - '@swc/css': - optional: true - clean-css: - optional: true - csso: - optional: true - esbuild: - optional: true - lightningcss: - optional: true - - css-select@4.3.0: - resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} - - css-select@5.2.2: - resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} - - css-tree@1.1.3: - resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} - engines: {node: '>=8.0.0'} - - css-what@6.2.2: - resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} - engines: {node: '>= 6'} - - cssesc@3.0.0: - resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} - engines: {node: '>=4'} - hasBin: true - - cssnano-preset-advanced@5.3.10: - resolution: {integrity: sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - cssnano-preset-default@5.2.14: - resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - cssnano-utils@3.1.0: - resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - cssnano@5.1.15: - resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - csso@4.2.0: - resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} - engines: {node: '>=8.0.0'} - - csstype@3.2.3: - resolution: {integrity: sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==} - - debounce@1.2.1: - resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} - - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - debug@4.4.3: - resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} - engines: {node: '>=6.0'} - peerDependencies: - supports-color: '*' - peerDependenciesMeta: - supports-color: - optional: true - - decode-named-character-reference@1.3.0: - resolution: {integrity: sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==} - - decompress-response@6.0.0: - resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} - engines: {node: '>=10'} - - deep-extend@0.6.0: - resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} - engines: {node: '>=4.0.0'} - - deepmerge@4.3.1: - resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} - engines: {node: '>=0.10.0'} - - default-gateway@6.0.3: - resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} - engines: {node: '>= 10'} - - defer-to-connect@2.0.1: - resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} - engines: {node: '>=10'} - - define-data-property@1.1.4: - resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} - engines: {node: '>= 0.4'} - - define-lazy-prop@2.0.0: - resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} - engines: {node: '>=8'} - - define-properties@1.2.1: - resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} - engines: {node: '>= 0.4'} - - del@6.1.1: - resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} - engines: {node: '>=10'} - - depd@1.1.2: - resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} - engines: {node: '>= 0.6'} - - depd@2.0.0: - resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} - engines: {node: '>= 0.8'} - - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - - destroy@1.2.0: - resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} - engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} - - detect-libc@2.1.2: - resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} - engines: {node: '>=8'} - - detect-node@2.1.0: - resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} - - detect-port-alt@1.1.6: - resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} - engines: {node: '>= 4.2.1'} - hasBin: true - - detect-port@1.6.1: - resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} - engines: {node: '>= 4.0.0'} - hasBin: true - - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - - didyoumean@1.2.2: - resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} - - dir-glob@3.0.1: - resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} - engines: {node: '>=8'} - - dlv@1.1.3: - resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} - - dns-packet@5.6.1: - resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} - engines: {node: '>=6'} - - docusaurus-markdown-source-plugin@2.2.4: - resolution: {integrity: sha512-3GiURJ441ASUKbajJBi0LQfXpWkzUy0eTJlHoruk8dM16S0B1Qt4rgFCrgMd68Wr1RtkVWfog0gI2QC3xk6z1w==} - engines: {node: '>=18.0.0'} - peerDependencies: - '@docusaurus/core': ^3.0.0 - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 - - docusaurus-plugin-sass@0.2.6: - resolution: {integrity: sha512-2hKQQDkrufMong9upKoG/kSHJhuwd+FA3iAe/qzS/BmWpbIpe7XKmq5wlz4J5CJaOPu4x+iDJbgAxZqcoQf0kg==} - peerDependencies: - '@docusaurus/core': ^2.0.0-beta || ^3.0.0-alpha - sass: ^1.30.0 - - dom-converter@0.2.0: - resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} - - dom-serializer@1.4.1: - resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} - - dom-serializer@2.0.0: - resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} - - domelementtype@2.3.0: - resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} - - domhandler@4.3.1: - resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} - engines: {node: '>= 4'} - - domhandler@5.0.3: - resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} - engines: {node: '>= 4'} - - domutils@2.8.0: - resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} - - domutils@3.2.2: - resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} - - dot-case@3.0.4: - resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} - - dot-prop@6.0.1: - resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} - engines: {node: '>=10'} - - dotenv@16.6.1: - resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} - engines: {node: '>=12'} - - dunder-proto@1.0.1: - resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} - engines: {node: '>= 0.4'} - - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - - ee-first@1.1.1: - resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - - electron-to-chromium@1.5.328: - resolution: {integrity: sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==} - - emoji-regex@8.0.0: - resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - - emoji-regex@9.2.2: - resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - - emojilib@2.4.0: - resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} - - emojis-list@3.0.0: - resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} - engines: {node: '>= 4'} - - emoticon@4.1.0: - resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==} - - encodeurl@2.0.0: - resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} - engines: {node: '>= 0.8'} - - encoding-sniffer@0.2.1: - resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} - - enhanced-resolve@5.20.1: - resolution: {integrity: sha512-Qohcme7V1inbAfvjItgw0EaxVX5q2rdVEZHRBrEQdRZTssLDGsL8Lwrznl8oQ/6kuTJONLaDcGjkNP247XEhcA==} - engines: {node: '>=10.13.0'} - - entities@2.2.0: - resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} - - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - - entities@6.0.1: - resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} - engines: {node: '>=0.12'} - - entities@7.0.1: - resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} - engines: {node: '>=0.12'} - - error-ex@1.3.4: - resolution: {integrity: sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ==} - - es-define-property@1.0.1: - resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} - engines: {node: '>= 0.4'} - - es-errors@1.3.0: - resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} - engines: {node: '>= 0.4'} - - es-module-lexer@2.0.0: - resolution: {integrity: sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==} - - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - - esast-util-from-estree@2.0.0: - resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} - - esast-util-from-js@2.0.1: - resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} - - escalade@3.2.0: - resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} - engines: {node: '>=6'} - - escape-goat@4.0.0: - resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} - engines: {node: '>=12'} - - escape-html@1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - - escape-string-regexp@4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - escape-string-regexp@5.0.0: - resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} - engines: {node: '>=12'} - - eslint-scope@5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} - engines: {node: '>=8.0.0'} - - esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - - esrecurse@4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} - engines: {node: '>=4.0'} - - estraverse@4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} - engines: {node: '>=4.0'} - - estraverse@5.3.0: - resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} - engines: {node: '>=4.0'} - - estree-util-attach-comments@3.0.0: - resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} - - estree-util-build-jsx@3.0.1: - resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} - - estree-util-is-identifier-name@3.0.0: - resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - - estree-util-scope@1.0.0: - resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} - - estree-util-to-js@2.0.0: - resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - - estree-util-value-to-estree@3.5.0: - resolution: {integrity: sha512-aMV56R27Gv3QmfmF1MY12GWkGzzeAezAX+UplqHVASfjc9wNzI/X6hC0S9oxq61WT4aQesLGslWP9tKk6ghRZQ==} - - estree-util-visit@2.0.0: - resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} - - estree-walker@3.0.3: - resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} - - esutils@2.0.3: - resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} - engines: {node: '>=0.10.0'} - - eta@2.2.0: - resolution: {integrity: sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==} - engines: {node: '>=6.0.0'} - - etag@1.8.1: - resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} - engines: {node: '>= 0.6'} - - eval@0.1.8: - resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} - engines: {node: '>= 0.8'} - - eventemitter3@4.0.7: - resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} - - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - - events@3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} - engines: {node: '>=0.8.x'} - - execa@5.1.1: - resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} - engines: {node: '>=10'} - - express@4.22.1: - resolution: {integrity: sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==} - engines: {node: '>= 0.10.0'} - - extend-shallow@2.0.1: - resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} - engines: {node: '>=0.10.0'} - - extend@3.0.2: - resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - - fast-deep-equal@3.1.3: - resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fast-json-stable-stringify@2.1.0: - resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} - - fast-uri@3.1.0: - resolution: {integrity: sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==} - - fastq@1.20.1: - resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==} - - fault@2.0.1: - resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} - - faye-websocket@0.11.4: - resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} - engines: {node: '>=0.8.0'} - - fdir@6.5.0: - resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} - engines: {node: '>=12.0.0'} - peerDependencies: - picomatch: ^3 || ^4 - peerDependenciesMeta: - picomatch: - optional: true - - feed@4.2.2: - resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} - engines: {node: '>=0.4.0'} - - file-loader@6.2.0: - resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} - engines: {node: '>= 10.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - - filesize@8.0.7: - resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} - engines: {node: '>= 0.4.0'} - - fill-range@7.1.1: - resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} - engines: {node: '>=8'} - - finalhandler@1.3.2: - resolution: {integrity: sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==} - engines: {node: '>= 0.8'} - - find-cache-dir@4.0.0: - resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} - engines: {node: '>=14.16'} - - find-up@3.0.0: - resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} - engines: {node: '>=6'} - - find-up@5.0.0: - resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} - engines: {node: '>=10'} - - find-up@6.3.0: - resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - flat@5.0.2: - resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} - hasBin: true - - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} - engines: {node: '>=4.0'} - peerDependencies: - debug: '*' - peerDependenciesMeta: - debug: - optional: true - - fork-ts-checker-webpack-plugin@6.5.3: - resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} - engines: {node: '>=10', yarn: '>=1.0.0'} - peerDependencies: - eslint: '>= 6' - typescript: '>= 2.7' - vue-template-compiler: '*' - webpack: '>= 4' - peerDependenciesMeta: - eslint: - optional: true - vue-template-compiler: - optional: true - - form-data-encoder@2.1.4: - resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} - engines: {node: '>= 14.17'} - - format@0.2.2: - resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} - engines: {node: '>=0.4.x'} - - forwarded@0.2.0: - resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} - engines: {node: '>= 0.6'} - - fraction.js@5.3.4: - resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} - - fresh@0.5.2: - resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} - engines: {node: '>= 0.6'} - - fs-extra@11.3.4: - resolution: {integrity: sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==} - engines: {node: '>=14.14'} - - fs-extra@9.1.0: - resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} - engines: {node: '>=10'} - - fs-monkey@1.1.0: - resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} - - fs.realpath@1.0.0: - resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - - fsevents@2.3.3: - resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} - engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} - os: [darwin] - - function-bind@1.1.2: - resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} - - gensync@1.0.0-beta.2: - resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} - engines: {node: '>=6.9.0'} - - get-intrinsic@1.3.0: - resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} - engines: {node: '>= 0.4'} - - get-own-enumerable-property-symbols@3.0.2: - resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} - - get-proto@1.0.1: - resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} - engines: {node: '>= 0.4'} - - get-stream@6.0.1: - resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} - engines: {node: '>=10'} - - github-slugger@1.5.0: - resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} - - glob-parent@5.1.2: - resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} - engines: {node: '>= 6'} - - glob-parent@6.0.2: - resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} - engines: {node: '>=10.13.0'} - - glob-to-regexp@0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - - glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} - 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 - - global-dirs@3.0.1: - resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} - engines: {node: '>=10'} - - global-modules@2.0.0: - resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} - engines: {node: '>=6'} - - global-prefix@3.0.0: - resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} - engines: {node: '>=6'} - - globby@11.1.0: - resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} - engines: {node: '>=10'} - - globby@13.2.2: - resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - gopd@1.2.0: - resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} - engines: {node: '>= 0.4'} - - got@12.6.1: - resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} - engines: {node: '>=14.16'} - - graceful-fs@4.2.10: - resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} - - graceful-fs@4.2.11: - resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - - gray-matter@4.0.3: - resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} - engines: {node: '>=6.0'} - - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - - handle-thing@2.0.1: - resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} - - has-flag@4.0.0: - resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} - engines: {node: '>=8'} - - has-property-descriptors@1.0.2: - resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} - - has-symbols@1.1.0: - resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} - engines: {node: '>= 0.4'} - - has-yarn@3.0.0: - resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - hasown@2.0.2: - resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} - engines: {node: '>= 0.4'} - - hast-util-from-dom@5.0.1: - resolution: {integrity: sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==} - - hast-util-from-html-isomorphic@2.0.0: - resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} - - hast-util-from-html@2.0.3: - resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} - - hast-util-from-parse5@8.0.3: - resolution: {integrity: sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==} - - hast-util-is-element@3.0.0: - resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} - - hast-util-parse-selector@4.0.0: - resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - - hast-util-raw@9.1.0: - resolution: {integrity: sha512-Y8/SBAHkZGoNkpzqqfCldijcuUKh7/su31kEBp67cFY09Wy0mTRgtsLYsiIxMJxlu0f6AA5SUTbDR8K0rxnbUw==} - - hast-util-to-estree@3.1.3: - resolution: {integrity: sha512-48+B/rJWAp0jamNbAAf9M7Uf//UVqAoMmgXhBdxTDJLGKY+LRnZ99qcG+Qjl5HfMpYNzS5v4EAwVEF34LeAj7w==} - - hast-util-to-jsx-runtime@2.3.6: - resolution: {integrity: sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==} - - hast-util-to-parse5@8.0.1: - resolution: {integrity: sha512-MlWT6Pjt4CG9lFCjiz4BH7l9wmrMkfkJYCxFwKQic8+RTZgWPuWxwAfjJElsXkex7DJjfSJsQIt931ilUgmwdA==} - - hast-util-to-text@4.0.2: - resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hastscript@9.0.1: - resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} - - he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true - - history@4.10.1: - resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} - - hoist-non-react-statics@3.3.2: - resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} - - hpack.js@2.1.6: - resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} - - html-entities@2.6.0: - resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} - - html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - - html-minifier-terser@6.1.0: - resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} - engines: {node: '>=12'} - hasBin: true - - html-minifier-terser@7.2.0: - resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} - engines: {node: ^14.13.1 || >=16.0.0} - hasBin: true - - html-tags@3.3.1: - resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} - engines: {node: '>=8'} - - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - - html-webpack-plugin@5.6.6: - resolution: {integrity: sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==} - engines: {node: '>=10.13.0'} - peerDependencies: - '@rspack/core': 0.x || 1.x - webpack: ^5.20.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - webpack: - optional: true - - htmlparser2@10.1.0: - resolution: {integrity: sha512-VTZkM9GWRAtEpveh7MSF6SjjrpNVNNVJfFup7xTY3UpFtm67foy9HDVXneLtFVt4pMz5kZtgNcvCniNFb1hlEQ==} - - htmlparser2@6.1.0: - resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} - - http-cache-semantics@4.2.0: - resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} - - http-deceiver@1.2.7: - resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} - - http-errors@1.8.1: - resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} - engines: {node: '>= 0.6'} - - http-errors@2.0.1: - resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==} - engines: {node: '>= 0.8'} - - http-parser-js@0.5.10: - resolution: {integrity: sha512-Pysuw9XpUq5dVc/2SMHpuTY01RFl8fttgcyunjL7eEMhGM3cI4eOmiCycJDVCo/7O7ClfQD3SaI6ftDzqOXYMA==} - - http-proxy-middleware@2.0.9: - resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} - engines: {node: '>=12.0.0'} - peerDependencies: - '@types/express': ^4.17.13 - peerDependenciesMeta: - '@types/express': - optional: true - - http-proxy@1.18.1: - resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} - engines: {node: '>=8.0.0'} - - http2-wrapper@2.2.1: - resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} - engines: {node: '>=10.19.0'} - - human-signals@2.1.0: - resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} - engines: {node: '>=10.17.0'} - - iconv-lite@0.4.24: - resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} - engines: {node: '>=0.10.0'} - - iconv-lite@0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - - icss-utils@5.1.0: - resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - ignore@5.3.2: - resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} - engines: {node: '>= 4'} - - image-size@1.2.1: - resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} - engines: {node: '>=16.x'} - hasBin: true - - immer@9.0.21: - resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} - - immutable@5.1.5: - resolution: {integrity: sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==} - - import-fresh@3.3.1: - resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} - engines: {node: '>=6'} - - import-lazy@4.0.0: - resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} - engines: {node: '>=8'} - - imurmurhash@0.1.4: - resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} - engines: {node: '>=0.8.19'} - - indent-string@4.0.0: - resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} - engines: {node: '>=8'} - - infima@0.2.0-alpha.43: - resolution: {integrity: sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==} - engines: {node: '>=12'} - - inflight@1.0.6: - resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} - deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. - - inherits@2.0.4: - resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - - ini@1.3.8: - resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} - - ini@2.0.0: - resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} - engines: {node: '>=10'} - - inline-style-parser@0.2.7: - resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} - - interpret@1.4.0: - resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} - engines: {node: '>= 0.10'} - - invariant@2.2.4: - resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} - - ipaddr.js@1.9.1: - resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} - engines: {node: '>= 0.10'} - - ipaddr.js@2.3.0: - resolution: {integrity: sha512-Zv/pA+ciVFbCSBBjGfaKUya/CcGmUHzTydLMaTwrUUEM2DIEO3iZvueGxmacvmN50fGpGVKeTXpb2LcYQxeVdg==} - engines: {node: '>= 10'} - - is-alphabetical@2.0.1: - resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - - is-alphanumerical@2.0.1: - resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} - - is-arrayish@0.2.1: - resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} - - is-arrayish@0.3.4: - resolution: {integrity: sha512-m6UrgzFVUYawGBh1dUsWR5M2Clqic9RVXC/9f8ceNlv2IcO9j9J/z8UoCLPqtsPBFNzEpfR3xftohbfqDx8EQA==} - - is-binary-path@2.1.0: - resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} - engines: {node: '>=8'} - - is-ci@3.0.1: - resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} - hasBin: true - - is-core-module@2.16.1: - resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} - engines: {node: '>= 0.4'} - - is-decimal@2.0.1: - resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - - is-docker@2.2.1: - resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} - engines: {node: '>=8'} - hasBin: true - - is-extendable@0.1.1: - resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} - engines: {node: '>=0.10.0'} - - is-extglob@2.1.1: - resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} - engines: {node: '>=0.10.0'} - - is-fullwidth-code-point@3.0.0: - resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} - engines: {node: '>=8'} - - is-glob@4.0.3: - resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} - engines: {node: '>=0.10.0'} - - is-hexadecimal@2.0.1: - resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - - is-installed-globally@0.4.0: - resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} - engines: {node: '>=10'} - - is-npm@6.1.0: - resolution: {integrity: sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - is-number@7.0.0: - resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} - engines: {node: '>=0.12.0'} - - is-obj@1.0.1: - resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} - engines: {node: '>=0.10.0'} - - is-obj@2.0.0: - resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} - engines: {node: '>=8'} - - is-path-cwd@2.2.0: - resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} - engines: {node: '>=6'} - - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - - is-plain-obj@3.0.0: - resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} - engines: {node: '>=10'} - - is-plain-obj@4.1.0: - resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} - engines: {node: '>=12'} - - is-plain-object@2.0.4: - resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} - engines: {node: '>=0.10.0'} - - is-regexp@1.0.0: - resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} - engines: {node: '>=0.10.0'} - - is-root@2.1.0: - resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} - engines: {node: '>=6'} - - is-stream@2.0.1: - resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} - engines: {node: '>=8'} - - is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - - is-wsl@2.2.0: - resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} - engines: {node: '>=8'} - - is-yarn-global@0.4.1: - resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} - engines: {node: '>=12'} - - isarray@0.0.1: - resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} - - isarray@1.0.0: - resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - - isexe@2.0.0: - resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - - isobject@3.0.1: - resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} - engines: {node: '>=0.10.0'} - - isows@1.0.7: - resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} - peerDependencies: - ws: '*' - - jest-util@29.7.0: - resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jest-worker@27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} - engines: {node: '>= 10.13.0'} - - jest-worker@29.7.0: - resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - - jiti@1.21.7: - resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} - hasBin: true - - joi@17.13.3: - resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} - - js-tokens@4.0.0: - resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - - js-yaml@3.14.2: - resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==} - hasBin: true - - js-yaml@4.1.1: - resolution: {integrity: sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==} - hasBin: true - - jsesc@3.1.0: - resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} - engines: {node: '>=6'} - hasBin: true - - json-buffer@3.0.1: - resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} - - json-parse-even-better-errors@2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - - json-schema-traverse@0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} - - json-schema-traverse@1.0.0: - resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - - json5@2.2.3: - resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} - engines: {node: '>=6'} - hasBin: true - - jsonfile@6.2.0: - resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==} - - katex@0.16.44: - resolution: {integrity: sha512-EkxoDTk8ufHqHlf9QxGwcxeLkWRR3iOuYfRpfORgYfqc8s13bgb+YtRY59NK5ZpRaCwq1kqA6a5lpX8C/eLphQ==} - hasBin: true - - keyv@4.5.4: - resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} - - kind-of@6.0.3: - resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} - engines: {node: '>=0.10.0'} - - kleur@3.0.3: - resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} - engines: {node: '>=6'} - - latest-version@7.0.0: - resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} - engines: {node: '>=14.16'} - - launch-editor@2.13.2: - resolution: {integrity: sha512-4VVDnbOpLXy/s8rdRCSXb+zfMeFR0WlJWpET1iA9CQdlZDfwyLjUuGQzXU4VeOoey6AicSAluWan7Etga6Kcmg==} - - leven@3.1.0: - resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} - engines: {node: '>=6'} - - lilconfig@2.1.0: - resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} - engines: {node: '>=10'} - - lilconfig@3.1.3: - resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} - engines: {node: '>=14'} - - lines-and-columns@1.2.4: - resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} - - loader-runner@4.3.1: - resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} - engines: {node: '>=6.11.5'} - - loader-utils@2.0.4: - resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} - engines: {node: '>=8.9.0'} - - loader-utils@3.3.1: - resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} - engines: {node: '>= 12.13.0'} - - locate-path@3.0.0: - resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} - engines: {node: '>=6'} - - locate-path@6.0.0: - resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} - engines: {node: '>=10'} - - locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lodash.debounce@4.0.8: - resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} - - lodash.foreach@4.5.0: - resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} - - lodash.get@4.4.2: - resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} - deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. - - lodash.kebabcase@4.1.1: - resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} - - lodash.mapkeys@4.6.0: - resolution: {integrity: sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA==} - - lodash.memoize@4.1.2: - resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} - - lodash.omit@4.5.0: - resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} - deprecated: This package is deprecated. Use destructuring assignment syntax instead. - - lodash.uniq@4.5.0: - resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - - longest-streak@3.1.0: - resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - - loose-envify@1.4.0: - resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} - hasBin: true - - lottie-react@2.4.1: - resolution: {integrity: sha512-LQrH7jlkigIIv++wIyrOYFLHSKQpEY4zehPicL9bQsrt1rnoKRYCYgpCUe5maqylNtacy58/sQDZTkwMcTRxZw==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - lottie-web@5.13.0: - resolution: {integrity: sha512-+gfBXl6sxXMPe8tKQm7qzLnUy5DUPJPKIyRHwtpCpyUEYjHYRJC/5gjUvdkuO2c3JllrPtHXH5UJJK8LRYl5yQ==} - - lower-case@2.0.2: - resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} - - lowercase-keys@3.0.0: - resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - lru-cache@4.1.5: - resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} - - lru-cache@5.1.1: - resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - - markdown-extensions@2.0.0: - resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} - engines: {node: '>=16'} - - markdown-table@3.0.4: - resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - - math-intrinsics@1.1.0: - resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} - engines: {node: '>= 0.4'} - - mdast-util-directive@3.1.0: - resolution: {integrity: sha512-I3fNFt+DHmpWCYAT7quoM6lHf9wuqtI+oCOfvILnoicNIqjh5E3dEJWiXuYME2gNe8vl1iMQwyUHa7bgFmak6Q==} - - mdast-util-find-and-replace@3.0.2: - resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} - - mdast-util-from-markdown@2.0.3: - resolution: {integrity: sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==} - - mdast-util-frontmatter@2.0.1: - resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} - - mdast-util-gfm-autolink-literal@2.0.1: - resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} - - mdast-util-gfm-footnote@2.1.0: - resolution: {integrity: sha512-sqpDWlsHn7Ac9GNZQMeUzPQSMzR6Wv0WKRNvQRg0KqHh02fpTz69Qc1QSseNX29bhz1ROIyNyxExfawVKTm1GQ==} - - mdast-util-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} - - mdast-util-gfm-table@2.0.0: - resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} - - mdast-util-gfm-task-list-item@2.0.0: - resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} - - mdast-util-gfm@3.1.0: - resolution: {integrity: sha512-0ulfdQOM3ysHhCJ1p06l0b0VKlhU0wuQs3thxZQagjcjPrlFRqY215uZGHHJan9GEAXd9MbfPjFJz+qMkVR6zQ==} - - mdast-util-math@3.0.0: - resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} - - mdast-util-mdx-expression@2.0.1: - resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - - mdast-util-mdx-jsx@3.2.0: - resolution: {integrity: sha512-lj/z8v0r6ZtsN/cGNNtemmmfoLAFZnjMbNyLzBafjzikOM+glrjNHPlf6lQDOTccj9n5b0PPihEBbhneMyGs1Q==} - - mdast-util-mdx@3.0.0: - resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} - - mdast-util-mdxjs-esm@2.0.1: - resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} - - mdast-util-phrasing@4.1.0: - resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - - mdast-util-to-hast@13.2.1: - resolution: {integrity: sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==} - - mdast-util-to-markdown@2.1.2: - resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} - - mdast-util-to-string@4.0.0: - resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} - - mdn-data@2.0.14: - resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} - - media-typer@0.3.0: - resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} - engines: {node: '>= 0.6'} - - memfs@3.5.3: - resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} - engines: {node: '>= 4.0.0'} - - merge-descriptors@1.0.3: - resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} - - merge-stream@2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} - - methods@1.1.2: - resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} - engines: {node: '>= 0.6'} - - micromark-core-commonmark@2.0.3: - resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==} - - micromark-extension-directive@3.0.2: - resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} - - micromark-extension-frontmatter@2.0.0: - resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} - - micromark-extension-gfm-autolink-literal@2.1.0: - resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - - micromark-extension-gfm-footnote@2.1.0: - resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - - micromark-extension-gfm-strikethrough@2.1.0: - resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - - micromark-extension-gfm-table@2.1.1: - resolution: {integrity: sha512-t2OU/dXXioARrC6yWfJ4hqB7rct14e8f7m0cbI5hUmDyyIlwv5vEtooptH8INkbLzOatzKuVbQmAYcbWoyz6Dg==} - - micromark-extension-gfm-tagfilter@2.0.0: - resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - - micromark-extension-gfm-task-list-item@2.1.0: - resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} - - micromark-extension-gfm@3.0.0: - resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} - - micromark-extension-math@3.1.0: - resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} - - micromark-extension-mdx-expression@3.0.1: - resolution: {integrity: sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==} - - micromark-extension-mdx-jsx@3.0.2: - resolution: {integrity: sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==} - - micromark-extension-mdx-md@2.0.0: - resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} - - micromark-extension-mdxjs-esm@3.0.0: - resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} - - micromark-extension-mdxjs@3.0.0: - resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} - - micromark-factory-destination@2.0.1: - resolution: {integrity: sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==} - - micromark-factory-label@2.0.1: - resolution: {integrity: sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==} - - micromark-factory-mdx-expression@2.0.3: - resolution: {integrity: sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==} - - micromark-factory-space@1.1.0: - resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} - - micromark-factory-space@2.0.1: - resolution: {integrity: sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==} - - micromark-factory-title@2.0.1: - resolution: {integrity: sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==} - - micromark-factory-whitespace@2.0.1: - resolution: {integrity: sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==} - - micromark-util-character@1.2.0: - resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} - - micromark-util-character@2.1.1: - resolution: {integrity: sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==} - - micromark-util-chunked@2.0.1: - resolution: {integrity: sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==} - - micromark-util-classify-character@2.0.1: - resolution: {integrity: sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==} - - micromark-util-combine-extensions@2.0.1: - resolution: {integrity: sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==} - - micromark-util-decode-numeric-character-reference@2.0.2: - resolution: {integrity: sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==} - - micromark-util-decode-string@2.0.1: - resolution: {integrity: sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==} - - micromark-util-encode@2.0.1: - resolution: {integrity: sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==} - - micromark-util-events-to-acorn@2.0.3: - resolution: {integrity: sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==} - - micromark-util-html-tag-name@2.0.1: - resolution: {integrity: sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==} - - micromark-util-normalize-identifier@2.0.1: - resolution: {integrity: sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==} - - micromark-util-resolve-all@2.0.1: - resolution: {integrity: sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==} - - micromark-util-sanitize-uri@2.0.1: - resolution: {integrity: sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==} - - micromark-util-subtokenize@2.1.0: - resolution: {integrity: sha512-XQLu552iSctvnEcgXw6+Sx75GflAPNED1qx7eBJ+wydBb2KCbRZe+NwvIEEMM83uml1+2WSXpBAcp9IUCgCYWA==} - - micromark-util-symbol@1.1.0: - resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} - - micromark-util-symbol@2.0.1: - resolution: {integrity: sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==} - - micromark-util-types@1.1.0: - resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} - - micromark-util-types@2.0.2: - resolution: {integrity: sha512-Yw0ECSpJoViF1qTU4DC6NwtC4aWGt1EkzaQB8KPPyCRR8z9TWeV0HbEFGTO+ZY1wB22zmxnJqhPyTpOVCpeHTA==} - - micromark@4.0.2: - resolution: {integrity: sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA==} - - micromatch@4.0.8: - resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} - engines: {node: '>=8.6'} - - mime-db@1.33.0: - resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} - engines: {node: '>= 0.6'} - - mime-db@1.52.0: - resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} - engines: {node: '>= 0.6'} - - mime-db@1.54.0: - resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.18: - resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} - engines: {node: '>= 0.6'} - - mime-types@2.1.35: - resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} - engines: {node: '>= 0.6'} - - mime@1.6.0: - resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} - engines: {node: '>=4'} - hasBin: true - - mimic-fn@2.1.0: - resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} - engines: {node: '>=6'} - - mimic-response@3.1.0: - resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} - engines: {node: '>=10'} - - mimic-response@4.0.0: - resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - mini-css-extract-plugin@2.10.2: - resolution: {integrity: sha512-AOSS0IdEB95ayVkxn5oGzNQwqAi2J0Jb/kKm43t7H73s8+f5873g0yuj0PNvK4dO75mu5DHg4nlgp4k6Kga8eg==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^5.0.0 - - minimalistic-assert@1.0.1: - resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} - - minimatch@3.1.5: - resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==} - - minimist@1.2.8: - resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - - mrmime@2.0.1: - resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} - engines: {node: '>=10'} - - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - - ms@2.1.3: - resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - - multicast-dns@7.2.5: - resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} - hasBin: true - - mz@2.7.0: - resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - - negotiator@0.6.3: - resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} - engines: {node: '>= 0.6'} - - negotiator@0.6.4: - resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} - engines: {node: '>= 0.6'} - - neo-async@2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - - no-case@3.0.4: - resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} - - node-addon-api@7.1.1: - resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} - - node-emoji@2.2.0: - resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} - engines: {node: '>=18'} - - node-forge@1.4.0: - resolution: {integrity: sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==} - engines: {node: '>= 6.13.0'} - - node-releases@2.0.36: - resolution: {integrity: sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==} - - normalize-path@3.0.0: - resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} - engines: {node: '>=0.10.0'} - - normalize-url@6.1.0: - resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} - engines: {node: '>=10'} - - normalize-url@8.1.1: - resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} - engines: {node: '>=14.16'} - - npm-run-path@4.0.1: - resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} - engines: {node: '>=8'} - - nprogress@0.2.0: - resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} - - nth-check@2.1.1: - resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} - - object-assign@4.1.1: - resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} - engines: {node: '>=0.10.0'} - - object-hash@3.0.0: - resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} - engines: {node: '>= 6'} - - object-inspect@1.13.4: - resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} - engines: {node: '>= 0.4'} - - object-keys@1.1.1: - resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} - engines: {node: '>= 0.4'} - - object.assign@4.1.7: - resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} - engines: {node: '>= 0.4'} - - obuf@1.1.2: - resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} - - on-finished@2.4.1: - resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} - engines: {node: '>= 0.8'} - - on-headers@1.1.0: - resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} - engines: {node: '>= 0.8'} - - once@1.4.0: - resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} - - onetime@5.1.2: - resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} - engines: {node: '>=6'} - - open@8.4.2: - resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} - engines: {node: '>=12'} - - opener@1.5.2: - resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} - hasBin: true - - os-shim@0.1.3: - resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} - engines: {node: '>= 0.4.0'} - - ox@0.14.7: - resolution: {integrity: sha512-zSQ/cfBdolj7U4++NAvH7sI+VG0T3pEohITCgcQj8KlawvTDY4vGVhDT64Atsm0d6adWfIYHDpu88iUBMMp+AQ==} - peerDependencies: - typescript: '>=5.4.0' - peerDependenciesMeta: - typescript: - optional: true - - p-cancelable@3.0.0: - resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} - engines: {node: '>=12.20'} - - p-limit@2.3.0: - resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} - engines: {node: '>=6'} - - p-limit@3.1.0: - resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} - engines: {node: '>=10'} - - p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-locate@3.0.0: - resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} - engines: {node: '>=6'} - - p-locate@5.0.0: - resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} - engines: {node: '>=10'} - - p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - p-map@4.0.0: - resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} - engines: {node: '>=10'} - - p-retry@4.6.2: - resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} - engines: {node: '>=8'} - - p-try@2.2.0: - resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} - engines: {node: '>=6'} - - package-json@8.1.1: - resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} - engines: {node: '>=14.16'} - - param-case@3.0.4: - resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} - - parent-module@1.0.1: - resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} - engines: {node: '>=6'} - - parse-entities@4.0.2: - resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} - - parse-json@5.2.0: - resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} - engines: {node: '>=8'} - - parse-numeric-range@1.3.0: - resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} - - parse5-htmlparser2-tree-adapter@7.1.0: - resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} - - parse5-parser-stream@7.1.2: - resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} - - parse5@7.3.0: - resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} - - parseurl@1.3.3: - resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} - engines: {node: '>= 0.8'} - - pascal-case@3.1.2: - resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} - - path-exists@3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - - path-exists@4.0.0: - resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} - engines: {node: '>=8'} - - path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - path-is-absolute@1.0.1: - resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} - engines: {node: '>=0.10.0'} - - path-is-inside@1.0.2: - resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} - - path-key@3.1.1: - resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} - engines: {node: '>=8'} - - path-parse@1.0.7: - resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - - path-to-regexp@0.1.13: - resolution: {integrity: sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==} - - path-to-regexp@1.9.0: - resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} - - path-to-regexp@3.3.0: - resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} - - path-type@4.0.0: - resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} - engines: {node: '>=8'} - - picocolors@1.1.1: - resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - - picomatch@2.3.2: - resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==} - engines: {node: '>=8.6'} - - picomatch@4.0.4: - resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==} - engines: {node: '>=12'} - - pify@2.3.0: - resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} - engines: {node: '>=0.10.0'} - - pirates@4.0.7: - resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} - engines: {node: '>= 6'} - - pkg-dir@7.0.0: - resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} - engines: {node: '>=14.16'} - - pkg-up@3.1.0: - resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} - engines: {node: '>=8'} - - postcss-calc@8.2.4: - resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} - peerDependencies: - postcss: ^8.2.2 - - postcss-colormin@5.3.1: - resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-convert-values@5.1.3: - resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-comments@5.1.2: - resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-duplicates@5.1.0: - resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-empty@5.1.1: - resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-overridden@5.1.0: - resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-discard-unused@5.1.0: - resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-import@15.1.0: - resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} - engines: {node: '>=14.0.0'} - peerDependencies: - postcss: ^8.0.0 - - postcss-js@4.1.0: - resolution: {integrity: sha512-oIAOTqgIo7q2EOwbhb8UalYePMvYoIeRY2YKntdpFQXNosSu3vLrniGgmH9OKs/qAkfoj5oB3le/7mINW1LCfw==} - engines: {node: ^12 || ^14 || >= 16} - peerDependencies: - postcss: ^8.4.21 - - postcss-load-config@6.0.1: - resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} - engines: {node: '>= 18'} - peerDependencies: - jiti: '>=1.21.0' - postcss: '>=8.0.9' - tsx: ^4.8.1 - yaml: ^2.4.2 - peerDependenciesMeta: - jiti: - optional: true - postcss: - optional: true - tsx: - optional: true - yaml: - optional: true - - postcss-loader@7.3.4: - resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} - engines: {node: '>= 14.15.0'} - peerDependencies: - postcss: ^7.0.0 || ^8.0.1 - webpack: ^5.0.0 - - postcss-merge-idents@5.1.1: - resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-merge-longhand@5.1.7: - resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-merge-rules@5.1.4: - resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-font-values@5.1.0: - resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-gradients@5.1.1: - resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-params@5.1.4: - resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-minify-selectors@5.2.1: - resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-modules-extract-imports@3.1.0: - resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-local-by-default@4.2.0: - resolution: {integrity: sha512-5kcJm/zk+GJDSfw+V/42fJ5fhjL5YbFDl8nVdXkJPLLW+Vf9mTD5Xe0wqIaDnLuL2U6cDNpTr+UQ+v2HWIBhzw==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-scope@3.2.1: - resolution: {integrity: sha512-m9jZstCVaqGjTAuny8MdgE88scJnCiQSlSrOWcTQgM2t32UBe+MUmFSO5t7VMSfAf/FJKImAxBav8ooCHJXCJA==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-modules-values@4.0.0: - resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} - engines: {node: ^10 || ^12 || >= 14} - peerDependencies: - postcss: ^8.1.0 - - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} - peerDependencies: - postcss: ^8.2.14 - - postcss-normalize-charset@5.1.0: - resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-display-values@5.1.0: - resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-positions@5.1.1: - resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-repeat-style@5.1.1: - resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-string@5.1.0: - resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-timing-functions@5.1.0: - resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-unicode@5.1.1: - resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-url@5.1.0: - resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-normalize-whitespace@5.1.1: - resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-ordered-values@5.1.3: - resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-reduce-idents@5.2.0: - resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-reduce-initial@5.1.2: - resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-reduce-transforms@5.1.0: - resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} - engines: {node: '>=4'} - - postcss-selector-parser@7.1.1: - resolution: {integrity: sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==} - engines: {node: '>=4'} - - postcss-sort-media-queries@4.4.1: - resolution: {integrity: sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==} - engines: {node: '>=10.0.0'} - peerDependencies: - postcss: ^8.4.16 - - postcss-svgo@5.1.0: - resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-unique-selectors@5.1.1: - resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss-value-parser@4.2.0: - resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - - postcss-zindex@5.1.0: - resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} - engines: {node: ^10 || ^12 || >=14} - - pre-commit@1.2.2: - resolution: {integrity: sha512-qokTiqxD6GjODy5ETAIgzsRgnBWWQHQH2ghy86PU7mIn/wuWeTwF3otyNQZxWBwVn8XNr8Tdzj/QfUXpH+gRZA==} - - pretty-error@4.0.0: - resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} - - pretty-time@1.1.0: - resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} - engines: {node: '>=4'} - - prism-react-renderer@2.4.1: - resolution: {integrity: sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==} - peerDependencies: - react: '>=16.0.0' - - prismjs@1.30.0: - resolution: {integrity: sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==} - engines: {node: '>=6'} - - process-nextick-args@2.0.1: - resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - - prompts@2.4.2: - resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} - engines: {node: '>= 6'} - - prop-types@15.8.1: - resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} - - property-information@7.1.0: - resolution: {integrity: sha512-TwEZ+X+yCJmYfL7TPUOcvBZ4QfoT5YenQiJuX//0th53DE6w0xxLEtfK3iyryQFddXuvkIk51EEgrJQ0WJkOmQ==} - - proto-list@1.2.4: - resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - - proxy-addr@2.0.7: - resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} - engines: {node: '>= 0.10'} - - pseudomap@1.0.2: - resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} - - punycode@2.3.1: - resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} - engines: {node: '>=6'} - - pupa@3.3.0: - resolution: {integrity: sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==} - engines: {node: '>=12.20'} - - qs@6.14.2: - resolution: {integrity: sha512-V/yCWTTF7VJ9hIh18Ugr2zhJMP01MY7c5kh4J870L7imm6/DIzBsNLTXzMwUA3yZ5b/KBqLx8Kp3uRvd7xSe3Q==} - engines: {node: '>=0.6'} - - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - - queue@6.0.2: - resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} - - quick-lru@5.1.1: - resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} - engines: {node: '>=10'} - - randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - - range-parser@1.2.0: - resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} - engines: {node: '>= 0.6'} - - range-parser@1.2.1: - resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} - engines: {node: '>= 0.6'} - - raw-body@2.5.3: - resolution: {integrity: sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==} - engines: {node: '>= 0.8'} - - rc@1.2.8: - resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} - hasBin: true - - react-dev-utils@12.0.1: - resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} - engines: {node: '>=14'} - peerDependencies: - typescript: '>=2.7' - webpack: '>=4' - peerDependenciesMeta: - typescript: - optional: true - - react-dom@18.3.1: - resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} - peerDependencies: - react: ^18.3.1 - - react-error-overlay@6.1.0: - resolution: {integrity: sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==} - - react-fast-compare@3.2.2: - resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - - react-helmet-async@1.3.0: - resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 - - react-helmet-async@3.0.0: - resolution: {integrity: sha512-nA3IEZfXiclgrz4KLxAhqJqIfFDuvzQwlKwpdmzZIuC1KNSghDEIXmyU0TKtbM+NafnkICcwx8CECFrZ/sL/1w==} - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 - - react-is@16.13.1: - resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - - react-json-view-lite@1.5.0: - resolution: {integrity: sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==} - engines: {node: '>=14'} - peerDependencies: - react: ^16.13.1 || ^17.0.0 || ^18.0.0 - - react-loadable-ssr-addon-v5-slorber@1.0.3: - resolution: {integrity: sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==} - engines: {node: '>=10.13.0'} - peerDependencies: - react-loadable: '*' - webpack: '>=4.41.1 || 5.x' - - react-router-config@5.1.1: - resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} - peerDependencies: - react: '>=15' - react-router: '>=5' - - react-router-dom@5.3.4: - resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} - peerDependencies: - react: '>=15' - - react-router@5.3.4: - resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==} - peerDependencies: - react: '>=15' - - react@18.3.1: - resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} - engines: {node: '>=0.10.0'} - - read-cache@1.0.0: - resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} - - readable-stream@2.3.8: - resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} - - readable-stream@3.6.2: - resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} - engines: {node: '>= 6'} - - readdirp@3.6.0: - resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} - engines: {node: '>=8.10.0'} - - readdirp@4.1.2: - resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} - engines: {node: '>= 14.18.0'} - - reading-time@1.5.0: - resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} - - rechoir@0.6.2: - resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} - engines: {node: '>= 0.10'} - - recma-build-jsx@1.0.0: - resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} - - recma-jsx@1.0.1: - resolution: {integrity: sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==} - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - - recma-parse@1.0.0: - resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} - - recma-stringify@1.0.0: - resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} - - recursive-readdir@2.2.3: - resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} - engines: {node: '>=6.0.0'} - - regenerate-unicode-properties@10.2.2: - resolution: {integrity: sha512-m03P+zhBeQd1RGnYxrGyDAPpWX/epKirLrp8e3qevZdVkKtnCrjjWczIbYc8+xd6vcTStVlqfycTx1KR4LOr0g==} - engines: {node: '>=4'} - - regenerate@1.4.2: - resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - - regexpu-core@6.4.0: - resolution: {integrity: sha512-0ghuzq67LI9bLXpOX/ISfve/Mq33a4aFRzoQYhnnok1JOFpmE/A2TBGkNVenOGEeSBCjIiWcc6MVOG5HEQv0sA==} - engines: {node: '>=4'} - - registry-auth-token@5.1.1: - resolution: {integrity: sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==} - engines: {node: '>=14'} - - registry-url@6.0.1: - resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} - engines: {node: '>=12'} - - regjsgen@0.8.0: - resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - - regjsparser@0.13.0: - resolution: {integrity: sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==} - hasBin: true - - rehype-katex@7.0.1: - resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} - - rehype-raw@7.0.0: - resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} - - rehype-recma@1.0.0: - resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} - - relateurl@0.2.7: - resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} - engines: {node: '>= 0.10'} - - remark-directive@3.0.1: - resolution: {integrity: sha512-gwglrEQEZcZYgVyG1tQuA+h58EZfq5CSULw7J90AFuCTyib1thgHPoqQ+h9iFvU6R+vnZ5oNFQR5QKgGpk741A==} - - remark-emoji@4.0.1: - resolution: {integrity: sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - remark-frontmatter@5.0.0: - resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} - - remark-gfm@4.0.1: - resolution: {integrity: sha512-1quofZ2RQ9EWdeN34S79+KExV1764+wCUGop5CPL1WGdD0ocPpu91lzPGbwWMECpEpd42kJGQwzRfyov9j4yNg==} - - remark-math@6.0.0: - resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} - - remark-mdx@3.1.1: - resolution: {integrity: sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==} - - remark-parse@11.0.0: - resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - - remark-rehype@11.1.2: - resolution: {integrity: sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==} - - remark-stringify@11.0.0: - resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} - - renderkid@3.0.0: - resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} - - require-from-string@2.0.2: - resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} - engines: {node: '>=0.10.0'} - - require-like@0.1.2: - resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} - - requires-port@1.0.0: - resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - - resolve-alpn@1.2.1: - resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} - - resolve-from@4.0.0: - resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} - engines: {node: '>=4'} - - resolve-pathname@3.0.0: - resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} - - resolve@1.22.11: - resolution: {integrity: sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==} - engines: {node: '>= 0.4'} - hasBin: true - - responselike@3.0.0: - resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} - engines: {node: '>=14.16'} - - retry@0.13.1: - resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} - engines: {node: '>= 4'} - - reusify@1.1.0: - resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - rimraf@3.0.2: - resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} - deprecated: Rimraf versions prior to v4 are no longer supported - hasBin: true - - rtl-detect@1.1.2: - resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==} - - rtlcss@4.3.0: - resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==} - engines: {node: '>=12.0.0'} - hasBin: true - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - - safe-buffer@5.1.2: - resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - - safe-buffer@5.2.1: - resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} - - safer-buffer@2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - - sass-loader@16.0.7: - resolution: {integrity: sha512-w6q+fRHourZ+e+xA1kcsF27iGM6jdB8teexYCfdUw0sYgcDNeZESnDNT9sUmmPm3ooziwUJXGwZJSTF3kOdBfA==} - engines: {node: '>= 18.12.0'} - peerDependencies: - '@rspack/core': 0.x || ^1.0.0 || ^2.0.0-0 - node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 - sass: ^1.3.0 - sass-embedded: '*' - webpack: ^5.0.0 - peerDependenciesMeta: - '@rspack/core': - optional: true - node-sass: - optional: true - sass: - optional: true - sass-embedded: - optional: true - webpack: - optional: true - - sass@1.98.0: - resolution: {integrity: sha512-+4N/u9dZ4PrgzGgPlKnaaRQx64RO0JBKs9sDhQ2pLgN6JQZ25uPQZKQYaBJU48Kd5BxgXoJ4e09Dq7nMcOUW3A==} - engines: {node: '>=14.0.0'} - hasBin: true - - sax@1.6.0: - resolution: {integrity: sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==} - engines: {node: '>=11.0.0'} - - scheduler@0.23.2: - resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} - - schema-utils@2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} - engines: {node: '>= 8.9.0'} - - schema-utils@3.3.0: - resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} - engines: {node: '>= 10.13.0'} - - schema-utils@4.3.3: - resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} - engines: {node: '>= 10.13.0'} - - search-insights@2.17.3: - resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} - - section-matter@1.0.0: - resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} - engines: {node: '>=4'} - - select-hose@2.0.0: - resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} - - selfsigned@2.4.1: - resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} - engines: {node: '>=10'} - - semver-diff@4.0.0: - resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} - engines: {node: '>=12'} - - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} - hasBin: true - - semver@7.7.4: - resolution: {integrity: sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==} - engines: {node: '>=10'} - hasBin: true - - send@0.19.2: - resolution: {integrity: sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==} - engines: {node: '>= 0.8.0'} - - serialize-javascript@6.0.2: - resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - - serve-handler@6.1.7: - resolution: {integrity: sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==} - - serve-index@1.9.2: - resolution: {integrity: sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==} - engines: {node: '>= 0.8.0'} - - serve-static@1.16.3: - resolution: {integrity: sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==} - engines: {node: '>= 0.8.0'} - - set-function-length@1.2.2: - resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} - engines: {node: '>= 0.4'} - - setprototypeof@1.2.0: - resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} - - shallow-clone@3.0.1: - resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} - engines: {node: '>=8'} - - shallowequal@1.1.0: - resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - - shebang-command@1.2.0: - resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} - engines: {node: '>=0.10.0'} - - shebang-command@2.0.0: - resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} - engines: {node: '>=8'} - - shebang-regex@1.0.0: - resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} - engines: {node: '>=0.10.0'} - - shebang-regex@3.0.0: - resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} - engines: {node: '>=8'} - - shell-quote@1.8.3: - resolution: {integrity: sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==} - engines: {node: '>= 0.4'} - - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true - - side-channel-list@1.0.0: - resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} - engines: {node: '>= 0.4'} - - side-channel-map@1.0.1: - resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} - engines: {node: '>= 0.4'} - - side-channel-weakmap@1.0.2: - resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} - engines: {node: '>= 0.4'} - - side-channel@1.1.0: - resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} - engines: {node: '>= 0.4'} - - signal-exit@3.0.7: - resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - - simple-swizzle@0.2.4: - resolution: {integrity: sha512-nAu1WFPQSMNr2Zn9PGSZK9AGn4t/y97lEm+MXTtUDwfP0ksAIX4nO+6ruD9Jwut4C49SB1Ws+fbXsm/yScWOHw==} - - sirv@2.0.4: - resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} - engines: {node: '>= 10'} - - sisteransi@1.0.5: - resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - - sitemap@7.1.3: - resolution: {integrity: sha512-tAjEd+wt/YwnEbfNB2ht51ybBJxbEWwe5ki/Z//Wh0rpBFTCUSj46GnxUKEWzhfuJTsee8x3lybHxFgUMig2hw==} - engines: {node: '>=12.0.0', npm: '>=5.6.0'} - hasBin: true - - skin-tone@2.0.0: - resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} - engines: {node: '>=8'} - - slash@3.0.0: - resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} - engines: {node: '>=8'} - - slash@4.0.0: - resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} - engines: {node: '>=12'} - - sockjs@0.3.24: - resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} - - sort-css-media-queries@2.1.0: - resolution: {integrity: sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==} - engines: {node: '>= 6.3.0'} - - source-map-js@1.2.1: - resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} - engines: {node: '>=0.10.0'} - - source-map-support@0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} - - source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - - source-map@0.7.6: - resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==} - engines: {node: '>= 12'} - - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - - spawn-sync@1.0.15: - resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} - - spdy-transport@3.0.0: - resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} - - spdy@4.0.2: - resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} - engines: {node: '>=6.0.0'} - - sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} - - srcset@4.0.0: - resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} - engines: {node: '>=12'} - - stable@0.1.8: - resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} - deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' - - statuses@1.5.0: - resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} - engines: {node: '>= 0.6'} - - statuses@2.0.2: - resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} - engines: {node: '>= 0.8'} - - std-env@3.10.0: - resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} - - string-width@4.2.3: - resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} - engines: {node: '>=8'} - - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string_decoder@1.1.1: - resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} - - string_decoder@1.3.0: - resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - - stringify-object@3.3.0: - resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} - engines: {node: '>=4'} - - strip-ansi@6.0.1: - resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} - engines: {node: '>=8'} - - strip-ansi@7.2.0: - resolution: {integrity: sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==} - engines: {node: '>=12'} - - strip-bom-string@1.0.0: - resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} - engines: {node: '>=0.10.0'} - - strip-final-newline@2.0.0: - resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} - engines: {node: '>=6'} - - strip-json-comments@2.0.1: - resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} - engines: {node: '>=0.10.0'} - - strip-json-comments@3.1.1: - resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} - engines: {node: '>=8'} - - style-to-js@1.1.21: - resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} - - style-to-object@1.0.14: - resolution: {integrity: sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==} - - stylehacks@5.1.1: - resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} - engines: {node: ^10 || ^12 || >=14.0} - peerDependencies: - postcss: ^8.2.15 - - sucrase@3.35.1: - resolution: {integrity: sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - - supports-color@7.2.0: - resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} - engines: {node: '>=8'} - - supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - - supports-preserve-symlinks-flag@1.0.0: - resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} - engines: {node: '>= 0.4'} - - svg-parser@2.0.4: - resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - - svgo@2.8.2: - resolution: {integrity: sha512-TyzE4NVGLUFy+H/Uy4N6c3G0HEeprsVfge6Lmq+0FdQQ/zqoVYB62IsBZORsiL+o96s6ff/V6/3UQo/C0cgCAA==} - engines: {node: '>=10.13.0'} - hasBin: true - - tailwind-merge@1.14.0: - resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} - - tailwind-variants@0.1.20: - resolution: {integrity: sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==} - engines: {node: '>=16.x', pnpm: '>=7.x'} - peerDependencies: - tailwindcss: '*' - - tailwindcss@3.4.19: - resolution: {integrity: sha512-3ofp+LL8E+pK/JuPLPggVAIaEuhvIz4qNcf3nA1Xn2o/7fb7s/TYpHhwGDv1ZU3PkBluUVaF8PyCHcm48cKLWQ==} - engines: {node: '>=14.0.0'} - hasBin: true - - tapable@1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} - engines: {node: '>=6'} - - tapable@2.3.2: - resolution: {integrity: sha512-1MOpMXuhGzGL5TTCZFItxCc0AARf1EZFQkGqMm7ERKj8+Hgr5oLvJOVFcC+lRmR8hCe2S3jC4T5D7Vg/d7/fhA==} - engines: {node: '>=6'} - - terser-webpack-plugin@5.4.0: - resolution: {integrity: sha512-Bn5vxm48flOIfkdl5CaD2+1CiUVbonWQ3KQPyP7/EuIl9Gbzq/gQFOzaMFUEgVjB1396tcK0SG8XcNJ/2kDH8g==} - engines: {node: '>= 10.13.0'} - peerDependencies: - '@swc/core': '*' - esbuild: '*' - uglify-js: '*' - webpack: ^5.1.0 - peerDependenciesMeta: - '@swc/core': - optional: true - esbuild: - optional: true - uglify-js: - optional: true - - terser@5.46.1: - resolution: {integrity: sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==} - engines: {node: '>=10'} - hasBin: true - - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} - - thenify-all@1.6.0: - resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} - engines: {node: '>=0.8'} - - thenify@3.3.1: - resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} - - thunky@1.1.0: - resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} - - tiny-invariant@1.3.3: - resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} - - tiny-warning@1.0.3: - resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - - tinyglobby@0.2.15: - resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} - engines: {node: '>=12.0.0'} - - to-regex-range@5.0.1: - resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} - engines: {node: '>=8.0'} - - toidentifier@1.0.1: - resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} - engines: {node: '>=0.6'} - - totalist@3.0.1: - resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} - engines: {node: '>=6'} - - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - - trough@2.2.0: - resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - - ts-interface-checker@0.1.13: - resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} - - tslib@2.8.1: - resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} - - type-fest@1.4.0: - resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} - engines: {node: '>=10'} - - type-fest@2.19.0: - resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} - engines: {node: '>=12.20'} - - type-is@1.6.18: - resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} - engines: {node: '>= 0.6'} - - typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - - typedarray@0.0.6: - resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - - typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} - engines: {node: '>=14.17'} - hasBin: true - - undici-types@7.18.2: - resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} - - undici@7.24.6: - resolution: {integrity: sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==} - engines: {node: '>=20.18.1'} - - unicode-canonical-property-names-ecmascript@2.0.1: - resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} - engines: {node: '>=4'} - - unicode-emoji-modifier-base@1.0.0: - resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} - engines: {node: '>=4'} - - unicode-match-property-ecmascript@2.0.0: - resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} - engines: {node: '>=4'} - - unicode-match-property-value-ecmascript@2.2.1: - resolution: {integrity: sha512-JQ84qTuMg4nVkx8ga4A16a1epI9H6uTXAknqxkGF/aFfRLw1xC/Bp24HNLaZhHSkWd3+84t8iXnp1J0kYcZHhg==} - engines: {node: '>=4'} - - unicode-property-aliases-ecmascript@2.2.0: - resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} - engines: {node: '>=4'} - - unified@11.0.5: - resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} - - unique-string@3.0.0: - resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} - engines: {node: '>=12'} - - unist-util-find-after@5.0.0: - resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} - - unist-util-is@6.0.1: - resolution: {integrity: sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==} - - unist-util-position-from-estree@2.0.0: - resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.2: - resolution: {integrity: sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==} - - unist-util-visit@5.1.0: - resolution: {integrity: sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==} - - universalify@2.0.1: - resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} - engines: {node: '>= 10.0.0'} - - unpipe@1.0.0: - resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} - engines: {node: '>= 0.8'} - - update-browserslist-db@1.2.3: - resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} - hasBin: true - peerDependencies: - browserslist: '>= 4.21.0' - - update-notifier@6.0.2: - resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} - engines: {node: '>=14.16'} - - uri-js@4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} - - url-loader@4.1.1: - resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} - engines: {node: '>= 10.13.0'} - peerDependencies: - file-loader: '*' - webpack: ^4.0.0 || ^5.0.0 - peerDependenciesMeta: - file-loader: - optional: true - - util-deprecate@1.0.2: - resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} - - utila@0.4.0: - resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} - - utility-types@3.11.0: - resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} - engines: {node: '>= 4'} - - utils-merge@1.0.1: - resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} - engines: {node: '>= 0.4.0'} - - uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - - value-equal@1.0.1: - resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} - - vary@1.1.2: - resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} - engines: {node: '>= 0.8'} - - vfile-location@5.0.3: - resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} - - vfile-message@4.0.3: - resolution: {integrity: sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - - viem@2.47.6: - resolution: {integrity: sha512-zExmbI99NGvMdYa7fmqSTLgkwh48dmhgEqFrUgkpL4kfG4XkVefZ8dZqIKVUhZo6Uhf0FrrEXOsHm9LUyIvI2Q==} - peerDependencies: - typescript: '>=5.0.4' - peerDependenciesMeta: - typescript: - optional: true - - watchpack@2.5.1: - resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} - engines: {node: '>=10.13.0'} - - wbuf@1.7.3: - resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} - - web-namespaces@2.0.1: - resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} - - webpack-bundle-analyzer@4.10.2: - resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} - engines: {node: '>= 10.13.0'} - hasBin: true - - webpack-dev-middleware@5.3.4: - resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} - engines: {node: '>= 12.13.0'} - peerDependencies: - webpack: ^4.0.0 || ^5.0.0 - - webpack-dev-server@4.15.2: - resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} - engines: {node: '>= 12.13.0'} - hasBin: true - peerDependencies: - webpack: ^4.37.0 || ^5.0.0 - webpack-cli: '*' - peerDependenciesMeta: - webpack: - optional: true - webpack-cli: - optional: true - - webpack-merge@5.10.0: - resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} - engines: {node: '>=10.0.0'} - - webpack-sources@3.3.4: - resolution: {integrity: sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==} - engines: {node: '>=10.13.0'} - - webpack@5.105.4: - resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} - engines: {node: '>=10.13.0'} - hasBin: true - peerDependencies: - webpack-cli: '*' - peerDependenciesMeta: - webpack-cli: - optional: true - - webpackbar@5.0.2: - resolution: {integrity: sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==} - engines: {node: '>=12'} - peerDependencies: - webpack: 3 || 4 || 5 - - websocket-driver@0.7.4: - resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} - engines: {node: '>=0.8.0'} - - websocket-extensions@0.1.4: - resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} - engines: {node: '>=0.8.0'} - - whatwg-encoding@3.1.1: - resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} - engines: {node: '>=18'} - deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation - - whatwg-mimetype@4.0.0: - resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} - engines: {node: '>=18'} - - which@1.2.14: - resolution: {integrity: sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw==} - hasBin: true - - which@1.3.1: - resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} - hasBin: true - - which@2.0.2: - resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} - engines: {node: '>= 8'} - hasBin: true - - widest-line@4.0.1: - resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} - engines: {node: '>=12'} - - wildcard@2.0.1: - resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrappy@1.0.2: - resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - - write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - - ws@7.5.10: - resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} - engines: {node: '>=8.3.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.18.3: - resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - ws@8.20.0: - resolution: {integrity: sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: '>=5.0.2' - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - - xdg-basedir@5.1.0: - resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} - engines: {node: '>=12'} - - xml-js@1.6.11: - resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} - hasBin: true - - yallist@2.1.2: - resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} - - yallist@3.1.1: - resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - - yaml@1.10.3: - resolution: {integrity: sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==} - engines: {node: '>= 6'} - - yocto-queue@0.1.0: - resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} - engines: {node: '>=10'} - - yocto-queue@1.2.2: - resolution: {integrity: sha512-4LCcse/U2MHZ63HAJVE+v71o7yOdIe4cZ70Wpf8D/IyjDKYQLV5GD46B+hSTjJsvV5PztjvHoU580EftxjDZFQ==} - engines: {node: '>=12.20'} - - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - -snapshots: - - '@adraffy/ens-normalize@1.11.1': {} - - '@algolia/abtesting@1.16.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/autocomplete-core@1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0)(search-insights@2.17.3) - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - - '@algolia/autocomplete-plugin-algolia-insights@1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0) - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - '@algolia/autocomplete-preset-algolia@1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0)': - dependencies: - '@algolia/autocomplete-shared': 1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0) - '@algolia/client-search': 5.50.0 - algoliasearch: 5.50.0 - - '@algolia/autocomplete-shared@1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0)': - dependencies: - '@algolia/client-search': 5.50.0 - algoliasearch: 5.50.0 - - '@algolia/cache-browser-local-storage@4.27.0': - dependencies: - '@algolia/cache-common': 4.27.0 - - '@algolia/cache-common@4.27.0': {} - - '@algolia/cache-in-memory@4.27.0': - dependencies: - '@algolia/cache-common': 4.27.0 - - '@algolia/client-abtesting@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/client-account@4.27.0': - dependencies: - '@algolia/client-common': 4.27.0 - '@algolia/client-search': 4.27.0 - '@algolia/transporter': 4.27.0 - - '@algolia/client-analytics@4.27.0': - dependencies: - '@algolia/client-common': 4.27.0 - '@algolia/client-search': 4.27.0 - '@algolia/requester-common': 4.27.0 - '@algolia/transporter': 4.27.0 - - '@algolia/client-analytics@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/client-common@4.27.0': - dependencies: - '@algolia/requester-common': 4.27.0 - '@algolia/transporter': 4.27.0 - - '@algolia/client-common@5.50.0': {} - - '@algolia/client-insights@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/client-personalization@4.27.0': - dependencies: - '@algolia/client-common': 4.27.0 - '@algolia/requester-common': 4.27.0 - '@algolia/transporter': 4.27.0 - - '@algolia/client-personalization@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/client-query-suggestions@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/client-search@4.27.0': - dependencies: - '@algolia/client-common': 4.27.0 - '@algolia/requester-common': 4.27.0 - '@algolia/transporter': 4.27.0 - - '@algolia/client-search@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/events@4.0.1': {} - - '@algolia/ingestion@1.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/logger-common@4.27.0': {} - - '@algolia/logger-console@4.27.0': - dependencies: - '@algolia/logger-common': 4.27.0 - - '@algolia/monitoring@1.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/recommend@4.27.0': - dependencies: - '@algolia/cache-browser-local-storage': 4.27.0 - '@algolia/cache-common': 4.27.0 - '@algolia/cache-in-memory': 4.27.0 - '@algolia/client-common': 4.27.0 - '@algolia/client-search': 4.27.0 - '@algolia/logger-common': 4.27.0 - '@algolia/logger-console': 4.27.0 - '@algolia/requester-browser-xhr': 4.27.0 - '@algolia/requester-common': 4.27.0 - '@algolia/requester-node-http': 4.27.0 - '@algolia/transporter': 4.27.0 - - '@algolia/recommend@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - '@algolia/requester-browser-xhr@4.27.0': - dependencies: - '@algolia/requester-common': 4.27.0 - - '@algolia/requester-browser-xhr@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - - '@algolia/requester-common@4.27.0': {} - - '@algolia/requester-fetch@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - - '@algolia/requester-node-http@4.27.0': - dependencies: - '@algolia/requester-common': 4.27.0 - - '@algolia/requester-node-http@5.50.0': - dependencies: - '@algolia/client-common': 5.50.0 - - '@algolia/transporter@4.27.0': - dependencies: - '@algolia/cache-common': 4.27.0 - '@algolia/logger-common': 4.27.0 - '@algolia/requester-common': 4.27.0 - - '@alloc/quick-lru@5.2.0': {} - - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 - - '@babel/compat-data@7.29.0': {} - - '@babel/core@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helpers': 7.29.2 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/generator@7.29.1': - dependencies: - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 - - '@babel/helper-annotate-as-pure@7.27.3': - dependencies: - '@babel/types': 7.29.0 - - '@babel/helper-compilation-targets@7.28.6': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/helper-validator-option': 7.27.1 - browserslist: 4.28.1 - lru-cache: 5.1.1 - semver: 6.3.1 - - '@babel/helper-create-class-features-plugin@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/traverse': 7.29.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/helper-create-regexp-features-plugin@7.28.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - regexpu-core: 6.4.0 - semver: 6.3.1 - - '@babel/helper-define-polyfill-provider@0.6.8(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - debug: 4.4.3 - lodash.debounce: 4.0.8 - resolve: 1.22.11 - transitivePeerDependencies: - - supports-color - - '@babel/helper-globals@7.28.0': {} - - '@babel/helper-member-expression-to-functions@7.28.5': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-imports@7.28.6': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-module-transforms@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-optimise-call-expression@7.27.1': - dependencies: - '@babel/types': 7.29.0 - - '@babel/helper-plugin-utils@7.28.6': {} - - '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-wrap-function': 7.28.6 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-replace-supers@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-member-expression-to-functions': 7.28.5 - '@babel/helper-optimise-call-expression': 7.27.1 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-skip-transparent-expression-wrappers@7.27.1': - dependencies: - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helper-string-parser@7.27.1': {} - - '@babel/helper-validator-identifier@7.28.5': {} - - '@babel/helper-validator-option@7.27.1': {} - - '@babel/helper-wrap-function@7.28.6': - dependencies: - '@babel/template': 7.28.6 - '@babel/traverse': 7.29.0 - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/helpers@7.29.2': - dependencies: - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - - '@babel/parser@7.29.2': - dependencies: - '@babel/types': 7.29.0 - - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.28.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-assertions@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-import-attributes@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-jsx@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-typescript@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-async-generator-functions@7.29.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-async-to-generator@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-block-scoping@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-class-properties@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-class-static-block@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-classes@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-globals': 7.28.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-computed-properties@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/template': 7.28.6 - - '@babel/plugin-transform-destructuring@7.28.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-dotall-regex@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-explicit-resource-management@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-exponentiation-operator@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-json-strings@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-literals@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-logical-assignment-operators@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-commonjs@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-systemjs@7.29.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-identifier': 7.28.5 - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-transforms': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-named-capturing-groups-regex@7.29.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-nullish-coalescing-operator@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-numeric-separator@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-object-rest-spread@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/traverse': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-replace-supers': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-optional-catch-binding@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-optional-chaining@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-parameters@7.27.7(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-private-methods@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-private-property-in-object@7.28.6(@babel/core@7.29.0)': dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-constant-elements@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-display-name@7.28.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-react-jsx-development@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-jsx@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/types': 7.29.0 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-react-pure-annotations@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-regenerator@7.29.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-regexp-modifiers@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-runtime@7.29.0(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-module-imports': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.13.0(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-spread@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-typescript@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-annotate-as-pure': 7.27.3 - '@babel/helper-create-class-features-plugin': 7.28.6(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 - '@babel/plugin-syntax-typescript': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-unicode-property-regex@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/plugin-transform-unicode-sets-regex@7.28.6(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-create-regexp-features-plugin': 7.28.5(@babel/core@7.29.0) - '@babel/helper-plugin-utils': 7.28.6 - - '@babel/preset-env@7.29.2(@babel/core@7.29.0)': - dependencies: - '@babel/compat-data': 7.29.0 - '@babel/core': 7.29.0 - '@babel/helper-compilation-targets': 7.28.6 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.29.0) - '@babel/plugin-syntax-import-assertions': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-import-attributes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.29.0) - '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-async-generator-functions': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-async-to-generator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-block-scoping': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-class-static-block': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-classes': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-computed-properties': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-destructuring': 7.28.5(@babel/core@7.29.0) - '@babel/plugin-transform-dotall-regex': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-explicit-resource-management': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-exponentiation-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-json-strings': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-logical-assignment-operators': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-systemjs': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-named-capturing-groups-regex': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-nullish-coalescing-operator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-numeric-separator': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-object-rest-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-optional-catch-binding': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-optional-chaining': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-parameters': 7.27.7(@babel/core@7.29.0) - '@babel/plugin-transform-private-methods': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-private-property-in-object': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-regenerator': 7.29.0(@babel/core@7.29.0) - '@babel/plugin-transform-regexp-modifiers': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-spread': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-property-regex': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-unicode-sets-regex': 7.28.6(@babel/core@7.29.0) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.29.0) - babel-plugin-polyfill-corejs2: 0.4.17(@babel/core@7.29.0) - babel-plugin-polyfill-corejs3: 0.14.2(@babel/core@7.29.0) - babel-plugin-polyfill-regenerator: 0.6.8(@babel/core@7.29.0) - core-js-compat: 3.49.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/types': 7.29.0 - esutils: 2.0.3 - - '@babel/preset-react@7.28.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-transform-react-display-name': 7.28.0(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-react-jsx-development': 7.27.1(@babel/core@7.29.0) - '@babel/plugin-transform-react-pure-annotations': 7.27.1(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/preset-typescript@7.28.5(@babel/core@7.29.0)': - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-plugin-utils': 7.28.6 - '@babel/helper-validator-option': 7.27.1 - '@babel/plugin-syntax-jsx': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-modules-commonjs': 7.28.6(@babel/core@7.29.0) - '@babel/plugin-transform-typescript': 7.28.6(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color - - '@babel/runtime-corejs3@7.29.2': - dependencies: - core-js-pure: 3.49.0 - - '@babel/runtime@7.29.2': {} - - '@babel/template@7.28.6': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/parser': 7.29.2 - '@babel/types': 7.29.0 - - '@babel/traverse@7.29.0': - dependencies: - '@babel/code-frame': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.29.2 - '@babel/template': 7.28.6 - '@babel/types': 7.29.0 - debug: 4.4.3 - transitivePeerDependencies: - - supports-color - - '@babel/types@7.29.0': - dependencies: - '@babel/helper-string-parser': 7.27.1 - '@babel/helper-validator-identifier': 7.28.5 - - '@colors/colors@1.5.0': - optional: true - - '@discoveryjs/json-ext@0.5.7': {} - - '@docsearch/css@3.9.0': {} - - '@docsearch/react@3.9.0(@algolia/client-search@5.50.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)': - dependencies: - '@algolia/autocomplete-core': 1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0)(search-insights@2.17.3) - '@algolia/autocomplete-preset-algolia': 1.17.9(@algolia/client-search@5.50.0)(algoliasearch@5.50.0) - '@docsearch/css': 3.9.0 - algoliasearch: 5.50.0 - optionalDependencies: - '@types/react': 18.3.28 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - search-insights: 2.17.3 - transitivePeerDependencies: - - '@algolia/client-search' - - '@docusaurus/core@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@babel/core': 7.29.0 - '@babel/generator': 7.29.1 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.29.0) - '@babel/plugin-transform-runtime': 7.29.0(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) - '@babel/runtime': 7.29.2 - '@babel/runtime-corejs3': 7.29.2 - '@babel/traverse': 7.29.0 - '@docusaurus/cssnano-preset': 3.1.1 - '@docusaurus/logger': 3.1.1 - '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/react-loadable': 5.5.2(react@18.3.1) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@slorber/static-site-generator-webpack-plugin': 4.0.7 - '@svgr/webpack': 6.5.1 - autoprefixer: 10.4.27(postcss@8.5.8) - babel-loader: 9.2.1(@babel/core@7.29.0)(webpack@5.105.4) - babel-plugin-dynamic-import-node: 2.3.3 - boxen: 6.2.1 - chalk: 4.1.2 - chokidar: 3.6.0 - clean-css: 5.3.3 - cli-table3: 0.6.5 - combine-promises: 1.2.0 - commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.105.4) - core-js: 3.49.0 - css-loader: 6.11.0(webpack@5.105.4) - css-minimizer-webpack-plugin: 4.2.2(clean-css@5.3.3)(webpack@5.105.4) - cssnano: 5.1.15(postcss@8.5.8) - del: 6.1.1 - detect-port: 1.6.1 - escape-html: 1.0.3 - eta: 2.2.0 - file-loader: 6.2.0(webpack@5.105.4) - fs-extra: 11.3.4 - html-minifier-terser: 7.2.0 - html-tags: 3.3.1 - html-webpack-plugin: 5.6.6(webpack@5.105.4) - leven: 3.1.0 - lodash: 4.17.23 - mini-css-extract-plugin: 2.10.2(webpack@5.105.4) - postcss: 8.5.8 - postcss-loader: 7.3.4(postcss@8.5.8)(typescript@5.2.2)(webpack@5.105.4) - prompts: 2.4.2 - react: 18.3.1 - react-dev-utils: 12.0.1(typescript@5.2.2)(webpack@5.105.4) - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - react-loadable: '@docusaurus/react-loadable@5.5.2(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.3(@docusaurus/react-loadable@5.5.2(react@18.3.1))(webpack@5.105.4) - react-router: 5.3.4(react@18.3.1) - react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) - react-router-dom: 5.3.4(react@18.3.1) - rtl-detect: 1.1.2 - semver: 7.7.4 - serve-handler: 6.1.7 - shelljs: 0.8.5 - terser-webpack-plugin: 5.4.0(webpack@5.105.4) - tslib: 2.8.1 - update-notifier: 6.0.2 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.4))(webpack@5.105.4) - webpack: 5.105.4 - webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.105.4) - webpack-merge: 5.10.0 - webpackbar: 5.0.2(webpack@5.105.4) - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/cssnano-preset@3.1.1': - dependencies: - cssnano-preset-advanced: 5.3.10(postcss@8.5.8) - postcss: 8.5.8 - postcss-sort-media-queries: 4.4.1(postcss@8.5.8) - tslib: 2.8.1 - - '@docusaurus/logger@3.1.1': - dependencies: - chalk: 4.1.2 - tslib: 2.8.1 - - '@docusaurus/mdx-loader@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@babel/parser': 7.29.2 - '@babel/traverse': 7.29.0 - '@docusaurus/logger': 3.1.1 - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@mdx-js/mdx': 3.1.1 - '@slorber/remark-comment': 1.0.0 - escape-html: 1.0.3 - estree-util-value-to-estree: 3.5.0 - file-loader: 6.2.0(webpack@5.105.4) - fs-extra: 11.3.4 - image-size: 1.2.1 - mdast-util-mdx: 3.0.0 - mdast-util-to-string: 4.0.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - rehype-raw: 7.0.0 - remark-directive: 3.0.1 - remark-emoji: 4.0.1 - remark-frontmatter: 5.0.0 - remark-gfm: 4.0.1 - stringify-object: 3.3.0 - tslib: 2.8.1 - unified: 11.0.5 - unist-util-visit: 5.1.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.4))(webpack@5.105.4) - vfile: 6.0.3 - webpack: 5.105.4 - transitivePeerDependencies: - - '@docusaurus/types' - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - - '@docusaurus/module-type-aliases@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@docusaurus/react-loadable': 5.5.2(react@18.3.1) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@types/history': 4.7.11 - '@types/react': 18.3.28 - '@types/react-router-config': 5.0.11 - '@types/react-router-dom': 5.3.3 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 3.0.0(react@18.3.1) - react-loadable: '@docusaurus/react-loadable@5.5.2(react@18.3.1)' - transitivePeerDependencies: - - '@swc/core' - - esbuild - - supports-color - - uglify-js - - webpack-cli - - '@docusaurus/plugin-client-redirects@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/logger': 3.1.1 - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - eta: 2.2.0 - fs-extra: 11.3.4 - lodash: 4.17.23 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - tslib: 2.8.1 - transitivePeerDependencies: - - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-content-blog@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/logger': 3.1.1 - '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - cheerio: 1.2.0 - feed: 4.2.2 - fs-extra: 11.3.4 - lodash: 4.17.23 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - reading-time: 1.5.0 - srcset: 4.0.0 - tslib: 2.8.1 - unist-util-visit: 5.1.0 - utility-types: 3.11.0 - webpack: 5.105.4 - transitivePeerDependencies: - - '@parcel/css' - - '@rspack/core' - - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug - - esbuild - - eslint - - lightningcss - - supports-color - - typescript - - uglify-js - - utf-8-validate - - vue-template-compiler - - webpack-cli - - '@docusaurus/plugin-content-docs@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@docusaurus/logger': 3.1.1 - '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/module-type-aliases': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 - fs-extra: 11.3.4 - js-yaml: 4.1.1 - lodash: 4.17.23 + fs-extra: 11.2.0 + js-yaml: 4.1.0 + lodash: 4.17.21 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -6347,6 +2183,7 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6359,15 +2196,21 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/plugin-content-pages@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/plugin-content-pages@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-NQHncNRAJbyLtgTim9GlEnNYsFhuCxaCNkMwikuxLTiGIPH7r/jpb7O3f3jUMYMebZZZrDq5S7om9a6rvB/YCA==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - fs-extra: 11.3.4 + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -6377,6 +2220,7 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6389,13 +2233,19 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/plugin-debug@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/plugin-debug@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-xWeMkueM9wE/8LVvl4+Qf1WqwXmreMjI5Kgr7GYCDoJ8zu4kD+KaMhrh7py7MNM38IFvU1RfrGKacCEe2DRRfQ==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - fs-extra: 11.3.4 + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-json-view-lite: 1.5.0(react@18.3.1) @@ -6405,6 +2255,7 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6417,12 +2268,18 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/plugin-google-analytics@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/plugin-google-analytics@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-+q2UpWTqVi8GdlLoSlD5bS/YpxW+QMoBwrPrUH/NpvpuOi0Of7MTotsQf9JWd3hymZxl2uu1o3PIrbpxfeDFDQ==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -6431,6 +2288,7 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6443,12 +2301,18 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/plugin-google-gtag@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/plugin-google-gtag@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-0mMPiBBlQ5LFHTtjxuvt/6yzh8v7OxLi3CbeEsxXZpUzcKO/GC7UA1VOWUoBeQzQL508J12HTAlR3IBU9OofSw==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) @@ -6458,6 +2322,7 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6470,12 +2335,18 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/plugin-google-tag-manager@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/plugin-google-tag-manager@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-d07bsrMLdDIryDtY17DgqYUbjkswZQr8cLWl4tzXrt5OR/T/zxC1SYKajzB3fd87zTu5W5klV5GmUwcNSMXQXA==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -6484,6 +2355,7 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6496,25 +2368,32 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/plugin-sitemap@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/plugin-sitemap@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-iJ4hCaMmDaUqRv131XJdt/C/jJQx8UreDWTRqZKtNydvZVh/o4yXGRRFOplea1D9b/zpwL1Y+ZDwX7xMhIOTmg==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@docusaurus/logger': 3.1.1 - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - fs-extra: 11.3.4 + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - sitemap: 7.1.3 + sitemap: 7.1.2 tslib: 2.8.1 transitivePeerDependencies: - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6527,22 +2406,28 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/preset-classic@3.1.1(@algolia/client-search@5.50.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-blog': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-debug': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-google-analytics': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-google-gtag': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-google-tag-manager': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-sitemap': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-classic': 3.1.1(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-search-algolia': 3.1.1(@algolia/client-search@5.50.0)(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.2.2) - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + /@docusaurus/preset-classic@3.1.1(@algolia/client-search@5.44.0)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2)(typescript@5.4.5): + resolution: {integrity: sha512-jG4ys/hWYf69iaN/xOmF+3kjs4Nnz1Ay3CjFLDtYa8KdxbmUhArA9HmP26ru5N0wbVWhY+6kmpYhTJpez5wTyg==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-content-blog': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-content-docs': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-content-pages': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-debug': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-google-analytics': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-google-gtag': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-google-tag-manager': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-sitemap': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/theme-classic': 3.1.1(@types/react@18.3.12)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/theme-common': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/theme-search-algolia': 3.1.1(@algolia/client-search@5.44.0)(@docusaurus/types@3.1.1)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2)(typescript@5.4.5) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: @@ -6552,6 +2437,7 @@ snapshots: - '@swc/core' - '@swc/css' - '@types/react' + - acorn - bufferutil - csso - debug @@ -6565,36 +2451,45 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/react-loadable@5.5.2(react@18.3.1)': + /@docusaurus/react-loadable@5.5.2(react@18.3.1): + resolution: {integrity: sha512-A3dYjdBGuy0IGT+wyLIGIKLRE+sAk1iNk0f1HjNDysO7u8lhL4N3VEm+FAubmJbAztn94F7MxBTPmnixbiyFdQ==} + peerDependencies: + react: '*' dependencies: - '@types/react': 18.3.28 + '@types/react': 18.3.12 prop-types: 15.8.1 react: 18.3.1 - '@docusaurus/theme-classic@3.1.1(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/theme-classic@3.1.1(@types/react@18.3.12)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-GiPE/jbWM8Qv1A14lk6s9fhc0LhPEQ00eIczRO4QL2nAQJZXkjPG6zaVx+1cZxPFWbAsqSjKe2lqkwF3fGkQ7Q==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/module-type-aliases': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-content-docs': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-content-pages': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/theme-common': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@docusaurus/theme-translations': 3.1.1 - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@mdx-js/react': 3.0.1(@types/react@18.3.28)(react@18.3.1) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + '@mdx-js/react': 3.0.1(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.2 infima: 0.2.0-alpha.43 - lodash: 4.17.23 + lodash: 4.17.21 nprogress: 0.2.0 - postcss: 8.5.8 - prism-react-renderer: 2.4.1(react@18.3.1) - prismjs: 1.30.0 + postcss: 8.5.6 + prism-react-renderer: 2.4.0(react@18.3.1) + prismjs: 1.29.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) @@ -6607,6 +2502,7 @@ snapshots: - '@swc/core' - '@swc/css' - '@types/react' + - acorn - bufferutil - csso - debug @@ -6619,22 +2515,28 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/theme-common@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + /@docusaurus/theme-common@3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-38urZfeMhN70YaXkwIGXmcUcv2CEYK/2l4b05GkJPrbEbgpsIZM3Xc+Js2ehBGGZmfZq8GjjQ5RNQYG+MYzCYg==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/module-type-aliases': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/mdx-loader': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/module-type-aliases': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-content-docs': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/plugin-content-pages': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-common': 3.1.1(@docusaurus/types@3.1.1) '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 clsx: 2.1.1 parse-numeric-range: 1.3.0 - prism-react-renderer: 2.4.1(react@18.3.1) + prism-react-renderer: 2.4.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -6645,6 +2547,43 @@ snapshots: - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn + - bufferutil + - csso + - debug + - esbuild + - eslint + - lightningcss + - supports-color + - typescript + - uglify-js + - utf-8-validate + - vue-template-compiler + - webpack-cli + dev: false + + /@docusaurus/theme-mermaid@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5): + resolution: {integrity: sha512-O6u9/7QX/ZapV4HJJSzNs0Jir1KA/LRLORWYeDvbGswqZNusj6q4iLELrKIClysJ3PB3zWUzyKtI/wjIKiV1vA==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 + dependencies: + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/module-type-aliases': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/theme-common': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + mermaid: 10.9.5 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + tslib: 2.8.1 + transitivePeerDependencies: + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn - bufferutil - csso - debug @@ -6657,23 +2596,29 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/theme-search-algolia@3.1.1(@algolia/client-search@5.50.0)(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3)(typescript@5.2.2)': + /@docusaurus/theme-search-algolia@3.1.1(@algolia/client-search@5.44.0)(@docusaurus/types@3.1.1)(@types/react@18.3.12)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2)(typescript@5.4.5): + resolution: {integrity: sha512-tBH9VY5EpRctVdaAhT+b1BY8y5dyHVZGFXyCHgTrvcXQy5CV4q7serEX7U3SveNT9zksmchPyct6i1sFDC4Z5g==} + engines: {node: '>=18.0'} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docsearch/react': 3.9.0(@algolia/client-search@5.50.0)(@types/react@18.3.28)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.3) - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docsearch/react': 3.9.0(@algolia/client-search@5.44.0)(@types/react@18.3.12)(react-dom@18.3.1)(react@18.3.1)(search-insights@2.17.2) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@docusaurus/logger': 3.1.1 - '@docusaurus/plugin-content-docs': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-common': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-content-docs': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + '@docusaurus/theme-common': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) '@docusaurus/theme-translations': 3.1.1 - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - algoliasearch: 4.27.0 - algoliasearch-helper: 3.28.1(algoliasearch@4.27.0) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) + '@docusaurus/utils-validation': 3.1.1(@docusaurus/types@3.1.1) + algoliasearch: 4.25.3 + algoliasearch-helper: 3.26.1(algoliasearch@4.25.3) clsx: 2.1.1 eta: 2.2.0 - fs-extra: 11.3.4 - lodash: 4.17.23 + fs-extra: 11.2.0 + lodash: 4.17.21 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.8.1 @@ -6686,6 +2631,7 @@ snapshots: - '@swc/core' - '@swc/css' - '@types/react' + - acorn - bufferutil - csso - debug @@ -6699,46 +2645,66 @@ snapshots: - utf-8-validate - vue-template-compiler - webpack-cli + dev: false - '@docusaurus/theme-translations@3.1.1': + /@docusaurus/theme-translations@3.1.1: + resolution: {integrity: sha512-xvWQFwjxHphpJq5fgk37FXCDdAa2o+r7FX8IpMg+bGZBNXyWBu3MjZ+G4+eUVNpDhVinTc+j6ucL0Ain5KCGrg==} + engines: {node: '>=18.0'} dependencies: - fs-extra: 11.3.4 + fs-extra: 11.2.0 tslib: 2.8.1 + dev: false - '@docusaurus/tsconfig@3.1.1': {} + /@docusaurus/tsconfig@3.1.1: + resolution: {integrity: sha512-FTBuY3KvaHfMVBgvlPmDQ+KS9Q/bYtVftq2ugou3PgBDJoQmw2aUZ4Sg15HKqLGbfIkxoy9t6cqE4Yw1Ta8Q1A==} + dev: true - '@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + /@docusaurus/types@3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-grBqOLnubUecgKFXN9q3uit2HFbCxTWX4Fam3ZFbMN0sWX9wOcDoA7lwdX/8AmeL20Oc4kQvWVgNrsT8bKRvzg==} + peerDependencies: + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@mdx-js/mdx': 3.1.1 + '@mdx-js/mdx': 3.1.0(acorn@8.14.0) '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 18.3.12 commander: 5.1.0 joi: 17.13.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + react-helmet-async: 1.3.0(react-dom@18.3.1)(react@18.3.1) utility-types: 3.11.0 webpack: 5.105.4 webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' + - acorn - esbuild - supports-color - uglify-js - webpack-cli - '@docusaurus/utils-common@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + /@docusaurus/utils-common@3.1.1(@docusaurus/types@3.1.1): + resolution: {integrity: sha512-eGne3olsIoNfPug5ixjepZAIxeYFzHHnor55Wb2P57jNbtVaFvij/T+MS8U0dtZRFi50QU+UPmRrXdVUM8uyMg==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true dependencies: + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) tslib: 2.8.1 - optionalDependencies: - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + dev: false - '@docusaurus/utils-validation@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + /@docusaurus/utils-validation@3.1.1(@docusaurus/types@3.1.1): + resolution: {integrity: sha512-KlY4P9YVDnwL+nExvlIpu79abfEv6ZCHuOX4ZQ+gtip+Wxj0daccdReIWWtqxM/Fb5Cz1nQvUCc7VEtT8IBUAA==} + engines: {node: '>=18.0'} dependencies: '@docusaurus/logger': 3.1.1 - '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils': 3.1.1(@docusaurus/types@3.1.1) joi: 17.13.3 - js-yaml: 4.1.1 + js-yaml: 4.1.0 tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/types' @@ -6747,131 +2713,183 @@ snapshots: - supports-color - uglify-js - webpack-cli + dev: false - '@docusaurus/utils@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + /@docusaurus/utils@3.1.1(@docusaurus/types@3.1.1): + resolution: {integrity: sha512-ZJfJa5cJQtRYtqijsPEnAZoduW6sjAQ7ZCWSZavLcV10Fw0Z3gSaPKA/B4micvj2afRZ4gZxT7KfYqe5H8Cetg==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/types': '*' + peerDependenciesMeta: + '@docusaurus/types': + optional: true dependencies: '@docusaurus/logger': 3.1.1 + '@docusaurus/types': 3.1.1(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1) '@svgr/webpack': 6.5.1 escape-string-regexp: 4.0.0 file-loader: 6.2.0(webpack@5.105.4) - fs-extra: 11.3.4 + fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 gray-matter: 4.0.3 - jiti: 1.21.7 - js-yaml: 4.1.1 - lodash: 4.17.23 + jiti: 1.21.6 + js-yaml: 4.1.0 + lodash: 4.17.21 micromatch: 4.0.8 resolve-pathname: 3.0.0 shelljs: 0.8.5 tslib: 2.8.1 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.105.4))(webpack@5.105.4) + url-loader: 4.1.1(file-loader@6.2.0)(webpack@5.105.4) webpack: 5.105.4 - optionalDependencies: - '@docusaurus/types': 3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@swc/core' - esbuild - supports-color - uglify-js - webpack-cli + dev: false - '@hapi/hoek@9.3.0': {} + /@hapi/hoek@9.3.0: + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} - '@hapi/topo@5.1.0': + /@hapi/topo@5.1.0: + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} dependencies: '@hapi/hoek': 9.3.0 - '@jest/schemas@29.6.3': + /@isaacs/cliui@8.0.2: + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + dependencies: + string-width: 5.1.2 + string-width-cjs: /string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: /strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: /wrap-ansi@7.0.0 + dev: false + + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@sinclair/typebox': 0.27.10 + '@sinclair/typebox': 0.27.8 + dev: false - '@jest/types@29.6.3': + /@jest/types@29.6.3: + resolution: {integrity: sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 25.5.0 - '@types/yargs': 17.0.35 + '@types/node': 22.8.7 + '@types/yargs': 17.0.33 chalk: 4.1.2 + dev: false - '@jridgewell/gen-mapping@0.3.13': + /@jridgewell/gen-mapping@0.3.5: + resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} + engines: {node: '>=6.0.0'} dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 - '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/remapping@2.3.5': - dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + /@jridgewell/resolve-uri@3.1.2: + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} - '@jridgewell/resolve-uri@3.1.2': {} + /@jridgewell/set-array@1.2.1: + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} - '@jridgewell/source-map@0.3.11': + /@jridgewell/source-map@0.3.6: + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} dependencies: - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.5.5': {} + /@jridgewell/sourcemap-codec@1.5.0: + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.31': + /@jridgewell/trace-mapping@0.3.25: + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.0 - '@leichtgewicht/ip-codec@2.0.5': {} + /@leichtgewicht/ip-codec@2.0.5: + resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} + dev: false - '@mdx-js/mdx@3.1.1': + /@mdx-js/mdx@3.1.0(acorn@8.14.0): + resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 - acorn: 8.16.0 collapse-white-space: 2.1.0 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-jsx-runtime: 2.3.6 + hast-util-to-jsx-runtime: 2.3.2 markdown-extensions: 2.0.0 recma-build-jsx: 1.0.0 - recma-jsx: 1.0.1(acorn@8.16.0) + recma-jsx: 1.0.0(acorn@8.14.0) recma-stringify: 1.0.0 rehype-recma: 1.0.0 - remark-mdx: 3.1.1 + remark-mdx: 3.1.0 remark-parse: 11.0.0 - remark-rehype: 11.1.2 - source-map: 0.7.6 + remark-rehype: 11.1.1 + source-map: 0.7.4 unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 - unist-util-visit: 5.1.0 + unist-util-visit: 5.0.0 vfile: 6.0.3 transitivePeerDependencies: + - acorn - supports-color - '@mdx-js/react@3.0.1(@types/react@18.3.28)(react@18.3.1)': + /@mdx-js/react@3.0.1(@types/react@18.3.12)(react@18.3.1): + resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.28 + '@types/react': 18.3.12 react: 18.3.1 + dev: false - '@morph-network/chain@0.0.2': {} + /@morph-network/chain@0.0.1: + resolution: {integrity: sha512-CMduYgJqEdl6gJxEaa/lYFb/wz2YUnRwRw9tfAlO1iHfSlBLs9L5FUkabsjwzfxliGnc5OmlCjHljUlmzwxJZA==, tarball: https://security-jfrog.bitget.tools:8506/artifactory/api/npm/BK-npmjs-virtual/@morph-network/chain/-/@morph-network/chain-0.0.1.tgz} + dev: false - '@morph-network/viem@0.1.0(@morph-network/chain@0.0.2)(typescript@5.2.2)': + /@morph-network/viem@0.1.0(@morph-network/chain@0.0.1)(typescript@5.4.5): + resolution: {integrity: sha512-3XIStB5OVcUJ4TJACpHC9MHQ4/Emiu6xOej+fxdb6AJPDbRE804bNBt7WKEF12C8G4gLZhXQ7A0fSvn07Di0vg==, tarball: https://security-jfrog.bitget.tools:8506/artifactory/api/npm/BK-npmjs-virtual/@morph-network/viem/-/@morph-network/viem-0.1.0.tgz} + peerDependencies: + '@morph-network/chain': ^0.0.1 dependencies: - '@morph-network/chain': 0.0.2 - viem: 2.47.6(typescript@5.2.2) + '@morph-network/chain': 0.0.1 + viem: 2.44.4(typescript@5.4.5) transitivePeerDependencies: - bufferutil - typescript - utf-8-validate - zod + dev: false - '@morui/theme@2.1.0(tailwindcss@3.4.19)': + /@morui/theme@2.1.0(tailwindcss@3.4.14): + resolution: {integrity: sha512-tgxVoHk8dsLMqT4a+LqRgPQ2j2+z9pYAy4BAua2chap6Dnm9o8nzM88BD6chrzbjLX+p8ewB+Hr8C3Jmd7JQkw==} + peerDependencies: + tailwindcss: '*' dependencies: - '@types/color': 3.0.7 + '@types/color': 3.0.6 '@types/flat': 5.0.5 '@types/lodash.foreach': 4.5.9 '@types/lodash.get': 4.4.9 @@ -6887,495 +2905,843 @@ snapshots: lodash.kebabcase: 4.1.1 lodash.mapkeys: 4.6.0 lodash.omit: 4.5.0 - tailwind-variants: 0.1.20(tailwindcss@3.4.19) - tailwindcss: 3.4.19 + tailwind-variants: 0.1.20(tailwindcss@3.4.14) + tailwindcss: 3.4.14 + dev: false - '@noble/ciphers@1.3.0': {} + /@noble/ciphers@1.3.0: + resolution: {integrity: sha512-2I0gnIVPtfnMw9ee9h1dJG7tp81+8Ob3OJb3Mv37rx5L40/b0i7djjCVvGOVqc9AEIQyvyu1i6ypKdFw8R8gQw==} + engines: {node: ^14.21.3 || >=16} + dev: false - '@noble/curves@1.9.1': + /@noble/curves@1.9.1: + resolution: {integrity: sha512-k11yZxZg+t+gWvBbIswW0yoJlu8cHOC7dhunwOzoWH/mXGBiYyR4YY6hAEK/3EUs4UpB8la1RfdRpeGsFHkWsA==} + engines: {node: ^14.21.3 || >=16} dependencies: '@noble/hashes': 1.8.0 + dev: false - '@noble/hashes@1.8.0': {} + /@noble/hashes@1.8.0: + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + dev: false - '@nodelib/fs.scandir@2.1.5': + /@nodelib/fs.scandir@2.1.5: + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.stat': 2.0.5 run-parallel: 1.2.0 + dev: false - '@nodelib/fs.stat@2.0.5': {} + /@nodelib/fs.stat@2.0.5: + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + dev: false - '@nodelib/fs.walk@1.2.8': + /@nodelib/fs.walk@1.2.8: + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.20.1 - - '@parcel/watcher-android-arm64@2.5.6': - optional: true + fastq: 1.17.1 + dev: false - '@parcel/watcher-darwin-arm64@2.5.6': + /@parcel/watcher-android-arm64@2.4.1: + resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-darwin-x64@2.5.6': + /@parcel/watcher-darwin-arm64@2.4.1: + resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-freebsd-x64@2.5.6': + /@parcel/watcher-darwin-x64@2.4.1: + resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-linux-arm-glibc@2.5.6': + /@parcel/watcher-freebsd-x64@2.4.1: + resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-linux-arm-musl@2.5.6': + /@parcel/watcher-linux-arm-glibc@2.4.1: + resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-linux-arm64-glibc@2.5.6': + /@parcel/watcher-linux-arm64-glibc@2.4.1: + resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-linux-arm64-musl@2.5.6': + /@parcel/watcher-linux-arm64-musl@2.4.1: + resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-linux-x64-glibc@2.5.6': + /@parcel/watcher-linux-x64-glibc@2.4.1: + resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-linux-x64-musl@2.5.6': + /@parcel/watcher-linux-x64-musl@2.4.1: + resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-win32-arm64@2.5.6': + /@parcel/watcher-win32-arm64@2.4.1: + resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-win32-ia32@2.5.6': + /@parcel/watcher-win32-ia32@2.4.1: + resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false optional: true - '@parcel/watcher-win32-x64@2.5.6': + /@parcel/watcher-win32-x64@2.4.1: + resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false optional: true - '@parcel/watcher@2.5.6': + /@parcel/watcher@2.4.1: + resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} + engines: {node: '>= 10.0.0'} + requiresBuild: true dependencies: - detect-libc: 2.1.2 + detect-libc: 1.0.3 is-glob: 4.0.3 + micromatch: 4.0.8 node-addon-api: 7.1.1 - picomatch: 4.0.4 optionalDependencies: - '@parcel/watcher-android-arm64': 2.5.6 - '@parcel/watcher-darwin-arm64': 2.5.6 - '@parcel/watcher-darwin-x64': 2.5.6 - '@parcel/watcher-freebsd-x64': 2.5.6 - '@parcel/watcher-linux-arm-glibc': 2.5.6 - '@parcel/watcher-linux-arm-musl': 2.5.6 - '@parcel/watcher-linux-arm64-glibc': 2.5.6 - '@parcel/watcher-linux-arm64-musl': 2.5.6 - '@parcel/watcher-linux-x64-glibc': 2.5.6 - '@parcel/watcher-linux-x64-musl': 2.5.6 - '@parcel/watcher-win32-arm64': 2.5.6 - '@parcel/watcher-win32-ia32': 2.5.6 - '@parcel/watcher-win32-x64': 2.5.6 + '@parcel/watcher-android-arm64': 2.4.1 + '@parcel/watcher-darwin-arm64': 2.4.1 + '@parcel/watcher-darwin-x64': 2.4.1 + '@parcel/watcher-freebsd-x64': 2.4.1 + '@parcel/watcher-linux-arm-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-glibc': 2.4.1 + '@parcel/watcher-linux-arm64-musl': 2.4.1 + '@parcel/watcher-linux-x64-glibc': 2.4.1 + '@parcel/watcher-linux-x64-musl': 2.4.1 + '@parcel/watcher-win32-arm64': 2.4.1 + '@parcel/watcher-win32-ia32': 2.4.1 + '@parcel/watcher-win32-x64': 2.4.1 + dev: false + optional: true + + /@pkgjs/parseargs@0.11.0: + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + requiresBuild: true + dev: false optional: true - '@pnpm/config.env-replace@1.1.0': {} + /@pnpm/config.env-replace@1.1.0: + resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} + engines: {node: '>=12.22.0'} + dev: false - '@pnpm/network.ca-file@1.0.2': + /@pnpm/network.ca-file@1.0.2: + resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} + engines: {node: '>=12.22.0'} dependencies: graceful-fs: 4.2.10 + dev: false - '@pnpm/npm-conf@3.0.2': + /@pnpm/npm-conf@2.3.1: + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} + engines: {node: '>=12'} dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 + dev: false - '@polka/url@1.0.0-next.29': {} + /@polka/url@1.0.0-next.28: + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} + dev: false - '@scure/base@1.2.6': {} + /@scure/base@1.2.6: + resolution: {integrity: sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg==} + dev: false - '@scure/bip32@1.7.0': + /@scure/bip32@1.7.0: + resolution: {integrity: sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw==} dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 + dev: false - '@scure/bip39@1.6.0': + /@scure/bip39@1.6.0: + resolution: {integrity: sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A==} dependencies: '@noble/hashes': 1.8.0 '@scure/base': 1.2.6 + dev: false - '@sideway/address@4.1.5': + /@sideway/address@4.1.5: + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} dependencies: '@hapi/hoek': 9.3.0 - '@sideway/formula@3.0.1': {} + /@sideway/formula@3.0.1: + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} - '@sideway/pinpoint@2.0.0': {} + /@sideway/pinpoint@2.0.0: + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} - '@sinclair/typebox@0.27.10': {} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: false - '@sindresorhus/is@4.6.0': {} + /@sindresorhus/is@4.6.0: + resolution: {integrity: sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==} + engines: {node: '>=10'} + dev: false - '@sindresorhus/is@5.6.0': {} + /@sindresorhus/is@5.6.0: + resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} + engines: {node: '>=14.16'} + dev: false - '@slorber/remark-comment@1.0.0': + /@slorber/remark-comment@1.0.0: + resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} dependencies: micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 + dev: false - '@slorber/static-site-generator-webpack-plugin@4.0.7': + /@slorber/static-site-generator-webpack-plugin@4.0.7: + resolution: {integrity: sha512-Ug7x6z5lwrz0WqdnNFOMYrDQNTPAprvHLSh6+/fmml3qUiz6l5eq+2MzLKWtn/q5K5NpSiFsZTP/fck/3vjSxA==} + engines: {node: '>=14'} dependencies: eval: 0.1.8 p-map: 4.0.0 - webpack-sources: 3.3.4 + webpack-sources: 3.2.3 + dev: false - '@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.29.0)': + /@svgr/babel-plugin-add-jsx-attribute@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-9PYGcXrAxitycIjRmZB+Q0JaN07GZIWaTBIGQzfaZv+qr1n8X1XUEJ5rZ/vx6OVD9RRYlrNnXWExQXcmZeD/BQ==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.29.0)': + /@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0): + resolution: {integrity: sha512-BcCkm/STipKvbCl6b7QFrMh/vx00vIP63k2eM66MfHJzPr6O2U0jYEViXkHJWqXqQYjdeA9cuCl5KWmlwjDvbA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.29.0)': + /@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0): + resolution: {integrity: sha512-5BcGCBfBxB5+XSDSWnhTThfI9jcO5f0Ai2V24gZpG+wXF14BzwxxdDb4g6trdOux0rhibGs385BeFMSmxtS3uA==} + engines: {node: '>=14'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.29.0)': + /@svgr/babel-plugin-replace-jsx-attribute-value@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-8DPaVVE3fd5JKuIC29dqyMB54sA6mfgki2H2+swh+zNJoynC8pMPzOkidqHOSc6Wj032fhl8Z0TVn1GiPpAiJg==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.29.0)': + /@svgr/babel-plugin-svg-dynamic-title@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-FwOEi0Il72iAzlkaHrlemVurgSQRDFbk0OC8dSvD5fSBPHltNh7JtLsxmZUhjYBZo2PpcU/RJvvi6Q0l7O7ogw==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.29.0)': + /@svgr/babel-plugin-svg-em-dimensions@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-gWGsiwjb4tw+ITOJ86ndY/DZZ6cuXMNE/SjcDRg+HLuCmwpcjOktwRF9WgAiycTqJD/QXqL2f8IzE2Rzh7aVXA==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.29.0)': + /@svgr/babel-plugin-transform-react-native-svg@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-2jT3nTayyYP7kI6aGutkyfJ7UMGtuguD72OjeGLwVNyfPRBD8zQthlvL+fAbAKk5n9ZNcvFkp/b1lZ7VsYqVJg==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.29.0)': + /@svgr/babel-plugin-transform-svg-component@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-a1p6LF5Jt33O3rZoVRBqdxL350oge54iZWHNI6LJB5tQ7EelvD/Mb1mfBiZNAan0dt4i3VArkFRjA4iObuNykQ==} + engines: {node: '>=12'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 + dev: false - '@svgr/babel-preset@6.5.1(@babel/core@7.29.0)': + /@svgr/babel-preset@6.5.1(@babel/core@7.26.0): + resolution: {integrity: sha512-6127fvO/FF2oi5EzSQOAjo1LE3OtNVh11R+/8FXa+mHx1ptAaS4cknIjnUA7e6j6fwGGJ17NzaTJFUwOV2zwCw==} + engines: {node: '>=10'} + peerDependencies: + '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.29.0) - '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.29.0) - '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.29.0) - '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.29.0) - - '@svgr/core@6.5.1': + '@babel/core': 7.26.0 + '@svgr/babel-plugin-add-jsx-attribute': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-svg-dynamic-title': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-svg-em-dimensions': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-transform-react-native-svg': 6.5.1(@babel/core@7.26.0) + '@svgr/babel-plugin-transform-svg-component': 6.5.1(@babel/core@7.26.0) + dev: false + + /@svgr/core@6.5.1: + resolution: {integrity: sha512-/xdLSWxK5QkqG524ONSjvg3V/FkNyCv538OIBdQqPNaAta3AsXj/Bd2FbvR87yMbXO2hFSWiAe/Q6IkVPDw+mw==} + engines: {node: '>=10'} dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 6.5.1(@babel/core@7.29.0) + '@babel/core': 7.26.0 + '@svgr/babel-preset': 6.5.1(@babel/core@7.26.0) '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) camelcase: 6.3.0 cosmiconfig: 7.1.0 transitivePeerDependencies: - supports-color + dev: false - '@svgr/hast-util-to-babel-ast@6.5.1': + /@svgr/hast-util-to-babel-ast@6.5.1: + resolution: {integrity: sha512-1hnUxxjd83EAxbL4a0JDJoD3Dao3hmjvyvyEV8PzWmLK3B9m9NPlW7GKjFyoWE8nM7HnXzPcmmSyOW8yOddSXw==} + engines: {node: '>=10'} dependencies: - '@babel/types': 7.29.0 + '@babel/types': 7.26.0 entities: 4.5.0 + dev: false - '@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1)': + /@svgr/plugin-jsx@6.5.1(@svgr/core@6.5.1): + resolution: {integrity: sha512-+UdQxI3jgtSjCykNSlEMuy1jSRQlGC7pqBCPvkG/2dATdWo082zHTTK3uhnAju2/6XpE6B5mZ3z4Z8Ns01S8Gw==} + engines: {node: '>=10'} + peerDependencies: + '@svgr/core': ^6.0.0 dependencies: - '@babel/core': 7.29.0 - '@svgr/babel-preset': 6.5.1(@babel/core@7.29.0) + '@babel/core': 7.26.0 + '@svgr/babel-preset': 6.5.1(@babel/core@7.26.0) '@svgr/core': 6.5.1 '@svgr/hast-util-to-babel-ast': 6.5.1 svg-parser: 2.0.4 transitivePeerDependencies: - supports-color + dev: false - '@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1)': + /@svgr/plugin-svgo@6.5.1(@svgr/core@6.5.1): + resolution: {integrity: sha512-omvZKf8ixP9z6GWgwbtmP9qQMPX4ODXi+wzbVZgomNFsUIlHA1sf4fThdwTWSsZGgvGAG6yE+b/F5gWUkcZ/iQ==} + engines: {node: '>=10'} + peerDependencies: + '@svgr/core': '*' dependencies: '@svgr/core': 6.5.1 cosmiconfig: 7.1.0 deepmerge: 4.3.1 - svgo: 2.8.2 + svgo: 2.8.0 + dev: false - '@svgr/webpack@6.5.1': + /@svgr/webpack@6.5.1: + resolution: {integrity: sha512-cQ/AsnBkXPkEK8cLbv4Dm7JGXq2XrumKnL1dRpJD9rIO2fTIlJI9a1uCciYG1F2aUsox/hJQyNGbt3soDxSRkA==} + engines: {node: '>=10'} dependencies: - '@babel/core': 7.29.0 - '@babel/plugin-transform-react-constant-elements': 7.27.1(@babel/core@7.29.0) - '@babel/preset-env': 7.29.2(@babel/core@7.29.0) - '@babel/preset-react': 7.28.5(@babel/core@7.29.0) - '@babel/preset-typescript': 7.28.5(@babel/core@7.29.0) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@svgr/core': 6.5.1 '@svgr/plugin-jsx': 6.5.1(@svgr/core@6.5.1) '@svgr/plugin-svgo': 6.5.1(@svgr/core@6.5.1) transitivePeerDependencies: - supports-color + dev: false - '@szmarczak/http-timer@5.0.1': + /@szmarczak/http-timer@5.0.1: + resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} + engines: {node: '>=14.16'} dependencies: defer-to-connect: 2.0.1 + dev: false + + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: false + + /@types/acorn@4.0.6: + resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} + dependencies: + '@types/estree': 1.0.6 - '@types/body-parser@1.19.6': + /@types/body-parser@1.19.5: + resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 25.5.0 + '@types/node': 22.8.7 + dev: false - '@types/bonjour@3.5.13': + /@types/bonjour@3.5.13: + resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + dependencies: + '@types/node': 22.8.7 + dev: false + + /@types/color-convert@2.0.4: + resolution: {integrity: sha512-Ub1MmDdyZ7mX//g25uBAoH/mWGd9swVbt8BseymnaE18SU4po/PjmCrHxqIIRjBo3hV/vh1KGr0eMxUhp+t+dQ==} dependencies: - '@types/node': 25.5.0 + '@types/color-name': 1.1.5 + dev: false + + /@types/color-name@1.1.5: + resolution: {integrity: sha512-j2K5UJqGTxeesj6oQuGpMgifpT5k9HprgQd8D1Y0lOFqKHl3PJu5GMeS4Y5EgjS55AE6OQxf8mPED9uaGbf4Cg==} + dev: false - '@types/color-convert@1.9.0': + /@types/color@3.0.6: + resolution: {integrity: sha512-NMiNcZFRUAiUUCCf7zkAelY8eV3aKqfbzyFQlXpPIEeoNDbsEHGpb854V3gzTsGKYj830I5zPuOwU/TP5/cW6A==} dependencies: - '@types/color-name': 2.0.0 + '@types/color-convert': 2.0.4 + dev: false - '@types/color-name@2.0.0': {} + /@types/connect-history-api-fallback@1.5.4: + resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} + dependencies: + '@types/express-serve-static-core': 5.0.1 + '@types/node': 22.8.7 + dev: false - '@types/color@3.0.7': + /@types/connect@3.4.38: + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/color-convert': 1.9.0 + '@types/node': 22.8.7 + dev: false + + /@types/d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==} + dev: false - '@types/connect-history-api-fallback@1.5.4': + /@types/d3-scale@4.0.9: + resolution: {integrity: sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==} dependencies: - '@types/express-serve-static-core': 5.1.1 - '@types/node': 25.5.0 + '@types/d3-time': 3.0.4 + dev: false - '@types/connect@3.4.38': - dependencies: - '@types/node': 25.5.0 + /@types/d3-time@3.0.4: + resolution: {integrity: sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==} + dev: false - '@types/debug@4.1.13': + /@types/debug@4.1.12: + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} dependencies: - '@types/ms': 2.1.0 + '@types/ms': 0.7.34 - '@types/eslint-scope@3.7.7': + /@types/eslint-scope@3.7.7: + resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} dependencies: '@types/eslint': 9.6.1 '@types/estree': 1.0.8 - '@types/eslint@9.6.1': + /@types/eslint@9.6.1: + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} dependencies: '@types/estree': 1.0.8 '@types/json-schema': 7.0.15 - '@types/estree-jsx@1.0.5': + /@types/estree-jsx@1.0.5: + resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 + + /@types/estree@1.0.6: + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/estree@1.0.8': {} + /@types/estree@1.0.8: + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} - '@types/express-serve-static-core@4.19.8': + /@types/express-serve-static-core@4.19.6: + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} dependencies: - '@types/node': 25.5.0 - '@types/qs': 6.15.0 + '@types/node': 22.8.7 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 - '@types/send': 1.2.1 + '@types/send': 0.17.4 + dev: false - '@types/express-serve-static-core@5.1.1': + /@types/express-serve-static-core@5.0.1: + resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==} dependencies: - '@types/node': 25.5.0 - '@types/qs': 6.15.0 + '@types/node': 22.8.7 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 - '@types/send': 1.2.1 + '@types/send': 0.17.4 + dev: false - '@types/express@4.17.25': + /@types/express@4.17.21: + resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} dependencies: - '@types/body-parser': 1.19.6 - '@types/express-serve-static-core': 4.19.8 - '@types/qs': 6.15.0 - '@types/serve-static': 1.15.10 + '@types/body-parser': 1.19.5 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.16 + '@types/serve-static': 1.15.7 + dev: false - '@types/flat@5.0.5': {} + /@types/flat@5.0.5: + resolution: {integrity: sha512-nPLljZQKSnac53KDUDzuzdRfGI0TDb5qPrb+SrQyN3MtdQrOnGsKniHN1iYZsJEBIVQve94Y6gNz22sgISZq+Q==} + dev: false - '@types/gtag.js@0.0.12': {} + /@types/gtag.js@0.0.12: + resolution: {integrity: sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==} + dev: false - '@types/hast@3.0.4': + /@types/hast@3.0.4: + resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} dependencies: '@types/unist': 3.0.3 - '@types/history@4.7.11': {} + /@types/history@4.7.11: + resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} - '@types/html-minifier-terser@6.1.0': {} + /@types/html-minifier-terser@6.1.0: + resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} + dev: false - '@types/http-cache-semantics@4.2.0': {} + /@types/http-cache-semantics@4.0.4: + resolution: {integrity: sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==} + dev: false - '@types/http-errors@2.0.5': {} + /@types/http-errors@2.0.4: + resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} + dev: false - '@types/http-proxy@1.17.17': + /@types/http-proxy@1.17.15: + resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} dependencies: - '@types/node': 25.5.0 + '@types/node': 22.8.7 + dev: false - '@types/istanbul-lib-coverage@2.0.6': {} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: false - '@types/istanbul-lib-report@3.0.3': + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} dependencies: '@types/istanbul-lib-coverage': 2.0.6 + dev: false - '@types/istanbul-reports@3.0.4': + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} dependencies: '@types/istanbul-lib-report': 3.0.3 + dev: false - '@types/json-schema@7.0.15': {} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/katex@0.16.8': {} + /@types/katex@0.16.7: + resolution: {integrity: sha512-HMwFiRujE5PjrgwHQ25+bsLJgowjGjm5Z8FVSf0N6PwgJrwxH0QxzHYDcKsTfV3wva0vzrpqMTJS2jXPr5BMEQ==} + dev: false - '@types/lodash.foreach@4.5.9': + /@types/lodash.foreach@4.5.9: + resolution: {integrity: sha512-vmq0p/FK66PsALXRmK/qsnlLlCpnudvozWYrxJImHujHhXMADdeoPEY10zwmu26437w85wCvdxUqpFi+ALtkiQ==} dependencies: - '@types/lodash': 4.17.24 + '@types/lodash': 4.17.13 + dev: false - '@types/lodash.get@4.4.9': + /@types/lodash.get@4.4.9: + resolution: {integrity: sha512-J5dvW98sxmGnamqf+/aLP87PYXyrha9xIgc2ZlHl6OHMFR2Ejdxep50QfU0abO1+CH6+ugx+8wEUN1toImAinA==} dependencies: - '@types/lodash': 4.17.24 + '@types/lodash': 4.17.13 + dev: false - '@types/lodash.kebabcase@4.1.9': + /@types/lodash.kebabcase@4.1.9: + resolution: {integrity: sha512-kPrrmcVOhSsjAVRovN0lRfrbuidfg0wYsrQa5IYuoQO1fpHHGSme66oyiYA/5eQPVl8Z95OA3HG0+d2SvYC85w==} dependencies: - '@types/lodash': 4.17.24 + '@types/lodash': 4.17.13 + dev: false - '@types/lodash.mapkeys@4.6.9': + /@types/lodash.mapkeys@4.6.9: + resolution: {integrity: sha512-6/ERBCabeDI656LsV+oopLjdnJ/x1PCAE6kkkssH8e4i0K7Pw307noxHCbUc6cAVfTo9vx0Z+k3QZwy1IrUZcA==} dependencies: - '@types/lodash': 4.17.24 + '@types/lodash': 4.17.13 + dev: false - '@types/lodash.omit@4.5.9': + /@types/lodash.omit@4.5.9: + resolution: {integrity: sha512-zuAVFLUPJMOzsw6yawshsYGgq2hWUHtsZgeXHZmSFhaQQFC6EQ021uDKHkSjOpNhSvtNSU9165/o3o/Q51GpTw==} dependencies: - '@types/lodash': 4.17.24 + '@types/lodash': 4.17.13 + dev: false + + /@types/lodash@4.17.13: + resolution: {integrity: sha512-lfx+dftrEZcdBPczf9d0Qv0x+j/rfNCMuC6OcfXmO8gkfeNAY88PgKUbvG56whcN23gc27yenwF6oJZXGFpYxg==} + dev: false - '@types/lodash@4.17.24': {} + /@types/mdast@3.0.15: + resolution: {integrity: sha512-LnwD+mUEfxWMa1QpDraczIn6k0Ee3SMicuYSSzS6ZYl2gKS09EClnJYGd8Du6rfc5r/GZEk5o1mRb8TaTj03sQ==} + dependencies: + '@types/unist': 2.0.11 + dev: false - '@types/mdast@4.0.4': + /@types/mdast@4.0.4: + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} dependencies: '@types/unist': 3.0.3 - '@types/mdx@2.0.13': {} + /@types/mdx@2.0.13: + resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} - '@types/mime@1.3.5': {} + /@types/mime@1.3.5: + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + dev: false - '@types/ms@2.1.0': {} + /@types/ms@0.7.34: + resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/node-forge@1.3.14': + /@types/node-forge@1.3.11: + resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==} dependencies: - '@types/node': 25.5.0 + '@types/node': 22.8.7 + dev: false - '@types/node@17.0.45': {} + /@types/node@17.0.45: + resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} + dev: false - '@types/node@25.5.0': + /@types/node@22.8.7: + resolution: {integrity: sha512-LidcG+2UeYIWcMuMUpBKOnryBWG/rnmOHQR5apjn8myTQcx3rinFRn7DcIFhMnS0PPFSC6OafdIKEad0lj6U0Q==} dependencies: - undici-types: 7.18.2 + undici-types: 6.19.8 - '@types/parse-json@4.0.2': {} + /@types/parse-json@4.0.2: + resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} + dev: false - '@types/prismjs@1.26.6': {} + /@types/prismjs@1.26.5: + resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} + dev: false - '@types/prop-types@15.7.15': {} + /@types/prop-types@15.7.13: + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - '@types/qs@6.15.0': {} + /@types/qs@6.9.16: + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} + dev: false - '@types/range-parser@1.2.7': {} + /@types/range-parser@1.2.7: + resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} + dev: false - '@types/react-router-config@5.0.11': + /@types/react-router-config@5.0.11: + resolution: {integrity: sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 18.3.12 '@types/react-router': 5.1.20 - '@types/react-router-dom@5.3.3': + /@types/react-router-dom@5.3.3: + resolution: {integrity: sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 18.3.12 '@types/react-router': 5.1.20 - '@types/react-router@5.1.20': + /@types/react-router@5.1.20: + resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.28 + '@types/react': 18.3.12 - '@types/react@18.3.28': + /@types/react@18.3.12: + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} dependencies: - '@types/prop-types': 15.7.15 - csstype: 3.2.3 + '@types/prop-types': 15.7.13 + csstype: 3.1.3 - '@types/retry@0.12.0': {} + /@types/retry@0.12.0: + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + dev: false - '@types/sax@1.2.7': + /@types/sax@1.2.7: + resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} dependencies: - '@types/node': 17.0.45 + '@types/node': 22.8.7 + dev: false - '@types/send@0.17.6': + /@types/send@0.17.4: + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 25.5.0 + '@types/node': 22.8.7 + dev: false - '@types/send@1.2.1': + /@types/serve-index@1.9.4: + resolution: {integrity: sha512-qLpGZ/c2fhSs5gnYsQxtDEq3Oy8SXPClIXkW5ghvAvsNuVSA8k+gCONcUCS/UjLEYvYps+e8uBtfgXgvhwfNug==} dependencies: - '@types/node': 25.5.0 + '@types/express': 4.17.21 + dev: false - '@types/serve-index@1.9.4': + /@types/serve-static@1.15.7: + resolution: {integrity: sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==} dependencies: - '@types/express': 4.17.25 + '@types/http-errors': 2.0.4 + '@types/node': 22.8.7 + '@types/send': 0.17.4 + dev: false - '@types/serve-static@1.15.10': + /@types/sockjs@0.3.36: + resolution: {integrity: sha512-MK9V6NzAS1+Ud7JV9lJLFqW85VbC9dq3LmwZCuBe4wBDgKC0Kj/jd8Xl+nSviU+Qc3+m7umHHyHg//2KSa0a0Q==} dependencies: - '@types/http-errors': 2.0.5 - '@types/node': 25.5.0 - '@types/send': 0.17.6 + '@types/node': 22.8.7 + dev: false - '@types/sockjs@0.3.36': - dependencies: - '@types/node': 25.5.0 + /@types/trusted-types@2.0.7: + resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} + requiresBuild: true + dev: false + optional: true - '@types/unist@2.0.11': {} + /@types/unist@2.0.11: + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@types/unist@3.0.3': {} + /@types/unist@3.0.3: + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@types/ws@8.18.1': + /@types/ws@8.5.13: + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} dependencies: - '@types/node': 25.5.0 + '@types/node': 22.8.7 + dev: false - '@types/yargs-parser@21.0.3': {} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: false - '@types/yargs@17.0.35': + /@types/yargs@17.0.33: + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} dependencies: '@types/yargs-parser': 21.0.3 + dev: false - '@ungap/structured-clone@1.3.0': {} + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@webassemblyjs/ast@1.14.1': + /@webassemblyjs/ast@1.14.1: + resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} dependencies: '@webassemblyjs/helper-numbers': 1.13.2 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 - '@webassemblyjs/floating-point-hex-parser@1.13.2': {} + /@webassemblyjs/floating-point-hex-parser@1.13.2: + resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==} - '@webassemblyjs/helper-api-error@1.13.2': {} + /@webassemblyjs/helper-api-error@1.13.2: + resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==} - '@webassemblyjs/helper-buffer@1.14.1': {} + /@webassemblyjs/helper-buffer@1.14.1: + resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==} - '@webassemblyjs/helper-numbers@1.13.2': + /@webassemblyjs/helper-numbers@1.13.2: + resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.13.2 '@webassemblyjs/helper-api-error': 1.13.2 '@xtuc/long': 4.2.2 - '@webassemblyjs/helper-wasm-bytecode@1.13.2': {} + /@webassemblyjs/helper-wasm-bytecode@1.13.2: + resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==} - '@webassemblyjs/helper-wasm-section@1.14.1': + /@webassemblyjs/helper-wasm-section@1.14.1: + resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 '@webassemblyjs/wasm-gen': 1.14.1 - '@webassemblyjs/ieee754@1.13.2': + /@webassemblyjs/ieee754@1.13.2: + resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==} dependencies: '@xtuc/ieee754': 1.2.0 - '@webassemblyjs/leb128@1.13.2': + /@webassemblyjs/leb128@1.13.2: + resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==} dependencies: '@xtuc/long': 4.2.2 - '@webassemblyjs/utf8@1.13.2': {} + /@webassemblyjs/utf8@1.13.2: + resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==} - '@webassemblyjs/wasm-edit@1.14.1': + /@webassemblyjs/wasm-edit@1.14.1: + resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 @@ -7386,7 +3752,8 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 '@webassemblyjs/wast-printer': 1.14.1 - '@webassemblyjs/wasm-gen@1.14.1': + /@webassemblyjs/wasm-gen@1.14.1: + resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-wasm-bytecode': 1.13.2 @@ -7394,14 +3761,16 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wasm-opt@1.14.1': + /@webassemblyjs/wasm-opt@1.14.1: + resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-buffer': 1.14.1 '@webassemblyjs/wasm-gen': 1.14.1 '@webassemblyjs/wasm-parser': 1.14.1 - '@webassemblyjs/wasm-parser@1.14.1': + /@webassemblyjs/wasm-parser@1.14.1: + resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==} dependencies: '@webassemblyjs/ast': 1.14.1 '@webassemblyjs/helper-api-error': 1.13.2 @@ -7410,240 +3779,425 @@ snapshots: '@webassemblyjs/leb128': 1.13.2 '@webassemblyjs/utf8': 1.13.2 - '@webassemblyjs/wast-printer@1.14.1': + /@webassemblyjs/wast-printer@1.14.1: + resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==} dependencies: '@webassemblyjs/ast': 1.14.1 '@xtuc/long': 4.2.2 - '@xtuc/ieee754@1.2.0': {} + /@xtuc/ieee754@1.2.0: + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - '@xtuc/long@4.2.2': {} + /@xtuc/long@4.2.2: + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - abitype@1.2.3(typescript@5.2.2): - optionalDependencies: - typescript: 5.2.2 + /abitype@1.2.3(typescript@5.4.5): + resolution: {integrity: sha512-Ofer5QUnuUdTFsBRwARMoWKOH1ND5ehwYhJ3OJ/BQO+StkwQjHw0XyVh4vDttzHB7QOFhPHa/o413PJ82gU/Tg==} + peerDependencies: + typescript: '>=5.0.4' + zod: ^3.22.0 || ^4.0.0 + peerDependenciesMeta: + typescript: + optional: true + zod: + optional: true + dependencies: + typescript: 5.4.5 + dev: false - accepts@1.3.8: + /accepts@1.3.8: + resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} + engines: {node: '>= 0.6'} dependencies: mime-types: 2.1.35 negotiator: 0.6.3 + dev: false - acorn-import-phases@1.0.4(acorn@8.16.0): + /acorn-import-phases@1.0.4(acorn@8.16.0): + resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==} + engines: {node: '>=10.13.0'} + peerDependencies: + acorn: ^8.14.0 dependencies: acorn: 8.16.0 - acorn-jsx@5.3.2(acorn@8.16.0): + /acorn-jsx@5.3.2(acorn@8.14.0): + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.16.0 + acorn: 8.14.0 - acorn-walk@8.3.5: + /acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} dependencies: - acorn: 8.16.0 + acorn: 8.14.0 + dev: false + + /acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true - acorn@8.16.0: {} + /acorn@8.16.0: + resolution: {integrity: sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==} + engines: {node: '>=0.4.0'} + hasBin: true - address@1.2.2: {} + /address@1.2.2: + resolution: {integrity: sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==} + engines: {node: '>= 10.0.0'} + dev: false - aggregate-error@3.1.0: + /aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} dependencies: clean-stack: 2.2.0 indent-string: 4.0.0 + dev: false - ajv-formats@2.1.1(ajv@8.18.0): - optionalDependencies: - ajv: 8.18.0 + /ajv-formats@2.1.1(ajv@8.17.1): + resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + dependencies: + ajv: 8.17.1 - ajv-keywords@3.5.2(ajv@6.14.0): + /ajv-keywords@3.5.2(ajv@6.12.6): + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + peerDependencies: + ajv: ^6.9.1 dependencies: - ajv: 6.14.0 + ajv: 6.12.6 + dev: false - ajv-keywords@5.1.0(ajv@8.18.0): + /ajv-keywords@5.1.0(ajv@8.17.1): + resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} + peerDependencies: + ajv: ^8.8.2 dependencies: - ajv: 8.18.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 - ajv@6.14.0: + /ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 json-schema-traverse: 0.4.1 uri-js: 4.4.1 + dev: false - ajv@8.18.0: + /ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} dependencies: fast-deep-equal: 3.1.3 - fast-uri: 3.1.0 + fast-uri: 3.0.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - algoliasearch-helper@3.28.1(algoliasearch@4.27.0): + /algoliasearch-helper@3.26.1(algoliasearch@4.25.3): + resolution: {integrity: sha512-CAlCxm4fYBXtvc5MamDzP6Svu8rW4z9me4DCBY1rQ2UDJ0u0flWmusQ8M3nOExZsLLRcUwUPoRAPMrhzOG3erw==} + peerDependencies: + algoliasearch: '>= 3.1 < 6' dependencies: '@algolia/events': 4.0.1 - algoliasearch: 4.27.0 - - algoliasearch@4.27.0: - dependencies: - '@algolia/cache-browser-local-storage': 4.27.0 - '@algolia/cache-common': 4.27.0 - '@algolia/cache-in-memory': 4.27.0 - '@algolia/client-account': 4.27.0 - '@algolia/client-analytics': 4.27.0 - '@algolia/client-common': 4.27.0 - '@algolia/client-personalization': 4.27.0 - '@algolia/client-search': 4.27.0 - '@algolia/logger-common': 4.27.0 - '@algolia/logger-console': 4.27.0 - '@algolia/recommend': 4.27.0 - '@algolia/requester-browser-xhr': 4.27.0 - '@algolia/requester-common': 4.27.0 - '@algolia/requester-node-http': 4.27.0 - '@algolia/transporter': 4.27.0 - - algoliasearch@5.50.0: - dependencies: - '@algolia/abtesting': 1.16.0 - '@algolia/client-abtesting': 5.50.0 - '@algolia/client-analytics': 5.50.0 - '@algolia/client-common': 5.50.0 - '@algolia/client-insights': 5.50.0 - '@algolia/client-personalization': 5.50.0 - '@algolia/client-query-suggestions': 5.50.0 - '@algolia/client-search': 5.50.0 - '@algolia/ingestion': 1.50.0 - '@algolia/monitoring': 1.50.0 - '@algolia/recommend': 5.50.0 - '@algolia/requester-browser-xhr': 5.50.0 - '@algolia/requester-fetch': 5.50.0 - '@algolia/requester-node-http': 5.50.0 - - ansi-align@3.0.1: + algoliasearch: 4.25.3 + dev: false + + /algoliasearch@4.25.3: + resolution: {integrity: sha512-kgeIixgDiB+FbH1cHDFUtTNkxdJadHryF8lSPIHHQkEeUrzZA1Hi3PLL+EgNubO0dch4ALNb5G4rw+FDCv3Vbw==} + dependencies: + '@algolia/cache-browser-local-storage': 4.25.3 + '@algolia/cache-common': 4.25.3 + '@algolia/cache-in-memory': 4.25.3 + '@algolia/client-account': 4.25.3 + '@algolia/client-analytics': 4.25.3 + '@algolia/client-common': 4.25.3 + '@algolia/client-personalization': 4.25.3 + '@algolia/client-search': 4.25.3 + '@algolia/logger-common': 4.25.3 + '@algolia/logger-console': 4.25.3 + '@algolia/recommend': 4.25.3 + '@algolia/requester-browser-xhr': 4.25.3 + '@algolia/requester-common': 4.25.3 + '@algolia/requester-node-http': 4.25.3 + '@algolia/transporter': 4.25.3 + dev: false + + /algoliasearch@5.12.0: + resolution: {integrity: sha512-psGBRYdGgik8I6m28iAB8xpubvjEt7UQU+w5MAJUA2324WHiGoHap5BPkkjB14rMaXeRts6pmOsrVIglGyOVwg==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/client-abtesting': 5.12.0 + '@algolia/client-analytics': 5.12.0 + '@algolia/client-common': 5.12.0 + '@algolia/client-insights': 5.12.0 + '@algolia/client-personalization': 5.12.0 + '@algolia/client-query-suggestions': 5.12.0 + '@algolia/client-search': 5.12.0 + '@algolia/ingestion': 1.12.0 + '@algolia/monitoring': 1.12.0 + '@algolia/recommend': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + dev: false + + /algoliasearch@5.44.0: + resolution: {integrity: sha512-f8IpsbdQjzTjr/4mJ/jv5UplrtyMnnciGax6/B0OnLCs2/GJTK13O4Y7Ff1AvJVAaztanH+m5nzPoUq6EAy+aA==} + engines: {node: '>= 14.0.0'} + dependencies: + '@algolia/abtesting': 1.10.0 + '@algolia/client-abtesting': 5.44.0 + '@algolia/client-analytics': 5.44.0 + '@algolia/client-common': 5.44.0 + '@algolia/client-insights': 5.44.0 + '@algolia/client-personalization': 5.44.0 + '@algolia/client-query-suggestions': 5.44.0 + '@algolia/client-search': 5.44.0 + '@algolia/ingestion': 1.44.0 + '@algolia/monitoring': 1.44.0 + '@algolia/recommend': 5.44.0 + '@algolia/requester-browser-xhr': 5.44.0 + '@algolia/requester-fetch': 5.44.0 + '@algolia/requester-node-http': 5.44.0 + dev: false + + /ansi-align@3.0.1: + resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} dependencies: string-width: 4.2.3 + dev: false - ansi-html-community@0.0.8: {} + /ansi-html-community@0.0.8: + resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} + engines: {'0': node >= 0.8.0} + hasBin: true + dev: false - ansi-regex@5.0.1: {} + /ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + dev: false - ansi-regex@6.2.2: {} + /ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + engines: {node: '>=12'} + dev: false - ansi-styles@4.3.0: + /ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} dependencies: color-convert: 2.0.1 + dev: false - ansi-styles@6.2.3: {} + /ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + dev: false - any-promise@1.3.0: {} + /any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + dev: false - anymatch@3.1.3: + /anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 - picomatch: 2.3.2 + picomatch: 2.3.1 + dev: false - arg@5.0.2: {} + /arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + dev: false - argparse@1.0.10: + /argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} dependencies: sprintf-js: 1.0.3 + dev: false - argparse@2.0.1: {} + /argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: false + + /array-flatten@1.1.1: + resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} + dev: false - array-flatten@1.1.1: {} + /array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + dev: false - array-union@2.1.0: {} + /astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} + hasBin: true - astring@1.9.0: {} + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: false - at-least-node@1.0.0: {} + /autoprefixer@10.4.20(postcss@8.4.47): + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.24.2 + caniuse-lite: 1.0.30001677 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.47 + postcss-value-parser: 4.2.0 + dev: false - autoprefixer@10.4.27(postcss@8.5.8): + /autoprefixer@10.4.22(postcss@8.5.6): + resolution: {integrity: sha512-ARe0v/t9gO28Bznv6GgqARmVqcWOV3mfgUPn9becPHMiD3o9BwlRgaeccZnwTpZ7Zwqrm+c1sUSsMxIzQzc8Xg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001782 + browserslist: 4.28.0 + caniuse-lite: 1.0.30001756 fraction.js: 5.3.4 + normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - babel-loader@9.2.1(@babel/core@7.29.0)(webpack@5.105.4): + /babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.105.4): + resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@babel/core': ^7.12.0 + webpack: 5.105.4 dependencies: - '@babel/core': 7.29.0 + '@babel/core': 7.26.0 find-cache-dir: 4.0.0 - schema-utils: 4.3.3 + schema-utils: 4.2.0 webpack: 5.105.4 + dev: false - babel-plugin-dynamic-import-node@2.3.3: + /babel-plugin-dynamic-import-node@2.3.3: + resolution: {integrity: sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==} dependencies: - object.assign: 4.1.7 + object.assign: 4.1.5 + dev: false - babel-plugin-polyfill-corejs2@0.4.17(@babel/core@7.29.0): + /babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0): + resolution: {integrity: sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.29.0 - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) + '@babel/compat-data': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: - supports-color + dev: false - babel-plugin-polyfill-corejs3@0.13.0(@babel/core@7.29.0): + /babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) - core-js-compat: 3.49.0 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.39.0 transitivePeerDependencies: - supports-color + dev: false - babel-plugin-polyfill-corejs3@0.14.2(@babel/core@7.29.0): + /babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.26.0): + resolution: {integrity: sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) - core-js-compat: 3.49.0 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) transitivePeerDependencies: - supports-color + dev: false - babel-plugin-polyfill-regenerator@0.6.8(@babel/core@7.29.0): - dependencies: - '@babel/core': 7.29.0 - '@babel/helper-define-polyfill-provider': 0.6.8(@babel/core@7.29.0) - transitivePeerDependencies: - - supports-color + /bail@2.0.2: + resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} - bail@2.0.2: {} + /balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + dev: false - balanced-match@1.0.2: {} + /baseline-browser-mapping@2.10.23: + resolution: {integrity: sha512-xwVXGqevyKPsiuQdLj+dZMVjidjJV508TBqexND5HrF89cGdCYCJFB3qhcxRHSeMctdCfbR1jrxBajhDy7o29g==} + engines: {node: '>=6.0.0'} + hasBin: true - baseline-browser-mapping@2.10.12: {} + /baseline-browser-mapping@2.8.31: + resolution: {integrity: sha512-a28v2eWrrRWPpJSzxc+mKwm0ZtVx/G8SepdQZDArnXYU/XS+IF6mp8aB/4E+hH1tyGCoDo3KlUCdlSxGDsRkAw==} + hasBin: true + dev: false - batch@0.6.1: {} + /batch@0.6.1: + resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} + dev: false - big.js@5.2.2: {} + /big.js@5.2.2: + resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} + dev: false - binary-extensions@2.3.0: {} + /binary-extensions@2.3.0: + resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} + engines: {node: '>=8'} + dev: false - body-parser@1.20.4: + /body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} dependencies: bytes: 3.1.2 content-type: 1.0.5 debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - http-errors: 2.0.1 + http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.14.2 - raw-body: 2.5.3 + qs: 6.13.0 + raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 transitivePeerDependencies: - supports-color + dev: false - bonjour-service@1.3.0: + /bonjour-service@1.2.1: + resolution: {integrity: sha512-oSzCS2zV14bh2kji6vNe7vrpJYCHGvcZnlffFQ1MEoX/WOeQ/teD8SYWKR942OI3INjq8OMNJlbPK5LLLUxFDw==} dependencies: fast-deep-equal: 3.1.3 multicast-dns: 7.2.5 + dev: false - boolbase@1.0.0: {} + /boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + dev: false - boxen@6.2.1: + /boxen@6.2.1: + resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: ansi-align: 3.0.1 camelcase: 6.3.0 @@ -7653,135 +4207,225 @@ snapshots: type-fest: 2.19.0 widest-line: 4.0.1 wrap-ansi: 8.1.0 + dev: false - boxen@7.1.1: + /boxen@7.1.1: + resolution: {integrity: sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==} + engines: {node: '>=14.16'} dependencies: ansi-align: 3.0.1 camelcase: 7.0.1 - chalk: 5.6.2 + chalk: 5.3.0 cli-boxes: 3.0.0 string-width: 5.1.2 type-fest: 2.19.0 widest-line: 4.0.1 wrap-ansi: 8.1.0 + dev: false - brace-expansion@1.1.13: + /brace-expansion@1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: balanced-match: 1.0.2 concat-map: 0.0.1 + dev: false + + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: false - braces@3.0.3: + /braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} dependencies: fill-range: 7.1.1 + dev: false + + /browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001677 + electron-to-chromium: 1.5.50 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + dev: false + + /browserslist@4.28.0: + resolution: {integrity: sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + baseline-browser-mapping: 2.8.31 + caniuse-lite: 1.0.30001756 + electron-to-chromium: 1.5.259 + node-releases: 2.0.27 + update-browserslist-db: 1.1.4(browserslist@4.28.0) + dev: false - browserslist@4.28.1: + /browserslist@4.28.2: + resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true dependencies: - baseline-browser-mapping: 2.10.12 - caniuse-lite: 1.0.30001782 - electron-to-chromium: 1.5.328 - node-releases: 2.0.36 - update-browserslist-db: 1.2.3(browserslist@4.28.1) + baseline-browser-mapping: 2.10.23 + caniuse-lite: 1.0.30001791 + electron-to-chromium: 1.5.344 + node-releases: 2.0.38 + update-browserslist-db: 1.2.3(browserslist@4.28.2) - buffer-from@1.1.2: {} + /buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - bytes@3.0.0: {} + /bytes@3.0.0: + resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==} + engines: {node: '>= 0.8'} + dev: false - bytes@3.1.2: {} + /bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + dev: false - cacheable-lookup@7.0.0: {} + /cacheable-lookup@7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: false - cacheable-request@10.2.14: + /cacheable-request@10.2.14: + resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} + engines: {node: '>=14.16'} dependencies: - '@types/http-cache-semantics': 4.2.0 + '@types/http-cache-semantics': 4.0.4 get-stream: 6.0.1 - http-cache-semantics: 4.2.0 + http-cache-semantics: 4.1.1 keyv: 4.5.4 mimic-response: 4.0.0 - normalize-url: 8.1.1 + normalize-url: 8.0.1 responselike: 3.0.0 + dev: false - call-bind-apply-helpers@1.0.2: + /call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} dependencies: + es-define-property: 1.0.0 es-errors: 1.3.0 function-bind: 1.1.2 - - call-bind@1.0.8: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 - get-intrinsic: 1.3.0 + get-intrinsic: 1.2.4 set-function-length: 1.2.2 + dev: false - call-bound@1.0.4: - dependencies: - call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.3.0 - - callsites@3.1.0: {} + /callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + dev: false - camel-case@4.1.2: + /camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 tslib: 2.8.1 + dev: false - camelcase-css@2.0.1: {} + /camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + dev: false - camelcase@6.3.0: {} + /camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + dev: false - camelcase@7.0.1: {} + /camelcase@7.0.1: + resolution: {integrity: sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==} + engines: {node: '>=14.16'} + dev: false - caniuse-api@3.0.0: + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.28.1 - caniuse-lite: 1.0.30001782 + browserslist: 4.28.0 + caniuse-lite: 1.0.30001756 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 + dev: false + + /caniuse-lite@1.0.30001677: + resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} + dev: false + + /caniuse-lite@1.0.30001756: + resolution: {integrity: sha512-4HnCNKbMLkLdhJz3TToeVWHSnfJvPaq6vu/eRP0Ahub/07n484XHhBF5AJoSGHdVrS8tKFauUQz8Bp9P7LVx7A==} + dev: false - caniuse-lite@1.0.30001782: {} + /caniuse-lite@1.0.30001791: + resolution: {integrity: sha512-yk0l/YSrOnFZk3UROpDLQD9+kC1l4meK/wed583AXrzoarMGJcbRi2Q4RaUYbKxYAsZ8sWmaSa/DsLmdBeI1vQ==} - ccount@2.0.1: {} + /ccount@2.0.1: + resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chalk@4.1.2: + /chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} dependencies: ansi-styles: 4.3.0 supports-color: 7.2.0 + dev: false - chalk@5.6.2: {} + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false - char-regex@1.0.2: {} + /char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + dev: false - character-entities-html4@2.1.0: {} + /character-entities-html4@2.1.0: + resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - character-entities-legacy@3.0.0: {} + /character-entities-legacy@3.0.0: + resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - character-entities@2.0.2: {} + /character-entities@2.0.2: + resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} - character-reference-invalid@2.0.1: {} + /character-reference-invalid@2.0.1: + resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} - cheerio-select@2.1.0: + /cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: boolbase: 1.0.0 - css-select: 5.2.2 - css-what: 6.2.2 + css-select: 5.1.0 + css-what: 6.1.0 domelementtype: 2.3.0 domhandler: 5.0.3 - domutils: 3.2.2 + domutils: 3.1.0 + dev: false - cheerio@1.2.0: + /cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} dependencies: cheerio-select: 2.1.0 dom-serializer: 2.0.0 domhandler: 5.0.3 - domutils: 3.2.2 - encoding-sniffer: 0.2.1 - htmlparser2: 10.1.0 - parse5: 7.3.0 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.2.1 parse5-htmlparser2-tree-adapter: 7.1.0 - parse5-parser-stream: 7.1.2 - undici: 7.24.6 - whatwg-mimetype: 4.0.0 + dev: false - chokidar@3.6.0: + /chokidar@3.6.0: + resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} + engines: {node: '>= 8.10.0'} dependencies: anymatch: 3.1.3 braces: 3.0.3 @@ -7792,357 +4436,919 @@ snapshots: readdirp: 3.6.0 optionalDependencies: fsevents: 2.3.3 + dev: false - chokidar@4.0.3: + /chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} dependencies: - readdirp: 4.1.2 + readdirp: 4.0.2 + dev: false - chrome-trace-event@1.0.4: {} + /chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} + engines: {node: '>=6.0'} - ci-info@3.9.0: {} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: false - classnames@2.5.1: {} + /classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + dev: false - clean-css@5.3.3: + /clean-css@5.3.3: + resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} + engines: {node: '>= 10.0'} dependencies: source-map: 0.6.1 + dev: false - clean-stack@2.2.0: {} + /clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + dev: false - cli-boxes@3.0.0: {} + /cli-boxes@3.0.0: + resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} + engines: {node: '>=10'} + dev: false - cli-table3@0.6.5: + /cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 + dev: false - clone-deep@4.0.1: + /clone-deep@4.0.1: + resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} + engines: {node: '>=6'} dependencies: is-plain-object: 2.0.4 kind-of: 6.0.3 shallow-clone: 3.0.1 - clsx@2.1.1: {} + /clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + dev: false - collapse-white-space@2.1.0: {} + /collapse-white-space@2.1.0: + resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} - color-convert@2.0.1: + /color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} dependencies: color-name: 1.1.4 + dev: false - color-name@1.1.4: {} + /color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + dev: false - color-string@1.9.1: + /color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} dependencies: color-name: 1.1.4 - simple-swizzle: 0.2.4 + simple-swizzle: 0.2.2 + dev: false - color2k@2.0.3: {} + /color2k@2.0.3: + resolution: {integrity: sha512-zW190nQTIoXcGCaU08DvVNFTmQhUpnJfVuAKfWqUQkflXKpaDdpaYoM0iluLS9lgJNHyBF58KKA2FBEwkD7wog==} + dev: false - color@4.2.3: + /color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} dependencies: color-convert: 2.0.1 color-string: 1.9.1 + dev: false - colord@2.9.3: {} + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: false - colorette@2.0.20: {} + /colorette@2.0.20: + resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} + dev: false - combine-promises@1.2.0: {} + /combine-promises@1.2.0: + resolution: {integrity: sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==} + engines: {node: '>=10'} + dev: false - comma-separated-tokens@2.0.3: {} + /comma-separated-tokens@2.0.3: + resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@10.0.1: {} + /commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + dev: false - commander@2.20.3: {} + /commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} - commander@4.1.1: {} + /commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + dev: false - commander@5.1.0: {} + /commander@5.1.0: + resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} + engines: {node: '>= 6'} - commander@7.2.0: {} + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: false - commander@8.3.0: {} + /commander@8.3.0: + resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} + engines: {node: '>= 12'} + dev: false - common-path-prefix@3.0.0: {} + /common-path-prefix@3.0.0: + resolution: {integrity: sha512-QE33hToZseCH3jS0qN96O/bSh3kaw/h+Tq7ngyY9eWDUnTlTNUyqfqvCXioLe5Na5jFsL78ra/wuBU4iuEgd4w==} + dev: false - compressible@2.0.18: + /compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.54.0 + dev: false - compression@1.8.1: + /compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} + engines: {node: '>= 0.8.0'} dependencies: bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9 negotiator: 0.6.4 - on-headers: 1.1.0 + on-headers: 1.0.2 safe-buffer: 5.2.1 vary: 1.1.2 transitivePeerDependencies: - supports-color + dev: false - concat-map@0.0.1: {} + /concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + dev: false - concat-stream@1.6.2: + /concat-stream@1.6.2: + resolution: {integrity: sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==} + engines: {'0': node >= 0.8} dependencies: buffer-from: 1.1.2 inherits: 2.0.4 readable-stream: 2.3.8 typedarray: 0.0.6 + dev: true - config-chain@1.1.13: + /config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} dependencies: ini: 1.3.8 proto-list: 1.2.4 + dev: false - configstore@6.0.0: + /configstore@6.0.0: + resolution: {integrity: sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==} + engines: {node: '>=12'} dependencies: dot-prop: 6.0.1 graceful-fs: 4.2.11 unique-string: 3.0.0 write-file-atomic: 3.0.3 xdg-basedir: 5.1.0 + dev: false - connect-history-api-fallback@2.0.0: {} + /connect-history-api-fallback@2.0.0: + resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} + engines: {node: '>=0.8'} + dev: false - consola@2.15.3: {} + /consola@2.15.3: + resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + dev: false - content-disposition@0.5.2: {} + /content-disposition@0.5.2: + resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} + engines: {node: '>= 0.6'} + dev: false - content-disposition@0.5.4: + /content-disposition@0.5.4: + resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} + engines: {node: '>= 0.6'} dependencies: safe-buffer: 5.2.1 + dev: false - content-type@1.0.5: {} + /content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + dev: false - convert-source-map@2.0.0: {} + /convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + dev: false - cookie-signature@1.0.7: {} + /cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + dev: false - cookie@0.7.2: {} + /cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} + engines: {node: '>= 0.6'} + dev: false - copy-text-to-clipboard@3.2.2: {} + /copy-text-to-clipboard@3.2.2: + resolution: {integrity: sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==} + engines: {node: '>=12'} + dev: false - copy-webpack-plugin@11.0.0(webpack@5.105.4): + /copy-webpack-plugin@11.0.0(webpack@5.105.4): + resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==} + engines: {node: '>= 14.15.0'} + peerDependencies: + webpack: 5.105.4 dependencies: - fast-glob: 3.3.3 + fast-glob: 3.3.2 glob-parent: 6.0.2 globby: 13.2.2 normalize-path: 3.0.0 - schema-utils: 4.3.3 + schema-utils: 4.2.0 serialize-javascript: 6.0.2 webpack: 5.105.4 + dev: false - core-js-compat@3.49.0: + /core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} dependencies: - browserslist: 4.28.1 + browserslist: 4.28.0 + dev: false - core-js-pure@3.49.0: {} + /core-js-pure@3.39.0: + resolution: {integrity: sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==} + requiresBuild: true + dev: false - core-js@3.49.0: {} + /core-js@3.39.0: + resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} + requiresBuild: true + dev: false - core-util-is@1.0.3: {} + /core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + /cose-base@1.0.3: + resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} + dependencies: + layout-base: 1.0.2 + dev: false - cosmiconfig@6.0.0: + /cosmiconfig@6.0.0: + resolution: {integrity: sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg==} + engines: {node: '>=8'} dependencies: '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 + import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.3 + yaml: 1.10.2 + dev: false - cosmiconfig@7.1.0: + /cosmiconfig@7.1.0: + resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} + engines: {node: '>=10'} dependencies: '@types/parse-json': 4.0.2 - import-fresh: 3.3.1 + import-fresh: 3.3.0 parse-json: 5.2.0 path-type: 4.0.0 - yaml: 1.10.3 + yaml: 1.10.2 + dev: false - cosmiconfig@8.3.6(typescript@5.2.2): + /cosmiconfig@8.3.6(typescript@5.4.5): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=4.9.5' + peerDependenciesMeta: + typescript: + optional: true dependencies: - import-fresh: 3.3.1 - js-yaml: 4.1.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 parse-json: 5.2.0 path-type: 4.0.0 - optionalDependencies: - typescript: 5.2.2 + typescript: 5.4.5 + dev: false - cross-spawn@5.1.0: + /cross-spawn@5.1.0: + resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} dependencies: lru-cache: 4.1.5 shebang-command: 1.2.0 which: 1.2.14 + dev: true - cross-spawn@7.0.6: + /cross-spawn@7.0.3: + resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} + engines: {node: '>= 8'} dependencies: path-key: 3.1.1 shebang-command: 2.0.0 which: 2.0.2 + dev: false - crypto-random-string@4.0.0: + /crypto-random-string@4.0.0: + resolution: {integrity: sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==} + engines: {node: '>=12'} dependencies: type-fest: 1.4.0 + dev: false - css-declaration-sorter@6.4.1(postcss@8.5.8): + /css-declaration-sorter@6.4.1(postcss@8.5.6): + resolution: {integrity: sha512-rtdthzxKuyq6IzqX6jEcIzQF/YqccluefyCYheovBOLhFT/drQA9zj/UbRAa9J7C0o6EG6u3E6g+vKkay7/k3g==} + engines: {node: ^10 || ^12 || >=14} + peerDependencies: + postcss: ^8.0.9 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - css-loader@6.11.0(webpack@5.105.4): + /css-loader@6.11.0(webpack@5.105.4): + resolution: {integrity: sha512-CTJ+AEQJjq5NzLga5pE39qdiSV56F8ywCIsqNIRF0r7BDgWsN25aazToqAFg7ZrtA/U016xudB3ffgweORxX7g==} + engines: {node: '>= 12.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: 5.105.4 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true dependencies: - icss-utils: 5.1.0(postcss@8.5.8) - postcss: 8.5.8 - postcss-modules-extract-imports: 3.1.0(postcss@8.5.8) - postcss-modules-local-by-default: 4.2.0(postcss@8.5.8) - postcss-modules-scope: 3.2.1(postcss@8.5.8) - postcss-modules-values: 4.0.0(postcss@8.5.8) + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-modules-extract-imports: 3.1.0(postcss@8.5.6) + postcss-modules-local-by-default: 4.0.5(postcss@8.5.6) + postcss-modules-scope: 3.2.0(postcss@8.5.6) + postcss-modules-values: 4.0.0(postcss@8.5.6) postcss-value-parser: 4.2.0 - semver: 7.7.4 - optionalDependencies: + semver: 7.6.3 webpack: 5.105.4 + dev: false - css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.3)(webpack@5.105.4): + /css-minimizer-webpack-plugin@4.2.2(clean-css@5.3.3)(webpack@5.105.4): + resolution: {integrity: sha512-s3Of/4jKfw1Hj9CxEO1E5oXhQAxlayuHO2y/ML+C6I9sQ7FdzfEV6QgMLN3vI+qFsjJGIAFLKtQK7t8BOXAIyA==} + engines: {node: '>= 14.15.0'} + peerDependencies: + '@parcel/css': '*' + '@swc/css': '*' + clean-css: '*' + csso: '*' + esbuild: '*' + lightningcss: '*' + webpack: 5.105.4 + peerDependenciesMeta: + '@parcel/css': + optional: true + '@swc/css': + optional: true + clean-css: + optional: true + csso: + optional: true + esbuild: + optional: true + lightningcss: + optional: true dependencies: - cssnano: 5.1.15(postcss@8.5.8) + clean-css: 5.3.3 + cssnano: 5.1.15(postcss@8.5.6) jest-worker: 29.7.0 - postcss: 8.5.8 - schema-utils: 4.3.3 + postcss: 8.5.6 + schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 webpack: 5.105.4 - optionalDependencies: - clean-css: 5.3.3 + dev: false - css-select@4.3.0: + /css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} dependencies: boolbase: 1.0.0 - css-what: 6.2.2 + css-what: 6.1.0 domhandler: 4.3.1 domutils: 2.8.0 nth-check: 2.1.1 + dev: false - css-select@5.2.2: + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} dependencies: boolbase: 1.0.0 - css-what: 6.2.2 + css-what: 6.1.0 domhandler: 5.0.3 - domutils: 3.2.2 + domutils: 3.1.0 nth-check: 2.1.1 + dev: false - css-tree@1.1.3: + /css-tree@1.1.3: + resolution: {integrity: sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==} + engines: {node: '>=8.0.0'} dependencies: mdn-data: 2.0.14 source-map: 0.6.1 + dev: false + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: false + + /cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + dev: false + + /cssnano-preset-advanced@5.3.10(postcss@8.5.6): + resolution: {integrity: sha512-fnYJyCS9jgMU+cmHO1rPSPf9axbQyD7iUhLO5Df6O4G+fKIOMps+ZbU0PdGFejFBBZ3Pftf18fn1eG7MAPUSWQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + autoprefixer: 10.4.22(postcss@8.5.6) + cssnano-preset-default: 5.2.14(postcss@8.5.6) + postcss: 8.5.6 + postcss-discard-unused: 5.1.0(postcss@8.5.6) + postcss-merge-idents: 5.1.1(postcss@8.5.6) + postcss-reduce-idents: 5.2.0(postcss@8.5.6) + postcss-zindex: 5.1.0(postcss@8.5.6) + dev: false + + /cssnano-preset-default@5.2.14(postcss@8.5.6): + resolution: {integrity: sha512-t0SFesj/ZV2OTylqQVOrFgEh5uanxbO6ZAdeCrNsUQ6fVuXwYTxJPNAGvGTxHbD68ldIJNec7PyYZDBrfDQ+6A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + css-declaration-sorter: 6.4.1(postcss@8.5.6) + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-calc: 8.2.4(postcss@8.5.6) + postcss-colormin: 5.3.1(postcss@8.5.6) + postcss-convert-values: 5.1.3(postcss@8.5.6) + postcss-discard-comments: 5.1.2(postcss@8.5.6) + postcss-discard-duplicates: 5.1.0(postcss@8.5.6) + postcss-discard-empty: 5.1.1(postcss@8.5.6) + postcss-discard-overridden: 5.1.0(postcss@8.5.6) + postcss-merge-longhand: 5.1.7(postcss@8.5.6) + postcss-merge-rules: 5.1.4(postcss@8.5.6) + postcss-minify-font-values: 5.1.0(postcss@8.5.6) + postcss-minify-gradients: 5.1.1(postcss@8.5.6) + postcss-minify-params: 5.1.4(postcss@8.5.6) + postcss-minify-selectors: 5.2.1(postcss@8.5.6) + postcss-normalize-charset: 5.1.0(postcss@8.5.6) + postcss-normalize-display-values: 5.1.0(postcss@8.5.6) + postcss-normalize-positions: 5.1.1(postcss@8.5.6) + postcss-normalize-repeat-style: 5.1.1(postcss@8.5.6) + postcss-normalize-string: 5.1.0(postcss@8.5.6) + postcss-normalize-timing-functions: 5.1.0(postcss@8.5.6) + postcss-normalize-unicode: 5.1.1(postcss@8.5.6) + postcss-normalize-url: 5.1.0(postcss@8.5.6) + postcss-normalize-whitespace: 5.1.1(postcss@8.5.6) + postcss-ordered-values: 5.1.3(postcss@8.5.6) + postcss-reduce-initial: 5.1.2(postcss@8.5.6) + postcss-reduce-transforms: 5.1.0(postcss@8.5.6) + postcss-svgo: 5.1.0(postcss@8.5.6) + postcss-unique-selectors: 5.1.1(postcss@8.5.6) + dev: false + + /cssnano-utils@3.1.0(postcss@8.5.6): + resolution: {integrity: sha512-JQNR19/YZhz4psLX/rQ9M83e3z2Wf/HdJbryzte4a3NSuafyp9w/I4U+hx5C2S9g41qlstH7DEWnZaaj83OuEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.5.6 + dev: false - css-what@6.2.2: {} - - cssesc@3.0.0: {} - - cssnano-preset-advanced@5.3.10(postcss@8.5.8): - dependencies: - autoprefixer: 10.4.27(postcss@8.5.8) - cssnano-preset-default: 5.2.14(postcss@8.5.8) - postcss: 8.5.8 - postcss-discard-unused: 5.1.0(postcss@8.5.8) - postcss-merge-idents: 5.1.1(postcss@8.5.8) - postcss-reduce-idents: 5.2.0(postcss@8.5.8) - postcss-zindex: 5.1.0(postcss@8.5.8) - - cssnano-preset-default@5.2.14(postcss@8.5.8): - dependencies: - css-declaration-sorter: 6.4.1(postcss@8.5.8) - cssnano-utils: 3.1.0(postcss@8.5.8) - postcss: 8.5.8 - postcss-calc: 8.2.4(postcss@8.5.8) - postcss-colormin: 5.3.1(postcss@8.5.8) - postcss-convert-values: 5.1.3(postcss@8.5.8) - postcss-discard-comments: 5.1.2(postcss@8.5.8) - postcss-discard-duplicates: 5.1.0(postcss@8.5.8) - postcss-discard-empty: 5.1.1(postcss@8.5.8) - postcss-discard-overridden: 5.1.0(postcss@8.5.8) - postcss-merge-longhand: 5.1.7(postcss@8.5.8) - postcss-merge-rules: 5.1.4(postcss@8.5.8) - postcss-minify-font-values: 5.1.0(postcss@8.5.8) - postcss-minify-gradients: 5.1.1(postcss@8.5.8) - postcss-minify-params: 5.1.4(postcss@8.5.8) - postcss-minify-selectors: 5.2.1(postcss@8.5.8) - postcss-normalize-charset: 5.1.0(postcss@8.5.8) - postcss-normalize-display-values: 5.1.0(postcss@8.5.8) - postcss-normalize-positions: 5.1.1(postcss@8.5.8) - postcss-normalize-repeat-style: 5.1.1(postcss@8.5.8) - postcss-normalize-string: 5.1.0(postcss@8.5.8) - postcss-normalize-timing-functions: 5.1.0(postcss@8.5.8) - postcss-normalize-unicode: 5.1.1(postcss@8.5.8) - postcss-normalize-url: 5.1.0(postcss@8.5.8) - postcss-normalize-whitespace: 5.1.1(postcss@8.5.8) - postcss-ordered-values: 5.1.3(postcss@8.5.8) - postcss-reduce-initial: 5.1.2(postcss@8.5.8) - postcss-reduce-transforms: 5.1.0(postcss@8.5.8) - postcss-svgo: 5.1.0(postcss@8.5.8) - postcss-unique-selectors: 5.1.1(postcss@8.5.8) - - cssnano-utils@3.1.0(postcss@8.5.8): - dependencies: - postcss: 8.5.8 - - cssnano@5.1.15(postcss@8.5.8): - dependencies: - cssnano-preset-default: 5.2.14(postcss@8.5.8) + /cssnano@5.1.15(postcss@8.5.6): + resolution: {integrity: sha512-j+BKgDcLDQA+eDifLx0EO4XSA56b7uut3BQFH+wbSaSTuGLuiyTa/wbRYthUXX8LC9mLg+WWKe8h+qJuwTAbHw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + cssnano-preset-default: 5.2.14(postcss@8.5.6) lilconfig: 2.1.0 - postcss: 8.5.8 - yaml: 1.10.3 + postcss: 8.5.6 + yaml: 1.10.2 + dev: false - csso@4.2.0: + /csso@4.2.0: + resolution: {integrity: sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==} + engines: {node: '>=8.0.0'} dependencies: css-tree: 1.1.3 + dev: false + + /csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + /cytoscape-cose-bilkent@4.1.0(cytoscape@3.33.2): + resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} + peerDependencies: + cytoscape: ^3.2.0 + dependencies: + cose-base: 1.0.3 + cytoscape: 3.33.2 + dev: false + + /cytoscape@3.33.2: + resolution: {integrity: sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw==} + engines: {node: '>=0.10'} + dev: false + + /d3-array@2.12.1: + resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} + dependencies: + internmap: 1.0.1 + dev: false + + /d3-array@3.2.4: + resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} + engines: {node: '>=12'} + dependencies: + internmap: 2.0.3 + dev: false + + /d3-axis@3.0.0: + resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} + engines: {node: '>=12'} + dev: false + + /d3-brush@3.0.0: + resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: false + + /d3-chord@3.0.1: + resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + dev: false + + /d3-contour@4.0.2: + resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-delaunay@6.0.4: + resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} + engines: {node: '>=12'} + dependencies: + delaunator: 5.1.0 + dev: false + + /d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + dev: false + + /d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + dev: false + + /d3-dsv@3.0.1: + resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} + engines: {node: '>=12'} + hasBin: true + dependencies: + commander: 7.2.0 + iconv-lite: 0.6.3 + rw: 1.3.3 + dev: false + + /d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + dev: false + + /d3-fetch@3.0.1: + resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} + engines: {node: '>=12'} + dependencies: + d3-dsv: 3.0.1 + dev: false + + /d3-force@3.0.0: + resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-quadtree: 3.0.1 + d3-timer: 3.0.1 + dev: false + + /d3-format@3.1.2: + resolution: {integrity: sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==} + engines: {node: '>=12'} + dev: false + + /d3-geo@3.1.1: + resolution: {integrity: sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false - csstype@3.2.3: {} + /d3-hierarchy@3.1.2: + resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} + engines: {node: '>=12'} + dev: false + + /d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + dev: false + + /d3-path@1.0.9: + resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} + dev: false + + /d3-path@3.1.0: + resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} + engines: {node: '>=12'} + dev: false + + /d3-polygon@3.0.1: + resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} + engines: {node: '>=12'} + dev: false + + /d3-quadtree@3.0.1: + resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} + engines: {node: '>=12'} + dev: false + + /d3-random@3.0.1: + resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} + engines: {node: '>=12'} + dev: false + + /d3-sankey@0.12.3: + resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} + dependencies: + d3-array: 2.12.1 + d3-shape: 1.3.7 + dev: false + + /d3-scale-chromatic@3.1.0: + resolution: {integrity: sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==} + engines: {node: '>=12'} + dependencies: + d3-color: 3.1.0 + d3-interpolate: 3.0.1 + dev: false + + /d3-scale@4.0.2: + resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-format: 3.1.2 + d3-interpolate: 3.0.1 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + dev: false + + /d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + dev: false + + /d3-shape@1.3.7: + resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} + dependencies: + d3-path: 1.0.9 + dev: false + + /d3-shape@3.2.0: + resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} + engines: {node: '>=12'} + dependencies: + d3-path: 3.1.0 + dev: false + + /d3-time-format@4.1.0: + resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} + engines: {node: '>=12'} + dependencies: + d3-time: 3.1.0 + dev: false + + /d3-time@3.1.0: + resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + dev: false + + /d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + dev: false + + /d3-transition@3.0.1(d3-selection@3.0.0): + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + dev: false - debounce@1.2.1: {} + /d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + dev: false + + /d3@7.9.0: + resolution: {integrity: sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==} + engines: {node: '>=12'} + dependencies: + d3-array: 3.2.4 + d3-axis: 3.0.0 + d3-brush: 3.0.0 + d3-chord: 3.0.1 + d3-color: 3.1.0 + d3-contour: 4.0.2 + d3-delaunay: 6.0.4 + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-dsv: 3.0.1 + d3-ease: 3.0.1 + d3-fetch: 3.0.1 + d3-force: 3.0.0 + d3-format: 3.1.2 + d3-geo: 3.1.1 + d3-hierarchy: 3.1.2 + d3-interpolate: 3.0.1 + d3-path: 3.1.0 + d3-polygon: 3.0.1 + d3-quadtree: 3.0.1 + d3-random: 3.0.1 + d3-scale: 4.0.2 + d3-scale-chromatic: 3.1.0 + d3-selection: 3.0.0 + d3-shape: 3.2.0 + d3-time: 3.1.0 + d3-time-format: 4.1.0 + d3-timer: 3.0.1 + d3-transition: 3.0.1(d3-selection@3.0.0) + d3-zoom: 3.0.0 + dev: false + + /dagre-d3-es@7.0.13: + resolution: {integrity: sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==} + dependencies: + d3: 7.9.0 + lodash-es: 4.18.1 + dev: false + + /dayjs@1.11.20: + resolution: {integrity: sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==} + dev: false + + /debounce@1.2.1: + resolution: {integrity: sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==} + dev: false - debug@2.6.9: + /debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.0.0 + dev: false - debug@4.4.3: + /debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true dependencies: ms: 2.1.3 - decode-named-character-reference@1.3.0: + /decode-named-character-reference@1.0.2: + resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} dependencies: character-entities: 2.0.2 - decompress-response@6.0.0: + /decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} dependencies: mimic-response: 3.1.0 + dev: false - deep-extend@0.6.0: {} + /deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + dev: false - deepmerge@4.3.1: {} + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + dev: false - default-gateway@6.0.3: + /default-gateway@6.0.3: + resolution: {integrity: sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==} + engines: {node: '>= 10'} dependencies: execa: 5.1.1 + dev: false - defer-to-connect@2.0.1: {} + /defer-to-connect@2.0.1: + resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} + engines: {node: '>=10'} + dev: false - define-data-property@1.1.4: + /define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} dependencies: - es-define-property: 1.0.1 + es-define-property: 1.0.0 es-errors: 1.3.0 - gopd: 1.2.0 + gopd: 1.0.1 + dev: false - define-lazy-prop@2.0.0: {} + /define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + dev: false - define-properties@1.2.1: + /define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 has-property-descriptors: 1.0.2 object-keys: 1.1.1 + dev: false - del@6.1.1: + /del@6.1.1: + resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} + engines: {node: '>=10'} dependencies: globby: 11.1.0 graceful-fs: 4.2.11 @@ -8152,271 +5358,456 @@ snapshots: p-map: 4.0.0 rimraf: 3.0.2 slash: 3.0.0 + dev: false - depd@1.1.2: {} + /delaunator@5.1.0: + resolution: {integrity: sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==} + dependencies: + robust-predicates: 3.0.3 + dev: false + + /depd@1.1.2: + resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} + engines: {node: '>= 0.6'} + dev: false - depd@2.0.0: {} + /depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + dev: false - dequal@2.0.3: {} + /dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} - destroy@1.2.0: {} + /destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + dev: false - detect-libc@2.1.2: + /detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + requiresBuild: true + dev: false optional: true - detect-node@2.1.0: {} + /detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + dev: false - detect-port-alt@1.1.6: + /detect-port-alt@1.1.6: + resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==} + engines: {node: '>= 4.2.1'} + hasBin: true dependencies: address: 1.2.2 debug: 2.6.9 transitivePeerDependencies: - supports-color + dev: false - detect-port@1.6.1: + /detect-port@1.6.1: + resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} + engines: {node: '>= 4.0.0'} + hasBin: true dependencies: address: 1.2.2 - debug: 4.4.3 + debug: 4.3.7 transitivePeerDependencies: - supports-color + dev: false - devlop@1.1.0: + /devlop@1.1.0: + resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} dependencies: dequal: 2.0.3 - didyoumean@1.2.2: {} + /didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + dev: false + + /diff@5.2.2: + resolution: {integrity: sha512-vtcDfH3TOjP8UekytvnHH1o1P4FcUdt4eQ1Y+Abap1tk/OB2MWQvcwS2ClCd1zuIhc3JKOx6p3kod8Vfys3E+A==} + engines: {node: '>=0.3.1'} + dev: false - dir-glob@3.0.1: + /dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} dependencies: path-type: 4.0.0 + dev: false - dlv@1.1.3: {} + /dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + dev: false - dns-packet@5.6.1: + /dns-packet@5.6.1: + resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==} + engines: {node: '>=6'} dependencies: '@leichtgewicht/ip-codec': 2.0.5 + dev: false - docusaurus-markdown-source-plugin@2.2.4(@docusaurus/core@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /docusaurus-markdown-source-plugin@2.0.1(@docusaurus/core@3.1.1)(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-RiKMi+SDlrQQ25VkbOvz9M7glH9lcpAsz0WzepilnC2MgXA6uLNpl7PezrlY6nvW7MnhB4Aakwwonz+0WVBQAQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@docusaurus/core': ^3.0.0 + react: ^18.0.0 + react-dom: ^18.0.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - fs-extra: 11.3.4 + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: false - docusaurus-plugin-sass@0.2.6(@docusaurus/core@3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(sass@1.98.0)(webpack@5.105.4): + /docusaurus-plugin-sass@0.2.5(@docusaurus/core@3.1.1)(sass@1.80.6)(webpack@5.105.4): + resolution: {integrity: sha512-Z+D0fLFUKcFpM+bqSUmqKIU+vO+YF1xoEQh5hoFreg2eMf722+siwXDD+sqtwU8E4MvVpuvsQfaHwODNlxJAEg==} + peerDependencies: + '@docusaurus/core': ^2.0.0-beta || ^3.0.0-alpha + sass: ^1.30.0 dependencies: - '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - sass: 1.98.0 - sass-loader: 16.0.7(sass@1.98.0)(webpack@5.105.4) + '@docusaurus/core': 3.1.1(@docusaurus/types@3.1.1)(acorn@8.14.0)(react-dom@18.3.1)(react@18.3.1)(typescript@5.4.5) + sass: 1.80.6 + sass-loader: 10.5.2(sass@1.80.6)(webpack@5.105.4) transitivePeerDependencies: - - '@rspack/core' + - fibers - node-sass - - sass-embedded - webpack + dev: false - dom-converter@0.2.0: + /dom-converter@0.2.0: + resolution: {integrity: sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==} dependencies: utila: 0.4.0 + dev: false - dom-serializer@1.4.1: + /dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} dependencies: domelementtype: 2.3.0 domhandler: 4.3.1 entities: 2.2.0 + dev: false - dom-serializer@2.0.0: + /dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} dependencies: domelementtype: 2.3.0 domhandler: 5.0.3 entities: 4.5.0 + dev: false - domelementtype@2.3.0: {} + /domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + dev: false - domhandler@4.3.1: + /domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 + dev: false - domhandler@5.0.3: + /domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} dependencies: domelementtype: 2.3.0 + dev: false + + /dompurify@3.4.0: + resolution: {integrity: sha512-nolgK9JcaUXMSmW+j1yaSvaEaoXYHwWyGJlkoCTghc97KgGDDSnpoU/PlEnw63Ah+TGKFOyY+X5LnxaWbCSfXg==} + optionalDependencies: + '@types/trusted-types': 2.0.7 + dev: false - domutils@2.8.0: + /domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} dependencies: dom-serializer: 1.4.1 domelementtype: 2.3.0 domhandler: 4.3.1 + dev: false - domutils@3.2.2: + /domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} dependencies: dom-serializer: 2.0.0 domelementtype: 2.3.0 domhandler: 5.0.3 + dev: false - dot-case@3.0.4: + /dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 tslib: 2.8.1 + dev: false - dot-prop@6.0.1: + /dot-prop@6.0.1: + resolution: {integrity: sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==} + engines: {node: '>=10'} dependencies: is-obj: 2.0.0 + dev: false - dotenv@16.6.1: {} + /dotenv@16.4.5: + resolution: {integrity: sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==} + engines: {node: '>=12'} + dev: false - dunder-proto@1.0.1: - dependencies: - call-bind-apply-helpers: 1.0.2 - es-errors: 1.3.0 - gopd: 1.2.0 + /duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + dev: false - duplexer@0.1.2: {} + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: false - eastasianwidth@0.2.0: {} + /ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + dev: false - ee-first@1.1.1: {} + /electron-to-chromium@1.5.259: + resolution: {integrity: sha512-I+oLXgpEJzD6Cwuwt1gYjxsDmu/S/Kd41mmLA3O+/uH2pFRO/DvOjUyGozL8j3KeLV6WyZ7ssPwELMsXCcsJAQ==} + dev: false - electron-to-chromium@1.5.328: {} + /electron-to-chromium@1.5.344: + resolution: {integrity: sha512-4MxfbmNDm+KPh066EZy+eUnkcDPcZ35wNmOWzFuh/ijvHsve6kbLTLURy88uCNK5FbpN+yk2nQY6BYh1GEt+wg==} - emoji-regex@8.0.0: {} + /electron-to-chromium@1.5.50: + resolution: {integrity: sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==} + dev: false - emoji-regex@9.2.2: {} + /elkjs@0.9.3: + resolution: {integrity: sha512-f/ZeWvW/BCXbhGEf1Ujp29EASo/lk1FDnETgNKwJrsVvGZhUWCZyg3xLJjAsxfOmt8KjswHmI5EwCQcPMpOYhQ==} + dev: false - emojilib@2.4.0: {} + /emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + dev: false - emojis-list@3.0.0: {} + /emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + dev: false - emoticon@4.1.0: {} + /emojilib@2.4.0: + resolution: {integrity: sha512-5U0rVMU5Y2n2+ykNLQqMoqklN9ICBT/KsvC1Gz6vqHbz2AXXGkG+Pm5rMWk/8Vjrr/mY9985Hi8DYzn1F09Nyw==} + dev: false - encodeurl@2.0.0: {} + /emojis-list@3.0.0: + resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} + engines: {node: '>= 4'} + dev: false - encoding-sniffer@0.2.1: - dependencies: - iconv-lite: 0.6.3 - whatwg-encoding: 3.1.1 + /emoticon@4.1.0: + resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==} + dev: false - enhanced-resolve@5.20.1: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.3.2 + /encodeurl@1.0.2: + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} + engines: {node: '>= 0.8'} + dev: false - entities@2.2.0: {} + /encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + dev: false - entities@4.5.0: {} + /enhanced-resolve@5.21.0: + resolution: {integrity: sha512-otxSQPw4lkOZWkHpB3zaEQs6gWYEsmX4xQF68ElXC/TWvGxGMSGOvoNbaLXm6/cS/fSfHtsEdw90y20PCd+sCA==} + engines: {node: '>=10.13.0'} + dependencies: + graceful-fs: 4.2.11 + tapable: 2.3.3 - entities@6.0.1: {} + /entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + dev: false - entities@7.0.1: {} + /entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + dev: false - error-ex@1.3.4: + /error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: is-arrayish: 0.2.1 + dev: false - es-define-property@1.0.1: {} - - es-errors@1.3.0: {} + /es-define-property@1.0.0: + resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.2.4 + dev: false - es-module-lexer@2.0.0: {} + /es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + dev: false - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 + /es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} - esast-util-from-estree@2.0.0: + /esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} dependencies: '@types/estree-jsx': 1.0.5 devlop: 1.1.0 estree-util-visit: 2.0.0 unist-util-position-from-estree: 2.0.0 - esast-util-from-js@2.0.1: + /esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} dependencies: '@types/estree-jsx': 1.0.5 - acorn: 8.16.0 + acorn: 8.14.0 esast-util-from-estree: 2.0.0 - vfile-message: 4.0.3 + vfile-message: 4.0.2 - escalade@3.2.0: {} + /escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} - escape-goat@4.0.0: {} + /escape-goat@4.0.0: + resolution: {integrity: sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==} + engines: {node: '>=12'} + dev: false - escape-html@1.0.3: {} + /escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false - escape-string-regexp@4.0.0: {} + /escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + dev: false - escape-string-regexp@5.0.0: {} + /escape-string-regexp@5.0.0: + resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} + engines: {node: '>=12'} + dev: false - eslint-scope@5.1.1: + /eslint-scope@5.1.1: + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - esprima@4.0.1: {} + /esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + dev: false - esrecurse@4.3.0: + /esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 - estraverse@4.3.0: {} + /estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} - estraverse@5.3.0: {} + /estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} - estree-util-attach-comments@3.0.0: + /estree-util-attach-comments@3.0.0: + resolution: {integrity: sha512-cKUwm/HUcTDsYh/9FgnuFqpfquUbwIqwKM26BVCGDPVgvaCl/nDCCjUfiLlx6lsEZ3Z4RFxNbOQ60pkaEwFxGw==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 - estree-util-build-jsx@3.0.1: + /estree-util-build-jsx@3.0.1: + resolution: {integrity: sha512-8U5eiL6BTrPxp/CHbs2yMgP8ftMhR5ww1eIKoWRMlqvltHF8fZn5LRDvTKuxD3DUn+shRbLGqXemcP51oFCsGQ==} dependencies: '@types/estree-jsx': 1.0.5 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 estree-walker: 3.0.3 - estree-util-is-identifier-name@3.0.0: {} + /estree-util-is-identifier-name@3.0.0: + resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} - estree-util-scope@1.0.0: + /estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 devlop: 1.1.0 - estree-util-to-js@2.0.0: + /estree-util-to-js@2.0.0: + resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} dependencies: '@types/estree-jsx': 1.0.5 astring: 1.9.0 - source-map: 0.7.6 + source-map: 0.7.4 - estree-util-value-to-estree@3.5.0: + /estree-util-value-to-estree@3.2.1: + resolution: {integrity: sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 + dev: false - estree-util-visit@2.0.0: + /estree-util-visit@2.0.0: + resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} dependencies: '@types/estree-jsx': 1.0.5 '@types/unist': 3.0.3 - estree-walker@3.0.3: + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 - esutils@2.0.3: {} + /esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + dev: false - eta@2.2.0: {} + /eta@2.2.0: + resolution: {integrity: sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==} + engines: {node: '>=6.0.0'} + dev: false - etag@1.8.1: {} + /etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + dev: false - eval@0.1.8: + /eval@0.1.8: + resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} + engines: {node: '>= 0.8'} dependencies: - '@types/node': 25.5.0 + '@types/node': 22.8.7 require-like: 0.1.2 + dev: false - eventemitter3@4.0.7: {} + /eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + dev: false - eventemitter3@5.0.1: {} + /eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + dev: false - events@3.3.0: {} + /events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} - execa@5.1.1: + /execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} dependencies: - cross-spawn: 7.0.6 + cross-spawn: 7.0.3 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -8425,133 +5816,210 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 strip-final-newline: 2.0.0 + dev: false - express@4.22.1: + /express@4.21.2: + resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} + engines: {node: '>= 0.10.0'} dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.4 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.7.2 - cookie-signature: 1.0.7 + cookie: 0.7.1 + cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.3.2 + finalhandler: 1.3.1 fresh: 0.5.2 - http-errors: 2.0.1 + http-errors: 2.0.0 merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.13 + path-to-regexp: 0.1.12 proxy-addr: 2.0.7 - qs: 6.14.2 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.19.2 - serve-static: 1.16.3 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 - statuses: 2.0.2 + statuses: 2.0.1 type-is: 1.6.18 utils-merge: 1.0.1 vary: 1.1.2 transitivePeerDependencies: - supports-color + dev: false - extend-shallow@2.0.1: + /extend-shallow@2.0.1: + resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} + engines: {node: '>=0.10.0'} dependencies: is-extendable: 0.1.1 + dev: false - extend@3.0.2: {} + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} - fast-deep-equal@3.1.3: {} + /fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} - fast-glob@3.3.3: + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 micromatch: 4.0.8 + dev: false - fast-json-stable-stringify@2.1.0: {} + /fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + dev: false - fast-uri@3.1.0: {} + /fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} - fastq@1.20.1: + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: - reusify: 1.1.0 + reusify: 1.0.4 + dev: false - fault@2.0.1: + /fault@2.0.1: + resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==} dependencies: format: 0.2.2 + dev: false - faye-websocket@0.11.4: + /faye-websocket@0.11.4: + resolution: {integrity: sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==} + engines: {node: '>=0.8.0'} dependencies: websocket-driver: 0.7.4 + dev: false - fdir@6.5.0(picomatch@4.0.4): - optionalDependencies: - picomatch: 4.0.4 - - feed@4.2.2: + /feed@4.2.2: + resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} + engines: {node: '>=0.4.0'} dependencies: xml-js: 1.6.11 + dev: false - file-loader@6.2.0(webpack@5.105.4): + /file-loader@6.2.0(webpack@5.105.4): + resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: 5.105.4 dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 webpack: 5.105.4 + dev: false - filesize@8.0.7: {} + /filesize@8.0.7: + resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} + engines: {node: '>= 0.4.0'} + dev: false - fill-range@7.1.1: + /fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} dependencies: to-regex-range: 5.0.1 + dev: false - finalhandler@1.3.2: + /finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} + engines: {node: '>= 0.8'} dependencies: debug: 2.6.9 encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 - statuses: 2.0.2 + statuses: 2.0.1 unpipe: 1.0.0 transitivePeerDependencies: - supports-color + dev: false - find-cache-dir@4.0.0: + /find-cache-dir@4.0.0: + resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} + engines: {node: '>=14.16'} dependencies: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 + dev: false - find-up@3.0.0: + /find-up@3.0.0: + resolution: {integrity: sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==} + engines: {node: '>=6'} dependencies: locate-path: 3.0.0 + dev: false - find-up@5.0.0: + /find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} dependencies: locate-path: 6.0.0 path-exists: 4.0.0 + dev: false - find-up@6.3.0: + /find-up@6.3.0: + resolution: {integrity: sha512-v2ZsoEuVHYy8ZIlYqwPe/39Cy+cFDzp4dXPaxNvkEuouymu+2Jbz0PxpKarJHYJTmv2HWT3O382qY8l4jMWthw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: locate-path: 7.2.0 path-exists: 5.0.0 + dev: false - flat@5.0.2: {} + /flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + /follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false - follow-redirects@1.15.11: {} + /foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} + engines: {node: '>=14'} + dependencies: + cross-spawn: 7.0.3 + signal-exit: 4.1.0 + dev: false - fork-ts-checker-webpack-plugin@6.5.3(typescript@5.2.2)(webpack@5.105.4): + /fork-ts-checker-webpack-plugin@6.5.3(typescript@5.4.5)(webpack@5.105.4): + resolution: {integrity: sha512-SbH/l9ikmMWycd5puHJKTkZJKddF4iRLyW3DeZ08HTI7NGyLS38MXd/KGgeWumQO7YNQbW2u/NtPT2YowbPaGQ==} + engines: {node: '>=10', yarn: '>=1.0.0'} + peerDependencies: + eslint: '>= 6' + typescript: '>= 2.7' + vue-template-compiler: '*' + webpack: 5.105.4 + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.26.2 '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.6.0 @@ -8560,124 +6028,211 @@ snapshots: fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.5.3 - minimatch: 3.1.5 + minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.7.4 + semver: 7.6.3 tapable: 1.1.3 - typescript: 5.2.2 + typescript: 5.4.5 webpack: 5.105.4 + dev: false + + /form-data-encoder@2.1.4: + resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} + engines: {node: '>= 14.17'} + dev: false - form-data-encoder@2.1.4: {} + /format@0.2.2: + resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==} + engines: {node: '>=0.4.x'} + dev: false - format@0.2.2: {} + /forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + dev: false - forwarded@0.2.0: {} + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: false - fraction.js@5.3.4: {} + /fraction.js@5.3.4: + resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + dev: false - fresh@0.5.2: {} + /fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + dev: false - fs-extra@11.3.4: + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} dependencies: graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.1.0 universalify: 2.0.1 + dev: false - fs-extra@9.1.0: + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 graceful-fs: 4.2.11 - jsonfile: 6.2.0 + jsonfile: 6.1.0 universalify: 2.0.1 + dev: false - fs-monkey@1.1.0: {} + /fs-monkey@1.1.0: + resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==} + dev: false - fs.realpath@1.0.0: {} + /fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + dev: false - fsevents@2.3.3: + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: false optional: true - function-bind@1.1.2: {} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false - gensync@1.0.0-beta.2: {} + /gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + dev: false - get-intrinsic@1.3.0: + /get-intrinsic@1.2.4: + resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind-apply-helpers: 1.0.2 - es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 function-bind: 1.1.2 - get-proto: 1.0.1 - gopd: 1.2.0 - has-symbols: 1.1.0 + has-proto: 1.0.3 + has-symbols: 1.0.3 hasown: 2.0.2 - math-intrinsics: 1.1.0 - - get-own-enumerable-property-symbols@3.0.2: {} + dev: false - get-proto@1.0.1: - dependencies: - dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + /get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + dev: false - get-stream@6.0.1: {} + /get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + dev: false - github-slugger@1.5.0: {} + /github-slugger@1.5.0: + resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} + dev: false - glob-parent@5.1.2: + /glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} dependencies: is-glob: 4.0.3 + dev: false - glob-parent@6.0.2: + /glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} dependencies: is-glob: 4.0.3 + dev: false + + /glob-to-regexp@0.4.1: + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - glob-to-regexp@0.4.1: {} + /glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + dependencies: + foreground-child: 3.3.0 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 1.11.1 + dev: false - glob@7.2.3: + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.5 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 + dev: false - global-dirs@3.0.1: + /global-dirs@3.0.1: + resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} + engines: {node: '>=10'} dependencies: ini: 2.0.0 + dev: false - global-modules@2.0.0: + /global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} dependencies: global-prefix: 3.0.0 + dev: false - global-prefix@3.0.0: + /global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} dependencies: ini: 1.3.8 kind-of: 6.0.3 which: 1.3.1 + dev: false + + /globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + dev: false - globby@11.1.0: + /globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.3 + fast-glob: 3.3.2 ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 + dev: false - globby@13.2.2: + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: dir-glob: 3.0.1 - fast-glob: 3.3.3 + fast-glob: 3.3.2 ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 + dev: false - gopd@1.2.0: {} + /gopd@1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.2.4 + dev: false - got@12.6.1: + /got@12.6.1: + resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} + engines: {node: '>=14.16'} dependencies: '@sindresorhus/is': 5.6.0 '@szmarczak/http-timer': 5.0.1 @@ -8690,98 +6245,143 @@ snapshots: lowercase-keys: 3.0.0 p-cancelable: 3.0.0 responselike: 3.0.0 + dev: false - graceful-fs@4.2.10: {} + /graceful-fs@4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: false - graceful-fs@4.2.11: {} + /graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} - gray-matter@4.0.3: + /gray-matter@4.0.3: + resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} + engines: {node: '>=6.0'} dependencies: - js-yaml: 3.14.2 + js-yaml: 3.14.1 kind-of: 6.0.3 section-matter: 1.0.0 strip-bom-string: 1.0.0 + dev: false - gzip-size@6.0.0: + /gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} dependencies: duplexer: 0.1.2 + dev: false - handle-thing@2.0.1: {} + /handle-thing@2.0.1: + resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} + dev: false - has-flag@4.0.0: {} + /has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} - has-property-descriptors@1.0.2: + /has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} dependencies: - es-define-property: 1.0.1 + es-define-property: 1.0.0 + dev: false + + /has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + dev: false - has-symbols@1.1.0: {} + /has-symbols@1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} + engines: {node: '>= 0.4'} + dev: false - has-yarn@3.0.0: {} + /has-yarn@3.0.0: + resolution: {integrity: sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false - hasown@2.0.2: + /hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} dependencies: function-bind: 1.1.2 + dev: false - hast-util-from-dom@5.0.1: + /hast-util-from-dom@5.0.0: + resolution: {integrity: sha512-d6235voAp/XR3Hh5uy7aGLbM3S4KamdW0WEgOaU1YoewnuYw4HXb5eRtv9g65m/RFGEfUY1Mw4UqCc5Y8L4Stg==} dependencies: '@types/hast': 3.0.4 - hastscript: 9.0.1 + hastscript: 8.0.0 web-namespaces: 2.0.1 + dev: false - hast-util-from-html-isomorphic@2.0.0: + /hast-util-from-html-isomorphic@2.0.0: + resolution: {integrity: sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==} dependencies: '@types/hast': 3.0.4 - hast-util-from-dom: 5.0.1 + hast-util-from-dom: 5.0.0 hast-util-from-html: 2.0.3 unist-util-remove-position: 5.0.0 + dev: false - hast-util-from-html@2.0.3: + /hast-util-from-html@2.0.3: + resolution: {integrity: sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==} dependencies: '@types/hast': 3.0.4 devlop: 1.1.0 - hast-util-from-parse5: 8.0.3 - parse5: 7.3.0 + hast-util-from-parse5: 8.0.1 + parse5: 7.2.1 vfile: 6.0.3 - vfile-message: 4.0.3 + vfile-message: 4.0.2 + dev: false - hast-util-from-parse5@8.0.3: + /hast-util-from-parse5@8.0.1: + resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 devlop: 1.1.0 - hastscript: 9.0.1 - property-information: 7.1.0 + hastscript: 8.0.0 + property-information: 6.5.0 vfile: 6.0.3 vfile-location: 5.0.3 web-namespaces: 2.0.1 + dev: false - hast-util-is-element@3.0.0: + /hast-util-is-element@3.0.0: + resolution: {integrity: sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==} dependencies: '@types/hast': 3.0.4 + dev: false - hast-util-parse-selector@4.0.0: + /hast-util-parse-selector@4.0.0: + resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} dependencies: '@types/hast': 3.0.4 + dev: false - hast-util-raw@9.1.0: + /hast-util-raw@9.0.4: + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 - '@ungap/structured-clone': 1.3.0 - hast-util-from-parse5: 8.0.3 - hast-util-to-parse5: 8.0.1 + '@ungap/structured-clone': 1.2.0 + hast-util-from-parse5: 8.0.1 + hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.1 - parse5: 7.3.0 + mdast-util-to-hast: 13.2.0 + parse5: 7.2.1 unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 + unist-util-visit: 5.0.0 vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 + dev: false - hast-util-to-estree@3.1.3: + /hast-util-to-estree@3.1.0: + resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -8790,19 +6390,20 @@ snapshots: estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.21 + style-to-object: 0.4.4 unist-util-position: 5.0.0 zwitch: 2.0.4 transitivePeerDependencies: - supports-color - hast-util-to-jsx-runtime@2.3.6: + /hast-util-to-jsx-runtime@2.3.2: + resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 '@types/hast': 3.0.4 '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 @@ -8810,72 +6411,95 @@ snapshots: estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 - property-information: 7.1.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 - style-to-js: 1.1.21 + style-to-object: 1.0.8 unist-util-position: 5.0.0 - vfile-message: 4.0.3 + vfile-message: 4.0.2 transitivePeerDependencies: - supports-color - hast-util-to-parse5@8.0.1: + /hast-util-to-parse5@8.0.0: + resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 devlop: 1.1.0 - property-information: 7.1.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 web-namespaces: 2.0.1 zwitch: 2.0.4 + dev: false - hast-util-to-text@4.0.2: + /hast-util-to-text@4.0.2: + resolution: {integrity: sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==} dependencies: '@types/hast': 3.0.4 '@types/unist': 3.0.3 hast-util-is-element: 3.0.0 unist-util-find-after: 5.0.0 + dev: false - hast-util-whitespace@3.0.0: + /hast-util-whitespace@3.0.0: + resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} dependencies: '@types/hast': 3.0.4 - hastscript@9.0.1: + /hastscript@8.0.0: + resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} dependencies: '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 hast-util-parse-selector: 4.0.0 - property-information: 7.1.0 + property-information: 6.5.0 space-separated-tokens: 2.0.2 + dev: false - he@1.2.0: {} + /he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + dev: false - history@4.10.1: + /history@4.10.1: + resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.26.0 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 value-equal: 1.0.1 + dev: false - hoist-non-react-statics@3.3.2: + /hoist-non-react-statics@3.3.2: + resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} dependencies: react-is: 16.13.1 + dev: false - hpack.js@2.1.6: + /hpack.js@2.1.6: + resolution: {integrity: sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==} dependencies: inherits: 2.0.4 obuf: 1.1.2 readable-stream: 2.3.8 wbuf: 1.7.3 + dev: false - html-entities@2.6.0: {} + /html-entities@2.6.0: + resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==} + dev: false - html-escaper@2.0.2: {} + /html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + dev: false - html-minifier-terser@6.1.0: + /html-minifier-terser@6.1.0: + resolution: {integrity: sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==} + engines: {node: '>=12'} + hasBin: true dependencies: camel-case: 4.1.2 clean-css: 5.3.3 @@ -8883,9 +6507,13 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.46.1 + terser: 5.36.0 + dev: false - html-minifier-terser@7.2.0: + /html-minifier-terser@7.2.0: + resolution: {integrity: sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==} + engines: {node: ^14.13.1 || >=16.0.0} + hasBin: true dependencies: camel-case: 4.1.2 clean-css: 5.3.3 @@ -8893,258 +6521,492 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.46.1 + terser: 5.36.0 + dev: false - html-tags@3.3.1: {} + /html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + dev: false - html-void-elements@3.0.0: {} + /html-void-elements@3.0.0: + resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} + dev: false - html-webpack-plugin@5.6.6(webpack@5.105.4): + /html-webpack-plugin@5.6.3(webpack@5.105.4): + resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} + engines: {node: '>=10.13.0'} + peerDependencies: + '@rspack/core': 0.x || 1.x + webpack: 5.105.4 + peerDependenciesMeta: + '@rspack/core': + optional: true + webpack: + optional: true dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 - lodash: 4.17.23 + lodash: 4.17.21 pretty-error: 4.0.0 - tapable: 2.3.2 - optionalDependencies: + tapable: 2.2.1 webpack: 5.105.4 + dev: false - htmlparser2@10.1.0: - dependencies: - domelementtype: 2.3.0 - domhandler: 5.0.3 - domutils: 3.2.2 - entities: 7.0.1 - - htmlparser2@6.1.0: + /htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} dependencies: domelementtype: 2.3.0 domhandler: 4.3.1 domutils: 2.8.0 entities: 2.2.0 + dev: false + + /htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + dev: false - http-cache-semantics@4.2.0: {} + /http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + dev: false - http-deceiver@1.2.7: {} + /http-deceiver@1.2.7: + resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} + dev: false - http-errors@1.8.1: + /http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} dependencies: depd: 1.1.2 - inherits: 2.0.4 - setprototypeof: 1.2.0 + inherits: 2.0.3 + setprototypeof: 1.1.0 statuses: 1.5.0 - toidentifier: 1.0.1 + dev: false - http-errors@2.0.1: + /http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} dependencies: depd: 2.0.0 inherits: 2.0.4 setprototypeof: 1.2.0 - statuses: 2.0.2 + statuses: 2.0.1 toidentifier: 1.0.1 + dev: false - http-parser-js@0.5.10: {} + /http-parser-js@0.5.8: + resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} + dev: false - http-proxy-middleware@2.0.9(@types/express@4.17.25): + /http-proxy-middleware@2.0.9(@types/express@4.17.21): + resolution: {integrity: sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==} + engines: {node: '>=12.0.0'} + peerDependencies: + '@types/express': ^4.17.13 + peerDependenciesMeta: + '@types/express': + optional: true dependencies: - '@types/http-proxy': 1.17.17 + '@types/express': 4.17.21 + '@types/http-proxy': 1.17.15 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 micromatch: 4.0.8 - optionalDependencies: - '@types/express': 4.17.25 transitivePeerDependencies: - debug + dev: false - http-proxy@1.18.1: + /http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.11 + follow-redirects: 1.15.9 requires-port: 1.0.0 transitivePeerDependencies: - debug + dev: false - http2-wrapper@2.2.1: + /http2-wrapper@2.2.1: + resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} + engines: {node: '>=10.19.0'} dependencies: quick-lru: 5.1.1 resolve-alpn: 1.2.1 + dev: false + + /human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + dev: false - human-signals@2.1.0: {} + /husky@9.1.7: + resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} + engines: {node: '>=18'} + hasBin: true + dev: true - iconv-lite@0.4.24: + /iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: false - iconv-lite@0.6.3: + /iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} dependencies: safer-buffer: 2.1.2 + dev: false - icss-utils@5.1.0(postcss@8.5.8): + /icss-utils@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - ignore@5.3.2: {} + /ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + dev: false - image-size@1.2.1: + /image-size@1.2.1: + resolution: {integrity: sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==} + engines: {node: '>=16.x'} + hasBin: true dependencies: queue: 6.0.2 + dev: false - immer@9.0.21: {} + /immer@9.0.21: + resolution: {integrity: sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA==} + dev: false - immutable@5.1.5: {} + /immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + dev: false - import-fresh@3.3.1: + /import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 + dev: false - import-lazy@4.0.0: {} + /import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + dev: false - imurmurhash@0.1.4: {} + /imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + dev: false - indent-string@4.0.0: {} + /indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + dev: false - infima@0.2.0-alpha.43: {} + /infima@0.2.0-alpha.43: + resolution: {integrity: sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==} + engines: {node: '>=12'} + dev: false - inflight@1.0.6: + /inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. dependencies: once: 1.4.0 wrappy: 1.0.2 + dev: false + + /inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + dev: false + + /inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + /ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + dev: false + + /ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + dev: false - inherits@2.0.4: {} + /inline-style-parser@0.1.1: + resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - ini@1.3.8: {} + /inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} - ini@2.0.0: {} + /internmap@1.0.1: + resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} + dev: false - inline-style-parser@0.2.7: {} + /internmap@2.0.3: + resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} + engines: {node: '>=12'} + dev: false - interpret@1.4.0: {} + /interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + dev: false - invariant@2.2.4: + /invariant@2.2.4: + resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} dependencies: loose-envify: 1.4.0 - ipaddr.js@1.9.1: {} + /ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + dev: false - ipaddr.js@2.3.0: {} + /ipaddr.js@2.2.0: + resolution: {integrity: sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==} + engines: {node: '>= 10'} + dev: false - is-alphabetical@2.0.1: {} + /is-alphabetical@2.0.1: + resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} - is-alphanumerical@2.0.1: + /is-alphanumerical@2.0.1: + resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} dependencies: is-alphabetical: 2.0.1 is-decimal: 2.0.1 - is-arrayish@0.2.1: {} + /is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + dev: false - is-arrayish@0.3.4: {} + /is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + dev: false - is-binary-path@2.1.0: + /is-binary-path@2.1.0: + resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} + engines: {node: '>=8'} dependencies: binary-extensions: 2.3.0 + dev: false - is-ci@3.0.1: + /is-ci@3.0.1: + resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} + hasBin: true dependencies: ci-info: 3.9.0 + dev: false - is-core-module@2.16.1: + /is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} dependencies: hasown: 2.0.2 + dev: false - is-decimal@2.0.1: {} + /is-decimal@2.0.1: + resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} - is-docker@2.2.1: {} + /is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + dev: false - is-extendable@0.1.1: {} + /is-extendable@0.1.1: + resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} + engines: {node: '>=0.10.0'} + dev: false - is-extglob@2.1.1: {} + /is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + dev: false - is-fullwidth-code-point@3.0.0: {} + /is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + dev: false - is-glob@4.0.3: + /is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} dependencies: is-extglob: 2.1.1 + dev: false - is-hexadecimal@2.0.1: {} + /is-hexadecimal@2.0.1: + resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} - is-installed-globally@0.4.0: + /is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} dependencies: global-dirs: 3.0.1 is-path-inside: 3.0.3 + dev: false - is-npm@6.1.0: {} + /is-npm@6.0.0: + resolution: {integrity: sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false - is-number@7.0.0: {} + /is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + dev: false - is-obj@1.0.1: {} + /is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + dev: false - is-obj@2.0.0: {} + /is-obj@2.0.0: + resolution: {integrity: sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==} + engines: {node: '>=8'} + dev: false - is-path-cwd@2.2.0: {} + /is-path-cwd@2.2.0: + resolution: {integrity: sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==} + engines: {node: '>=6'} + dev: false - is-path-inside@3.0.3: {} + /is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: false - is-plain-obj@3.0.0: {} + /is-plain-obj@3.0.0: + resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} + engines: {node: '>=10'} + dev: false - is-plain-obj@4.1.0: {} + /is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} - is-plain-object@2.0.4: + /is-plain-object@2.0.4: + resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} + engines: {node: '>=0.10.0'} dependencies: isobject: 3.0.1 - is-regexp@1.0.0: {} + /is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + dev: false - is-root@2.1.0: {} + /is-root@2.1.0: + resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} + engines: {node: '>=6'} + dev: false - is-stream@2.0.1: {} + /is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + dev: false - is-typedarray@1.0.0: {} + /is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + dev: false - is-wsl@2.2.0: + /is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} dependencies: is-docker: 2.2.1 + dev: false - is-yarn-global@0.4.1: {} + /is-yarn-global@0.4.1: + resolution: {integrity: sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==} + engines: {node: '>=12'} + dev: false - isarray@0.0.1: {} + /isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + dev: false - isarray@1.0.0: {} + /isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} - isexe@2.0.0: {} + /isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - isobject@3.0.1: {} + /isobject@3.0.1: + resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} + engines: {node: '>=0.10.0'} - isows@1.0.7(ws@8.18.3): + /isows@1.0.7(ws@8.18.3): + resolution: {integrity: sha512-I1fSfDCZL5P0v33sVqeTDSpcstAg/N+wF5HS033mogOVIp4B+oHC7oOCsA3axAbBSGTJ8QubbNmnIRN/h8U7hg==} + peerDependencies: + ws: '*' dependencies: ws: 8.18.3 + dev: false + + /jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + dev: false - jest-util@29.7.0: + /jest-util@29.7.0: + resolution: {integrity: sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 25.5.0 + '@types/node': 22.8.7 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 - picomatch: 2.3.2 + picomatch: 2.3.1 + dev: false - jest-worker@27.5.1: + /jest-worker@27.5.1: + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 25.5.0 + '@types/node': 22.8.7 merge-stream: 2.0.0 supports-color: 8.1.1 - jest-worker@29.7.0: + /jest-worker@29.7.0: + resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 25.5.0 + '@types/node': 22.8.7 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: false - jiti@1.21.7: {} + /jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} + hasBin: true + dev: false - joi@17.13.3: + /joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -9152,270 +7014,442 @@ snapshots: '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 - js-tokens@4.0.0: {} + /js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@3.14.2: + /js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true dependencies: argparse: 1.0.10 esprima: 4.0.1 + dev: false - js-yaml@4.1.1: + /js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true dependencies: argparse: 2.0.1 + dev: false - jsesc@3.1.0: {} + /jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + dev: false - json-buffer@3.0.1: {} + /json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + dev: false - json-parse-even-better-errors@2.3.1: {} + /json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} - json-schema-traverse@0.4.1: {} + /json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + dev: false - json-schema-traverse@1.0.0: {} + /json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} - json5@2.2.3: {} + /json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + dev: false - jsonfile@6.2.0: + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} dependencies: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 + dev: false - katex@0.16.44: + /katex@0.16.11: + resolution: {integrity: sha512-RQrI8rlHY92OLf3rho/Ts8i/XvjgguEjOkO1BEXcU3N8BqPpSzBNwV/G0Ukr+P/l3ivvJUE/Fa/CwbS6HesGNQ==} + hasBin: true dependencies: commander: 8.3.0 + dev: false - keyv@4.5.4: + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 + dev: false + + /khroma@2.1.0: + resolution: {integrity: sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==} + dev: false - kind-of@6.0.3: {} + /kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + /kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + dev: false + + /kleur@4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} + engines: {node: '>=6'} + dev: false - kleur@3.0.3: {} + /klona@2.0.6: + resolution: {integrity: sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==} + engines: {node: '>= 8'} + dev: false - latest-version@7.0.0: + /latest-version@7.0.0: + resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} + engines: {node: '>=14.16'} dependencies: package-json: 8.1.1 + dev: false - launch-editor@2.13.2: + /launch-editor@2.9.1: + resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} dependencies: picocolors: 1.1.1 - shell-quote: 1.8.3 + shell-quote: 1.8.1 + dev: false - leven@3.1.0: {} + /layout-base@1.0.2: + resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} + dev: false + + /leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + dev: false - lilconfig@2.1.0: {} + /lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + dev: false - lilconfig@3.1.3: {} + /lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} + engines: {node: '>=14'} + dev: false - lines-and-columns@1.2.4: {} + /lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + dev: false - loader-runner@4.3.1: {} + /loader-runner@4.3.2: + resolution: {integrity: sha512-DFEqQ3ihfS9blba08cLfYf1NRAIEm+dDjic073DRDc3/JspI/8wYmtDsHwd3+4hwvdxSK7PGaElfTmm0awWJ4w==} + engines: {node: '>=6.11.5'} - loader-utils@2.0.4: + /loader-utils@2.0.4: + resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} + engines: {node: '>=8.9.0'} dependencies: big.js: 5.2.2 emojis-list: 3.0.0 json5: 2.2.3 + dev: false - loader-utils@3.3.1: {} + /loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} + engines: {node: '>= 12.13.0'} + dev: false - locate-path@3.0.0: + /locate-path@3.0.0: + resolution: {integrity: sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==} + engines: {node: '>=6'} dependencies: p-locate: 3.0.0 path-exists: 3.0.0 + dev: false - locate-path@6.0.0: + /locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} dependencies: p-locate: 5.0.0 + dev: false - locate-path@7.2.0: + /locate-path@7.2.0: + resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: p-locate: 6.0.0 + dev: false - lodash.debounce@4.0.8: {} + /lodash-es@4.18.1: + resolution: {integrity: sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==} + dev: false - lodash.foreach@4.5.0: {} + /lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + dev: false + + /lodash.foreach@4.5.0: + resolution: {integrity: sha512-aEXTF4d+m05rVOAUG3z4vZZ4xVexLKZGF0lIxuHZ1Hplpk/3B6Z1+/ICICYRLm7c41Z2xiejbkCkJoTlypoXhQ==} + dev: false - lodash.get@4.4.2: {} + /lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + dev: false - lodash.kebabcase@4.1.1: {} + /lodash.kebabcase@4.1.1: + resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} + dev: false - lodash.mapkeys@4.6.0: {} + /lodash.mapkeys@4.6.0: + resolution: {integrity: sha512-0Al+hxpYvONWtg+ZqHpa/GaVzxuN3V7Xeo2p+bY06EaK/n+Y9R7nBePPN2o1LxmL0TWQSwP8LYZ008/hc9JzhA==} + dev: false - lodash.memoize@4.1.2: {} + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: false - lodash.omit@4.5.0: {} + /lodash.omit@4.5.0: + resolution: {integrity: sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==} + dev: false - lodash.uniq@4.5.0: {} + /lodash.uniq@4.5.0: + resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} + dev: false - lodash@4.17.23: {} + /lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + dev: false - longest-streak@3.1.0: {} + /longest-streak@3.1.0: + resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} - loose-envify@1.4.0: + /loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true dependencies: js-tokens: 4.0.0 - lottie-react@2.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /lottie-react@2.4.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-pDJGj+AQlnlyHvOHFK7vLdsDcvbuqvwPZdMlJ360wrzGFurXeKPr8SiRCjLf3LrNYKANQtSsh5dz9UYQHuqx4w==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 dependencies: - lottie-web: 5.13.0 + lottie-web: 5.12.2 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) + dev: false - lottie-web@5.13.0: {} + /lottie-web@5.12.2: + resolution: {integrity: sha512-uvhvYPC8kGPjXT3MyKMrL3JitEAmDMp30lVkuq/590Mw9ok6pWcFCwXJveo0t5uqYw1UREQHofD+jVpdjBv8wg==} + dev: false - lower-case@2.0.2: + /lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: tslib: 2.8.1 + dev: false + + /lowercase-keys@3.0.0: + resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false - lowercase-keys@3.0.0: {} + /lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + dev: false - lru-cache@4.1.5: + /lru-cache@4.1.5: + resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: pseudomap: 1.0.2 yallist: 2.1.2 + dev: true - lru-cache@5.1.1: + /lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} dependencies: yallist: 3.1.1 + dev: false - markdown-extensions@2.0.0: {} - - markdown-table@3.0.4: {} + /markdown-extensions@2.0.0: + resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} + engines: {node: '>=16'} - math-intrinsics@1.1.0: {} + /markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} + dev: false - mdast-util-directive@3.1.0: + /mdast-util-directive@3.0.0: + resolution: {integrity: sha512-JUpYOqKI4mM3sZcNxmF/ox04XYFFkNwr0CFlrQIkCwbvH0xzMCqkMqAde9wRd80VAhaUrwFwKm2nxretdT1h7Q==} dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 + parse-entities: 4.0.1 stringify-entities: 4.0.4 - unist-util-visit-parents: 6.0.2 + unist-util-visit-parents: 6.0.1 transitivePeerDependencies: - supports-color + dev: false - mdast-util-find-and-replace@3.0.2: + /mdast-util-find-and-replace@3.0.1: + resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} dependencies: '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + dev: false + + /mdast-util-from-markdown@1.3.1: + resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} + dependencies: + '@types/mdast': 3.0.15 + '@types/unist': 2.0.11 + decode-named-character-reference: 1.0.2 + mdast-util-to-string: 3.2.0 + micromark: 3.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-decode-string: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + unist-util-stringify-position: 3.0.3 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false - mdast-util-from-markdown@2.0.3: + /mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 - decode-named-character-reference: 1.3.0 + decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 - micromark: 4.0.2 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-decode-string: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark: 4.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-decode-string: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 unist-util-stringify-position: 4.0.0 transitivePeerDependencies: - supports-color - mdast-util-frontmatter@2.0.1: + /mdast-util-frontmatter@2.0.1: + resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: - supports-color + dev: false - mdast-util-gfm-autolink-literal@2.0.1: + /mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} dependencies: '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-find-and-replace: 3.0.2 - micromark-util-character: 2.1.1 + mdast-util-find-and-replace: 3.0.1 + micromark-util-character: 2.1.0 + dev: false - mdast-util-gfm-footnote@2.1.0: + /mdast-util-gfm-footnote@2.0.0: + resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - micromark-util-normalize-identifier: 2.0.1 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 + micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: - supports-color + dev: false - mdast-util-gfm-strikethrough@2.0.0: + /mdast-util-gfm-strikethrough@2.0.0: + resolution: {integrity: sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==} dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 transitivePeerDependencies: - supports-color + dev: false - mdast-util-gfm-table@2.0.0: + /mdast-util-gfm-table@2.0.0: + resolution: {integrity: sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==} dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 markdown-table: 3.0.4 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 transitivePeerDependencies: - supports-color + dev: false - mdast-util-gfm-task-list-item@2.0.0: + /mdast-util-gfm-task-list-item@2.0.0: + resolution: {integrity: sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==} dependencies: '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 transitivePeerDependencies: - supports-color + dev: false - mdast-util-gfm@3.1.0: + /mdast-util-gfm@3.0.0: + resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} dependencies: - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.2 mdast-util-gfm-autolink-literal: 2.0.1 - mdast-util-gfm-footnote: 2.1.0 + mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.2 + mdast-util-to-markdown: 2.1.1 transitivePeerDependencies: - supports-color + dev: false - mdast-util-math@3.0.0: + /mdast-util-math@3.0.0: + resolution: {integrity: sha512-Tl9GBNeG/AhJnQM221bJR2HPvLOSnLE/T9cJI9tlc6zwQk2nPk/4f0cHkOdEixQPC/j8UtKDdITswvLAy1OZ1w==} dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 longest-streak: 3.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 unist-util-remove-position: 5.0.0 transitivePeerDependencies: - supports-color + dev: false - mdast-util-mdx-expression@2.0.1: + /mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.2.0: + /mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 @@ -9423,535 +7457,972 @@ snapshots: '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 - parse-entities: 4.0.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 + parse-entities: 4.0.1 stringify-entities: 4.0.4 unist-util-stringify-position: 4.0.0 - vfile-message: 4.0.3 + vfile-message: 4.0.2 transitivePeerDependencies: - supports-color - mdast-util-mdx@3.0.0: + /mdast-util-mdx@3.0.0: + resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} dependencies: - mdast-util-from-markdown: 2.0.3 + mdast-util-from-markdown: 2.0.2 mdast-util-mdx-expression: 2.0.1 - mdast-util-mdx-jsx: 3.2.0 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.2 + mdast-util-to-markdown: 2.1.1 transitivePeerDependencies: - supports-color - mdast-util-mdxjs-esm@2.0.1: + /mdast-util-mdxjs-esm@2.0.1: + resolution: {integrity: sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==} dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.3 - mdast-util-to-markdown: 2.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.1 transitivePeerDependencies: - supports-color - mdast-util-phrasing@4.1.0: + /mdast-util-phrasing@4.1.0: + resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} dependencies: '@types/mdast': 4.0.4 - unist-util-is: 6.0.1 + unist-util-is: 6.0.0 - mdast-util-to-hast@13.2.1: + /mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.3.0 + '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.1 + micromark-util-sanitize-uri: 2.0.0 trim-lines: 3.0.1 unist-util-position: 5.0.0 - unist-util-visit: 5.1.0 + unist-util-visit: 5.0.0 vfile: 6.0.3 - mdast-util-to-markdown@2.1.2: + /mdast-util-to-markdown@2.1.1: + resolution: {integrity: sha512-OrkcCoqAkEg9b1ykXBrA0ehRc8H4fGU/03cACmW2xXzau1+dIdS+qJugh1Cqex3hMumSBgSE/5pc7uqP12nLAw==} dependencies: '@types/mdast': 4.0.4 '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 - micromark-util-classify-character: 2.0.1 - micromark-util-decode-string: 2.0.1 - unist-util-visit: 5.1.0 + micromark-util-classify-character: 2.0.0 + micromark-util-decode-string: 2.0.0 + unist-util-visit: 5.0.0 zwitch: 2.0.4 - mdast-util-to-string@4.0.0: + /mdast-util-to-string@3.2.0: + resolution: {integrity: sha512-V4Zn/ncyN1QNSqSBxTrMOLpjr+IKdHl2v3KVLoWmDPscP4r9GcCi71gjgvUV1SFSKh92AjAG4peFuBl2/YgCJg==} + dependencies: + '@types/mdast': 3.0.15 + dev: false + + /mdast-util-to-string@4.0.0: + resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} dependencies: '@types/mdast': 4.0.4 - mdn-data@2.0.14: {} + /mdn-data@2.0.14: + resolution: {integrity: sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==} + dev: false - media-typer@0.3.0: {} + /media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + dev: false - memfs@3.5.3: + /memfs@3.5.3: + resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==} + engines: {node: '>= 4.0.0'} dependencies: fs-monkey: 1.1.0 + dev: false + + /merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} + dev: false - merge-descriptors@1.0.3: {} + /merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} - merge-stream@2.0.0: {} + /merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + dev: false + + /mermaid@10.9.5: + resolution: {integrity: sha512-eRlKEjzak4z1rcXeCd1OAlyawhrptClQDo8OuI8n6bSVqJ9oMfd5Lrf3Q+TdJHewi/9AIOc3UmEo8Fz+kNzzuQ==} + dependencies: + '@braintree/sanitize-url': 6.0.4 + '@types/d3-scale': 4.0.9 + '@types/d3-scale-chromatic': 3.1.0 + cytoscape: 3.33.2 + cytoscape-cose-bilkent: 4.1.0(cytoscape@3.33.2) + d3: 7.9.0 + d3-sankey: 0.12.3 + dagre-d3-es: 7.0.13 + dayjs: 1.11.20 + dompurify: 3.4.0 + elkjs: 0.9.3 + katex: 0.16.11 + khroma: 2.1.0 + lodash-es: 4.18.1 + mdast-util-from-markdown: 1.3.1 + non-layered-tidy-tree-layout: 2.0.2 + stylis: 4.3.6 + ts-dedent: 2.2.0 + uuid: 9.0.1 + web-worker: 1.5.0 + transitivePeerDependencies: + - supports-color + dev: false - merge2@1.4.1: {} + /methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + dev: false - methods@1.1.2: {} + /micromark-core-commonmark@1.1.0: + resolution: {integrity: sha512-BgHO1aRbolh2hcrzL2d1La37V0Aoz73ymF8rAcKnohLy93titmv62E0gP8Hrx9PKcKrqCZ1BbLGbP3bEhoXYlw==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-factory-destination: 1.1.0 + micromark-factory-label: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-factory-title: 1.1.0 + micromark-factory-whitespace: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-classify-character: 1.1.0 + micromark-util-html-tag-name: 1.2.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false - micromark-core-commonmark@2.0.3: + /micromark-core-commonmark@2.0.1: + resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} dependencies: - decode-named-character-reference: 1.3.0 + decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-factory-destination: 2.0.1 - micromark-factory-label: 2.0.1 - micromark-factory-space: 2.0.1 - micromark-factory-title: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-html-tag-name: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-directive@3.0.2: + micromark-factory-destination: 2.0.0 + micromark-factory-label: 2.0.0 + micromark-factory-space: 2.0.0 + micromark-factory-title: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-html-tag-name: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + /micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-factory-whitespace: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - parse-entities: 4.0.2 - - micromark-extension-frontmatter@2.0.0: + micromark-factory-space: 2.0.0 + micromark-factory-whitespace: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + parse-entities: 4.0.1 + dev: false + + /micromark-extension-frontmatter@2.0.0: + resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} dependencies: fault: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-gfm-autolink-literal@2.1.0: + /micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} dependencies: - micromark-util-character: 2.1.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-character: 2.1.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-gfm-footnote@2.1.0: + /micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} dependencies: devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-gfm-strikethrough@2.1.0: + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false + + /micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-classify-character: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-chunked: 2.0.0 + micromark-util-classify-character: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-gfm-table@2.1.1: + /micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-gfm-tagfilter@2.0.0: + /micromark-extension-gfm-tagfilter@2.0.0: + resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} dependencies: - micromark-util-types: 2.0.2 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-gfm-task-list-item@2.1.0: + /micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} dependencies: devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-gfm@3.0.0: + /micromark-extension-gfm@3.0.0: + resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} dependencies: micromark-extension-gfm-autolink-literal: 2.1.0 micromark-extension-gfm-footnote: 2.1.0 micromark-extension-gfm-strikethrough: 2.1.0 - micromark-extension-gfm-table: 2.1.1 + micromark-extension-gfm-table: 2.1.0 micromark-extension-gfm-tagfilter: 2.0.0 micromark-extension-gfm-task-list-item: 2.1.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-math@3.1.0: + /micromark-extension-math@3.1.0: + resolution: {integrity: sha512-lvEqd+fHjATVs+2v/8kg9i5Q0AP2k85H0WUOwpIVvUML8BapsMvh1XAogmQjOCsLpoKRCVQqEkQBB3NhVBcsOg==} dependencies: - '@types/katex': 0.16.8 + '@types/katex': 0.16.7 devlop: 1.1.0 - katex: 0.16.44 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + katex: 0.16.11 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + dev: false - micromark-extension-mdx-expression@3.0.1: + /micromark-extension-mdx-expression@3.0.0: + resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - - micromark-extension-mdx-jsx@3.0.2: - dependencies: - '@types/estree': 1.0.8 + micromark-factory-mdx-expression: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + /micromark-extension-mdx-jsx@3.0.1: + resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.6 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 - - micromark-extension-mdx-md@2.0.0: + micromark-factory-mdx-expression: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + + /micromark-extension-mdx-md@2.0.0: + resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} dependencies: - micromark-util-types: 2.0.2 + micromark-util-types: 2.0.0 - micromark-extension-mdxjs-esm@3.0.0: + /micromark-extension-mdxjs-esm@3.0.0: + resolution: {integrity: sha512-DJFl4ZqkErRpq/dAPyeWp15tGrcrrJho1hKK5uBS70BCtfrIFg81sqcTVu3Ta+KD1Tk5vAtBNElWxtAa+m8K9A==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-core-commonmark: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 + vfile-message: 4.0.2 - micromark-extension-mdxjs@3.0.0: + /micromark-extension-mdxjs@3.0.0: + resolution: {integrity: sha512-A873fJfhnJ2siZyUrJ31l34Uqwy4xIFmvPY1oj+Ean5PHcPBYzEsvqvWGaWcfEIr11O5Dlw3p2y0tZWpKHDejQ==} dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) - micromark-extension-mdx-expression: 3.0.1 - micromark-extension-mdx-jsx: 3.0.2 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + micromark-extension-mdx-expression: 3.0.0 + micromark-extension-mdx-jsx: 3.0.1 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 - micromark-util-combine-extensions: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-combine-extensions: 2.0.0 + micromark-util-types: 2.0.0 - micromark-factory-destination@2.0.1: + /micromark-factory-destination@1.1.0: + resolution: {integrity: sha512-XaNDROBgx9SgSChd69pjiGKbV+nfHGDPVYFs5dOoDd7ZnMAE+Cuu91BCpsY8RT2NP9vo/B8pds2VQNCLiu0zhg==} dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false + + /micromark-factory-destination@2.0.0: + resolution: {integrity: sha512-j9DGrQLm/Uhl2tCzcbLhy5kXsgkHUrjJHg4fFAeoMRwJmJerT9aw4FEhIbZStWN8A3qMwOp1uzHr4UL8AInxtA==} + dependencies: + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + + /micromark-factory-label@1.1.0: + resolution: {integrity: sha512-OLtyez4vZo/1NjxGhcpDSbHQ+m0IIGnT8BoPamh+7jVlzLJBH98zzuCoUeMxvM6WsNeh8wx8cKvqLiPHEACn0w==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false - micromark-factory-label@2.0.1: + /micromark-factory-label@2.0.0: + resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} dependencies: devlop: 1.1.0 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-factory-mdx-expression@2.0.3: + /micromark-factory-mdx-expression@2.0.2: + resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 devlop: 1.1.0 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-events-to-acorn: 2.0.3 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 unist-util-position-from-estree: 2.0.0 - vfile-message: 4.0.3 + vfile-message: 4.0.2 + + /micromark-factory-space@1.1.0: + resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} + dependencies: + micromark-util-character: 1.2.0 + micromark-util-types: 1.1.0 + dev: false - micromark-factory-space@1.1.0: + /micromark-factory-space@2.0.0: + resolution: {integrity: sha512-TKr+LIDX2pkBJXFLzpyPyljzYK3MtmllMUMODTQJIUfDGncESaqB90db9IAUcz4AZAJFdd8U9zOp9ty1458rxg==} dependencies: + micromark-util-character: 2.1.0 + micromark-util-types: 2.0.0 + + /micromark-factory-title@1.1.0: + resolution: {integrity: sha512-J7n9R3vMmgjDOCY8NPw55jiyaQnH5kBdV2/UXCtZIpnHH3P6nHUKaH7XXEYuWwx/xUJcawa8plLBEjMPU24HzQ==} + dependencies: + micromark-factory-space: 1.1.0 micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: false - micromark-factory-space@2.0.1: + /micromark-factory-title@2.0.0: + resolution: {integrity: sha512-jY8CSxmpWLOxS+t8W+FG3Xigc0RDQA9bKMY/EwILvsesiRniiVMejYTE4wumNc2f4UbAa4WsHqe3J1QS1sli+A==} dependencies: - micromark-util-character: 2.1.1 - micromark-util-types: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-factory-title@2.0.1: + /micromark-factory-whitespace@1.1.0: + resolution: {integrity: sha512-v2WlmiymVSp5oMg+1Q0N1Lxmt6pMhIHD457whWM7/GUlEks1hI9xj5w3zbc4uuMKXGisksZk8DzP2UyGbGqNsQ==} dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false - micromark-factory-whitespace@2.0.1: + /micromark-factory-whitespace@2.0.0: + resolution: {integrity: sha512-28kbwaBjc5yAI1XadbdPYHX/eDnqaUFVikLwrO7FDnKG7lpgxnvk/XGRhX/PN0mOZ+dBSZ+LgunHS+6tYQAzhA==} dependencies: - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-character@1.2.0: + /micromark-util-character@1.2.0: + resolution: {integrity: sha512-lXraTwcX3yH/vMDaFWCQJP1uIszLVebzUa3ZHdrgxr7KEU/9mL4mVgCpGbyhvNLNlauROiNUq7WN5u7ndbY6xg==} dependencies: micromark-util-symbol: 1.1.0 micromark-util-types: 1.1.0 + dev: false - micromark-util-character@2.1.1: + /micromark-util-character@2.1.0: + resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} dependencies: - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-chunked@2.0.1: + /micromark-util-chunked@1.1.0: + resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==} dependencies: - micromark-util-symbol: 2.0.1 + micromark-util-symbol: 1.1.0 + dev: false - micromark-util-classify-character@2.0.1: + /micromark-util-chunked@2.0.0: + resolution: {integrity: sha512-anK8SWmNphkXdaKgz5hJvGa7l00qmcaUQoMYsBwDlSKFKjc6gjGXPDw3FNL3Nbwq5L8gE+RCbGqTw49FK5Qyvg==} dependencies: - micromark-util-character: 2.1.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-symbol: 2.0.0 - micromark-util-combine-extensions@2.0.1: + /micromark-util-classify-character@1.1.0: + resolution: {integrity: sha512-SL0wLxtKSnklKSUplok1WQFoGhUdWYKggKUiqhX+Swala+BtptGCu5iPRc+xvzJ4PXE/hwM3FNXsfEVgoZsWbw==} dependencies: - micromark-util-chunked: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-character: 1.2.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + dev: false - micromark-util-decode-numeric-character-reference@2.0.2: + /micromark-util-classify-character@2.0.0: + resolution: {integrity: sha512-S0ze2R9GH+fu41FA7pbSqNWObo/kzwf8rN/+IGlW/4tC6oACOs8B++bh+i9bVyNnwCcuksbFwsBme5OCKXCwIw==} dependencies: - micromark-util-symbol: 2.0.1 + micromark-util-character: 2.1.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-decode-string@2.0.1: + /micromark-util-combine-extensions@1.1.0: + resolution: {integrity: sha512-Q20sp4mfNf9yEqDL50WwuWZHUrCO4fEyeDCnMGmG5Pr0Cz15Uo7KBs6jq+dq0EgX4DPwwrh9m0X+zPV1ypFvUA==} dependencies: - decode-named-character-reference: 1.3.0 - micromark-util-character: 2.1.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-symbol: 2.0.1 + micromark-util-chunked: 1.1.0 + micromark-util-types: 1.1.0 + dev: false - micromark-util-encode@2.0.1: {} + /micromark-util-combine-extensions@2.0.0: + resolution: {integrity: sha512-vZZio48k7ON0fVS3CUgFatWHoKbbLTK/rT7pzpJ4Bjp5JjkZeasRfrS9wsBdDJK2cJLHMckXZdzPSSr1B8a4oQ==} + dependencies: + micromark-util-chunked: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-events-to-acorn@2.0.3: + /micromark-util-decode-numeric-character-reference@1.1.0: + resolution: {integrity: sha512-m9V0ExGv0jB1OT21mrWcuf4QhP46pH1KkfWy9ZEezqHKAxkj4mPCy3nIH1rkbdMlChLHX531eOrymlwyZIf2iw==} dependencies: - '@types/estree': 1.0.8 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-decode-numeric-character-reference@2.0.1: + resolution: {integrity: sha512-bmkNc7z8Wn6kgjZmVHOX3SowGmVdhYS7yBpMnuMnPzDq/6xwVA604DuOXMZTO1lvq01g+Adfa0pE2UKGlxL1XQ==} + dependencies: + micromark-util-symbol: 2.0.0 + + /micromark-util-decode-string@1.1.0: + resolution: {integrity: sha512-YphLGCK8gM1tG1bd54azwyrQRjCFcmgj2S2GoJDNnh4vYtnL38JS8M4gpxzOPNyHdNEpheyWXCTnnTDY3N+NVQ==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 1.2.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-decode-string@2.0.0: + resolution: {integrity: sha512-r4Sc6leeUTn3P6gk20aFMj2ntPwn6qpDZqWvYmAG6NgvFTIlj4WtrAudLi65qYoaGdXYViXYw2pkmn7QnIFasA==} + dependencies: + decode-named-character-reference: 1.0.2 + micromark-util-character: 2.1.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-symbol: 2.0.0 + + /micromark-util-encode@1.1.0: + resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==} + dev: false + + /micromark-util-encode@2.0.0: + resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} + + /micromark-util-events-to-acorn@2.0.2: + resolution: {integrity: sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==} + dependencies: + '@types/acorn': 4.0.6 + '@types/estree': 1.0.6 '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 - vfile-message: 4.0.3 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 + vfile-message: 4.0.2 + + /micromark-util-html-tag-name@1.2.0: + resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==} + dev: false + + /micromark-util-html-tag-name@2.0.0: + resolution: {integrity: sha512-xNn4Pqkj2puRhKdKTm8t1YHC/BAjx6CEwRFXntTaRf/x16aqka6ouVoutm+QdkISTlT7e2zU7U4ZdlDLJd2Mcw==} + + /micromark-util-normalize-identifier@1.1.0: + resolution: {integrity: sha512-N+w5vhqrBihhjdpM8+5Xsxy71QWqGn7HYNUvch71iV2PM7+E3uWGox1Qp90loa1ephtCxG2ftRV/Conitc6P2Q==} + dependencies: + micromark-util-symbol: 1.1.0 + dev: false + + /micromark-util-normalize-identifier@2.0.0: + resolution: {integrity: sha512-2xhYT0sfo85FMrUPtHcPo2rrp1lwbDEEzpx7jiH2xXJLqBuy4H0GgXk5ToU8IEwoROtXuL8ND0ttVa4rNqYK3w==} + dependencies: + micromark-util-symbol: 2.0.0 - micromark-util-html-tag-name@2.0.1: {} + /micromark-util-resolve-all@1.1.0: + resolution: {integrity: sha512-b/G6BTMSg+bX+xVCshPTPyAu2tmA0E4X98NSR7eIbeC6ycCqCeE7wjfDIgzEbkzdEVJXRtOG4FbEm/uGbCRouA==} + dependencies: + micromark-util-types: 1.1.0 + dev: false + + /micromark-util-resolve-all@2.0.0: + resolution: {integrity: sha512-6KU6qO7DZ7GJkaCgwBNtplXCvGkJToU86ybBAUdavvgsCiG8lSSvYxr9MhwmQ+udpzywHsl4RpGJsYWG1pDOcA==} + dependencies: + micromark-util-types: 2.0.0 - micromark-util-normalize-identifier@2.0.1: + /micromark-util-sanitize-uri@1.2.0: + resolution: {integrity: sha512-QO4GXv0XZfWey4pYFndLUKEAktKkG5kZTdUNaTAkzbuJxn2tNBOr+QtxR2XpWaMhbImT2dPzyLrPXLlPhph34A==} dependencies: - micromark-util-symbol: 2.0.1 + micromark-util-character: 1.2.0 + micromark-util-encode: 1.1.0 + micromark-util-symbol: 1.1.0 + dev: false - micromark-util-resolve-all@2.0.1: + /micromark-util-sanitize-uri@2.0.0: + resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} dependencies: - micromark-util-types: 2.0.2 + micromark-util-character: 2.1.0 + micromark-util-encode: 2.0.0 + micromark-util-symbol: 2.0.0 - micromark-util-sanitize-uri@2.0.1: + /micromark-util-subtokenize@1.1.0: + resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==} dependencies: - micromark-util-character: 2.1.1 - micromark-util-encode: 2.0.1 - micromark-util-symbol: 2.0.1 + micromark-util-chunked: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + dev: false - micromark-util-subtokenize@2.1.0: + /micromark-util-subtokenize@2.0.1: + resolution: {integrity: sha512-jZNtiFl/1aY73yS3UGQkutD0UbhTt68qnRpw2Pifmz5wV9h8gOVsN70v+Lq/f1rKaU/W8pxRe8y8Q9FX1AOe1Q==} dependencies: devlop: 1.1.0 - micromark-util-chunked: 2.0.1 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-util-chunked: 2.0.0 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 - micromark-util-symbol@1.1.0: {} + /micromark-util-symbol@1.1.0: + resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==} + dev: false + + /micromark-util-symbol@2.0.0: + resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - micromark-util-symbol@2.0.1: {} + /micromark-util-types@1.1.0: + resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==} + dev: false - micromark-util-types@1.1.0: {} + /micromark-util-types@2.0.0: + resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - micromark-util-types@2.0.2: {} + /micromark@3.2.0: + resolution: {integrity: sha512-uD66tJj54JLYq0De10AhWycZWGQNUvDI55xPgk2sQM5kn1JYlhbCMTtEeT27+vAhW2FBQxLlOmS3pmA7/2z4aA==} + dependencies: + '@types/debug': 4.1.12 + debug: 4.3.7 + decode-named-character-reference: 1.0.2 + micromark-core-commonmark: 1.1.0 + micromark-factory-space: 1.1.0 + micromark-util-character: 1.2.0 + micromark-util-chunked: 1.1.0 + micromark-util-combine-extensions: 1.1.0 + micromark-util-decode-numeric-character-reference: 1.1.0 + micromark-util-encode: 1.1.0 + micromark-util-normalize-identifier: 1.1.0 + micromark-util-resolve-all: 1.1.0 + micromark-util-sanitize-uri: 1.2.0 + micromark-util-subtokenize: 1.1.0 + micromark-util-symbol: 1.1.0 + micromark-util-types: 1.1.0 + uvu: 0.5.6 + transitivePeerDependencies: + - supports-color + dev: false - micromark@4.0.2: + /micromark@4.0.0: + resolution: {integrity: sha512-o/sd0nMof8kYff+TqcDx3VSrgBTcZpSvYcAHIfHhv5VAuNmisCxjhx6YmxS8PFEpb9z5WKWKPdzf0jM23ro3RQ==} dependencies: - '@types/debug': 4.1.13 - debug: 4.4.3 - decode-named-character-reference: 1.3.0 + '@types/debug': 4.1.12 + debug: 4.3.7 + decode-named-character-reference: 1.0.2 devlop: 1.1.0 - micromark-core-commonmark: 2.0.3 - micromark-factory-space: 2.0.1 - micromark-util-character: 2.1.1 - micromark-util-chunked: 2.0.1 - micromark-util-combine-extensions: 2.0.1 - micromark-util-decode-numeric-character-reference: 2.0.2 - micromark-util-encode: 2.0.1 - micromark-util-normalize-identifier: 2.0.1 - micromark-util-resolve-all: 2.0.1 - micromark-util-sanitize-uri: 2.0.1 - micromark-util-subtokenize: 2.1.0 - micromark-util-symbol: 2.0.1 - micromark-util-types: 2.0.2 + micromark-core-commonmark: 2.0.1 + micromark-factory-space: 2.0.0 + micromark-util-character: 2.1.0 + micromark-util-chunked: 2.0.0 + micromark-util-combine-extensions: 2.0.0 + micromark-util-decode-numeric-character-reference: 2.0.1 + micromark-util-encode: 2.0.0 + micromark-util-normalize-identifier: 2.0.0 + micromark-util-resolve-all: 2.0.0 + micromark-util-sanitize-uri: 2.0.0 + micromark-util-subtokenize: 2.0.1 + micromark-util-symbol: 2.0.0 + micromark-util-types: 2.0.0 transitivePeerDependencies: - supports-color - micromatch@4.0.8: + /micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} dependencies: braces: 3.0.3 - picomatch: 2.3.2 + picomatch: 2.3.1 + dev: false - mime-db@1.33.0: {} + /mime-db@1.33.0: + resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} + engines: {node: '>= 0.6'} + dev: false - mime-db@1.52.0: {} + /mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} - mime-db@1.54.0: {} + /mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + dev: false - mime-types@2.1.18: + /mime-types@2.1.18: + resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.33.0 + dev: false - mime-types@2.1.35: + /mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} dependencies: mime-db: 1.52.0 - mime@1.6.0: {} + /mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + dev: false - mimic-fn@2.1.0: {} + /mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + dev: false - mimic-response@3.1.0: {} + /mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + dev: false - mimic-response@4.0.0: {} + /mimic-response@4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false - mini-css-extract-plugin@2.10.2(webpack@5.105.4): + /mini-css-extract-plugin@2.9.2(webpack@5.105.4): + resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: 5.105.4 dependencies: - schema-utils: 4.3.3 - tapable: 2.3.2 + schema-utils: 4.2.0 + tapable: 2.2.1 webpack: 5.105.4 + dev: false + + /minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + dev: false - minimalistic-assert@1.0.1: {} + /minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + dependencies: + brace-expansion: 1.1.11 + dev: false - minimatch@3.1.5: + /minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: - brace-expansion: 1.1.13 + brace-expansion: 2.0.1 + dev: false + + /minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + dev: false + + /minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + dev: false - minimist@1.2.8: {} + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} + dev: false - mrmime@2.0.1: {} + /mrmime@2.0.0: + resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} + engines: {node: '>=10'} + dev: false - ms@2.0.0: {} + /ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false - ms@2.1.3: {} + /ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - multicast-dns@7.2.5: + /multicast-dns@7.2.5: + resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} + hasBin: true dependencies: dns-packet: 5.6.1 thunky: 1.1.0 + dev: false - mz@2.7.0: + /mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} dependencies: any-promise: 1.3.0 object-assign: 4.1.1 thenify-all: 1.6.0 + dev: false + + /nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false - nanoid@3.3.11: {} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + dev: false - negotiator@0.6.3: {} + /negotiator@0.6.3: + resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} + engines: {node: '>= 0.6'} + dev: false - negotiator@0.6.4: {} + /negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + dev: false - neo-async@2.6.2: {} + /neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - no-case@3.0.4: + /no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 tslib: 2.8.1 + dev: false - node-addon-api@7.1.1: + /node-addon-api@7.1.1: + resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} + requiresBuild: true + dev: false optional: true - node-emoji@2.2.0: + /node-emoji@2.1.3: + resolution: {integrity: sha512-E2WEOVsgs7O16zsURJ/eH8BqhF029wGpEOnv7Urwdo2wmQanOACwJQh0devF9D9RhoZru0+9JXIS0dBXIAz+lA==} + engines: {node: '>=18'} dependencies: '@sindresorhus/is': 4.6.0 char-regex: 1.0.2 emojilib: 2.4.0 skin-tone: 2.0.0 + dev: false + + /node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + dev: false + + /node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} + dev: false + + /node-releases@2.0.27: + resolution: {integrity: sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==} + dev: false - node-forge@1.4.0: {} + /node-releases@2.0.38: + resolution: {integrity: sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==} - node-releases@2.0.36: {} + /non-layered-tidy-tree-layout@2.0.2: + resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} + dev: false - normalize-path@3.0.0: {} + /normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + dev: false + + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: false - normalize-url@6.1.0: {} + /normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + dev: false - normalize-url@8.1.1: {} + /normalize-url@8.0.1: + resolution: {integrity: sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==} + engines: {node: '>=14.16'} + dev: false - npm-run-path@4.0.1: + /npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} dependencies: path-key: 3.1.1 + dev: false - nprogress@0.2.0: {} + /nprogress@0.2.0: + resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + dev: false - nth-check@2.1.1: + /nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} dependencies: boolbase: 1.0.0 + dev: false - object-assign@4.1.1: {} + /object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} - object-hash@3.0.0: {} + /object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + dev: false - object-inspect@1.13.4: {} + /object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} + dev: false - object-keys@1.1.1: {} + /object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + dev: false - object.assign@4.1.7: + /object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} dependencies: - call-bind: 1.0.8 - call-bound: 1.0.4 + call-bind: 1.0.7 define-properties: 1.2.1 - es-object-atoms: 1.1.1 - has-symbols: 1.1.0 + has-symbols: 1.0.3 object-keys: 1.1.1 + dev: false - obuf@1.1.2: {} + /obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + dev: false - on-finished@2.4.1: + /on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} dependencies: ee-first: 1.1.1 + dev: false - on-headers@1.1.0: {} + /on-headers@1.0.2: + resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} + engines: {node: '>= 0.8'} + dev: false - once@1.4.0: + /once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} dependencies: wrappy: 1.0.2 + dev: false - onetime@5.1.2: + /onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 + dev: false - open@8.4.2: + /open@8.4.2: + resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} + engines: {node: '>=12'} dependencies: define-lazy-prop: 2.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 + dev: false - opener@1.5.2: {} + /opener@1.5.2: + resolution: {integrity: sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==} + hasBin: true + dev: false - os-shim@0.1.3: {} + /os-shim@0.1.3: + resolution: {integrity: sha512-jd0cvB8qQ5uVt0lvCIexBaROw1KyKm5sbulg2fWOHjETisuCzWyt+eTZKEMs8v6HwzoGs8xik26jg7eCM6pS+A==} + engines: {node: '>= 0.4.0'} + dev: true - ox@0.14.7(typescript@5.2.2): + /ox@0.11.3(typescript@5.4.5): + resolution: {integrity: sha512-1bWYGk/xZel3xro3l8WGg6eq4YEKlaqvyMtVhfMFpbJzK2F6rj4EDRtqDCWVEJMkzcmEi9uW2QxsqELokOlarw==} + peerDependencies: + typescript: '>=5.4.0' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@adraffy/ens-normalize': 1.11.1 '@noble/ciphers': 1.3.0 @@ -9959,490 +8430,882 @@ snapshots: '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.2.2) + abitype: 1.2.3(typescript@5.4.5) eventemitter3: 5.0.1 - optionalDependencies: - typescript: 5.2.2 + typescript: 5.4.5 transitivePeerDependencies: - zod + dev: false - p-cancelable@3.0.0: {} + /p-cancelable@3.0.0: + resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} + engines: {node: '>=12.20'} + dev: false - p-limit@2.3.0: + /p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} dependencies: p-try: 2.2.0 + dev: false - p-limit@3.1.0: + /p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} dependencies: yocto-queue: 0.1.0 + dev: false - p-limit@4.0.0: + /p-limit@4.0.0: + resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - yocto-queue: 1.2.2 + yocto-queue: 1.1.1 + dev: false - p-locate@3.0.0: + /p-locate@3.0.0: + resolution: {integrity: sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==} + engines: {node: '>=6'} dependencies: p-limit: 2.3.0 + dev: false - p-locate@5.0.0: + /p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} dependencies: p-limit: 3.1.0 + dev: false - p-locate@6.0.0: + /p-locate@6.0.0: + resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: p-limit: 4.0.0 + dev: false - p-map@4.0.0: + /p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} dependencies: aggregate-error: 3.1.0 + dev: false - p-retry@4.6.2: + /p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} dependencies: '@types/retry': 0.12.0 retry: 0.13.1 + dev: false - p-try@2.2.0: {} + /p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + dev: false - package-json@8.1.1: + /package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} + dev: false + + /package-json@8.1.1: + resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} + engines: {node: '>=14.16'} dependencies: got: 12.6.1 - registry-auth-token: 5.1.1 + registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.7.4 + semver: 7.6.3 + dev: false - param-case@3.0.4: + /param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 tslib: 2.8.1 + dev: false - parent-module@1.0.1: + /parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} dependencies: callsites: 3.1.0 + dev: false - parse-entities@4.0.2: + /parse-entities@4.0.1: + resolution: {integrity: sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==} dependencies: '@types/unist': 2.0.11 + character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 - decode-named-character-reference: 1.3.0 + decode-named-character-reference: 1.0.2 is-alphanumerical: 2.0.1 is-decimal: 2.0.1 is-hexadecimal: 2.0.1 - parse-json@5.2.0: + /parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} dependencies: - '@babel/code-frame': 7.29.0 - error-ex: 1.3.4 + '@babel/code-frame': 7.26.2 + error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + dev: false - parse-numeric-range@1.3.0: {} - - parse5-htmlparser2-tree-adapter@7.1.0: - dependencies: - domhandler: 5.0.3 - parse5: 7.3.0 + /parse-numeric-range@1.3.0: + resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + dev: false - parse5-parser-stream@7.1.2: + /parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} dependencies: - parse5: 7.3.0 + domhandler: 5.0.3 + parse5: 7.2.1 + dev: false - parse5@7.3.0: + /parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} dependencies: - entities: 6.0.1 + entities: 4.5.0 + dev: false - parseurl@1.3.3: {} + /parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + dev: false - pascal-case@3.1.2: + /pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 tslib: 2.8.1 + dev: false + + /path-exists@3.0.0: + resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} + engines: {node: '>=4'} + dev: false - path-exists@3.0.0: {} + /path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + dev: false - path-exists@4.0.0: {} + /path-exists@5.0.0: + resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false - path-exists@5.0.0: {} + /path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + dev: false - path-is-absolute@1.0.1: {} + /path-is-inside@1.0.2: + resolution: {integrity: sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==} + dev: false - path-is-inside@1.0.2: {} + /path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + dev: false - path-key@3.1.1: {} + /path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + dev: false - path-parse@1.0.7: {} + /path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + dependencies: + lru-cache: 10.4.3 + minipass: 7.1.2 + dev: false - path-to-regexp@0.1.13: {} + /path-to-regexp@0.1.12: + resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} + dev: false - path-to-regexp@1.9.0: + /path-to-regexp@1.9.0: + resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} dependencies: isarray: 0.0.1 + dev: false - path-to-regexp@3.3.0: {} - - path-type@4.0.0: {} + /path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} + dev: false - picocolors@1.1.1: {} + /path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + dev: false - picomatch@2.3.2: {} + /picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} - picomatch@4.0.4: {} + /picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + dev: false - pify@2.3.0: {} + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: false - pirates@4.0.7: {} + /pirates@4.0.6: + resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + engines: {node: '>= 6'} + dev: false - pkg-dir@7.0.0: + /pkg-dir@7.0.0: + resolution: {integrity: sha512-Ie9z/WINcxxLp27BKOCHGde4ITq9UklYKDzVo1nhk5sqGEXU3FpkwP5GM2voTGJkGd9B3Otl+Q4uwSOeSUtOBA==} + engines: {node: '>=14.16'} dependencies: find-up: 6.3.0 + dev: false - pkg-up@3.1.0: + /pkg-up@3.1.0: + resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==} + engines: {node: '>=8'} dependencies: find-up: 3.0.0 + dev: false - postcss-calc@8.2.4(postcss@8.5.8): + /postcss-calc@8.2.4(postcss@8.5.6): + resolution: {integrity: sha512-SmWMSJmB8MRnnULldx0lQIyhSNvuDl9HfrZkaqqE/WHAhToYsAvDq+yAsA/kIyINDszOp3Rh0GFoNuH5Ypsm3Q==} + peerDependencies: + postcss: ^8.2.2 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 + dev: false - postcss-colormin@5.3.1(postcss@8.5.8): + /postcss-colormin@5.3.1(postcss@8.5.6): + resolution: {integrity: sha512-UsWQG0AqTFQmpBegeLLc1+c3jIqBNB0zlDGRWR+dQ3pRKJL1oeMzyqmH3o2PIfn9MBdNrVPWhDbT769LxCTLJQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - browserslist: 4.28.1 + browserslist: 4.28.0 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-convert-values@5.1.3(postcss@8.5.8): + /postcss-convert-values@5.1.3(postcss@8.5.6): + resolution: {integrity: sha512-82pC1xkJZtcJEfiLw6UXnXVXScgtBrjlO5CBmuDQc+dlb88ZYheFsjTn40+zBVi3DkfF7iezO0nJUPLcJK3pvA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - browserslist: 4.28.1 - postcss: 8.5.8 + browserslist: 4.28.0 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-discard-comments@5.1.2(postcss@8.5.8): + /postcss-discard-comments@5.1.2(postcss@8.5.6): + resolution: {integrity: sha512-+L8208OVbHVF2UQf1iDmRcbdjJkuBF6IS29yBDSiWUIzpYaAhtNl6JYnYm12FnkeCwQqF5LeklOu6rAqgfBZqQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - postcss-discard-duplicates@5.1.0(postcss@8.5.8): + /postcss-discard-duplicates@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-zmX3IoSI2aoenxHV6C7plngHWWhUOV3sP1T8y2ifzxzbtnuhk1EdPwm0S1bIUNaJ2eNbWeGLEwzw8huPD67aQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - postcss-discard-empty@5.1.1(postcss@8.5.8): + /postcss-discard-empty@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-zPz4WljiSuLWsI0ir4Mcnr4qQQ5e1Ukc3i7UfE2XcrwKK2LIPIqE5jxMRxO6GbI3cv//ztXDsXwEWT3BHOGh3A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - postcss-discard-overridden@5.1.0(postcss@8.5.8): + /postcss-discard-overridden@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-21nOL7RqWR1kasIVdKs8HNqQJhFxLsyRfAnUDm4Fe4t4mCWL9OJiHvlHPjcd8zc5Myu89b/7wZDnOSjFgeWRtw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - postcss-discard-unused@5.1.0(postcss@8.5.8): + /postcss-discard-unused@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-KwLWymI9hbwXmJa0dkrzpRbSJEh0vVUd7r8t0yOGPcfKzyJJxFM8kLyC5Ev9avji6nY95pOp1W6HqIrfT+0VGw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 + dev: false - postcss-import@15.1.0(postcss@8.5.8): + /postcss-import@15.1.0(postcss@8.4.47): + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 dependencies: - postcss: 8.5.8 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 - resolve: 1.22.11 + resolve: 1.22.8 + dev: false - postcss-js@4.1.0(postcss@8.5.8): + /postcss-js@4.0.1(postcss@8.4.47): + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 dependencies: camelcase-css: 2.0.1 - postcss: 8.5.8 + postcss: 8.4.47 + dev: false - postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.8): + /postcss-load-config@4.0.2(postcss@8.4.47): + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true dependencies: - lilconfig: 3.1.3 - optionalDependencies: - jiti: 1.21.7 - postcss: 8.5.8 + lilconfig: 3.1.2 + postcss: 8.4.47 + yaml: 2.6.0 + dev: false - postcss-loader@7.3.4(postcss@8.5.8)(typescript@5.2.2)(webpack@5.105.4): + /postcss-loader@7.3.4(postcss@8.5.6)(typescript@5.4.5)(webpack@5.105.4): + resolution: {integrity: sha512-iW5WTTBSC5BfsBJ9daFMPVrLT36MrNiC6fqOZTTaHjBNX6Pfd5p+hSBqe/fEeNd7pc13QiAyGt7VdGMw4eRC4A==} + engines: {node: '>= 14.15.0'} + peerDependencies: + postcss: ^7.0.0 || ^8.0.1 + webpack: 5.105.4 dependencies: - cosmiconfig: 8.3.6(typescript@5.2.2) - jiti: 1.21.7 - postcss: 8.5.8 - semver: 7.7.4 + cosmiconfig: 8.3.6(typescript@5.4.5) + jiti: 1.21.6 + postcss: 8.5.6 + semver: 7.6.3 webpack: 5.105.4 transitivePeerDependencies: - typescript + dev: false - postcss-merge-idents@5.1.1(postcss@8.5.8): + /postcss-merge-idents@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-pCijL1TREiCoog5nQp7wUe+TUonA2tC2sQ54UGeMmryK3UFGIYKqDyjnqd6RcuI4znFn9hWSLNN8xKE/vWcUQw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - cssnano-utils: 3.1.0(postcss@8.5.8) - postcss: 8.5.8 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-merge-longhand@5.1.7(postcss@8.5.8): + /postcss-merge-longhand@5.1.7(postcss@8.5.6): + resolution: {integrity: sha512-YCI9gZB+PLNskrK0BB3/2OzPnGhPkBEwmwhfYk1ilBHYVAZB7/tkTHFBAnCrvBBOmeYyMYw3DMjT55SyxMBzjQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - stylehacks: 5.1.1(postcss@8.5.8) + stylehacks: 5.1.1(postcss@8.5.6) + dev: false - postcss-merge-rules@5.1.4(postcss@8.5.8): + /postcss-merge-rules@5.1.4(postcss@8.5.6): + resolution: {integrity: sha512-0R2IuYpgU93y9lhVbO/OylTtKMVcHb67zjWIfCiKR9rWL3GUk1677LAqD/BcHizukdZEjT8Ru3oHRoAYoJy44g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - browserslist: 4.28.1 + browserslist: 4.28.0 caniuse-api: 3.0.0 - cssnano-utils: 3.1.0(postcss@8.5.8) - postcss: 8.5.8 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-selector-parser: 6.1.2 + dev: false - postcss-minify-font-values@5.1.0(postcss@8.5.8): + /postcss-minify-font-values@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-el3mYTgx13ZAPPirSVsHqFzl+BBBDrXvbySvPGFnQcTI4iNslrPaFq4muTkLZmKlGk4gyFAYUBMH30+HurREyA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-minify-gradients@5.1.1(postcss@8.5.8): + /postcss-minify-gradients@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-VGvXMTpCEo4qHTNSa9A0a3D+dxGFZCYwR6Jokk+/3oB6flu2/PnPXAh2x7x52EkY5xlIHLm+Le8tJxe/7TNhzw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: colord: 2.9.3 - cssnano-utils: 3.1.0(postcss@8.5.8) - postcss: 8.5.8 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-minify-params@5.1.4(postcss@8.5.8): + /postcss-minify-params@5.1.4(postcss@8.5.6): + resolution: {integrity: sha512-+mePA3MgdmVmv6g+30rn57USjOGSAyuxUmkfiWpzalZ8aiBkdPYjXWtHuwJGm1v5Ojy0Z0LaSYhHaLJQB0P8Jw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - browserslist: 4.28.1 - cssnano-utils: 3.1.0(postcss@8.5.8) - postcss: 8.5.8 + browserslist: 4.28.0 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-minify-selectors@5.2.1(postcss@8.5.8): + /postcss-minify-selectors@5.2.1(postcss@8.5.6): + resolution: {integrity: sha512-nPJu7OjZJTsVUmPdm2TcaiohIwxP+v8ha9NehQ2ye9szv4orirRU3SDdtUmKH+10nzn0bAyOXZ0UEr7OpvLehg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 + dev: false - postcss-modules-extract-imports@3.1.0(postcss@8.5.8): + /postcss-modules-extract-imports@3.1.0(postcss@8.5.6): + resolution: {integrity: sha512-k3kNe0aNFQDAZGbin48pL2VNidTF0w4/eASDsxlyspobzU3wZQLOGj7L9gfRe0Jo9/4uud09DsjFNH7winGv8Q==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - postcss-modules-local-by-default@4.2.0(postcss@8.5.8): + /postcss-modules-local-by-default@4.0.5(postcss@8.5.6): + resolution: {integrity: sha512-6MieY7sIfTK0hYfafw1OMEG+2bg8Q1ocHCpoWLqOKj3JXlKu4G7btkmM/B7lFubYkYWmRSPLZi5chid63ZaZYw==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.5.8) - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 + dev: false - postcss-modules-scope@3.2.1(postcss@8.5.8): + /postcss-modules-scope@3.2.0(postcss@8.5.6): + resolution: {integrity: sha512-oq+g1ssrsZOsx9M96c5w8laRmvEu9C3adDSjI8oTcbfkrTE8hx/zfyobUoWIxaKPO8bt6S62kxpw5GqypEw1QQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - postcss: 8.5.8 - postcss-selector-parser: 7.1.1 + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + dev: false - postcss-modules-values@4.0.0(postcss@8.5.8): + /postcss-modules-values@4.0.0(postcss@8.5.6): + resolution: {integrity: sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==} + engines: {node: ^10 || ^12 || >= 14} + peerDependencies: + postcss: ^8.1.0 dependencies: - icss-utils: 5.1.0(postcss@8.5.8) - postcss: 8.5.8 + icss-utils: 5.1.0(postcss@8.5.6) + postcss: 8.5.6 + dev: false - postcss-nested@6.2.0(postcss@8.5.8): + /postcss-nested@6.2.0(postcss@8.4.47): + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 dependencies: - postcss: 8.5.8 + postcss: 8.4.47 postcss-selector-parser: 6.1.2 + dev: false - postcss-normalize-charset@5.1.0(postcss@8.5.8): + /postcss-normalize-charset@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-mSgUJ+pd/ldRGVx26p2wz9dNZ7ji6Pn8VWBajMXFf8jk7vUoSrZ2lt/wZR7DtlZYKesmZI680qjr2CeFF2fbUg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - postcss-normalize-display-values@5.1.0(postcss@8.5.8): + /postcss-normalize-display-values@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-WP4KIM4o2dazQXWmFaqMmcvsKmhdINFblgSeRgn8BJ6vxaMyaJkwAzpPpuvSIoG/rmX3M+IrRZEz2H0glrQNEA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-normalize-positions@5.1.1(postcss@8.5.8): + /postcss-normalize-positions@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-6UpCb0G4eofTCQLFVuI3EVNZzBNPiIKcA1AKVka+31fTVySphr3VUgAIULBhxZkKgwLImhzMR2Bw1ORK+37INg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-normalize-repeat-style@5.1.1(postcss@8.5.8): + /postcss-normalize-repeat-style@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-mFpLspGWkQtBcWIRFLmewo8aC3ImN2i/J3v8YCFUwDnPu3Xz4rLohDO26lGjwNsQxB3YF0KKRwspGzE2JEuS0g==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-normalize-string@5.1.0(postcss@8.5.8): + /postcss-normalize-string@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-oYiIJOf4T9T1N4i+abeIc7Vgm/xPCGih4bZz5Nm0/ARVJ7K6xrDlLwvwqOydvyL3RHNf8qZk6vo3aatiw/go3w==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-normalize-timing-functions@5.1.0(postcss@8.5.8): + /postcss-normalize-timing-functions@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-DOEkzJ4SAXv5xkHl0Wa9cZLF3WCBhF3o1SKVxKQAa+0pYKlueTpCgvkFAHfk+Y64ezX9+nITGrDZeVGgITJXjg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-normalize-unicode@5.1.1(postcss@8.5.8): + /postcss-normalize-unicode@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-qnCL5jzkNUmKVhZoENp1mJiGNPcsJCs1aaRmURmeJGES23Z/ajaln+EPTD+rBeNkSryI+2WTdW+lwcVdOikrpA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - browserslist: 4.28.1 - postcss: 8.5.8 + browserslist: 4.28.0 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-normalize-url@5.1.0(postcss@8.5.8): + /postcss-normalize-url@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-5upGeDO+PVthOxSmds43ZeMeZfKH+/DKgGRD7TElkkyS46JXAUhMzIKiCa7BabPeIy3AQcTkXwVVN7DbqsiCew==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: normalize-url: 6.1.0 - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-normalize-whitespace@5.1.1(postcss@8.5.8): + /postcss-normalize-whitespace@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-83ZJ4t3NUDETIHTa3uEg6asWjSBYL5EdkVB0sDncx9ERzOKBVJIUeDO9RyA9Zwtig8El1d79HBp0JEi8wvGQnA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-ordered-values@5.1.3(postcss@8.5.8): + /postcss-ordered-values@5.1.3(postcss@8.5.6): + resolution: {integrity: sha512-9UO79VUhPwEkzbb3RNpqqghc6lcYej1aveQteWY+4POIwlqkYE21HKWaLDF6lWNuqCobEAyTovVhtI32Rbv2RQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - cssnano-utils: 3.1.0(postcss@8.5.8) - postcss: 8.5.8 + cssnano-utils: 3.1.0(postcss@8.5.6) + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-reduce-idents@5.2.0(postcss@8.5.8): + /postcss-reduce-idents@5.2.0(postcss@8.5.6): + resolution: {integrity: sha512-BTrLjICoSB6gxbc58D5mdBK8OhXRDqud/zodYfdSi52qvDHdMwk+9kB9xsM8yJThH/sZU5A6QVSmMmaN001gIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-reduce-initial@5.1.2(postcss@8.5.8): + /postcss-reduce-initial@5.1.2(postcss@8.5.6): + resolution: {integrity: sha512-dE/y2XRaqAi6OvjzD22pjTUQ8eOfc6m/natGHgKFBK9DxFmIm69YmaRVQrGgFlEfc1HePIurY0TmDeROK05rIg==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - browserslist: 4.28.1 + browserslist: 4.28.0 caniuse-api: 3.0.0 - postcss: 8.5.8 + postcss: 8.5.6 + dev: false - postcss-reduce-transforms@5.1.0(postcss@8.5.8): + /postcss-reduce-transforms@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-2fbdbmgir5AvpW9RLtdONx1QoYG2/EtqpNQbFASDlixBbAYuTcJ0dECwlqNqH7VbaUnEnh8SrxOe2sRIn24XyQ==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 + dev: false - postcss-selector-parser@6.1.2: - dependencies: - cssesc: 3.0.0 - util-deprecate: 1.0.2 - - postcss-selector-parser@7.1.1: + /postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 + dev: false - postcss-sort-media-queries@4.4.1(postcss@8.5.8): + /postcss-sort-media-queries@4.4.1(postcss@8.5.6): + resolution: {integrity: sha512-QDESFzDDGKgpiIh4GYXsSy6sek2yAwQx1JASl5AxBtU1Lq2JfKBljIPNdil989NcSKRQX1ToiaKphImtBuhXWw==} + engines: {node: '>=10.0.0'} + peerDependencies: + postcss: ^8.4.16 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 sort-css-media-queries: 2.1.0 + dev: false - postcss-svgo@5.1.0(postcss@8.5.8): + /postcss-svgo@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-D75KsH1zm5ZrHyxPakAxJWtkyXew5qwS70v56exwvw542d9CRtTo78K0WeFxZB4G7JXKKMbEZtZayTGdIky/eA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-value-parser: 4.2.0 - svgo: 2.8.2 + svgo: 2.8.0 + dev: false - postcss-unique-selectors@5.1.1(postcss@8.5.8): + /postcss-unique-selectors@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-5JiODlELrz8L2HwxfPnhOWZYWDxVHWL83ufOv84NrcgipI7TaeRsatAhK4Tr2/ZiYldpK/wBvw5BD3qfaK96GA==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - postcss: 8.5.8 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 + dev: false + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: false - postcss-value-parser@4.2.0: {} + /postcss-zindex@5.1.0(postcss@8.5.6): + resolution: {integrity: sha512-fgFMf0OtVSBR1va1JNHYgMxYk73yhn/qb4uQDq1DLGYolz8gHCyr/sesEuGUaYs58E3ZJRcpoGuPVoB7Meiq9A==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 + dependencies: + postcss: 8.5.6 + dev: false - postcss-zindex@5.1.0(postcss@8.5.8): + /postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} dependencies: - postcss: 8.5.8 + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + dev: false - postcss@8.5.8: + /postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 + dev: false - pre-commit@1.2.2: + /pre-commit@1.2.2: + resolution: {integrity: sha512-qokTiqxD6GjODy5ETAIgzsRgnBWWQHQH2ghy86PU7mIn/wuWeTwF3otyNQZxWBwVn8XNr8Tdzj/QfUXpH+gRZA==} + requiresBuild: true dependencies: cross-spawn: 5.1.0 spawn-sync: 1.0.15 which: 1.2.14 + dev: true - pretty-error@4.0.0: + /pretty-error@4.0.0: + resolution: {integrity: sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==} dependencies: - lodash: 4.17.23 + lodash: 4.17.21 renderkid: 3.0.0 + dev: false - pretty-time@1.1.0: {} + /pretty-time@1.1.0: + resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} + engines: {node: '>=4'} + dev: false - prism-react-renderer@2.4.1(react@18.3.1): + /prism-react-renderer@2.4.0(react@18.3.1): + resolution: {integrity: sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==} + peerDependencies: + react: '>=16.0.0' dependencies: - '@types/prismjs': 1.26.6 + '@types/prismjs': 1.26.5 clsx: 2.1.1 react: 18.3.1 + dev: false - prismjs@1.30.0: {} + /prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + dev: false - process-nextick-args@2.0.1: {} + /process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} - prompts@2.4.2: + /prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} dependencies: kleur: 3.0.3 sisteransi: 1.0.5 + dev: false - prop-types@15.8.1: + /prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} dependencies: loose-envify: 1.4.0 object-assign: 4.1.1 react-is: 16.13.1 - property-information@7.1.0: {} + /property-information@6.5.0: + resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - proto-list@1.2.4: {} + /proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + dev: false - proxy-addr@2.0.7: + /proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} dependencies: forwarded: 0.2.0 ipaddr.js: 1.9.1 + dev: false - pseudomap@1.0.2: {} + /pseudomap@1.0.2: + resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} + dev: true - punycode@2.3.1: {} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + dev: false - pupa@3.3.0: + /pupa@3.1.0: + resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} + engines: {node: '>=12.20'} dependencies: escape-goat: 4.0.0 + dev: false - qs@6.14.2: + /qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} + engines: {node: '>=0.6'} dependencies: - side-channel: 1.1.0 + side-channel: 1.0.6 + dev: false - queue-microtask@1.2.3: {} + /queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + dev: false - queue@6.0.2: + /queue@6.0.2: + resolution: {integrity: sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==} dependencies: inherits: 2.0.4 + dev: false - quick-lru@5.1.1: {} + /quick-lru@5.1.1: + resolution: {integrity: sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==} + engines: {node: '>=10'} + dev: false - randombytes@2.1.0: + /randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 + dev: false - range-parser@1.2.0: {} + /range-parser@1.2.0: + resolution: {integrity: sha512-kA5WQoNVo4t9lNx2kQNFCxKeBl5IbbSNBl1M/tLkw9WCn+hxNBAW5Qh8gdhs63CJnhjJ2zQWFoqPJP2sK1AV5A==} + engines: {node: '>= 0.6'} + dev: false - range-parser@1.2.1: {} + /range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + dev: false - raw-body@2.5.3: + /raw-body@2.5.2: + resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} + engines: {node: '>= 0.8'} dependencies: bytes: 3.1.2 - http-errors: 2.0.1 + http-errors: 2.0.0 iconv-lite: 0.4.24 unpipe: 1.0.0 + dev: false - rc@1.2.8: + /rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true dependencies: deep-extend: 0.6.0 ini: 1.3.8 minimist: 1.2.8 strip-json-comments: 2.0.1 + dev: false - react-dev-utils@12.0.1(typescript@5.2.2)(webpack@5.105.4): + /react-dev-utils@12.0.1(typescript@5.4.5)(webpack@5.105.4): + resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} + engines: {node: '>=14'} + peerDependencies: + typescript: '>=2.7' + webpack: 5.105.4 + peerDependenciesMeta: + typescript: + optional: true dependencies: - '@babel/code-frame': 7.29.0 + '@babel/code-frame': 7.26.2 address: 1.2.2 - browserslist: 4.28.1 + browserslist: 4.28.0 chalk: 4.1.2 - cross-spawn: 7.0.6 + cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(typescript@5.2.2)(webpack@5.105.4) + fork-ts-checker-webpack-plugin: 6.5.3(typescript@5.4.5)(webpack@5.105.4) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -10454,30 +9317,40 @@ snapshots: prompts: 2.4.2 react-error-overlay: 6.1.0 recursive-readdir: 2.2.3 - shell-quote: 1.8.3 + shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 + typescript: 5.4.5 webpack: 5.105.4 - optionalDependencies: - typescript: 5.2.2 transitivePeerDependencies: - eslint - supports-color - vue-template-compiler + dev: false - react-dom@18.3.1(react@18.3.1): + /react-dom@18.3.1(react@18.3.1): + resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} + peerDependencies: + react: ^18.3.1 dependencies: loose-envify: 1.4.0 react: 18.3.1 scheduler: 0.23.2 - react-error-overlay@6.1.0: {} + /react-error-overlay@6.1.0: + resolution: {integrity: sha512-SN/U6Ytxf1QGkw/9ve5Y+NxBbZM6Ht95tuXNMKs8EJyFa/Vy/+Co3stop3KBHARfn/giv+Lj1uUnTfOJ3moFEQ==} + dev: false - react-fast-compare@3.2.2: {} + /react-fast-compare@3.2.2: + resolution: {integrity: sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==} - react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + /react-helmet-async@1.3.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.26.0 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 @@ -10485,34 +9358,57 @@ snapshots: react-fast-compare: 3.2.2 shallowequal: 1.1.0 - react-helmet-async@3.0.0(react@18.3.1): + /react-helmet-async@2.0.5(react@18.3.1): + resolution: {integrity: sha512-rYUYHeus+i27MvFE+Jaa4WsyBKGkL6qVgbJvSBoX8mbsWoABJXdEO0bZyi0F6i+4f0NuIb8AvqPMj3iXFHkMwg==} + peerDependencies: + react: ^16.6.0 || ^17.0.0 || ^18.0.0 dependencies: invariant: 2.2.4 react: 18.3.1 react-fast-compare: 3.2.2 shallowequal: 1.1.0 - react-is@16.13.1: {} + /react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-json-view-lite@1.5.0(react@18.3.1): + /react-json-view-lite@1.5.0(react@18.3.1): + resolution: {integrity: sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==} + engines: {node: '>=14'} + peerDependencies: + react: ^16.13.1 || ^17.0.0 || ^18.0.0 dependencies: react: 18.3.1 + dev: false - react-loadable-ssr-addon-v5-slorber@1.0.3(@docusaurus/react-loadable@5.5.2(react@18.3.1))(webpack@5.105.4): + /react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@5.5.2)(webpack@5.105.4): + resolution: {integrity: sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==} + engines: {node: '>=10.13.0'} + peerDependencies: + react-loadable: '*' + webpack: 5.105.4 dependencies: - '@babel/runtime': 7.29.2 - react-loadable: '@docusaurus/react-loadable@5.5.2(react@18.3.1)' + '@babel/runtime': 7.26.0 + react-loadable: /@docusaurus/react-loadable@5.5.2(react@18.3.1) webpack: 5.105.4 + dev: false - react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1): + /react-router-config@5.1.1(react-router@5.3.4)(react@18.3.1): + resolution: {integrity: sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==} + peerDependencies: + react: '>=15' + react-router: '>=5' dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.26.0 react: 18.3.1 react-router: 5.3.4(react@18.3.1) + dev: false - react-router-dom@5.3.4(react@18.3.1): + /react-router-dom@5.3.4(react@18.3.1): + resolution: {integrity: sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==} + peerDependencies: + react: '>=15' dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.26.0 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -10520,10 +9416,14 @@ snapshots: react-router: 5.3.4(react@18.3.1) tiny-invariant: 1.3.3 tiny-warning: 1.0.3 + dev: false - react-router@5.3.4(react@18.3.1): + /react-router@5.3.4(react@18.3.1): + resolution: {integrity: sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==} + peerDependencies: + react: '>=15' dependencies: - '@babel/runtime': 7.29.2 + '@babel/runtime': 7.26.0 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 @@ -10533,16 +9433,22 @@ snapshots: react-is: 16.13.1 tiny-invariant: 1.3.3 tiny-warning: 1.0.3 + dev: false - react@18.3.1: + /react@18.3.1: + resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} + engines: {node: '>=0.10.0'} dependencies: loose-envify: 1.4.0 - read-cache@1.0.0: + /read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} dependencies: pify: 2.3.0 + dev: false - readable-stream@2.3.8: + /readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} dependencies: core-util-is: 1.0.3 inherits: 2.0.4 @@ -10552,130 +9458,194 @@ snapshots: string_decoder: 1.1.1 util-deprecate: 1.0.2 - readable-stream@3.6.2: + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} dependencies: inherits: 2.0.4 string_decoder: 1.3.0 util-deprecate: 1.0.2 + dev: false - readdirp@3.6.0: + /readdirp@3.6.0: + resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} + engines: {node: '>=8.10.0'} dependencies: - picomatch: 2.3.2 + picomatch: 2.3.1 + dev: false - readdirp@4.1.2: {} + /readdirp@4.0.2: + resolution: {integrity: sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==} + engines: {node: '>= 14.16.0'} + dev: false - reading-time@1.5.0: {} + /reading-time@1.5.0: + resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} + dev: false - rechoir@0.6.2: + /rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} dependencies: - resolve: 1.22.11 + resolve: 1.22.8 + dev: false - recma-build-jsx@1.0.0: + /recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 estree-util-build-jsx: 3.0.1 vfile: 6.0.3 - recma-jsx@1.0.1(acorn@8.16.0): + /recma-jsx@1.0.0(acorn@8.14.0): + resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} dependencies: - acorn: 8.16.0 - acorn-jsx: 5.3.2(acorn@8.16.0) + acorn-jsx: 5.3.2(acorn@8.14.0) estree-util-to-js: 2.0.0 recma-parse: 1.0.0 recma-stringify: 1.0.0 unified: 11.0.5 + transitivePeerDependencies: + - acorn - recma-parse@1.0.0: + /recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 esast-util-from-js: 2.0.1 unified: 11.0.5 vfile: 6.0.3 - recma-stringify@1.0.0: + /recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 estree-util-to-js: 2.0.0 unified: 11.0.5 vfile: 6.0.3 - recursive-readdir@2.2.3: + /recursive-readdir@2.2.3: + resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} + engines: {node: '>=6.0.0'} dependencies: - minimatch: 3.1.5 + minimatch: 3.1.2 + dev: false - regenerate-unicode-properties@10.2.2: + /regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} dependencies: regenerate: 1.4.2 + dev: false + + /regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + dev: false + + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - regenerate@1.4.2: {} + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.26.0 + dev: false - regexpu-core@6.4.0: + /regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} + engines: {node: '>=4'} dependencies: regenerate: 1.4.2 - regenerate-unicode-properties: 10.2.2 + regenerate-unicode-properties: 10.2.0 regjsgen: 0.8.0 - regjsparser: 0.13.0 + regjsparser: 0.11.2 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.2.1 + unicode-match-property-value-ecmascript: 2.2.0 + dev: false - registry-auth-token@5.1.1: + /registry-auth-token@5.0.2: + resolution: {integrity: sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==} + engines: {node: '>=14'} dependencies: - '@pnpm/npm-conf': 3.0.2 + '@pnpm/npm-conf': 2.3.1 + dev: false - registry-url@6.0.1: + /registry-url@6.0.1: + resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} + engines: {node: '>=12'} dependencies: rc: 1.2.8 + dev: false - regjsgen@0.8.0: {} + /regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + dev: false - regjsparser@0.13.0: + /regjsparser@0.11.2: + resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} + hasBin: true dependencies: - jsesc: 3.1.0 + jsesc: 3.0.2 + dev: false - rehype-katex@7.0.1: + /rehype-katex@7.0.1: + resolution: {integrity: sha512-OiM2wrZ/wuhKkigASodFoo8wimG3H12LWQaH8qSPVJn9apWKFSH3YOCtbKpBorTVw/eI7cuT21XBbvwEswbIOA==} dependencies: '@types/hast': 3.0.4 - '@types/katex': 0.16.8 + '@types/katex': 0.16.7 hast-util-from-html-isomorphic: 2.0.0 hast-util-to-text: 4.0.2 - katex: 0.16.44 - unist-util-visit-parents: 6.0.2 + katex: 0.16.11 + unist-util-visit-parents: 6.0.1 vfile: 6.0.3 + dev: false - rehype-raw@7.0.0: + /rehype-raw@7.0.0: + resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} dependencies: '@types/hast': 3.0.4 - hast-util-raw: 9.1.0 + hast-util-raw: 9.0.4 vfile: 6.0.3 + dev: false - rehype-recma@1.0.0: + /rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} dependencies: - '@types/estree': 1.0.8 + '@types/estree': 1.0.6 '@types/hast': 3.0.4 - hast-util-to-estree: 3.1.3 + hast-util-to-estree: 3.1.0 transitivePeerDependencies: - supports-color - relateurl@0.2.7: {} + /relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + dev: false - remark-directive@3.0.1: + /remark-directive@3.0.0: + resolution: {integrity: sha512-l1UyWJ6Eg1VPU7Hm/9tt0zKtReJQNOA4+iDMAxTyZNWnJnFlbS/7zhiel/rogTLQ2vMYwDzSJa4BiVNqGlqIMA==} dependencies: '@types/mdast': 4.0.4 - mdast-util-directive: 3.1.0 + mdast-util-directive: 3.0.0 micromark-extension-directive: 3.0.2 unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: false - remark-emoji@4.0.1: + /remark-emoji@4.0.1: + resolution: {integrity: sha512-fHdvsTR1dHkWKev9eNyhTo4EFwbUvJ8ka9SgeWkMPYFX4WoI7ViVBms3PjlQYgw5TLvNQso3GUB/b/8t3yo+dg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: '@types/mdast': 4.0.4 emoticon: 4.1.0 - mdast-util-find-and-replace: 3.0.2 - node-emoji: 2.2.0 + mdast-util-find-and-replace: 3.0.1 + node-emoji: 2.1.3 unified: 11.0.5 + dev: false - remark-frontmatter@5.0.0: + /remark-frontmatter@5.0.0: + resolution: {integrity: sha512-XTFYvNASMe5iPN0719nPrdItC9aU0ssC4v14mH1BCi1u0n1gAocqcujWUrByftZTbLhRtiKRyjYTSIOcr69UVQ==} dependencies: '@types/mdast': 4.0.4 mdast-util-frontmatter: 2.0.1 @@ -10683,19 +9653,23 @@ snapshots: unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: false - remark-gfm@4.0.1: + /remark-gfm@4.0.0: + resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} dependencies: '@types/mdast': 4.0.4 - mdast-util-gfm: 3.1.0 + mdast-util-gfm: 3.0.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: false - remark-math@6.0.0: + /remark-math@6.0.0: + resolution: {integrity: sha512-MMqgnP74Igy+S3WwnhQ7kqGlEerTETXMvJhrUzDikVZ2/uogJCb+WHUg97hK9/jcfc0dkD73s3LN8zU49cTEtA==} dependencies: '@types/mdast': 4.0.4 mdast-util-math: 3.0.0 @@ -10703,332 +9677,530 @@ snapshots: unified: 11.0.5 transitivePeerDependencies: - supports-color + dev: false - remark-mdx@3.1.1: + /remark-mdx@3.1.0: + resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==} dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 transitivePeerDependencies: - supports-color - remark-parse@11.0.0: + /remark-parse@11.0.0: + resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} dependencies: '@types/mdast': 4.0.4 - mdast-util-from-markdown: 2.0.3 - micromark-util-types: 2.0.2 + mdast-util-from-markdown: 2.0.2 + micromark-util-types: 2.0.0 unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-rehype@11.1.2: + /remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} dependencies: '@types/hast': 3.0.4 '@types/mdast': 4.0.4 - mdast-util-to-hast: 13.2.1 + mdast-util-to-hast: 13.2.0 unified: 11.0.5 vfile: 6.0.3 - remark-stringify@11.0.0: + /remark-stringify@11.0.0: + resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} dependencies: '@types/mdast': 4.0.4 - mdast-util-to-markdown: 2.1.2 + mdast-util-to-markdown: 2.1.1 unified: 11.0.5 + dev: false - renderkid@3.0.0: + /renderkid@3.0.0: + resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} dependencies: css-select: 4.3.0 dom-converter: 0.2.0 htmlparser2: 6.1.0 - lodash: 4.17.23 + lodash: 4.17.21 strip-ansi: 6.0.1 + dev: false - require-from-string@2.0.2: {} + /require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} - require-like@0.1.2: {} + /require-like@0.1.2: + resolution: {integrity: sha512-oyrU88skkMtDdauHDuKVrgR+zuItqr6/c//FXzvmxRGMexSDc6hNvJInGW3LL46n+8b50RykrvwSUIIQH2LQ5A==} + dev: false - requires-port@1.0.0: {} + /requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + dev: false - resolve-alpn@1.2.1: {} + /resolve-alpn@1.2.1: + resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} + dev: false - resolve-from@4.0.0: {} + /resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + dev: false - resolve-pathname@3.0.0: {} + /resolve-pathname@3.0.0: + resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} + dev: false - resolve@1.22.11: + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true dependencies: - is-core-module: 2.16.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + dev: false - responselike@3.0.0: + /responselike@3.0.0: + resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} + engines: {node: '>=14.16'} dependencies: lowercase-keys: 3.0.0 + dev: false - retry@0.13.1: {} + /retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + dev: false - reusify@1.1.0: {} + /reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + dev: false - rimraf@3.0.2: + /rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true dependencies: glob: 7.2.3 + dev: false + + /robust-predicates@3.0.3: + resolution: {integrity: sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==} + dev: false - rtl-detect@1.1.2: {} + /rtl-detect@1.1.2: + resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==} + dev: false - rtlcss@4.3.0: + /rtlcss@4.3.0: + resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==} + engines: {node: '>=12.0.0'} + hasBin: true dependencies: escalade: 3.2.0 picocolors: 1.1.1 - postcss: 8.5.8 + postcss: 8.5.6 strip-json-comments: 3.1.1 + dev: false - run-parallel@1.2.0: + /run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} dependencies: queue-microtask: 1.2.3 + dev: false + + /rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + dev: false - safe-buffer@5.1.2: {} + /sade@1.8.1: + resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} + engines: {node: '>=6'} + dependencies: + mri: 1.2.0 + dev: false + + /safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} - safe-buffer@5.2.1: {} + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false - safer-buffer@2.1.2: {} + /safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + dev: false - sass-loader@16.0.7(sass@1.98.0)(webpack@5.105.4): + /sass-loader@10.5.2(sass@1.80.6)(webpack@5.105.4): + resolution: {integrity: sha512-vMUoSNOUKJILHpcNCCyD23X34gve1TS7Rjd9uXHeKqhvBG39x6XbswFDtpbTElj6XdMFezoWhkh5vtKudf2cgQ==} + engines: {node: '>= 10.13.0'} + peerDependencies: + fibers: '>= 3.1.0' + node-sass: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 + sass: ^1.3.0 + webpack: 5.105.4 + peerDependenciesMeta: + fibers: + optional: true + node-sass: + optional: true + sass: + optional: true dependencies: + klona: 2.0.6 + loader-utils: 2.0.4 neo-async: 2.6.2 - optionalDependencies: - sass: 1.98.0 + sass: 1.80.6 + schema-utils: 3.3.0 + semver: 7.6.3 webpack: 5.105.4 + dev: false - sass@1.98.0: + /sass@1.80.6: + resolution: {integrity: sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==} + engines: {node: '>=14.0.0'} + hasBin: true dependencies: - chokidar: 4.0.3 - immutable: 5.1.5 + chokidar: 4.0.1 + immutable: 4.3.7 source-map-js: 1.2.1 optionalDependencies: - '@parcel/watcher': 2.5.6 + '@parcel/watcher': 2.4.1 + dev: false - sax@1.6.0: {} + /sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + dev: false - scheduler@0.23.2: + /scheduler@0.23.2: + resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} dependencies: loose-envify: 1.4.0 - schema-utils@2.7.0: + /schema-utils@2.7.0: + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + engines: {node: '>= 8.9.0'} + dependencies: + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false + + /schema-utils@3.3.0: + resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==} + engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 6.14.0 - ajv-keywords: 3.5.2(ajv@6.14.0) + ajv: 6.12.6 + ajv-keywords: 3.5.2(ajv@6.12.6) + dev: false - schema-utils@3.3.0: + /schema-utils@4.2.0: + resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} + engines: {node: '>= 12.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 6.14.0 - ajv-keywords: 3.5.2(ajv@6.14.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) + dev: false - schema-utils@4.3.3: + /schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} + engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.15 - ajv: 8.18.0 - ajv-formats: 2.1.1(ajv@8.18.0) - ajv-keywords: 5.1.0(ajv@8.18.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) - search-insights@2.17.3: {} + /search-insights@2.17.2: + resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} + dev: false - section-matter@1.0.0: + /section-matter@1.0.0: + resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} + engines: {node: '>=4'} dependencies: extend-shallow: 2.0.1 kind-of: 6.0.3 + dev: false - select-hose@2.0.0: {} + /select-hose@2.0.0: + resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} + dev: false - selfsigned@2.4.1: + /selfsigned@2.4.1: + resolution: {integrity: sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==} + engines: {node: '>=10'} dependencies: - '@types/node-forge': 1.3.14 - node-forge: 1.4.0 + '@types/node-forge': 1.3.11 + node-forge: 1.3.1 + dev: false - semver-diff@4.0.0: + /semver-diff@4.0.0: + resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} + engines: {node: '>=12'} dependencies: - semver: 7.7.4 + semver: 7.6.3 + dev: false - semver@6.3.1: {} + /semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + hasBin: true + dev: false - semver@7.7.4: {} + /semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + dev: false - send@0.19.2: + /send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} + engines: {node: '>= 0.8.0'} dependencies: debug: 2.6.9 depd: 2.0.0 destroy: 1.2.0 - encodeurl: 2.0.0 + encodeurl: 1.0.2 escape-html: 1.0.3 etag: 1.8.1 fresh: 0.5.2 - http-errors: 2.0.1 + http-errors: 2.0.0 mime: 1.6.0 ms: 2.1.3 on-finished: 2.4.1 range-parser: 1.2.1 - statuses: 2.0.2 + statuses: 2.0.1 transitivePeerDependencies: - supports-color + dev: false - serialize-javascript@6.0.2: + /serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} dependencies: randombytes: 2.1.0 + dev: false - serve-handler@6.1.7: + /serve-handler@6.1.6: + resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} dependencies: bytes: 3.0.0 content-disposition: 0.5.2 mime-types: 2.1.18 - minimatch: 3.1.5 + minimatch: 3.1.2 path-is-inside: 1.0.2 path-to-regexp: 3.3.0 range-parser: 1.2.0 + dev: false - serve-index@1.9.2: + /serve-index@1.9.1: + resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} + engines: {node: '>= 0.8.0'} dependencies: accepts: 1.3.8 batch: 0.6.1 debug: 2.6.9 escape-html: 1.0.3 - http-errors: 1.8.1 + http-errors: 1.6.3 mime-types: 2.1.35 parseurl: 1.3.3 transitivePeerDependencies: - supports-color + dev: false - serve-static@1.16.3: + /serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} + engines: {node: '>= 0.8.0'} dependencies: encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.19.2 + send: 0.19.0 transitivePeerDependencies: - supports-color + dev: false - set-function-length@1.2.2: + /set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} dependencies: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.3.0 - gopd: 1.2.0 + get-intrinsic: 1.2.4 + gopd: 1.0.1 has-property-descriptors: 1.0.2 + dev: false + + /setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + dev: false - setprototypeof@1.2.0: {} + /setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + dev: false - shallow-clone@3.0.1: + /shallow-clone@3.0.1: + resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} + engines: {node: '>=8'} dependencies: kind-of: 6.0.3 - shallowequal@1.1.0: {} + /shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} - shebang-command@1.2.0: + /shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} dependencies: shebang-regex: 1.0.0 + dev: true - shebang-command@2.0.0: + /shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} dependencies: shebang-regex: 3.0.0 + dev: false - shebang-regex@1.0.0: {} + /shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + dev: true - shebang-regex@3.0.0: {} + /shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + dev: false - shell-quote@1.8.3: {} + /shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + dev: false - shelljs@0.8.5: + /shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true dependencies: glob: 7.2.3 interpret: 1.4.0 rechoir: 0.6.2 + dev: false - side-channel-list@1.0.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - - side-channel-map@1.0.1: - dependencies: - call-bound: 1.0.4 - es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - - side-channel-weakmap@1.0.2: + /side-channel@1.0.6: + resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} + engines: {node: '>= 0.4'} dependencies: - call-bound: 1.0.4 + call-bind: 1.0.7 es-errors: 1.3.0 - get-intrinsic: 1.3.0 - object-inspect: 1.13.4 - side-channel-map: 1.0.1 + get-intrinsic: 1.2.4 + object-inspect: 1.13.2 + dev: false - side-channel@1.1.0: - dependencies: - es-errors: 1.3.0 - object-inspect: 1.13.4 - side-channel-list: 1.0.0 - side-channel-map: 1.0.1 - side-channel-weakmap: 1.0.2 + /signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + dev: false - signal-exit@3.0.7: {} + /signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + dev: false - simple-swizzle@0.2.4: + /simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} dependencies: - is-arrayish: 0.3.4 + is-arrayish: 0.3.2 + dev: false - sirv@2.0.4: + /sirv@2.0.4: + resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} + engines: {node: '>= 10'} dependencies: - '@polka/url': 1.0.0-next.29 - mrmime: 2.0.1 + '@polka/url': 1.0.0-next.28 + mrmime: 2.0.0 totalist: 3.0.1 + dev: false - sisteransi@1.0.5: {} + /sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + dev: false - sitemap@7.1.3: + /sitemap@7.1.2: + resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==} + engines: {node: '>=12.0.0', npm: '>=5.6.0'} + hasBin: true dependencies: '@types/node': 17.0.45 '@types/sax': 1.2.7 arg: 5.0.2 - sax: 1.6.0 + sax: 1.4.1 + dev: false - skin-tone@2.0.0: + /skin-tone@2.0.0: + resolution: {integrity: sha512-kUMbT1oBJCpgrnKoSr0o6wPtvRWT9W9UKvGLwfJYO2WuahZRHOpEyL1ckyMGgMWh0UdpmaoFqKKD29WTomNEGA==} + engines: {node: '>=8'} dependencies: unicode-emoji-modifier-base: 1.0.0 + dev: false - slash@3.0.0: {} + /slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + dev: false - slash@4.0.0: {} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: false - sockjs@0.3.24: + /sockjs@0.3.24: + resolution: {integrity: sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==} dependencies: faye-websocket: 0.11.4 uuid: 8.3.2 websocket-driver: 0.7.4 + dev: false - sort-css-media-queries@2.1.0: {} + /sort-css-media-queries@2.1.0: + resolution: {integrity: sha512-IeWvo8NkNiY2vVYdPa27MCQiR0MN0M80johAYFVxWWXQ44KU84WNxjslwBHmc/7ZL2ccwkM7/e6S5aiKZXm7jA==} + engines: {node: '>= 6.3.0'} + dev: false - source-map-js@1.2.1: {} + /source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + dev: false - source-map-support@0.5.21: + /source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - source-map@0.6.1: {} + /source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} - source-map@0.7.6: {} + /source-map@0.7.4: + resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} + engines: {node: '>= 8'} - space-separated-tokens@2.0.2: {} + /space-separated-tokens@2.0.2: + resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spawn-sync@1.0.15: + /spawn-sync@1.0.15: + resolution: {integrity: sha512-9DWBgrgYZzNghseho0JOuh+5fg9u6QWhAWa51QC7+U5rCheZ/j1DrEZnyE0RBBRqZ9uEXGPgSSM0nky6burpVw==} + requiresBuild: true dependencies: concat-stream: 1.6.2 os-shim: 0.1.3 + dev: true - spdy-transport@3.0.0: + /spdy-transport@3.0.0: + resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} dependencies: - debug: 4.4.3 + debug: 4.3.7 detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -11036,248 +10208,448 @@ snapshots: wbuf: 1.7.3 transitivePeerDependencies: - supports-color + dev: false - spdy@4.0.2: + /spdy@4.0.2: + resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} + engines: {node: '>=6.0.0'} dependencies: - debug: 4.4.3 + debug: 4.3.7 handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 spdy-transport: 3.0.0 transitivePeerDependencies: - supports-color + dev: false - sprintf-js@1.0.3: {} + /sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + dev: false - srcset@4.0.0: {} + /srcset@4.0.0: + resolution: {integrity: sha512-wvLeHgcVHKO8Sc/H/5lkGreJQVeYMm9rlmt8PuR1xE31rIuXhuzznUUqAt8MqLhB3MqJdFzlNAfpcWnxiFUcPw==} + engines: {node: '>=12'} + dev: false - stable@0.1.8: {} + /stable@0.1.8: + resolution: {integrity: sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==} + deprecated: 'Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility' + dev: false - statuses@1.5.0: {} + /statuses@1.5.0: + resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==} + engines: {node: '>= 0.6'} + dev: false - statuses@2.0.2: {} + /statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + dev: false - std-env@3.10.0: {} + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} + dev: false - string-width@4.2.3: + /string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} dependencies: emoji-regex: 8.0.0 is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 + dev: false - string-width@5.1.2: + /string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} dependencies: eastasianwidth: 0.2.0 emoji-regex: 9.2.2 - strip-ansi: 7.2.0 + strip-ansi: 7.1.0 + dev: false - string_decoder@1.1.1: + /string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: safe-buffer: 5.1.2 - string_decoder@1.3.0: + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} dependencies: safe-buffer: 5.2.1 + dev: false - stringify-entities@4.0.4: + /stringify-entities@4.0.4: + resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} dependencies: character-entities-html4: 2.1.0 character-entities-legacy: 3.0.0 - stringify-object@3.3.0: + /stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} dependencies: get-own-enumerable-property-symbols: 3.0.2 is-obj: 1.0.1 is-regexp: 1.0.0 + dev: false - strip-ansi@6.0.1: + /strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} dependencies: ansi-regex: 5.0.1 + dev: false - strip-ansi@7.2.0: + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} dependencies: - ansi-regex: 6.2.2 + ansi-regex: 6.1.0 + dev: false - strip-bom-string@1.0.0: {} + /strip-bom-string@1.0.0: + resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} + engines: {node: '>=0.10.0'} + dev: false - strip-final-newline@2.0.0: {} + /strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + dev: false - strip-json-comments@2.0.1: {} + /strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + dev: false - strip-json-comments@3.1.1: {} + /strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + dev: false - style-to-js@1.1.21: + /style-to-object@0.4.4: + resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} dependencies: - style-to-object: 1.0.14 + inline-style-parser: 0.1.1 - style-to-object@1.0.14: + /style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} dependencies: - inline-style-parser: 0.2.7 + inline-style-parser: 0.2.4 - stylehacks@5.1.1(postcss@8.5.8): + /stylehacks@5.1.1(postcss@8.5.6): + resolution: {integrity: sha512-sBpcd5Hx7G6seo7b1LkpttvTz7ikD0LlH5RmdcBNb6fFR0Fl7LQwHDFr300q4cwUqi+IYrFGmsIHieMBfnN/Bw==} + engines: {node: ^10 || ^12 || >=14.0} + peerDependencies: + postcss: ^8.2.15 dependencies: - browserslist: 4.28.1 - postcss: 8.5.8 + browserslist: 4.28.0 + postcss: 8.5.6 postcss-selector-parser: 6.1.2 + dev: false + + /stylis@4.3.6: + resolution: {integrity: sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==} + dev: false - sucrase@3.35.1: + /sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true dependencies: - '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 - pirates: 4.0.7 - tinyglobby: 0.2.15 + pirates: 4.0.6 ts-interface-checker: 0.1.13 + dev: false - supports-color@7.2.0: + /supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} dependencies: has-flag: 4.0.0 + dev: false - supports-color@8.1.1: + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} dependencies: has-flag: 4.0.0 - supports-preserve-symlinks-flag@1.0.0: {} + /supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + dev: false - svg-parser@2.0.4: {} + /svg-parser@2.0.4: + resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} + dev: false - svgo@2.8.2: + /svgo@2.8.0: + resolution: {integrity: sha512-+N/Q9kV1+F+UeWYoSiULYo4xYSDQlTgb+ayMobAXPwMnLvop7oxKMo9OzIrX5x3eS4L4f2UHhc9axXwY8DpChg==} + engines: {node: '>=10.13.0'} + hasBin: true dependencies: + '@trysound/sax': 0.2.0 commander: 7.2.0 css-select: 4.3.0 css-tree: 1.1.3 csso: 4.2.0 picocolors: 1.1.1 - sax: 1.6.0 stable: 0.1.8 + dev: false - tailwind-merge@1.14.0: {} + /tailwind-merge@1.14.0: + resolution: {integrity: sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==} + dev: false - tailwind-variants@0.1.20(tailwindcss@3.4.19): + /tailwind-variants@0.1.20(tailwindcss@3.4.14): + resolution: {integrity: sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==} + engines: {node: '>=16.x', pnpm: '>=7.x'} + peerDependencies: + tailwindcss: '*' dependencies: tailwind-merge: 1.14.0 - tailwindcss: 3.4.19 + tailwindcss: 3.4.14 + dev: false - tailwindcss@3.4.19: + /tailwindcss@3.4.14: + resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} + engines: {node: '>=14.0.0'} + hasBin: true dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 chokidar: 3.6.0 didyoumean: 1.2.2 dlv: 1.1.3 - fast-glob: 3.3.3 + fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.7 - lilconfig: 3.1.3 + jiti: 1.21.6 + lilconfig: 2.1.0 micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.5.8 - postcss-import: 15.1.0(postcss@8.5.8) - postcss-js: 4.1.0(postcss@8.5.8) - postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.8) - postcss-nested: 6.2.0(postcss@8.5.8) + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-nested: 6.2.0(postcss@8.4.47) postcss-selector-parser: 6.1.2 - resolve: 1.22.11 - sucrase: 3.35.1 + resolve: 1.22.8 + sucrase: 3.35.0 transitivePeerDependencies: - - tsx - - yaml + - ts-node + dev: false + + /tapable@1.1.3: + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + engines: {node: '>=6'} + dev: false + + /tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + dev: false - tapable@1.1.3: {} + /tapable@2.3.3: + resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} + engines: {node: '>=6'} - tapable@2.3.2: {} + /terser-webpack-plugin@5.3.10(webpack@5.105.4): + resolution: {integrity: sha512-BKFPWlPDndPs+NGGCr1U59t0XScL5317Y0UReNrHaw9/FwhPENlq6bfgs+4yPfyP51vqC1bQ4rp1EfXW5ZSH9w==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: 5.105.4 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true + dependencies: + '@jridgewell/trace-mapping': 0.3.25 + jest-worker: 27.5.1 + schema-utils: 3.3.0 + serialize-javascript: 6.0.2 + terser: 5.36.0 + webpack: 5.105.4 + dev: false - terser-webpack-plugin@5.4.0(webpack@5.105.4): + /terser-webpack-plugin@5.5.0(webpack@5.105.4): + resolution: {integrity: sha512-UYhptBwhWvfIjKd/UuFo6D8uq9xpGLDK+z8EDsj/zWhrTaH34cKEbrkMKfV5YWqGBvAYA3tlzZbs2R+qYrbQJA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + '@swc/core': '*' + esbuild: '*' + uglify-js: '*' + webpack: 5.105.4 + peerDependenciesMeta: + '@swc/core': + optional: true + esbuild: + optional: true + uglify-js: + optional: true dependencies: - '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 4.3.3 - terser: 5.46.1 + terser: 5.36.0 webpack: 5.105.4 - terser@5.46.1: + /terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + engines: {node: '>=10'} + hasBin: true dependencies: - '@jridgewell/source-map': 0.3.11 - acorn: 8.16.0 + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 - text-table@0.2.0: {} + /text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + dev: false - thenify-all@1.6.0: + /thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} dependencies: thenify: 3.3.1 + dev: false - thenify@3.3.1: + /thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} dependencies: any-promise: 1.3.0 + dev: false - thunky@1.1.0: {} - - tiny-invariant@1.3.3: {} + /thunky@1.1.0: + resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} + dev: false - tiny-warning@1.0.3: {} + /tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + dev: false - tinyglobby@0.2.15: - dependencies: - fdir: 6.5.0(picomatch@4.0.4) - picomatch: 4.0.4 + /tiny-warning@1.0.3: + resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + dev: false - to-regex-range@5.0.1: + /to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} dependencies: is-number: 7.0.0 + dev: false + + /toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + dev: false - toidentifier@1.0.1: {} + /totalist@3.0.1: + resolution: {integrity: sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==} + engines: {node: '>=6'} + dev: false - totalist@3.0.1: {} + /trim-lines@3.0.1: + resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - trim-lines@3.0.1: {} + /trough@2.2.0: + resolution: {integrity: sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==} - trough@2.2.0: {} + /ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + dev: false - ts-interface-checker@0.1.13: {} + /ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + dev: false - tslib@2.8.1: {} + /tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + dev: false - type-fest@1.4.0: {} + /type-fest@1.4.0: + resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} + engines: {node: '>=10'} + dev: false - type-fest@2.19.0: {} + /type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + dev: false - type-is@1.6.18: + /type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} dependencies: media-typer: 0.3.0 mime-types: 2.1.35 + dev: false - typedarray-to-buffer@3.1.5: + /typedarray-to-buffer@3.1.5: + resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} dependencies: is-typedarray: 1.0.0 + dev: false - typedarray@0.0.6: {} - - typescript@5.2.2: {} + /typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + dev: true - undici-types@7.18.2: {} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} + engines: {node: '>=14.17'} + hasBin: true - undici@7.24.6: {} + /undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - unicode-canonical-property-names-ecmascript@2.0.1: {} + /unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + dev: false - unicode-emoji-modifier-base@1.0.0: {} + /unicode-emoji-modifier-base@1.0.0: + resolution: {integrity: sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==} + engines: {node: '>=4'} + dev: false - unicode-match-property-ecmascript@2.0.0: + /unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} dependencies: unicode-canonical-property-names-ecmascript: 2.0.1 - unicode-property-aliases-ecmascript: 2.2.0 + unicode-property-aliases-ecmascript: 2.1.0 + dev: false - unicode-match-property-value-ecmascript@2.2.1: {} + /unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + dev: false - unicode-property-aliases-ecmascript@2.2.0: {} + /unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + dev: false - unified@11.0.5: + /unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} dependencies: '@types/unist': 3.0.3 bail: 2.0.2 @@ -11287,149 +10659,268 @@ snapshots: trough: 2.2.0 vfile: 6.0.3 - unique-string@3.0.0: + /unique-string@3.0.0: + resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} + engines: {node: '>=12'} dependencies: crypto-random-string: 4.0.0 + dev: false - unist-util-find-after@5.0.0: + /unist-util-find-after@5.0.0: + resolution: {integrity: sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==} dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.1 + unist-util-is: 6.0.0 + dev: false - unist-util-is@6.0.1: + /unist-util-is@6.0.0: + resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} dependencies: '@types/unist': 3.0.3 - unist-util-position-from-estree@2.0.0: + /unist-util-position-from-estree@2.0.0: + resolution: {integrity: sha512-KaFVRjoqLyF6YXCbVLNad/eS4+OfPQQn2yOd7zF/h5T/CSL2v8NpN6a5TPvtbXthAGw5nG+PuTtq+DdIZr+cRQ==} dependencies: '@types/unist': 3.0.3 - unist-util-position@5.0.0: + /unist-util-position@5.0.0: + resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} dependencies: '@types/unist': 3.0.3 - unist-util-remove-position@5.0.0: + /unist-util-remove-position@5.0.0: + resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} dependencies: '@types/unist': 3.0.3 - unist-util-visit: 5.1.0 + unist-util-visit: 5.0.0 + dev: false + + /unist-util-stringify-position@3.0.3: + resolution: {integrity: sha512-k5GzIBZ/QatR8N5X2y+drfpWG8IDBzdnVj6OInRNWm1oXrzydiaAT2OQiA8DPRRZyAKb9b6I2a6PxYklZD0gKg==} + dependencies: + '@types/unist': 2.0.11 + dev: false - unist-util-stringify-position@4.0.0: + /unist-util-stringify-position@4.0.0: + resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} dependencies: '@types/unist': 3.0.3 - unist-util-visit-parents@6.0.2: + /unist-util-visit-parents@6.0.1: + resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.1 + unist-util-is: 6.0.0 - unist-util-visit@5.1.0: + /unist-util-visit@5.0.0: + resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} dependencies: '@types/unist': 3.0.3 - unist-util-is: 6.0.1 - unist-util-visit-parents: 6.0.2 + unist-util-is: 6.0.0 + unist-util-visit-parents: 6.0.1 + + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: false - universalify@2.0.1: {} + /unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + dev: false + + /update-browserslist-db@1.1.1(browserslist@4.24.2): + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 + dev: false - unpipe@1.0.0: {} + /update-browserslist-db@1.1.4(browserslist@4.28.0): + resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.28.0 + escalade: 3.2.0 + picocolors: 1.1.1 + dev: false - update-browserslist-db@1.2.3(browserslist@4.28.1): + /update-browserslist-db@1.2.3(browserslist@4.28.2): + resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' dependencies: - browserslist: 4.28.1 + browserslist: 4.28.2 escalade: 3.2.0 picocolors: 1.1.1 - update-notifier@6.0.2: + /update-notifier@6.0.2: + resolution: {integrity: sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==} + engines: {node: '>=14.16'} dependencies: boxen: 7.1.1 - chalk: 5.6.2 + chalk: 5.3.0 configstore: 6.0.0 has-yarn: 3.0.0 import-lazy: 4.0.0 is-ci: 3.0.1 is-installed-globally: 0.4.0 - is-npm: 6.1.0 + is-npm: 6.0.0 is-yarn-global: 0.4.1 latest-version: 7.0.0 - pupa: 3.3.0 - semver: 7.7.4 + pupa: 3.1.0 + semver: 7.6.3 semver-diff: 4.0.0 xdg-basedir: 5.1.0 + dev: false - uri-js@4.4.1: + /uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: punycode: 2.3.1 + dev: false - url-loader@4.1.1(file-loader@6.2.0(webpack@5.105.4))(webpack@5.105.4): + /url-loader@4.1.1(file-loader@6.2.0)(webpack@5.105.4): + resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} + engines: {node: '>= 10.13.0'} + peerDependencies: + file-loader: '*' + webpack: 5.105.4 + peerDependenciesMeta: + file-loader: + optional: true dependencies: + file-loader: 6.2.0(webpack@5.105.4) loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 webpack: 5.105.4 - optionalDependencies: - file-loader: 6.2.0(webpack@5.105.4) + dev: false + + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + /utila@0.4.0: + resolution: {integrity: sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==} + dev: false - util-deprecate@1.0.2: {} + /utility-types@3.11.0: + resolution: {integrity: sha512-6Z7Ma2aVEWisaL6TvBCy7P8rm2LQoPv6dJ7ecIaIixHcwfbJ0x7mWdbcwlIM5IGQxPZSFYeqRCqlOOeKoJYMkw==} + engines: {node: '>= 4'} - utila@0.4.0: {} + /utils-merge@1.0.1: + resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} + engines: {node: '>= 0.4.0'} + dev: false - utility-types@3.11.0: {} + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: false - utils-merge@1.0.1: {} + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + dev: false - uuid@8.3.2: {} + /uvu@0.5.6: + resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + dequal: 2.0.3 + diff: 5.2.2 + kleur: 4.1.5 + sade: 1.8.1 + dev: false - value-equal@1.0.1: {} + /value-equal@1.0.1: + resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} + dev: false - vary@1.1.2: {} + /vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + dev: false - vfile-location@5.0.3: + /vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} dependencies: '@types/unist': 3.0.3 vfile: 6.0.3 + dev: false - vfile-message@4.0.3: + /vfile-message@4.0.2: + resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} dependencies: '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - vfile@6.0.3: + /vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} dependencies: '@types/unist': 3.0.3 - vfile-message: 4.0.3 + vfile-message: 4.0.2 - viem@2.47.6(typescript@5.2.2): + /viem@2.44.4(typescript@5.4.5): + resolution: {integrity: sha512-sJDLVl2EsS5Fo7GSWZME5CXEV7QRYkUJPeBw7ac+4XI3D4ydvMw/gjulTsT5pgqcpu70BploFnOAC6DLpan1Yg==} + peerDependencies: + typescript: '>=5.0.4' + peerDependenciesMeta: + typescript: + optional: true dependencies: '@noble/curves': 1.9.1 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 - abitype: 1.2.3(typescript@5.2.2) + abitype: 1.2.3(typescript@5.4.5) isows: 1.0.7(ws@8.18.3) - ox: 0.14.7(typescript@5.2.2) + ox: 0.11.3(typescript@5.4.5) + typescript: 5.4.5 ws: 8.18.3 - optionalDependencies: - typescript: 5.2.2 transitivePeerDependencies: - bufferutil - utf-8-validate - zod + dev: false - watchpack@2.5.1: + /watchpack@2.5.1: + resolution: {integrity: sha512-Zn5uXdcFNIA1+1Ei5McRd+iRzfhENPCe7LeABkJtNulSxjma+l7ltNx55BWZkRlwRnpOgHqxnjyaDgJnNXnqzg==} + engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 - wbuf@1.7.3: + /wbuf@1.7.3: + resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} dependencies: minimalistic-assert: 1.0.1 + dev: false + + /web-namespaces@2.0.1: + resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} + dev: false - web-namespaces@2.0.1: {} + /web-worker@1.5.0: + resolution: {integrity: sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==} + dev: false - webpack-bundle-analyzer@4.10.2: + /webpack-bundle-analyzer@4.10.2: + resolution: {integrity: sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==} + engines: {node: '>= 10.13.0'} + hasBin: true dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.16.0 - acorn-walk: 8.3.5 + acorn: 8.14.0 + acorn-walk: 8.3.4 commander: 7.2.0 debounce: 1.2.1 escape-string-regexp: 4.0.0 @@ -11442,65 +10933,99 @@ snapshots: transitivePeerDependencies: - bufferutil - utf-8-validate + dev: false - webpack-dev-middleware@5.3.4(webpack@5.105.4): + /webpack-dev-middleware@5.3.4(webpack@5.105.4): + resolution: {integrity: sha512-BVdTqhhs+0IfoeAf7EoH5WE+exCmqGerHfDM0IL096Px60Tq2Mn9MAbnaGUe6HiMa41KMCYF19gyzZmBcq/o4Q==} + engines: {node: '>= 12.13.0'} + peerDependencies: + webpack: 5.105.4 dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 - schema-utils: 4.3.3 + schema-utils: 4.2.0 webpack: 5.105.4 + dev: false - webpack-dev-server@4.15.2(webpack@5.105.4): + /webpack-dev-server@4.15.2(webpack@5.105.4): + resolution: {integrity: sha512-0XavAZbNJ5sDrCbkpWL8mia0o5WPOd2YGtxrEiZkBK9FjLppIUK2TgxK6qGD2P3hUXTJNNPVibrerKcx5WkR1g==} + engines: {node: '>= 12.13.0'} + hasBin: true + peerDependencies: + webpack: 5.105.4 + webpack-cli: '*' + peerDependenciesMeta: + webpack: + optional: true + webpack-cli: + optional: true dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 - '@types/express': 4.17.25 + '@types/express': 4.17.21 '@types/serve-index': 1.9.4 - '@types/serve-static': 1.15.10 + '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 - '@types/ws': 8.18.1 + '@types/ws': 8.5.13 ansi-html-community: 0.0.8 - bonjour-service: 1.3.0 + bonjour-service: 1.2.1 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.8.1 + compression: 1.7.5 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 - express: 4.22.1 + express: 4.21.2 graceful-fs: 4.2.11 html-entities: 2.6.0 - http-proxy-middleware: 2.0.9(@types/express@4.17.25) - ipaddr.js: 2.3.0 - launch-editor: 2.13.2 + http-proxy-middleware: 2.0.9(@types/express@4.17.21) + ipaddr.js: 2.2.0 + launch-editor: 2.9.1 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 - schema-utils: 4.3.3 + schema-utils: 4.2.0 selfsigned: 2.4.1 - serve-index: 1.9.2 + serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.105.4) - ws: 8.20.0 - optionalDependencies: webpack: 5.105.4 + webpack-dev-middleware: 5.3.4(webpack@5.105.4) + ws: 8.18.3 transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate + dev: false - webpack-merge@5.10.0: + /webpack-merge@5.10.0: + resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} + engines: {node: '>=10.0.0'} dependencies: clone-deep: 4.0.1 flat: 5.0.2 wildcard: 2.0.1 - webpack-sources@3.3.4: {} + /webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + dev: false + + /webpack-sources@3.4.0: + resolution: {integrity: sha512-gHwIe1cgBvvfLeu1Yz/dcFpmHfKDVxxyqI+kzqmuxZED81z2ChxpyqPaWcNqigPywhaEke7AjSGga+kxY55gjQ==} + engines: {node: '>=10.13.0'} - webpack@5.105.4: + /webpack@5.105.4: + resolution: {integrity: sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==} + engines: {node: '>=10.13.0'} + hasBin: true + peerDependencies: + webpack-cli: '*' + peerDependenciesMeta: + webpack-cli: + optional: true dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -11510,103 +11035,184 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.16.0 acorn-import-phases: 1.0.4(acorn@8.16.0) - browserslist: 4.28.1 + browserslist: 4.28.2 chrome-trace-event: 1.0.4 - enhanced-resolve: 5.20.1 - es-module-lexer: 2.0.0 + enhanced-resolve: 5.21.0 + es-module-lexer: 2.1.0 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.1 + loader-runner: 4.3.2 mime-types: 2.1.35 neo-async: 2.6.2 schema-utils: 4.3.3 - tapable: 2.3.2 - terser-webpack-plugin: 5.4.0(webpack@5.105.4) + tapable: 2.3.3 + terser-webpack-plugin: 5.5.0(webpack@5.105.4) watchpack: 2.5.1 - webpack-sources: 3.3.4 + webpack-sources: 3.4.0 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpackbar@5.0.2(webpack@5.105.4): + /webpackbar@5.0.2(webpack@5.105.4): + resolution: {integrity: sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==} + engines: {node: '>=12'} + peerDependencies: + webpack: 5.105.4 dependencies: chalk: 4.1.2 consola: 2.15.3 pretty-time: 1.1.0 - std-env: 3.10.0 + std-env: 3.7.0 webpack: 5.105.4 + dev: false - websocket-driver@0.7.4: + /websocket-driver@0.7.4: + resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} + engines: {node: '>=0.8.0'} dependencies: - http-parser-js: 0.5.10 + http-parser-js: 0.5.8 safe-buffer: 5.2.1 websocket-extensions: 0.1.4 + dev: false - websocket-extensions@0.1.4: {} - - whatwg-encoding@3.1.1: - dependencies: - iconv-lite: 0.6.3 - - whatwg-mimetype@4.0.0: {} + /websocket-extensions@0.1.4: + resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==} + engines: {node: '>=0.8.0'} + dev: false - which@1.2.14: + /which@1.2.14: + resolution: {integrity: sha512-16uPglFkRPzgiUXYMi1Jf8Z5EzN1iB4V0ZtMXcHZnwsBtQhhHeCqoWw7tsUY42hJGNDWtUsVLTjakIa5BgAxCw==} + hasBin: true dependencies: isexe: 2.0.0 + dev: true - which@1.3.1: + /which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true dependencies: isexe: 2.0.0 + dev: false - which@2.0.2: + /which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true dependencies: isexe: 2.0.0 + dev: false - widest-line@4.0.1: + /widest-line@4.0.1: + resolution: {integrity: sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==} + engines: {node: '>=12'} dependencies: string-width: 5.1.2 + dev: false + + /wildcard@2.0.1: + resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==} - wildcard@2.0.1: {} + /wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + dev: false - wrap-ansi@8.1.0: + /wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} dependencies: - ansi-styles: 6.2.3 + ansi-styles: 6.2.1 string-width: 5.1.2 - strip-ansi: 7.2.0 + strip-ansi: 7.1.0 + dev: false - wrappy@1.0.2: {} + /wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + dev: false - write-file-atomic@3.0.3: + /write-file-atomic@3.0.3: + resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} dependencies: imurmurhash: 0.1.4 is-typedarray: 1.0.0 signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 + dev: false - ws@7.5.10: {} - - ws@8.18.3: {} + /ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} + engines: {node: '>=8.3.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false - ws@8.20.0: {} + /ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: false - xdg-basedir@5.1.0: {} + /xdg-basedir@5.1.0: + resolution: {integrity: sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==} + engines: {node: '>=12'} + dev: false - xml-js@1.6.11: + /xml-js@1.6.11: + resolution: {integrity: sha512-7rVi2KMfwfWFl+GpPg6m80IVMWXLRjO+PxTq7V2CDhoGak0wzYzFgUY2m4XJ47OGdXd8eLE8EmwfAmdjw7lC1g==} + hasBin: true dependencies: - sax: 1.6.0 + sax: 1.4.1 + dev: false + + /yallist@2.1.2: + resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} + dev: true - yallist@2.1.2: {} + /yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + dev: false - yallist@3.1.1: {} + /yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + dev: false - yaml@1.10.3: {} + /yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} + engines: {node: '>= 14'} + hasBin: true + dev: false - yocto-queue@0.1.0: {} + /yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + dev: false - yocto-queue@1.2.2: {} + /yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} + engines: {node: '>=12.20'} + dev: false - zwitch@2.0.4: {} + /zwitch@2.0.4: + resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} diff --git a/scripts/lib/skill-creator-path.mjs b/scripts/lib/skill-creator-path.mjs new file mode 100644 index 000000000..c05f18147 --- /dev/null +++ b/scripts/lib/skill-creator-path.mjs @@ -0,0 +1,91 @@ +/** + * Resolve the upstream anthropics/skill-creator checkout on the local machine. + * @see https://github.com/anthropics/skills/tree/main/skills/skill-creator + */ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const MORPH_DOC_ROOT = path.join(__dirname, '../..'); + +/** @returns {string[]} */ +export function skillCreatorCandidateRoots() { + const env = process.env.MORPH_SKILL_CREATOR_ROOT; + const home = process.env.HOME || process.env.USERPROFILE || ''; + return [ + env, + path.join(MORPH_DOC_ROOT, 'vendor', 'skill-creator'), + home && path.join(home, '.claude', 'skills', 'skill-creator'), + home && path.join(home, '.cursor', 'skills', 'skill-creator'), + home && path.join(home, '.codex', 'skills', 'skill-creator'), + ].filter(Boolean); +} + +/** + * @returns {{ root: string, runLoop: string, runEval: string, quickValidate: string, aggregateBenchmark: string } | null} + */ +export function resolveSkillCreatorInstall() { + for (const root of skillCreatorCandidateRoots()) { + const runLoop = path.join(root, 'scripts', 'run_loop.py'); + const runEval = path.join(root, 'scripts', 'run_eval.py'); + const skillMd = path.join(root, 'SKILL.md'); + if (fs.existsSync(runLoop) && fs.existsSync(skillMd)) { + const quickValidate = path.join(root, 'scripts', 'quick_validate.py'); + const aggregateBenchmark = path.join(root, 'scripts', 'aggregate_benchmark.py'); + const required = { runLoop, runEval, quickValidate, aggregateBenchmark }; + const missing = Object.entries(required) + .filter(([, p]) => !fs.existsSync(p)) + .map(([key]) => key); + if (missing.length > 0) { + throw new Error( + `skill-creator install at ${root} is incomplete; missing: ${missing.join(', ')}`, + ); + } + return { + root, + runLoop, + runEval, + quickValidate, + aggregateBenchmark, + }; + } + } + return null; +} + +/** + * Trigger-eval JSON for description optimization (skill-creator run_loop). + * @param {string} morphDocRoot + * @param {string} skillId + * @returns {string | null} + */ +export function resolveTriggerEvalSetPath(morphDocRoot, skillId) { + const scripts = path.join(morphDocRoot, 'scripts'); + const candidates = [ + path.join(scripts, `skill-trigger-evals.${skillId}.json`), + path.join(scripts, `skill-trigger-evals.${skillId}.example.json`), + path.join(morphDocRoot, 'skills', skillId, 'evals', 'trigger.json'), + ]; + for (const p of candidates) { + if (fs.existsSync(p)) return p; + } + return null; +} + +/** + * Behavioral eval set (skill-creator full eval loop). + * @param {string} morphDocRoot + * @param {string} skillId + * @returns {string | null} + */ +export function resolveBehaviorEvalSetPath(morphDocRoot, skillId) { + const candidates = [ + path.join(morphDocRoot, 'skills', skillId, 'evals', 'evals.json'), + path.join(morphDocRoot, 'scripts', `skill-behavior-evals.${skillId}.json`), + ]; + for (const p of candidates) { + if (fs.existsSync(p)) return p; + } + return null; +} diff --git a/scripts/lib/skill-creator-python.mjs b/scripts/lib/skill-creator-python.mjs new file mode 100644 index 000000000..3fea0561d --- /dev/null +++ b/scripts/lib/skill-creator-python.mjs @@ -0,0 +1,78 @@ +/** + * Python interpreter for vendor/skill-creator (PEP 668–safe venv under .local/). + */ +import { spawnSync } from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const MORPH_DOC_ROOT = path.join(__dirname, '../..'); + +export function skillCreatorRequirementsPath(root = MORPH_DOC_ROOT) { + return path.join(root, 'scripts', 'skill-creator-requirements.txt'); +} + +export function skillCreatorVenvDir(root = MORPH_DOC_ROOT) { + return path.join(root, '.local', 'skill-creator-venv'); +} + +export function skillCreatorVenvPython(root = MORPH_DOC_ROOT) { + return path.join(skillCreatorVenvDir(root), 'bin', 'python3'); +} + +export function pythonCanImportYaml(pythonExe) { + const r = spawnSync(pythonExe, ['-c', 'import yaml'], { encoding: 'utf8' }); + return r.status === 0; +} + +/** + * Return a python3 that can `import yaml` (project venv or system). + * Creates `.local/skill-creator-venv` when needed (Homebrew PEP 668). + * @param {string} [root] + * @param {{ quiet?: boolean }} [options] + * @returns {string} + */ +export function ensureSkillCreatorPython(root = MORPH_DOC_ROOT, options = {}) { + const { quiet = false } = options; + const log = quiet ? () => {} : (...args) => console.log(...args); + + const venvPy = skillCreatorVenvPython(root); + if (fs.existsSync(venvPy) && pythonCanImportYaml(venvPy)) { + return venvPy; + } + + const systemPy = 'python3'; + if (pythonCanImportYaml(systemPy)) { + return systemPy; + } + + const venvDir = skillCreatorVenvDir(root); + const reqFile = skillCreatorRequirementsPath(root); + if (!fs.existsSync(reqFile)) { + throw new Error(`Missing ${reqFile}`); + } + + fs.mkdirSync(path.dirname(venvDir), { recursive: true }); + if (!fs.existsSync(venvPy)) { + log(`Creating skill-creator venv at ${venvDir} …`); + const venv = spawnSync(systemPy, ['-m', 'venv', venvDir], { stdio: quiet ? 'pipe' : 'inherit' }); + if (venv.status !== 0) { + throw new Error('python3 -m venv failed'); + } + } + + log('Installing Python deps into skill-creator venv (PyYAML)…'); + const pip = spawnSync(venvPy, ['-m', 'pip', 'install', '-q', '-r', reqFile], { + stdio: quiet ? 'pipe' : 'inherit', + }); + if (pip.status !== 0) { + throw new Error('pip install skill-creator-requirements.txt failed'); + } + + if (!pythonCanImportYaml(venvPy)) { + throw new Error('PyYAML not available in skill-creator venv after install'); + } + + return venvPy; +} diff --git a/scripts/lib/skill-freshness.mjs b/scripts/lib/skill-freshness.mjs new file mode 100644 index 000000000..3048a61f2 --- /dev/null +++ b/scripts/lib/skill-freshness.mjs @@ -0,0 +1,161 @@ +/** + * Shared Skill freshness checks (VISION.md § Skill Verification Metadata). + * Used by __tests__/morph-doc-skill-inventory.test.mjs and scripts/skill-freshness-report.mjs. + */ +import fs from 'node:fs'; +import path from 'node:path'; + +export const DECAY_THRESHOLD_DAYS = 90; +const MS_PER_DAY = 24 * 60 * 60 * 1000; + +/** Directories under skills/ excluded from inventory-style checks. */ +export const SKILLS_EXCLUDE_DIRS = new Set(['morph-skill']); + +/** @typedef {'missing_last_verified' | 'invalid_last_verified' | 'stale'} FreshnessCode */ + +/** + * @typedef {object} FreshnessWarning + * @property {string} skillId + * @property {FreshnessCode} code + * @property {string} message + * @property {number | null} ageDays + * @property {string | null} lastVerified + */ + +export function parseFrontmatter(content) { + const m = content.match(/^---\r?\n([\s\S]*?)\r?\n---/); + if (!m) return null; + const block = m[1]; + function field(name) { + const line = new RegExp(`^${name}:\\s*(.+)$`, 'm').exec(block); + if (!line) return null; + let v = line[1].trim(); + if ( + (v.startsWith('"') && v.endsWith('"')) || + (v.startsWith("'") && v.endsWith("'")) + ) { + v = v.slice(1, -1); + } + return v; + } + return { block, field }; +} + +export function parseIsoDate(value) { + if (!value) return null; + const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(value); + if (!match) return null; + const [, y, mo, d] = match; + const year = Number(y); + const month = Number(mo); + const day = Number(d); + const dt = new Date(Date.UTC(year, month - 1, day)); + if (Number.isNaN(dt.getTime())) return null; + if ( + dt.getUTCFullYear() !== year || + dt.getUTCMonth() + 1 !== month || + dt.getUTCDate() !== day + ) { + return null; + } + return dt; +} + +/** + * @param {string} skillsDir Absolute path to skills/ + * @param {{ now?: number, thresholdDays?: number }} [options] + * @returns {{ skillIds: string[], warnings: FreshnessWarning[] }} + */ +export function collectFreshnessWarnings(skillsDir, options = {}) { + const now = options.now ?? Date.now(); + const thresholdDays = options.thresholdDays ?? DECAY_THRESHOLD_DAYS; + + const entries = fs.readdirSync(skillsDir, { withFileTypes: true }); + const skillIds = entries + .filter((e) => e.isDirectory() && !SKILLS_EXCLUDE_DIRS.has(e.name)) + .map((e) => e.name) + .sort(); + + /** @type {FreshnessWarning[]} */ + const warnings = []; + + for (const skillId of skillIds) { + const skillPath = path.join(skillsDir, skillId, 'SKILL.md'); + if (!fs.existsSync(skillPath)) { + continue; + } + const content = fs.readFileSync(skillPath, 'utf8'); + const fm = parseFrontmatter(content); + if (!fm) { + continue; + } + + const lastVerifiedRaw = fm.field('last_verified'); + if (!lastVerifiedRaw) { + warnings.push({ + skillId, + code: 'missing_last_verified', + message: `skills/${skillId}/SKILL.md missing last_verified (see VISION.md § Skill Verification Metadata)`, + ageDays: null, + lastVerified: null, + }); + continue; + } + + const lastVerified = parseIsoDate(lastVerifiedRaw); + if (!lastVerified) { + warnings.push({ + skillId, + code: 'invalid_last_verified', + message: `skills/${skillId}/SKILL.md last_verified is not an ISO date (YYYY-MM-DD): ${lastVerifiedRaw}`, + ageDays: null, + lastVerified: lastVerifiedRaw, + }); + continue; + } + + const ageDays = Math.floor((now - lastVerified.getTime()) / MS_PER_DAY); + if (ageDays < 0) { + warnings.push({ + skillId, + code: 'future_last_verified', + message: `skills/${skillId}/SKILL.md last_verified is in the future: ${lastVerifiedRaw}`, + ageDays, + lastVerified: lastVerifiedRaw, + }); + continue; + } + if (ageDays > thresholdDays) { + warnings.push({ + skillId, + code: 'stale', + message: `skills/${skillId}/SKILL.md last_verified is ${ageDays} days old (threshold ${thresholdDays}); re-verify against sources`, + ageDays, + lastVerified: lastVerifiedRaw, + }); + } + } + + return { skillIds, warnings }; +} + +/** + * @param {string} root Repo root (parent of skills/) + * @param {{ now?: number, thresholdDays?: number }} [options] + */ +export function buildFreshnessReport(root, options = {}) { + const skillsDir = path.join(root, 'skills'); + const { skillIds, warnings } = collectFreshnessWarnings(skillsDir, options); + const generatedAt = new Date(options.now ?? Date.now()).toISOString(); + + return { + schema: 'morph-doc/skill-freshness-report/v1', + generatedAt, + thresholdDays: options.thresholdDays ?? DECAY_THRESHOLD_DAYS, + skillCount: skillIds.length, + warningCount: warnings.length, + staleCount: warnings.filter((w) => w.code === 'stale').length, + warnings, + skillIds, + }; +} diff --git a/scripts/morph-agent-ln b/scripts/morph-agent-ln new file mode 100755 index 000000000..0821bf7e0 --- /dev/null +++ b/scripts/morph-agent-ln @@ -0,0 +1,302 @@ +#!/usr/bin/env bash +# Symlink agents/.md in the morph-doc repo into each Agent's agents directory, or remove symlinks with --unlink (see --help). +# Usage: see skills/README.md § Linking agents (parallel to scripts/morph-skill-ln) +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DEFAULT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" + +DRY_RUN=0 +UNLINK=0 +MODE="all" +ROOT_PATH="" +RAW_AGENTS=() +POSITIONAL=() + +usage() { + cat <<'EOF' +morph-agent-ln — Create or remove Agent definition symlinks inside the morph-doc repo (project-local agents directories for each tool) + +Usage: + morph-agent-ln [options] [agent-name] + When agent-name is omitted: batch-process all files under agents/morph-*.md (same list for --unlink). + agent-name may be given with or without the .md extension (e.g. morph-dapp-agent or morph-dapp-agent.md). + +Path: + -r, --root PATH Absolute path to the morph-doc repo root (parent of agents/). + Omit to use: -r flag / MORPH_DOC_ROOT env var / repo root inferred from script location. + +Targets: + -a, --agent ARG Repeatable. ARG is one of: + • Built-in name: cursor | claude | openclaw | windsurf | codex + • Or a repo-relative path (must contain / or start with .) + When no --agent is specified, defaults to: cursor claude openclaw windsurf + +Actions: + --unlink Remove symlinks (delete .md from the selected --agent directories; + only symbolic links are deleted — regular files are skipped with a warning). + Does not run ln. + +Other: + --dry-run Print commands that would be executed without writing anything + -h, --help Show this help + +Environment variables: + MORPH_DOC_ROOT Used as repo root when -r/--root is not provided + +Examples: + ./scripts/morph-agent-ln -a cursor -a claude + ./scripts/morph-agent-ln --unlink -a cursor morph-dapp-agent + ./scripts/morph-agent-ln --unlink --root /path/to/morph-doc --dry-run +EOF +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) + DRY_RUN=1 + shift + ;; + --unlink) + UNLINK=1 + shift + ;; + -h | --help) + usage + exit 0 + ;; + -r | --root) + if [[ -z "${2:-}" ]]; then + echo "Option $1 requires a PATH argument" >&2 + exit 1 + fi + ROOT_PATH="$2" + shift 2 + ;; + -a | --agent) + if [[ -z "${2:-}" ]]; then + echo "Option $1 requires an ARG (built-in name or repo-relative path)" >&2 + exit 1 + fi + RAW_AGENTS+=("$2") + shift 2 + ;; + -*) + echo "Unknown option: $1 (use --help)" >&2 + exit 1 + ;; + *) + POSITIONAL+=("$1") + shift + ;; + esac +done + +if [[ ${#POSITIONAL[@]} -gt 1 ]]; then + echo "At most one agent-name may be specified; got: ${POSITIONAL[*]}" >&2 + exit 1 +fi +if [[ ${#POSITIONAL[@]} -eq 1 ]]; then + MODE="single" + AGENT_ARG="${POSITIONAL[0]}" + AGENT_ARG="${AGENT_ARG%.md}" +fi + +if [[ -n "$ROOT_PATH" ]]; then + if [[ ! -d "$ROOT_PATH" ]]; then + echo "Not a directory: ${ROOT_PATH}" >&2 + exit 1 + fi + MORPH_DOC_ROOT="$(cd "$ROOT_PATH" && pwd)" +else + MORPH_DOC_ROOT="${MORPH_DOC_ROOT:-$DEFAULT_ROOT}" +fi + +AGENTS_ROOT="${MORPH_DOC_ROOT}/agents" +# Single agent with --unlink: allow agents/.md to no longer exist; still remove links in agent directories +if [[ "$UNLINK" -eq 1 && "$MODE" == "single" ]]; then + : +elif [[ ! -d "$AGENTS_ROOT" ]]; then + echo "agents directory not found: ${AGENTS_ROOT} (check -r/--root or MORPH_DOC_ROOT)" >&2 + exit 1 +fi + +normalize_agent_subpath() { + local key="$1" + case "$key" in + *..*) + echo "--agent path must not contain ..: $key" >&2 + return 1 + ;; + esac + case "$key" in + cursor) echo ".cursor/agents"; return 0 ;; + claude) echo ".claude/agents"; return 0 ;; + openclaw) echo ".openclaw/agents"; return 0 ;; + windsurf) echo ".windsurf/agents"; return 0 ;; + codex) echo ".codex/agents"; return 0 ;; + esac + case "$key" in + */* | .*) + local p="${key#./}" + [[ -n "$p" ]] || { + echo "Invalid --agent path: $key" >&2 + return 1 + } + echo "$p" + return 0 + ;; + esac + echo "Unknown --agent: $key (built-in: cursor claude openclaw windsurf codex; or a repo-relative path such as .windsurf/agents)" >&2 + return 1 +} + +AGENT_SUBPATHS=() +append_unique() { + local sp="$1" + local i n=${#AGENT_SUBPATHS[@]} + for ((i = 0; i < n; i++)); do + [[ "${AGENT_SUBPATHS[i]}" == "$sp" ]] && return 0 + done + AGENT_SUBPATHS+=("$sp") +} + +register_agent_arg() { + local raw="$1" + local sp + sp="$(normalize_agent_subpath "$raw")" || return 1 + append_unique "$sp" +} + +if [[ ${#RAW_AGENTS[@]} -eq 0 ]]; then + register_agent_arg cursor + register_agent_arg claude + register_agent_arg openclaw + register_agent_arg windsurf +else + for raw in "${RAW_AGENTS[@]}"; do + register_agent_arg "$raw" || exit 1 + done +fi + +mkdir_p_global() { + [[ "$UNLINK" -eq 1 ]] && return 0 + local parts=() + local sp d i + for ((i = 0; i < ${#AGENT_SUBPATHS[@]}; i++)); do + sp="${AGENT_SUBPATHS[i]}" + d="${MORPH_DOC_ROOT}/${sp}" + parts+=("$d") + done + if [[ ${#parts[@]} -eq 0 ]]; then + return 0 + fi + if [[ "$DRY_RUN" -eq 1 ]]; then + echo "mkdir -p $(printf ' %q' "${parts[@]}")" + return 0 + fi + mkdir -p "${parts[@]}" +} + +link_one() { + local name="$1" + local src="${MORPH_DOC_ROOT}/agents/${name}.md" + if [[ ! -f "$src" ]]; then + echo "Skipping (file not found): ${src}" >&2 + return 1 + fi + src="$(cd "$(dirname "$src")" && pwd)/$(basename "$src")" + + local sp d i + for ((i = 0; i < ${#AGENT_SUBPATHS[@]}; i++)); do + sp="${AGENT_SUBPATHS[i]}" + d="${MORPH_DOC_ROOT}/${sp}/${name}.md" + if [[ "$DRY_RUN" -eq 1 ]]; then + echo "ln -sfn \"${src}\" \"${d}\"" + else + ln -sfn "${src}" "${d}" + fi + done + echo "Linked: ${name}" +} + +unlink_one() { + local name="$1" + local sp d i removed=0 + for ((i = 0; i < ${#AGENT_SUBPATHS[@]}; i++)); do + sp="${AGENT_SUBPATHS[i]}" + d="${MORPH_DOC_ROOT}/${sp}/${name}.md" + if [[ ! -e "$d" ]] && [[ ! -L "$d" ]]; then + echo "Skipping (does not exist): ${d}" >&2 + continue + fi + if [[ -L "$d" ]]; then + if [[ "$DRY_RUN" -eq 1 ]]; then + echo "rm -f $(printf '%q' "$d")" + else + rm -f "$d" + fi + echo "Removed link: ${d}" + removed=$((removed + 1)) + else + echo "Skipping (not a symlink, not deleted): ${d}" >&2 + fi + done + if [[ "$removed" -eq 0 ]]; then + return 1 + fi + return 0 +} + +if [[ "$UNLINK" -eq 1 ]]; then + if [[ "$MODE" == "single" ]]; then + unlink_one "${AGENT_ARG}" || { + echo "Could not remove any symlinks (path does not exist or is not a symlink): ${AGENT_ARG}" >&2 + exit 1 + } + exit 0 + fi + + count=0 + shopt -s nullglob + for f in "${AGENTS_ROOT}"/morph-*.md; do + [[ -f "$f" ]] || continue + name="$(basename "$f" .md)" + if unlink_one "$name"; then + count=$((count + 1)) + fi + done + shopt -u nullglob + + if [[ "$count" -eq 0 ]]; then + echo "No symlinks removed (no matching agents/morph-*.md or no symlinks found at targets)" >&2 + exit 1 + fi + echo "Done. Processed ${count} agent(s)." + exit 0 +fi + +mkdir_p_global + +if [[ "$MODE" == "single" ]]; then + link_one "${AGENT_ARG}" || exit 1 + exit 0 +fi + +count=0 +shopt -s nullglob +for f in "${AGENTS_ROOT}"/morph-*.md; do + [[ -f "$f" ]] || continue + name="$(basename "$f" .md)" + if link_one "$name"; then + count=$((count + 1)) + fi +done +shopt -u nullglob + +if [[ "$count" -eq 0 ]]; then + echo "No linkable agents/morph-*.md found" >&2 + exit 1 +fi + +echo "Done. ${count} agent(s) linked." diff --git a/scripts/morph-skill-creator-install.sh b/scripts/morph-skill-creator-install.sh new file mode 100755 index 000000000..eb22e0c27 --- /dev/null +++ b/scripts/morph-skill-creator-install.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +# Shallow-install anthropics/skill-creator into vendor/skill-creator (gitignored). +# Upstream: https://github.com/anthropics/skills/tree/main/skills/skill-creator +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +DEST="${ROOT}/vendor/skill-creator" +TMP="$(mktemp -d)" +trap 'rm -rf "$TMP"' EXIT + +echo "Cloning anthropics/skills (sparse: skills/skill-creator) …" +git clone --depth 1 --filter=blob:none --sparse https://github.com/anthropics/skills.git "$TMP/repo" +( + cd "$TMP/repo" + git sparse-checkout set skills/skill-creator +) + +rm -rf "$DEST" +mkdir -p "$(dirname "$DEST")" +cp -R "$TMP/repo/skills/skill-creator" "$DEST" + +VENV="${ROOT}/.local/skill-creator-venv" +echo "Creating skill-creator Python venv (PyYAML for quick_validate.py) …" +python3 -m venv "$VENV" +"${VENV}/bin/python3" -m pip install -q -r "${ROOT}/scripts/skill-creator-requirements.txt" + +echo "Installed skill-creator at: $DEST" +echo "Export: export MORPH_SKILL_CREATOR_ROOT=\"$DEST\"" diff --git a/scripts/morph-skill-creator.mjs b/scripts/morph-skill-creator.mjs new file mode 100644 index 000000000..8d3c85952 --- /dev/null +++ b/scripts/morph-skill-creator.mjs @@ -0,0 +1,394 @@ +#!/usr/bin/env node +/** + * Bridge morph-doc Skills to anthropics/skill-creator (eval, description loop, validate). + * + * Usage: + * node scripts/morph-skill-creator.mjs check + * node scripts/morph-skill-creator.mjs install + * node scripts/morph-skill-creator.mjs validate + * node scripts/morph-skill-creator.mjs run-eval [-- ...run_eval.py flags] + * node scripts/morph-skill-creator.mjs desc-loop [-- ...run_loop.py flags] + * + * Requires Python 3 for upstream scripts; run-eval and desc-loop need `claude` CLI (see skill-creator SKILL.md). + */ +import { spawnSync } from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + resolveBehaviorEvalSetPath, + resolveSkillCreatorInstall, + resolveTriggerEvalSetPath, + skillCreatorCandidateRoots, +} from './lib/skill-creator-path.mjs'; +import { + ensureSkillCreatorPython, + pythonCanImportYaml, + skillCreatorVenvDir, +} from './lib/skill-creator-python.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); + +function resolvePython() { + try { + return ensureSkillCreatorPython(ROOT); + } catch (err) { + console.error(err.message); + process.exit(1); + } +} + +function usage() { + console.log(`Usage: + node scripts/morph-skill-creator.mjs check + node scripts/morph-skill-creator.mjs install + node scripts/morph-skill-creator.mjs validate + node scripts/morph-skill-creator.mjs run-eval [-- extra run_eval.py args] + node scripts/morph-skill-creator.mjs desc-loop [-- extra run_loop.py args] + +Environment: + MORPH_SKILL_CREATOR_ROOT Path to anthropics skill-creator checkout + MORPH_SKILL_CREATOR_MODEL Model for claude -p (default: claude-sonnet-4-20250514) + MORPH_SKILL_CREATOR_RUN_EVAL_OUT Optional JSON output path for run-eval + +Upstream: https://github.com/anthropics/skills/tree/main/skills/skill-creator +`); +} + +function run(cmd, args, options = {}) { + const r = spawnSync(cmd, args, { stdio: 'inherit', cwd: options.cwd ?? ROOT, env: process.env }); + if (r.error) { + console.error(r.error.message); + process.exit(1); + } + if (r.status !== 0) { + process.exit(r.status ?? 1); + } +} + +function cmdCheck() { + const install = resolveSkillCreatorInstall(); + if (!install) { + console.error('skill-creator not found. Candidates:'); + for (const c of skillCreatorCandidateRoots()) { + console.error(` - ${c}`); + } + console.error('\nRun: npm run skill-creator:install'); + console.error('Or clone https://github.com/anthropics/skills/tree/main/skills/skill-creator'); + process.exit(1); + } + console.log('skill-creator: ok'); + console.log(` root: ${install.root}`); + console.log(` run_loop: ${install.runLoop}`); + console.log(` run_eval: ${install.runEval}`); + + const claude = spawnSync('claude', ['--version'], { encoding: 'utf8' }); + if (claude.status === 0) { + console.log(` claude CLI: ${(claude.stdout || '').trim()}`); + } else { + console.warn( + ' claude CLI: not found (run-eval and desc-loop need it; use hand-edits + npm test otherwise)', + ); + } + + const py = spawnSync('python3', ['--version'], { encoding: 'utf8' }); + if (py.status === 0) { + console.log(` python3: ${(py.stdout || '').trim()}`); + } else { + console.error(' python3: not found'); + process.exit(1); + } + + const venvPy = path.join(skillCreatorVenvDir(ROOT), 'bin', 'python3'); + if (pythonCanImportYaml(venvPy)) { + console.log(` PyYAML: ok (venv ${skillCreatorVenvDir(ROOT)})`); + } else if (pythonCanImportYaml('python3')) { + console.log(' PyYAML: ok (system python3)'); + } else { + console.warn( + ` PyYAML: not ready — run: npm run skill-creator:install (creates ${skillCreatorVenvDir(ROOT)})`, + ); + } +} + +function cmdInstall() { + const script = path.join(ROOT, 'scripts', 'morph-skill-creator-install.sh'); + run('bash', [script]); + const dest = path.join(ROOT, 'vendor', 'skill-creator'); + if (resolveSkillCreatorInstall()) { + console.log(`\nAdd to your shell profile (optional):\n export MORPH_SKILL_CREATOR_ROOT="${dest}"`); + } +} + +function assertSkillId(skillId) { + const skillDir = path.join(ROOT, 'skills', skillId); + const skillMd = path.join(skillDir, 'SKILL.md'); + if (!fs.existsSync(skillMd)) { + console.error(`No skills/${skillId}/SKILL.md`); + process.exit(1); + } + return skillDir; +} + +function requireSkillCreatorInstall() { + const install = resolveSkillCreatorInstall(); + if (!install) { + console.error('skill-creator not installed. Run: npm run skill-creator:install'); + process.exit(1); + } + if (!fs.existsSync(install.runEval)) { + console.error(`skill-creator run_eval.py not found at ${install.runEval}`); + process.exit(1); + } + return install; +} + +function resolveTriggerEvalOrExit(skillId) { + const skillDir = assertSkillId(skillId); + const evalSet = resolveTriggerEvalSetPath(ROOT, skillId); + if (!evalSet) { + console.error( + `No trigger eval set for ${skillId}. Add one of:\n` + + ` scripts/skill-trigger-evals.${skillId}.json\n` + + ` scripts/skill-trigger-evals.${skillId}.example.json (copy from morph-js-sdk example)\n` + + ` skills/${skillId}/evals/trigger.json`, + ); + process.exit(1); + } + return { skillDir, evalSet }; +} + +function requireClaudeCli() { + const claude = spawnSync('claude', ['--version'], { encoding: 'utf8' }); + if (claude.status !== 0) { + console.error( + 'claude CLI is required (runs `claude -p` per eval query). Install Claude Code and ensure `claude` is on PATH.', + ); + process.exit(1); + } +} + +function defaultSkillCreatorModel() { + return process.env.MORPH_SKILL_CREATOR_MODEL || 'claude-sonnet-4-20250514'; +} + +function cmdValidate(skillId) { + assertSkillId(skillId); + console.log('Running morph-doc guards (npm test subset via inventory + pairing)…'); + run(process.execPath, [ + path.join(ROOT, '__tests__', 'morph-doc-skill-inventory.test.mjs'), + ]); + run(process.execPath, [path.join(ROOT, '__tests__', 'doc-skill-pairing.test.mjs')]); + + const install = resolveSkillCreatorInstall(); + if (!install) { + console.warn('\nSkipping upstream quick_validate.py (skill-creator not installed).'); + return; + } + + const python = resolvePython(); + + console.log('\nRunning upstream quick_validate.py (Anthropic frontmatter rules)…'); + const r = spawnSync(python, [install.quickValidate, path.join(ROOT, 'skills', skillId)], { + encoding: 'utf8', + cwd: install.root, + }); + if (r.stdout) process.stdout.write(r.stdout); + if (r.stderr) process.stderr.write(r.stderr); + if (r.status !== 0) { + const detail = [r.stderr, r.stdout].filter(Boolean).join('\n').trim(); + const morphMetadataOnly = + /last_verified/i.test(detail) && /verified_against/i.test(detail); + if (morphMetadataOnly) { + console.warn( + '\nNote: upstream quick_validate rejects Morph `last_verified` / `verified_against`.', + '\nTreat morph inventory + npm test as authoritative for Morph metadata.', + ); + } else { + throw new Error( + `upstream quick_validate failed (exit ${r.status ?? 'unknown'})${detail ? `:\n${detail}` : ''}`, + ); + } + } else { + console.log('upstream quick_validate: ok'); + } +} + +function cmdRunEval(skillId, extraArgs) { + const { skillDir, evalSet } = resolveTriggerEvalOrExit(skillId); + const install = requireSkillCreatorInstall(); + requireClaudeCli(); + const python = resolvePython(); + const model = defaultSkillCreatorModel(); + + const hasOutFlag = extraArgs.some((a) => a === '--out' || a.startsWith('--out=')); + const outPath = + process.env.MORPH_SKILL_CREATOR_RUN_EVAL_OUT || + (!hasOutFlag + ? path.join(ROOT, '.local', 'skill-run-eval', skillId, 'results.json') + : null); + + const args = [ + '-m', + 'scripts.run_eval', + '--eval-set', + evalSet, + '--skill-path', + skillDir, + '--model', + model, + '--runs-per-query', + '1', + '--verbose', + ...extraArgs, + ]; + + console.log('Running description trigger eval (claude -p per query)…'); + console.log(` eval-set: ${evalSet}`); + console.log(` skill-path: ${skillDir}`); + console.log(` model: ${model}`); + if (outPath) { + console.log(` out: ${outPath}`); + } + + let stdout = ''; + const r = spawnSync(python, args, { + cwd: install.root, + encoding: 'utf8', + env: process.env, + }); + if (r.stdout) { + process.stdout.write(r.stdout); + stdout = r.stdout; + } + if (r.stderr) process.stderr.write(r.stderr); + if (r.error) { + console.error(r.error.message); + process.exit(1); + } + + if (outPath && stdout.trim()) { + const abs = path.isAbsolute(outPath) ? outPath : path.join(ROOT, outPath); + fs.mkdirSync(path.dirname(abs), { recursive: true }); + fs.writeFileSync(abs, `${stdout.trim()}\n`, 'utf8'); + console.log(`\nWrote ${abs}`); + } + + if (r.status !== 0) { + process.exit(r.status ?? 1); + } +} + +function cmdDescLoop(skillId, extraArgs) { + const { skillDir, evalSet } = resolveTriggerEvalOrExit(skillId); + const install = requireSkillCreatorInstall(); + requireClaudeCli(); + const python = resolvePython(); + + const resultsDir = + process.env.MORPH_SKILL_CREATOR_RESULTS_DIR || + path.join(ROOT, '.local', 'skill-desc-opt', skillId); + + fs.mkdirSync(resultsDir, { recursive: true }); + + const model = defaultSkillCreatorModel(); + + const args = [ + install.runLoop, + '--eval-set', + evalSet, + '--skill-path', + skillDir, + '--model', + model, + '--runs-per-query', + '1', + '--results-dir', + resultsDir, + '--verbose', + ...extraArgs, + ]; + + console.log('Running description optimization loop…'); + console.log(` eval-set: ${evalSet}`); + console.log(` skill-path: ${skillDir}`); + console.log(` results-dir: ${resultsDir}`); + console.log(` model: ${model}`); + + run(python, args, { cwd: install.root }); + + const runDirs = fs + .readdirSync(resultsDir, { withFileTypes: true }) + .filter((e) => e.isDirectory()) + .map((e) => e.name) + .sort(); + const latestRun = runDirs.at(-1); + const resultsFile = latestRun + ? path.join(resultsDir, latestRun, 'results.json') + : path.join(resultsDir, 'results.json'); + if (fs.existsSync(resultsFile)) { + const data = JSON.parse(fs.readFileSync(resultsFile, 'utf8')); + if (data.best_description) { + console.log('\n--- best_description (merge into SKILL.md manually, then npm test) ---\n'); + console.log(data.best_description); + } + } + + const behaviorEval = resolveBehaviorEvalSetPath(ROOT, skillId); + if (!behaviorEval) { + console.log( + `\nTip: add skills/${skillId}/evals/evals.json for behavioral evals (see scripts/skill-behavior-evals.template.json).`, + ); + } +} + +function main() { + const [command, skillId, ...rest] = process.argv.slice(2); + if (!command || command === '-h' || command === '--help') { + usage(); + process.exit(command ? 0 : 1); + } + + switch (command) { + case 'check': + cmdCheck(); + break; + case 'install': + cmdInstall(); + break; + case 'validate': + if (!skillId) { + usage(); + process.exit(1); + } + cmdValidate(skillId); + break; + case 'run-eval': { + if (!skillId) { + usage(); + process.exit(1); + } + const sep = rest.indexOf('--'); + const extra = sep >= 0 ? rest.slice(sep + 1) : []; + cmdRunEval(skillId, extra); + break; + } + case 'desc-loop': { + if (!skillId) { + usage(); + process.exit(1); + } + const sep = rest.indexOf('--'); + const extra = sep >= 0 ? rest.slice(sep + 1) : []; + cmdDescLoop(skillId, extra); + break; + } + default: + console.error(`Unknown command: ${command}`); + usage(); + process.exit(1); + } +} + +main(); diff --git a/scripts/morph-skill-ln b/scripts/morph-skill-ln new file mode 100755 index 000000000..21188fe1d --- /dev/null +++ b/scripts/morph-skill-ln @@ -0,0 +1,306 @@ +#!/usr/bin/env bash +# Symlink skills// in the morph-doc repo into each Agent's skills directory, or remove symlinks with --unlink (see --help). +# Usage: see skills/README.md and skills/morph-skill-ln/SKILL.md +set -euo pipefail + +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DEFAULT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)" + +DRY_RUN=0 +UNLINK=0 +MODE="all" +ROOT_PATH="" +RAW_AGENTS=() +POSITIONAL=() + +usage() { + cat <<'EOF' +morph-skill-ln — Create or remove Agent Skill symlinks inside the morph-doc repo (project-local skills directories for each tool) + +Usage: + morph-skill-ln [options] [skill-id] + When skill-id is omitted: batch-process all directories under skills/morph-*/ that contain SKILL.md (same list for --unlink). + +Path: + -r, --root PATH Absolute path to the morph-doc repo root (parent of skills/). + Omit to use: -r flag / MORPH_DOC_ROOT env var / repo root inferred from script location. + +Targets: + -a, --agent ARG Repeatable. ARG is one of: + • Built-in name: cursor | claude | openclaw | windsurf | codex + • Or a repo-relative path (must contain / or start with .) + When no --agent is specified, defaults to: cursor claude openclaw windsurf + +Actions: + --unlink Remove symlinks (delete from the selected --agent directories; only + symbolic links are deleted — regular files/directories are skipped with a warning). + Does not run ln. + +Other: + --dry-run Print commands that would be executed without writing anything + -h, --help Show this help + +Environment variables: + MORPH_DOC_ROOT Used as repo root when -r/--root is not provided + +Examples: + ./scripts/morph-skill-ln -a cursor -a claude + ./scripts/morph-skill-ln --unlink -a cursor morph-js-sdk + ./scripts/morph-skill-ln --unlink --root /path/to/morph-doc --dry-run +EOF +} + +while [[ $# -gt 0 ]]; do + case "$1" in + --dry-run) + DRY_RUN=1 + shift + ;; + --unlink) + UNLINK=1 + shift + ;; + -h | --help) + usage + exit 0 + ;; + -r | --root) + if [[ -z "${2:-}" ]]; then + echo "Option $1 requires a PATH argument" >&2 + exit 1 + fi + ROOT_PATH="$2" + shift 2 + ;; + -a | --agent) + if [[ -z "${2:-}" ]]; then + echo "Option $1 requires an ARG (built-in name or repo-relative path)" >&2 + exit 1 + fi + RAW_AGENTS+=("$2") + shift 2 + ;; + -*) + echo "Unknown option: $1 (use --help)" >&2 + exit 1 + ;; + *) + POSITIONAL+=("$1") + shift + ;; + esac +done + +if [[ ${#POSITIONAL[@]} -gt 1 ]]; then + echo "At most one skill-id may be specified; got: ${POSITIONAL[*]}" >&2 + exit 1 +fi +if [[ ${#POSITIONAL[@]} -eq 1 ]]; then + MODE="single" + SKILL_ARG="${POSITIONAL[0]}" +fi + +if [[ -n "$ROOT_PATH" ]]; then + if [[ ! -d "$ROOT_PATH" ]]; then + echo "Not a directory: ${ROOT_PATH}" >&2 + exit 1 + fi + MORPH_DOC_ROOT="$(cd "$ROOT_PATH" && pwd)" +else + MORPH_DOC_ROOT="${MORPH_DOC_ROOT:-$DEFAULT_ROOT}" +fi + +SKILLS_ROOT="${MORPH_DOC_ROOT}/skills" +# Single skill with --unlink: allow skills/ to no longer exist; still remove links in agent directories +if [[ "$UNLINK" -eq 1 && "$MODE" == "single" ]]; then + : +elif [[ ! -d "$SKILLS_ROOT" ]]; then + echo "skills directory not found: ${SKILLS_ROOT} (check -r/--root or MORPH_DOC_ROOT)" >&2 + exit 1 +fi + +normalize_agent_subpath() { + local key="$1" + case "$key" in + *..*) + echo "--agent path must not contain ..: $key" >&2 + return 1 + ;; + esac + case "$key" in + cursor) echo ".cursor/skills"; return 0 ;; + claude) echo ".claude/skills"; return 0 ;; + openclaw) echo ".openclaw/skills"; return 0 ;; + windsurf) echo ".windsurf/skills"; return 0 ;; + codex) echo ".codex/skills"; return 0 ;; + esac + case "$key" in + */* | .*) + local p="${key#./}" + [[ -n "$p" ]] || { + echo "Invalid --agent path: $key" >&2 + return 1 + } + echo "$p" + return 0 + ;; + esac + echo "Unknown --agent: $key (built-in: cursor claude openclaw windsurf codex; or a repo-relative path such as .windsurf/skills)" >&2 + return 1 +} + +AGENT_SUBPATHS=() +append_unique() { + local sp="$1" + local i n=${#AGENT_SUBPATHS[@]} + for ((i = 0; i < n; i++)); do + [[ "${AGENT_SUBPATHS[i]}" == "$sp" ]] && return 0 + done + AGENT_SUBPATHS+=("$sp") +} + +register_agent_arg() { + local raw="$1" + local sp + sp="$(normalize_agent_subpath "$raw")" || return 1 + append_unique "$sp" +} + +if [[ ${#RAW_AGENTS[@]} -eq 0 ]]; then + register_agent_arg cursor + register_agent_arg claude + register_agent_arg openclaw + register_agent_arg windsurf +else + for raw in "${RAW_AGENTS[@]}"; do + register_agent_arg "$raw" || exit 1 + done +fi + +mkdir_p_global() { + [[ "$UNLINK" -eq 1 ]] && return 0 + local parts=() + local sp d i + for ((i = 0; i < ${#AGENT_SUBPATHS[@]}; i++)); do + sp="${AGENT_SUBPATHS[i]}" + d="${MORPH_DOC_ROOT}/${sp}" + parts+=("$d") + done + if [[ ${#parts[@]} -eq 0 ]]; then + return 0 + fi + if [[ "$DRY_RUN" -eq 1 ]]; then + echo "mkdir -p $(printf ' %q' "${parts[@]}")" + return 0 + fi + mkdir -p "${parts[@]}" +} + +link_one() { + local id="$1" + local src="${MORPH_DOC_ROOT}/skills/${id}" + if [[ ! -d "$src" ]]; then + echo "Skipping (directory not found): ${src}" >&2 + return 1 + fi + if [[ ! -f "${src}/SKILL.md" ]]; then + echo "Skipping (no SKILL.md): ${src}" >&2 + return 1 + fi + src="$(cd "$src" && pwd)" + + local sp d i + for ((i = 0; i < ${#AGENT_SUBPATHS[@]}; i++)); do + sp="${AGENT_SUBPATHS[i]}" + d="${MORPH_DOC_ROOT}/${sp}/${id}" + if [[ "$DRY_RUN" -eq 1 ]]; then + echo "ln -sfn \"${src}\" \"${d}\"" + else + ln -sfn "${src}" "${d}" + fi + done + echo "Linked: ${id}" +} + +unlink_one() { + local id="$1" + local sp d i removed=0 + for ((i = 0; i < ${#AGENT_SUBPATHS[@]}; i++)); do + sp="${AGENT_SUBPATHS[i]}" + d="${MORPH_DOC_ROOT}/${sp}/${id}" + if [[ ! -e "$d" ]] && [[ ! -L "$d" ]]; then + echo "Skipping (does not exist): ${d}" >&2 + continue + fi + if [[ -L "$d" ]]; then + if [[ "$DRY_RUN" -eq 1 ]]; then + echo "rm -f $(printf '%q' "$d")" + else + rm -f "$d" + fi + echo "Removed link: ${d}" + removed=$((removed + 1)) + else + echo "Skipping (not a symlink, not deleted): ${d}" >&2 + fi + done + if [[ "$removed" -eq 0 ]]; then + return 1 + fi + return 0 +} + +if [[ "$UNLINK" -eq 1 ]]; then + if [[ "$MODE" == "single" ]]; then + unlink_one "${SKILL_ARG}" || { + echo "Could not remove any symlinks (path does not exist or is not a symlink): ${SKILL_ARG}" >&2 + exit 1 + } + exit 0 + fi + + count=0 + shopt -s nullglob + for d in "${SKILLS_ROOT}"/morph-*/; do + [[ -d "$d" ]] || continue + id="$(basename "$d")" + [[ -f "${d}SKILL.md" ]] || continue + if unlink_one "$id"; then + count=$((count + 1)) + fi + done + shopt -u nullglob + + if [[ "$count" -eq 0 ]]; then + echo "No symlinks removed (no matching skills/morph-* or no symlinks found at targets)" >&2 + exit 1 + fi + echo "Done. Processed ${count} skill(s)." + exit 0 +fi + +mkdir_p_global + +if [[ "$MODE" == "single" ]]; then + link_one "${SKILL_ARG}" || exit 1 + exit 0 +fi + +count=0 +shopt -s nullglob +for d in "${SKILLS_ROOT}"/morph-*/; do + [[ -d "$d" ]] || continue + id="$(basename "$d")" + [[ -f "${d}SKILL.md" ]] || continue + if link_one "$id"; then + count=$((count + 1)) + fi +done +shopt -u nullglob + +if [[ "$count" -eq 0 ]]; then + echo "No linkable skills/morph-*/ found (each must contain SKILL.md)" >&2 + exit 1 +fi + +echo "Done. ${count} skill(s) linked." diff --git a/scripts/run-tests.mjs b/scripts/run-tests.mjs new file mode 100644 index 000000000..335559519 --- /dev/null +++ b/scripts/run-tests.mjs @@ -0,0 +1,71 @@ +/** + * Run __tests__/*.test.mjs in order (package.json invokes only this script to avoid long chains). + */ +import { spawnSync } from 'node:child_process'; +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath, pathToFileURL } from 'node:url'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); +const TEST_DIR = path.join(ROOT, '__tests__'); + +/** @type {readonly string[]} */ +export const TEST_FILES = [ + 'run-tests-manifest.test.mjs', + 'build-toolchain-constraints.test.mjs', + 'claude-md.test.mjs', + 'contributing-md.test.mjs', + 'doc-skill-pairing.test.mjs', + 'morph-doc-skill-inventory.test.mjs', + 'skill-freshness-report.test.mjs', + 'morph-skill-creator.test.mjs', + 'morph-skill-creator-agent.test.mjs', + 'skill-trigger-eval-examples.test.mjs', + 'skills-readme.test.mjs', + 'morph-contracts-skill-tokenlist.test.mjs', + 'skills-sidebar.test.mjs', + 'vision-md.test.mjs', + 'morph-js-sdk-skill.test.mjs', + 'morph-rails-skill.test.mjs', + 'morph-tx-cost-skill.test.mjs', + 'morph-doc-agent.test.mjs', + 'morph-dapp-agent.test.mjs', + 'morph-skill-ln.test.mjs', + 'morph-agent-ln.test.mjs', + 'morph-dapp-planning-skill.test.mjs', + 'morph-dapp-codegen-skill.test.mjs', + 'morph-dapp-code-review-skill.test.mjs', + 'morph-dapp-workflow-skill.test.mjs', + 'agent-driven-development-workflow-doc.test.mjs', + 'agents-sidebar.test.mjs', + 'examples-viem-alt-fee.test.mjs', + 'is-alt-fee.test.mjs', + 'markdown-actions-routes.test.mjs', + 'markdown-source-export.test.mjs', + 'mdx-navigation-pages.test.mjs', +]; + +function main() { + for (const name of TEST_FILES) { + const full = path.join(TEST_DIR, name); + if (!fs.existsSync(full)) { + console.error(`Missing test file: ${name}`); + process.exit(1); + } + const r = spawnSync(process.execPath, [full], { stdio: 'inherit', cwd: ROOT }); + if (r.error) { + console.error(r.error); + process.exit(1); + } + if (r.status !== 0) { + process.exit(r.status ?? 1); + } + } +} + +const isMain = + import.meta.url === pathToFileURL(path.resolve(process.argv[1] ?? '')).href; +if (isMain) { + main(); +} diff --git a/scripts/skill-behavior-evals.template.json b/scripts/skill-behavior-evals.template.json new file mode 100644 index 000000000..8b3e80d44 --- /dev/null +++ b/scripts/skill-behavior-evals.template.json @@ -0,0 +1,17 @@ +{ + "skill_name": "REPLACE_WITH_SKILL_ID", + "evals": [ + { + "id": 1, + "prompt": "Realistic user prompt that should exercise this Morph Skill (include chainId, package names, or doc paths as appropriate).", + "expected_output": "What a correct agent response must include (e.g. cites docs/build-on-morph/... section, uses morph-contracts for addresses, lists Execution Steps).", + "files": [] + }, + { + "id": 2, + "prompt": "Second prompt — edge case or common failure mode.", + "expected_output": "Success criteria; add assertions in eval_metadata.json during the skill-creator run.", + "files": [] + } + ] +} diff --git a/scripts/skill-creator-requirements.txt b/scripts/skill-creator-requirements.txt new file mode 100644 index 000000000..0160fec62 --- /dev/null +++ b/scripts/skill-creator-requirements.txt @@ -0,0 +1,2 @@ +# Python deps for vendor/skill-creator (quick_validate.py, etc.) +PyYAML>=6.0 diff --git a/scripts/skill-freshness-bot.DESIGN.md b/scripts/skill-freshness-bot.DESIGN.md new file mode 100644 index 000000000..552328439 --- /dev/null +++ b/scripts/skill-freshness-bot.DESIGN.md @@ -0,0 +1,206 @@ +# skill-freshness-bot — CI design sketch + +Elevate **Skill Verification Metadata** from `VISION.md` (`last_verified` / `verified_against` / 90-day decay) from a **non-blocking `npm test` warn** to **auditable, deduplicated GitHub automation**, while keeping a clear split from the existing human `skill-drift` feedback loop. + +--- + +## 1. Goals and non-goals + +### Goals + +| # | Goal | +|---|------| +| G1 | **Same source as existing tests**: The bot and `__tests__/morph-doc-skill-inventory.test.mjs` share the same freshness logic (`scripts/lib/skill-freshness.mjs`) so thresholds and parsing do not drift. | +| G2 | **Do not block ordinary PRs**: `npm test` still fails only on inventory frontmatter hard asserts; freshness overage remains **warn-only** (per `VISION.md`). | +| G3 | **Scheduled visibility**: On `main`, scheduled runs produce a report and **open/update** a single tracking Issue (not one spam Issue per Skill). | +| G4 | **Evolvable**: Report JSON schema is versioned; later you can attach `verified_against` file hashes, on-chain probes, etc., without changing the bot entrypoint. | + +### Non-goals (this phase) + +- Do not auto-update `last_verified` or auto-merge PRs (human re-verify required). +- Do not add freshness failure to PR required checks (avoid blocking unrelated PRs). +- Do not replace the `skill-drift` template (factual errors found by humans still use `.github/ISSUE_TEMPLATE/skill-feedback.yaml`). + +--- + +## 2. Relationship to existing components + +```text +┌─────────────────────────────────────────────────────────────────┐ +│ PR / local: npm test │ +│ morph-doc-skill-inventory.test.mjs │ +│ • frontmatter / name / description → assert (fatal) │ +│ • last_verified decay → console.warn (non-fatal) │ +│ ▲ │ +│ │ scripts/lib/skill-freshness.mjs (shared) │ +│ ▼ │ +│ Scheduled / manual: skill-freshness-bot (GitHub Actions) │ +│ scripts/skill-freshness-report.mjs --json --out report.json │ +│ → artifact + single tracking Issue (label: skill-freshness) │ +└─────────────────────────────────────────────────────────────────┘ + +Human drift reports ──► skill-drift label (skill-feedback.yaml) +Bot staleness rollup ──► skill-freshness label (bot-managed Issue) +``` + +| Component | Role | +|-----------|------| +| `scripts/lib/skill-freshness.mjs` | Single source of truth: parse `last_verified`, 90-day threshold, exclude `morph-skill/` | +| `scripts/skill-freshness-report.mjs` | CI entry: emit `morph-doc/skill-freshness-report/v1` JSON | +| `__tests__/skill-freshness-report.test.mjs` | Lock schema and boundary date parsing | +| `.github/workflows/skill-freshness-bot.yml` | Scheduled / `workflow_dispatch` run report + Issue | +| `skill-drift` | Human: wrong facts, routing failures, snippets that do not run | +| `skill-freshness` | Machine: batch “time to re-verify” queue | + +--- + +## 3. Report JSON schema (v1) + +Output from `skill-freshness-report.mjs`: + +```json +{ + "schema": "morph-doc/skill-freshness-report/v1", + "generatedAt": "2026-05-20T12:00:00.000Z", + "thresholdDays": 90, + "skillCount": 18, + "warningCount": 3, + "staleCount": 2, + "warnings": [ + { + "skillId": "morph-contracts", + "code": "stale", + "message": "skills/morph-contracts/SKILL.md last_verified is 95 days old ...", + "ageDays": 95, + "lastVerified": "2026-04-20" + } + ], + "skillIds": ["morph-bridge", "..."] +} +``` + +**`code` enum** + +| code | Meaning | Maintainer action | +|------|---------|-------------------| +| `missing_last_verified` | Field missing | Add YAML + `verified_against` | +| `invalid_last_verified` | Not `YYYY-MM-DD` | Fix the date | +| `stale` | Exceeds `thresholdDays` | Re-read against `verified_against` and re-stamp | + +--- + +## 4. GitHub Actions workflow (Phase 1) + +File: `.github/workflows/skill-freshness-bot.yml` + +### Triggers + +| Event | Purpose | +|-------|---------| +| `schedule: cron '0 9 * * 1'` | Scan `main` every Monday 09:00 UTC | +| `workflow_dispatch` | Maintainer manual re-run | + +**Do not run the bot on `pull_request`** (avoid noise; PRs still rely on local/CI `npm test` warns). + +### Job steps + +1. `checkout` (`main`) +2. `setup-node` (align with repo `.nvmrc` / package engines; LTS recommended) +3. `node scripts/skill-freshness-report.mjs --json --out .local/skill-freshness-report.json` +4. `actions/upload-artifact` — retain report for 30 days +5. **Issue sync** (`actions/github-script` or `peter-evans/create-or-update-issue`): + - If `warningCount === 0`: close the matching open Issue (if any) + - If `warningCount > 0`: create or update **one** Issue: + - Title: `[skill-freshness] Weekly re-verify queue (N warnings)` + - Labels: `skill-freshness`, `bot` + - Body: table of `skillId | code | lastVerified | ageDays | message`, link to re-stamp guidance in `VISION.md` and `CONTRIBUTING.md` + +### Permissions + +```yaml +permissions: + contents: read + issues: write +``` + +Uses `GITHUB_TOKEN`; no PAT unless Phase 2 reads sibling app paths inside `verified_against` across repos. + +--- + +## 5. Issue body template (example) + +```markdown +## Skill freshness report + +| Skill | Code | last_verified | Age (days) | +|-------|------|---------------|------------| +| morph-contracts | stale | 2026-04-20 | 95 | + +**Threshold:** 90 days (`VISION.md` § Skill Verification Metadata) + +### Maintainer checklist + +- [ ] Re-read each Skill against `verified_against` paths +- [ ] Update `last_verified` to today (UTC date) in the same PR as any fact fix +- [ ] Run `npm test` + +Report artifact: run #${RUN_ID} +Generated: ${generatedAt} +``` + +--- + +## 6. Phase 2+ (optional evolution) + +| Phase | Capability | Notes | +|-------|------------|-------| +| **2a** | `verified_against` existence check | Report adds `missing_source` (path does not exist in repo) | +| **2b** | In-repo file hash | Record `sha256` for in-repo paths; source changed but Skill not re-stamped → `source_changed` warning | +| **2c** | External canonical | Like `morph-contracts-skill-tokenlist.test.mjs`, CI fetches `morph-bridge/.../tokenList.json` for comparison (needs multi-repo checkout or submodule) | +| **3** | Draft PR bot | Only update checkboxes in Issue body / assign CODEOWNERS; do not auto-edit YAML | + +**Principle:** Phase 2+ extends via `skill-freshness-report/v2` schema; do not casually expand `npm test` hard-failure scope. + +--- + +## 7. Local commands + +```bash +# Human-readable warn list (same as inventory test) +node scripts/skill-freshness-report.mjs + +# JSON for CI / bot +node scripts/skill-freshness-report.mjs --json --out .local/skill-freshness-report.json + +# Full test suite (includes schema lock) +npm test +``` + +--- + +## 8. Operations and deduplication + +- **Repo labels (one-time)**: Create `skill-freshness` and `bot` labels in GitHub (or create manually on first bot failure); the Issues API does not create unknown labels automatically. +- **Single tracking Issue**: Search by title prefix `[skill-freshness] Weekly` + label `skill-freshness` (including closed); if found, `update` and `reopen` instead of opening a new Issue each week. +- **Merge strategy with skill-drift**: Bot Issue lists only “stale”; factual errors are fixed via human `skill-drift` PRs. You do not need to clear all stale items before closing the bot Issue (re-verify in batches). +- **CODEOWNERS**: Optional owners on `skills/**/SKILL.md`; bot Issue can @ the team. + +--- + +## 9. Acceptance criteria (Phase 1 done) + +- [ ] `npm test` passes, and inventory vs report warning counts match for the same repo snapshot +- [ ] `workflow_dispatch` produces artifact + Issue (or update) on GitHub +- [ ] When `warningCount === 0`, bot leaves no open freshness Issue +- [ ] Docs: optional small PR adding one sentence in `VISION.md` Feedback Loop pointing to this bot + +--- + +## 10. Risks + +| Risk | Mitigation | +|------|------------| +| Timezone shifts `ageDays` by 1 day | Use UTC calendar-day parsing everywhere (already implemented) | +| Issue noise | Single Issue rollup + filter by `skill-freshness` label | +| Logic diverges from inventory | Mandatory shared `scripts/lib/skill-freshness.mjs` | +| Fork PR abuse of `issues: write` | Workflow only on `schedule` + `workflow_dispatch` on default branch | diff --git a/scripts/skill-freshness-report.mjs b/scripts/skill-freshness-report.mjs new file mode 100644 index 000000000..812e2ef1f --- /dev/null +++ b/scripts/skill-freshness-report.mjs @@ -0,0 +1,79 @@ +#!/usr/bin/env node +/** + * Emit a machine-readable Skill freshness report for CI (skill-freshness-bot). + * + * Usage: + * node scripts/skill-freshness-report.mjs [--json] [--out ] + * + * Exit codes: + * 0 — report written (warnings do not fail; see morph-doc-skill-inventory.test.mjs) + * 1 — unexpected error + * + * Design: scripts/skill-freshness-bot.DESIGN.md + */ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { buildFreshnessReport } from './lib/skill-freshness.mjs'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const ROOT = path.join(__dirname, '..'); + +function parseArgs(argv) { + let json = false; + let outPath = null; + for (let i = 2; i < argv.length; i++) { + const a = argv[i]; + if (a === '--json') { + json = true; + } else if (a === '--out') { + const next = argv[i + 1]; + if (!next || next.startsWith('-')) { + console.error('Error: --out requires a file path (not another flag).'); + process.exit(1); + } + outPath = argv[++i]; + } else if (a === '-h' || a === '--help') { + console.log(`Usage: node scripts/skill-freshness-report.mjs [--json] [--out ]`); + process.exit(0); + } else { + console.error(`Unknown argument: ${a}`); + process.exit(1); + } + } + return { json, outPath }; +} + +function main() { + const { json, outPath } = parseArgs(process.argv); + const report = buildFreshnessReport(ROOT); + const text = JSON.stringify(report, null, 2); + + if (outPath) { + const abs = path.isAbsolute(outPath) ? outPath : path.join(ROOT, outPath); + fs.mkdirSync(path.dirname(abs), { recursive: true }); + fs.writeFileSync(abs, `${text}\n`, 'utf8'); + if (!json) { + console.log(`Wrote ${abs} (${report.warningCount} warning(s))`); + } + } + + if (json) { + process.stdout.write(`${text}\n`); + } else if (!outPath) { + if (report.warningCount === 0) { + console.log('skill-freshness-report: ok (%d skills)', report.skillCount); + } else { + console.warn( + 'skill-freshness-report: %d warning(s) (%d stale)', + report.warningCount, + report.staleCount + ); + for (const w of report.warnings) { + console.warn(' ⚠️', w.message); + } + } + } +} + +main(); diff --git a/scripts/skill-trigger-evals.morph-bridge.example.json b/scripts/skill-trigger-evals.morph-bridge.example.json new file mode 100644 index 000000000..8cdf71adb --- /dev/null +++ b/scripts/skill-trigger-evals.morph-bridge.example.json @@ -0,0 +1,82 @@ +[ + { + "query": "our backend needs to deposit 2 ETH from Ethereum mainnet to Morph L2 via L1GatewayRouter — what payable depositETH args and gasLimit should we use, and where is the canonical gateway address for chain 2818?", + "should_trigger": true + }, + { + "query": "withdraw USDC from Morph hoodi testnet 2910 back to L1: user already called withdrawERC20 on L2 gateway — walk proveAndRelayMessage and GET /getProof?nonce= steps from morph docs", + "should_trigger": true + }, + { + "query": "after L1 deposit of our custom ERC-20, how do we resolve the L2 token address with getL2ERC20Address on L1GatewayRouter — don't pick the gateway manually", + "should_trigger": true + }, + { + "query": "batch indexer stuck: L2→L1 withdrawal finalized in Rollup but frontend can't relay — need withdrawalRoots check + proof fields index leaf proof root from morph bridge API", + "should_trigger": true + }, + { + "query": "PM wants programmatic bridge script: depositERC20 on L1 then wait for sequencer — not bulbaswap, native morph canonical bridge only", + "should_trigger": true + }, + { + "query": "how much ETH to attach on withdrawETH for L1 fee when bridging from Morph — docs say 0.005 ETH suggested, confirm before we ship automation", + "should_trigger": true + }, + { + "query": "add our ERC-20 to Morph Bridge token list UI — what gateway listing flow and L1/L2 gateway pairing does morph-doc describe for custom tokens?", + "should_trigger": true + }, + { + "query": "solidity integration test: call depositETH on L1GatewayRouter then assert L2 balance — point me to morph bridge playbook not generic optimism tutorial", + "should_trigger": true + }, + { + "query": "user confused native L1↔L2 bridge vs cross-chain swap — they want deposit/withdraw via gateway routers only, which morph skill covers that?", + "should_trigger": true + }, + { + "query": "finalize pending L2 withdrawal to ethereum: challenge period passed, have batch index — need morph prove relay message calldata shape from official bridge doc", + "should_trigger": true + }, + { + "query": "list morph mainnet L1GatewayRouter L2 gateway and messenger addresses for security questionnaire — addresses only, no deposit flow", + "should_trigger": false + }, + { + "query": "configure viem @morph-network/viem Alt Fee tx type 0x7f feeTokenID on morph 2818 — sdk packages not bridge routers", + "should_trigger": false + }, + { + "query": "why total fee on morph is l1Fee plus l2Fee for a simple transfer — gas price oracle math without bridging", + "should_trigger": false + }, + { + "query": "bulbaswap JWT order API swap ETH across six chains including morph — cross-chain swap not canonical gateway", + "should_trigger": false + }, + { + "query": "run morph full node docker prune state on aws — node operator doc not bridge", + "should_trigger": false + }, + { + "query": "verify smart contract on morphscan from hardhat — etherscan plugin only", + "should_trigger": false + }, + { + "query": "morph rails x402 facilitator payment middleware — payfi not L1 deposit", + "should_trigger": false + }, + { + "query": "eth_getBlockByNumber batching limits for morph json-rpc — rpc api skill not bridge", + "should_trigger": false + }, + { + "query": "write a new morph-doc SKILL for morph-tx-cost fee display — skill authoring workflow", + "should_trigger": false + }, + { + "query": "uniswap v3 swap on ethereum mainnet chainId 1 with ethers — unrelated L1 only dex", + "should_trigger": false + } +] diff --git a/scripts/skill-trigger-evals.morph-js-sdk.example.json b/scripts/skill-trigger-evals.morph-js-sdk.example.json new file mode 100644 index 000000000..f6b748db5 --- /dev/null +++ b/scripts/skill-trigger-evals.morph-js-sdk.example.json @@ -0,0 +1,82 @@ +[ + { + "query": "we're shipping a Morph mainnet dashboard (chain 2818) and need viem + @morph-network/viem to send an Alt Fee tx paying gas in USDC — wallet is privy, feeTokenID/feeLimit keep failing simulation, can you walk the exact client setup and tx type 0x7f fields from our repo docs?", + "should_trigger": true + }, + { + "query": "hoodi testnet morph 2910 viem createWalletClient custom chain morphNetwork preset fee tokens list", + "should_trigger": true + }, + { + "query": "PM asked for 'gas in erc20 on morph' without mentioning viem — implement estimateGas + sendTransaction pattern for Morph L2 only using npm packages from morph network org", + "should_trigger": true + }, + { + "query": "debug: eth_sendRawTransaction returns invalid transaction type on Morph after copying a mainnet-only ethers v6 snippet — need Morph-specific adapter or tx envelope", + "should_trigger": true + }, + { + "query": "compare @morph-network/ethers vs @morph-network/ethers5 for our internal tool; which preset matches morph chain id 2818 and how to wire JsonRpcProvider", + "should_trigger": true + }, + { + "query": "token registry RPC method name + response shape for supported fee tokens on Morph (not generic ethereum)", + "should_trigger": true + }, + { + "query": "write a minimal next.js server action that uses viem on morph mainnet to read balance — but the tricky part is AltFee batching limits and feeLimit math from morph docs", + "should_trigger": true + }, + { + "query": "our CI script needs to assert chainId and rpc url for morph l2 in env — what's the canonical table from morph doc skill not blog posts", + "should_trigger": true + }, + { + "query": "migrate wallet connector from wagmi default chains to morph only; user txs are standard eip1559 eth gas — still need morph sdk?", + "should_trigger": true + }, + { + "query": "i typed morph fee token id wrong and got reverted — need the skill playbook steps to cross-check feeTokenID vs registry before opening a ticket", + "should_trigger": true + }, + { + "query": "list every morph mainnet bridge gateway contract address and l1/l2 messenger for our security questionnaire — no javascript, just addresses", + "should_trigger": false + }, + { + "query": "why is my metamask gas estimate on morph so much higher than ethereum for same opcode trace — formula and oracle calls only, no npm packages", + "should_trigger": false + }, + { + "query": "solidity contract review: our L2 contract uses block.basefee assumptions from ethereum — security checklist only", + "should_trigger": false + }, + { + "query": "configure hardhat to verify contracts on morphscan from CI — foundry/etherscan api key rotation", + "should_trigger": false + }, + { + "query": "run morph full node in docker on aws and prune disk — ops doc not js sdk", + "should_trigger": false + }, + { + "query": "explain morph rails x402 payment flow vs raw chain txs — payfi middleware conceptual", + "should_trigger": false + }, + { + "query": "add morph chain to rainbowkit chain list using only public rpc url from random blog — no morph-network packages", + "should_trigger": false + }, + { + "query": "write ethers v5 code for uniswap swap on ethereum mainnet chainId 1 — unrelated chain", + "should_trigger": false + }, + { + "query": "json-rpc eth_call batching best practices for morph node — rpc methods doc not js sdk skill", + "should_trigger": false + }, + { + "query": "draft a new morph-doc SKILL for morph-tx-cost only — authoring workflow not sdk integration", + "should_trigger": false + } +] diff --git a/sidebars-agents.js b/sidebars-agents.js new file mode 100644 index 000000000..de03711fb --- /dev/null +++ b/sidebars-agents.js @@ -0,0 +1,17 @@ +/** + * Agent definitions (agents/*.md): mirror markdown files in agents/. + * When adding a file here, append an entry; run __tests__/agents-sidebar.test.mjs to validate. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const AgentsSidebar = [ + { type: 'doc', id: 'morph-doc-agent', label: 'Morph Doc Agent' }, + { type: 'doc', id: 'morph-dapp-agent', label: 'Morph dApp Agent' }, + { type: 'doc', id: 'morph-skill-creator-agent', label: 'Morph Skill Creator Agent' }, +]; + +module.exports = { + AgentsSidebar, +}; diff --git a/sidebars-skills.js b/sidebars-skills.js new file mode 100644 index 000000000..c638224f7 --- /dev/null +++ b/sidebars-skills.js @@ -0,0 +1,70 @@ +/** + * Agent Skills (skills/) sidebar: mirrors each subdirectory's SKILL.md and skills/README.md. + * When adding a new skill, append an entry here; or run __tests__/skills-sidebar.test.mjs to validate against the directory. + * Agent *definitions* (agents/*.md) live in the separate docs plugin at /agents/ — the "Agents" links below point there. + */ + +// @ts-check + +/** @type {import('@docusaurus/plugin-content-docs').SidebarsConfig} */ +const SkillsSidebar = [ + { type: 'doc', id: 'README', label: 'Overview' }, + { + type: 'category', + label: 'Agents', + collapsed: false, + items: [ + { type: 'link', label: 'Morph Doc Agent', href: '/agents/morph-doc-agent' }, + { type: 'link', label: 'Morph dApp Agent', href: '/agents/morph-dapp-agent' }, + { type: 'link', label: 'Morph Skill Creator Agent', href: '/agents/morph-skill-creator-agent' }, + ], + }, + { + type: 'category', + label: 'Harness', + collapsed: false, + items: [ + { type: 'doc', id: 'morph-dapp-workflow/SKILL', label: 'Morph dApp End-to-End Workflow' }, + { type: 'doc', id: 'morph-dapp-planning/SKILL', label: 'Morph dApp Planning' }, + { type: 'doc', id: 'morph-dapp-codegen/SKILL', label: 'Morph dApp TDD Codegen' }, + { type: 'doc', id: 'morph-dapp-code-review/SKILL', label: 'Morph dApp Code Review' }, + ], + }, + { + type: 'category', + label: 'Skill playbooks', + collapsed: false, + items: [ + { type: 'doc', id: 'morph-bridge/SKILL', label: 'Morph Bridge (L1↔L2)' }, + { type: 'doc', id: 'morph-contracts/SKILL', label: 'Morph Contract Addresses' }, + { type: 'doc', id: 'morph-full-node-run-in-docker/SKILL', label: 'Morph Full Node (host)' }, + { type: 'doc', id: 'morph-js-sdk/SKILL', label: 'Morph JS/TS SDK' }, + { type: 'doc', id: 'morph-rails/SKILL', label: 'Morph Rails' }, + { type: 'doc', id: 'morph-rpc-api/SKILL', label: 'Morph JSON-RPC API' }, + { type: 'doc', id: 'morph-skill-ln/SKILL', label: 'morph-skill-ln (symlink script)' }, + { type: 'doc', id: 'morph-skill-creator/SKILL', label: 'Skill testing (skill-creator)' }, + { type: 'doc', id: 'morph-tx-cost/SKILL', label: 'Morph Transaction Fees' }, + { type: 'doc', id: 'morph-verify-contracts/SKILL', label: 'Verify Smart Contracts' }, + { + type: 'category', + label: 'Morph Skill (external pack)', + link: { type: 'doc', id: 'morph-skill/index' }, + collapsed: true, + items: [ + { type: 'doc', id: 'morph-skill/morph-wallet', label: 'Wallet' }, + { type: 'doc', id: 'morph-skill/morph-explorer', label: 'Explorer' }, + { type: 'doc', id: 'morph-skill/morph-identity', label: 'Identity (EIP-8004)' }, + { type: 'doc', id: 'morph-skill/morph-dex', label: 'DEX' }, + { type: 'doc', id: 'morph-skill/morph-bridge', label: 'Bridge (cross-chain swap)' }, + { type: 'doc', id: 'morph-skill/morph-7702', label: 'EIP-7702 Delegation' }, + { type: 'doc', id: 'morph-skill/morph-x402', label: 'x402 Payment' }, + { type: 'doc', id: 'morph-skill/morph-altfee', label: 'Alt-fee Gas' }, + ], + }, + ], + }, +]; + +module.exports = { + SkillsSidebar, +}; diff --git a/skills/README.md b/skills/README.md new file mode 100644 index 000000000..eb145cd56 --- /dev/null +++ b/skills/README.md @@ -0,0 +1,208 @@ +--- +slug: / +sidebar_label: Overview +title: Morph Skills +--- + +# morph-doc Skills + +This page is the entry point for the **Agent Skill system in the morph-doc repository**: it explains the **division of responsibility between `skills/` and `docs/`**, the **conventions and validation**, and how to **mirror** canonical `skills//` directories into **in-repo** IDE discovery paths (e.g. `.cursor/skills/`) or, when needed, into **user-level** skill directories for other workspaces. + +- **Vision & contract (doc-as-SKILL, `doc_skill_id`):** [`VISION.md`](https://github.com/morph-l2/morph-doc/blob/main/VISION.md) (repo root) +- **Generate or audit a Skill from a single target:** [`agents/morph-doc-agent.md`](https://github.com/morph-l2/morph-doc/blob/main/agents/morph-doc-agent.md) +- **Only care about symlinks / `morph-skill-ln`:** see [IDE discovery paths (in-repo mirrors)](#ide-discovery-paths-in-repo-mirrors) and [One-click script `morph-skill-ln`](#one-click-script-morph-skill-ln); topic skill **[morph-skill-ln](/skills/morph-skill-ln/SKILL)**. + +--- + +## What is `skills/` + +- **Canonical path**: **`skills//`** under the repo root, with **`SKILL.md`** as the main file (e.g. `skills/morph-js-sdk/SKILL.md`). **Do not** treat per-IDE symlink mirrors inside the repo (hidden config trees created by your editor) as the authoritative copy — edit **`skills//`** only. +- **Relationship to human docs**: Long-form content, tables, and demos live in **`docs/`** as the source of truth; Skills provide **routable summaries, execution steps, and pointers** — avoiding full duplication of MDX pages. When binding to a specific page, use **`doc_skill_id`** in the MDX frontmatter; its value must match the `skills//` directory name and the **`name`** field in `SKILL.md` (validation: `__tests__/doc-skill-pairing.test.mjs`). +- **Inventory & frontmatter checks**: `__tests__/morph-doc-skill-inventory.test.mjs` runs basic consistency checks on `skills/*/SKILL.md`. +- **Tuning `description` (trigger rate)**: If a Skill is under-used in the IDE, build a morph-doc eval JSON, run **skill-creator** *Description Optimization*, then merge `best_description`. See [Tuning description trigger rates](#tuning-description-trigger-rates). + +--- + +## Using within this repo + +When **morph-doc** is the workspace root, many agents already load **`skills//SKILL.md`** from the canonical tree — **symlinks are optional** in that case. + +Run **`npm run skill-ln`** (or `./scripts/morph-skill-ln`) when your tool only discovers skills under **`.cursor/skills`**, **`.claude/skills`**, **`.openclaw/skills`**, or **`.windsurf/skills`** inside the repo. Those paths are **mirrors** of `skills//`, not a second source of truth. Typical first-time setup on a fresh clone: link once if your editor expects the mirror paths. + +--- + +## Skill testing & improvement (skill-creator bridge) + +Morph-doc ships a bridge Skill and CLI so you do not hand-wire paths to upstream [Anthropic skill-creator](https://github.com/anthropics/skills/tree/main/skills/skill-creator): + +| Step | Command | +|------|---------| +| Install upstream into `vendor/skill-creator` | `npm run skill-creator:install` | +| Verify Python / path / optional `claude` CLI | `npm run skill-creator:check` | +| Static Morph guards for one Skill | `npm run skill-creator:validate -- ` | +| LLM trigger eval (`claude -p`, one shot) | `npm run skill-creator:run-eval -- ` | +| Description trigger optimization loop | `npm run skill-creator:desc-loop -- ` | + +Playbook: **[`skills/morph-skill-creator/SKILL.md`](./morph-skill-creator/SKILL.md)** · Agent: **[Morph Skill Creator Agent](/agents/morph-skill-creator-agent)** + +Behavioral evals (outputs + assertions + viewer) still follow the upstream skill-creator `SKILL.md`; add `skills//evals/evals.json` from `scripts/skill-behavior-evals.template.json`. + +## Tuning description trigger rates + +IDE routing depends mainly on the YAML **`description`** in `skills//SKILL.md` (plus `name`). After you have a trigger eval JSON, run **`npm run skill-creator:run-eval -- `** (one-shot LLM trigger test via upstream `run_eval.py`) or **`npm run skill-creator:desc-loop -- `** (iterative description optimization via `run_loop.py`) — see **Skill testing & improvement** above. Manual path: follow the **Description Optimization** section in the upstream **skill-creator** `SKILL.md`. + +**Prerequisites:** skill-creator installed (`npm run skill-creator:install` or user-level checkout); description loop requires the **Claude Code / `claude` CLI**. Without those, hand-edit `description` and run **`npm test`**. + +### 1. Trigger eval set (JSON) + +- Format: a JSON **array** of objects `{ "query": "...", "should_trigger": true|false }`. +- **Minimum 16 rows** for checked-in examples: at least **8** `should_trigger: true` and **8** `false` (`__tests__/skill-trigger-eval-examples.test.mjs`). **~20 rows** (roughly half positive, half near-miss negatives) is a good target — positives are real user prompts that *should* load this Skill; negatives share vocabulary but should route elsewhere (e.g. `morph-contracts` for address-only tables, `morph-tx-cost` for fee formula without SDK packages). +- Queries should be **concrete** (paths, chain IDs, error messages, package names); avoid toy prompts like "read a file" — models may not consult a Skill for trivial one-step tasks. +- **Example file** checked into this repo (copy and edit for another Skill id): `scripts/skill-trigger-evals.morph-js-sdk.example.json`. + +### 2. Run the loop (skill-creator) + +Steps 2–3 (optional HTML review, `python -m scripts.run_loop`, flags, and reports) live in **skill-creator** → **Description Optimization** — do not duplicate that CLI here; it changes with the upstream skill. + +When you run it against morph-doc, point: + +- **`--eval-set`** at `scripts/skill-trigger-evals..example.json` (copy from the `morph-js-sdk` example) +- **`--skill-path`** at `skills//` + +`--results-dir` is optional (see skill-creator). If you want reports under this clone, pick any writable path under **`.local/`** (e.g. `.local/skill-desc-opt`) — that folder is **not in git** (`.gitignore` ignores `.local/`) and is **created by the loop on first run**, so you will not see it until you actually run description optimization. + +Merge the loop’s **`best_description`** into the Skill below. + +### 3. Land changes in morph-doc + +1. Replace the `description:` field in `skills//SKILL.md` (keep `name` and directory aligned; do not paste the full Skill body into `description`). +2. Run **`npm test`**; fix `morph-doc-skill-inventory` if `description` no longer matches trigger-phrase heuristics. +3. If you changed **facts** or re-pointed canonical docs, update **`last_verified`** / **`verified_against`** per `VISION.md` and `CLAUDE.md`. + +--- + +## IDE discovery paths (in-repo mirrors) + +`morph-skill-ln` and `morph-agent-ln` write **project-local** symlinks under the **morph-doc repo root** — for example `/.cursor/skills/` → `/skills/`. They do **not** install into `~/.cursor/skills` or other user-home paths. + +### Using Morph skills from another repository + +To load Morph skills while a **different** folder is the workspace, symlink into that tool's **user-level** skills directory (paths vary by install; see each product's docs): + +```bash +MORPH_DOC_ROOT="/absolute/path/to/morph-doc" +SKILL_ID="morph-js-sdk" +mkdir -p "${HOME}/.cursor/skills" +ln -sfn "${MORPH_DOC_ROOT}/skills/${SKILL_ID}" "${HOME}/.cursor/skills/${SKILL_ID}" +``` + +Repeat for other tools (`~/.claude/skills`, etc.) as needed. Alternatively, open **morph-doc** as the workspace or include it in a multi-root setup. + +### One-click script `morph-skill-ln` + +Run from the **morph-doc repo root** (`npm run skill-ln` is equivalent). When no repo root is provided, the default is the parent directory of the script; you can also specify it with **`-r` / `--root`** or the environment variable **`MORPH_DOC_ROOT`** (priority: `-r` > `MORPH_DOC_ROOT` > default). + +**Selecting target agents**: use **`-a` / `--agent`** (repeatable). Built-in names **`cursor`**, **`claude`**, **`openclaw`**, **`windsurf`**, **`codex`** map to **`/.cursor/skills`**, **`.claude/skills`**, **`.openclaw/skills`**, **`.windsurf/skills`**, **`.codex/skills`** respectively (all pointing to `/skills/`). When no `--agent` is specified, defaults to **cursor + claude + openclaw + windsurf**. Other tools can be specified with a **repo-relative path** (must contain `/` or start with `.`), e.g. **`--agent .windsurf/skills`** is equivalent to built-in **`windsurf`**, or **`--agent mytool/skills`** for a custom directory under `/`. + +```bash +npm run skill-ln # batch; default root + four agents above +./scripts/morph-skill-ln morph-js-sdk # single skill id +./scripts/morph-skill-ln -a cursor -a claude # only link Cursor and Claude Code +./scripts/morph-skill-ln -r /path/to/morph-doc -a windsurf +./scripts/morph-skill-ln --agent .windsurf/skills --dry-run +./scripts/morph-skill-ln --dry-run # only print mkdir/ln, no writes +./scripts/morph-skill-ln --unlink -a cursor morph-js-sdk # remove symlink under .cursor/skills +./scripts/morph-skill-ln --unlink --dry-run # preview rm -f commands +``` + +To specify the path via environment variable: + +```bash +export MORPH_DOC_ROOT="/absolute/path/to/morph-doc" +npm run skill-ln +``` + +For equivalent manual commands and tool notes, see the next two sections; for behavior details and troubleshooting, see **`skills/morph-skill-ln/SKILL.md`**. + +### Manual Symlink Commands + +Replace `MORPH_DOC_ROOT` with the **absolute path** to this repo's root, and `SKILL_ID` with the directory name (must match `name` in `SKILL.md` frontmatter). + +**Single skill (using `morph-js-sdk` as an example, linking within the repo matching the script's default agents)** + +```bash +MORPH_DOC_ROOT="/path/to/morph-doc" +SKILL_ID="morph-js-sdk" +SKILL_DIR="${MORPH_DOC_ROOT}/skills/${SKILL_ID}" + +mkdir -p "${MORPH_DOC_ROOT}/.cursor/skills" "${MORPH_DOC_ROOT}/.claude/skills" \ + "${MORPH_DOC_ROOT}/.openclaw/skills" "${MORPH_DOC_ROOT}/.windsurf/skills" + +ln -sfn "${SKILL_DIR}" "${MORPH_DOC_ROOT}/.cursor/skills/${SKILL_ID}" +ln -sfn "${SKILL_DIR}" "${MORPH_DOC_ROOT}/.claude/skills/${SKILL_ID}" +ln -sfn "${SKILL_DIR}" "${MORPH_DOC_ROOT}/.openclaw/skills/${SKILL_ID}" +ln -sfn "${SKILL_DIR}" "${MORPH_DOC_ROOT}/.windsurf/skills/${SKILL_ID}" +``` + +**Batch: create symlinks for all `morph-*` skills in this repo** + +```bash +MORPH_DOC_ROOT="/path/to/morph-doc" + +mkdir -p "${MORPH_DOC_ROOT}/.cursor/skills" "${MORPH_DOC_ROOT}/.claude/skills" \ + "${MORPH_DOC_ROOT}/.openclaw/skills" "${MORPH_DOC_ROOT}/.windsurf/skills" + +for d in "${MORPH_DOC_ROOT}/skills"/morph-*/; do + [ -d "$d" ] || continue + id="$(basename "$d")" + [ -f "${d}SKILL.md" ] || continue + ln -sfn "${MORPH_DOC_ROOT}/skills/${id}" "${MORPH_DOC_ROOT}/.cursor/skills/${id}" + ln -sfn "${MORPH_DOC_ROOT}/skills/${id}" "${MORPH_DOC_ROOT}/.claude/skills/${id}" + ln -sfn "${MORPH_DOC_ROOT}/skills/${id}" "${MORPH_DOC_ROOT}/.openclaw/skills/${id}" + ln -sfn "${MORPH_DOC_ROOT}/skills/${id}" "${MORPH_DOC_ROOT}/.windsurf/skills/${id}" +done +``` + +Using `ln -sfn` updates an existing symlink target in-place. + +--- + +## Tool Notes (corresponding to `morph-skill-ln` built-in `--agent` values) + +| Tool | In-repo path (relative to morph-doc root) | Notes | +|------|------------------------------------------|-------| +| **Cursor** | `.cursor/skills//` | Corresponds to `-a cursor`. | +| **Claude Code** | `.claude/skills//` | Corresponds to `-a claude`. | +| **OpenClaw** | `.openclaw/skills//` | Corresponds to `-a openclaw`; workspace behavior follows OpenClaw docs. | +| **Windsurf (Cascade)** | `.windsurf/skills//` | Corresponds to `-a windsurf` or `-a .windsurf/skills` (official Cascade workspace skills path). | +| **Codex compatible** | `.codex/skills//` | Corresponds to `-a codex`. | + +Other directories can be added with **`--agent `** (must contain `/` or start with `.`). + +--- + +## Linking agents (sibling mechanism) + +Agent definitions (files under `agents/.md`, e.g. `morph-doc-agent`, `morph-dapp-agent`) are symlinked separately from skills, because they live as **single `.md` files** rather than directories, and they land in **`.cursor/agents/`** / **`.claude/agents/`** (not `…/skills/`). + +Use the parallel script `scripts/morph-agent-ln` (`npm run agent-ln`) — same flag surface as `morph-skill-ln`: + +```bash +npm run agent-ln # batch; default root + cursor/claude/openclaw/windsurf +./scripts/morph-agent-ln morph-dapp-agent # single agent name (with or without .md) +./scripts/morph-agent-ln -a cursor -a claude # only link Cursor and Claude Code +./scripts/morph-agent-ln --dry-run # only print mkdir/ln, no writes +./scripts/morph-agent-ln --unlink -a cursor morph-dapp-agent +``` + +Built-in `--agent` names map to repo-relative paths: + +| Tool | Agents path | +|------|------------| +| **Cursor** | `.cursor/agents/.md` | +| **Claude Code** | `.claude/agents/.md` | +| **OpenClaw** | `.openclaw/agents/.md` | +| **Windsurf** | `.windsurf/agents/.md` | +| **Codex compatible** | `.codex/agents/.md` | + +Skills and agents are linked independently — running only `morph-skill-ln` will not expose `agents/*.md` to your IDE, and vice versa. Typical first-time setup on a fresh clone: run **`npm run skill-ln`** and **`npm run agent-ln`** once if your editor expects the in-repo mirror paths. diff --git a/skills/morph-bridge/SKILL.md b/skills/morph-bridge/SKILL.md new file mode 100644 index 000000000..ca619dc8a --- /dev/null +++ b/skills/morph-bridge/SKILL.md @@ -0,0 +1,67 @@ +--- +name: morph-bridge +description: "Bridge ETH and ERC-20 tokens between Ethereum (L1) and Morph (L2): deposit via L1GatewayRouter, withdraw via L2 Gateway with finalization proof, and add custom tokens to the canonical bridge. Use when the user needs to bridge assets programmatically, finalize an L2→L1 withdrawal using proveAndRelayMessage, query L2 token addresses with getL2ERC20Address, or list their token on the Morph Bridge frontend." +last_verified: 2026-05-09 +verified_against: + - docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md +--- + +# Morph Bridge (Execution Playbook) + +> **Looking for cross-chain swap (Bulbaswap, 6 chains)?** This page covers the +> **native L1↔L2 bridge** (deposit / withdraw via the canonical gateway). +> For multi-chain swap with JWT order management, see +> [morph-skill · Bridge (cross-chain swap)](/skills/morph-skill/morph-bridge). + +## Authoritative Documentation (single source of truth) + +`docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md` + +Site route id: `build-on-morph/build-on-morph/bridge-between-morph-and-ethereum` + +Background concept: `docs/how-morph-works/general-protocol-design/2-communicate-between-morph-and-ethereum.md` + +SDK helper: `docs/build-on-morph/sdk/globals.md` + +## Execution Steps + +### Deposit (L1 → L2) + +1. Locate `L1GatewayRouter` address via `morph-contracts` skill (Mainnet chainId 2818 / Hoodi 2910). +2. Call `depositETH(uint256 amount, uint256 gasLimit)` (payable — ETH sent covers L2 fee; `0.00001 ETH` is typically enough) to deposit ETH. +3. For ERC-20: call `depositERC20(address token, uint256 amount, uint256 gasLimit)` — the router auto-selects `L1StandardERC20Gateway` or a custom gateway. Do **not** pre-select the gateway. +4. To get the L2 token address for an L1 token: call `getL2ERC20Address(address l1Token)` on `L1GatewayRouter`. +5. Wait for the Sequencer to pick up the L1 message and execute it on L2 (no extra user action needed). + +### Withdraw (L2 → L1) + +1. On L2, call `withdrawETH` or `withdrawERC20` on the L2 Gateway (payable — ETH covers L1 fee; `0.005 ETH` suggested). Assets are **burned** on Morph immediately; there is no recovery if the L1 tx reverts. +2. Wait for the batch containing the withdrawal to pass the challenge period and be finalized (`withdrawalRoots[batchDataStore[_batchIndex].withdrawalRoot] == true` in the `Rollup` contract). +3. Fetch proof data from the backend API: `GET /getProof?nonce=`. Response fields: `index`, `leaf`, `proof`, `root`. +4. Call `L1CrossDomainMessenger.proveAndRelayMessage(from, to, value, nonce, message, withdrawalProof[32], withdrawalRoot)`. + - `from / to / value / nonce / message` — from the L2 `SentMessage` event. + - `withdrawalProof / withdrawalRoot` — from the proof API response. + +### Add a custom token + +- **Quick (dev/test):** Use the bridge frontend at `https://bridge-hoodi.morph.network` → token selector → enter L1 contract → confirm L2 address. +- **Token list PR:** Raise a PR to `https://github.com/morph-l2/morph-list`. Include both L1 and L2 addresses. L2 address is obtained via the frontend flow above. See example PR in the doc. + +## Key Pitfalls + +- Withdrawal ETH is burned on L2 immediately — **irreversible** if L1 tx reverts. +- ERC-20 tokens have different addresses on L2; always use `getL2ERC20Address` to resolve. +- Do not send insufficient ETH for fees: deposit under-fee → tx not sent (excess refunded); withdrawal under-fee → same. + +## Related Skills + +- `morph-contracts` — L1GatewayRouter, L2 Gateway, L1CrossDomainMessenger addresses +- `morph-js-sdk` — SDK wrapper for bridge interactions + +## Self-Check + +- [ ] Deposit function is on `L1GatewayRouter` (L1 side), not on the specific gateway. +- [ ] Withdrawal finalization requires `proveAndRelayMessage` with Merkle proof from `/getProof` API. +- [ ] L2 token address resolved via `getL2ERC20Address`, not assumed equal to L1 address. +- [ ] ETH payable amounts quoted from doc (`0.00001` deposit / `0.005` withdrawal) — do not invent. +- [ ] Custom token listing requires both L1 + L2 addresses in the morph-list PR. diff --git a/skills/morph-contracts/SKILL.md b/skills/morph-contracts/SKILL.md new file mode 100644 index 000000000..881beb937 --- /dev/null +++ b/skills/morph-contracts/SKILL.md @@ -0,0 +1,134 @@ +--- +name: morph-contracts +description: "Morph network info and contract addresses for Mainnet (chainId 2818) and Hoodi Testnet (chainId 2910): RPC URLs, block explorers, L1/L2 bridge contracts, gateway routers, token addresses, predeploys, and the Morph Bridge mainnet token list (ERC-20 + gateways). Use when the user needs RPC endpoints, chain IDs, contract addresses, token addresses for Morph Mainnet or Hoodi Testnet, or bridge-listed token pairs between Ethereum and Morph." +last_verified: 2026-04-20 +verified_against: + - docs/build-on-morph/developer-resources/1-contracts.md + - ../morph-bridge/public/morph-list/src/mainnet/tokenList.json +--- + +# Morph Contract Addresses Reference (Execution Playbook) + +## Single Source of Truth + +- **General contracts (rollup, messengers, predeploys):** `docs/build-on-morph/developer-resources/1-contracts.md` +- **Bridge-listed tokens + per-token gateway addresses (Mainnet):** canonical JSON is maintained in the Morph Bridge app — see [Bridge token list (Mainnet)](#bridge-token-list-mainnet) below. The tables in this Skill mirror that file; if they disagree, **trust the JSON** in the repo path given there. + +## Network Info + +| Network | RPC URL | Chain ID | Explorer | +|---------|---------|----------|----------| +| Morph Mainnet | `https://rpc-quicknode.morph.network` | **2818** | `https://explorer.morph.network` | +| Morph Hoodi Testnet | `https://rpc-hoodi.morph.network` | **2910** | `https://explorer-hoodi.morph.network` | +| Ethereum Mainnet | `https://ethereum-rpc.publicnode.com` | 1 | `https://etherscan.io` | +| Ethereum Hoodi Testnet | `https://ethereum-hoodi-rpc.publicnode.com` | 560048 | `https://hoodi.etherscan.io` | + +## Mainnet Common Contracts + +### L2 Predeploys (Morph Mainnet) + +| Contract | Address | +|----------|---------| +| L2GatewayRouter | `0x5300000000000000000000000000000000000002` | +| L2CrossDomainMessenger | `0x5300000000000000000000000000000000000007` | +| L2ETHGateway | `0x5300000000000000000000000000000000000006` | +| L2ToL1MessagePasser | `0x5300000000000000000000000000000000000001` | +| GasPriceOracle | `0x530000000000000000000000000000000000000f` | +| L2WETH | `0x5300000000000000000000000000000000000011` | +| TokenRegistry (AltFee) | `0x5300000000000000000000000000000000000021` | +| EIP-8004 IdentityRegistry | `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432` | +| EIP-8004 ReputationRegistry | `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63` | + +### L1 Contracts (Ethereum Mainnet) + +| Contract | Address | +|----------|---------| +| L1GatewayRouter | `0x7497756ada7e656ae9f00781af49fc0fd08f8a8a` | +| L1CrossDomainMessenger | `0xdc71366effa760804dcfc3edf87fa2a6f1623304` | +| Rollup | `0x759894ced0e6af42c26668076ffa84d02e3cef60` | + +## Bridge token list (Mainnet) + +**Canonical file (same content the bridge UI uses):** `morph-bridge/public/morph-list/src/mainnet/tokenList.json` — from **morph-doc** at repo root use `../morph-bridge/public/morph-list/src/mainnet/tokenList.json` (sibling app in the monorepo). + +- **List metadata:** `timestamp` in JSON (e.g. `2025-07-31T16:00:00Z`); treat the JSON as the live list if this Skill’s tables drift. + +### Ethereum Mainnet (`chainId` 1) — bridge entries + +| Symbol | Display / note | Address | Decimals | `gatewayName` | `gatewayAddress` | +|--------|----------------|---------|----------|---------------|------------------| +| ETH | — | `0x0000000000000000000000000000000000000000` | 18 | L1ETHGateway | `0x1c1ffb5828c3a48b54e8910f1c75256a498ade68` | +| USDT | USDT(USDT0) | `0xdAC17F958D2ee523a2206206994597C13D831ec7` | 6 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| WBTC | — | `0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599` | 8 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| WETH | — | `0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2` | 18 | L1WETHGateway | `0x788890ba6f105cca373c4ff01055cd34de01877f` | +| LegacyUSDC | — | `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` | 6 | L1USDCGateway | `0x2C8314f5AADa5D7a9D32eeFebFc43aCCAbe1b289` | +| USDC | LayerZero path on L2 | `0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48` | 6 | L1USDCGateway | `0x2C8314f5AADa5D7a9D32eeFebFc43aCCAbe1b289` | +| DAI | — | `0x6B175474E89094C44Da98b954EedeAC495271d0F` | 18 | L1CustomERC20Gateway | `0xa534badd09b4c62b7b1c32c41df310aa17b52ef1` | +| BGB | `protocol`: ccip | `0x54D2252757e1672EEaD234D27B1270728fF90581` | 18 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| MX | — | `0x11eeF04c884E24d9B7B4760e7476D06ddF797f36` | 18 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| GT | — | `0xE66747a101bFF2dBA3697199DCcE5b743b454759` | 18 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| HTX | — | `0x61ec85ab89377db65762e234c946b5c25a56e99e` | 18 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| HT | — | `0x6f259637dcd74c767781e37bc6133cd6a68aa161` | 18 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| BGBTC | — | `0x0520930f21b14cafac7a27b102487bee7138a017` | 8 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | +| OMZ | — | `0xd7D9BaBf56A66dAFF2aC5dc96F7e886c05124676` | 18 | L1StandardERC20Gateway | `0x44c28f61a5c2dd24fc71d7df8e85e18af4ab2bd8` | + +### Morph Mainnet (`chainId` 2818) — bridge entries + +| Symbol | `displaySymbol` / note | Name | Address | Decimals | `protocol` | `gatewayName` | `gatewayAddress` | +|--------|-------------------------|------|---------|----------|--------------|---------------|------------------| +| ETH | — | Ethereum Token | `0x0000000000000000000000000000000000000000` | 18 | — | L2ETHGateway | `0x5300000000000000000000000000000000000006` | +| USDT | USDT.e | Tether Morph Bridged | `0xc7D67A9cBB121b3b0b9c053DD9f469523243379A` | 6 | native | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| USDT | USDT (USDT0) | Tether USD | `0xe7cd86e13AC4309349F30B3435a9d337750fC82D` | 6 | layerzero | *(empty in JSON)* | *(empty in JSON)* | +| WBTC | — | Wrapped Bitcoin | `0x803DcE4D3f4Ae2e17AF6C51343040dEe320C149D` | 8 | — | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| WETH | — | WETH | `0x5300000000000000000000000000000000000011` | 18 | — | L2WETHGateway | `0x5300000000000000000000000000000000000010` | +| LegacyUSDC | — | LegacyUSDC | `0x1199E23C0baE9710cCd9F645FA57794e5D469D06` | 6 | — | L2USDCGateway | `0x5300000000000000000000000000000000000020` | +| USDC | USDC.e | USDC Morph Bridged | `0xe34c91815d7fc18A9e2148bcD4241d0a5848b693` | 6 | native | L2USDCGateway | `0xc5e44E2fFe9523809146eD17D62bb382ECCf426B` | +| USDC | USDC | USDC | `0xCfb1186F4e93D60E60a8bDd997427D1F33bc372B` | 6 | layerzero | *(empty in JSON)* | *(empty in JSON)* | +| DAI | — | Dai | `0xef8A24599229D002B28bA2F5C0eBdD3c0EFFbed4` | 18 | — | L2CustomERC20Gateway | `0x5300000000000000000000000000000000000016` | +| BGB | BGB(old) | BitgetToken | `0x55d1f1879969bdbB9960d269974564C58DBc3238` | 18 | native | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| BGB | — | BitgetToken | `0x389C08Bc23A7317000a1FD76c7c5B0cb0b4640b5` | 18 | ccip | *(empty in JSON)* | *(empty in JSON)* | +| MX | — | MX Token | `0x0BEeF4B01281D85492713a015d51fEc5b6D14687` | 18 | — | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| GT | — | GateChainToken | `0x37d9A4d0b8B920CB2502dE3cA11c2227F4ADAcE9` | 18 | — | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| HTX | — | HTX | `0xD4eA4A71815D6999D1e28658f6E2d514BB356fA1` | 18 | — | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| HT | — | HuobiToken | `0x18e6C1Fdf768B25778eAA4Bf4f4c66c27c5128f6` | 18 | — | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| BGBTC | — | Bitget Wrapped BTC | `0x34951712c39d6284eC1afF60798C2E01E7cfB8eF` | 8 | — | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | +| OMZ | — | Open Meta City | `0xAA4353dA53DE0202119b5315109130D8E4aCDe17` | 18 | — | L2StandardERC20Gateway | `0x5300000000000000000000000000000000000008` | + +> **Dual USDT / USDC / BGB variants:** the list above matches `tokenList.json`. **USDT** has bridged **USDT.e**, native **USDT0-style** USDT, and L1 USDT for deposits. **USDC** has **LegacyUSDC**, bridged **USDC.e**, and LayerZero **USDC** on L2. **BGB** has an older bridged **BGB(old)** and the current **ccip** BGB — confirm with the user which symbol/version they need. + +## AltFee Token ID Mapping + +| ID | Token | +|----|-------| +| 1 | USDT.e | +| 2 | USDC.e | +| 3 | BGB (old) | +| 4 | BGB | +| 5 | USDT | +| 6 | USDC | + +## Hoodi Testnet Contracts + +Hoodi contract addresses are in the Hoodi section of `1-contracts.md`. Common test token: L2USDC = `0x1178341838B764dCfFA5BCEAb1d41443Fd71a227` + +## Python CLI Runtime Overrides + +```bash +export MORPH_RPC_URL="https://rpc-hoodi.morph.network" +export MORPH_CHAIN_ID=2910 +export MORPH_IDENTITY_REGISTRY="0x8004A818BFB912233c491871b3d84c89A494BD9e" +export MORPH_REPUTATION_REGISTRY="0x8004B663056A597Dffe9eCcC1965A193B7388713" +``` + +## Related Skills + +- `morph-bridge` — L1↔L2 native bridge deposit/withdraw flows +- `morph-js-sdk` — client adapters and chain presets +- `morph-tx-cost` — L2 + L1 fee estimation and RPC errors + +## Self-Check + +- [ ] Are general contract addresses deferred to `1-contracts.md` as the authoritative source? +- [ ] For bridge tokens and gateways, is **`tokenList.json`** named as the canonical list if tables might be incomplete? +- [ ] Is the user prompted to confirm which USDT / USDC / BGB version they need? +- [ ] Are Hoodi and Mainnet addresses clearly distinguished? diff --git a/skills/morph-dapp-code-review/SKILL.md b/skills/morph-dapp-code-review/SKILL.md new file mode 100644 index 000000000..9895e9de4 --- /dev/null +++ b/skills/morph-dapp-code-review/SKILL.md @@ -0,0 +1,162 @@ +--- +name: morph-dapp-code-review +description: "Morph dApp code review: review Solidity, JS SDK, and frontend diffs across four dimensions — Security / Performance / Code Quality / Planning compliance — with Morph-specific checks (Alt Fee fields, predeployed contract addresses, chainId, L1 data fee). Use when the user wants to review a Morph-related diff or PR, asks for security/perf/quality feedback, or wants to verify implementation against a planning document. Trigger when reviewing Morph dApp changes, requesting multi-dimension feedback, or aligning implementation with planning output. Not for generating implementation (see morph-dapp-codegen)." +last_verified: 2026-04-23 +verified_against: + - docs/build-on-morph/sdk/js-sdk.mdx + - docs/build-on-morph/developer-resources/1-contracts.md + - docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md + - skills/morph-js-sdk/SKILL.md + - skills/morph-contracts/SKILL.md + - skills/morph-tx-cost/SKILL.md +--- + +# Morph dApp Code Review + +Review a Morph-related change set (diff / PR / working tree) across 4 dimensions and +add Morph-specific risk checks. **Read-only — never modify code in this skill.** + +## When to use + +- The user supplies a PR link, a commit range, or wants the current working tree + `git diff` reviewed. +- The user asks for **per-dimension** feedback (security / performance / quality / + planning compliance). +- The change touches Morph contracts, the JS SDK, L1↔L2 bridge flows, or Alt Fee + paths. + +## Input identification + +When no explicit base is given, fall back in this order: + +1. User-provided `--base --head ` → `git diff ...` +2. Current branch vs `origin/main` / `main`: `git diff origin/main...HEAD` +3. No comparable base → `git diff` + `git status` of the working tree + +Stack identification: + +| File signal | Dimension to apply | +|---|---| +| `*.sol` + `foundry.toml` / `hardhat.config.*` | Solidity dimension | +| `*.ts/*.js` + `package.json` containing `viem` / `ethers` / `@morph-network/*` | JS SDK dimension | +| `*.tsx/*.jsx` + Next.js / React deps | Frontend dimension | +| `*.md/*.mdx` + `skills/` / `docs/` | Doc/skill dimension (apply `morph-doc-agent` lens) | + +## Dimension Checklist + +Each dimension lists generic checks first, then Morph-specific checks. Tag each +finding **P0 (must fix, blocks merge) / P1 (recommended) / P2 (optional)**. + +### 1. Security + +Generic: +- Unvalidated external input; SQL/command injection; unsafe deserialization +- Private keys / mnemonics / API keys written into code or logs +- Insecure randomness (`Math.random` for keys) +- Reentrancy, integer overflow, `tx.origin` auth (Solidity) +- `delegatecall` to untrusted addresses (Solidity) + +Morph-specific: +- Are **predeployed contract addresses** sourced from + `docs/build-on-morph/developer-resources/1-contracts.md`, not copied from a public + block explorer? +- Do **L1↔L2 bridge flows** handle message receipts and replay protection? +- Do **Alt Fee** calls verify that `feeTokenID` actually exists in the Token Registry? +- Mainnet (chainId `2818`) and Hoodi (`2910`) confused → wrong-chain risk + +### 2. Performance + +Generic: +- Algorithmic complexity, N+1 calls, network IO inside loops +- Large objects never released; long-lived closures holding big buffers +- Frontend: missing code-splitting / lazy loading; gratuitous re-renders + +Morph-specific: +- Repeated `eth_gasPrice` / `GasPriceOracle.getL1Fee` per transaction — should be + batched or cached +- Bridge flows polling without backoff — risk of hammering RPC + +### 3. Code Quality + +Generic: +- Confusing names, long functions, magic numbers +- Swallowed errors (`catch (_) {}`), error messages without context +- `any` overuse, unused/missing exports +- Test quality: weak assertions, no error branches, no edge cases + +Morph-specific: +- Hard-coded `chainId: 2818` literals or RPC URLs instead of importing chain objects + from `@morph-network/chain` / `@morph-network/viem` +- Alt Fee fields injected into a non-Alt-Fee path, or vice versa +- Real keys / mnemonics shown in plain example code + +### 4. Planning compliance + +Run only when the user provides a planning document path or there is a `planning/.md` +in-repo: + +- Are planning `Goals` covered by the code? (mark each COVERED / MISSING / DEVIATED) +- Are planning `Test Cases` represented in the test files? +- Did the change add unauthorized files outside `Target Files`? +- Can each item in the planning document's `Self-Check` be backed by code evidence? +- Are 🔴 items in `Open Questions` still unresolved? (still unresolved → P0) + +## Execution Steps + +1. **Collect the diff**: pick the diff per "Input identification". Count files and + lines; if it exceeds ~5000 lines, ask the user to chunk it — do not stuff context. +2. **Identify stack and planning presence**: decide which dimensions apply. +3. **Walk each dimension**: for every hit, record `file:line` + short description + + severity + suggestion. +4. **Cross-dimension dedup**: collapse same `file + function` findings into the + highest-severity entry. +5. **Emit the report** (format below). +6. **Never run `git commit` or `git push` from this skill** — stay read-only. + +## Output Format + +```markdown +# Morph dApp Code Review + +## Summary +- Scope: → , N files / M lines diffed +- Stack: +- Planning compared: +- Findings: P0×X / P1×Y / P2×Z + +## P0 (blocking) +- [security] file:line — description — suggestion +- ... + +## P1 (recommended) +- ... + +## P2 (optional) +- ... + +## Per-Dimension +### Security +### Performance +### Code Quality +### Planning compliance +- Goal coverage table +- Uncovered test cases +``` + +## Self-Check + +- Does every finding cite `file:line` and a one-line fix suggestion? +- Did Morph-specific items (Alt Fee / chainId / predeployed addresses / L1 fee) all + get walked? +- When no planning document exists, is "planning compliance not run" stated honestly? +- Is the P0 count proportional to the change size (avoid both under-reviewing and + false-positive piling)? +- Was the run kept fully read-only (no writes to the repo)? + +## Related Skills + +- `morph-dapp-planning`: source document for the planning-compliance dimension +- `morph-dapp-codegen`: implementation stage — review feedback feeds back into its + Phase 2 +- `morph-js-sdk` / `morph-contracts` / `morph-tx-cost`: fact-tables backing the + dimension checks diff --git a/skills/morph-dapp-codegen/SKILL.md b/skills/morph-dapp-codegen/SKILL.md new file mode 100644 index 000000000..ae90e9f5a --- /dev/null +++ b/skills/morph-dapp-codegen/SKILL.md @@ -0,0 +1,120 @@ +--- +name: morph-dapp-codegen +description: "Morph dApp TDD codegen: take a planning document produced by morph-dapp-planning, write failing tests first, then implementation, looping tests + lint to green for Solidity / JS SDK / frontend code. Use ONLY when planning/.md already exists on disk — never use this skill for a fresh requirement that has no planning document yet (run morph-dapp-planning or morph-dapp-workflow first). Use when the user has an approved planning file and wants to run the Red→Green loop, land code against it, or backfill tests." +last_verified: 2026-05-27 +verified_against: + - docs/build-on-morph/sdk/js-sdk.mdx + - docs/about-morph/10-altfeetx.md + - docs/build-on-morph/developer-resources/1-contracts.md + - skills/morph-js-sdk/SKILL.md + - skills/morph-contracts/SKILL.md + - skills/morph-tx-cost/SKILL.md +--- + +# Morph dApp TDD Codegen + +Land code against an approved planning document (from `morph-dapp-planning`). The flow is +deliberately minimal: **write tests → see them fail → write impl → see them pass → +run the full suite → wrap up**. + +## When to use + +- A planning file already exists (default: `planning/.md`). +- The work touches Morph contracts (Solidity / Hardhat / Foundry), the Morph JS SDK + (viem / ethers / ethers v5), or components in the Morph doc site. + +## Prerequisites + +1. Read the planning document path and pull out `Target Files`, `Test Cases`, `Morph Constraints`, + and `Self-Check`. +2. Confirm the toolchain for the target stack is ready: + - **Solidity**: `forge --version` or `npx hardhat --version` + - **JS/TS**: `node -v`, an `npm test` entry point exists + - **In-repo morph-doc changes**: confirm `npm test` runs at the repo root +3. Clean working tree: `git status`. Commit or stash uncommitted changes so you can + roll back. +4. Single stack per run: if the planning document spans multiple stacks, split the work into + separate runs — never mix stacks in one commit. + +## Execution Steps + +### Phase 1 — Red: write failing tests first + +1. Write at least one test function per Test Case in the planning document. +2. Cover: edge cases, error branches, and mocks/stubs for external dependencies (RPC / + contract calls). +3. The build/parse step must pass: + - Solidity: `forge build` or `npx hardhat compile` + - TS: `tsc --noEmit` (or the project's existing script, e.g. `npm run build` / + `npm run typecheck`) +4. Run tests and confirm **at least one case fails** (incremental refactors may stay + green, but the output must explicitly call this out): + - Solidity: `forge test` / `npx hardhat test` + - JS/TS: `npm test` (the morph-doc project goes through + `node scripts/run-tests.mjs`; new test files must be registered in `TEST_FILES`) +5. Stage the failing tests (`git add …`). **Do not `git commit` by default** — obtain + explicit user approval first (e.g. they say to commit, or they enable an explicit + "allow autocommit" convention for this run). This matches Phase 3: no auto-commit + unless the user explicitly asks. + +### Phase 2 — Green: write the implementation + +1. Touch only the impl files listed under `Target Files` in the planning document. Do not edit the + tests on the side. +2. Strictly honor the planning document's **Morph Constraints**: + - **Alt Fee paths** must pass `feeTokenID` for token gas; `feeLimit` is optional (pass when you need an explicit cap); non-Alt-Fee + paths must NOT carry those fields. + - **chainId / RPC** are never hard-coded — use chain objects exported by + `@morph-network/chain` or `@morph-network/viem`. When both exist, pick the one + the planning document calls for. + - **Predeployed contract addresses** come only from + `docs/build-on-morph/developer-resources/1-contracts.md` or + `skills/morph-contracts`. + - **Total gas estimates** shown to users must include the L1 data fee + (`GasPriceOracle.getL1Fee`). +3. Iterate until the suite is green. On failure → fix the code (not the tests) → + re-run. +4. Cap the inner loop at 5 retries. Still failing → stop and hand the failing stack + trace back to the user. + +### Phase 3 — Wrap up + +1. Run static checks for the area: + - Solidity: `forge fmt --check` or the project's lint + - JS/TS: `npm run lint` (if defined) + - In the morph-doc repo: `npm test` (covers skill / sidebar / pairing guards) +2. Walk the planning document's tail `Self-Check` list and tick each item ✅ or document why it is + not covered. +3. Output a change summary in the chat (do NOT bake it into code comments): + - Files changed + - Tests added / updated + - Diffs from the planning document, if any +4. **Do not auto-commit in any phase** (including Red) unless the user explicitly asks. + +## Morph-specific codegen checklist + +Walk this list before handing off; any unchecked item → self-correct first: + +- [ ] Transaction signing goes through Morph adapters (`MorphSigner` / + `@morph-network/viem`); do not hand-assemble Alt Fee fields with raw viem/ethers. +- [ ] RPC mocks in tests are decoupled from production RPC URLs; no private keys or + mnemonics are written into test files. +- [ ] Every `"Mainnet"` / `"Hoodi"` literal carries a paired chainId or chain object + reference. +- [ ] Any new env var introduced is documented in the example `.env` or README; **no + real secrets are written to disk**. + +## Self-Check + +- Were tests written and seen to fail before the implementation existed (Red→Green)? +- Does each Test Case in the planning document map to a concrete test function? +- Are all Morph-specific values (`feeTokenID` / `feeLimit` / chainId / contract + addresses) traceable to an authoritative source? +- Are added/changed files limited to the planning document's `Target Files` and the matching tests? +- Did `npm test` / `forge test` go fully green at the project root? + +## Related Skills + +- `morph-dapp-planning`: upstream — produces the planning document +- `morph-dapp-code-review`: downstream — review stage after coding +- `morph-js-sdk` / `morph-contracts` / `morph-tx-cost`: domain fact-tables diff --git a/skills/morph-dapp-planning/SKILL.md b/skills/morph-dapp-planning/SKILL.md new file mode 100644 index 000000000..25ce22dbc --- /dev/null +++ b/skills/morph-dapp-planning/SKILL.md @@ -0,0 +1,155 @@ +--- +name: morph-dapp-planning +description: "Morph dApp planning: turn a product requirement (optionally + API doc + Figma URL) into a testable Morph dApp planning document covering Goals, Test Cases, Target Files, and Morph chain/contract/SDK constraints. Use when the user provides a Morph product requirement, feature description, API doc, or Figma link and wants to draft or revise planning output before coding. Trigger on requests to break a requirement into a buildable plan, planning work, or to align product inputs × API × Figma. Not for generating implementation code (see morph-dapp-codegen)." +last_verified: 2026-05-14 +verified_against: + - docs/build-on-morph/sdk/js-sdk.mdx + - docs/build-on-morph/developer-resources/1-contracts.md + - docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md + - skills/morph-js-sdk/SKILL.md + - skills/morph-contracts/SKILL.md + - skills/morph-tx-cost/SKILL.md +--- + +# Morph dApp Planning + +Turn a single requirement (a written product brief, a verbal description, or product +brief + API + Figma bundle) into a **planning document** that downstream development and +review skills can consume. +Default output file: `/planning/.md`. + +## When to use + +- The user described a new feature or iteration but has no planning document yet. +- The user provided product brief / API doc / Figma links together and wants to align + all three before coding. +- An existing planning document needs an incremental update due to a requirement change. + +Do **not** use this skill to produce implementation code — hand off to +`morph-dapp-codegen`. + +## Prerequisites (minimum info to gather) + +Before writing, confirm the items below. If anything is missing, ask the user **once** in +a single AskQuestion round — do not guess as you write: + +- **Target network**: Mainnet (chainId `2818`) / Hoodi Testnet (`2910`) / both. +- **Tech stack**: contracts (Solidity / Hardhat / Foundry) / JS SDK (viem / ethers v6 / + ethers v5) / frontend (React / Next.js) / node operations. +- **Alt Fee involvement**: yes → the planning document must explicitly state how + `feeTokenID` is chosen (Token Registry) and, if the product sets one, how `feeLimit` is sourced (optional at protocol level; set for an explicit user cap in-app). +- **Product × API × Figma cross-check needed**: when the user only supplies a single + written brief, skip Stage 2 and just do single-source extraction. + +## Execution Steps + +### 1. Extract from all inputs in parallel (only when multiple inputs are provided) + +Process inputs in parallel, not sequentially. File each into a draft using the structure +below: + +- **Product brief**: module → fields (source: API / i18n / hard-coded) → interactions → + empty/error states → open questions +- **API doc**: endpoint URL/method/auth → request params → full response field tree → + server-side defaults +- **Figma**: module → UI elements → dynamic-content mapping → visual specs (color tokens, + font sizes, spacing, radii) → state frames (default / loading / empty / error) + +For Figma, prefer the Figma MCP (`get_design_context` + `get_screenshot`); without MCP, +ask the user for key screenshots. + +### 2. Cross-check the three sources, output a contradiction list + +Run only when ≥2 inputs exist. Tag every finding with a severity: + +- 🔴 **Blocker**: clear contradiction or critical missing info — must be resolved before + coding +- 🟡 **Needs confirmation**: ambiguity or inconsistency — needs sign-off from product / + design / backend +- ✅ **Aligned**: ready to flow into Goals + +Walk through three pairwise comparisons (source, field name, count, copy, navigation +target, empty/error state, etc.) and aggregate findings into a Markdown table: +`finding type | severity | description | suggested action`. + +### 3. Generate the planning document body + +Default file path: `planning/.md` (feature-id in lowercase-kebab-case). +Minimum sections: + +```markdown +# Planning + +## Context +- Source: +- Target network: mainnet | hoodi | both (chainId 2818 / 2910) +- Stacks involved: contracts | js-sdk | frontend | node +- Alt Fee involved: yes | no + +## Goals +- G1: +- G2: ... + +## Non-Goals +- Items explicitly out of scope this round + +## Test Cases +- T1: +- T2: ... +(Each Goal must map to at least one test case; include error branches.) + +## Technical Approach +- Module breakdown, dependencies, key classes/functions +- Morph-specific constraints (see Morph Constraints below) + +## Target Files +- impl: — if the file does not exist yet, append **`(new in Stage 2)`** (or an explicit *will be created in Stage 2* note on the same line) +- test: — same rule + +## Morph Constraints +- Chain / RPC: presets from morph-network/chain; do not hard-code chainId / RPC +- Contract addresses: take from docs/build-on-morph/developer-resources/1-contracts.md; + never copy from a public block explorer +- Alt Fee: tx type 0x7f, must pass `feeTokenID` for token gas; `feeLimit` optional; non-Alt-Fee paths + must NOT include those fields +- L1 data fee: user-visible total gas estimate = L2 EIP-1559 + L1 data fee + (GasPriceOracle.getL1Fee) + +## Open Questions +- Repeat 🔴 / 🟡 items from Stage 2 verbatim, each with an owner + +## References +- docs/... +- Sibling skills: morph-js-sdk / morph-contracts / morph-tx-cost +``` + +### 4. Author the planning document Self-Check (last section) + +Append the checklist below as the document's final `## Self-Check` so downstream skills +have verifiable anchors: + +- [ ] Every Goal maps to at least one Test Case +- [ ] Test Cases cover at least one error branch +- [ ] Each `Target Files` impl/test pair lists concrete relative paths that **either** exist on disk now **or** are explicitly marked for greenfield work (e.g. **`(new in Stage 2)`** on the line, or an explicit *will be created in Stage 2* note) +- [ ] If Alt Fee is involved, the planning document states the source of `feeTokenID` + (and of `feeLimit` if the product uses an explicit cap) +- [ ] Any contract address, chainId, or RPC mentioned cites an in-repo authoritative + docs path — no copy from external sources +- [ ] Every 🔴 in Open Questions has an explicit owner; otherwise the planning document is + not allowed to advance to the next stage + +## Self-Check (run immediately after writing) + +- Does the output path follow the `planning/.md` convention? +- Are the trigger scenarios in `description` actually reflected in the planning body? +- Was the contradiction list delivered separately (not mixed into the planning body)? +- Do all referenced docs paths actually exist in the repo? + +## Related Skills + +- `morph-js-sdk`: authoritative SDK fields and Alt Fee usage +- `morph-contracts`: predeployed contract address table +- `morph-tx-cost`: L1 + L2 fee math +- `morph-dapp-codegen`: consumes this planning document for TDD implementation +- `morph-dapp-code-review`: uses the same document as the planning-compliance dimension's + source of truth diff --git a/skills/morph-dapp-workflow/SKILL.md b/skills/morph-dapp-workflow/SKILL.md new file mode 100644 index 000000000..b589416db --- /dev/null +++ b/skills/morph-dapp-workflow/SKILL.md @@ -0,0 +1,142 @@ +--- +name: morph-dapp-workflow +description: "Morph dApp end-to-end workflow SKILL (stage orchestrator): chain planning → TDD implementation → multi-dimension review for Morph contract / JS SDK / frontend changes. Use when the user explicitly invokes this workflow skill to run staged gates from idea to merge-ready code. For IDE agent routing, wrap-up artifacts, and single-step dispatch, prefer morph-dapp-agent. For atomic tasks (planning-only, codegen-only, review-only), call the matching child skill directly instead of this workflow." +last_verified: 2026-05-19 +verified_against: + - skills/morph-dapp-planning/SKILL.md + - skills/morph-dapp-codegen/SKILL.md + - skills/morph-dapp-code-review/SKILL.md +metadata: + orchestrates: + - morph-dapp-planning + - morph-dapp-codegen + - morph-dapp-code-review +--- + +# Morph dApp End-to-End Workflow + +Run a Morph requirement through three phases: **Planning → Code → Review**. Each phase +hands off to the corresponding child skill's full flow — never copy that content into +this file. + +## When to use + +- The user brings a complete requirement (written brief / Figma / spoken description) and wants + it driven all the way to mergeable code in one go. +- A previous phase already produced output (e.g. a planning document exists) and the user wants to + resume from a middle stage. + +Do **not** use for atomic operations — call the matching child skill directly. + +## Prerequisites + +Confirm the following child skills are loadable in the current IDE / tool (inside the +morph-doc repo, you can read `skills//SKILL.md` directly): + +- `morph-dapp-planning` +- `morph-dapp-codegen` +- `morph-dapp-code-review` + +Any missing → stop and point the user at `skills/README.md` to symlink via +`scripts/morph-skill-ln`. + +## Execution Steps + +> **One stage per turn.** Complete the current stage, surface its output to the user, +> then **stop and wait for explicit user confirmation** before advancing. Never chain +> stages in a single reply. + +### Step 0 — Record review baseline (fresh run) + +At the **start** of a new workflow run (before Stage 1 edits), in a git checkout: + +1. Run `git status` and surface any unexpected dirty state to the user. +2. Record `WORKFLOW_REVIEW_BASE=$(git rev-parse HEAD)` and tell the user the SHA in one line + (this is the diff base for Stage 3). +3. If not a git repo or `git rev-parse` fails, note that Stage 3 will use + `morph-dapp-code-review`'s built-in fallbacks (`origin/main...HEAD`, then working tree). + +When **resuming** mid-pipeline, confirm with the user whether to keep the original +`WORKFLOW_REVIEW_BASE` or re-record after `git pull`. + +### Stage 1 — Planning + +1. Read `skills/morph-dapp-planning/SKILL.md` and execute its full flow verbatim. +2. Write `planning/.md` to disk (Goals / Test Cases / Target Files / + Morph Constraints / Open Questions / Self-Check). +3. **Output to user**: paste the full planning document path and its contents. +4. **Hard stop — mandatory user confirmation gate**: + - Display: `"Stage 1 complete. Review the planning document above. Reply 'proceed' to advance to Stage 2, or give feedback to revise."` + - Do **not** write any code, do not enter Stage 2, do not read `morph-dapp-codegen`. + - Even if the user previously said "run the full pipeline", stop here. The confirmation is required every time. +5. **Before advancing**: verify `planning/.md` exists on disk AND every 🔴 in Open Questions is resolved or explicitly accepted by the user (recorded inline in the document). If either check fails, refuse to proceed. + +### Stage 2 — Code + +1. Read `skills/morph-dapp-codegen/SKILL.md` and execute its full flow verbatim, passing the Stage 1 planning document path. +2. Complete Red → Green → wrap-up; the project's root scripts must pass + (`npm test` / `forge test` / `tsc --noEmit` as applicable). +3. **Output to user**: list every changed file and the final test run output. +4. **Hard stop — mandatory user confirmation gate**: + - Display: `"Stage 2 complete. All tests pass. Reply 'proceed' to advance to Stage 3 (Review), or give feedback to fix."` + - Do **not** enter Stage 3 until the user replies. +5. **Before advancing**: all tests green, no lint errors. On failure → stop, return the failing stack trace to the user, do not enter Stage 3. + +### Stage 3 — Review + +1. Read `skills/morph-dapp-code-review/SKILL.md` and execute its full flow verbatim. Pass + `WORKFLOW_REVIEW_BASE` from Step 0 as the review base (`git diff + $WORKFLOW_REVIEW_BASE...HEAD` or equivalent). If Step 0 was skipped or the variable is + unset, follow that skill's **Input identification** fallbacks in order. +2. Pass the Stage 1 planning document path so the planning-compliance dimension is enabled. +3. **Output to user**: emit the full review report inline. +4. Proceed directly to Stage 4 (no user gate needed between Review and Wrap-up). + +### Stage 4 — Wrap-up (handled inside this workflow, not delegated) + +1. Aggregate outputs from all three stages (planning document path, changed-file list, review + report). +2. List blockers (review P0 + still-open 🔴 from the planning document). No blockers → tell the + user they may proceed to commit/PR. Blockers exist → recommend the inner loop + "back to Stage 2 to fix P0 → rerun Stage 3"; **never auto commit / push**. + +## State and Recovery + +Simple rule: each stage's output file IS the state. When resuming, **always confirm the +feature-id with the user first** — do not infer it from whatever planning file happens to +exist on disk. + +**Planning artifacts (`planning/`):** `planning/.md` is local workflow state. +The repo `.gitignore` excludes `planning/` by default — commit a planning doc only when the +team wants it in a PR; otherwise keep it locally or attach it to the ticket. + +| Existing artifact | Inferred phase | Suggested entry | +|---|---|---| +| Only a requirement description | Fresh start | Stage 1 | +| `planning/.md` exists **and user confirms it is complete** | Planning done | Stage 2 | +| Planning doc + associated impl/tests landed **and user confirms tests are green** | Code done | Stage 3 | +| All of the above and the code was changed again | Needs re-review | Stage 3 | + +Even when resuming from Stage 2 or 3, the per-stage user confirmation gate (step 4 in +each stage) still applies before the next stage starts. + +No manifest file, no lock. For multi-person collaboration, ask the user to `git pull` +before starting. + +## Self-Check + +- Did each of the three stages "hand off to the child skill" rather than inline its + content? +- Was a gate check performed before each transition? +- Does the final output include all three: the planning document path, the changed-file list, and + the review report? +- Was auto-commit / auto-push avoided? +- Was `WORKFLOW_REVIEW_BASE` recorded at Step 0 (or a fallback documented for Stage 3)? + +## Related Skills + +- `morph-dapp-agent`: IDE agent entry — routes to this workflow or atomic child skills +- `morph-dapp-planning` / `morph-dapp-codegen` / `morph-dapp-code-review`: the three + atomic flows orchestrated by this workflow +- `morph-js-sdk` / `morph-contracts` / `morph-tx-cost`: Morph domain fact-tables, + invoked on demand from inside the child skills diff --git a/skills/morph-full-node-run-in-docker/SKILL.md b/skills/morph-full-node-run-in-docker/SKILL.md new file mode 100644 index 000000000..4183cf618 --- /dev/null +++ b/skills/morph-full-node-run-in-docker/SKILL.md @@ -0,0 +1,39 @@ +--- +name: morph-full-node-run-in-docker +description: Guides running a Morph full node via run-morph-node (Docker or binary), hardware requirements, snapshot sync, and startup. Use when the user asks to run a Morph full node (Docker or bare metal), sync from snapshot, or troubleshoot node setup. Canonical human-readable documentation lives in the morph-doc repository path below. +last_verified: 2026-04-28 +verified_against: + - docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md +--- + +# Morph Full Node (Docker or Binary via run-morph-node) + +## Authoritative Documentation (single source of truth) + +Primary guide (covers both Docker and binary with tabs): + +`docs/build-on-morph/developer-resources/node-operation/full-node/1-run-in-docker.md` + +(Site route id: `build-on-morph/developer-resources/node-operation/full-node/run-in-docker`) + +## Agent Working Method (skill = execution playbook) + +1. **Existing zkTrie node?** → Direct user to the zkTrie → MPT migration guide at `docs/build-on-morph/developer-resources/node-operation/upgrade-node/0-zktrie-to-mpt-migration.md` instead of a fresh install. +2. Confirm target network (mainnet / Hoodi) and deployment method (Docker recommended; binary if Docker unavailable). +3. Check hardware: 4+ CPU cores, 32 GB RAM, 1 TB SSD, 25+ Mbit/s download. +4. Clone `run-morph-node` (with `--recurse-submodules` for binary); `cd run-morph-node/morph-node`. +5. Set `L1_ETH_RPC` and `L1_BEACON_CHAIN_RPC` in `.env` (mainnet) or `.env_hoodi` (Hoodi). +6. Optionally select a snapshot version by updating `MAINNET_MPT_SNAPSHOT_NAME` / `HOODI_MPT_SNAPSHOT_NAME` in the env file. +7. Download and decompress snapshot: `make download-and-decompress-mainnet-snapshot` (or hoodi variant); move `geth-data` and `node-data` into place per the doc. +8. Start the node: + - Docker mainnet: `make run-node` / Docker Hoodi: `make run-hoodi-node` + - Binary mainnet: `make run-node-binary` / Binary Hoodi: `make run-hoodi-node-binary` + - Stop: `make stop-node` (Docker) or `make stop-binary` (binary) +9. Verify: `curl localhost:8545` for geth peers; `curl localhost:26657/status` — synced when `catching_up` is `false`. + +Do not fabricate snapshot names, make targets, or URLs not present in the doc; open the primary doc to verify when in doubt. + +## Related Skills + +- `morph-contracts` — Mainnet / Hoodi chain IDs and public RPC references when wiring `L1_ETH_RPC` / `L1_BEACON_CHAIN_RPC` or checking network context +- `morph-rpc-api` — Morph JSON-RPC surface when validating a running node or comparing behavior to hosted endpoints diff --git a/skills/morph-js-sdk/SKILL.md b/skills/morph-js-sdk/SKILL.md new file mode 100644 index 000000000..3aab15982 --- /dev/null +++ b/skills/morph-js-sdk/SKILL.md @@ -0,0 +1,89 @@ +--- +name: morph-js-sdk +description: "Morph JavaScript/TypeScript SDK: Alt Fee (tx type 0x7f), @morph-network/viem, @morph-network/ethers, @morph-network/ethers5, @morph-network/chain presets, Token Registry, feeTokenID/feeLimit, RPC and chainId. Use when the user builds or debugs Morph dApps in JS/TS, picks Viem vs Ethers, configures wallets/clients, sends gas in ERC-20, queries supported fee tokens, integrates npm packages, or asks about Morph-specific transaction fields, adapters, or network IDs (e.g. 2818, 2910). SKILL.md includes abbreviated Viem/Ethers snippets; full API tables and extended examples are in morph-doc js-sdk.mdx." +last_verified: 2026-04-27 +verified_against: + - docs/build-on-morph/sdk/js-sdk.mdx + - examples/viem-alt-fee/ +--- + +# Morph JS/TS SDK (Execution Playbook) + +## Source of Truth + +Read the in-repo doc before writing code or drawing conclusions: + +- File: `docs/build-on-morph/sdk/js-sdk.mdx` +- Site route id: `build-on-morph/sdk/js-sdk` +- Standalone Node example: `examples/viem-alt-fee/` (aligned with Quick Start values) + +The doc covers installation matrix, Quick Start, per-package API Reference, chain and Token Registry descriptions. This skill does not duplicate the long tables and signatures; open the corresponding section of the above file when details are needed. + +## Minimal Example (consistent with `js-sdk.mdx` Quick Start; use doc values as canonical) + +The skeletons below cover the most common paths; `feeTokenID` / `feeLimit`, gas, and chain object names follow the doc and current package exports. + +### Viem (`@morph-network/viem`) + +```typescript +import { createPublicClient, createWalletClient, http, parseEther } from "viem"; +import { privateKeyToAccount } from "viem/accounts"; +import { morphHoodiTestnet } from "@morph-network/viem"; + +const account = privateKeyToAccount(""); +const publicClient = createPublicClient({ chain: morphHoodiTestnet, transport: http() }); +const walletClient = createWalletClient({ account, chain: morphHoodiTestnet, transport: http() }); + +const hash = await walletClient.sendTransaction({ + account, + to: "0x...", + value: parseEther("0.001"), + nonce: await publicClient.getTransactionCount({ address: account.address }), + gas: 100000n, + maxFeePerGas: 15000000n, + maxPriorityFeePerGas: 14000000n, + feeTokenID: 4, + feeLimit: 252637086960555000n, +}); +``` + +### Ethers v6 (`@morph-network/ethers`) + +```typescript +import { BrowserProvider, parseEther } from "ethers"; +import { MorphSigner, MORPH_HOODI_TESTNET } from "@morph-network/ethers"; + +const provider = new BrowserProvider(window.ethereum); +const signer = MorphSigner.from(await provider.getSigner()); + +await signer.sendTransaction({ + to: "0x...", + value: parseEther("0.001"), + chainId: MORPH_HOODI_TESTNET.chainId, + gasLimit: 100000n, + maxFeePerGas: 15000000n, + maxPriorityFeePerGas: 14000000n, + feeTokenID: 4, + feeLimit: 252637086960555000n, +}); +``` + +## Execution Steps + +1. **Choose stack**: Select the adapter package based on the user's underlying library — Viem → `@morph-network/viem`; Ethers v6 → `@morph-network/ethers`; Ethers v5 → `@morph-network/ethers5`. Use `@morph-network/chain` (or the viem chain export aligned with the doc) for chain definitions. +2. **Distinguish Alt Fee from regular transactions**: Alt Fee is Morph's proprietary type `0x7f` and requires a valid `feeTokenID` (token gas); `feeLimit` is optional (protocol can fall back to balance as cap — see `js-sdk.mdx` and `10-altfeetx.md`); do not guess Morph field semantics from pure EIP-1559 experience or skip Registry-related steps. +3. **Chain and network**: Mainnet / Hoodi chainId, RPC names follow the doc and current package exports (commonly seen in doc: Mainnet `2818`, Hoodi testnet `2910`); if the user's version is outdated, prompt them to align with the package versions listed in the doc rather than hardcoding old constants. +4. **Site Demo**: The React Demo referenced in `js-sdk.mdx` only runs inside the Docusaurus site; when helping users in IDE, use the static code blocks from the doc — do not assume `@site/...` components can be imported. +5. **Do not fabricate exports**: Function names, types, and re-exported chain objects follow the doc and installed package `d.ts`; when uncertain, ask the user to paste their `package.json` version or copy the API table from the doc themselves. + +## Related Skills + +- `morph-contracts` — chain IDs, RPC URLs, predeploy and bridge contract addresses +- `morph-tx-cost` — total fee (L2 execution + L1 data) before Alt Fee token payment +- `morph-rails` — PayFi / x402 / Reference Key routing when the question is payment rails, not raw SDK API + +## Self-Check + +- Is the answer backed by `js-sdk.mdx`? +- Do the Alt Fee fields cover both Registry / limit semantics (as described in the doc)? +- Is the difference in syntax explained for the user's chosen adapter (viem / ethers / ethers5)? diff --git a/skills/morph-rails/SKILL.md b/skills/morph-rails/SKILL.md new file mode 100644 index 000000000..414960226 --- /dev/null +++ b/skills/morph-rails/SKILL.md @@ -0,0 +1,85 @@ +--- +name: morph-rails +description: "Morph Rails programmable payment middleware on Morph L2: permissionless PayFi stack, non-custodial settlement, AltFee gas abstraction in Rails flows, Reference Key reconciliation, Agentic Payment (x402 + Skill Hub). Use when the user asks what Morph Rails is, PayFi on Morph, payment infrastructure vs raw chain ops, merchant/agent payment rails, or how Rails pieces fit together — not for deep AltFee signing or full x402 CLI/API tables (see linked docs under Single Source of Truth / Sub-topics)." +last_verified: 2026-04-20 +verified_against: + - docs/morph-rails/0-overview.md + - docs/about-morph/morph-rails.md + - docs/morph-rails/infra-solutions/1-altfee.md + - docs/morph-rails/infra-solutions/2-reference-key.md + - docs/morph-rails/agentic-payment/1-x402-facilitator.md + - docs/morph-rails/agentic-payment/2-morph-skill.md +--- + +# Morph Rails (Execution Playbook) + +## Single Source of Truth + +| Topic | In-repo path | +|-------|--------------| +| Overview & narrative (open infrastructure, modules) | `docs/about-morph/morph-rails.md` | +| Architecture & typical transaction flows (merchant / AI Agent) | `docs/morph-rails/0-overview.md` | +| Infrastructure capability: AltFee | `docs/morph-rails/infra-solutions/1-altfee.md` | +| Infrastructure capability: Reference Key | `docs/morph-rails/infra-solutions/2-reference-key.md` | +| Agentic: x402 Facilitator integration | `docs/morph-rails/agentic-payment/1-x402-facilitator.md` | +| Agentic: Morph Skill Hub | `docs/morph-rails/agentic-payment/2-morph-skill.md` | + +Details and long tables follow the **files above**; this SKILL only provides routing and boundaries to avoid duplicating topic-specific skills. + +## What is Morph Rails (one sentence) + +**Morph Rails** is a **programmable payment middleware layer** built on Morph: it encapsulates on-chain complexity — gas, monitoring, reconciliation, settlement — into production-grade payment capabilities accessible via SDK / API / CLI / MCP. **Non-custodial** (does not hold user or merchant funds at the middleware layer), **permissionless** access. + +## Core Principles (aligned with docs) + +- **Programmability** — Payment flows are configurable via SDK, API, CLI, MCP; composable with autonomous Agent orchestration. +- **Non-Custodial** — Settlement happens on-chain; the middleware is an orchestration layer, not a custodian. +- **Permissionless** — No approval process, no minimum transaction volume (consistent with `0-overview` narrative). +- **Full-Stack** — Includes infrastructure services, middleware, Agent toolchain, and merchant-side capabilities (vs "protocol only" solutions). + +## Typical Workflows (for explaining "the full Rail" to users) + +**Merchant payment receipt (Transaction Flow in docs):** +Payment app initiates → Rails interface → risk/compliance check → **AltFee** pays gas with stablecoins → transaction carries **Reference Key** → on-chain settlement on Morph → merchant reconciles with Reference Key. + +**AI Agent paying for API:** +Skill Hub / discovery endpoint → HTTP `402 Payment Required` → **x402 Facilitator** constructs and signs payment → **AltFee** pays gas with USDC etc. (zero ETH possible) → resource returned after on-chain settlement (see `0-overview`). + +## Sub-topics → Specific Skills / Docs + +| User question focus | Open first | +|---------------------|------------| +| Rails overview, architecture diagram, who it's for | `docs/morph-rails/0-overview.md`, `docs/about-morph/morph-rails.md` | +| HTTP 402, Facilitator, HMAC, merchant credentials, CLI `x402-*` | `docs/morph-rails/agentic-payment/1-x402-facilitator.md` | +| Transaction type `0x7f`, `feeTokenID` / `feeLimit`, Viem/Ethers signing | `docs/about-morph/10-altfeetx.md`, `docs/morph-rails/infra-solutions/1-altfee.md` | +| JS/TS client, chain preset, npm packages | **`skills/morph-js-sdk/SKILL.md`** | +| Merchant order reconciliation, on-chain reference lookup | `docs/morph-rails/infra-solutions/2-reference-key.md` (check the page for mainnet availability timeline) | +| Agent-side Skill list, `morph-wallet` / `morph-altfee` etc. | `docs/morph-rails/agentic-payment/2-morph-skill.md`, [morph-skill GitHub](https://github.com/morph-l2/morph-skill) | + +## Related Skills + +- `morph-js-sdk` — JS/TS client, chain preset, Alt Fee signing helpers +- `morph-tx-cost` — ETH-denominated L2+L1 fee model (before token gas) +- `morph-contracts` — contract addresses and chain IDs for Rails demos +- External pack: `skills/morph-skill/morph-x402.md`, `skills/morph-skill/morph-altfee.md` — CLI/runtime mirrors (see `docs/morph-rails/agentic-payment/2-morph-skill.md`) + +## Common Boundary Confusion + +- **Morph Rails ≠ x402 only**: x402 is one key protocol for **Agent-to-Agent micropayments** within the Rails ecosystem; use this skill when discussing the full payment stack, and open **`1-x402-facilitator.md`** for verify/settle/HMAC/CLI details. +- **Morph Rails ≠ full AltFee spec**: Rails docs mention "pay gas with USDC"; for transaction fields and signing details, refer to **`10-altfeetx.md`**, **`1-altfee.md`**, and the AltFee technical sections linked from those pages. +- **Morph Skill (Hub / morph-skill repo) ≠ this repo's Agent Skills**: the former is an on-chain/Agent-side capability module; the **`skills/`** directory in this repo contains SKILL documentation for IDE/model tools — do not conflate the two. + +## Execution Steps (model) + +1. Determine if the user wants the "full picture" or a "sub-protocol/sub-feature" — full picture: only read this SKILL + `0-overview`; otherwise redirect to the topic-specific skill. +2. For addresses, chain IDs, contract lists, use **morph-contracts** (if installed) or `docs/` contract chapters — do not hardcode from memory. +3. Before delivering: verify Rails is described as non-custodial and permissionless; verify the split between x402/AltFee responsibilities is clear. + +## Self-Check + +- [ ] Does it point to `docs/morph-rails/0-overview.md` or `docs/about-morph/morph-rails.md` as the full-picture source of truth? +- [ ] Does it clarify that x402 is one component of Rails, and redirect details to **`1-x402-facilitator.md`**? +- [ ] Does it clarify that AltFee is a common Rails capability, and redirect signing/type details to **`10-altfeetx.md`** / **`1-altfee.md`**? +- [ ] Does it distinguish Morph Skill Hub (product) from the `skills/` Agent Skills in this repo? +- [ ] Does Reference Key remind the reader to check availability and API description in `2-reference-key.md`? +- [ ] Does it avoid repeating the long x402 Facilitator API table inside the SKILL (readers should open `1-x402-facilitator.md`)? diff --git a/skills/morph-rpc-api/SKILL.md b/skills/morph-rpc-api/SKILL.md new file mode 100644 index 000000000..a323076eb --- /dev/null +++ b/skills/morph-rpc-api/SKILL.md @@ -0,0 +1,68 @@ +--- +name: morph-rpc-api +description: "Morph-exclusive JSON-RPC API methods not present in standard Ethereum: morph_getBlockByNumber, morph_getBlockByHash, morph_estimateL1DataFee, morph_getNumSkippedTransactions, morph_getSkippedTransaction(Hashes), morph_getRollupBatchByIndex, morph_GetBlockTraceByNumberOrHash. Use when the user needs Morph-specific RPC calls, extra block fields (withdrawTrieRoot, batchHash, nextL1MsgIndex, rowConsumption), L1 data fee estimates, skipped transaction queries, rollup batch data, or block traces for ZK proof rollers." +last_verified: 2026-05-09 +verified_against: + - docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md +--- + +# Morph JSON-RPC API Methods (Execution Playbook) + +## Authoritative Documentation (single source of truth) + +`docs/build-on-morph/developer-resources/3-morph-json-rpc-api-methods.md` + +Site route id: `build-on-morph/developer-resources/morph-json-rpc-api-methods` + +Standard Ethereum RPC (not covered here): `https://ethereum.org/en/developers/docs/apis/json-rpc/` + +RPC endpoints: see `morph-contracts` skill (or `docs/build-on-morph/developer-resources/1-contracts.md`). + +## Morph-Exclusive Methods + +| Method | Purpose | +|--------|---------| +| `morph_getBlockByNumber` | Like `eth_getBlockByNumber` + extra fields | +| `morph_getBlockByHash` | Like `eth_getBlockByHash` + extra fields | +| `morph_estimateL1DataFee` | Estimate L1 data fee (wei) for a tx | +| `morph_getNumSkippedTransactions` | Count of skipped transactions | +| `morph_getSkippedTransactionHashes` | Hashes of skipped txs in index range | +| `morph_getSkippedTransaction` | Full skipped tx object by hash | +| `morph_getRollupBatchByIndex` | Full rollup batch by index | +| `morph_GetBlockTraceByNumberOrHash` | Block trace for ZK proof rollers | + +## Extra Fields on morph_getBlock* + +| Field | Type | Description | +|-------|------|-------------| +| `withdrawTrieRoot` | DATA, 32B | Root of the withdraw trie (proves user withdrawals) | +| `batchHash` | DATA, 32B | Hash of the latest batch; non-zero means this block is a batch point | +| `nextL1MsgIndex` | QUANTITY | Next expected L1 message nonce after this block | +| `rowConsumption` | array | Per-circuit row counts used to generate ZK proof (halo2 schema) | + +## Execution Steps + +1. Use the Morph RPC endpoint for the target network (see `morph-contracts` for URLs). +2. All methods follow standard JSON-RPC 2.0 format: `{"jsonrpc":"2.0","method":"","params":[...],"id":1}`. +3. For `morph_estimateL1DataFee`: pass a `TransactionArgs` object (same shape as `eth_call`) plus a block tag as params. +4. For `morph_getSkippedTransactionHashes`: pass `[fromIndex, toIndex]` (inclusive). +5. For `morph_getRollupBatchByIndex`: pass `[batchIndex]`; response includes `chunks`, `signatures`, `prevStateRoot`, `postStateRoot`, `withdrawRoot`. +6. For `morph_GetBlockTraceByNumberOrHash`: pass block number/hash and optional `tracerConfig`; used by rollers to generate ZK proofs — do not use for regular block data. + +## Key Pitfalls + +- Standard `eth_*` methods are also supported — only use `morph_*` when you need the extra Morph-specific fields or functionality. +- `morph_getSkippedTransactionHashes` appears twice in the source doc: the second entry actually documents `morph_getRollupBatchByIndex` (doc inconsistency — use the method name from the heading). +- `rowConsumption` is an array of `{name, row_number}` objects (circuit names: evm, state, bytecode, copy, keccak, tx, rlp, exp, mod_exp, pi, poseidon, sig, ecc, mpt). + +## Related Skills + +- `morph-contracts` — RPC endpoint URLs for Mainnet and Hoodi Testnet + +## Self-Check + +- [ ] Method names prefixed with `morph_` (not `eth_`) for Morph-exclusive functionality. +- [ ] RPC endpoint URL sourced from `morph-contracts` skill, not guessed. +- [ ] Extra block fields (`withdrawTrieRoot`, `batchHash`, `nextL1MsgIndex`, `rowConsumption`) only exist on `morph_getBlock*` responses. +- [ ] `morph_estimateL1DataFee` returns wei as a QUANTITY hex string. +- [ ] Roller use case (`morph_GetBlockTraceByNumberOrHash`) distinguished from normal block queries. diff --git a/skills/morph-skill-creator/SKILL.md b/skills/morph-skill-creator/SKILL.md new file mode 100644 index 000000000..aa38ae1e4 --- /dev/null +++ b/skills/morph-skill-creator/SKILL.md @@ -0,0 +1,123 @@ +--- +name: morph-skill-creator +description: "Morph-doc bridge to Anthropic skill-creator: install upstream, validate Morph Skills (inventory + pairing), run description trigger eval loops, and drive behavioral eval/improve cycles for skills//SKILL.md. Use when testing Skill routing, fixing stale descriptions, benchmarking Skill outputs, or iteratively improving a Morph Skill after drift reports — not for authoring long-form docs (see morph-doc-agent)." +last_verified: 2026-05-20 +verified_against: + - scripts/morph-skill-creator.mjs + - scripts/lib/skill-creator-path.mjs + - skills/README.md + - https://github.com/anthropics/skills/tree/main/skills/skill-creator +--- + +# morph-skill-creator + +Connect **morph-doc** Skills to the upstream **[skill-creator](https://github.com/anthropics/skills/tree/main/skills/skill-creator)** toolkit (eval loops, description optimization, benchmark viewer). Morph-specific metadata (`last_verified`, `verified_against`, `doc_skill_id`) stays governed by **`npm test`** — upstream `quick_validate.py` does not know those fields. + +## Single Source of Truth + +| Topic | Path | +|-------|------| +| Trigger-eval JSON format & copy-paste example | `scripts/skill-trigger-evals.morph-js-sdk.example.json`, `skills/README.md` § Tuning description trigger rates | +| Morph Skill authoring / audit | `agents/morph-doc-agent.md` | +| Freshness bot (scheduled stale queue) | `scripts/skill-freshness-bot.DESIGN.md` | +| Upstream skill-creator playbook | Install root → `SKILL.md` (Anthropic) | + +## When to Use + +| Goal | Tool | +|------|------| +| Check install (Python, skill-creator path, optional `claude` CLI) | `npm run skill-creator:check` | +| Install upstream into `vendor/skill-creator` | `npm run skill-creator:install` | +| Static Morph guards for one Skill | `npm run skill-creator:validate -- ` | +| **LLM trigger eval** (one-shot `claude -p` per query; needs `claude` CLI) | `npm run skill-creator:run-eval -- ` | +| Optimize YAML **`description`** routing (needs `claude` CLI) | `npm run skill-creator:desc-loop -- ` | +| Fix facts / execution steps / pairing | `morph-doc-agent` + PR + `npm test` | +| Behavioral eval (outputs, assertions, viewer) | Upstream skill-creator § Running and evaluating test cases + `skills//evals/evals.json` | + +## Prerequisites + +1. **Node** — `npm test` from morph-doc root after any Skill edit. +2. **Python 3** + **PyYAML** — `npm run skill-creator:install` creates `.local/skill-creator-venv` (PEP 668–safe); `validate` / `desc-loop` auto-bootstrap the venv if needed. +3. **skill-creator checkout** — one of: + - `npm run skill-creator:install` → `vendor/skill-creator` (gitignored) + - User-level: `~/.claude/skills/skill-creator` ([anthropics/skills](https://github.com/anthropics/skills/tree/main/skills/skill-creator)) + - `export MORPH_SKILL_CREATOR_ROOT=/path/to/skill-creator` +4. **`run-eval` / `desc-loop`:** `claude` CLI (see upstream skill-creator). Without it, hand-edit `description` using trigger evals + `npm test`. + +## Execution Steps + +### Step 0 — Install & check + +```bash +npm run skill-creator:install # once per clone +npm run skill-creator:check +``` + +### Step 1 — Static validate (always) + +```bash +npm run skill-creator:validate -- morph-js-sdk +``` + +Runs `morph-doc-skill-inventory` + `doc-skill-pairing` for the repo, then optional upstream `quick_validate.py` (may warn on `last_verified` — ignore; trust Morph inventory). + +### Step 2 — Trigger eval set (description routing) + +Ensure a JSON **array** of `{ "query", "should_trigger" }` exists (≥20 rows, ≥8 true / ≥8 false): + +| Priority | Path | +|----------|------| +| 1 | `scripts/skill-trigger-evals..json` | +| 2 | `scripts/skill-trigger-evals..example.json` | +| 3 | `skills//evals/trigger.json` | + +Copy from `scripts/skill-trigger-evals.morph-js-sdk.example.json` and tailor queries. + +### Step 3 — LLM trigger eval (one shot) + +```bash +npm run skill-creator:run-eval -- morph-js-sdk +# optional: pass through run_eval.py flags after -- +# npm run skill-creator:run-eval -- morph-js-sdk -- --runs-per-query 3 --num-workers 4 +``` + +Calls upstream `run_eval.py` via `claude -p` (**1 run per query** by default; pass `--runs-per-query 3` after `--` for higher confidence). JSON goes to stdout; a copy is saved under `.local/skill-run-eval//results.json` unless you pass `--out` or set `MORPH_SKILL_CREATOR_RUN_EVAL_OUT`. + +### Step 4 — Description optimization loop + +```bash +npm run skill-creator:desc-loop -- morph-js-sdk +# optional extra flags after -- +# npm run skill-creator:desc-loop -- morph-js-sdk -- --max-iterations 3 --holdout 0.3 --runs-per-query 3 +``` + +Uses upstream `run_loop.py` with **1 `claude -p` run per eval query** by default (same as `run-eval`). Results under `.local/skill-desc-opt//`. Merge printed **`best_description`** into `skills//SKILL.md`, then: + +1. Re-stamp **`last_verified`** if you re-read sources. +2. Run **`npm test`**. + +### Step 5 — Behavioral evals (fix Skill body / outputs) + +1. Add `skills//evals/evals.json` from `scripts/skill-behavior-evals.template.json`. +2. Follow upstream skill-creator **Running and evaluating test cases** (with-skill vs baseline, grader, `aggregate_benchmark`, `eval-viewer/generate_review.py`). +3. Apply fixes via **`morph-doc-agent`** or direct SKILL edits; never paste full `docs/` MDX into the Skill. + +### Step 6 — Land in Git + +- Same PR: SKILL + optional eval JSON + `last_verified` / `verified_against` if facts changed. +- Register new skill ids in `sidebars-skills.js`. +- Human drift: `.github/ISSUE_TEMPLATE/skill-feedback.yaml` (`skill-drift`). + +## Related Skills + +- `morph-doc-agent` — create or audit a Skill from one goal; use after behavioral eval shows content gaps. +- `morph-skill-ln` — symlink skills into IDE discovery paths before testing routing in Cursor/Claude. +- `morph-dapp-workflow` — dApp delivery harness; not for Skill meta-testing. + +## Self-Check + +- [ ] Did `npm run skill-creator:check` pass before spending API credits on loops? +- [ ] Is the trigger eval set realistic (chain IDs, package names, near-miss negatives)? +- [ ] After merging `best_description`, does `morph-doc-skill-inventory` still accept trigger phrasing in `description`? +- [ ] Did you run full **`npm test`** before opening the PR? +- [ ] For fact changes, are **`last_verified`** and **`verified_against`** updated in the same change set? diff --git a/skills/morph-skill-ln/SKILL.md b/skills/morph-skill-ln/SKILL.md new file mode 100644 index 000000000..01f387805 --- /dev/null +++ b/skills/morph-skill-ln/SKILL.md @@ -0,0 +1,81 @@ +--- +name: morph-skill-ln +description: "Morph-doc Agent Skills 安装脚本:将 skills// 链到仓库内各工具 skills 目录(--agent …),或用 --unlink 移除对应软链。Use when the user runs morph-skill-ln, unlinks agent symlinks, needs Windsurf .windsurf/skills, or troubleshoots project-local skills in Cursor/Claude/OpenClaw." +last_verified: 2026-04-20 +verified_against: + - scripts/morph-skill-ln + - skills/README.md +--- + +# morph-skill-ln (Execution Playbook) + +## Single Source of Truth + +| Topic | In-repo path | +|-------|--------------| +| Skills overview (directory conventions, relationship to human docs, symlink notes, tool table) | `skills/README.md` | +| Doc-as-SKILL vision & `doc_skill_id` contract | `VISION.md` | +| Generate/audit a Skill from a single target | `agents/morph-doc-agent.md` | + +This SKILL only describes **how to use the script to create symlinks**; conventions and index follow **`skills/README.md`**. + +## When to Use + +- Create **project-local** skill symlinks for **Cursor / Claude Code / OpenClaw / Windsurf (Cascade)** etc. under the repo root (`/skills/` → `/.*/skills/`). +- Use **`./scripts/morph-skill-ln --agent …`** to select the tool; **Windsurf** uses **`-a windsurf`** (maps to **`.windsurf/skills`**, consistent with the official Cascade Skills workspace path). +- Batch update symlink targets (after repo path changes, re-linking on a new machine) or troubleshoot "Agent does not list skill". + +## Canonical Path Conventions + +- Canonical in-repo directory: **`skills//`** (containing `SKILL.md`); **do not** treat `.cursor/skills` as the sole in-repo source. +- `name` (frontmatter), directory name, and optional MDX `doc_skill_id` must match; validation: `__tests__/doc-skill-pairing.test.mjs`. + +## Execution Steps (model / human) + +1. Confirm **morph-doc** is cloned locally. **Repo root**: **`-r` / `--root PATH`** or **`MORPH_DOC_ROOT`** or the script default (**`-r` > `MORPH_DOC_ROOT` > default**). +2. **Target Agent**: **`-a` / `--agent ARG`** (repeatable). **Built-in**: `cursor`, `claude`, `openclaw`, `windsurf`, `codex`; when **no `--agent`** is passed, defaults to **cursor + claude + openclaw + windsurf**. **Custom**: pass a **repo-relative path** (containing `/` or starting with `.`), e.g. **`.windsurf/skills`**, **`mytool/skills`** — maps to `//`. +3. Example commands from the repo root: + + ```bash + ./scripts/morph-skill-ln + ./scripts/morph-skill-ln morph-js-sdk + ./scripts/morph-skill-ln -a cursor -a windsurf morph-js-sdk + ./scripts/morph-skill-ln -r /absolute/path/to/morph-doc -a claude + ./scripts/morph-skill-ln --dry-run + ./scripts/morph-skill-ln --unlink -a cursor morph-js-sdk + ``` + +4. **Remove symlinks**: **`--unlink`**, with the same **`--agent`** as when linking; only deletes **symbolic links** (regular files/directories are skipped with a warning). **`--dry-run`** prints **`rm -f`** commands. For a single skill, **`skills//` does not need to exist**. See **`./scripts/morph-skill-ln --help`** for details. + +5. When linking (without `--unlink`): **`mkdir -p`** the selected directories and **`ln -sfn`** to `/skills/`. + +## Tool Path Mapping (in-repo) + +| Built-in `--agent` | Links to (relative to repo root) | +|--------------------|----------------------------------| +| cursor | `.cursor/skills//` | +| claude | `.claude/skills//` | +| openclaw | `.openclaw/skills//` | +| windsurf | `.windsurf/skills//` (Windsurf Cascade workspace skills) | +| codex | `.codex/skills//` | + +## Common Pitfalls + +- **Canonical directory** is still **`skills//`**; `.cursor/skills` etc. are **mirror links** for Agent discovery, aligned with **`--agent`** selection. +- **Batch mode** only enumerates `skills/morph-*/`; non-`morph-` prefixed directories must be linked with a **single `skill-id` argument**. +- **`--dry-run`** only prints commands, does not write to the filesystem. +- **`--unlink`** does not delete real directories under `skills/`, only removes links in agent directories. + +## Related Skills + +- `skills/README.md` ([Skills overview](/skills/)) — IDE mirror paths and `npm run skill-ln` / `morph-skill-ln` usage +- `morph-agent-ln` — symlink `agents/.md` into `.cursor/.claude/.openclaw/.windsurf/agents` (pair with skill links above) +- `morph-dapp-workflow` — orchestrated dApp flow; points here when child skills are not symlinked yet +- `morph-js-sdk` / `morph-contracts` — common Morph topic skills users link for chain/SDK work + +## Self-Check + +- [ ] Does it point to `skills/README.md` as the overview entry point? +- [ ] Does it explain `-r` / `MORPH_DOC_ROOT` and the **`--agent`** default (cursor + claude + openclaw + windsurf)? +- [ ] Does it list built-in agents and their in-repo paths (including **Windsurf → `.windsurf/skills`**)? +- [ ] Does it remind that `doc_skill_id` / `name` / directory name must match (see VISION and pairing tests)? diff --git a/skills/morph-skill/index.md b/skills/morph-skill/index.md new file mode 100644 index 000000000..e5de7df83 --- /dev/null +++ b/skills/morph-skill/index.md @@ -0,0 +1,115 @@ +--- +title: Morph Skill +sidebar_label: Overview +slug: /morph-skill +description: AI Agent skill pack for the Morph L2 protocol layer — wallet, explorer, DEX, bridge, alt-fee, identity, EIP-7702, and x402 — wrapping `morph_api.py` from the morph-l2/morph-skill repo. +--- + +# Morph Skill + +Mirrored documentation for the AI Agent skill pack at +[`morph-l2/morph-skill`](https://github.com/morph-l2/morph-skill). Each page +below is a routable summary; the upstream `SKILL.md` files remain the single +source of truth (linked at the top of every page). + +## What this is + +`morph-skill` is the **Morph protocol and business layer** for AI agents — a +Python CLI (`scripts/morph_api.py`) that lets agents like Claude Code, Cursor, +Windsurf, and Cline interact with Morph L2 through natural language. All +commands output JSON; all amounts are human-readable (`0.1` ETH, not wei). + +It is **not** a wallet product. The wallet product / signing layer is +[BGW ↗](https://github.com/bitget-wallet-ai-lab/bitget-wallet-skill) — Bitget +Wallet's Social Login Wallet skill pack (TEE-backed signing). See +[Role boundary](#role-boundary) below for how to decide which side handles +what. + +## Skills in this pack + +| Skill | What it does | +|---|---| +| [morph-wallet](/skills/morph-skill/morph-wallet) | Local key wallet — create, balance, transfer, tx receipt | +| [morph-explorer](/skills/morph-skill/morph-explorer) | On-chain reads via Blockscout — address / tx / token / contract | +| [morph-identity](/skills/morph-skill/morph-identity) | EIP-8004 agent identity & reputation | +| [morph-dex](/skills/morph-skill/morph-dex) | Swap on Morph via Bulbaswap aggregator | +| [morph-bridge](/skills/morph-skill/morph-bridge) | Cross-chain swap across 6 chains (Bulbaswap) | +| [morph-7702](/skills/morph-skill/morph-7702) | EIP-7702 EOA delegation, atomic batch (tx `0x04`) | +| [morph-x402](/skills/morph-skill/morph-x402) | x402 HTTP payment protocol — pay / receive USDC | +| [morph-altfee](/skills/morph-skill/morph-altfee) | Pay gas in non-ETH tokens (tx `0x7f`) | + +## Role boundary + +> Before executing any Morph workflow, decide whether the user is asking for: +> a **Morph protocol/business** task, a **wallet / Social Login Wallet** task, +> or a **combined** flow that needs both. +> +> This repo is the **Morph protocol and business layer**. BGW should be +> treated as the **wallet product and signing layer**. + +`morph-skill` owns: wallet RPC operations, explorer queries, DEX quotes, +bridge quotes/orders, alt-fee, EIP-8004 identity & reputation, EIP-7702 +delegation, x402 pay/receive. + +BGW owns: Social Login Wallet (TEE signing — keys never leave the TEE), swap +execution across chains (including Morph) for Social Login Wallet users, +token discovery, market data, security audits. + +This repo **does not** call BGW scripts, embed BGW tooling, or manage BGW +sessions at runtime. + +For combined Morph + BGW flows, see +[`docs/social-wallet-integration.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md). + +## Routing table + +| User need | Use | +|---|---| +| Local private-key wallet on Morph | Morph skills | +| Explorer, swap, bridge, alt-fee, identity, reputation on Morph (with local key) | Morph skills | +| EIP-7702 delegation, batch calls (with local key) | Morph skills | +| x402 payment (pay or receive USDC, with local key) | Morph skills | +| x402 discover / verify / settle / server (no signing needed) | Morph skills | +| Social Login Wallet, TEE signing, market data, token discovery | BGW skills | +| Swap / bridge execution with Social Login Wallet (incl. on Morph) | **BGW skills** — BGW supports Morph chain natively with TEE signing | +| Social Login Wallet + Morph protocol reads | BGW for address, then Morph for reads | +| x402 pay with Social Login Wallet | Agent orchestration: Morph `x402-discover` → BGW signs EIP-3009 → Agent replays with `PAYMENT-SIGNATURE` header | +| EIP-7702 batch with Social Login Wallet | Agent orchestration: Morph computes hashes → BGW signs via TEE → Agent assembles and broadcasts | + +**Single-pass rule:** pick one mode at task start and stay in it. Do not +bounce between BGW and Morph more than once for the same task. + +## Install + +```bash +git clone https://github.com/morph-l2/morph-skill.git +cd morph-skill +pip install requests eth_account eth_abi eth_utils +python3 scripts/morph_api.py [options] +``` + +No API keys required for queries. Bridge order management requires JWT +authentication via `bridge-login`. + +For Claude Code, Cursor, Windsurf, Cline, and Dify integration, see the +[upstream README ↗](https://github.com/morph-l2/morph-skill#readme). + +## Data sources + +| Source | URL | +|---|---| +| Morph RPC | `https://rpc.morph.network/` | +| Explorer API (Blockscout) | `https://explorer-api.morph.network/api/v2` | +| DEX / Bridge API (Bulbaswap) | `https://api.bulbaswap.io` | +| x402 Facilitator | `https://morph-rails.morph.network/x402` | +| Hoodi testnet RPC | `https://rpc-hoodi.morph.network` | + +ABIs for `IdentityRegistry` and `ReputationRegistry` are bundled locally in +the repo at `contracts/`. + +## See also + +- Native L1↔L2 bridge (deposit / withdraw via `L1GatewayRouter`, + `proveAndRelayMessage`): [Morph Bridge (L1↔L2)](/skills/morph-bridge/SKILL) +- [Morph Skills overview](/skills/) — the full skill catalog for this site +- Upstream changelog: [`CHANGELOG.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/CHANGELOG.md) diff --git a/skills/morph-skill/morph-7702.md b/skills/morph-skill/morph-7702.md new file mode 100644 index 000000000..b9c89e913 --- /dev/null +++ b/skills/morph-skill/morph-7702.md @@ -0,0 +1,82 @@ +--- +name: morph-7702 +version: 1.0.0 +description: "EIP-7702 EOA delegation on Morph L2 — check delegation status, sign offline authorization, send single calls or atomic batches via tx type 0x04, and revoke delegation. Use when the user asks about EIP-7702, atomic multi-call (e.g. approve + swap), or delegating an EOA. Mutually exclusive with alt-fee." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-7702/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph EIP-7702 + +EIP-7702 EOA delegation and atomic batch calls on Morph L2 via tx type `0x04`. + +## Canonical reference + +[`skills/morph-7702/SKILL.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-7702/SKILL.md) + +## When to use + +- Check whether an EOA is delegated +- Sign a 7702 authorization offline (no tx sent) +- Send a single delegated call +- Execute an atomic batch of calls (e.g. approve + swap in one tx) +- Revoke a delegation (return EOA to normal) + +## Capability summary + +| Command | Flags | Purpose | +|---|---|---| +| `7702-delegate` | `--address 0xEOA` | Check whether an EOA has been delegated | +| `7702-authorize` | `--private-key 0x… --delegate 0xDelegateContract` | Sign authorization offline (no tx) | +| `7702-send` | `--delegate 0x… --to 0x… --data 0x… [--value ] [--gas ] --private-key 0x…` | Single delegated call | +| `7702-batch` | `--delegate 0x… --calls '[{"to":"0x…","value":"0","data":"0x…"}, …]' --private-key 0x…` | Atomic batch of calls | +| `7702-revoke` | `--private-key 0x…` | Revoke delegation (sets delegate to `address(0)`) | + +`--calls` is a JSON array of `{to, value, data}` objects. + +## Delegation detection + +Delegated EOAs have on-chain code starting with `0xef0100` followed by the +20-byte delegate address. Authorization hash format: + +```text +keccak256(0x05 || RLP([chainId, contract, nonce])) +``` + +For self-delegation, the auth `nonce` must be `tx_nonce + 1` (geth rule). + +## Critical caveats (from upstream) + +- **EIP-7702 and alt-fee are mutually exclusive** — cannot use both in a + single transaction (tx type `0x04` vs `0x7f`) +- This skill **does not assume a default Morph delegate contract** — the user + / agent supplies `--delegate` +- `7702-revoke` clears delegation — the EOA returns to a normal EOA until + re-delegated +- `7702-authorize` is offline — returns a signed authorization without sending + any tx +- [BGW ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md) + (Social Login Wallet) users cannot sign 7702 transactions through this skill + directly + +## Safety rules + +1. Always confirm with the user before executing `7702-send`, `7702-batch`, + or `7702-revoke` — display target, calls, values before signing +2. EIP-7702 and alt-fee (`0x7f`) are mutually exclusive +3. `7702-revoke` clears delegation +4. Private keys are used locally for signing only — never sent to any API +5. `7702-authorize` is offline + +## Cross-skill integration + +- [morph-dex](./morph-dex) — get swap calldata from `dex-quote --recipient + `, then pass to `7702-batch` for atomic approve + swap +- [morph-altfee](./morph-altfee) — **mutually exclusive** with this skill; + pick one tx type per transaction +- [morph-identity](./morph-identity) — `agent-register` calldata can be + bundled into a `7702-batch` to combine registration with other operations +- [morph-x402](./morph-x402) — note that EIP-7702 delegated EOAs using legacy + SimpleDelegation may fail x402 settlement; check with `7702-delegate` first diff --git a/skills/morph-skill/morph-altfee.md b/skills/morph-skill/morph-altfee.md new file mode 100644 index 000000000..1b37a323c --- /dev/null +++ b/skills/morph-skill/morph-altfee.md @@ -0,0 +1,98 @@ +--- +name: morph-altfee +version: 1.0.0 +description: "Alt-fee gas payment on Morph L2 — pay gas with alternative ERC-20 tokens (USDT, USDC, BGB, etc.) via tx type 0x7f. Use when the user has no ETH for gas and wants to pay with another token, or wants to estimate gas in token units. Mutually exclusive with EIP-7702." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-altfee/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph Alt-Fee + +Pay gas in non-ETH tokens on Morph L2 via tx type `0x7f`. Use when the user has +no ETH but holds USDT / USDC / BGB / etc. + +## Canonical reference + +[`skills/morph-altfee/SKILL.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-altfee/SKILL.md) + +## When to use + +- List supported fee tokens +- Get details (scale, rate, decimals) for a fee token +- Estimate gas cost in an alt token +- Send a transaction paying gas with a non-ETH token + +## Capability summary + +| Command | Flags | Purpose | +|---|---|---| +| `altfee-tokens` | (no flags) | List supported fee tokens | +| `altfee-token-info` | `--id ` | Token details (contract, scale, feeRate, decimals, active) | +| `altfee-estimate` | `--id [--gas-limit ]` | Estimate gas cost in token units (10% safety margin) | +| `altfee-send` | `--to --value --data --fee-token-id --fee-limit --gas-limit --private-key` | Send tx, pay gas with alt token | + +`--fee-limit` defaults to `0` (no limit — uses available balance, unused +portion is refunded). + +## Fee tokens + +Supported IDs (from upstream): + +| ID | Token | +|---|---| +| 1 | USDT.e | +| 2 | USDC.e | +| 3 | BGB (old) | +| 4 | BGB | +| 5 | USDT (`0xe7cd86e13AC4309349F30B3435a9d337750fC82D`) | +| 6 | USDC | + +`TokenRegistry`: `0x5300000000000000000000000000000000000021`. + +## Fee formula + +```text +feeLimit >= (gasFeeCap × gasLimit + L1DataFee) × tokenScale / feeRate +``` + +`altfee-token-info --id ` returns `tokenScale` and `feeRate` per token. +`altfee-estimate` includes a 10% safety margin. + +## Critical caveats (from upstream) + +- **Alt-fee and EIP-7702 are mutually exclusive** — cannot use both in one + transaction (tx type `0x7f` vs `0x04`) +- **L1 Data Fee** depends on calldata size and L1 gas price; not estimable + upfront +- `altfee-send` requires `--private-key` (local signing only) +- [BGW ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md) + (Social Login Wallet) users **cannot** use alt-fee through this skill + +## Safety rules + +1. Always confirm with the user before executing `altfee-send` — show + recipient, amount, fee token, and fee limit before signing +2. Private keys are used locally for signing only — never sent to any API +3. Default `feeLimit=0` means no limit — unused portion is refunded; confirm + this with the user + +## Alt-fee support matrix + +| Command | `--fee-token-id` | +|---|---| +| `altfee-send` | Yes (required) | +| `agent-register` ([morph-identity](./morph-identity)) | Yes (optional) | +| `agent-feedback` ([morph-identity](./morph-identity)) | Yes (optional) | +| `transfer` ([morph-wallet](./morph-wallet)) | No | +| `transfer-token` ([morph-wallet](./morph-wallet)) | No | +| `dex-send` ([morph-dex](./morph-dex)) | No | + +## Cross-skill integration + +- [morph-dex](./morph-dex) — pass `dex-quote` calldata into `altfee-send` to + pay swap gas in alt tokens +- [morph-wallet](./morph-wallet) — `token-balance` to check fee-token balance + before sending; `balance` to detect zero-ETH situations and suggest alt-fee +- BGW: for TEE-signed gasless flows, use BGW's `no_gas` mode instead diff --git a/skills/morph-skill/morph-bridge.md b/skills/morph-skill/morph-bridge.md new file mode 100644 index 000000000..68c456095 --- /dev/null +++ b/skills/morph-skill/morph-bridge.md @@ -0,0 +1,49 @@ +--- +name: morph-bridge +version: 1.3.0 +description: "Cross-chain swap with JWT auth — quote prices, create orders, submit transactions, and track order status across 6 chains via the Bulbaswap Cross-Chain Swap API. Use when the user asks to bridge tokens between chains, get a cross-chain quote, search tokens on multiple chains, or manage cross-chain orders. NOT the L1↔L2 native bridge — for that, see Morph Bridge (L1↔L2)." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-bridge/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph Bridge (Cross-chain Swap) + +> **L1↔L2 native bridge?** Use [Morph Bridge (L1↔L2)](/skills/morph-bridge/SKILL) — `L1GatewayRouter`, deposits, withdrawals, and `proveAndRelayMessage`. This page is the **Bulbaswap cross-chain swap** mirror only. + +## Prompt triggers + +| Trigger | CLI / flow | +|---------|------------| +| List chains or tokens | `bridge-chains`, `bridge-tokens`, `bridge-token-search` | +| Quote or balance (no JWT) | `bridge-quote`, `bridge-balance` | +| Authenticate for orders | `bridge-login` (EIP-191 → 24h JWT) | +| Create / submit / one-shot swap | `bridge-make-order`, `bridge-submit-order`, `bridge-swap` | +| Track orders | `bridge-order`, `bridge-history` | + +## Execution Steps + +1. **Disambiguate bridge type** — cross-chain swap (this page) vs Morph L1↔L2 native bridge ([`skills/morph-bridge/SKILL.md`](/skills/morph-bridge/SKILL)). +2. **Read-only path** — run `bridge-chains` / `bridge-tokens` / `bridge-quote` / `bridge-balance` without JWT. +3. **Stateful swap path** — `bridge-login` → `bridge-make-order` (unsigned txs) → sign locally → `bridge-submit-order`; or use `bridge-swap` for make+sign+submit when the user approves one-shot execution. +4. **Confirm before writes** — get explicit user approval before `bridge-make-order`, `bridge-submit-order`, or `bridge-swap`. +5. **On auth errors** — JWT expires after 24h; re-run `bridge-login`. + +## Deep links + +- Upstream playbook: [`github.com/morph-l2/morph-skill` — morph-bridge SKILL](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-bridge/SKILL.md) +- L1↔L2 native bridge (this repo): [`skills/morph-bridge/SKILL.md`](/skills/morph-bridge/SKILL) +- BGW social wallet handoff: [social-wallet-integration](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md) + +## Safety (short) + +- Private keys stay local (EIP-191 in `bridge-login` only); never send keys to the API. +- JWT in `Authorization: Bearer` headers; re-auth on expiry. +- Native tokens use `""` in the API; CLI normalizes this. + +## Related Skills + +- [morph-dex](./morph-dex) — on-Morph swap quotes (`dex-quote`) +- [morph-wallet](./morph-wallet) — balances across chains +- [Morph Bridge (L1↔L2)](/skills/morph-bridge/SKILL) — canonical L1↔L2 deposit/withdraw diff --git a/skills/morph-skill/morph-dex.md b/skills/morph-skill/morph-dex.md new file mode 100644 index 000000000..18c3167b8 --- /dev/null +++ b/skills/morph-skill/morph-dex.md @@ -0,0 +1,71 @@ +--- +name: morph-dex +version: 1.0.0 +description: "DEX swap execution on Morph L2 only — quote and send swaps via the Bulbaswap aggregator. Use when the user asks for a swap quote, a token price, or to execute a swap on Morph. For cross-chain swaps, use the morph-bridge skill instead." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-dex/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph DEX + +Swap quotes and execution **on Morph chain only** via the Bulbaswap +aggregator (API at `https://api.bulbaswap.io`). For cross-chain swaps, see +[morph-bridge](./morph-bridge). + +## Canonical reference + +[`skills/morph-dex/SKILL.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-dex/SKILL.md) + +## When to use + +- Get a swap quote (output amount, price impact) +- Check a token's price +- Execute a swap on Morph +- For swaps on other chains or cross-chain transfers, use + [morph-bridge](./morph-bridge) + +## Capability summary + +| Command | Flags | Purpose | +|---|---|---| +| `dex-quote` | `--amount --token-in --token-out [--recipient] [--slippage 0.5] [--deadline 300] [--protocols v2,v3]` | Quote (output, price impact). Pass `--recipient` to include `methodParameters` (calldata) | +| `dex-send` | `--to --value --data --private-key` | Sign and broadcast using calldata from `dex-quote --recipient` | +| `dex-approve` | `--token --spender --amount --private-key` | Approve ERC-20 spending by a router (required before swapping ERC-20s) | +| `dex-allowance` | `--token --owner --spender` | Check current allowance | + +**Defaults**: `--slippage` 1%, `--deadline` 300 seconds. Supported protocols: +`v2,v3`. Returned amounts are in human-readable units. + +## Critical notes (from upstream) + +- **Morph chain only** — `dex-quote` and `dex-send` only work for tokens on + Morph +- Always use `--slippage` to protect against price movement +- `dex-quote` returns amounts in human-readable units +- `dex-send` requires `methodParameters` from a quote with `--recipient` + +## Safety rules + +1. Always confirm with the user before executing `dex-send` or `dex-approve` — + show swap details (token pair, amount, slippage, router) before signing +2. Private keys are used locally for signing only — never sent to any API +3. DEX quotes expire quickly — get a fresh quote and send immediately + +API: `https://api.bulbaswap.io`. No API keys required. +Install: see [overview](/skills/morph-skill#install). + +## Cross-skill integration + +- [morph-explorer](./morph-explorer) — `token-search` to find token contract + addresses before quoting +- [morph-wallet](./morph-wallet) — `balance` / `token-balance` to verify funds + before swapping +- [morph-altfee](./morph-altfee) — use `altfee-send` instead of `dex-send` to + pay gas with an alt token +- [morph-7702](./morph-7702) — pass `dex-quote --recipient 0xEOA` calldata + inside `7702-batch` for atomic approve + swap in a single tx +- [BGW ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md): + Social Login Wallet users should use BGW's swap flow for execution; + `dex-quote` is still useful for price comparison diff --git a/skills/morph-skill/morph-explorer.md b/skills/morph-skill/morph-explorer.md new file mode 100644 index 000000000..c05eb6e0f --- /dev/null +++ b/skills/morph-skill/morph-explorer.md @@ -0,0 +1,72 @@ +--- +name: morph-explorer +version: 1.0.0 +description: "On-chain data queries on Morph L2 — address info, transactions, tokens, contracts via the Blockscout API. Use when the user asks to look up an address, view tx history, check token holdings, search tokens, get token details (holders, supply, transfers), or investigate a transaction. All commands are read-only; no private key required." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-explorer/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph Explorer + +Read-only on-chain queries on Morph L2 (Chain ID 2818) backed by the Blockscout +explorer API. Outputs JSON; no API keys or private keys required. + +## Canonical reference + +[`skills/morph-explorer/SKILL.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-explorer/SKILL.md) + +## When to use + +- Look up an address, view its tx history or token holdings +- Search for tokens by name/symbol; get supply, holders, recent transfers +- Investigate a single transaction in detail +- Check whether a contract is verified and pull its source / ABI / proxy info + +## Capability summary + +| Command | Flags | Purpose | +|---|---|---| +| `address-info` | `--address 0xAddr` | Address overview (balance, tx count, …) | +| `address-txs` | `--address 0xAddr [--limit 5]` | List transactions for an address | +| `address-tokens` | `--address 0xAddr` | All ERC-20 holdings of an address | +| `tx-detail` | `--hash 0xTxHash` | Decoded tx detail (explorer view) | +| `token-search` | `--query "USDC"` | Find token by name or symbol | +| `contract-info` | `--address 0x…` | Verified contract source, ABI, proxy info | +| `token-transfers` | `--token USDT` *or* `--address 0x…` | Recent transfer history | +| `token-info` | `--token USDT` *or* `--token 0x…` | Token details (supply, holders, transfers) | +| `token-list` | (no flags) | Single-page token list | + +API endpoint: `https://explorer-api.morph.network/api/v2`. No API keys required. +Install: see [overview](/skills/morph-skill#install). + +## Caveats (from upstream) + +- All commands output JSON. All commands are **read-only**. +- `contract-info` only works for **verified contracts**. +- `token-info` is for **ERC-20 tokens only** — for native ETH use `address-info`. +- `token-list` returns a **single page** response. +- [BGW ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md) + (Social Login Wallet) users: resolve the address via BGW first, then run + these commands normally. + +## Common workflows + +- **Investigate a tx:** `tx-detail` (explorer view) → `tx-receipt` + ([morph-wallet](./morph-wallet)) for RPC-level logs +- **Research an address:** `address-info` → `address-txs` → `address-tokens` +- **Token dashboard:** `token-search` → `token-info` → `token-transfers` +- **Analyze a contract:** `contract-info` (source, ABI, proxy type) → + `address-txs` (recent interactions) + +## Cross-skill integration + +- Pair `address-tokens` with `balance` / `token-balance` from + [morph-wallet](./morph-wallet) for precise balance + broad portfolio view +- Use `token-search` to find token addresses before `dex-quote` + ([morph-dex](./morph-dex)) or `bridge-quote` ([morph-bridge](./morph-bridge)) +- Use `tx-receipt` ([morph-wallet](./morph-wallet)) alongside `tx-detail` for + log-level vs explorer-level views +- Use `7702-delegate` ([morph-7702](./morph-7702)) to check whether an address + has EIP-7702 delegation diff --git a/skills/morph-skill/morph-identity.md b/skills/morph-skill/morph-identity.md new file mode 100644 index 000000000..1e5704af3 --- /dev/null +++ b/skills/morph-skill/morph-identity.md @@ -0,0 +1,94 @@ +--- +name: morph-identity +version: 1.4.0 +description: "EIP-8004 agent identity and reputation on Morph — register agents, query metadata, submit and read feedback. Agents are represented as ERC-721 NFTs (numeric agent_id). Use when the user asks to register an agent, query an agent's wallet/metadata/reputation, leave feedback, or manage agent settings." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-identity/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph Identity (EIP-8004) + +On-chain agent identity and reputation on Morph L2 via EIP-8004. Each agent is +an ERC-721 token; `agent_id` is a numeric token ID (e.g. `1`, `42`). + +## Canonical reference + +[`skills/morph-identity/SKILL.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-identity/SKILL.md) + +## When to use + +- Register an agent identity on-chain (`agent-register`) +- Query an agent's wallet, metadata, reputation, or full review history +- Submit / revoke feedback for an agent; append an owner response +- Manage an agent's metadata, URI, or operational wallet binding + +## Capability summary + +### Reads (no private key) + +| Command | Flags | Purpose | +|---|---|---| +| `agent-wallet` | `--agent-id ` | Read the agent's payment wallet | +| `agent-metadata` | `--agent-id --key name` | Read a metadata value by key | +| `agent-reputation` | `--agent-id --tag1 quality` | Aggregate reputation summary | +| `agent-reviews` | `--agent-id [--include-revoked]` | All recorded feedback entries | + +### Writes (require `--private-key`) + +| Command | Flags | Purpose | +|---|---|---| +| `agent-register` | `--name "MorphBot" --agent-uri "https://…" --metadata role=assistant,team=research --private-key 0x…` | Register an agent identity (mints ERC-721 NFT) | +| `agent-feedback` | `--agent-id --value 4.5 --tag1 quality --feedback-uri "https://…" --private-key 0x…` | Submit feedback for an agent | +| `agent-set-metadata` | `--agent-id --key "role" --value "assistant" --private-key 0x…` | Set a metadata key=value | +| `agent-set-uri` | `--agent-id --uri "https://…" --private-key 0x…` | Update the agent URI | +| `agent-set-wallet` | `--agent-id --new-wallet-key 0xNewKey --private-key 0xOwnerKey` | Bind a new operational wallet | +| `agent-unset-wallet` | `--agent-id --private-key 0x…` | Unbind the operational wallet | +| `agent-revoke-feedback` | `--agent-id --feedback-index 0 --private-key 0x…` | Revoke previously submitted feedback | +| `agent-append-response` | `--agent-id --client 0xClientAddr --feedback-index 0 --response-uri "https://…" --private-key 0x…` | Append owner response to a feedback entry | + +`agent-register` and `agent-feedback` accept `--fee-token-id` to pay gas in an +alt token (see [morph-altfee](./morph-altfee)). + +## Contracts (Morph Mainnet) + +| Contract | Default address | Override env var | +|---|---|---| +| IdentityRegistry | `0x8004A169FB4a3325136EB29fA0ceB6D2e539a432` | `MORPH_IDENTITY_REGISTRY` | +| ReputationRegistry | `0x8004BAa17C55a88189AE136b182e5fdA19dE9b63` | `MORPH_REPUTATION_REGISTRY` | + +Network env overrides: `MORPH_RPC_URL`, `MORPH_CHAIN_ID`. ABIs bundled at +`contracts/IdentityRegistry.json` and `contracts/ReputationRegistry.json`. +Hoodi testnet supported via the env overrides. + +## Safety rules (from upstream) + +1. Always confirm with the user before executing `agent-register` — display + name, URI, and metadata before signing. +2. Always confirm with the user before executing `agent-feedback` — display + agentId, score, tags before signing. +3. Always confirm before executing any other write command — display agentId + and the updated fields before signing. +4. Private keys are used locally for signing only — never sent to any API. +5. Read-only commands (`agent-wallet`, `agent-metadata`, `agent-reputation`, + `agent-reviews`) require no private key. + +## EIP-712 caveat (`agent-set-wallet`) + +The signed payload must match `AgentWalletSet(agentId,newWallet,owner,deadline)` +on `ERC8004IdentityRegistry`, and the deadline must stay within the contract's +**5-minute window**. + +## Cross-skill integration + +- [morph-wallet](./morph-wallet) — `balance` to check ETH for gas; + `tx-receipt` to inspect logs if `agent-register` times out +- [morph-altfee](./morph-altfee) — `--fee-token-id` on `agent-register` / + `agent-feedback` +- [morph-x402](./morph-x402) — after `agent-register`, run + `x402-register --save` to make the agent wallet a payment recipient; + `x402-server` exposes a paid endpoint +- [BGW ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md) + (Social Login Wallet) users can do reads after resolving their address from + BGW, but **cannot execute identity writes through this skill today** diff --git a/skills/morph-skill/morph-wallet.md b/skills/morph-skill/morph-wallet.md new file mode 100644 index 000000000..eda024e2d --- /dev/null +++ b/skills/morph-skill/morph-wallet.md @@ -0,0 +1,93 @@ +--- +name: morph-wallet +version: 1.0.0 +description: "Generate a local ETH key pair, query native and ERC-20 balances, send ETH or tokens, and look up tx receipts on Morph (Chain ID 2818). Use when the user asks to create a wallet, check balances, transfer ETH or ERC-20 tokens, or inspect a transaction. Local private key only — for Social Login Wallet flows (TEE-signed), route to BGW instead." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-wallet/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph Wallet + +Wallet operations on Morph L2 via the `morph_api.py` CLI from the +[`morph-l2/morph-skill`](https://github.com/morph-l2/morph-skill) repo. +Outputs JSON; amounts are human-readable (pass `0.1` for 0.1 ETH, not wei). + +## Canonical reference (single source of truth) + +[`skills/morph-wallet/SKILL.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-wallet/SKILL.md) + +This page is a routable summary for human readers. The full command spec, error +codes, and platform-specific install notes live in the upstream repo. + +## When to use + +- "Create a new wallet" → `create-wallet` (offline) +- "How much ETH do I have?" / "What's my USDT balance?" → `balance` / `token-balance` +- "Send 0.1 ETH to 0x…" / "Send 10 USDT to 0x…" → `transfer` / `transfer-token` +- "What happened in this tx?" → `tx-receipt` + +For a **Social Login Wallet** (no local private key, signed inside Bitget Wallet +TEE), route to BGW skills instead — see +[social-wallet-integration ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md). + +## Capability summary + +| Command | Flags | Purpose | +|---|---|---| +| `create-wallet` | (no flags) | Generate ETH key pair locally (offline) | +| `balance` | `--address 0xAddr` | Native ETH balance | +| `token-balance` | `--address 0xAddr --token USDT` | ERC-20 balance by symbol or contract address | +| `transfer` | `--to 0xRecipient --amount 0.01 --private-key 0xKey` | Send ETH | +| `transfer-token` | `--token USDT --to 0xRecipient --amount 10 --private-key 0xKey` | Send ERC-20 (token units) | +| `tx-receipt` | `--hash 0xTxHash` | Receipt: status, gas used, logs | + +## Known token addresses (Morph Mainnet) + +The CLI accepts either a known symbol or a contract address for `--token`. Pass +`""` or `ETH` for native ETH. + +| Symbol | Name | Address | +|---|---|---| +| USDT | USDT | `0xe7cd86e13AC4309349F30B3435a9d337750fC82D` | +| USDT.e | Tether Morph Bridged | `0xc7D67A9cBB121b3b0b9c053DD9f469523243379A` | +| USDC | USD Coin | `0xCfb1186F4e93D60E60a8bDd997427D1F33bc372B` | +| USDC.e | USD Coin Morph Bridged | `0xe34c91815d7fc18A9e2148bcD4241d0a5848b693` | +| WETH | Wrapped Ether | `0x5300000000000000000000000000000000000011` | +| BGB | BitgetToken | `0x389C08Bc23A7317000a1FD76c7c5B0cb0b4640b5` | +| BGB (old) | BitgetToken (old) | `0x55d1f1879969bdbB9960d269974564C58DBc3238` | + +For other tokens, use `token-search` from the [morph-explorer](./morph-explorer) +skill. + +## Safety rules (from upstream) + +1. Always confirm `transfer` / `transfer-token` with the user before signing — + show recipient, amount, and token. +2. Amounts are human-readable. `0.1` means 0.1 ETH, not 0.1 wei. +3. Private keys are used locally for signing only — never sent to any API. +4. `create-wallet` runs offline. +5. For large transfers, verify the recipient address character-by-character. + +## Common workflows + +- **Portfolio check:** `balance` → `token-balance` per token of interest → + `address-tokens` from [morph-explorer](./morph-explorer) for the full list. +- **Safe send:** `balance` (verify funds + gas) → `transfer` / `transfer-token` + → `tx-receipt` (confirm). + +## Pay gas in alt tokens + +`transfer` / `transfer-token` do not accept `--fee-token-id`. To pay gas in +USDT / USDC / etc., use `altfee-send` from the +[morph-altfee](./morph-altfee) skill with the same `--to`, `--value`, or +`--data`. + +## Cross-skill integration + +- [morph-altfee](./morph-altfee) — pay gas in non-ETH tokens +- [morph-explorer](./morph-explorer) — `address-tokens`, `token-search`, + full portfolio queries +- [morph-7702](./morph-7702) — atomic batch (e.g. approve + swap in one tx) +- [morph-x402](./morph-x402) — pay for HTTP-protected resources in USDC diff --git a/skills/morph-skill/morph-x402.md b/skills/morph-skill/morph-x402.md new file mode 100644 index 000000000..d521c7374 --- /dev/null +++ b/skills/morph-skill/morph-x402.md @@ -0,0 +1,95 @@ +--- +name: morph-x402 +version: 1.0.0 +description: "x402 HTTP payment protocol on Morph L2 — pay for and receive USDC payments for API resources. Client side: discover, pay. Merchant side: register, verify, settle, run a paid HTTP server. Uses EIP-3009 gasless USDC transfer authorization." +last_verified: 2026-05-19 +verified_against: + - https://github.com/morph-l2/morph-skill/blob/main/skills/morph-x402/SKILL.md +upstream_repo: https://github.com/morph-l2/morph-skill +--- + +# Morph x402 + +x402 HTTP payment protocol on Morph L2. Pay for or receive USDC for any HTTP +resource. Built on EIP-3009 (gasless USDC transfer authorization, signed by +payer; Facilitator calls `receiveWithAuthorization` on the USDC contract). + +## Canonical reference + +[`skills/morph-x402/SKILL.md` ↗](https://github.com/morph-l2/morph-skill/blob/main/skills/morph-x402/SKILL.md) + +## When to use + +- Check x402 support / discover whether a URL requires payment (no signing) +- Pay for an x402-protected resource with USDC +- Register as a merchant to receive payments +- Verify a payment signature; settle a payment on-chain +- Run a local x402 merchant test server + +## Capability summary + +### Client (payer) side + +| Command | Flags | Purpose | +|---|---|---| +| `x402-supported` | (no flags) | Query Facilitator for supported schemes/networks | +| `x402-discover` | `--url ` | Probe URL for payment requirements (no pay) | +| `x402-pay` | `--url --private-key 0x… [--max-payment 5.0]` | Pay an x402-protected resource (default max **1.0 USDC**) | + +### Merchant (receiver) side + +| Command | Flags | Purpose | +|---|---|---| +| `x402-register` | `--private-key 0x… [--save] [--name myagent]` | Register wallet → HMAC credentials | +| `x402-verify` | `--payload '{…}' --requirements '{…}' --name myagent` | Verify payment signature (no on-chain action) | +| `x402-settle` | `--payload '…' --requirements '…' --name myagent` | Settle on-chain (USDC transfer) | +| `x402-server` | `--pay-to 0x… --price 0.001 [--port 9000] [--path /api/data] [--dev or --name myagent]` | Run a paid HTTP server | + +`x402-server` exposes: +- `/api/free` — free, returns 200 +- `` — 402 → verify payment → 200 + +## Protocol references + +| Item | Value | +|---|---| +| Facilitator URL | `https://morph-rails.morph.network/x402` | +| USDC (Morph) | `0xCfb1186F4e93D60E60a8bDd997427D1F33bc372B` (6 decimals, FiatTokenV2.2) | +| Chain | Morph Mainnet (Chain ID `2818`) | +| Protocol | x402 v2 (`"x402Version":2`) — Coinbase open standard for HTTP 402 payment | +| Scheme | `"scheme":"exact"` | +| Auth type | EIP-3009 gasless USDC transfer authorization | +| HMAC headers | `MORPH-ACCESS-KEY` / `MORPH-ACCESS-SIGN` / `MORPH-ACCESS-TIMESTAMP` | +| Credential storage | `~/.morph-agent/x402-credentials/` (encrypted with AES-256-GCM) | + +## Safety rules (from upstream) + +1. `x402-pay` enforces `--max-payment` (default **1.0 USDC**). Amounts + exceeding the limit are rejected before signing. +2. Always confirm with the user before executing `x402-pay` — show amount, + recipient, and URL. +3. `x402-register` only shows `secretKey` on first creation. **If `--save` is + not used, the key is lost.** +4. Private keys are used locally for signing only — never sent to any API. +5. EIP-7702 delegated EOAs using legacy SimpleDelegation may fail during x402 + settlement (USDC contract `isValidSignature` checks). Verify with + `7702-delegate` ([morph-7702](./morph-7702)) first. + +## Which commands need a private key + +- **Require** `--private-key`: `x402-pay`, `x402-register` +- **Do not** require `--private-key` (work with any wallet type): + `x402-discover`, `x402-supported`, `x402-verify`, `x402-settle`, `x402-server` + +## Cross-skill integration + +- [morph-identity](./morph-identity) — `agent-register` creates the agent + identity; `x402-register` makes its wallet a payment recipient +- [morph-wallet](./morph-wallet) — `token-balance --token USDC` to check USDC + balance before paying +- [morph-7702](./morph-7702) — check with `7702-delegate` first; legacy + SimpleDelegation EOAs may break x402 settlement +- [BGW ↗](https://github.com/morph-l2/morph-skill/blob/main/docs/social-wallet-integration.md): + x402 pay with Social Login Wallet uses agent orchestration + (`x402-discover` here → BGW signs EIP-3009 → agent replays with + `PAYMENT-SIGNATURE` header) diff --git a/skills/morph-tx-cost/SKILL.md b/skills/morph-tx-cost/SKILL.md new file mode 100644 index 000000000..0d8ccf9ba --- /dev/null +++ b/skills/morph-tx-cost/SKILL.md @@ -0,0 +1,88 @@ +--- +name: morph-tx-cost +description: "Morph L2 transaction fee model: L2 execution fee (EIP-1559 gas) plus L1 data/security fee, GasPriceOracle getL1Fee, eth_gasPrice / eth_estimateGas, UI total-fee display, max-ETH sends, and common RPC errors. Use when the user asks about gas cost, tx fees, l1Fee + l2Fee, why fees differ from Ethereum-only math, or fee estimation on Morph — not for AltFeeTx field signing (see docs/about-morph/10-altfeetx.md)." +last_verified: 2026-04-20 +verified_against: + - docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md + - docs/about-morph/10-altfeetx.md + - docs/build-on-morph/sdk/functions/estimateL1GasCost.md + - docs/build-on-morph/sdk/functions/estimateL2GasCost.md +--- + +# Morph Transaction Fees (Execution Playbook) + +## Single Source of Truth + +| Topic | In-repo path | +|-------|--------------| +| **Fee model, formula, RPC, common errors (primary entry)** | `docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md` | +| AltFee: total fee first calculated in ETH (L1+L2), then converted to ERC-20 | `docs/about-morph/10-altfeetx.md` (Fee Calculation) | +| JS/TS: `estimateL1GasCost` / `estimateL2GasCost` etc. | `docs/build-on-morph/sdk/functions/estimateL1GasCost.md`, `estimateL2GasCost.md`; overview in `docs/build-on-morph/sdk/js-sdk.mdx` | + +Details, long explanations, and on-chain notes follow **`4-understand-transaction-cost-on-morph.md`**; this SKILL only provides actionable key points and routing. + +## Core Facts (Quick Reference) + +The total cost of a single transaction on Morph has **two components** (unlike the pure L1 mental model of `gasPrice × gasLimit`): + +1. **L2 execution fee** — Similar to Ethereum: gas consumed by execution and storage × L2 gas price. + - Morph supports **EIP-1559**: `l2_gas_price = l2_base_fee + l2_priority_fee`. + - `l2_execution_fee = l2_gas_price * l2_gas_used`. + +2. **L1 data / security fee** — Transaction data is published to Ethereum for verifiability and security; users bear this cost, and it **typically dominates total cost**. + - The doc provides a formula involving `l1BaseFee`, `commitScalar`, `l1BlobBaseFee`, `blobScalar`, and per-byte pricing for `len(tx_data)`; **read specific parameters from the on-chain Gas Price Oracle**, do not hardcode them. + +**When displaying an estimated fee to users**: show the **sum of L2 execution fee + L1 data fee**, not just `gasPrice * gasLimit`. + +## On-chain Estimation (L1 Data Fee) + +- Predeploy **`GasPriceOracle`** (also called L1 Gas Price Oracle in docs); Morph Mainnet example address is in **`4-understand-transaction-cost-on-morph.md`** via the Explorer link (typically a `0x5300…000f`-style predeploy). +- Call with **raw transaction data**: `getL1Fee(bytes _data) returns (uint256)` to estimate the **L1 data fee**. +- The doc states: once a transaction is processed by the sequencer, the L1 fee the user owes is finalized; subsequent fluctuations do not affect the actual fee deducted for an already-executed transaction (see the Tip on that page). + +## Sending Transactions & RPC Conventions + +- Sending flow is the same as Ethereum: use `eth_gasPrice` to get the current L2 gas price; use `eth_estimateGas` to estimate the gas limit. +- **Insufficient balance** may cause the node to return: + `invalid transaction: insufficient funds for l1Fee + l2Fee + value` (must cover **value, L2 fee, and L1 fee** simultaneously). +- **Gas price too low/too high** may cause Morph to return a custom `-32000` error (see the same doc for error text); handle per the doc's "gas price updates" section (refer to the page). + +## "Send Max ETH" (max send) + +When transferring as much ETH as possible from a user's balance, you must subtract both the estimated **L2 execution fee** and the **L1 data fee** from the intended transfer amount, or an insufficient funds error will occur. + +## Sub-topics → Specific Skills + +| User question focus | Open first | +|---------------------|------------| +| Paying gas with USDT/USDC etc., tx type `0x7f`, `feeTokenID` / `feeLimit` | `docs/about-morph/10-altfeetx.md` | +| Viem/Ethers client, chain preset, SDK package names | **`skills/morph-js-sdk/SKILL.md`** + `docs/build-on-morph/sdk/js-sdk.mdx` | +| Mainnet / Hoodi contract and RPC quick reference | **`skills/morph-contracts/SKILL.md`** (if installed) | + +## Related Skills + +- `morph-js-sdk` — RPC/client usage for `eth_gasPrice`, `eth_estimateGas`, adapters +- `morph-contracts` — `GasPriceOracle` and network constants +- `morph-bridge` — L1↔L2 bridge fees (distinct from per-tx L1 data fee on L2) +- Alt Fee signing: `docs/about-morph/10-altfeetx.md` (not duplicated here) + +## Common Boundary Confusion + +- **This skill**: explains **ETH-denominated** L2+L1 fee structure, display, and RPC errors. +- **AltFee token gas (`10-altfeetx.md`)**: after the total ETH fee is calculated, how to use the Token Registry and a `0x7f` transaction to pay with ERC-20; do not expand RLP/signing details in this skill. +- **Official L1↔L2 bridge (deposits/withdrawals, challenge periods)**: not covered here — see `docs/build-on-morph/build-on-morph/3-bridge-between-morph-and-ethereum.md`; distinct from the gas/L1 data fee of a single L2 tx. + +## Execution Steps (model) + +1. Determine if the user is asking about **fee composition/estimation/UI**, or **paying gas with tokens** — the latter redirects to **`docs/about-morph/10-altfeetx.md`**. +2. For contract addresses and chain IDs, use **morph-contracts** or `docs/` contract chapters — do not hardcode from memory. +3. Before delivering: verify that **total fee = L2 execution + L1 data** is emphasized; verify it points to `4-understand-transaction-cost-on-morph.md` as the authoritative reference. + +## Self-Check + +- [ ] Is **`docs/build-on-morph/build-on-morph/4-understand-transaction-cost-on-morph.md`** listed as the primary source of truth? +- [ ] Are both **L2 execution fee** and **L1 data fee** explicitly stated, with the note that they must be **summed** for display? +- [ ] Is it mentioned that the L1 data fee is estimated via **`getL1Fee`** (GasPrice Oracle), not just by multiplying gas? +- [ ] Does it cover **`insufficient funds for l1Fee + l2Fee + value`** and gas-price-too-low/too-high errors (per the doc)? +- [ ] In "token gas payment" scenarios, does it redirect to **`10-altfeetx.md`** and avoid repeating the AltFee signing table? +- [ ] Does it avoid pasting the full formula derivation inside the SKILL (use "open the above MD file" instead)? diff --git a/skills/morph-verify-contracts/SKILL.md b/skills/morph-verify-contracts/SKILL.md new file mode 100644 index 000000000..278163dc2 --- /dev/null +++ b/skills/morph-verify-contracts/SKILL.md @@ -0,0 +1,94 @@ +--- +name: morph-verify-contracts +description: "Verify smart contracts on the Morph block explorer (Blockscout) using Hardhat, Foundry, or the explorer UI. Use when the user wants to verify a deployed contract on Morph Mainnet (chainId 2818) or Hoodi Testnet (chainId 2910), set up etherscan/blockscout config in hardhat.config.js, run forge verify-contract, or manually verify via Solidity/Vyper methods on explorer.morph.network." +last_verified: 2026-05-14 +verified_against: + - docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md + - docs/build-on-morph/code-examples/1-deploy-contract-on-morph.md + - src/components/config.js +--- + +# Verify Smart Contracts on Morph (Execution Playbook) + +## Authoritative Documentation (single source of truth) + +`docs/build-on-morph/build-on-morph/5-verify-your-smart-contracts.md` + +Site route id: `build-on-morph/build-on-morph/verify-your-smart-contracts` + +Block explorers: +- Mainnet: `https://explorer.morph.network` +- Hoodi Testnet: `https://explorer-hoodi.morph.network` + +## Network Parameters + +| Network | Chain ID | Explorer API URL | +|---------|----------|-----------------| +| Morph Mainnet | 2818 | `https://explorer-api.morph.network/api?` | +| Hoodi Testnet | 2910 | `https://explorer-api-hoodi.morph.network` | + +## Execution Steps + +### Verify with Hardhat + +1. Add to `hardhat.config.js`: + ```js + etherscan: { + apiKey: { morph: 'anything' }, + customChains: [{ + network: 'morph', + chainId: 2818, + urls: { + apiURL: 'https://explorer-api.morph.network/api?', + browserURL: 'https://explorer.morph.network/', + }, + }], + } + ``` +2. Run: `npx hardhat verify --network morph [constructor args]` + +### Verify with Foundry + +```bash +forge verify-contract \ + --chain 2818 \ + --verifier-url https://explorer-api.morph.network/api? \ + --verifier blockscout --watch +``` + +Adjust `--chain` to `2910` for Hoodi Testnet. + +### Verify via Explorer UI + +Navigate to `https://explorer.morph.network` → contract page → "Verify & Publish". Choose one of 6 methods: + +| Method | When to use | +|--------|-------------| +| Solidity (Flattened Source) | Single file; flatten with `forge flatten` first | +| Solidity (Standard JSON Input) | From solc or Remix compiler | +| Solidity (Multi-part files) | Multiple files with adjusted import paths | +| Vyper (Contracts) | Vyper single contract | +| Vyper (Standard JSON Input) | Vyper JSON flow | +| Vyper (Multi-part files) | Multiple Vyper files | + +For all methods: **Compiler version and Optimization settings must exactly match deployment**. + +## Key Pitfalls + +- The `apiKey` value for Morph can be any non-empty string (`'anything'` is valid); Blockscout does not enforce it. +- Flattened Solidity: imported files must be inlined; use `forge flatten --output Flat.sol ./contracts/X.sol`. +- Multi-part files: adjust import paths to same-level references; submit all dependency files together. + +## Related Skills + +- `morph-contracts` — deployed addresses and explorer base URLs +- `morph-js-sdk` — chain objects when verification scripts use the Morph SDK +- `morph-bridge` — gateway contracts if verifying bridge-related deployments + +## Self-Check + +- [ ] Chain ID matches the target network (2818 mainnet / 2910 Hoodi). +- [ ] Compiler version and optimization settings match what was used at deployment. +- [ ] Hardhat config uses `customChains` with the correct `apiURL` and `browserURL`. +- [ ] Foundry command uses `--verifier blockscout` (not etherscan). +- [ ] Flattened source or multi-part imports adjusted before submission. diff --git a/src/components/ApiExplorer/configs/networks.ts b/src/components/ApiExplorer/configs/networks.ts index 26cb92e04..6c256f8da 100644 --- a/src/components/ApiExplorer/configs/networks.ts +++ b/src/components/ApiExplorer/configs/networks.ts @@ -1,6 +1,6 @@ /** * Morph Network Configuration - * Hardcoded network info to avoid @morphchain/core dependency + * Hardcoded network info to avoid @morphnetwork/core dependency */ export const MORPH_MAINNET = { diff --git a/src/components/MarkdownActionsDropdown/index.js b/src/components/MarkdownActionsDropdown/index.js index d6beafefb..b33320f71 100644 --- a/src/components/MarkdownActionsDropdown/index.js +++ b/src/components/MarkdownActionsDropdown/index.js @@ -1,4 +1,5 @@ import React, { useState, useRef, useEffect } from 'react'; +import { isMarkdownActionsPathname } from '../../utils/isMarkdownActionsPathname'; export default function MarkdownActionsDropdown() { const [copied, setCopied] = useState(false); @@ -8,8 +9,7 @@ export default function MarkdownActionsDropdown() { // Get pathname from window.location const currentPath = typeof window !== 'undefined' ? window.location.pathname : ''; - // Only show on docs pages (not blog, homepage, etc.) - const isDocsPage = currentPath.startsWith('/docs/'); + const showMarkdownActions = isMarkdownActionsPathname(currentPath); // Handle click outside to close dropdown useEffect(() => { @@ -33,7 +33,7 @@ export default function MarkdownActionsDropdown() { }; }, [isOpen]); - if (!isDocsPage) { + if (!showMarkdownActions) { return null; } diff --git a/src/theme/Root.js b/src/theme/Root.js index 69e5d8de9..7397d73e8 100644 --- a/src/theme/Root.js +++ b/src/theme/Root.js @@ -3,6 +3,7 @@ import React, { useEffect } from 'react'; import { useLocation } from '@docusaurus/router'; import { createRoot } from 'react-dom/client'; import MarkdownActionsDropdown from '../components/MarkdownActionsDropdown'; +import { isMarkdownActionsPathname } from '../utils/isMarkdownActionsPathname'; export default function Root({ children }) { const { hash, pathname } = useLocation(); @@ -42,8 +43,7 @@ export default function Root({ children }) { let containerElement = null; const injectDropdown = () => { - // Only inject on docs pages - if (!pathname.startsWith('/docs/')) return; + if (!isMarkdownActionsPathname(pathname)) return; // Check if already injected anywhere on the page if (document.querySelector('.markdown-actions-container')) return; diff --git a/src/utils/isAltFee.js b/src/utils/isAltFee.js new file mode 100644 index 000000000..1c31973ac --- /dev/null +++ b/src/utils/isAltFee.js @@ -0,0 +1,74 @@ +/** + * Whether a tx/request payload is AltFee per Morph rules (type, feeTokenID, optional feeLimit). + * CommonJS so Node test runners can `require()` it without package `"type":"module"`. + * + * 1) type: omitted/null → skip; 127 / 127n / "0x7f" (any hex letter case, optional outer whitespace) / "altFee" (case-insensitive) → proceed; otherwise false + * 2) When type is explicitly AltFee: feeTokenID null/omitted → throw (upstream contract violation) + * 3) Core: feeTokenID present and > 0; feeLimit optional — if provided must be >= 0 and finite, else false + * + * @param {object} [params={}] + * @param {number|bigint|string|undefined|null} [params.type] + * @param {number|bigint|undefined|null} [params.feeTokenID] + * @param {number|bigint|undefined|null} [params.feeLimit] + * @returns {boolean} + * @throws {Error} When type is AltFee and `feeTokenID` is `null` or `undefined` + */ +function isAltFeeTypeExplicit(type) { + if (type === undefined || type === null) return false; + if (type === 127) return true; + if (typeof type === 'bigint' && type === 127n) return true; + if (typeof type === 'string') { + const normalized = type.trim().toLowerCase(); + if (normalized === '0x7f') return true; + if (normalized === 'altfee') return true; + } + return false; +} + +function isFeeLimitValid(feeLimit) { + if (typeof feeLimit === 'bigint') { + return feeLimit >= 0n; + } + const n = Number(feeLimit); + return Number.isFinite(n) && n >= 0; +} + +function isPositiveFeeTokenId(feeTokenID) { + if (feeTokenID === undefined || feeTokenID === null) return false; + if (typeof feeTokenID === 'bigint') { + return feeTokenID > 0n; + } + if (typeof feeTokenID === 'number') { + return Number.isFinite(feeTokenID) && Number.isInteger(feeTokenID) && feeTokenID > 0; + } + return false; +} + +function isAltFee(params) { + const p = params === undefined || params === null ? {} : params; + const { type, feeTokenID, feeLimit } = p; + + if (type !== undefined && type !== null) { + if (!isAltFeeTypeExplicit(type)) { + return false; + } + } + + if (isAltFeeTypeExplicit(type) && (feeTokenID === undefined || feeTokenID === null)) { + throw new Error('AltFee: when type is AltFee (0x7f/127/altFee), feeTokenID is required'); + } + + if (!isPositiveFeeTokenId(feeTokenID)) { + return false; + } + + if (feeLimit !== undefined && feeLimit !== null) { + if (!isFeeLimitValid(feeLimit)) { + return false; + } + } + + return true; +} + +module.exports = { isAltFee, isAltFeeTypeExplicit, isFeeLimitValid, isPositiveFeeTokenId }; diff --git a/src/utils/isMarkdownActionsPathname.js b/src/utils/isMarkdownActionsPathname.js new file mode 100644 index 000000000..ff887ab4a --- /dev/null +++ b/src/utils/isMarkdownActionsPathname.js @@ -0,0 +1,15 @@ +/** + * Pathnames where MarkdownActionsDropdown is injected (`docs` + `skills` + `agents` plugins). + * CommonJS so Node test runners can `require()` it without package `"type":"module"`. + * @param {string} pathname + * @returns {boolean} + */ +function isMarkdownActionsPathname(pathname) { + if (typeof pathname !== 'string' || !pathname) return false; + const bases = ['/docs', '/skills', '/agents']; + return bases.some( + (base) => pathname === base || pathname.startsWith(`${base}/`) + ); +} + +module.exports = { isMarkdownActionsPathname };