From acdc308c4922c3f4a554cc5c5abc15d89cae4ac6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 27 Feb 2026 00:14:34 +0000 Subject: [PATCH 01/12] Add MCP spec and SDK upgrade research for workshop refresh Co-authored-by: Kent C. Dodds --- docs/upgrade-research.md | 365 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 365 insertions(+) create mode 100644 docs/upgrade-research.md diff --git a/docs/upgrade-research.md b/docs/upgrade-research.md new file mode 100644 index 0000000..f85fc69 --- /dev/null +++ b/docs/upgrade-research.md @@ -0,0 +1,365 @@ +# MCP upgrade research for workshop refresh (spec + SDK + MCP Apps) + +## Executive summary + +- The core MCP spec has one stable release after October 2025 (`2025-11-25`), plus draft changes since then. +- The biggest shift for this workshop is not in core MCP alone; it is the formalization of **MCP Apps** as an official extension (`SEP-1865`, stable `2026-01-26`), which supersedes the old "MCP-UI as de facto protocol" framing. +- Current workshop materials still teach several legacy MCP-UI patterns (`externalUrl`, `remoteDom`, custom `postMessage` message types, embedded UI resources as primary pattern, `x-origin` header workaround). +- The workshop repo is pinned to `@modelcontextprotocol/sdk@^1.24.3` and `@mcp-ui/server@^5.16.1`; current SDK/recommended ecosystem has moved forward (`typescript-sdk v1.27.1`, `@modelcontextprotocol/ext-apps v1.1.2`, `@mcp-ui/* v6.x`). +- Recommendation: rename this workshop to an **MCP Apps**-first workshop, keep MCP-UI as a transitional utility layer, and redistribute some spec changes to the other three workshops in the series. + +--- + +## Scope and sources used + +### Core MCP spec and release metadata + +- `modelcontextprotocol/modelcontextprotocol` releases via `gh`: + - `2025-11-25` (stable) + - no newer stable core spec release as of today +- Core spec changelog: + - `docs/specification/2025-11-25/changelog.mdx` +- Draft changelog since `2025-11-25`: + - `docs/specification/draft/changelog.mdx` + +### TypeScript SDK changes (requested: all releases since Oct 2025) + +- `modelcontextprotocol/typescript-sdk` release stream via `gh release list/view` +- Included range: `1.19.0` (2025-10-02) through `v1.27.1` (2026-02-24) + +### MCP Apps / MCP-UI evolution + +- Official MCP Apps docs: + - `modelcontextprotocol.io/extensions/apps/overview` + - `modelcontextprotocol.io/extensions/apps/build` + - API docs: `apps.extensions.modelcontextprotocol.io/api/` +- Extension spec repository: + - `modelcontextprotocol/ext-apps` + - stable spec: `specification/2026-01-26/apps.mdx` + - draft spec: `specification/draft/apps.mdx` + - release stream through `v1.1.2` +- MCP-UI repo: + - `idosal/mcp-ui` release notes, notably v6 migration (`mcp-ui -> mcp apps`) + +### Current workshop material analysis + +- Epic Agent indexed context: + - `mcp-ui` workshop (all 5 exercises) + - series siblings: `mcp-fundamentals`, `advanced-mcp-features`, `mcp-auth` +- Local repo review: + - `exercises/README.mdx`, `exercises/FINISHED.mdx` + - representative exercise readmes and utility code + - package dependency versions across exercise workspaces + +--- + +## Current workshop snapshot (what is taught today) + +The current workshop is explicitly positioned as **MCP UI** and teaches: + +1. `createUIResource` with `rawHtml`. +2. `remoteDom` content type with host components (`ui-text`, `ui-button`, etc.). +3. `externalUrl` iframe resources. +4. Custom postMessage message protocol (`tool`, `prompt`, `link`, `intent`, `notify`) + `ui-message-response`. +5. `uiMetadata` fields like: + - `preferred-frame-size` + - `initial-render-data` +6. Host readiness + sizing messages: + - `ui-lifecycle-iframe-ready` + - `ui-size-change` +7. Origin plumbing via a custom `x-origin` header workaround in tool request handling. + +This is coherent for legacy MCP-UI, but no longer aligned to the official MCP Apps-first architecture. + +--- + +## Core MCP spec: added/changed/removed since November 2025 + +## 1) Stable release `2025-11-25` (core MCP) + +### Major additions/changes + +1. OpenID Connect discovery support for authorization server discovery. +2. Icon metadata support for tools/resources/resource templates/prompts. +3. Incremental scope consent via `WWW-Authenticate`. +4. Tool naming guidance. +5. Elicitation schema/result changes (including enum forms). +6. URL mode elicitation. +7. Sampling with tool calling (`tools`, `toolChoice`). +8. OAuth Client ID Metadata Documents (recommended client registration mechanism). +9. Experimental tasks support. + +### Minor additions/changes + +1. JSON Schema 2020-12 as default dialect. +2. Primitive default values in elicitation schemas. +3. Protected resource discovery alignment with RFC 9728 (`WWW-Authenticate` optional fallback semantics). +4. SSE polling clarifications and stream behavior updates. +5. Input validation errors clarified as tool execution errors. +6. Streamable HTTP origin handling clarifications (403 for invalid origins). +7. Optional `description` in `Implementation`. + +### Removed/deprecated + +- No large "hard removals" in the core spec changelog, but behavior expectations tightened in multiple areas (schemas, transport semantics, auth discovery behavior). + +## 2) Draft changes since `2025-11-25` + +1. **`extensions` field** added to `ClientCapabilities` and `ServerCapabilities` to support optional protocol extensions. +2. OpenTelemetry trace-context conventions in `_meta` (`traceparent`, `tracestate`, `baggage`). + +**Why this matters for this workshop:** MCP Apps extension negotiation depends on extension-capability semantics; the workshop should include extension-aware capability gating and graceful fallback. + +--- + +## MCP Apps transition: what changed relative to this workshop + +MCP Apps is now an official extension track with stable spec (`2026-01-26`) and active SDK releases (`ext-apps` >= 1.0, latest 1.1.2). + +### High-impact deltas vs current workshop + +- **Changed architectural center** + - Old: embedded MCP-UI resources returned directly from tool calls as primary path. + - New official: **predeclared UI resources** + tool linkage via `_meta.ui.resourceUri`. + +- **Changed transport semantics** + - Old: custom ad-hoc postMessage message types. + - New: JSON-RPC-based Apps dialect with structured methods/notifications. + +- **Changed content-type baseline** + - Official MVP focuses on `text/html;profile=mcp-app` as baseline. + - `externalUrl`/other formats are deferred in the official MVP narrative. + - Current workshop’s `externalUrl` and `remoteDom` emphasis is now partially off-core-spec path. + +- **Changed capability model** + - Explicit extension support/capability negotiation and graceful degradation expected. + +- **Expanded security model** + - CSP domain declarations, sandbox permissions, optional stable domain behavior, and explicit host mediation patterns are first-class. + +- **New view-host UX hooks** + - Host context, host styles/theming variables, display mode requests, and newer host-mediated operations (e.g. `ui/download-file`) are now concrete teachable concepts. + +### MCP-UI utility status + +- MCP-UI still has value as a practical SDK layer and compatibility adapter. +- `mcp-ui` v6 release notes explicitly indicate migration to MCP Apps and breaking changes ("removed discarded content types, changed mimetype, updated docs, etc."). +- This supports a strategy of teaching **MCP Apps concepts first**, while using MCP-UI selectively as an adapter/tooling utility. + +--- + +## TypeScript SDK releases since October 2025 (significant items to represent) + +Below are the notable changes from `1.19.0` -> `v1.27.1` that should influence workshop content. + +### P0 (must account for in refreshed material) + +1. **Protocol + spec alignment updates** + - `1.24.0` explicitly aligns with spec `2025-11-25`. + - `1.24.1` protocol version bump to `2025-11-25`. + +2. **Tasks support** + - `1.24.0` adds SEP-1686 tasks. + - `v1.27.0` adds streaming methods for elicitation/sampling under tasks. + +3. **Sampling + tool-call interplay** + - `1.23.0` implements sampling with tools constraints/validation. + - `v1.25.3` fixes schema validation edge case for sampling with tools. + +4. **Auth + discovery maturity** + - `1.23.0`/`1.21.x` include auth/discovery/scoping behavior updates. + - `v1.27.0` adds `discoverOAuthServerInfo()` and discovery caching. + - `v1.26.0` includes major security advisory fix. + +5. **Request context evolution** + - `v1.27.0` adds `url` on `RequestInfo`. + - This can replace workshop-specific `x-origin` header workaround patterns. + +6. **Schema strictness and compatibility** + - JSON Schema 2020-12 compatibility updates. + - stricter spec type compliance (`1.25.0`) + output schema update support. + +### P1 (important but can be distributed across workshops) + +1. Icons/types updates (`1.19.0`, `1.25.0` theme property). +2. Resource annotations support (`1.24.2`). +3. Transport robustness and SSE polling behavior (`1.23.x`, `1.24.x` patches). +4. Zod v4 compatibility trajectory (`1.23.0` onward). + +### Current repo dependency gap + +- Current workshop dependency baseline (`@modelcontextprotocol/sdk@^1.24.3`) misses: + - `RequestInfo.url` + - newer discovery helpers/caching + - post-1.24 spec-alignment fixes and security patch set + +--- + +## What directly affects **this** workshop (added / changed / removed) + +## Added (should be added to updated workshop) + +1. Official **MCP Apps** extension framing and terminology. +2. Extension capability negotiation and graceful fallback to non-UI behavior. +3. Predeclared UI resources + `_meta.ui.resourceUri` linkage. +4. `registerAppTool` / `registerAppResource`-style patterns. +5. Host context/theming and display-mode aware UI behavior. +6. CSP/permissions/domain metadata in UI resources. +7. Host-mediated APIs beyond link/tool/prompt (e.g. `ui/download-file`). + +## Changed (current lessons should be rewritten) + +1. Custom MCP-UI message protocol lessons -> JSON-RPC Apps dialect patterns. +2. Embedded-resource-first story -> resource registration and linkage-first story. +3. `x-origin` request-header workaround -> modern request context (`RequestInfo.url`) and cleaner server design. +4. "MCP UI supports these content types" -> "MCP Apps MVP baseline is HTML profile; additional formats are extension/future/adapter territory." + +## Removed / de-emphasized + +1. `remoteDom` as a core, first-class protocol concept (keep as legacy/optional adapter module if desired). +2. `externalUrl` as baseline pattern in the official-spec storyline (can be taught as practical compatibility pattern, not MVP core). +3. Legacy `ui-lifecycle-*` and `ui-message-response` as the primary protocol mental model. + +--- + +## New concepts not currently represented (or underrepresented) + +1. UI extension identifier and extension capability negotiation model. +2. Tool visibility controls (`model` vs `app`) for safer interaction surfaces. +3. Host style variables/fonts and visual adaptation strategy. +4. Display mode request APIs and host-accepted mode handling. +5. Host-mediated file download (`ui/download-file`). +6. Strong CSP/permissions/domain patterns as primary security mechanism. +7. Compatibility strategy across hosts with mixed support (native MCP Apps vs MCP-UI adapter). + +--- + +## Suggested rewrite of this workshop (5-module shape) + +### Module 1: MCP Apps foundations (rename from "Simple") + +- Register app tool + app resource. +- `_meta.ui.resourceUri`, `ui://` URIs, `text/html;profile=mcp-app`. +- Text fallback behavior when UI is unsupported. + +### Module 2: Interactive app runtime (replace "Consistent") + +- App initialization handshake. +- Receiving tool input/result notifications. +- Calling tools from UI via official methods. +- Basic host context usage. + +### Module 3: Security + rendering constraints (replace "Complex") + +- CSP, permissions, domain, border preferences. +- Sizing and container constraints with modern host context concepts. +- De-emphasize `externalUrl` as core; include in legacy appendix if needed. + +### Module 4: Host communication patterns (replace "Interactive") + +- JSON-RPC method mapping (`tools/call`, `ui/message`, `ui/open-link`, etc.). +- Error handling, request/response patterns, cancellation semantics. + +### Module 5: Advanced app patterns (replace "Advanced") + +- Structured outputs + client-side schema checks (still relevant). +- View state/model-context updates. +- `requestDisplayMode`, `ui/download-file`, and practical host capability checks. + +### Optional appendix track + +- "Legacy MCP-UI compatibility mode" + - `@mcp-ui/server` adapter mode + - bridging old `ui-lifecycle-*` messaging to MCP Apps hosts + - migration checklist from legacy widgets + +--- + +## Cross-workshop distribution recommendations (4-workshop series) + +## Keep in this workshop (renamed to MCP Apps) + +- Extension-specific UI architecture and runtime. +- UI security model (CSP/permissions/sandbox). +- UI-to-host interaction APIs and advanced app affordances. + +## Move/emphasize in MCP Fundamentals + +- Updated protocol version framing (`2025-11-25` baseline). +- JSON Schema 2020-12 defaults and practical implications. +- Updated tool naming guidance and implementation metadata hygiene. + +## Move/emphasize in Advanced MCP Features + +- URL elicitation and evolved elicitation schema model. +- Sampling with tools. +- Tasks concepts (and when to use them). +- Icons/resource annotations as richer metadata for UX. + +## Move/emphasize in MCP Auth + +- OIDC discovery updates. +- OAuth client ID metadata docs and DCR expectations. +- Incremental scope consent via `WWW-Authenticate`. +- Discovery edge-case handling and SDK helper updates. + +--- + +## Proposed naming update + +Primary recommendation: + +- **"MCP Apps: Building Interactive UI for MCP"** + +Alternative: + +- **"MCP Apps (with MCP-UI utilities)"** for transition period messaging. + +--- + +## Practical rollout plan (first-half-year refresh) + +## Phase 1 (immediate planning + skeleton) + +1. Rename workshop metadata/title/subtitle. +2. Update intro/outro and module titles to MCP Apps terminology. +3. Decide canonical code path: + - A) `@modelcontextprotocol/ext-apps` native APIs + - B) MCP-UI adapter-first with explicit migration framing +4. Upgrade dependency targets and baseline host support matrix. + +## Phase 2 (content + exercise rewrite) + +1. Rewrite exercises 1-5 around MCP Apps model above. +2. Add one "legacy interoperability" optional lesson. +3. Replace custom message diagrams with JSON-RPC method flows. +4. Remove `x-origin` workaround teaching in favor of current request context patterns. + +## Phase 3 (recording + QA) + +1. Re-record videos aligned to new API names and host support reality. +2. Validate examples in at least: + - Claude or Claude Desktop + - VS Code Copilot + - one additional host (Goose/Postman/MCPJam) +3. Publish migration notes for existing learners from the October 2025 cohort. + +--- + +## Open decisions to resolve before implementation + +1. Do you want the workshop to be strict-spec MVP only (HTML profile), or include practical non-MVP patterns as optional modules? +2. Do you want to standardize on ext-apps APIs in exercises, or keep MCP-UI APIs and explicitly teach the adapter bridge? +3. Which host(s) should be the canonical demo environment for recordings and student debugging? +4. Should `ui/download-file` and display-mode requests be required content or bonus content? + +--- + +## Bottom line + +For this workshop specifically, the biggest required shift is: + +- **from "MCP-UI protocol workshop"** +- **to "MCP Apps official extension workshop"** + +while preserving MCP-UI as a transitional utility for compatibility where useful. From ec9b2e8b3cf53b5676c31e358d4f049cd64e1cc6 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 27 Feb 2026 00:23:37 +0000 Subject: [PATCH 02/12] Refine upgrade research with no-compat policy and draft-risk actions Co-authored-by: Kent C. Dodds --- docs/upgrade-research.md | 127 ++++++++++++++++++++++++++++++--------- 1 file changed, 97 insertions(+), 30 deletions(-) diff --git a/docs/upgrade-research.md b/docs/upgrade-research.md index f85fc69..e96ebb2 100644 --- a/docs/upgrade-research.md +++ b/docs/upgrade-research.md @@ -6,7 +6,20 @@ - The biggest shift for this workshop is not in core MCP alone; it is the formalization of **MCP Apps** as an official extension (`SEP-1865`, stable `2026-01-26`), which supersedes the old "MCP-UI as de facto protocol" framing. - Current workshop materials still teach several legacy MCP-UI patterns (`externalUrl`, `remoteDom`, custom `postMessage` message types, embedded UI resources as primary pattern, `x-origin` header workaround). - The workshop repo is pinned to `@modelcontextprotocol/sdk@^1.24.3` and `@mcp-ui/server@^5.16.1`; current SDK/recommended ecosystem has moved forward (`typescript-sdk v1.27.1`, `@modelcontextprotocol/ext-apps v1.1.2`, `@mcp-ui/* v6.x`). -- Recommendation: rename this workshop to an **MCP Apps**-first workshop, keep MCP-UI as a transitional utility layer, and redistribute some spec changes to the other three workshops in the series. +- Recommendation: rename this workshop to an **MCP Apps** workshop, teach the **current spec as-is**, and intentionally **do not preserve backward compatibility teaching paths**. + +--- + +## Instructional stance for this refresh (explicit) + +This update should follow a strict policy: + +1. **No backward compatibility requirement in curriculum design.** +2. Teach the current stable standards directly: + - Core MCP spec: `2025-11-25` + - MCP Apps extension: `2026-01-26` +3. Remove legacy-first teaching narratives (`remoteDom`, `externalUrl`, custom `ui-lifecycle-*` protocol flow) from the main learning path. +4. If migration/legacy compatibility is documented at all, keep it as short, non-core reference material, not a required exercise path. --- @@ -112,6 +125,41 @@ This is coherent for legacy MCP-UI, but no longer aligned to the official MCP Ap --- +## Draft-spec impact if draft became stable a week after launch + +If you refresh now and a draft lands as stable shortly after, the likely impact areas are: + +### Core MCP draft (`modelcontextprotocol` draft changelog) + +1. **`extensions` in capabilities** + - Impact: medium. + - Why: MCP Apps capability negotiation is already extension-oriented; this is mostly a formalization pressure on how you explain and type capabilities. +2. **Trace context keys in `_meta` (`traceparent`, `tracestate`, `baggage`)** + - Impact: low-to-medium. + - Why: mainly affects observability guidance, middleware, and advanced diagnostics examples. + +### MCP Apps draft (`ext-apps` draft vs `2026-01-26` stable text) + +1. **`ui/download-file` appears in draft** + - Impact: high for curriculum freshness. + - Why: this is a user-visible capability for common export flows (CSV, image, PDF) and likely to be expected quickly in production examples. +2. **Host capability signaling for download support** + - Impact: medium. + - Why: examples should demonstrate capability checks and graceful behavior when unsupported. +3. **Ongoing experimental feature hooks** + - Impact: low-to-medium. + - Why: generally additive; can be handled as optional “watchlist” content. + +### Practical risk profile + +- If you teach stable-only today with no draft awareness: + - You will still be correct. + - But you may look stale quickly on app-host interaction APIs (`ui/download-file`-style features). +- Best mitigation: + - include one “draft watch” slot in your updated outline, but keep the main flow stable-spec accurate. + +--- + ## MCP Apps transition: what changed relative to this workshop MCP Apps is now an official extension track with stable spec (`2026-01-26`) and active SDK releases (`ext-apps` >= 1.0, latest 1.1.2). @@ -144,7 +192,7 @@ MCP Apps is now an official extension track with stable spec (`2026-01-26`) and - MCP-UI still has value as a practical SDK layer and compatibility adapter. - `mcp-ui` v6 release notes explicitly indicate migration to MCP Apps and breaking changes ("removed discarded content types, changed mimetype, updated docs, etc."). -- This supports a strategy of teaching **MCP Apps concepts first**, while using MCP-UI selectively as an adapter/tooling utility. +- For this refresh, that means: use MCP-UI only where it helps implementation ergonomics, but do **not** teach legacy compatibility as a first-class learning objective. --- @@ -214,10 +262,10 @@ Below are the notable changes from `1.19.0` -> `v1.27.1` that should influence w 3. `x-origin` request-header workaround -> modern request context (`RequestInfo.url`) and cleaner server design. 4. "MCP UI supports these content types" -> "MCP Apps MVP baseline is HTML profile; additional formats are extension/future/adapter territory." -## Removed / de-emphasized +## Removed from main curriculum -1. `remoteDom` as a core, first-class protocol concept (keep as legacy/optional adapter module if desired). -2. `externalUrl` as baseline pattern in the official-spec storyline (can be taught as practical compatibility pattern, not MVP core). +1. `remoteDom` as a core protocol concept. +2. `externalUrl` as baseline in the main official-spec storyline. 3. Legacy `ui-lifecycle-*` and `ui-message-response` as the primary protocol mental model. --- @@ -266,13 +314,6 @@ Below are the notable changes from `1.19.0` -> `v1.27.1` that should influence w - View state/model-context updates. - `requestDisplayMode`, `ui/download-file`, and practical host capability checks. -### Optional appendix track - -- "Legacy MCP-UI compatibility mode" - - `@mcp-ui/server` adapter mode - - bridging old `ui-lifecycle-*` messaging to MCP Apps hosts - - migration checklist from legacy widgets - --- ## Cross-workshop distribution recommendations (4-workshop series) @@ -313,7 +354,7 @@ Primary recommendation: Alternative: -- **"MCP Apps (with MCP-UI utilities)"** for transition period messaging. +- **"MCP Apps: Production UI for MCP Servers"** --- @@ -321,19 +362,18 @@ Alternative: ## Phase 1 (immediate planning + skeleton) -1. Rename workshop metadata/title/subtitle. -2. Update intro/outro and module titles to MCP Apps terminology. -3. Decide canonical code path: - - A) `@modelcontextprotocol/ext-apps` native APIs - - B) MCP-UI adapter-first with explicit migration framing -4. Upgrade dependency targets and baseline host support matrix. +1. Lock policy: no backward-compatibility teaching requirements. +2. Rename workshop metadata/title/subtitle. +3. Update intro/outro and module titles to MCP Apps terminology. +4. Standardize implementation path on `@modelcontextprotocol/ext-apps` + current MCP SDK. +5. Upgrade dependency targets and baseline host support matrix. ## Phase 2 (content + exercise rewrite) 1. Rewrite exercises 1-5 around MCP Apps model above. -2. Add one "legacy interoperability" optional lesson. -3. Replace custom message diagrams with JSON-RPC method flows. -4. Remove `x-origin` workaround teaching in favor of current request context patterns. +2. Replace custom message diagrams with JSON-RPC method flows. +3. Remove `x-origin` workaround teaching in favor of current request context patterns. +4. Add one short draft-watch module note (`ui/download-file`, capability negotiation updates) so near-term spec stabilization does not force a full re-record. ## Phase 3 (recording + QA) @@ -346,12 +386,40 @@ Alternative: --- -## Open decisions to resolve before implementation - -1. Do you want the workshop to be strict-spec MVP only (HTML profile), or include practical non-MVP patterns as optional modules? -2. Do you want to standardize on ext-apps APIs in exercises, or keep MCP-UI APIs and explicitly teach the adapter bridge? -3. Which host(s) should be the canonical demo environment for recordings and student debugging? -4. Should `ui/download-file` and display-mode requests be required content or bonus content? +## Recommended actions to take (clear, prioritized) + +## P0 — decide and execute immediately + +1. **Adopt and publish policy:** this workshop refresh teaches current spec only, with no backward-compatibility curriculum requirements. +2. **Rename the workshop now** to MCP Apps terminology across title, intro, learning outcomes, and module names. +3. **Upgrade implementation baseline**: + - `@modelcontextprotocol/ext-apps` (current stable line) + - `@modelcontextprotocol/sdk` (current stable line, not `^1.24.3`) +4. **Rewrite all core exercises** to: + - predeclared resources + `_meta.ui.resourceUri` + - JSON-RPC MCP Apps communication patterns + - capability-gated behavior for non-supporting hosts +5. **Remove legacy-first mechanics** from required path: + - custom `ui-lifecycle-*` protocol flow as primary pattern + - `externalUrl`/`remoteDom` as core protocol concepts + - `x-origin` custom-header workaround + +## P1 — make the refresh resilient to near-term draft stabilization + +1. Add a short “draft watch” segment in the workshop notes covering: + - core draft: `extensions` capability field formalization and trace `_meta` keys + - apps draft: `ui/download-file` and host capability checks +2. Include one optional exercise/task for host-mediated downloads so you are ready if `ui/download-file` is in the next stable cut. +3. Add a pre-publish checklist item: run a 30-minute spec delta pass against draft changelogs within 48 hours of recording/publishing. + +## P2 — recording and launch quality bar + +1. Re-record all videos against the new MCP Apps APIs and terminology. +2. Validate in at least two canonical hosts (recommend: Claude + VS Code Copilot) plus one secondary host. +3. Ship release notes for existing students that explicitly state: + - old MCP-UI protocol path removed from core curriculum + - new MCP Apps-first path and prerequisites + - where to find migration guidance if they are upgrading legacy code --- @@ -361,5 +429,4 @@ For this workshop specifically, the biggest required shift is: - **from "MCP-UI protocol workshop"** - **to "MCP Apps official extension workshop"** - -while preserving MCP-UI as a transitional utility for compatibility where useful. +- with a **current-spec-only** teaching strategy and explicit draft-watch safeguards. From 51bb9b0d244370b31938093496e1d63fdc00889e Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 27 Feb 2026 00:38:05 +0000 Subject: [PATCH 03/12] Add breaking changes section for rerecord impact Co-authored-by: Kent C. Dodds --- docs/upgrade-research.md | 54 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/docs/upgrade-research.md b/docs/upgrade-research.md index e96ebb2..90580e0 100644 --- a/docs/upgrade-research.md +++ b/docs/upgrade-research.md @@ -270,6 +270,60 @@ Below are the notable changes from `1.19.0` -> `v1.27.1` that should influence w --- +## BREAKING CHANGES (requires re-recording) + +Definition used in this section: + +- A change is **breaking for workshop recordings** if it changes exercise solution code, step diffs, exercise structure, or runnable implementation patterns. +- Instruction-only/doc-only edits are **not** included. + +### Breaking change inventory + +1. **Exercise 01 (`simple/raw-html`) solution pattern must change** + - Current solution path: `createUIResource({ content: { type: 'rawHtml' } })` returned directly from tool calls. + - New required path: MCP Apps-first registration flow with predeclared resource + `_meta.ui.resourceUri` linkage (`registerAppTool` / `registerAppResource` style). + - Why this forces rerecord: code and diff walkthroughs change at the first exercise. + +2. **Exercise 02 (`consistent/remote-dom`) is no longer valid as a core spec module** + - Current solution path teaches `remoteDom` content type and imperative host component creation. + - Official MCP Apps core path is HTML profile with JSON-RPC app runtime; `remoteDom` is not a core spec concept to teach in the main track. + - Why this forces rerecord: this exercise is either removed or fully replaced. + +3. **Exercise 03 (`complex/iframe`) step solutions must be rewritten** + - Current path includes `externalUrl`, custom origin propagation (`x-origin` header), and iframe lifecycle messaging. + - New path requires MCP Apps resource linkage + app runtime initialization + host-managed communication patterns. + - Why this forces rerecord: step-level solution code and architecture both change. + +4. **Exercise 04 (`interactive`) messaging utilities must be replaced** + - Current path teaches custom postMessage protocol helpers (`sendMcpMessage`, `sendLinkMcpMessage`, `ui-message-response` correlation). + - New path should use MCP Apps JSON-RPC method model and App runtime APIs (`tools/call`, `ui/message`, `ui/open-link`, etc.). + - Why this forces rerecord: every step solution in this module changes. + +5. **Exercise 05 (`advanced`) render-data and advanced interaction flow must change** + - Current path uses legacy `uiMetadata` + `ui-lifecycle-iframe-render-data` expectations. + - New path should teach MCP Apps host notifications/context flow and modern capability-aware advanced features. + - Why this forces rerecord: both advanced exercise solutions need code changes. + +6. **Exercise structure itself changes (removed/replaced/added modules)** + - Remove or repurpose Remote DOM-first module. + - Add MCP Apps capability negotiation + fallback module content. + - Add/require modern security metadata patterns (CSP/permissions/domain) in runnable exercise code. + - Why this forces rerecord: sequence, checkpoints, and expected outputs change. + +7. **Dependency baseline upgrades change runnable solutions** + - Move off `@modelcontextprotocol/sdk@^1.24.3` and old MCP-UI-centric baseline to current MCP Apps-compatible SDK stack. + - Why this forces rerecord: code scaffolding, imports, and implementation APIs in recorded solutions change. + +### Net result + +If we adopt a strict “teach current spec as-is, no backward compatibility path” policy, this is a **full workshop rerecord**, not a patch release: + +- Multiple exercises are removed/replaced. +- Most (likely all) exercise step solutions change. +- Existing solution videos become structurally inaccurate for the refreshed codebase. + +--- + ## New concepts not currently represented (or underrepresented) 1. UI extension identifier and extension capability negotiation model. From 5d8966a8dad123aff98a66b4d930b43ce4ad1868 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 13:06:37 +0000 Subject: [PATCH 04/12] fix: restore epicshop dependency versions Co-authored-by: Kent C. Dodds --- epicshop/package-lock.json | 3051 +++++++++++++++--------------------- epicshop/package.json | 6 +- 2 files changed, 1303 insertions(+), 1754 deletions(-) diff --git a/epicshop/package-lock.json b/epicshop/package-lock.json index 8fb7426..dafb88c 100644 --- a/epicshop/package-lock.json +++ b/epicshop/package-lock.json @@ -6,11 +6,11 @@ "": { "hasInstallScript": true, "dependencies": { - "@epic-web/workshop-app": "^6.85.0", - "@epic-web/workshop-utils": "^6.85.0", + "@epic-web/workshop-app": "^6.90.3", + "@epic-web/workshop-utils": "^6.90.3", "chokidar": "^5.0.0", "enquirer": "^2.4.1", - "epicshop": "^6.85.0", + "epicshop": "^6.90.3", "execa": "^9.6.1", "fs-extra": "^11.3.2", "match-sorter": "^8.2.0", @@ -36,23 +36,6 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@apm-js-collab/code-transformer": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/@apm-js-collab/code-transformer/-/code-transformer-0.8.2.tgz", - "integrity": "sha512-YRjJjNq5KFSjDUoqu5pFUWrrsvGOxl6c3bu+uMFc9HNNptZ2rNU/TI2nLw4jnhQNtka972Ee2m3uqbvDQtPeCA==", - "license": "Apache-2.0" - }, - "node_modules/@apm-js-collab/tracing-hooks": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/@apm-js-collab/tracing-hooks/-/tracing-hooks-0.3.1.tgz", - "integrity": "sha512-Vu1CbmPURlN5fTboVuKMoJjbO5qcq9fA5YXpskx3dXe/zTBvjODFoerw+69rVBlRLrJpwPqSDqEuJDEKIrTldw==", - "license": "Apache-2.0", - "dependencies": { - "@apm-js-collab/code-transformer": "^0.8.0", - "debug": "^4.4.1", - "module-details-from-path": "^1.0.4" - } - }, "node_modules/@babel/code-frame": { "version": "7.27.1", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz", @@ -314,90 +297,89 @@ } }, "node_modules/@braintree/sanitize-url": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", - "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.2.tgz", + "integrity": "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA==", "license": "MIT" }, "node_modules/@chevrotain/cst-dts-gen": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", - "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-12.0.0.tgz", + "integrity": "sha512-fSL4KXjTl7cDgf0B5Rip9Q05BOrYvkJV/RrBTE/bKDN096E4hN/ySpcBK5B24T76dlQ2i32Zc3PAE27jFnFrKg==", "license": "Apache-2.0", "dependencies": { - "@chevrotain/gast": "11.0.3", - "@chevrotain/types": "11.0.3", - "lodash-es": "4.17.21" + "@chevrotain/gast": "12.0.0", + "@chevrotain/types": "12.0.0" } }, "node_modules/@chevrotain/gast": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", - "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-12.0.0.tgz", + "integrity": "sha512-1ne/m3XsIT8aEdrvT33so0GUC+wkctpUPK6zU9IlOyJLUbR0rg4G7ZiApiJbggpgPir9ERy3FRjT6T7lpgetnQ==", "license": "Apache-2.0", "dependencies": { - "@chevrotain/types": "11.0.3", - "lodash-es": "4.17.21" + "@chevrotain/types": "12.0.0" } }, "node_modules/@chevrotain/regexp-to-ast": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", - "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-12.0.0.tgz", + "integrity": "sha512-p+EW9MaJwgaHguhoqwOtx/FwuGr+DnNn857sXWOi/mClXIkPGl3rn7hGNWvo31HA3vyeQxjqe+H36yZJwYU8cA==", "license": "Apache-2.0" }, "node_modules/@chevrotain/types": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", - "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-12.0.0.tgz", + "integrity": "sha512-S+04vjFQKeuYw0/eW3U52LkAHQsB1ASxsPGsLPUyQgrZ2iNNibQrsidruDzjEX2JYfespXMG0eZmXlhA6z7nWA==", "license": "Apache-2.0" }, "node_modules/@chevrotain/utils": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", - "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-12.0.0.tgz", + "integrity": "sha512-lB59uJoaGIfOOL9knQqQRfhl9g7x8/wqFkp13zTdkRu1huG9kg6IJs1O8hqj9rs6h7orGxHJUKb+mX3rPbWGhA==", "license": "Apache-2.0" }, "node_modules/@conform-to/dom": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@conform-to/dom/-/dom-1.17.1.tgz", - "integrity": "sha512-vpwCodVVWpQ6kbrlu5F85BC99ozDxqcrhmt+YDD81bCwvt6NtiycFID3NQQGQyn+bzmpb4qlF3Ay9YcljnrNHw==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@conform-to/dom/-/dom-1.19.1.tgz", + "integrity": "sha512-h4/T04zgASuiHMVEiXiyQA4jIW9zhpVFbp0HrWCQUDBxd8Zc1JbTarR7cuJyzkmqshC4tdm4VKIHguLp+7AYCw==", "license": "MIT" }, "node_modules/@conform-to/react": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@conform-to/react/-/react-1.17.1.tgz", - "integrity": "sha512-AXj6HMiG0e6mJXzVNDmeQ9FH4LbGA4HdSt+a0Yb09kEnpESkK3zCopFb8RkO8kls4XMQO05KAmaE6KDlhSzprQ==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@conform-to/react/-/react-1.19.1.tgz", + "integrity": "sha512-RrSfpy3B7bn1RoXCztlmQYMs113AWcvtqAluDqAx4yVbbVB+EcHWc3Ze/EXJhbtFDmljT2nMtcx/VY8f2RPGFg==", "license": "MIT", "dependencies": { - "@conform-to/dom": "1.17.1" + "@conform-to/dom": "1.19.1" }, "peerDependencies": { - "react": ">=18" + "react": ">=18", + "react-dom": ">=18" } }, "node_modules/@conform-to/zod": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/@conform-to/zod/-/zod-1.17.1.tgz", - "integrity": "sha512-oFt2OdCrAhNEKjjyc8QAgiykDI9s+RG9nAuxrqGyp/BFXuRPPiu0e+QIVUAxSnWtZ82swtSaf87DI+jTAyhaLg==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@conform-to/zod/-/zod-1.19.1.tgz", + "integrity": "sha512-S/C+Byhk87RdutjCuxhKcDf9lrmTx0V1OrtZPt5zrVG3RqcXVZz3NvLLZ7pNqdSg5DHGvuzPuotGfmPVu936ow==", "license": "MIT", "dependencies": { - "@conform-to/dom": "1.17.1" + "@conform-to/dom": "1.19.1" }, "peerDependencies": { "zod": "^3.21.0 || ^4.0.0" } }, "node_modules/@epic-web/cachified": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@epic-web/cachified/-/cachified-5.6.1.tgz", - "integrity": "sha512-+VKwMhqM43l2s+gX28Telcf6bUJk1Zaj0Ix2i8K4R2QW8WgPE0q3THCnr0xZg5chw35/B4SkHS43an2fqKOFnQ==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@epic-web/cachified/-/cachified-5.6.2.tgz", + "integrity": "sha512-dxXZBBWDTZRelGE805m1ZMua4SGwlc/tGkEAxTU4bQMlfny+zLzLbuX1UF1eqJrO2BtLekchLIA4iDPRxyk+EQ==", "license": "MIT" }, "node_modules/@epic-web/client-hints": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/@epic-web/client-hints/-/client-hints-1.3.8.tgz", - "integrity": "sha512-Ih3Hxd5JAKQ8PU3CSbGe1bd3zlyXAcKTwpy10UvHEcaBz2CLEg59V+xJk202WFX2RvXy532yKTrHa1aE+MdUGQ==", + "version": "1.3.9", + "resolved": "https://registry.npmjs.org/@epic-web/client-hints/-/client-hints-1.3.9.tgz", + "integrity": "sha512-11fcNmJTmw+LGCxth+ctguMSciPj0IRbq1brkA+efNzhshUk0y8OCuwGODrAk3ISmbNSZe8kERHws/M8q4/U+Q==", "license": "MIT" }, "node_modules/@epic-web/invariant": { @@ -423,22 +405,23 @@ } }, "node_modules/@epic-web/workshop-app": { - "version": "6.85.0", - "resolved": "https://registry.npmjs.org/@epic-web/workshop-app/-/workshop-app-6.85.0.tgz", - "integrity": "sha512-AWuduBXIXoeTCYobPXKHpZbIuFqNY4rf1dVTbu6Ed3FlfbFogd3+2ihwUoQfqH8ME/mgZnMW8vLD50eBJdboxg==", - "dependencies": { - "@conform-to/react": "^1.17.0", - "@conform-to/zod": "^1.17.0", - "@epic-web/cachified": "^5.6.1", - "@epic-web/client-hints": "^1.3.8", + "version": "6.90.3", + "resolved": "https://registry.npmjs.org/@epic-web/workshop-app/-/workshop-app-6.90.3.tgz", + "integrity": "sha512-/ZeOFpgyzBKU5BWCqNz5ETwvnrP/NEFLagXlyZ4/Eg7xwsXVuGaP3yaCuei+8q21nM9tg8lAfobLtBOABMDldA==", + "dependencies": { + "@conform-to/react": "^1.19.1", + "@conform-to/zod": "^1.19.1", + "@epic-web/cachified": "^5.6.2", + "@epic-web/client-hints": "^1.3.9", "@epic-web/invariant": "^1.0.0", "@epic-web/remember": "^1.1.0", "@epic-web/restore-scroll": "^2.0.0", - "@epic-web/workshop-presence": "6.85.0", - "@epic-web/workshop-utils": "6.85.0", + "@epic-web/workshop-presence": "6.90.3", + "@epic-web/workshop-utils": "6.90.3", "@mdx-js/mdx": "^3.1.1", - "@mux/mux-player-react": "^3.11.4", + "@mux/mux-player-react": "^3.12.0", "@nasa-gcn/remix-seo": "^2.0.1", + "@pierre/diffs": "^1.1.19", "@radix-ui/react-accordion": "^1.2.12", "@radix-ui/react-dialog": "^1.1.15", "@radix-ui/react-popover": "^1.1.15", @@ -446,63 +429,64 @@ "@radix-ui/react-tabs": "^1.1.13", "@radix-ui/react-toast": "^1.2.15", "@radix-ui/react-tooltip": "^1.2.8", - "@react-router/express": "^7.13.0", - "@react-router/node": "^7.13.0", - "@react-router/remix-routes-option-adapter": "^7.13.0", + "@react-router/express": "^7.14.2", + "@react-router/node": "^7.14.2", + "@react-router/remix-routes-option-adapter": "^7.14.2", "@resvg/resvg-js": "^2.6.2", - "@sentry/profiling-node": "^10.38.0", - "@sentry/react-router": "^10.38.0", - "@sentry/vite-plugin": "^4.9.1", + "@sentry/profiling-node": "^10.50.0", + "@sentry/react-router": "^10.50.0", + "@sentry/vite-plugin": "^5.2.0", "@sindresorhus/slugify": "^3.0.0", "address": "^2.0.3", "ansi-to-html": "^0.7.2", "chalk": "^5.6.2", "chokidar": "^5.0.0", - "close-with-grace": "^2.4.0", + "close-with-grace": "^2.5.0", "clsx": "^2.1.1", "compression": "^1.8.1", "confetti-react": "^2.6.0", "cookie": "^1.1.1", "cross-env": "^10.1.0", "cross-spawn": "^7.0.6", - "dotenv": "^17.3.0", - "esbuild": "^0.27.3", + "dotenv": "^17.4.2", + "esbuild": "^0.28.0", "etag": "^1.8.1", "execa": "^9.6.1", "express": "^5.2.1", "fkill": "^10.0.3", - "framer-motion": "^12.34.0", - "fs-extra": "^11.3.3", - "get-port": "^7.1.0", - "glob": "^13.0.3", - "isbot": "^5.1.35", - "lru-cache": "^11.2.6", - "match-sorter": "^8.2.0", + "framer-motion": "^12.38.0", + "fs-extra": "^11.3.4", + "get-port": "^7.2.0", + "glob": "^13.0.6", + "globby": "^16.2.0", + "isbot": "^5.1.39", + "lru-cache": "^11.3.5", + "match-sorter": "^8.3.0", "md5-hex": "^5.0.0", "mdx-bundler": "^10.1.1", - "media-chrome": "^4.17.2", - "mermaid": "^11.12.2", + "media-chrome": "^4.19.0", + "mermaid": "^11.14.0", "mime-types": "^3.0.2", "morgan": "^1.10.1", - "msw": "^2.12.10", + "msw": "^2.13.6", "open": "^11.0.0", - "openid-client": "^6.8.2", - "p-queue": "^9.1.0", - "partysocket": "^1.1.13", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "react-error-boundary": "^6.1.0", - "react-router": "^7.13.0", + "openid-client": "^6.8.4", + "p-queue": "^9.2.0", + "partysocket": "^1.1.18", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-error-boundary": "^6.1.1", + "react-router": "^7.14.2", "remix-flat-routes": "^0.8.5", - "remix-utils": "^9.0.1", - "satori": "^0.19.2", + "remix-utils": "^9.3.1", + "satori": "^0.26.0", "semver": "^7.7.4", "sonner": "^2.0.7", "source-map-support": "^0.5.21", "spin-delay": "^2.0.1", - "tailwind-merge": "^3.4.0", + "tailwind-merge": "^3.5.0", "vite-env-only": "^3.0.3", - "ws": "^8.19.0", + "ws": "^8.20.0", "zod": "^4.3.6" }, "engines": { @@ -510,67 +494,66 @@ } }, "node_modules/@epic-web/workshop-presence": { - "version": "6.85.0", - "resolved": "https://registry.npmjs.org/@epic-web/workshop-presence/-/workshop-presence-6.85.0.tgz", - "integrity": "sha512-wCNCAFvzzmFVS9g6xmPStIEyMwb6WyvoZy2TjNVLf45P/vOdxNkmdYCaEdSE2jujVmRvRu9t16A5yWMGK4NE6g==", + "version": "6.90.3", + "resolved": "https://registry.npmjs.org/@epic-web/workshop-presence/-/workshop-presence-6.90.3.tgz", + "integrity": "sha512-we6MmgPyuDxsN2H9fD32vvlu9ow7/ZYoeKXQHnVXSuhxQ8myRUVAbhRR5k+BZrEy7Vnqua4xyy0S7nwc5BuL3g==", "dependencies": { - "@epic-web/workshop-utils": "6.85.0", + "@epic-web/workshop-utils": "6.90.3", "zod": "^4.3.6" } }, "node_modules/@epic-web/workshop-utils": { - "version": "6.85.0", - "resolved": "https://registry.npmjs.org/@epic-web/workshop-utils/-/workshop-utils-6.85.0.tgz", - "integrity": "sha512-pdapJXLNoGEf8OmWgMrEMAFH2o7IomNVp2qnvcQfosKrA5iC8cPR7l7fobbYGrdaOBW1+f61Ubfzu+YFSXhNgQ==", + "version": "6.90.3", + "resolved": "https://registry.npmjs.org/@epic-web/workshop-utils/-/workshop-utils-6.90.3.tgz", + "integrity": "sha512-zVqA6A4nnClubdlsiGoWH/xb35SLI/pSVEBh02J44nOzE4ajVorqoJUul2EFnNRxMWd5h21Vig+N1yNK/6D67A==", "dependencies": { - "@epic-web/cachified": "^5.6.1", + "@epic-web/cachified": "^5.6.2", "@epic-web/invariant": "^1.0.0", "@epic-web/remember": "^1.1.0", "@kentcdodds/md-temp": "^10.0.1", "@mdx-js/mdx": "^3.1.1", - "@playwright/test": "^1.58.2", - "@react-router/node": "^7.13.0", - "@sentry/react-router": "^10.38.0", + "@playwright/test": "^1.59.1", + "@react-router/node": "^7.14.2", + "@sentry/react-router": "^10.50.0", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.9.1", "@total-typescript/ts-reset": "^0.6.1", "@types/chai": "^5.2.3", "@types/chai-dom": "^1.11.3", - "@vitest/expect": "^4.0.18", + "@vitest/expect": "^4.1.5", "chai": "^6.2.2", "chai-dom": "^1.12.1", "chalk": "^5.6.2", "chokidar": "^5.0.0", - "close-with-grace": "^2.4.0", + "close-with-grace": "^2.5.0", "cookie": "^1.1.1", "cross-spawn": "^7.0.6", - "dayjs": "^1.11.19", - "esbuild": "^0.27.3", + "dayjs": "^1.11.20", + "esbuild": "^0.28.0", "execa": "^9.6.1", - "find-process": "^2.0.0", + "find-process": "^2.1.1", "fkill": "^10.0.3", - "fs-extra": "^11.3.3", - "globby": "^16.1.0", + "fs-extra": "^11.3.4", + "globby": "^16.2.0", "ignore": "^7.0.5", "json5": "^2.2.3", - "lru-cache": "^11.2.6", + "lru-cache": "^11.3.5", "lz-string": "^1.5.0", "md5-hex": "^5.0.0", "mdast-util-mdx-jsx": "^3.2.0", "mdx-bundler": "^10.1.1", - "p-queue": "^9.1.0", - "parse-git-diff": "^0.0.19", + "p-queue": "^9.2.0", + "parse-git-diff": "^0.0.20", "pkgmgr": "^1.1.1", - "react": "^19.2.4", - "react-dom": "^19.2.4", - "react-router": "^7.13.0", + "react": "^19.2.5", + "react-dom": "^19.2.5", + "react-router": "^7.14.2", "rehype": "^13.0.2", "rehype-autolink-headings": "^7.1.0", "remark": "^15.0.1", "remark-emoji": "^5.0.2", "remark-gfm": "^4.0.1", "shell-quote": "^1.8.3", - "shiki": "^3.22.0", "unified": "^11.0.5", "unist-util-remove-position": "^5.0.0", "unist-util-visit": "^5.1.0", @@ -605,9 +588,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.3.tgz", - "integrity": "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.28.0.tgz", + "integrity": "sha512-lhRUCeuOyJQURhTxl4WkpFTjIsbDayJHih5kZC1giwE+MhIzAb7mEsQMqMf18rHLsrb5qI1tafG20mLxEWcWlA==", "cpu": [ "ppc64" ], @@ -621,9 +604,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.3.tgz", - "integrity": "sha512-i5D1hPY7GIQmXlXhs2w8AWHhenb00+GxjxRncS2ZM7YNVGNfaMxgzSGuO8o8SJzRc/oZwU2bcScvVERk03QhzA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.28.0.tgz", + "integrity": "sha512-wqh0ByljabXLKHeWXYLqoJ5jKC4XBaw6Hk08OfMrCRd2nP2ZQ5eleDZC41XHyCNgktBGYMbqnrJKq/K/lzPMSQ==", "cpu": [ "arm" ], @@ -637,9 +620,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.3.tgz", - "integrity": "sha512-YdghPYUmj/FX2SYKJ0OZxf+iaKgMsKHVPF1MAq/P8WirnSpCStzKJFjOjzsW0QQ7oIAiccHdcqjbHmJxRb/dmg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.28.0.tgz", + "integrity": "sha512-+WzIXQOSaGs33tLEgYPYe/yQHf0WTU0X42Jca3y8NWMbUVhp7rUnw+vAsRC/QiDrdD31IszMrZy+qwPOPjd+rw==", "cpu": [ "arm64" ], @@ -653,9 +636,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.3.tgz", - "integrity": "sha512-IN/0BNTkHtk8lkOM8JWAYFg4ORxBkZQf9zXiEOfERX/CzxW3Vg1ewAhU7QSWQpVIzTW+b8Xy+lGzdYXV6UZObQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.28.0.tgz", + "integrity": "sha512-+VJggoaKhk2VNNqVL7f6S189UzShHC/mR9EE8rDdSkdpN0KflSwWY/gWjDrNxxisg8Fp1ZCD9jLMo4m0OUfeUA==", "cpu": [ "x64" ], @@ -669,9 +652,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.3.tgz", - "integrity": "sha512-Re491k7ByTVRy0t3EKWajdLIr0gz2kKKfzafkth4Q8A5n1xTHrkqZgLLjFEHVD+AXdUGgQMq+Godfq45mGpCKg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.28.0.tgz", + "integrity": "sha512-0T+A9WZm+bZ84nZBtk1ckYsOvyA3x7e2Acj1KdVfV4/2tdG4fzUp91YHx+GArWLtwqp77pBXVCPn2We7Letr0Q==", "cpu": [ "arm64" ], @@ -685,9 +668,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.3.tgz", - "integrity": "sha512-vHk/hA7/1AckjGzRqi6wbo+jaShzRowYip6rt6q7VYEDX4LEy1pZfDpdxCBnGtl+A5zq8iXDcyuxwtv3hNtHFg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.28.0.tgz", + "integrity": "sha512-fyzLm/DLDl/84OCfp2f/XQ4flmORsjU7VKt8HLjvIXChJoFFOIL6pLJPH4Yhd1n1gGFF9mPwtlN5Wf82DZs+LQ==", "cpu": [ "x64" ], @@ -701,9 +684,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.3.tgz", - "integrity": "sha512-ipTYM2fjt3kQAYOvo6vcxJx3nBYAzPjgTCk7QEgZG8AUO3ydUhvelmhrbOheMnGOlaSFUoHXB6un+A7q4ygY9w==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.28.0.tgz", + "integrity": "sha512-l9GeW5UZBT9k9brBYI+0WDffcRxgHQD8ShN2Ur4xWq/NFzUKm3k5lsH4PdaRgb2w7mI9u61nr2gI2mLI27Nh3Q==", "cpu": [ "arm64" ], @@ -717,9 +700,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.3.tgz", - "integrity": "sha512-dDk0X87T7mI6U3K9VjWtHOXqwAMJBNN2r7bejDsc+j03SEjtD9HrOl8gVFByeM0aJksoUuUVU9TBaZa2rgj0oA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.28.0.tgz", + "integrity": "sha512-BXoQai/A0wPO6Es3yFJ7APCiKGc1tdAEOgeTNy3SsB491S3aHn4S4r3e976eUnPdU+NbdtmBuLncYir2tMU9Nw==", "cpu": [ "x64" ], @@ -733,9 +716,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.3.tgz", - "integrity": "sha512-s6nPv2QkSupJwLYyfS+gwdirm0ukyTFNl3KTgZEAiJDd+iHZcbTPPcWCcRYH+WlNbwChgH2QkE9NSlNrMT8Gfw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.28.0.tgz", + "integrity": "sha512-CjaaREJagqJp7iTaNQjjidaNbCKYcd4IDkzbwwxtSvjI7NZm79qiHc8HqciMddQ6CKvJT6aBd8lO9kN/ZudLlw==", "cpu": [ "arm" ], @@ -749,9 +732,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.3.tgz", - "integrity": "sha512-sZOuFz/xWnZ4KH3YfFrKCf1WyPZHakVzTiqji3WDc0BCl2kBwiJLCXpzLzUBLgmp4veFZdvN5ChW4Eq/8Fc2Fg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.28.0.tgz", + "integrity": "sha512-RVyzfb3FWsGA55n6WY0MEIEPURL1FcbhFE6BffZEMEekfCzCIMtB5yyDcFnVbTnwk+CLAgTujmV/Lgvih56W+A==", "cpu": [ "arm64" ], @@ -765,9 +748,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.3.tgz", - "integrity": "sha512-yGlQYjdxtLdh0a3jHjuwOrxQjOZYD/C9PfdbgJJF3TIZWnm/tMd/RcNiLngiu4iwcBAOezdnSLAwQDPqTmtTYg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.28.0.tgz", + "integrity": "sha512-KBnSTt1kxl9x70q+ydterVdl+Cn0H18ngRMRCEQfrbqdUuntQQ0LoMZv47uB97NljZFzY6HcfqEZ2SAyIUTQBQ==", "cpu": [ "ia32" ], @@ -781,9 +764,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.3.tgz", - "integrity": "sha512-WO60Sn8ly3gtzhyjATDgieJNet/KqsDlX5nRC5Y3oTFcS1l0KWba+SEa9Ja1GfDqSF1z6hif/SkpQJbL63cgOA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.28.0.tgz", + "integrity": "sha512-zpSlUce1mnxzgBADvxKXX5sl8aYQHo2ezvMNI8I0lbblJtp8V4odlm3Yzlj7gPyt3T8ReksE6bK+pT3WD+aJRg==", "cpu": [ "loong64" ], @@ -797,9 +780,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.3.tgz", - "integrity": "sha512-APsymYA6sGcZ4pD6k+UxbDjOFSvPWyZhjaiPyl/f79xKxwTnrn5QUnXR5prvetuaSMsb4jgeHewIDCIWljrSxw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.28.0.tgz", + "integrity": "sha512-2jIfP6mmjkdmeTlsX/9vmdmhBmKADrWqN7zcdtHIeNSCH1SqIoNI63cYsjQR8J+wGa4Y5izRcSHSm8K3QWmk3w==", "cpu": [ "mips64el" ], @@ -813,9 +796,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.3.tgz", - "integrity": "sha512-eizBnTeBefojtDb9nSh4vvVQ3V9Qf9Df01PfawPcRzJH4gFSgrObw+LveUyDoKU3kxi5+9RJTCWlj4FjYXVPEA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.28.0.tgz", + "integrity": "sha512-bc0FE9wWeC0WBm49IQMPSPILRocGTQt3j5KPCA8os6VprfuJ7KD+5PzESSrJ6GmPIPJK965ZJHTUlSA6GNYEhg==", "cpu": [ "ppc64" ], @@ -829,9 +812,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.3.tgz", - "integrity": "sha512-3Emwh0r5wmfm3ssTWRQSyVhbOHvqegUDRd0WhmXKX2mkHJe1SFCMJhagUleMq+Uci34wLSipf8Lagt4LlpRFWQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.28.0.tgz", + "integrity": "sha512-SQPZOwoTTT/HXFXQJG/vBX8sOFagGqvZyXcgLA3NhIqcBv1BJU1d46c0rGcrij2B56Z2rNiSLaZOYW5cUk7yLQ==", "cpu": [ "riscv64" ], @@ -845,9 +828,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.3.tgz", - "integrity": "sha512-pBHUx9LzXWBc7MFIEEL0yD/ZVtNgLytvx60gES28GcWMqil8ElCYR4kvbV2BDqsHOvVDRrOxGySBM9Fcv744hw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.28.0.tgz", + "integrity": "sha512-SCfR0HN8CEEjnYnySJTd2cw0k9OHB/YFzt5zgJEwa+wL/T/raGWYMBqwDNAC6dqFKmJYZoQBRfHjgwLHGSrn3Q==", "cpu": [ "s390x" ], @@ -861,9 +844,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.3.tgz", - "integrity": "sha512-Czi8yzXUWIQYAtL/2y6vogER8pvcsOsk5cpwL4Gk5nJqH5UZiVByIY8Eorm5R13gq+DQKYg0+JyQoytLQas4dA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.28.0.tgz", + "integrity": "sha512-us0dSb9iFxIi8srnpl931Nvs65it/Jd2a2K3qs7fz2WfGPHqzfzZTfec7oxZJRNPXPnNYZtanmRc4AL/JwVzHQ==", "cpu": [ "x64" ], @@ -877,9 +860,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.3.tgz", - "integrity": "sha512-sDpk0RgmTCR/5HguIZa9n9u+HVKf40fbEUt+iTzSnCaGvY9kFP0YKBWZtJaraonFnqef5SlJ8/TiPAxzyS+UoA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.28.0.tgz", + "integrity": "sha512-CR/RYotgtCKwtftMwJlUU7xCVNg3lMYZ0RzTmAHSfLCXw3NtZtNpswLEj/Kkf6kEL3Gw+BpOekRX0BYCtklhUw==", "cpu": [ "arm64" ], @@ -893,9 +876,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.3.tgz", - "integrity": "sha512-P14lFKJl/DdaE00LItAukUdZO5iqNH7+PjoBm+fLQjtxfcfFE20Xf5CrLsmZdq5LFFZzb5JMZ9grUwvtVYzjiA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.28.0.tgz", + "integrity": "sha512-nU1yhmYutL+fQ71Kxnhg8uEOdC0pwEW9entHykTgEbna2pw2dkbFSMeqjjyHZoCmt8SBkOSvV+yNmm94aUrrqw==", "cpu": [ "x64" ], @@ -909,9 +892,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.3.tgz", - "integrity": "sha512-AIcMP77AvirGbRl/UZFTq5hjXK+2wC7qFRGoHSDrZ5v5b8DK/GYpXW3CPRL53NkvDqb9D+alBiC/dV0Fb7eJcw==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.28.0.tgz", + "integrity": "sha512-cXb5vApOsRsxsEl4mcZ1XY3D4DzcoMxR/nnc4IyqYs0rTI8ZKmW6kyyg+11Z8yvgMfAEldKzP7AdP64HnSC/6g==", "cpu": [ "arm64" ], @@ -925,9 +908,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.3.tgz", - "integrity": "sha512-DnW2sRrBzA+YnE70LKqnM3P+z8vehfJWHXECbwBmH/CU51z6FiqTQTHFenPlHmo3a8UgpLyH3PT+87OViOh1AQ==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.28.0.tgz", + "integrity": "sha512-8wZM2qqtv9UP3mzy7HiGYNH/zjTA355mpeuA+859TyR+e+Tc08IHYpLJuMsfpDJwoLo1ikIJI8jC3GFjnRClzA==", "cpu": [ "x64" ], @@ -941,9 +924,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.3.tgz", - "integrity": "sha512-NinAEgr/etERPTsZJ7aEZQvvg/A6IsZG/LgZy+81wON2huV7SrK3e63dU0XhyZP4RKGyTm7aOgmQk0bGp0fy2g==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.28.0.tgz", + "integrity": "sha512-FLGfyizszcef5C3YtoyQDACyg95+dndv79i2EekILBofh5wpCa1KuBqOWKrEHZg3zrL3t5ouE5jgr94vA+Wb2w==", "cpu": [ "arm64" ], @@ -957,9 +940,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.3.tgz", - "integrity": "sha512-PanZ+nEz+eWoBJ8/f8HKxTTD172SKwdXebZ0ndd953gt1HRBbhMsaNqjTyYLGLPdoWHy4zLU7bDVJztF5f3BHA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.28.0.tgz", + "integrity": "sha512-1ZgjUoEdHZZl/YlV76TSCz9Hqj9h9YmMGAgAPYd+q4SicWNX3G5GCyx9uhQWSLcbvPW8Ni7lj4gDa1T40akdlw==", "cpu": [ "x64" ], @@ -973,9 +956,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.3.tgz", - "integrity": "sha512-B2t59lWWYrbRDw/tjiWOuzSsFh1Y/E95ofKz7rIVYSQkUYBjfSgf6oeYPNWHToFRr2zx52JKApIcAS/D5TUBnA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.28.0.tgz", + "integrity": "sha512-Q9StnDmQ/enxnpxCCLSg0oo4+34B9TdXpuyPeTedN/6+iXBJ4J+zwfQI28u/Jl40nOYAxGoNi7mFP40RUtkmUA==", "cpu": [ "arm64" ], @@ -989,9 +972,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.3.tgz", - "integrity": "sha512-QLKSFeXNS8+tHW7tZpMtjlNb7HKau0QDpwm49u0vUp9y1WOF+PEzkU84y9GqYaAVW8aH8f3GcBck26jh54cX4Q==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.28.0.tgz", + "integrity": "sha512-zF3ag/gfiCe6U2iczcRzSYJKH1DCI+ByzSENHlM2FcDbEeo5Zd2C86Aq0tKUYAJJ1obRP84ymxIAksZUcdztHA==", "cpu": [ "ia32" ], @@ -1005,9 +988,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.3.tgz", - "integrity": "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.28.0.tgz", + "integrity": "sha512-pEl1bO9mfAmIC+tW5btTmrKaujg3zGtUmWNdCw/xs70FBjwAL3o9OEKNHvNmnyylD6ubxUERiEhdsL0xBQ9efw==", "cpu": [ "x64" ], @@ -1026,6 +1009,72 @@ "integrity": "sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==", "license": "MIT" }, + "node_modules/@fastify/otel": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@fastify/otel/-/otel-0.18.0.tgz", + "integrity": "sha512-3TASCATfw+ctICSb4ymrv7iCm0qJ0N9CarB+CZ7zIJ7KqNbwI5JjyDL1/sxoC0ccTO1Zyd1iQ+oqncPg5FJXaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "MIT", + "dependencies": { + "@opentelemetry/core": "^2.0.0", + "@opentelemetry/instrumentation": "^0.212.0", + "@opentelemetry/semantic-conventions": "^1.28.0", + "minimatch": "^10.2.4" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.9.0" + } + }, + "node_modules/@fastify/otel/node_modules/@opentelemetry/api-logs": { + "version": "0.212.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.212.0.tgz", + "integrity": "sha512-TEEVrLbNROUkYY51sBJGk7lO/OLjuepch8+hmpM6ffMJQ2z/KVCjdHuCFX6fJj8OkJP2zckPjrJzQtXU3IAsFg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api": "^1.3.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@fastify/otel/node_modules/@opentelemetry/instrumentation": { + "version": "0.212.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.212.0.tgz", + "integrity": "sha512-IyXmpNnifNouMOe0I/gX7ENfv2ZCNdYTF0FpCsoBcpbIHzk81Ww9rQTYTnvghszCg7qGrIhNvWC8dhEifgX9Jg==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/api-logs": "0.212.0", + "import-in-the-middle": "^2.0.6", + "require-in-the-middle": "^8.0.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" + } + }, + "node_modules/@fastify/otel/node_modules/import-in-the-middle": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.6.tgz", + "integrity": "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.15.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^2.2.0", + "module-details-from-path": "^1.0.4" + } + }, "node_modules/@floating-ui/core": { "version": "1.7.3", "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", @@ -1071,35 +1120,35 @@ "license": "MIT" }, "node_modules/@iconify/utils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.0.tgz", - "integrity": "sha512-Zlzem1ZXhI1iHeeERabLNzBHdOa4VhQbqAcOQaMKuTuyZCpwKbC2R4Dd0Zo3g9EAc+Y4fiarO8HIHRAth7+skw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.1.tgz", + "integrity": "sha512-MwzoDtw9rO1x+qfgLTV/IVXsHDBqeYZoMIQC8SfxfYSlaSUG+oWiAcoiB1yajAda6mqblm4/1/w2E8tRu7a7Tw==", "license": "MIT", "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", - "mlly": "^1.8.0" + "mlly": "^1.8.2" } }, "node_modules/@inquirer/ansi": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.3.tgz", - "integrity": "sha512-g44zhR3NIKVs0zUesa4iMzExmZpLUdTLRMCStqX3GE5NT6VkPcxQGJ+uC8tDgBUC/vB1rUhUd55cOf++4NZcmw==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-2.0.5.tgz", + "integrity": "sha512-doc2sWgJpbFQ64UflSVd17ibMGDuxO1yKgOgLMwavzESnXjFWJqUeG8saYosqKpHp4kWiM5x1nXvEjbpx90gzw==", "license": "MIT", "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" } }, "node_modules/@inquirer/checkbox": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.0.4.tgz", - "integrity": "sha512-DrAMU3YBGMUAp6ArwTIp/25CNDtDbxk7UjIrrtM25JVVrlVYlVzHh5HR1BDFu9JMyUoZ4ZanzeaHqNDttf3gVg==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-5.1.4.tgz", + "integrity": "sha512-w6KF8ZYRvqHhROkOTHXYC3qIV/KYEu5o12oLqQySvch61vrYtRxNSHTONSdJqWiFJPlCUQAHT5OgOIyuTr+MHQ==", "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/ansi": "^2.0.5", + "@inquirer/core": "^11.1.9", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1114,13 +1163,13 @@ } }, "node_modules/@inquirer/confirm": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.4.tgz", - "integrity": "sha512-WdaPe7foUnoGYvXzH4jp4wH/3l+dBhZ3uwhKjXjwdrq5tEIFaANxj6zrGHxLdsIA0yKM0kFPVcEalOZXBB5ISA==", + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-6.0.12.tgz", + "integrity": "sha512-h9FgGun3QwVYNj5TWIZZ+slii73bMoBFjPfVIGtnFuL4t8gBiNDV9PcSfIzkuxvgquJKt9nr1QzszpBzTbH8Og==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.9", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1135,18 +1184,18 @@ } }, "node_modules/@inquirer/core": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.1.tgz", - "integrity": "sha512-hV9o15UxX46OyQAtaoMqAOxGR8RVl1aZtDx1jHbCtSJy1tBdTfKxLPKf7utsE4cRy4tcmCQ4+vdV+ca+oNxqNA==", + "version": "11.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-11.1.9.tgz", + "integrity": "sha512-BDE4fG22uYh1bGSifcj7JSx119TVYNViMhMu85usp4Fswrzh6M0DV3yld64jA98uOAa2GSQ4Bg4bZRm2d2cwSg==", "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3", + "@inquirer/ansi": "^2.0.5", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5", "cli-width": "^4.1.0", + "fast-wrap-ansi": "^0.2.0", "mute-stream": "^3.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^9.0.2" + "signal-exit": "^4.1.0" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1161,14 +1210,14 @@ } }, "node_modules/@inquirer/editor": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.0.4.tgz", - "integrity": "sha512-QI3Jfqcv6UO2/VJaEFONH8Im1ll++Xn/AJTBn9Xf+qx2M+H8KZAdQ5sAe2vtYlo+mLW+d7JaMJB4qWtK4BG3pw==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-5.1.1.tgz", + "integrity": "sha512-6y11LgmNpmn5D2aB5FgnCfBUBK8ZstwLCalyJmORcJZ/WrhOjm16mu6eSqIx8DnErxDqSLr+Jkp+GP8/Nwd5tA==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", - "@inquirer/external-editor": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.9", + "@inquirer/external-editor": "^3.0.0", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1183,13 +1232,13 @@ } }, "node_modules/@inquirer/expand": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.4.tgz", - "integrity": "sha512-0I/16YwPPP0Co7a5MsomlZLpch48NzYfToyqYAOWtBmaXSB80RiNQ1J+0xx2eG+Wfxt0nHtpEWSRr6CzNVnOGg==", + "version": "5.0.13", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-5.0.13.tgz", + "integrity": "sha512-dF2zvrFo9LshkcB23/O1il13kBkBltWIXzut1evfbuBLXMiGIuC45c+ZQ0uukjCDsvI8OWqun4FRYMnzFCQa3g==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.9", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1204,9 +1253,9 @@ } }, "node_modules/@inquirer/external-editor": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-2.0.3.tgz", - "integrity": "sha512-LgyI7Agbda74/cL5MvA88iDpvdXI2KuMBCGRkbCl2Dg1vzHeOgs+s0SDcXV7b+WZJrv2+ERpWSM65Fpi9VfY3w==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-3.0.0.tgz", + "integrity": "sha512-lDSwMgg+M5rq6JKBYaJwSX6T9e/HK2qqZ1oxmOwn4AQoJE5D+7TumsxLGC02PWS//rkIVqbZv3XA3ejsc9FYvg==", "license": "MIT", "dependencies": { "chardet": "^2.1.1", @@ -1225,22 +1274,22 @@ } }, "node_modules/@inquirer/figures": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.3.tgz", - "integrity": "sha512-y09iGt3JKoOCBQ3w4YrSJdokcD8ciSlMIWsD+auPu+OZpfxLuyz+gICAQ6GCBOmJJt4KEQGHuZSVff2jiNOy7g==", + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-2.0.5.tgz", + "integrity": "sha512-NsSs4kzfm12lNetHwAn3GEuH317IzpwrMCbOuMIVytpjnJ90YYHNwdRgYGuKmVxwuIqSgqk3M5qqQt1cDk0tGQ==", "license": "MIT", "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" } }, "node_modules/@inquirer/input": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.4.tgz", - "integrity": "sha512-4B3s3jvTREDFvXWit92Yc6jF1RJMDy2VpSqKtm4We2oVU65YOh2szY5/G14h4fHlyQdpUmazU5MPCFZPRJ0AOw==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-5.0.12.tgz", + "integrity": "sha512-uiMFBl4LqFzJClh80Q3f9hbOFJ6kgkDWI4LjAeBuyO6EanVVMF69AgOvpi1qdqjDSjDN6578B6nky9ceEpI+1Q==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.9", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1255,13 +1304,13 @@ } }, "node_modules/@inquirer/number": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.4.tgz", - "integrity": "sha512-CmMp9LF5HwE+G/xWsC333TlCzYYbXMkcADkKzcawh49fg2a1ryLc7JL1NJYYt1lJ+8f4slikNjJM9TEL/AljYQ==", + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-4.0.12.tgz", + "integrity": "sha512-/vrwhEf7Xsuh+YlHF4IjSy3g1cyrQuPaSiHIxCEbLu8qnfvrcvJyCkoktOOF+xV9gSb77/G0n3h04RbMDW2sIg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.9", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1276,14 +1325,14 @@ } }, "node_modules/@inquirer/password": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.4.tgz", - "integrity": "sha512-ZCEPyVYvHK4W4p2Gy6sTp9nqsdHQCfiPXIP9LbJVW4yCinnxL/dDDmPaEZVysGrj8vxVReRnpfS2fOeODe9zjg==", + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-5.0.12.tgz", + "integrity": "sha512-CBh7YHju623lxJRcAOo498ZUwIuMy63bqW/vVq0tQAZVv+lkWlHkP9ealYE1utWSisEShY5VMdzIXRmyEODzcQ==", "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", - "@inquirer/type": "^4.0.3" + "@inquirer/ansi": "^2.0.5", + "@inquirer/core": "^11.1.9", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1298,21 +1347,21 @@ } }, "node_modules/@inquirer/prompts": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.2.0.tgz", - "integrity": "sha512-rqTzOprAj55a27jctS3vhvDDJzYXsr33WXTjODgVOru21NvBo9yIgLIAf7SBdSV0WERVly3dR6TWyp7ZHkvKFA==", + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-8.4.2.tgz", + "integrity": "sha512-XJmn/wY4AX56l1BRU+ZjDrFtg9+2uBEi4JvJQj82kwJDQKiPgSn4CEsbfGGygS4Gw6rkL4W18oATjfVfaqub2Q==", "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^5.0.4", - "@inquirer/confirm": "^6.0.4", - "@inquirer/editor": "^5.0.4", - "@inquirer/expand": "^5.0.4", - "@inquirer/input": "^5.0.4", - "@inquirer/number": "^4.0.4", - "@inquirer/password": "^5.0.4", - "@inquirer/rawlist": "^5.2.0", - "@inquirer/search": "^4.1.0", - "@inquirer/select": "^5.0.4" + "@inquirer/checkbox": "^5.1.4", + "@inquirer/confirm": "^6.0.12", + "@inquirer/editor": "^5.1.1", + "@inquirer/expand": "^5.0.13", + "@inquirer/input": "^5.0.12", + "@inquirer/number": "^4.0.12", + "@inquirer/password": "^5.0.12", + "@inquirer/rawlist": "^5.2.8", + "@inquirer/search": "^4.1.8", + "@inquirer/select": "^5.1.4" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1327,13 +1376,13 @@ } }, "node_modules/@inquirer/rawlist": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.0.tgz", - "integrity": "sha512-CciqGoOUMrFo6HxvOtU5uL8fkjCmzyeB6fG7O1vdVAZVSopUBYECOwevDBlqNLyyYmzpm2Gsn/7nLrpruy9RFg==", + "version": "5.2.8", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-5.2.8.tgz", + "integrity": "sha512-Su7FQvp5buZmCymN3PPoYv31ZQQX4ve2j02k7piGgKAWgE+AQRB5YoYVveGXcl3TZ9ldgRMSxj56YfDFmmaqLg==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.9", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1348,14 +1397,14 @@ } }, "node_modules/@inquirer/search": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.0.tgz", - "integrity": "sha512-EAzemfiP4IFvIuWnrHpgZs9lAhWDA0GM3l9F4t4mTQ22IFtzfrk8xbkMLcAN7gmVML9O/i+Hzu8yOUyAaL6BKA==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-4.1.8.tgz", + "integrity": "sha512-fGiHKGD6DyPIYUWxoXnQTeXeyYqSOUrasDMABBmMHUalH/LxkuzY0xVRtimXAt1sUeeyYkVuKQx1bebMuN11Kw==", "license": "MIT", "dependencies": { - "@inquirer/core": "^11.1.1", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/core": "^11.1.9", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1370,15 +1419,15 @@ } }, "node_modules/@inquirer/select": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.0.4.tgz", - "integrity": "sha512-s8KoGpPYMEQ6WXc0dT9blX2NtIulMdLOO3LA1UKOiv7KFWzlJ6eLkEYTDBIi+JkyKXyn8t/CD6TinxGjyLt57g==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-5.1.4.tgz", + "integrity": "sha512-2kWcGKPMLAXAWRp1AH1SLsQmX+j0QjeljyXMUji9WMZC8nRDO0b7qquIGr6143E7KMLt3VAIGNXzwa/6PXQs4Q==", "license": "MIT", "dependencies": { - "@inquirer/ansi": "^2.0.3", - "@inquirer/core": "^11.1.1", - "@inquirer/figures": "^2.0.3", - "@inquirer/type": "^4.0.3" + "@inquirer/ansi": "^2.0.5", + "@inquirer/core": "^11.1.9", + "@inquirer/figures": "^2.0.5", + "@inquirer/type": "^4.0.5" }, "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1393,9 +1442,9 @@ } }, "node_modules/@inquirer/type": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.3.tgz", - "integrity": "sha512-cKZN7qcXOpj1h+1eTTcGDVLaBIHNMT1Rz9JqJP5MnEJ0JhgVWllx7H/tahUp5YEK1qaByH2Itb8wLG/iScD5kw==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-4.0.5.tgz", + "integrity": "sha512-aetVUNeKNc/VriqXlw1NRSW0zhMBB0W4bNbWRJgzRl/3d0QNDQFfk0GO5SDdtjMZVg6o8ZKEiadd7SCCzoOn5Q==", "license": "MIT", "engines": { "node": ">=23.5.0 || ^22.13.0 || ^21.7.0 || ^20.12.0" @@ -1409,123 +1458,6 @@ } } }, - "node_modules/@isaacs/balanced-match": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@isaacs/balanced-match/-/balanced-match-4.0.1.tgz", - "integrity": "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==", - "license": "MIT", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/brace-expansion": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/brace-expansion/-/brace-expansion-5.0.0.tgz", - "integrity": "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==", - "license": "MIT", - "dependencies": { - "@isaacs/balanced-match": "^4.0.1" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.13", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", @@ -1643,12 +1575,12 @@ } }, "node_modules/@mermaid-js/parser": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.6.3.tgz", - "integrity": "sha512-lnjOhe7zyHjc+If7yT4zoedx2vo4sHaTmtkl1+or8BRTnCtDmcTpAjpzDSfCZrshM5bCoz0GyidzadJAH1xobA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.1.0.tgz", + "integrity": "sha512-gxK9ZX2+Fex5zu8LhRQoMeMPEHbc73UKZ0FQ54YrQtUxE1VVhMwzeNtKRPAu5aXks4FasbMe4xB4bWrmq6Jlxw==", "license": "MIT", "dependencies": { - "langium": "3.3.1" + "langium": "^4.0.0" } }, "node_modules/@mjackson/node-fetch-server": { @@ -1658,9 +1590,9 @@ "license": "MIT" }, "node_modules/@mswjs/interceptors": { - "version": "0.41.3", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.3.tgz", - "integrity": "sha512-cXu86tF4VQVfwz8W1SPbhoRyHJkti6mjH/XJIxp40jhO4j2k1m4KYrEykxqWPkFF3vrK4rgQppBh//AwyGSXPA==", + "version": "0.41.6", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.41.6.tgz", + "integrity": "sha512-qmDvJIjcNsZ6tXWy2G9yuCgMPTTn35GMA3dPpSLm7QJVpbQzYdw0ALy1bKoivXnEM3U93/OrK+/M719b+fg84Q==", "license": "MIT", "dependencies": { "@open-draft/deferred-promise": "^2.2.0", @@ -1674,35 +1606,41 @@ "node": ">=18" } }, + "node_modules/@mswjs/interceptors/node_modules/@open-draft/deferred-promise": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", + "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "license": "MIT" + }, "node_modules/@mux/mux-data-google-ima": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/@mux/mux-data-google-ima/-/mux-data-google-ima-0.3.4.tgz", - "integrity": "sha512-j8IOD5kw1qIOkbpipEQRGQ7vXB6+CArrhIAvtvj8YFqy0PHi7JcHk4WR3ZBVy5+5yaRCH+nzHkmJmGsg8g6O5g==", + "version": "0.3.17", + "resolved": "https://registry.npmjs.org/@mux/mux-data-google-ima/-/mux-data-google-ima-0.3.17.tgz", + "integrity": "sha512-4wpH6dYybyZhqLn9qGn/+67Z8MZnQRAdqTFEEZw2bx61M9q01uPYYHxd8qwOnYtUGEeafsdTwVHVxKHGD3oc1A==", "license": "MIT", "dependencies": { - "mux-embed": "5.16.1" + "mux-embed": "5.18.1" } }, "node_modules/@mux/mux-player": { - "version": "3.11.4", - "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.11.4.tgz", - "integrity": "sha512-E7A6GIx3ECXjDIFuhkmuU0PRnnkTluKoi+jCuVtZWDnBLmeM9WxNTVIDyAJQX2Ro/BkTuZChMspObj9OgngLTg==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@mux/mux-player/-/mux-player-3.12.0.tgz", + "integrity": "sha512-6xO6+vDxp3cW8zBOlmu9ALTDVK42N8fA7or4Ao08DQTiyzE7QcIJ7+Iu7cH/tqhfzRTpS3//4cpeHYlpaCeTXw==", "license": "MIT", "dependencies": { - "@mux/mux-video": "0.30.2", - "@mux/playback-core": "0.33.1", - "media-chrome": "~4.17.2", + "@mux/mux-video": "0.30.7", + "@mux/playback-core": "0.34.1", + "media-chrome": "~4.19.0", "player.style": "^0.3.0" } }, "node_modules/@mux/mux-player-react": { - "version": "3.11.4", - "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.11.4.tgz", - "integrity": "sha512-bW0k7eC1d2hmttdWrmRNjiVa77lQ30V8Lz199GnyhwQhBbMa3unEiO5NbcYBuYNZTuXqxgVRiehMktuzbvY7VA==", + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/@mux/mux-player-react/-/mux-player-react-3.12.0.tgz", + "integrity": "sha512-tC+4dKV6iB7Heo8xBC9PhmDeeobQh/9SKu/aqmPjbpVPPfClZ587nKyE1GUj/UcoPFTM58FxqNOArGYqhHb6fg==", "license": "MIT", "dependencies": { - "@mux/mux-player": "3.11.4", - "@mux/playback-core": "0.33.1", + "@mux/mux-player": "3.12.0", + "@mux/playback-core": "0.34.1", "prop-types": "^15.8.1" }, "peerDependencies": { @@ -1720,22 +1658,22 @@ } }, "node_modules/@mux/mux-video": { - "version": "0.30.2", - "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.30.2.tgz", - "integrity": "sha512-JwNH7FwLSmPGdU355LvCL1MWyrMFl2dy6mSzyqiHp+14eBaoRu1Os4Dg2khw5dECJSIm7Z4ZMeDnHQc/rj7/YQ==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/@mux/mux-video/-/mux-video-0.30.7.tgz", + "integrity": "sha512-xZrNVaBAmZkoL0fCGMeAQDji+LYWvZKrtQhXVkAo5CLgik6eeTeMI1kyW5/U+7yEjpe7qXN6dlvZ7nrtuEIUQg==", "license": "MIT", "dependencies": { "@mux/mux-data-google-ima": "^0.3.4", - "@mux/playback-core": "0.33.1", - "castable-video": "~1.1.11", - "custom-media-element": "~1.4.5", - "media-tracks": "~0.3.4" + "@mux/playback-core": "0.34.1", + "castable-video": "~1.1.13", + "custom-media-element": "~1.4.6", + "media-tracks": "~0.3.5" } }, "node_modules/@mux/playback-core": { - "version": "0.33.1", - "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.33.1.tgz", - "integrity": "sha512-lyfvZQuc5UebfJBqjZ+TiFHD3B08otJrNG+pYU2klv6ywYjpvnSCbWBif7YtaC4gIPUJjkErspXWND3w34ctIg==", + "version": "0.34.1", + "resolved": "https://registry.npmjs.org/@mux/playback-core/-/playback-core-0.34.1.tgz", + "integrity": "sha512-JRGLMwL9lQqvbBtMwSe6F4jY/cuef1oxrCAE6Pv/dE34QhLsd/4bhYuUOIcMtzguaevf1K/YQMUW3NSBVNQYuA==", "license": "MIT", "dependencies": { "hls.js": "~1.6.15", @@ -1791,9 +1729,9 @@ } }, "node_modules/@open-draft/deferred-promise": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz", - "integrity": "sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-3.0.0.tgz", + "integrity": "sha512-XW375UK8/9SqUVNVa6M0yEy8+iTi4QN5VZ7aZuRFQmy76LRwI9wy5F4YIBU6T+eTe2/DNDo8tqu8RHlwLHM6RA==", "license": "MIT" }, "node_modules/@open-draft/logger": { @@ -1813,18 +1751,18 @@ "license": "MIT" }, "node_modules/@opentelemetry/api": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", - "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.1.tgz", + "integrity": "sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==", "license": "Apache-2.0", "engines": { "node": ">=8.0.0" } }, "node_modules/@opentelemetry/api-logs": { - "version": "0.211.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.211.0.tgz", - "integrity": "sha512-swFdZq8MCdmdR22jTVGQDhwqDzcI4M10nhjXkLr1EsIzXgZBqm4ZlmmcWsg3TSNf+3mzgOiqveXmBLZuDi2Lgg==", + "version": "0.214.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.214.0.tgz", + "integrity": "sha512-40lSJeqYO8Uz2Yj7u94/SJWE/wONa7rmMKjI1ZcIjgf3MHNHv1OZUCrCETGuaRF62d5pQD1wKIW+L4lmSMTzZA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/api": "^1.3.0" @@ -1833,22 +1771,10 @@ "node": ">=8.0.0" } }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-2.5.0.tgz", - "integrity": "sha512-uOXpVX0ZjO7heSVjhheW2XEPrhQAWr2BScDPoZ9UDycl5iuHG+Usyc3AIfG6kZeC1GyLpMInpQ6X5+9n69yOFw==", - "license": "Apache-2.0", - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.10.0" - } - }, "node_modules/@opentelemetry/core": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.5.0.tgz", - "integrity": "sha512-ka4H8OM6+DlUhSAZpONu0cPBtPPTQKxbxVzC4CzVx5+K4JnroJVBtDzLAMx4/3CDTJXRvVFhpFjtl4SaiTNoyQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.7.0.tgz", + "integrity": "sha512-DT12SXVwV2eoJrGf4nnsvZojxxeQo+LlNAsoYGRRObPWTeN6APiqZ2+nqDCQDvQX40eLi1AePONS0onoASp3yQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/semantic-conventions": "^1.29.0" @@ -1861,13 +1787,13 @@ } }, "node_modules/@opentelemetry/instrumentation": { - "version": "0.211.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.211.0.tgz", - "integrity": "sha512-h0nrZEC/zvI994nhg7EgQ8URIHt0uDTwN90r3qQUdZORS455bbx+YebnGeEuFghUT0HlJSrLF4iHw67f+odY+Q==", + "version": "0.214.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.214.0.tgz", + "integrity": "sha512-MHqEX5Dk59cqVah5LiARMACku7jXSVk9iVDWOea4x3cr7VfdByeDCURK6o1lntT1JS/Tsovw01UJrBhN3/uC5w==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/api-logs": "0.211.0", - "import-in-the-middle": "^2.0.0", + "@opentelemetry/api-logs": "0.214.0", + "import-in-the-middle": "^3.0.0", "require-in-the-middle": "^8.0.0" }, "engines": { @@ -1878,13 +1804,13 @@ } }, "node_modules/@opentelemetry/instrumentation-amqplib": { - "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.58.0.tgz", - "integrity": "sha512-fjpQtH18J6GxzUZ+cwNhWUpb71u+DzT7rFkg5pLssDGaEber91Y2WNGdpVpwGivfEluMlNMZumzjEqfg8DeKXQ==", + "version": "0.61.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-amqplib/-/instrumentation-amqplib-0.61.0.tgz", + "integrity": "sha512-mCKoyTGfRNisge4br0NpOFSy2Z1NnEW8hbCJdUDdJFHrPqVzc4IIBPA/vX0U+LUcQqrQvJX+HMIU0dbDRe0i0Q==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "engines": { @@ -1895,13 +1821,13 @@ } }, "node_modules/@opentelemetry/instrumentation-connect": { - "version": "0.54.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.54.0.tgz", - "integrity": "sha512-43RmbhUhqt3uuPnc16cX6NsxEASEtn8z/cYV8Zpt6EP4p2h9s4FNuJ4Q9BbEQ2C0YlCCB/2crO1ruVz/hWt8fA==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-connect/-/instrumentation-connect-0.57.0.tgz", + "integrity": "sha512-FMEBChnI4FLN5TE9DHwfH7QpNir1JzXno1uz/TAucVdLCyrG0jTrKIcNHt/i30A0M2AunNBCkcd8Ei26dIPKdg==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.27.0", "@types/connect": "3.4.38" }, @@ -1913,29 +1839,12 @@ } }, "node_modules/@opentelemetry/instrumentation-dataloader": { - "version": "0.28.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.28.0.tgz", - "integrity": "sha512-ExXGBp0sUj8yhm6Znhf9jmuOaGDsYfDES3gswZnKr4MCqoBWQdEFn6EoDdt5u+RdbxQER+t43FoUihEfTSqsjA==", + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-dataloader/-/instrumentation-dataloader-0.31.0.tgz", + "integrity": "sha512-f654tZFQXS5YeLDNb9KySrwtg7SnqZN119FauD7acBoTzuLduaiGTNz88ixcVSOOMGZ+EjJu/RFtx5klObC95g==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" - } - }, - "node_modules/@opentelemetry/instrumentation-express": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-express/-/instrumentation-express-0.59.0.tgz", - "integrity": "sha512-pMKV/qnHiW/Q6pmbKkxt0eIhuNEtvJ7sUAyee192HErlr+a1Jx+FZ3WjfmzhQL1geewyGEiPGkmjjAgNY8TgDA==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", - "@opentelemetry/semantic-conventions": "^1.27.0" + "@opentelemetry/instrumentation": "^0.214.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -1945,13 +1854,13 @@ } }, "node_modules/@opentelemetry/instrumentation-fs": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.30.0.tgz", - "integrity": "sha512-n3Cf8YhG7reaj5dncGlRIU7iT40bxPOjsBEA5Bc1a1g6e9Qvb+JFJ7SEiMlPbUw4PBmxE3h40ltE8LZ3zVt6OA==", + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-fs/-/instrumentation-fs-0.33.0.tgz", + "integrity": "sha512-sCZWXGalQ01wr3tAhSR9ucqFJ0phidpAle6/17HVjD6gN8FLmZMK/8sKxdXYHy3PbnlV1P4zeiSVFNKpbFMNLA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0" + "@opentelemetry/instrumentation": "^0.214.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -1961,12 +1870,12 @@ } }, "node_modules/@opentelemetry/instrumentation-generic-pool": { - "version": "0.54.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.54.0.tgz", - "integrity": "sha512-8dXMBzzmEdXfH/wjuRvcJnUFeWzZHUnExkmFJ2uPfa31wmpyBCMxO59yr8f/OXXgSogNgi/uPo9KW9H7LMIZ+g==", + "version": "0.57.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-generic-pool/-/instrumentation-generic-pool-0.57.0.tgz", + "integrity": "sha512-orhmlaK+ZIW9hKU+nHTbXrCSXZcH83AescTqmpamHRobRmYSQwRbD0a1odc0yAzuzOtxYiHiXAnpnIpaSSY7Ow==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0" + "@opentelemetry/instrumentation": "^0.214.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -1976,12 +1885,12 @@ } }, "node_modules/@opentelemetry/instrumentation-graphql": { - "version": "0.58.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.58.0.tgz", - "integrity": "sha512-+yWVVY7fxOs3j2RixCbvue8vUuJ1inHxN2q1sduqDB0Wnkr4vOzVKRYl/Zy7B31/dcPS72D9lo/kltdOTBM3bQ==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-graphql/-/instrumentation-graphql-0.62.0.tgz", + "integrity": "sha512-3YNuLVPUxafXkH1jBAbGsKNsP3XVzcFDhCDCE3OqBwCwShlqQbLMRMFh1T/d5jaVZiGVmSsfof+ICKD2iOV8xg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0" + "@opentelemetry/instrumentation": "^0.214.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -1991,13 +1900,13 @@ } }, "node_modules/@opentelemetry/instrumentation-hapi": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.57.0.tgz", - "integrity": "sha512-Os4THbvls8cTQTVA8ApLfZZztuuqGEeqog0XUnyRW7QVF0d/vOVBEcBCk1pazPFmllXGEdNbbat8e2fYIWdFbw==", + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-hapi/-/instrumentation-hapi-0.60.0.tgz", + "integrity": "sha512-aNljZKYrEa7obLAxd1bCEDxF7kzCLGXTuTJZ8lMR9rIVEjmuKBXN1gfqpm/OB//Zc2zP4iIve1jBp7sr3mQV6w==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.27.0" }, "engines": { @@ -2008,13 +1917,13 @@ } }, "node_modules/@opentelemetry/instrumentation-http": { - "version": "0.211.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.211.0.tgz", - "integrity": "sha512-n0IaQ6oVll9PP84SjbOCwDjaJasWRHi6BLsbMLiT6tNj7QbVOkuA5sk/EfZczwI0j5uTKl1awQPivO/ldVtsqA==", + "version": "0.214.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-http/-/instrumentation-http-0.214.0.tgz", + "integrity": "sha512-FlkDhZDRjDJDcO2LcSCtjRpkal1NJ8y0fBqBhTvfAR3JSYY2jAIj1kSS5IjmEBt4c3aWv+u/lqLuoCDrrKCSKg==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.5.0", - "@opentelemetry/instrumentation": "0.211.0", + "@opentelemetry/core": "2.6.1", + "@opentelemetry/instrumentation": "0.214.0", "@opentelemetry/semantic-conventions": "^1.29.0", "forwarded-parse": "2.1.2" }, @@ -2025,13 +1934,28 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@opentelemetry/instrumentation-http/node_modules/@opentelemetry/core": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-2.6.1.tgz", + "integrity": "sha512-8xHSGWpJP9wBxgBpnqGL0R3PbdWQndL1Qp50qrg71+B28zK5OQmUgcDKLJgzyAAV38t4tOyLMGDD60LneR5W8g==", + "license": "Apache-2.0", + "dependencies": { + "@opentelemetry/semantic-conventions": "^1.29.0" + }, + "engines": { + "node": "^18.19.0 || >=20.6.0" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.10.0" + } + }, "node_modules/@opentelemetry/instrumentation-ioredis": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.59.0.tgz", - "integrity": "sha512-875UxzBHWkW+P4Y45SoFM2AR8f8TzBMD8eO7QXGCyFSCUMP5s9vtt/BS8b/r2kqLyaRPK6mLbdnZznK3XzQWvw==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-ioredis/-/instrumentation-ioredis-0.62.0.tgz", + "integrity": "sha512-ZYt//zcPve8qklaZX+5Z4MkU7UpEkFRrxsf2cnaKYBitqDnsCN69CPAuuMOX6NYdW2rG9sFy7V/QWtBlP5XiNQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.33.0" }, @@ -2043,12 +1967,12 @@ } }, "node_modules/@opentelemetry/instrumentation-kafkajs": { - "version": "0.20.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.20.0.tgz", - "integrity": "sha512-yJXOuWZROzj7WmYCUiyT27tIfqBrVtl1/TwVbQyWPz7rL0r1Lu7kWjD0PiVeTCIL6CrIZ7M2s8eBxsTAOxbNvw==", + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-kafkajs/-/instrumentation-kafkajs-0.23.0.tgz", + "integrity": "sha512-4K+nVo+zI+aDz0Z85SObwbdixIbzS9moIuKJaYsdlzcHYnKOPtB7ya8r8Ezivy/GVIBHiKJVq4tv+BEkgOMLaQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.30.0" }, "engines": { @@ -2059,12 +1983,12 @@ } }, "node_modules/@opentelemetry/instrumentation-knex": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.55.0.tgz", - "integrity": "sha512-FtTL5DUx5Ka/8VK6P1VwnlUXPa3nrb7REvm5ddLUIeXXq4tb9pKd+/ThB1xM/IjefkRSN3z8a5t7epYw1JLBJQ==", + "version": "0.58.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-knex/-/instrumentation-knex-0.58.0.tgz", + "integrity": "sha512-Hc/o8fSsaWxZ8r1Yw4rNDLwTpUopTf4X32y4W6UhlHmW8Wizz8wfhgOKIelSeqFVTKBBPIDUOsQWuIMxBmu8Bw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.1" }, "engines": { @@ -2075,13 +1999,13 @@ } }, "node_modules/@opentelemetry/instrumentation-koa": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.59.0.tgz", - "integrity": "sha512-K9o2skADV20Skdu5tG2bogPKiSpXh4KxfLjz6FuqIVvDJNibwSdu5UvyyBzRVp1rQMV6UmoIk6d3PyPtJbaGSg==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-koa/-/instrumentation-koa-0.62.0.tgz", + "integrity": "sha512-uVip0VuGUQXZ+vFxkKxAUNq8qNl+VFlyHDh/U6IQ8COOEDfbEchdaHnpFrMYF3psZRUuoSIgb7xOeXj00RdwDA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.36.0" }, "engines": { @@ -2092,12 +2016,12 @@ } }, "node_modules/@opentelemetry/instrumentation-lru-memoizer": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.55.0.tgz", - "integrity": "sha512-FDBfT7yDGcspN0Cxbu/k8A0Pp1Jhv/m7BMTzXGpcb8ENl3tDj/51U65R5lWzUH15GaZA15HQ5A5wtafklxYj7g==", + "version": "0.58.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-lru-memoizer/-/instrumentation-lru-memoizer-0.58.0.tgz", + "integrity": "sha512-6grM3TdMyHzlGY1cUA+mwoPueB1F3dYKgKtZIH6jOFXqfHAByyLTc+6PFjGM9tKh52CFBJaDwodNlL/Td39z7Q==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0" + "@opentelemetry/instrumentation": "^0.214.0" }, "engines": { "node": "^18.19.0 || >=20.6.0" @@ -2107,12 +2031,12 @@ } }, "node_modules/@opentelemetry/instrumentation-mongodb": { - "version": "0.64.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.64.0.tgz", - "integrity": "sha512-pFlCJjweTqVp7B220mCvCld1c1eYKZfQt1p3bxSbcReypKLJTwat+wbL2YZoX9jPi5X2O8tTKFEOahO5ehQGsA==", + "version": "0.67.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongodb/-/instrumentation-mongodb-0.67.0.tgz", + "integrity": "sha512-1WJp5N1lYfHq2IhECOTewFs5Tf2NfUOwQRqs/rZdXKTezArMlucxgzAaqcgp3A3YREXopXTpXHsxZTGHjNhMdQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "engines": { @@ -2123,13 +2047,13 @@ } }, "node_modules/@opentelemetry/instrumentation-mongoose": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.57.0.tgz", - "integrity": "sha512-MthiekrU/BAJc5JZoZeJmo0OTX6ycJMiP6sMOSRTkvz5BrPMYDqaJos0OgsLPL/HpcgHP7eo5pduETuLguOqcg==", + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mongoose/-/instrumentation-mongoose-0.60.0.tgz", + "integrity": "sha512-8BahAZpKsOoc+lrZGb7Ofn4g3z8qtp5IxDfvAVpKXsEheQN7ONMH5djT5ihy6yf8yyeQJGS0gXFfpEAEeEHqQg==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0" }, "engines": { @@ -2140,12 +2064,12 @@ } }, "node_modules/@opentelemetry/instrumentation-mysql": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.57.0.tgz", - "integrity": "sha512-HFS/+FcZ6Q7piM7Il7CzQ4VHhJvGMJWjx7EgCkP5AnTntSN5rb5Xi3TkYJHBKeR27A0QqPlGaCITi93fUDs++Q==", + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql/-/instrumentation-mysql-0.60.0.tgz", + "integrity": "sha512-08pO8GFPEIz2zquKDGteBZDNmwketdgH8hTe9rVYgW9kCJXq1Psj3wPQGx+VaX4ZJKCfPeoLMYup9+cxHvZyVQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/mysql": "2.15.27" }, @@ -2157,12 +2081,12 @@ } }, "node_modules/@opentelemetry/instrumentation-mysql2": { - "version": "0.57.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.57.0.tgz", - "integrity": "sha512-nHSrYAwF7+aV1E1V9yOOP9TchOodb6fjn4gFvdrdQXiRE7cMuffyLLbCZlZd4wsspBzVwOXX8mpURdRserAhNA==", + "version": "0.60.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-mysql2/-/instrumentation-mysql2-0.60.0.tgz", + "integrity": "sha512-m/5d3bxQALllCzezYDk/6vajh0tj5OijMMvOZGr+qN1NMXm1dzMNwyJ0gNZW7Fo3YFRyj/jJMxIw+W7d525dlw==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@opentelemetry/sql-common": "^0.41.2" }, @@ -2174,13 +2098,13 @@ } }, "node_modules/@opentelemetry/instrumentation-pg": { - "version": "0.63.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.63.0.tgz", - "integrity": "sha512-dKm/ODNN3GgIQVlbD6ZPxwRc3kleLf95hrRWXM+l8wYo+vSeXtEpQPT53afEf6VFWDVzJK55VGn8KMLtSve/cg==", + "version": "0.66.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-pg/-/instrumentation-pg-0.66.0.tgz", + "integrity": "sha512-KxfLGXBb7k2ueaPJfq2GXBDXBly8P+SpR/4Mj410hhNgmQF3sCqwXvUBQxZQkDAmsdBAoenM+yV1LhtsMRamcA==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.34.0", "@opentelemetry/sql-common": "^0.41.2", "@types/pg": "8.15.6", @@ -2194,12 +2118,12 @@ } }, "node_modules/@opentelemetry/instrumentation-redis": { - "version": "0.59.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.59.0.tgz", - "integrity": "sha512-JKv1KDDYA2chJ1PC3pLP+Q9ISMQk6h5ey+99mB57/ARk0vQPGZTTEb4h4/JlcEpy7AYT8HIGv7X6l+br03Neeg==", + "version": "0.62.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-redis/-/instrumentation-redis-0.62.0.tgz", + "integrity": "sha512-y3pPpot7WzR/8JtHcYlTYsyY8g+pbFhAqbwAuG5bLPnR6v6pt1rQc0DpH0OlGP/9CZbWBP+Zhwp9yFoygf/ZXQ==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/redis-common": "^0.38.2", "@opentelemetry/semantic-conventions": "^1.27.0" }, @@ -2211,12 +2135,12 @@ } }, "node_modules/@opentelemetry/instrumentation-tedious": { - "version": "0.30.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.30.0.tgz", - "integrity": "sha512-bZy9Q8jFdycKQ2pAsyuHYUHNmCxCOGdG6eg1Mn75RvQDccq832sU5OWOBnc12EFUELI6icJkhR7+EQKMBam2GA==", + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-tedious/-/instrumentation-tedious-0.33.0.tgz", + "integrity": "sha512-Q6WQwAD01MMTub31GlejoiFACYNw26J426wyjvU7by7fDIr2nZXNW4vhTGs7i7F0TnXBO3xN688g1tdUgYwJ5w==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/instrumentation": "^0.211.0", + "@opentelemetry/instrumentation": "^0.214.0", "@opentelemetry/semantic-conventions": "^1.33.0", "@types/tedious": "^4.0.14" }, @@ -2227,39 +2151,22 @@ "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@opentelemetry/instrumentation-undici": { - "version": "0.21.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation-undici/-/instrumentation-undici-0.21.0.tgz", - "integrity": "sha512-gok0LPUOTz2FQ1YJMZzaHcOzDFyT64XJ8M9rNkugk923/p6lDGms/cRW1cqgqp6N6qcd6K6YdVHwPEhnx9BWbw==", - "license": "Apache-2.0", - "dependencies": { - "@opentelemetry/core": "^2.0.0", - "@opentelemetry/instrumentation": "^0.211.0", - "@opentelemetry/semantic-conventions": "^1.24.0" - }, - "engines": { - "node": "^18.19.0 || >=20.6.0" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.7.0" - } - }, "node_modules/@opentelemetry/redis-common": { - "version": "0.38.2", - "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.38.2.tgz", - "integrity": "sha512-1BCcU93iwSRZvDAgwUxC/DV4T/406SkMfxGqu5ojc3AvNI+I9GhV7v0J1HljsczuuhcnFLYqD5VmwVXfCGHzxA==", + "version": "0.38.3", + "resolved": "https://registry.npmjs.org/@opentelemetry/redis-common/-/redis-common-0.38.3.tgz", + "integrity": "sha512-VCghU1JYs/4gP6Gqf/xro9MEsZ7LrMv2uONVsaESKL38ZOB9BqnI98FfS23wjMnHlpuE+TTaWSoAVNpTwYXzjw==", "license": "Apache-2.0", "engines": { "node": "^18.19.0 || >=20.6.0" } }, "node_modules/@opentelemetry/resources": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.5.0.tgz", - "integrity": "sha512-F8W52ApePshpoSrfsSk1H2yJn9aKjCrbpQF1M9Qii0GHzbfVeFUB+rc3X4aggyZD8x9Gu3Slua+s6krmq6Dt8g==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-2.7.0.tgz", + "integrity": "sha512-K+oi0hNMv94EpZbnW3eyu2X6SGVpD3O5DhG2NIp65Hc7lhAj9brRXTAVzh3wB82+q3ThakEf7Zd7RsFUqcTc7A==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.5.0", + "@opentelemetry/core": "2.7.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -2270,13 +2177,13 @@ } }, "node_modules/@opentelemetry/sdk-trace-base": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.5.0.tgz", - "integrity": "sha512-VzRf8LzotASEyNDUxTdaJ9IRJ1/h692WyArDBInf5puLCjxbICD6XkHgpuudis56EndyS7LYFmtTMny6UABNdQ==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-2.7.0.tgz", + "integrity": "sha512-Yg9zEXJB50DLVLpsKPk7NmNqlPlS+OvqhJGh0A8oawIOTPOwlm4eXs9BMJV7L79lvEwI+dWtAj+YjTyddV336A==", "license": "Apache-2.0", "dependencies": { - "@opentelemetry/core": "2.5.0", - "@opentelemetry/resources": "2.5.0", + "@opentelemetry/core": "2.7.0", + "@opentelemetry/resources": "2.7.0", "@opentelemetry/semantic-conventions": "^1.29.0" }, "engines": { @@ -2287,9 +2194,9 @@ } }, "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.39.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.39.0.tgz", - "integrity": "sha512-R5R9tb2AXs2IRLNKLBJDynhkfmx7mX0vi8NkhZb3gUkPWHn6HXk5J8iQ/dql0U3ApfWym4kXXmBDRGO+oeOfjg==", + "version": "1.40.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.40.0.tgz", + "integrity": "sha512-cifvXDhcqMwwTlTK04GBNeIe7yyo28Mfby85QXFe1Yk8nmi36Ab/5UQwptOx84SsoGNRg+EVSjwzfSZMy6pmlw==", "license": "Apache-2.0", "engines": { "node": ">=14" @@ -2310,23 +2217,40 @@ "@opentelemetry/api": "^1.1.0" } }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "node_modules/@pierre/diffs": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/@pierre/diffs/-/diffs-1.1.19.tgz", + "integrity": "sha512-eYyDW69heXd7i9zdkWogGYosHzoYF2dstV6uDcmnQAf72uRChs3hrpf/7ym/ayTiwD8a+TQ7oZ5vNNb0tstJvA==", + "license": "apache-2.0", + "dependencies": { + "@pierre/theme": "0.0.28", + "@shikijs/transformers": "^3.0.0", + "diff": "8.0.3", + "hast-util-to-html": "9.0.5", + "lru_map": "0.4.1", + "shiki": "^3.0.0" + }, + "peerDependencies": { + "react": "^18.3.1 || ^19.0.0", + "react-dom": "^18.3.1 || ^19.0.0" + } + }, + "node_modules/@pierre/theme": { + "version": "0.0.28", + "resolved": "https://registry.npmjs.org/@pierre/theme/-/theme-0.0.28.tgz", + "integrity": "sha512-1j/H/fECBuc9dEvntdWI+l435HZapw+RCJTlqCA6BboQ5TjlnE005j/ROWutXIs8aq5OAc82JI2Kwk4A1WWBgw==", "license": "MIT", - "optional": true, "engines": { - "node": ">=14" + "vscode": "^1.0.0" } }, "node_modules/@playwright/test": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.58.2.tgz", - "integrity": "sha512-akea+6bHYBBfA9uQqSYmlJXn61cTa+jbO87xVLCWbTqbWadRVmhxlXATaOjOgcBaWU4ePo0wB41KMFv3o35IXA==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.59.1.tgz", + "integrity": "sha512-PG6q63nQg5c9rIi4/Z5lR5IVF7yU5MqmKaPOe0HSc0O2cX1fPi96sUQu5j7eo4gKCkB2AnNGoWt7y4/Xx3Kcqg==", "license": "Apache-2.0", "dependencies": { - "playwright": "1.58.2" + "playwright": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -2336,9 +2260,9 @@ } }, "node_modules/@prisma/instrumentation": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-7.2.0.tgz", - "integrity": "sha512-Rh9Z4x5kEj1OdARd7U18AtVrnL6rmLSI0qYShaB4W7Wx5BKbgzndWF+QnuzMb7GLfVdlT5aYCXoPQVYuYtVu0g==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/@prisma/instrumentation/-/instrumentation-7.6.0.tgz", + "integrity": "sha512-ZPW2gRiwpPzEfgeZgaekhqXrbW+Y2RJKHVqUmlhZhKzRNCcvR6DykzylDrynpArKKRQtLxoZy36fK7U0p3pdgQ==", "license": "Apache-2.0", "dependencies": { "@opentelemetry/instrumentation": "^0.207.0" @@ -2376,6 +2300,18 @@ "@opentelemetry/api": "^1.3.0" } }, + "node_modules/@prisma/instrumentation/node_modules/import-in-the-middle": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.6.tgz", + "integrity": "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==", + "license": "Apache-2.0", + "dependencies": { + "acorn": "^8.15.0", + "acorn-import-attributes": "^1.9.5", + "cjs-module-lexer": "^2.2.0", + "module-details-from-path": "^1.0.4" + } + }, "node_modules/@radix-ui/number": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.1.tgz", @@ -3160,20 +3096,20 @@ "license": "MIT" }, "node_modules/@react-router/express": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@react-router/express/-/express-7.13.0.tgz", - "integrity": "sha512-9az5P7sjbfxb0l4TtS5tlyV2tI8ZY4dWeuddxK2JLtgWwe+MGGSEO62fY87PidmgTqpQXguT6iyR5RXP9gJucA==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@react-router/express/-/express-7.14.2.tgz", + "integrity": "sha512-IYs61kHfMWsJk/ju4Ts4hw7wblZecfXuIvqQPKEaz+gwpkJMSWDzhPpgmC16EnmBQkXPqMVpsjvNxA/d9p9ehg==", "license": "MIT", "dependencies": { - "@react-router/node": "7.13.0" + "@react-router/node": "7.14.2" }, "engines": { "node": ">=20.0.0" }, "peerDependencies": { "express": "^4.17.1 || ^5", - "react-router": "7.13.0", - "typescript": "^5.1.0" + "react-router": "7.14.2", + "typescript": "^5.1.0 || ^6.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3182,9 +3118,9 @@ } }, "node_modules/@react-router/node": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.13.0.tgz", - "integrity": "sha512-Mhr3fAou19oc/S93tKMIBHwCPfqLpWyWM/m0NWd3pJh/wZin8/9KhAdjwxhYbXw1TrTBZBLDENa35uZ+Y7oh3A==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@react-router/node/-/node-7.14.2.tgz", + "integrity": "sha512-8zxVfgKOXjk0k8YxSBDTFyNAuVdr+og1wFbQpmJJOxo7ObxfI81EbHenyyxGvFiw77rNFLS9Dqgnv5xZgHZfCw==", "license": "MIT", "dependencies": { "@mjackson/node-fetch-server": "^0.2.0" @@ -3193,8 +3129,8 @@ "node": ">=20.0.0" }, "peerDependencies": { - "react-router": "7.13.0", - "typescript": "^5.1.0" + "react-router": "7.14.2", + "typescript": "^5.1.0 || ^6.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3203,16 +3139,16 @@ } }, "node_modules/@react-router/remix-routes-option-adapter": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/@react-router/remix-routes-option-adapter/-/remix-routes-option-adapter-7.13.0.tgz", - "integrity": "sha512-Ydnx4mv+E6ZFtf91g188ieHzakExMkRS1ki/x2osrwN75q8Kq8yZlzKky3Fyr0wpsBiZA7SeZBZKaRX2QW4BqQ==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@react-router/remix-routes-option-adapter/-/remix-routes-option-adapter-7.14.2.tgz", + "integrity": "sha512-jrEhufxLH2dSvGiQMXCgB0vux3oF+cEzC33KZFD/TYIWh+zgYcXylvjQbzb/0jKXIkmHqt3MSkom0SrABP+c7Q==", "license": "MIT", "engines": { "node": ">=20.0.0" }, "peerDependencies": { - "@react-router/dev": "^7.13.0", - "typescript": "^5.1.0" + "@react-router/dev": "^7.14.2", + "typescript": "^5.1.0 || ^6.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3442,24 +3378,24 @@ "license": "MIT" }, "node_modules/@sentry-internal/browser-utils": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.38.0.tgz", - "integrity": "sha512-UOJtYmdcxHCcV0NPfXFff/a95iXl/E0EhuQ1y0uE0BuZDMupWSF5t2BgC4HaE5Aw3RTjDF3XkSHWoIF6ohy7eA==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-10.50.0.tgz", + "integrity": "sha512-42bxyRTxnCmYlWnvz4CxikuQNanw8UNma2WJrtxJ0f1MAJV2GhQGSHDLnA+lvFlmiz6qct3pfen/NXGyOTegTA==", "license": "MIT", "dependencies": { - "@sentry/core": "10.38.0" + "@sentry/core": "10.50.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/feedback": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.38.0.tgz", - "integrity": "sha512-JXneg9zRftyfy1Fyfc39bBlF/Qd8g4UDublFFkVvdc1S6JQPlK+P6q22DKz3Pc8w3ySby+xlIq/eTu9Pzqi4KA==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-10.50.0.tgz", + "integrity": "sha512-0k9XZF0wn86f77mIO2U3gNNyDZooy139CnEanRzHinrN106vVzvBZ6TUEQoHtoO1fqQxr+nWWVrqV/PXUqk47w==", "license": "MIT", "dependencies": { - "@sentry/core": "10.38.0" + "@sentry/core": "10.50.0" }, "engines": { "node": ">=18" @@ -3480,73 +3416,72 @@ } }, "node_modules/@sentry-internal/replay": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.38.0.tgz", - "integrity": "sha512-YWIkL6/dnaiQyFiZXJ/nN+NXGv/15z45ia86bE/TMq01CubX/DUOilgsFz0pk2v/pg3tp/U2MskLO9Hz0cnqeg==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-10.50.0.tgz", + "integrity": "sha512-51FYNfnvVLAWw1rrEWPFfwHuMRb9mkVCFGA4J9/un7SpeGBsQDziGB0Di4fsCxI7+EdSBpfLHPF0csKtCCw0oQ==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.38.0", - "@sentry/core": "10.38.0" + "@sentry-internal/browser-utils": "10.50.0", + "@sentry/core": "10.50.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry-internal/replay-canvas": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.38.0.tgz", - "integrity": "sha512-OXWM9jEqNYh4VTvrMu7v+z1anz+QKQ/fZXIZdsO7JTT2lGNZe58UUMeoq386M+Saxen8F9SUH7yTORy/8KI5qw==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-10.50.0.tgz", + "integrity": "sha512-jx6RKBmcJSWdI92qDGS/sBv1w+7Cww879Z/moX7bw7ipHa/Ts3iDcB3rgZwvhmi17U+mvYsbJeL2DXkPo3TjPw==", "license": "MIT", "dependencies": { - "@sentry-internal/replay": "10.38.0", - "@sentry/core": "10.38.0" + "@sentry-internal/replay": "10.50.0", + "@sentry/core": "10.50.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry/babel-plugin-component-annotate": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-4.9.1.tgz", - "integrity": "sha512-0gEoi2Lb54MFYPOmdTfxlNKxI7kCOvNV7gP8lxMXJ7nCazF5OqOOZIVshfWjDLrc0QrSV6XdVvwPV9GDn4wBMg==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@sentry/babel-plugin-component-annotate/-/babel-plugin-component-annotate-5.2.0.tgz", + "integrity": "sha512-8LbOI5Kzb5F0+7LVQPi2+zGz1iPiRRFhM+7uZ/ZQ33L9BmDOYNIy3xWxCfMw2JCuMXXaxF47XCjGmR22/B0WPg==", "license": "MIT", "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@sentry/browser": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.38.0.tgz", - "integrity": "sha512-3phzp1YX4wcQr9mocGWKbjv0jwtuoDBv7+Y6Yfrys/kwyaL84mDLjjQhRf4gL5SX7JdYkhBp4WaiNlR0UC4kTA==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-10.50.0.tgz", + "integrity": "sha512-1f6rAvET6myiTaSeYqvaaBwvq1LfxqWjAPIoAW/NVC9bPMkeEcuvgDajHrnZMrBeWoJ81NMyoLkyX+iOc7MoFA==", "license": "MIT", "dependencies": { - "@sentry-internal/browser-utils": "10.38.0", - "@sentry-internal/feedback": "10.38.0", - "@sentry-internal/replay": "10.38.0", - "@sentry-internal/replay-canvas": "10.38.0", - "@sentry/core": "10.38.0" + "@sentry-internal/browser-utils": "10.50.0", + "@sentry-internal/feedback": "10.50.0", + "@sentry-internal/replay": "10.50.0", + "@sentry-internal/replay-canvas": "10.50.0", + "@sentry/core": "10.50.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry/bundler-plugin-core": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-4.9.1.tgz", - "integrity": "sha512-moii+w7N8k8WdvkX7qCDY9iRBlhgHlhTHTUQwF2FNMhBHuqlNpVcSJJqJMjFUQcjYMBDrZgxhfKV18bt5ixwlQ==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@sentry/bundler-plugin-core/-/bundler-plugin-core-5.2.0.tgz", + "integrity": "sha512-+C0x4gEIJRgoMwyRFGx+TFiJ1Po2BZlT1v61+PnouiaprKL5qtZG8n5PXx/5LPLDsVjSIcXjnDrTz9aSm8SJ3w==", "license": "MIT", "dependencies": { "@babel/core": "^7.18.5", - "@sentry/babel-plugin-component-annotate": "4.9.1", - "@sentry/cli": "^2.57.0", + "@sentry/babel-plugin-component-annotate": "5.2.0", + "@sentry/cli": "^2.58.5", "dotenv": "^16.3.1", "find-up": "^5.0.0", - "glob": "^10.5.0", - "magic-string": "0.30.8", - "unplugin": "1.0.1" + "glob": "^13.0.6", + "magic-string": "~0.30.8" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@sentry/bundler-plugin-core/node_modules/dotenv": { @@ -3561,53 +3496,10 @@ "url": "https://dotenvx.com" } }, - "node_modules/@sentry/bundler-plugin-core/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", - "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@sentry/bundler-plugin-core/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", - "license": "ISC" - }, - "node_modules/@sentry/bundler-plugin-core/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/@sentry/cli": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.4.tgz", - "integrity": "sha512-ArDrpuS8JtDYEvwGleVE+FgR+qHaOp77IgdGSacz6SZy6Lv90uX0Nu4UrHCQJz8/xwIcNxSqnN22lq0dH4IqTg==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli/-/cli-2.58.5.tgz", + "integrity": "sha512-tavJ7yGUZV+z3Ct2/ZB6mg339i08sAk6HDkgqmSRuQEu2iLS5sl9HIvuXfM6xjv8fwlgFOSy++WNABNAcGHUbg==", "hasInstallScript": true, "license": "FSL-1.1-MIT", "dependencies": { @@ -3624,20 +3516,20 @@ "node": ">= 10" }, "optionalDependencies": { - "@sentry/cli-darwin": "2.58.4", - "@sentry/cli-linux-arm": "2.58.4", - "@sentry/cli-linux-arm64": "2.58.4", - "@sentry/cli-linux-i686": "2.58.4", - "@sentry/cli-linux-x64": "2.58.4", - "@sentry/cli-win32-arm64": "2.58.4", - "@sentry/cli-win32-i686": "2.58.4", - "@sentry/cli-win32-x64": "2.58.4" + "@sentry/cli-darwin": "2.58.5", + "@sentry/cli-linux-arm": "2.58.5", + "@sentry/cli-linux-arm64": "2.58.5", + "@sentry/cli-linux-i686": "2.58.5", + "@sentry/cli-linux-x64": "2.58.5", + "@sentry/cli-win32-arm64": "2.58.5", + "@sentry/cli-win32-i686": "2.58.5", + "@sentry/cli-win32-x64": "2.58.5" } }, "node_modules/@sentry/cli-darwin": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.58.4.tgz", - "integrity": "sha512-kbTD+P4X8O+nsNwPxCywtj3q22ecyRHWff98rdcmtRrvwz8CKi/T4Jxn/fnn2i4VEchy08OWBuZAqaA5Kh2hRQ==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-darwin/-/cli-darwin-2.58.5.tgz", + "integrity": "sha512-lYrNzenZFJftfwSya7gwrHGxtE+Kob/e1sr9lmHMFOd4utDlmq0XFDllmdZAMf21fxcPRI1GL28ejZ3bId01fQ==", "license": "FSL-1.1-MIT", "optional": true, "os": [ @@ -3648,9 +3540,9 @@ } }, "node_modules/@sentry/cli-linux-arm": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.58.4.tgz", - "integrity": "sha512-rdQ8beTwnN48hv7iV7e7ZKucPec5NJkRdrrycMJMZlzGBPi56LqnclgsHySJ6Kfq506A2MNuQnKGaf/sBC9REA==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm/-/cli-linux-arm-2.58.5.tgz", + "integrity": "sha512-KtHweSIomYL4WVDrBrYSYJricKAAzxUgX86kc6OnlikbyOhoK6Fy8Vs6vwd52P6dvWPjgrMpUYjW2M5pYXQDUw==", "cpu": [ "arm" ], @@ -3666,9 +3558,9 @@ } }, "node_modules/@sentry/cli-linux-arm64": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.58.4.tgz", - "integrity": "sha512-0g0KwsOozkLtzN8/0+oMZoOuQ0o7W6O+hx+ydVU1bktaMGKEJLMAWxOQNjsh1TcBbNIXVOKM/I8l0ROhaAb8Ig==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-arm64/-/cli-linux-arm64-2.58.5.tgz", + "integrity": "sha512-/4gywFeBqRB6tR/iGMRAJ3HRqY6Z7Yp4l8ZCbl0TDLAfHNxu7schEw4tSnm2/Hh9eNMiOVy4z58uzAWlZXAYBQ==", "cpu": [ "arm64" ], @@ -3684,9 +3576,9 @@ } }, "node_modules/@sentry/cli-linux-i686": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.58.4.tgz", - "integrity": "sha512-NseoIQAFtkziHyjZNPTu1Gm1opeQHt7Wm1LbLrGWVIRvUOzlslO9/8i6wETUZ6TjlQxBVRgd3Q0lRBG2A8rFYA==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-i686/-/cli-linux-i686-2.58.5.tgz", + "integrity": "sha512-G7261dkmyxqlMdyvyP06b+RTIVzp1gZNgglj5UksxSouSUqRd/46W/2pQeOMPhloDYo9yLtCN2YFb3Mw4aUsWw==", "cpu": [ "x86", "ia32" @@ -3703,9 +3595,9 @@ } }, "node_modules/@sentry/cli-linux-x64": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.58.4.tgz", - "integrity": "sha512-d3Arz+OO/wJYTqCYlSN3Ktm+W8rynQ/IMtSZLK8nu0ryh5mJOh+9XlXY6oDXw4YlsM8qCRrNquR8iEI1Y/IH+Q==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-linux-x64/-/cli-linux-x64-2.58.5.tgz", + "integrity": "sha512-rP04494RSmt86xChkQ+ecBNRYSPbyXc4u0IA7R7N1pSLCyO74e5w5Al+LnAq35cMfVbZgz5Sm0iGLjyiUu4I1g==", "cpu": [ "x64" ], @@ -3721,9 +3613,9 @@ } }, "node_modules/@sentry/cli-win32-arm64": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.58.4.tgz", - "integrity": "sha512-bqYrF43+jXdDBh0f8HIJU3tbvlOFtGyRjHB8AoRuMQv9TEDUfENZyCelhdjA+KwDKYl48R1Yasb4EHNzsoO83w==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-arm64/-/cli-win32-arm64-2.58.5.tgz", + "integrity": "sha512-AOJ2nCXlQL1KBaCzv38m3i2VmSHNurUpm7xVKd6yAHX+ZoVBI8VT0EgvwmtJR2TY2N2hNCC7UrgRmdUsQ152bA==", "cpu": [ "arm64" ], @@ -3737,9 +3629,9 @@ } }, "node_modules/@sentry/cli-win32-i686": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.58.4.tgz", - "integrity": "sha512-3triFD6jyvhVcXOmGyttf+deKZcC1tURdhnmDUIBkiDPJKGT/N5xa4qAtHJlAB/h8L9jgYih9bvJnvvFVM7yug==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-i686/-/cli-win32-i686-2.58.5.tgz", + "integrity": "sha512-EsuboLSOnlrN7MMPJ1eFvfMDm+BnzOaSWl8eYhNo8W/BIrmNgpRUdBwnWn9Q2UOjJj5ZopukmsiMYtU/D7ml9g==", "cpu": [ "x86", "ia32" @@ -3754,9 +3646,9 @@ } }, "node_modules/@sentry/cli-win32-x64": { - "version": "2.58.4", - "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.58.4.tgz", - "integrity": "sha512-cSzN4PjM1RsCZ4pxMjI0VI7yNCkxiJ5jmWncyiwHXGiXrV1eXYdQ3n1LhUYLZ91CafyprR0OhDcE+RVZ26Qb5w==", + "version": "2.58.5", + "resolved": "https://registry.npmjs.org/@sentry/cli-win32-x64/-/cli-win32-x64-2.58.5.tgz", + "integrity": "sha512-IZf+XIMiQwj+5NzqbOQfywlOitmCV424Vtf9c+ep61AaVScUFD1TSrQbOcJJv5xGxhlxNOMNgMeZhdexdzrKZg==", "cpu": [ "x64" ], @@ -3770,112 +3662,125 @@ } }, "node_modules/@sentry/core": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.38.0.tgz", - "integrity": "sha512-1pubWDZE5y5HZEPMAZERP4fVl2NH3Ihp1A+vMoVkb3Qc66Diqj1WierAnStlZP7tCx0TBa0dK85GTW/ZFYyB9g==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/core/-/core-10.50.0.tgz", + "integrity": "sha512-J4A+vzUO3adl0TkFCjaN1+4miamrjHiEIYuLHiuu1lmAjq5WIVw32ObvAh4yMwNtxyaEMosTrrh5M6f12XSJFg==", "license": "MIT", "engines": { "node": ">=18" } }, "node_modules/@sentry/node": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.38.0.tgz", - "integrity": "sha512-wriyDtWDAoatn8EhOj0U4PJR1WufiijTsCGALqakOHbFiadtBJANLe6aSkXoXT4tegw59cz1wY4NlzHjYksaPw==", - "license": "MIT", - "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^2.5.0", - "@opentelemetry/core": "^2.5.0", - "@opentelemetry/instrumentation": "^0.211.0", - "@opentelemetry/instrumentation-amqplib": "0.58.0", - "@opentelemetry/instrumentation-connect": "0.54.0", - "@opentelemetry/instrumentation-dataloader": "0.28.0", - "@opentelemetry/instrumentation-express": "0.59.0", - "@opentelemetry/instrumentation-fs": "0.30.0", - "@opentelemetry/instrumentation-generic-pool": "0.54.0", - "@opentelemetry/instrumentation-graphql": "0.58.0", - "@opentelemetry/instrumentation-hapi": "0.57.0", - "@opentelemetry/instrumentation-http": "0.211.0", - "@opentelemetry/instrumentation-ioredis": "0.59.0", - "@opentelemetry/instrumentation-kafkajs": "0.20.0", - "@opentelemetry/instrumentation-knex": "0.55.0", - "@opentelemetry/instrumentation-koa": "0.59.0", - "@opentelemetry/instrumentation-lru-memoizer": "0.55.0", - "@opentelemetry/instrumentation-mongodb": "0.64.0", - "@opentelemetry/instrumentation-mongoose": "0.57.0", - "@opentelemetry/instrumentation-mysql": "0.57.0", - "@opentelemetry/instrumentation-mysql2": "0.57.0", - "@opentelemetry/instrumentation-pg": "0.63.0", - "@opentelemetry/instrumentation-redis": "0.59.0", - "@opentelemetry/instrumentation-tedious": "0.30.0", - "@opentelemetry/instrumentation-undici": "0.21.0", - "@opentelemetry/resources": "^2.5.0", - "@opentelemetry/sdk-trace-base": "^2.5.0", - "@opentelemetry/semantic-conventions": "^1.39.0", - "@prisma/instrumentation": "7.2.0", - "@sentry/core": "10.38.0", - "@sentry/node-core": "10.38.0", - "@sentry/opentelemetry": "10.38.0", - "import-in-the-middle": "^2.0.6", - "minimatch": "^9.0.0" + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/node/-/node-10.50.0.tgz", + "integrity": "sha512-TvwzFQu8MGKzMQ2/tqxcNzFA8UG2kKTB+GDmA4uOzx3+GT849YZRRSJzEXCmYhk1teVd2fbmgqyYY2nyLF5a+Q==", + "license": "MIT", + "dependencies": { + "@fastify/otel": "0.18.0", + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/core": "^2.6.1", + "@opentelemetry/instrumentation": "^0.214.0", + "@opentelemetry/instrumentation-amqplib": "0.61.0", + "@opentelemetry/instrumentation-connect": "0.57.0", + "@opentelemetry/instrumentation-dataloader": "0.31.0", + "@opentelemetry/instrumentation-fs": "0.33.0", + "@opentelemetry/instrumentation-generic-pool": "0.57.0", + "@opentelemetry/instrumentation-graphql": "0.62.0", + "@opentelemetry/instrumentation-hapi": "0.60.0", + "@opentelemetry/instrumentation-http": "0.214.0", + "@opentelemetry/instrumentation-ioredis": "0.62.0", + "@opentelemetry/instrumentation-kafkajs": "0.23.0", + "@opentelemetry/instrumentation-knex": "0.58.0", + "@opentelemetry/instrumentation-koa": "0.62.0", + "@opentelemetry/instrumentation-lru-memoizer": "0.58.0", + "@opentelemetry/instrumentation-mongodb": "0.67.0", + "@opentelemetry/instrumentation-mongoose": "0.60.0", + "@opentelemetry/instrumentation-mysql": "0.60.0", + "@opentelemetry/instrumentation-mysql2": "0.60.0", + "@opentelemetry/instrumentation-pg": "0.66.0", + "@opentelemetry/instrumentation-redis": "0.62.0", + "@opentelemetry/instrumentation-tedious": "0.33.0", + "@opentelemetry/sdk-trace-base": "^2.6.1", + "@opentelemetry/semantic-conventions": "^1.40.0", + "@prisma/instrumentation": "7.6.0", + "@sentry/core": "10.50.0", + "@sentry/node-core": "10.50.0", + "@sentry/opentelemetry": "10.50.0", + "import-in-the-middle": "^3.0.0" }, "engines": { "node": ">=18" } }, "node_modules/@sentry/node-core": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.38.0.tgz", - "integrity": "sha512-ErXtpedrY1HghgwM6AliilZPcUCoNNP1NThdO4YpeMq04wMX9/GMmFCu46TnCcg6b7IFIOSr2S4yD086PxLlHQ==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/node-core/-/node-core-10.50.0.tgz", + "integrity": "sha512-Eb1BYf4Lc7ZYmdX3acKP6SgyGikrBA370gbGHaWI5jRu7G7vig8sIu1ghPmY5AlvqBPOetado7GniXr6fAXbTw==", "license": "MIT", "dependencies": { - "@apm-js-collab/tracing-hooks": "^0.3.1", - "@sentry/core": "10.38.0", - "@sentry/opentelemetry": "10.38.0", - "import-in-the-middle": "^2.0.6" + "@sentry/core": "10.50.0", + "@sentry/opentelemetry": "10.50.0", + "import-in-the-middle": "^3.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", + "@opentelemetry/exporter-trace-otlp-http": ">=0.57.0 <1", "@opentelemetry/instrumentation": ">=0.57.1 <1", - "@opentelemetry/resources": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@opentelemetry/core": { + "optional": true + }, + "@opentelemetry/exporter-trace-otlp-http": { + "optional": true + }, + "@opentelemetry/instrumentation": { + "optional": true + }, + "@opentelemetry/sdk-trace-base": { + "optional": true + }, + "@opentelemetry/semantic-conventions": { + "optional": true + } } }, "node_modules/@sentry/opentelemetry": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.38.0.tgz", - "integrity": "sha512-YPVhWfYmC7nD3EJqEHGtjp4fp5LwtAbE5rt9egQ4hqJlYFvr8YEz9sdoqSZxO0cZzgs2v97HFl/nmWAXe52G2Q==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/opentelemetry/-/opentelemetry-10.50.0.tgz", + "integrity": "sha512-axn3pgDPveGdaMUC0abMCmFN7ux2pA5ebPufCef4lMIsyg7BBQvaEJ+vE19wjstMaBCAJGsdZlL3eeP2rtgRMw==", "license": "MIT", "dependencies": { - "@sentry/core": "10.38.0" + "@sentry/core": "10.50.0" }, "engines": { "node": ">=18" }, "peerDependencies": { "@opentelemetry/api": "^1.9.0", - "@opentelemetry/context-async-hooks": "^1.30.1 || ^2.1.0", "@opentelemetry/core": "^1.30.1 || ^2.1.0", "@opentelemetry/sdk-trace-base": "^1.30.1 || ^2.1.0", "@opentelemetry/semantic-conventions": "^1.39.0" } }, "node_modules/@sentry/profiling-node": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/profiling-node/-/profiling-node-10.38.0.tgz", - "integrity": "sha512-XIjVSiPmXfcrKq+UjroehbfNY+l89JWSos3vyvkXEXEwnjDWrjHHv9sUyXHje0rlFOR+Qp1MKn2EySiMa/DZag==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/profiling-node/-/profiling-node-10.50.0.tgz", + "integrity": "sha512-fKavmoOJdst07/Mf8Zvz8QEbn8RDM10I1tdwSTmC8n77zm5IEQll7eYHP8e77VWuXHXggfVn5WNQfG2uDrECaA==", "license": "MIT", "dependencies": { "@sentry-internal/node-cpu-profiler": "^2.2.0", - "@sentry/core": "10.38.0", - "@sentry/node": "10.38.0" + "@sentry/core": "10.50.0", + "@sentry/node": "10.50.0" }, "bin": { "sentry-prune-profiler-binaries": "scripts/prune-profiler-binaries.js" @@ -3885,13 +3790,13 @@ } }, "node_modules/@sentry/react": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.38.0.tgz", - "integrity": "sha512-3UiKo6QsqTyPGUt0XWRY9KLaxc/cs6Kz4vlldBSOXEL6qPDL/EfpwNJT61osRo81VFWu8pKu7ZY2bvLPryrnBQ==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/react/-/react-10.50.0.tgz", + "integrity": "sha512-MZHYjEZAtFIa4zPrWS4oXlo+gMppRvfETqUqF920Sj2jN2U7WjboU03lDmjfDqEcH7QiwjQyl13jHd2nwAyrrw==", "license": "MIT", "dependencies": { - "@sentry/browser": "10.38.0", - "@sentry/core": "10.38.0" + "@sentry/browser": "10.50.0", + "@sentry/core": "10.50.0" }, "engines": { "node": ">=18" @@ -3901,22 +3806,22 @@ } }, "node_modules/@sentry/react-router": { - "version": "10.38.0", - "resolved": "https://registry.npmjs.org/@sentry/react-router/-/react-router-10.38.0.tgz", - "integrity": "sha512-jUqRwTF8Kux7cidgjuMuYOMO4pYPfUuEtqPn4BKQMJppl5XxYIsXer353sOsLxIvKT29030uAMK2/LAenzyrIg==", + "version": "10.50.0", + "resolved": "https://registry.npmjs.org/@sentry/react-router/-/react-router-10.50.0.tgz", + "integrity": "sha512-G3T+0XjasSZn1a5HEpimS6DNR/3B4du0wrLi2wqyYLBoLZ/VR/PlJ1zC4sgF+pvMBdwC5auvOTV2ijNfrSMYyw==", "license": "MIT", "dependencies": { - "@opentelemetry/api": "^1.9.0", - "@opentelemetry/core": "^2.5.0", - "@opentelemetry/instrumentation": "^0.211.0", - "@opentelemetry/semantic-conventions": "^1.39.0", - "@sentry/browser": "10.38.0", - "@sentry/cli": "^2.58.4", - "@sentry/core": "10.38.0", - "@sentry/node": "10.38.0", - "@sentry/react": "10.38.0", - "@sentry/vite-plugin": "^4.8.0", - "glob": "11.1.0" + "@opentelemetry/api": "^1.9.1", + "@opentelemetry/core": "^2.6.1", + "@opentelemetry/instrumentation": "^0.214.0", + "@opentelemetry/semantic-conventions": "^1.40.0", + "@sentry/browser": "10.50.0", + "@sentry/cli": "^2.58.5", + "@sentry/core": "10.50.0", + "@sentry/node": "10.50.0", + "@sentry/react": "10.50.0", + "@sentry/vite-plugin": "^5.2.0", + "glob": "^13.0.6" }, "engines": { "node": ">=20" @@ -3927,70 +3832,38 @@ "react-router": "7.x" } }, - "node_modules/@sentry/react-router/node_modules/glob": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", - "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "foreground-child": "^3.3.1", - "jackspeak": "^4.1.1", - "minimatch": "^10.1.1", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^2.0.0" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@sentry/react-router/node_modules/jackspeak": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.1.1.tgz", - "integrity": "sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==", - "license": "BlueOak-1.0.0", + "node_modules/@sentry/rollup-plugin": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@sentry/rollup-plugin/-/rollup-plugin-5.2.0.tgz", + "integrity": "sha512-a8LfpvcYMFtFSroro5MpCcOoS528LeLfUHzxWURnpofOnY+Aso9Si4y4dFlna+RKqxCXjmFbn6CLnfI+YrHysQ==", + "license": "MIT", "dependencies": { - "@isaacs/cliui": "^8.0.2" + "@sentry/bundler-plugin-core": "5.2.0", + "magic-string": "~0.30.8" }, "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@sentry/react-router/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" + "node": ">= 18" }, - "engines": { - "node": "20 || >=22" + "peerDependencies": { + "rollup": ">=3.2.0" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependenciesMeta": { + "rollup": { + "optional": true + } } }, "node_modules/@sentry/vite-plugin": { - "version": "4.9.1", - "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-4.9.1.tgz", - "integrity": "sha512-Tlyg2cyFYp/icX58GWvfpvZr9NLdLs2/xyFVyS8pQ0faZWmoXic3FMzoXYHV1gsdMbL1Yy5WQvGJy8j1rS8LGA==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@sentry/vite-plugin/-/vite-plugin-5.2.0.tgz", + "integrity": "sha512-4Jo3ixBspso5HY81PDvZdRXkH9wYGVmcw/0a2IX9ejbyKBdHqkYg4IhAtNqGUAyGuHwwRS9Y1S+sCMvrXv6htw==", "license": "MIT", "dependencies": { - "@sentry/bundler-plugin-core": "4.9.1", - "unplugin": "1.0.1" + "@sentry/bundler-plugin-core": "5.2.0", + "@sentry/rollup-plugin": "5.2.0" }, "engines": { - "node": ">= 14" + "node": ">= 18" } }, "node_modules/@shikijs/core": { @@ -4044,6 +3917,38 @@ "@shikijs/types": "3.22.0" } }, + "node_modules/@shikijs/transformers": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/transformers/-/transformers-3.23.0.tgz", + "integrity": "sha512-F9msZVxdF+krQNSdQ4V+Ja5QemeAoTQ2jxt7nJCwhDsdF1JWS3KxIQXA3lQbyKwS3J61oHRUSv4jYWv3CkaKTQ==", + "license": "MIT", + "dependencies": { + "@shikijs/core": "3.23.0", + "@shikijs/types": "3.23.0" + } + }, + "node_modules/@shikijs/transformers/node_modules/@shikijs/core": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-3.23.0.tgz", + "integrity": "sha512-NSWQz0riNb67xthdm5br6lAkvpDJRTgB36fxlo37ZzM2yq0PQFFzbd8psqC2XMPgCzo1fW6cVi18+ArJ44wqgA==", + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.23.0", + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4", + "hast-util-to-html": "^9.0.5" + } + }, + "node_modules/@shikijs/transformers/node_modules/@shikijs/types": { + "version": "3.23.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.23.0.tgz", + "integrity": "sha512-3JZ5HXOZfYjsYSk0yPwBrkupyYSLpAE26Qc0HLghhZNGTZg/SKxXIIgoxOpmmeQP0RRSDJTk1/vPfw9tbw+jSQ==", + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, "node_modules/@shikijs/types": { "version": "3.22.0", "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.22.0.tgz", @@ -4426,9 +4331,9 @@ "license": "MIT" }, "node_modules/@types/d3-shape": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", - "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.8.tgz", + "integrity": "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w==", "license": "MIT", "dependencies": { "@types/d3-path": "*" @@ -4547,12 +4452,12 @@ } }, "node_modules/@types/node": { - "version": "25.1.0", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.1.0.tgz", - "integrity": "sha512-t7frlewr6+cbx+9Ohpl0NOTKXZNV9xHRmNOvql47BFJKcEG1CxtxlPEEe+gR9uhVWM4DwhnvTF110mIL4yP9RA==", + "version": "25.6.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.6.0.tgz", + "integrity": "sha512-+qIYRKdNYJwY3vRCZMdJbPLJAtGjQBudzZzdzwQYkEPQd+PJGixUL5QfvCLDaULoLv+RhT3LDkwEfKaAkgSmNQ==", "license": "MIT", "dependencies": { - "undici-types": "~7.16.0" + "undici-types": "~7.19.0" } }, "node_modules/@types/pg": { @@ -4581,6 +4486,15 @@ "integrity": "sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==", "license": "MIT" }, + "node_modules/@types/set-cookie-parser": { + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/@types/set-cookie-parser/-/set-cookie-parser-2.4.10.tgz", + "integrity": "sha512-GGmQVGpQWUe5qglJozEjZV/5dyxbOOZ0LHe/lqyWssB88Y4svNfst0uqBVscdDeIKl5Jy5+aPSvy7mI9tYRguw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/statuses": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/@types/statuses/-/statuses-2.0.6.tgz", @@ -4615,52 +4529,63 @@ "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", "license": "ISC" }, + "node_modules/@upsetjs/venn.js": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@upsetjs/venn.js/-/venn.js-2.0.0.tgz", + "integrity": "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw==", + "license": "MIT", + "optionalDependencies": { + "d3-selection": "^3.0.0", + "d3-transition": "^3.0.1" + } + }, "node_modules/@vitest/expect": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.0.18.tgz", - "integrity": "sha512-8sCWUyckXXYvx4opfzVY03EOiYVxyNrHS5QxX3DAIi5dpJAAkyJezHCP77VMX4HKA2LDT/Jpfo8i2r5BE3GnQQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-4.1.5.tgz", + "integrity": "sha512-PWBaRY5JoKuRnHlUHfpV/KohFylaDZTupcXN1H9vYryNLOnitSw60Mw9IAE2r67NbwwzBw/Cc/8q9BK3kIX8Kw==", "license": "MIT", "dependencies": { - "@standard-schema/spec": "^1.0.0", + "@standard-schema/spec": "^1.1.0", "@types/chai": "^5.2.2", - "@vitest/spy": "4.0.18", - "@vitest/utils": "4.0.18", - "chai": "^6.2.1", - "tinyrainbow": "^3.0.3" + "@vitest/spy": "4.1.5", + "@vitest/utils": "4.1.5", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/pretty-format": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.0.18.tgz", - "integrity": "sha512-P24GK3GulZWC5tz87ux0m8OADrQIUVDPIjjj65vBXYG17ZeU3qD7r+MNZ1RNv4l8CGU2vtTRqixrOi9fYk/yKw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-4.1.5.tgz", + "integrity": "sha512-7I3q6l5qr03dVfMX2wCo9FxwSJbPdwKjy2uu/YPpU3wfHvIL4QHwVRp57OfGrDFeUJ8/8QdfBKIV12FTtLn00g==", "license": "MIT", "dependencies": { - "tinyrainbow": "^3.0.3" + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.0.18.tgz", - "integrity": "sha512-cbQt3PTSD7P2OARdVW3qWER5EGq7PHlvE+QfzSC0lbwO+xnt7+XH06ZzFjFRgzUX//JmpxrCu92VdwvEPlWSNw==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-4.1.5.tgz", + "integrity": "sha512-2lNOsh6+R2Idnf1TCZqSwYlKN2E/iDlD8sgU59kYVl+OMDmvldO1VDk39smRfpUNwYpNRVn3w4YfuC7KfbBnkQ==", "license": "MIT", "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/utils": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.0.18.tgz", - "integrity": "sha512-msMRKLMVLWygpK3u2Hybgi4MNjcYJvwTb0Ru09+fOyCXIgT5raYP041DRRdiJiI3k/2U6SEbAETB3YtBrUkCFA==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-4.1.5.tgz", + "integrity": "sha512-76wdkrmfXfqGjueGgnb45ITPyUi1ycZ4IHgC2bhPDUfWHklY/q3MdLOAB+TF1e6xfl8NxNY0ZYaPCFNWSsw3Ug==", "license": "MIT", "dependencies": { - "@vitest/pretty-format": "4.0.18", - "tinyrainbow": "^3.0.3" + "@vitest/pretty-format": "4.1.5", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -4689,9 +4614,9 @@ } }, "node_modules/acorn": { - "version": "8.15.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", - "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -4784,19 +4709,6 @@ "node": ">=8.0.0" } }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, "node_modules/argparse": { "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", @@ -4867,12 +4779,15 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "license": "MIT" - }, + "node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, "node_modules/base64-js": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz", @@ -4909,18 +4824,6 @@ "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", "license": "MIT" }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/blueimp-md5": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/blueimp-md5/-/blueimp-md5-2.19.0.tgz", @@ -4952,12 +4855,15 @@ } }, "node_modules/brace-expansion": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", - "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.5.tgz", + "integrity": "sha512-VZznLgtwhn+Mact9tfiwx64fA9erHH/MCXEUfB/0bX/6Fz6ny5EGTXYltMocqg4xFAQZtnO3DHWWXi8RiuN7cQ==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" } }, "node_modules/braces": { @@ -5094,12 +5000,12 @@ "license": "CC-BY-4.0" }, "node_modules/castable-video": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/castable-video/-/castable-video-1.1.11.tgz", - "integrity": "sha512-LCRTK6oe7SB1SiUQFzZCo6D6gcEzijqBTVIuj3smKpQdesXM18QTbCVqWgh9MfOeQgTx/i9ji5jGcdqNPeWg2g==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/castable-video/-/castable-video-1.1.13.tgz", + "integrity": "sha512-yIdbRPi7k04FXsQaMb9RtsWw5GELiNF21ERoD5WUhU4e3rsVmOB12UX+LUUPWhTw3kPpjndnYyy4mHlFU3qSxw==", "license": "MIT", "dependencies": { - "custom-media-element": "~1.4.5" + "custom-media-element": "~1.4.6" } }, "node_modules/ccount": { @@ -5210,29 +5116,31 @@ "license": "MIT" }, "node_modules/chevrotain": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", - "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-12.0.0.tgz", + "integrity": "sha512-csJvb+6kEiQaqo1woTdSAuOWdN0WTLIydkKrBnS+V5gZz0oqBrp4kQ35519QgK6TpBThiG3V1vNSHlIkv4AglQ==", "license": "Apache-2.0", "dependencies": { - "@chevrotain/cst-dts-gen": "11.0.3", - "@chevrotain/gast": "11.0.3", - "@chevrotain/regexp-to-ast": "11.0.3", - "@chevrotain/types": "11.0.3", - "@chevrotain/utils": "11.0.3", - "lodash-es": "4.17.21" + "@chevrotain/cst-dts-gen": "12.0.0", + "@chevrotain/gast": "12.0.0", + "@chevrotain/regexp-to-ast": "12.0.0", + "@chevrotain/types": "12.0.0", + "@chevrotain/utils": "12.0.0" + }, + "engines": { + "node": ">=22.0.0" } }, "node_modules/chevrotain-allstar": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", - "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.4.1.tgz", + "integrity": "sha512-PvVJm3oGqrveUVW2Vt/eZGeiAIsJszYweUcYwcskg9e+IubNYKKD+rHHem7A6XVO22eDAL+inxNIGAzZ/VIWlA==", "license": "MIT", "dependencies": { "lodash-es": "^4.17.21" }, "peerDependencies": { - "chevrotain": "^11.0.0" + "chevrotain": "^12.0.0" } }, "node_modules/chokidar": { @@ -5357,9 +5265,9 @@ } }, "node_modules/close-with-grace": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/close-with-grace/-/close-with-grace-2.4.0.tgz", - "integrity": "sha512-bzAYS0Kax7I0ejiCFHVshsT9giz6MrOpkdpP1CEGpkDRG3mXVgHZ9QdzVGHRZR0jrAq6JyN1mB4Ty3ILnmzLdg==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/close-with-grace/-/close-with-grace-2.5.0.tgz", + "integrity": "sha512-MewUtZQU6N4YVHIne63zGtjIQzTINgr6lQp2Y0CutaCw2FsdYahW57dH1Wdz+aV5ipbBzEBZD5znwX2NooS+IA==", "license": "MIT" }, "node_modules/clsx": { @@ -5410,12 +5318,12 @@ } }, "node_modules/commander": { - "version": "12.1.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", - "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "version": "14.0.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-14.0.3.tgz", + "integrity": "sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=20" } }, "node_modules/compressible": { @@ -5619,15 +5527,15 @@ "license": "MIT" }, "node_modules/custom-media-element": { - "version": "1.4.5", - "resolved": "https://registry.npmjs.org/custom-media-element/-/custom-media-element-1.4.5.tgz", - "integrity": "sha512-cjrsQufETwxjvwZbYbKBCJNvmQ2++G9AvT45zDi7NXL9k2PdVcs2h0jQz96J6G4TMKRCcEsoJ+QTgQD00Igtjw==", + "version": "1.4.6", + "resolved": "https://registry.npmjs.org/custom-media-element/-/custom-media-element-1.4.6.tgz", + "integrity": "sha512-/HRYqJOa1ob5ik4q7FIJVYxTJCFs/FL3+cQPAJjUf2uiqrDEzbTgB315gQ2rG8oK3w094W9m5tcB8S5Qah+caA==", "license": "MIT" }, "node_modules/cytoscape": { - "version": "3.33.1", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", - "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", + "version": "3.33.2", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.2.tgz", + "integrity": "sha512-sj4HXd3DokGhzZAdjDejGvTPLqlt84vNFN8m7bGsOzDY5DyVcxIb2ejIXat2Iy7HxWhdT/N1oKyheJ5YdpsGuw==", "license": "MIT", "engines": { "node": ">=0.10" @@ -5899,9 +5807,9 @@ } }, "node_modules/d3-format": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", - "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.2.tgz", + "integrity": "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg==", "license": "ISC", "engines": { "node": ">=12" @@ -6135,9 +6043,9 @@ } }, "node_modules/dagre-d3-es": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.13.tgz", - "integrity": "sha512-efEhnxpSuwpYOKRm/L5KbqoZmNNukHa/Flty4Wp62JRvgH2ojwVgPgdYyr4twpieZnyRDdIH7PY2mopX26+j2Q==", + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.14.tgz", + "integrity": "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg==", "license": "MIT", "dependencies": { "d3": "^7.9.0", @@ -6145,9 +6053,9 @@ } }, "node_modules/dayjs": { - "version": "1.11.19", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.19.tgz", - "integrity": "sha512-t5EcLVS6QPBNqM2z8fakk/NKel+Xzshgt8FFKAn+qwlD1pzZWxh0nVCrvFK7ZDb6XucZeF9z8C7CBWTRIVApAw==", + "version": "1.11.20", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.20.tgz", + "integrity": "sha512-YbwwqR/uYpeoP4pu043q+LTDLFBLApUP6VxRihdfNTqu4ubqMlGDLd6ErXhEgsyvY0K6nCs7nggYumAN+9uEuQ==", "license": "MIT" }, "node_modules/debug": { @@ -6221,9 +6129,9 @@ } }, "node_modules/delaunator": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", - "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.1.0.tgz", + "integrity": "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ==", "license": "ISC", "dependencies": { "robust-predicates": "^3.0.2" @@ -6275,6 +6183,15 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/diff": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/diff/-/diff-8.0.3.tgz", + "integrity": "sha512-qejHi7bcSD4hQAZE0tNAawRK1ZtafHDmMTMkrrIGgSLl7hTnQHmKCeB45xAcbfTqK2zowkM3j3bHt/4b/ARbYQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, "node_modules/dom-accessibility-api": { "version": "0.5.16", "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", @@ -6282,18 +6199,18 @@ "license": "MIT" }, "node_modules/dompurify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.3.0.tgz", - "integrity": "sha512-r+f6MYR1gGN1eJv0TVQbhA7if/U7P87cdPl3HN5rikqaBSBxLiCb/b9O+2eG0cxz0ghyU+mU1QkbsOwERMYlWQ==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.1.tgz", + "integrity": "sha512-JahakDAIg1gyOm7dlgWSDjV4n7Ip2PKR55NIT6jrMfIgLFgWo81vdr1/QGqWtFNRqXP9UV71oVePtjqS2ebnPw==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "node_modules/dotenv": { - "version": "17.3.1", - "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.3.1.tgz", - "integrity": "sha512-IO8C/dzEb6O3F9/twg6ZLXz164a2fhTnEWb95H23Dm4OuN+92NmEAlTrupP9VW6Jm3sO26tQlqyvyi4CsnY9GA==", + "version": "17.4.2", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-17.4.2.tgz", + "integrity": "sha512-nI4U3TottKAcAD9LLud4Cb7b2QztQMUEfHbvhTH09bqXTxnSie8WnjPALV/WMCrJZ6UV/qHJ6L03OqO3LcdYZw==", "license": "BSD-2-Clause", "engines": { "node": ">=12" @@ -6316,12 +6233,6 @@ "node": ">= 0.4" } }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", - "license": "MIT" - }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -6397,21 +6308,21 @@ } }, "node_modules/epicshop": { - "version": "6.85.0", - "resolved": "https://registry.npmjs.org/epicshop/-/epicshop-6.85.0.tgz", - "integrity": "sha512-PwzmLbsudkwbJpzyorSX1UIo41dwXoFSjlgVbn9EugVDGtdTbHKuglWIxbrhuLpDeSpS/KNO96wXavQXZ0Fonw==", + "version": "6.90.3", + "resolved": "https://registry.npmjs.org/epicshop/-/epicshop-6.90.3.tgz", + "integrity": "sha512-wNmKCji3MyCizbSwnAXGchFNGEUAHqfJIbG2J5/43Ybh1lKWPVWk/8vt/cG9Xhmht3LhJ2IhdFLEQ+dsPYijWg==", "dependencies": { - "@epic-web/workshop-utils": "6.85.0", - "@inquirer/prompts": "^8.2.0", - "@sentry/node": "^10.38.0", + "@epic-web/workshop-utils": "6.90.3", + "@inquirer/prompts": "^8.4.2", + "@sentry/node": "^10.50.0", "chalk": "^5.6.2", - "close-with-grace": "^2.4.0", + "close-with-grace": "^2.5.0", "execa": "^9.6.1", - "get-port": "^7.1.0", - "match-sorter": "^8.2.0", + "get-port": "^7.2.0", + "match-sorter": "^8.3.0", "open": "^11.0.0", - "openid-client": "^6.8.2", - "ora": "^9.3.0", + "openid-client": "^6.8.4", + "ora": "^9.4.0", "yargs": "^18.0.0" }, "bin": { @@ -6481,9 +6392,9 @@ } }, "node_modules/esbuild": { - "version": "0.27.3", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.3.tgz", - "integrity": "sha512-8VwMnyGCONIs6cWue2IdpHxHnAjzxnw2Zr7MkVxB2vjmQ2ivqGFb4LEG3SMnv0Gb2F/G/2yA8zUaiL1gywDCCg==", + "version": "0.28.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.28.0.tgz", + "integrity": "sha512-sNR9MHpXSUV/XB4zmsFKN+QgVG82Cc7+/aaxJ8Adi8hyOac+EXptIp45QBPaVyX3N70664wRbTcLTOemCAnyqw==", "hasInstallScript": true, "license": "MIT", "bin": { @@ -6493,32 +6404,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.27.3", - "@esbuild/android-arm": "0.27.3", - "@esbuild/android-arm64": "0.27.3", - "@esbuild/android-x64": "0.27.3", - "@esbuild/darwin-arm64": "0.27.3", - "@esbuild/darwin-x64": "0.27.3", - "@esbuild/freebsd-arm64": "0.27.3", - "@esbuild/freebsd-x64": "0.27.3", - "@esbuild/linux-arm": "0.27.3", - "@esbuild/linux-arm64": "0.27.3", - "@esbuild/linux-ia32": "0.27.3", - "@esbuild/linux-loong64": "0.27.3", - "@esbuild/linux-mips64el": "0.27.3", - "@esbuild/linux-ppc64": "0.27.3", - "@esbuild/linux-riscv64": "0.27.3", - "@esbuild/linux-s390x": "0.27.3", - "@esbuild/linux-x64": "0.27.3", - "@esbuild/netbsd-arm64": "0.27.3", - "@esbuild/netbsd-x64": "0.27.3", - "@esbuild/openbsd-arm64": "0.27.3", - "@esbuild/openbsd-x64": "0.27.3", - "@esbuild/openharmony-arm64": "0.27.3", - "@esbuild/sunos-x64": "0.27.3", - "@esbuild/win32-arm64": "0.27.3", - "@esbuild/win32-ia32": "0.27.3", - "@esbuild/win32-x64": "0.27.3" + "@esbuild/aix-ppc64": "0.28.0", + "@esbuild/android-arm": "0.28.0", + "@esbuild/android-arm64": "0.28.0", + "@esbuild/android-x64": "0.28.0", + "@esbuild/darwin-arm64": "0.28.0", + "@esbuild/darwin-x64": "0.28.0", + "@esbuild/freebsd-arm64": "0.28.0", + "@esbuild/freebsd-x64": "0.28.0", + "@esbuild/linux-arm": "0.28.0", + "@esbuild/linux-arm64": "0.28.0", + "@esbuild/linux-ia32": "0.28.0", + "@esbuild/linux-loong64": "0.28.0", + "@esbuild/linux-mips64el": "0.28.0", + "@esbuild/linux-ppc64": "0.28.0", + "@esbuild/linux-riscv64": "0.28.0", + "@esbuild/linux-s390x": "0.28.0", + "@esbuild/linux-x64": "0.28.0", + "@esbuild/netbsd-arm64": "0.28.0", + "@esbuild/netbsd-x64": "0.28.0", + "@esbuild/openbsd-arm64": "0.28.0", + "@esbuild/openbsd-x64": "0.28.0", + "@esbuild/openharmony-arm64": "0.28.0", + "@esbuild/sunos-x64": "0.28.0", + "@esbuild/win32-arm64": "0.28.0", + "@esbuild/win32-ia32": "0.28.0", + "@esbuild/win32-x64": "0.28.0" } }, "node_modules/escalade": { @@ -6809,6 +6720,30 @@ "node": ">=8.6.0" } }, + "node_modules/fast-string-truncated-width": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-string-truncated-width/-/fast-string-truncated-width-3.0.3.tgz", + "integrity": "sha512-0jjjIEL6+0jag3l2XWWizO64/aZVtpiGE3t0Zgqxv0DPuxiMjvB3M24fCyhZUO4KomJQPj3LTSUnDP3GpdwC0g==", + "license": "MIT" + }, + "node_modules/fast-string-width": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fast-string-width/-/fast-string-width-3.0.2.tgz", + "integrity": "sha512-gX8LrtNEI5hq8DVUfRQMbr5lpaS4nMIWV+7XEbXk2b8kiQIizgnlr12B4dA3ZEx3308ze0O4Q1R+cHts8kyUJg==", + "license": "MIT", + "dependencies": { + "fast-string-truncated-width": "^3.0.2" + } + }, + "node_modules/fast-wrap-ansi": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/fast-wrap-ansi/-/fast-wrap-ansi-0.2.0.tgz", + "integrity": "sha512-rLV8JHxTyhVmFYhBJuMujcrHqOT2cnO5Zxj37qROj23CP39GXubJRBUFF0z8KFK77Uc0SukZUf7JZhsVEQ6n8w==", + "license": "MIT", + "dependencies": { + "fast-string-width": "^3.0.2" + } + }, "node_modules/fastq": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", @@ -6886,17 +6821,17 @@ } }, "node_modules/find-process": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/find-process/-/find-process-2.0.0.tgz", - "integrity": "sha512-YUBQnteWGASJoEVVsOXy6XtKAY2O1FCsWnnvQ8y0YwgY1rZiKeVptnFvMu6RSELZAJOGklqseTnUGGs5D0bKmg==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/find-process/-/find-process-2.1.1.tgz", + "integrity": "sha512-SrQDx3QhlmHM90iqn9rdjCQcw/T+WlpOkHFsjoRgB+zTpDfltNA1VSNYeYELwhUTJy12UFxqjWhmhOrJc+o4sA==", "license": "MIT", "dependencies": { "chalk": "~4.1.2", - "commander": "^12.1.0", + "commander": "^14.0.3", "loglevel": "^1.9.2" }, "bin": { - "find-process": "dist/bin/find-process.js" + "find-process": "dist/cjs/bin/find-process.js" } }, "node_modules/find-process/node_modules/ansi-styles": { @@ -6965,22 +6900,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/format": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/format/-/format-0.2.2.tgz", @@ -7005,13 +6924,13 @@ "license": "MIT" }, "node_modules/framer-motion": { - "version": "12.34.1", - "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.34.1.tgz", - "integrity": "sha512-kcZyNaYQfvE2LlH6+AyOaJAQV4rGp5XbzfhsZpiSZcwDMfZUHhuxLWeyRzf5I7jip3qKRpuimPA9pXXfr111kQ==", + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/framer-motion/-/framer-motion-12.38.0.tgz", + "integrity": "sha512-rFYkY/pigbcswl1XQSb7q424kSTQ8q6eAC+YUsSKooHQYuLdzdHjrt6uxUC+PRAO++q5IS7+TamgIw1AphxR+g==", "license": "MIT", "dependencies": { - "motion-dom": "^12.34.1", - "motion-utils": "^12.29.2", + "motion-dom": "^12.38.0", + "motion-utils": "^12.36.0", "tslib": "^2.4.0" }, "peerDependencies": { @@ -7041,9 +6960,9 @@ } }, "node_modules/fs-extra": { - "version": "11.3.3", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", - "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", + "version": "11.3.4", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.4.tgz", + "integrity": "sha512-CTXd6rk/M3/ULNQj8FBqBWHYBVYybQ3VPBw0xGKFe3tuH7ytT6ACnvzpIQ3UZtB8yvUKC2cXn1a+x+5EVQLovA==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -7096,9 +7015,9 @@ } }, "node_modules/get-east-asian-width": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.4.0.tgz", - "integrity": "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.5.0.tgz", + "integrity": "sha512-CQ+bEO+Tva/qlmw24dCejulK5pMzVnUOFOijVogd3KQs07HnRIgp8TGipvCCRT06xeYEbpbgwaCxglFyiuIcmA==", "license": "MIT", "engines": { "node": ">=18" @@ -7141,9 +7060,9 @@ } }, "node_modules/get-port": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.1.0.tgz", - "integrity": "sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.2.0.tgz", + "integrity": "sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==", "license": "MIT", "engines": { "node": ">=16" @@ -7182,17 +7101,17 @@ } }, "node_modules/glob": { - "version": "13.0.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.5.tgz", - "integrity": "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==", + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "license": "BlueOak-1.0.0", "dependencies": { - "minimatch": "^10.2.1", - "minipass": "^7.1.2", - "path-scurry": "^2.0.0" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -7210,73 +7129,10 @@ "node": ">= 6" } }, - "node_modules/glob/node_modules/@isaacs/cliui": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", - "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/glob/node_modules/balanced-match": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", - "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", - "license": "MIT", - "dependencies": { - "jackspeak": "^4.2.3" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", - "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/glob/node_modules/jackspeak": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", - "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^9.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "10.2.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", - "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.2" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/globby": { - "version": "16.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-16.1.0.tgz", - "integrity": "sha512-+A4Hq7m7Ze592k9gZRy4gJ27DrXRNnC1vPjxTt1qQxEY8RxagBkBxivkCwg7FxSTG0iLLEMaUx13oOr0R2/qcQ==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-16.2.0.tgz", + "integrity": "sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==", "license": "MIT", "dependencies": { "@sindresorhus/merge-streams": "^4.0.0", @@ -7324,9 +7180,9 @@ "license": "ISC" }, "node_modules/graphql": { - "version": "16.12.0", - "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.12.0.tgz", - "integrity": "sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ==", + "version": "16.13.2", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.13.2.tgz", + "integrity": "sha512-5bJ+nf/UCpAjHM8i06fl7eLyVC9iuNAjm9qzkiu2ZGhM0VscSvS6WDPfAwkdkBuoXGM9FJSbKl6wylMwP9Ktig==", "license": "MIT", "engines": { "node": "^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0" @@ -7572,10 +7428,14 @@ } }, "node_modules/headers-polyfill": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-4.0.3.tgz", - "integrity": "sha512-IScLbePpkvO846sIwOtOTDjutRMWdXdJmXdMvk6gCBHxFO8d+QKOQedyZSxFTTFYRSmlgSTDtXqqq4pcenBXLQ==", - "license": "MIT" + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/headers-polyfill/-/headers-polyfill-5.0.1.tgz", + "integrity": "sha512-1TJ6Fih/b8h5TIcv+1+Hw0PDQWJTKDKzFZzcKOiW1wJza3XoAQlkCuXLbymPYB8+ZQyw8mHvdw560e8zVFIWyA==", + "license": "MIT", + "dependencies": { + "@types/set-cookie-parser": "^2.4.10", + "set-cookie-parser": "^3.0.1" + } }, "node_modules/hex-rgb": { "version": "4.3.0", @@ -7590,9 +7450,9 @@ } }, "node_modules/hls.js": { - "version": "1.6.15", - "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.15.tgz", - "integrity": "sha512-E3a5VwgXimGHwpRGV+WxRTKeSp2DW5DI5MWv34ulL3t5UNmyJWCQ1KmLEHbYzcfThfXG8amBL+fCYPneGHC4VA==", + "version": "1.6.16", + "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.16.tgz", + "integrity": "sha512-VSIRpLfRwlAAdGL4wiTucx2ScRipo0ed1FBatWkyt832jC4CReKstga6yIhYVwGu9LOBjuX9wzmRMeQdBJtzEA==", "license": "Apache-2.0" }, "node_modules/html-void-elements": { @@ -7673,15 +7533,18 @@ } }, "node_modules/import-in-the-middle": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-2.0.6.tgz", - "integrity": "sha512-3vZV3jX0XRFW3EJDTwzWoZa+RH1b8eTTx6YOCjglrLyPuepwoBti1k3L2dKwdCUrnVEfc5CuRuGstaC/uQJJaw==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-3.0.1.tgz", + "integrity": "sha512-pYkiyXVL2Mf3pozdlDGV6NAObxQx13Ae8knZk1UJRJ6uRW/ZRmTGHlQYtrsSl7ubuE5F8CD1z+s1n4RHNuTtuA==", "license": "Apache-2.0", "dependencies": { "acorn": "^8.15.0", "acorn-import-attributes": "^1.9.5", "cjs-module-lexer": "^2.2.0", "module-details-from-path": "^1.0.4" + }, + "engines": { + "node": ">=18" } }, "node_modules/indent-string": { @@ -7747,18 +7610,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/is-core-module": { "version": "2.16.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", @@ -7975,9 +7826,9 @@ } }, "node_modules/isbot": { - "version": "5.1.35", - "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.35.tgz", - "integrity": "sha512-waFfC72ZNfwLLuJ2iLaoVaqcNo+CAaLR7xCpAn0Y5WfGzkNHv7ZN39Vbi1y+kb+Zs46XHOX3tZNExroFUPX+Kg==", + "version": "5.1.39", + "resolved": "https://registry.npmjs.org/isbot/-/isbot-5.1.39.tgz", + "integrity": "sha512-obH0yYahGXdzNxo+djmHhBYThUKDkz565cxkIlt2L9hXfv1NlaLKoDBHo6KxXsYrIXx2RK3x5vY36CfZcobxEw==", "license": "Unlicense", "engines": { "node": ">=18" @@ -7989,25 +7840,10 @@ "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", "license": "ISC" }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, "node_modules/jose": { - "version": "6.1.3", - "resolved": "https://registry.npmjs.org/jose/-/jose-6.1.3.tgz", - "integrity": "sha512-0TpaTfihd4QMNwrz/ob2Bp7X04yuxJkjRGi4aKmOqwhov54i6u79oCv7T+C7lo70MKH6BesI3vscD1yb/yzKXQ==", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/jose/-/jose-6.2.3.tgz", + "integrity": "sha512-YYVDInQKFJfR/xa3ojUTl8c2KoTwiL1R5Wg9YCydwH0x0B9grbzlg5HC7mMjCtUJjbQ/YnGEZIhI5tCgfTb4Hw==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -8069,9 +7905,9 @@ } }, "node_modules/katex": { - "version": "0.16.25", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.25.tgz", - "integrity": "sha512-woHRUZ/iF23GBP1dkDQMh1QBad9dmr8/PAwNA54VrSOVYgI12MAcE14TqnDdQOdzyEonGzMepYnqBMYdsoAr8Q==", + "version": "0.16.45", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.45.tgz", + "integrity": "sha512-pQpZbdBu7wCTmQUh7ufPmLr0pFoObnGUoL/yhtwJDgmmQpbkg/0HSVti25Fu4rmd1oCR6NGWe9vqTWuWv3GcNA==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -8108,19 +7944,21 @@ } }, "node_modules/langium": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", - "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==", + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/langium/-/langium-4.2.2.tgz", + "integrity": "sha512-JUshTRAfHI4/MF9dH2WupvjSXyn8JBuUEWazB8ZVJUtXutT0doDlAv1XKbZ1Pb5sMexa8FF4CFBc0iiul7gbUQ==", "license": "MIT", "dependencies": { - "chevrotain": "~11.0.3", - "chevrotain-allstar": "~0.3.0", + "@chevrotain/regexp-to-ast": "~12.0.0", + "chevrotain": "~12.0.0", + "chevrotain-allstar": "~0.4.1", "vscode-languageserver": "~9.0.1", "vscode-languageserver-textdocument": "~1.0.11", - "vscode-uri": "~3.0.8" + "vscode-uri": "~3.1.0" }, "engines": { - "node": ">=16.0.0" + "node": ">=20.10.0", + "npm": ">=10.2.3" } }, "node_modules/layout-base": { @@ -8161,9 +7999,9 @@ "license": "MIT" }, "node_modules/lodash-es": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.18.1.tgz", + "integrity": "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A==", "license": "MIT" }, "node_modules/log-symbols": { @@ -8217,10 +8055,16 @@ "loose-envify": "cli.js" } }, + "node_modules/lru_map": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/lru_map/-/lru_map-0.4.1.tgz", + "integrity": "sha512-I+lBvqMMFfqaV8CJCISjI3wbjmwVu/VyOoU7+qtu9d7ioW5klMgsTTiUOUp+DJvfTTzKXoPbyC6YfgkNcyPSOg==", + "license": "MIT" + }, "node_modules/lru-cache": { - "version": "11.2.6", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", - "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "version": "11.3.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.3.5.tgz", + "integrity": "sha512-NxVFwLAnrd9i7KUBxC4DrUhmgjzOs+1Qm50D3oF1/oL+r1NpZ4gA7xvG0/zJ8evR7zIKn4vLf7qTNduWFtCrRw==", "license": "BlueOak-1.0.0", "engines": { "node": "20 || >=22" @@ -8236,15 +8080,12 @@ } }, "node_modules/magic-string": { - "version": "0.30.8", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.8.tgz", - "integrity": "sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==", + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "node": ">=12" + "@jridgewell/sourcemap-codec": "^1.5.5" } }, "node_modules/markdown-extensions": { @@ -8282,9 +8123,9 @@ } }, "node_modules/match-sorter": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-8.2.0.tgz", - "integrity": "sha512-qRVB7wYMJXizAWR4TKo5UYwgW7oAVzA8V9jve0wGzRvV91ou9dcqL+/2gJtD0PZ/Pm2Fq6cVT4VHXHmDFVMGRA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/match-sorter/-/match-sorter-8.3.0.tgz", + "integrity": "sha512-8Py1GbZi5zsclYSFcPAH4H5xfTbeD0bOREA7qP/t8bW4MbOSlPl8sbqHOedEV7O+Bxyvxm6xs/v6BXJGe+JDNA==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.8", @@ -8645,18 +8486,18 @@ } }, "node_modules/media-chrome": { - "version": "4.17.2", - "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.17.2.tgz", - "integrity": "sha512-o/IgiHx0tdSVwRxxqF5H12FK31A/A8T71sv3KdAvh7b6XeBS9dXwqvIFwlR9kdEuqg3n7xpmRIuL83rmYq8FTg==", + "version": "4.19.0", + "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.19.0.tgz", + "integrity": "sha512-HWhDTwts+BSbdPkkB1VsJXp5kvL0IxY7xFT5tBwliM2+89kTPVTnHnev+9it2f9PweANjT/C8/C/S0PW9oyZbA==", "license": "MIT", "dependencies": { "ce-la-react": "^0.3.2" } }, "node_modules/media-tracks": { - "version": "0.3.4", - "resolved": "https://registry.npmjs.org/media-tracks/-/media-tracks-0.3.4.tgz", - "integrity": "sha512-5SUElzGMYXA7bcyZBL1YzLTxH9Iyw1AeYNJxzByqbestrrtB0F3wfiWUr7aROpwodO4fwnxOt78Xjb3o3ONNQg==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/media-tracks/-/media-tracks-0.3.5.tgz", + "integrity": "sha512-l54rkKXlLBt3ob3zOLWHcnjvwUmX5bNEZ70igyapOZZC9imzqBmq1oz8p2roiV04KhjblFIi2hetLPF1oYVLRA==", "license": "MIT" }, "node_modules/media-typer": { @@ -8696,27 +8537,28 @@ } }, "node_modules/mermaid": { - "version": "11.12.2", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.12.2.tgz", - "integrity": "sha512-n34QPDPEKmaeCG4WDMGy0OT6PSyxKCfy2pJgShP+Qow2KLrvWjclwbc3yXfSIf4BanqWEhQEpngWwNp/XhZt6w==", + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.14.0.tgz", + "integrity": "sha512-GSGloRsBs+JINmmhl0JDwjpuezCsHB4WGI4NASHxL3fHo3o/BRXTxhDLKnln8/Q0lRFRyDdEjmk1/d5Sn1Xz8g==", "license": "MIT", "dependencies": { "@braintree/sanitize-url": "^7.1.1", - "@iconify/utils": "^3.0.1", - "@mermaid-js/parser": "^0.6.3", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.1.0", "@types/d3": "^7.4.3", - "cytoscape": "^3.29.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.1", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", - "dagre-d3-es": "7.0.13", - "dayjs": "^1.11.18", - "dompurify": "^3.2.5", - "katex": "^0.16.22", + "dagre-d3-es": "7.0.14", + "dayjs": "^1.11.19", + "dompurify": "^3.3.1", + "katex": "^0.16.25", "khroma": "^2.1.0", - "lodash-es": "^4.17.21", - "marked": "^16.2.1", + "lodash-es": "^4.17.23", + "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", @@ -9541,39 +9383,39 @@ } }, "node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "license": "ISC", + "version": "10.2.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.5.tgz", + "integrity": "sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.5" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minipass": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", - "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", - "license": "ISC", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", + "license": "BlueOak-1.0.0", "engines": { "node": ">=16 || 14 >=14.17" } }, "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", "license": "MIT", "dependencies": { - "acorn": "^8.15.0", + "acorn": "^8.16.0", "pathe": "^2.0.3", "pkg-types": "^1.3.1", - "ufo": "^1.6.1" + "ufo": "^1.6.3" } }, "node_modules/module-details-from-path": { @@ -9619,156 +9461,73 @@ "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", "license": "MIT", "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/motion-dom": { - "version": "12.34.1", - "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.34.1.tgz", - "integrity": "sha512-SC7ZC5dRcGwku2g7EsPvI4q/EzHumUbqsDNumBmZTLFg+goBO5LTJvDu9MAxx+0mtX4IA78B2be/A3aRjY0jnw==", - "license": "MIT", - "dependencies": { - "motion-utils": "^12.29.2" - } - }, - "node_modules/motion-utils": { - "version": "12.29.2", - "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.29.2.tgz", - "integrity": "sha512-G3kc34H2cX2gI63RqU+cZq+zWRRPSsNIOjpdl9TN4AQwC4sgwYPl/Q/Obf/d53nOm569T0fYK+tcoSV50BWx8A==", - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", - "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", - "license": "MIT" - }, - "node_modules/msw": { - "version": "2.12.10", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.12.10.tgz", - "integrity": "sha512-G3VUymSE0/iegFnuipujpwyTM2GuZAKXNeerUSrG2+Eg391wW63xFs5ixWsK9MWzr1AGoSkYGmyAzNgbR3+urw==", - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "@inquirer/confirm": "^5.0.0", - "@mswjs/interceptors": "^0.41.2", - "@open-draft/deferred-promise": "^2.2.0", - "@types/statuses": "^2.0.6", - "cookie": "^1.0.2", - "graphql": "^16.12.0", - "headers-polyfill": "^4.0.2", - "is-node-process": "^1.2.0", - "outvariant": "^1.4.3", - "path-to-regexp": "^6.3.0", - "picocolors": "^1.1.1", - "rettime": "^0.10.1", - "statuses": "^2.0.2", - "strict-event-emitter": "^0.5.1", - "tough-cookie": "^6.0.0", - "type-fest": "^5.2.0", - "until-async": "^3.0.2", - "yargs": "^17.7.2" - }, - "bin": { - "msw": "cli/index.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/mswjs" - }, - "peerDependencies": { - "typescript": ">= 4.8.x" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/msw/node_modules/@inquirer/ansi": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", - "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/msw/node_modules/@inquirer/confirm": { - "version": "5.1.21", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", - "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/msw/node_modules/@inquirer/core": { - "version": "10.3.2", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", - "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "cli-width": "^4.1.0", - "mute-stream": "^2.0.0", - "signal-exit": "^4.1.0", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" } }, - "node_modules/msw/node_modules/@inquirer/figures": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", - "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "node_modules/motion-dom": { + "version": "12.38.0", + "resolved": "https://registry.npmjs.org/motion-dom/-/motion-dom-12.38.0.tgz", + "integrity": "sha512-pdkHLD8QYRp8VfiNLb8xIBJis1byQ9gPT3Jnh2jqfFtAsWUA3dEepDlsWe/xMpO8McV+VdpKVcp+E+TGJEtOoA==", "license": "MIT", - "engines": { - "node": ">=18" + "dependencies": { + "motion-utils": "^12.36.0" } }, - "node_modules/msw/node_modules/@inquirer/type": { - "version": "3.0.10", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", - "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "node_modules/motion-utils": { + "version": "12.36.0", + "resolved": "https://registry.npmjs.org/motion-utils/-/motion-utils-12.36.0.tgz", + "integrity": "sha512-eHWisygbiwVvf6PZ1vhaHCLamvkSbPIeAYxWUuL3a2PD/TROgE7FvfHWTIH4vMl798QLfMw15nRqIaRDXTlYRg==", + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/msw": { + "version": "2.13.6", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.13.6.tgz", + "integrity": "sha512-GAJbQy8Ra/Ydjt0Hb2MGT2qhzd83J3+QZMHdH85uW7r/XkKc846+Ma2PLif5hGvTm5Yqa+wkcstpim0WeLZU9g==", + "hasInstallScript": true, "license": "MIT", + "dependencies": { + "@inquirer/confirm": "^6.0.11", + "@mswjs/interceptors": "^0.41.3", + "@open-draft/deferred-promise": "^3.0.0", + "@types/statuses": "^2.0.6", + "cookie": "^1.1.1", + "graphql": "^16.13.2", + "headers-polyfill": "^5.0.1", + "is-node-process": "^1.2.0", + "outvariant": "^1.4.3", + "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", + "rettime": "^0.11.7", + "statuses": "^2.0.2", + "strict-event-emitter": "^0.5.1", + "tough-cookie": "^6.0.1", + "type-fest": "^5.5.0", + "until-async": "^3.0.2", + "yargs": "^17.7.2" + }, + "bin": { + "msw": "cli/index.js" + }, "engines": { "node": ">=18" }, + "funding": { + "url": "https://github.com/sponsors/mswjs" + }, "peerDependencies": { - "@types/node": ">=18" + "typescript": ">= 4.8.x" }, "peerDependenciesMeta": { - "@types/node": { + "typescript": { "optional": true } } @@ -9802,32 +9561,6 @@ "node": ">=12" } }, - "node_modules/msw/node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/msw/node_modules/mute-stream": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", - "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, "node_modules/msw/node_modules/string-width": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", @@ -9843,9 +9576,9 @@ } }, "node_modules/msw/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "license": "MIT", "dependencies": { "ansi-styles": "^4.0.0", @@ -9853,7 +9586,10 @@ "strip-ansi": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, "node_modules/msw/node_modules/yargs": { @@ -9893,9 +9629,9 @@ } }, "node_modules/mux-embed": { - "version": "5.16.1", - "resolved": "https://registry.npmjs.org/mux-embed/-/mux-embed-5.16.1.tgz", - "integrity": "sha512-XWeOG/nzrfRjdyDajW9VNiP0FuKZhEIHMh8Ybpo8uudQByRSOKH8qOaL+MEGdm7KAHzJunwoyYNodD059Spw/A==", + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/mux-embed/-/mux-embed-5.18.1.tgz", + "integrity": "sha512-ePsHjiEKY+FgrSBiMmaF+LOtTQSSBWv/1zqpREQFN96JE93xlsArT/MEi30yKOE06MgjOlL70YI750molu3y7g==", "license": "MIT" }, "node_modules/negotiator": { @@ -9908,9 +9644,9 @@ } }, "node_modules/node-abi": { - "version": "3.87.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.87.0.tgz", - "integrity": "sha512-+CGM1L1CgmtheLcBuleyYOn7NWPVu0s0EJH2C4puxgEZb9h8QpR9G2dBfZJOAUhi7VQxuBPMd0hiISWcTyiYyQ==", + "version": "3.89.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", + "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", "license": "MIT", "dependencies": { "semver": "^7.3.5" @@ -9960,15 +9696,6 @@ "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "license": "MIT" }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/npm-run-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-6.0.0.tgz", @@ -9998,9 +9725,9 @@ } }, "node_modules/oauth4webapi": { - "version": "3.8.5", - "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.5.tgz", - "integrity": "sha512-A8jmyUckVhRJj5lspguklcl90Ydqk61H3dcU0oLhH3Yv13KpAliKTt5hknpGGPZSSfOwGyraNEFmofDYH+1kSg==", + "version": "3.8.6", + "resolved": "https://registry.npmjs.org/oauth4webapi/-/oauth4webapi-3.8.6.tgz", + "integrity": "sha512-iwemM91xz8nryHti2yTmg5fhyEMVOkOXwHNqbvcATjyajb5oQxCQzrNOA6uElRHuMhQQTKUyFKV9y/CNyg25BQ==", "license": "MIT", "funding": { "url": "https://github.com/sponsors/panva" @@ -10110,22 +9837,22 @@ } }, "node_modules/openid-client": { - "version": "6.8.2", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.2.tgz", - "integrity": "sha512-uOvTCndr4udZsKihJ68H9bUICrriHdUVJ6Az+4Ns6cW55rwM5h0bjVIzDz2SxgOI84LKjFyjOFvERLzdTUROGA==", + "version": "6.8.4", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-6.8.4.tgz", + "integrity": "sha512-QSw0BA08piujetEwfZsHoTrDpMEha7GDZDicQqVwX4u0ChCjefvjDB++TZ8BTg76UpwhzIQgdvvfgfl3HpCSAw==", "license": "MIT", "dependencies": { - "jose": "^6.1.3", - "oauth4webapi": "^3.8.4" + "jose": "^6.2.2", + "oauth4webapi": "^3.8.5" }, "funding": { "url": "https://github.com/sponsors/panva" } }, "node_modules/ora": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-9.3.0.tgz", - "integrity": "sha512-lBX72MWFduWEf7v7uWf5DHp9Jn5BI8bNPGuFgtXMmr2uDz2Gz2749y3am3agSDdkhHPHYmmxEGSKH85ZLGzgXw==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-9.4.0.tgz", + "integrity": "sha512-84cglkRILFxdtA8hAvLNdMrtBpPNBTrQ9/ulg0FA7xLMnD6mifv+enAIeRmvtv+WgdCE+LPGOfQmtJRrVaIVhQ==", "license": "MIT", "dependencies": { "chalk": "^5.6.2", @@ -10134,7 +9861,7 @@ "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", - "stdin-discarder": "^0.3.1", + "stdin-discarder": "^0.3.2", "string-width": "^8.1.0" }, "engines": { @@ -10208,12 +9935,12 @@ } }, "node_modules/p-queue": { - "version": "9.1.0", - "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", - "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.2.0.tgz", + "integrity": "sha512-dWgLE8AH0HjQ9fe74pUkKkvzzYT18Inp4zra3lKHnnwqGvcfcUBrvF2EAVX+envufDNBOzpPq/IBUONDbI7+3g==", "license": "MIT", "dependencies": { - "eventemitter3": "^5.0.1", + "eventemitter3": "^5.0.4", "p-timeout": "^7.0.0" }, "engines": { @@ -10235,12 +9962,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", - "license": "BlueOak-1.0.0" - }, "node_modules/package-manager-detector": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.6.0.tgz", @@ -10289,9 +10010,9 @@ "license": "MIT" }, "node_modules/parse-git-diff": { - "version": "0.0.19", - "resolved": "https://registry.npmjs.org/parse-git-diff/-/parse-git-diff-0.0.19.tgz", - "integrity": "sha512-oh3giwKzsPlOhekiDDyd/pfFKn04IZoTjEThquhfKigwiUHymiP/Tp6AN5nGIwXQdWuBTQvz9AaRdN5TBsJ8MA==", + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/parse-git-diff/-/parse-git-diff-0.0.20.tgz", + "integrity": "sha512-kdoqmZIvkAYmmJxnyetgCf56l/SoYm5zhZ3rJKk/uMgU41YYCtOFvPAu4MMr8YMuAGVQElm/uQ1hXtPHeup6qw==", "license": "MIT" }, "node_modules/parse-ms": { @@ -10346,12 +10067,20 @@ } }, "node_modules/partysocket": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/partysocket/-/partysocket-1.1.13.tgz", - "integrity": "sha512-RNXGzc6j0NISGE84+VTHHtbPwmnzZuOYJm9XZ+en+aZlIA2vC4AfwPlYxAHmGGGko3pQF7xRNhoe7bu1Brej4Q==", + "version": "1.1.18", + "resolved": "https://registry.npmjs.org/partysocket/-/partysocket-1.1.18.tgz", + "integrity": "sha512-SyuvH9VavWOSa14v6dYdp3yfSUDII4BQB1+TkGOFBkjfZKjnDBiba4fhdhwBlqGBkqw4ea3gTA1DYhSffX24Wg==", "license": "MIT", "dependencies": { "event-target-polyfill": "^0.0.4" + }, + "peerDependencies": { + "react": ">=17" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } } }, "node_modules/path-data-parser": { @@ -10385,16 +10114,16 @@ "license": "MIT" }, "node_modules/path-scurry": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.1.tgz", - "integrity": "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "license": "BlueOak-1.0.0", "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" }, "engines": { - "node": "20 || >=22" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -10422,9 +10151,9 @@ } }, "node_modules/pg-protocol": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.11.0.tgz", - "integrity": "sha512-pfsxk2M9M3BuGgDOfuy37VNRRX3jmKgMjcvAcWqNDpZSf4cUmv8HSOl5ViRQFsfARFn0KuUQTgLxVMbNq5NW3g==", + "version": "1.13.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.13.0.tgz", + "integrity": "sha512-zzdvXfS6v89r6v7OcFCHfHlyG/wvry1ALxZo4LqgUoy7W9xhBDMaqOuMiF3qEV45VqsN6rdlcehHrfDtlCPc8w==", "license": "MIT" }, "node_modules/pg-types": { @@ -10507,9 +10236,9 @@ } }, "node_modules/player.style": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.3.1.tgz", - "integrity": "sha512-z/T8hJGaTkHT9vdXgWdOgF37eB1FV7/j52VXQZ2lgEhpru9oT8TaUWIxp6GoxTnhPBM4X6nSbpkAHrT7UTjUKg==", + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/player.style/-/player.style-0.3.4.tgz", + "integrity": "sha512-5O9bkbq0APQIkhptyZwp0gUgheCeImGPFo4hvPF2M5xBmgsUYzsUPHCfMye2xyeRE1zvQBKtziaC3jPgnHE1tw==", "license": "MIT", "workspaces": [ ".", @@ -10519,25 +10248,16 @@ "themes/*" ], "dependencies": { - "media-chrome": "~4.16.1" - } - }, - "node_modules/player.style/node_modules/media-chrome": { - "version": "4.16.1", - "resolved": "https://registry.npmjs.org/media-chrome/-/media-chrome-4.16.1.tgz", - "integrity": "sha512-qtFlsy0lNDVCyVo//ZCAfRPKwgehfOYp6rThZzDUuZ5ypv41yqUfAxK+P9TOs+XSVWXATPTT2WRV0fbW0BH4vQ==", - "license": "MIT", - "dependencies": { - "ce-la-react": "^0.3.2" + "media-chrome": "~4.19.0" } }, "node_modules/playwright": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.58.2.tgz", - "integrity": "sha512-vA30H8Nvkq/cPBnNw4Q8TWz1EJyqgpuinBcHET0YVJVFldr8JDNiU9LaWAE1KqSkRYazuaBhTpB5ZzShOezQ6A==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.59.1.tgz", + "integrity": "sha512-C8oWjPR3F81yljW9o5OxcWzfh6avkVwDD2VYdwIGqTkl+OGFISgypqzfu7dOe4QNLL2aqcWBmI3PMtLIK233lw==", "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.58.2" + "playwright-core": "1.59.1" }, "bin": { "playwright": "cli.js" @@ -10550,9 +10270,9 @@ } }, "node_modules/playwright-core": { - "version": "1.58.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.58.2.tgz", - "integrity": "sha512-yZkEtftgwS8CsfYo7nm0KE8jsvm6i/PTgVtB8DL726wNf6H2IMsDuxCpJj59KDaxCtSnrWan2AeDqM7JBaultg==", + "version": "1.59.1", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.59.1.tgz", + "integrity": "sha512-HBV/RJg81z5BiiZ9yPzIiClYV/QMsDCKUyogwH9p3MCP6IYjUFu/MActgYAvK0oWyV9NlwM3GLBjADyWgydVyg==", "license": "Apache-2.0", "bin": { "playwright-core": "cli.js" @@ -10817,30 +10537,30 @@ } }, "node_modules/react": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", - "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.5.tgz", + "integrity": "sha512-llUJLzz1zTUBrskt2pwZgLq59AemifIftw4aB7JxOqf1HY2FDaGDxgwpAPVzHU1kdWabH7FauP4i1oEeer2WCA==", "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/react-dom": { - "version": "19.2.4", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.4.tgz", - "integrity": "sha512-AXJdLo8kgMbimY95O2aKQqsz2iWi9jMgKJhRBAxECE4IFxfcazB2LmzloIoibJI3C12IlY20+KFaLv+71bUJeQ==", + "version": "19.2.5", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.2.5.tgz", + "integrity": "sha512-J5bAZz+DXMMwW/wV3xzKke59Af6CHY7G4uYLN1OvBcKEsWOs4pQExj86BBKamxl/Ik5bx9whOrvBlSDfWzgSag==", "license": "MIT", "dependencies": { "scheduler": "^0.27.0" }, "peerDependencies": { - "react": "^19.2.4" + "react": "^19.2.5" } }, "node_modules/react-error-boundary": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-6.1.0.tgz", - "integrity": "sha512-02k9WQ/mUhdbXir0tC1NiMesGzRPaCsJEWU/4bcFrbY1YMZOtHShtZP6zw0SJrBWA/31H0KT9/FgdL8+sPKgHA==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-6.1.1.tgz", + "integrity": "sha512-BrYwPOdXi5mqkk5lw+Uvt0ThHx32rCt3BkukS4X23A2AIWDPSGX6iaWTc0y9TU/mHDA/6qOSGel+B2ERkOvD1w==", "license": "MIT", "peerDependencies": { "react": "^18.0.0 || ^19.0.0" @@ -10900,9 +10620,9 @@ } }, "node_modules/react-router": { - "version": "7.13.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.13.0.tgz", - "integrity": "sha512-PZgus8ETambRT17BUm/LL8lX3Of+oiLaPuVTRH3l1eLvSPpKO3AvhAEb5N7ihAFZQrYDqkvvWfFh9p0z9VsjLw==", + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-7.14.2.tgz", + "integrity": "sha512-yCqNne6I8IB6rVCH7XUvlBK7/QKyqypBFGv+8dj4QBFJiiRX+FG7/nkdAvGElyvVZ/HQP5N19wzteuTARXi5Gw==", "license": "MIT", "dependencies": { "cookie": "^1.0.1", @@ -10921,6 +10641,12 @@ } } }, + "node_modules/react-router/node_modules/set-cookie-parser": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", + "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "license": "MIT" + }, "node_modules/react-style-singleton": { "version": "2.2.3", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz", @@ -11300,31 +11026,16 @@ "node": ">=16.6.0" } }, - "node_modules/remix-flat-routes/node_modules/minimatch": { - "version": "10.1.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.1.1.tgz", - "integrity": "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ==", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/brace-expansion": "^5.0.0" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/remix-utils": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/remix-utils/-/remix-utils-9.0.1.tgz", - "integrity": "sha512-u3CmayaYTin/zsjHom7t2CR+A5uWnNnkq7B1ifFtDZknuHeKnldx2BGyNx3uXliIHEOv+a1c8oqi7MIqVypRqg==", + "version": "9.3.1", + "resolved": "https://registry.npmjs.org/remix-utils/-/remix-utils-9.3.1.tgz", + "integrity": "sha512-Z/CVE9mPKYOKxhSV5q2IeXd5W4zl/B4q9YLQfuR3EYNSOop8riQso6QXGJXd+71S96Ox8/haMl34GyV/WBnoVg==", "funding": [ "https://github.com/sponsors/sergiodxa" ], "license": "MIT", "dependencies": { - "type-fest": "^4.41.0" + "type-fest": "^5.4.4" }, "engines": { "node": ">=20.0.0" @@ -11374,18 +11085,6 @@ } } }, - "node_modules/remix-utils/node_modules/type-fest": { - "version": "4.41.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.41.0.tgz", - "integrity": "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/remove-accents": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/remove-accents/-/remove-accents-0.5.0.tgz", @@ -11451,9 +11150,9 @@ } }, "node_modules/rettime": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.10.1.tgz", - "integrity": "sha512-uyDrIlUEH37cinabq0AX4QbgV4HbFZ/gqoiunWQ1UqBtRvTTytwhNYjE++pO/MjPTZL5KQCf2bEoJ/BJNVQ5Kw==", + "version": "0.11.8", + "resolved": "https://registry.npmjs.org/rettime/-/rettime-0.11.8.tgz", + "integrity": "sha512-0fERGXktJTyJ+h8fBEiPxHPEFOu0h15JY7JtwrOVqR5K+vb99ho6IyOo7ekLS3h4sJCzIDy4VWKIbZUfe9njmg==", "license": "MIT" }, "node_modules/reusify": { @@ -11467,9 +11166,9 @@ } }, "node_modules/robust-predicates": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", - "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz", + "integrity": "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA==", "license": "Unlicense" }, "node_modules/roughjs": { @@ -11578,9 +11277,9 @@ "license": "MIT" }, "node_modules/satori": { - "version": "0.19.2", - "resolved": "https://registry.npmjs.org/satori/-/satori-0.19.2.tgz", - "integrity": "sha512-71plFHWcq6WJBM5sf/n0eHOmTBiKLUB/G8du7SmLTTLHKEKrV3TPHGKcEVIoyjnbhnjvu9HhLyF9MATB/zzL7g==", + "version": "0.26.0", + "resolved": "https://registry.npmjs.org/satori/-/satori-0.26.0.tgz", + "integrity": "sha512-tkMFrfIs3l2mQ2JEcyW0ADTy3zGggFRFzi6Ef8YozQSFsFKEqaSO1Y8F9wJg4//PJGQauMalHGTUEkPrFwhVPA==", "license": "MPL-2.0", "dependencies": { "@shuding/opentype.js": "1.4.0-beta.0", @@ -11668,9 +11367,9 @@ } }, "node_modules/set-cookie-parser": { - "version": "2.7.2", - "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.7.2.tgz", - "integrity": "sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-3.1.0.tgz", + "integrity": "sha512-kjnC1DXBHcxaOaOXBHBeRtltsDG2nUiUni+jP92M9gYdW12rsmx92UsfpH7o5tDRs7I1ZZPSQJQGv3UaRfCiuw==", "license": "MIT" }, "node_modules/setprototypeof": { @@ -11909,9 +11608,9 @@ } }, "node_modules/stdin-discarder": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.1.tgz", - "integrity": "sha512-reExS1kSGoElkextOcPkel4NE99S0BWxjUHQeDFnR8S993JxpPX7KU4MNmO19NXhlJp+8dmdCbKQVNgLJh2teA==", + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/stdin-discarder/-/stdin-discarder-0.3.2.tgz", + "integrity": "sha512-eCPu1qRxPVkl5605OTWF8Wz40b4Mf45NY5LQmVPQ599knfs5QhASUm9GbJ5BDMDOXgrnh0wyEdvzmL//YMlw0A==", "license": "MIT", "engines": { "node": ">=18" @@ -11927,13 +11626,13 @@ "license": "MIT" }, "node_modules/string-width": { - "version": "8.1.1", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.1.tgz", - "integrity": "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz", + "integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==", "license": "MIT", "dependencies": { - "get-east-asian-width": "^1.3.0", - "strip-ansi": "^7.1.0" + "get-east-asian-width": "^1.5.0", + "strip-ansi": "^7.1.2" }, "engines": { "node": ">=20" @@ -11942,21 +11641,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/string-width/node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -11970,12 +11654,12 @@ } }, "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz", + "integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "ansi-regex": "^6.2.2" }, "engines": { "node": ">=12" @@ -12016,19 +11700,6 @@ "node": ">=8" } }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/strip-bom-string": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/strip-bom-string/-/strip-bom-string-1.0.0.tgz", @@ -12081,9 +11752,9 @@ } }, "node_modules/stylis": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", - "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.4.0.tgz", + "integrity": "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA==", "license": "MIT" }, "node_modules/supports-color": { @@ -12123,9 +11794,9 @@ } }, "node_modules/tailwind-merge": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.4.0.tgz", - "integrity": "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-3.5.0.tgz", + "integrity": "sha512-I8K9wewnVDkL1NTGoqWmVEIlUcB9gFriAEkXkfCjX5ib8ezGxtR3xD7iZIxrfArjEsH7F1CHD4RFUtxefdqV/A==", "license": "MIT", "funding": { "type": "github", @@ -12270,9 +11941,9 @@ "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.2.tgz", - "integrity": "sha512-W/KYk+NFhkmsYpuHq5JykngiOCnxeVL8v8dFnqxSD8qEEdRfXk1SDM6JzNqcERbcGYj9tMrDQBYV9cjgnunFIg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.1.1.tgz", + "integrity": "sha512-VKS/ZaQhhkKFMANmAOhhXVoIfBXblQxGX1myCQ2faQrfmobMftXeJPcZGp0gS07ocvGJWDLZGyOZDadDBqYIJg==", "license": "MIT", "engines": { "node": ">=18" @@ -12288,30 +11959,30 @@ } }, "node_modules/tinyrainbow": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.0.3.tgz", - "integrity": "sha512-PSkbLUoxOFRzJYjjxHJt9xro7D+iilgMX/C9lawzVuYiIdcihh9DXmVibBe8lmcFrRi/VzlPjBxbN7rH24q8/Q==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-3.1.0.tgz", + "integrity": "sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==", "license": "MIT", "engines": { "node": ">=14.0.0" } }, "node_modules/tldts": { - "version": "7.0.23", - "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.23.tgz", - "integrity": "sha512-ASdhgQIBSay0R/eXggAkQ53G4nTJqTXqC2kbaBbdDwM7SkjyZyO0OaaN1/FH7U/yCeqOHDwFO5j8+Os/IS1dXw==", + "version": "7.0.29", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-7.0.29.tgz", + "integrity": "sha512-JIXCerhudr/N6OWLwLF1HVsTTUo7ry6qHa5eWZEkiMuxsIiAACL55tGLfqfHfoH7QaMQUW8fngD7u7TxWexYQg==", "license": "MIT", "dependencies": { - "tldts-core": "^7.0.23" + "tldts-core": "^7.0.29" }, "bin": { "tldts": "bin/cli.js" } }, "node_modules/tldts-core": { - "version": "7.0.23", - "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.23.tgz", - "integrity": "sha512-0g9vrtDQLrNIiCj22HSe9d4mLVG3g5ph5DZ8zCKBr4OtrspmNB6ss7hVyzArAeE88ceZocIEGkyW1Ime7fxPtQ==", + "version": "7.0.29", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-7.0.29.tgz", + "integrity": "sha512-W99NuU7b1DcG3uJ3v9k9VztCH3WialNbBkBft5wCs8V8mexu0XQqaZEYb9l9RNNzK8+3EJ9PKWB0/RUtTQ/o+Q==", "license": "MIT" }, "node_modules/to-regex-range": { @@ -12342,9 +12013,9 @@ "license": "MIT" }, "node_modules/tough-cookie": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.0.tgz", - "integrity": "sha512-kXuRi1mtaKMrsLUxz3sQYvVl37B0Ns6MzfrtV5DvJceE9bPyspOqk9xxv7XbZWcfLWbFmm997vl83qUWVJA64w==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-6.0.1.tgz", + "integrity": "sha512-LktZQb3IeoUWB9lqR5EWTHgW/VTITCXg4D21M+lvybRVdylLrRMnqaIONLVb5mav8vM19m44HIcGq4qASeu2Qw==", "license": "BSD-3-Clause", "dependencies": { "tldts": "^7.0.5" @@ -12401,9 +12072,9 @@ "license": "BSD" }, "node_modules/type-fest": { - "version": "5.4.4", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.4.4.tgz", - "integrity": "sha512-JnTrzGu+zPV3aXIUhnyWJj4z/wigMsdYajGLIYakqyOW1nPllzXEJee0QQbHj+CTIQtXGlAjuK0UY+2xTyjVAw==", + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-5.6.0.tgz", + "integrity": "sha512-8ZiHFm91orbSAe2PSAiSVBVko18pbhbiB3U9GglSzF/zCGkR+rxpHx6sEMCUm4kxY4LjDIUGgCfUMtwfZfjfUA==", "license": "(MIT OR CC0-1.0)", "dependencies": { "tagged-tag": "^1.0.0" @@ -12430,15 +12101,15 @@ } }, "node_modules/ufo": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz", - "integrity": "sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==", + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", "license": "MIT" }, "node_modules/undici-types": { - "version": "7.16.0", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", - "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "version": "7.19.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.19.2.tgz", + "integrity": "sha512-qYVnV5OEm2AW8cJMCpdV20CDyaN3g0AjDlOGf1OW4iaDEx8MwdtChUp4zu4H0VP3nDRF/8RKWH+IPp9uW0YGZg==", "license": "MIT" }, "node_modules/unicode-emoji-modifier-base": { @@ -12604,54 +12275,6 @@ "node": ">= 0.8" } }, - "node_modules/unplugin": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.0.1.tgz", - "integrity": "sha512-aqrHaVBWW1JVKBHmGo33T5TxeL0qWzfvjWokObHA9bYmN7eNDkwOxmLjhioHl9878qDFMAaT51XNroRyuz7WxA==", - "license": "MIT", - "dependencies": { - "acorn": "^8.8.1", - "chokidar": "^3.5.3", - "webpack-sources": "^3.2.3", - "webpack-virtual-modules": "^0.5.0" - } - }, - "node_modules/unplugin/node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/unplugin/node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, "node_modules/until-async": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/until-async/-/until-async-3.0.2.tgz", @@ -12860,9 +12483,9 @@ "license": "MIT" }, "node_modules/vscode-uri": { - "version": "3.0.8", - "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", - "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.1.0.tgz", + "integrity": "sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==", "license": "MIT" }, "node_modules/web-namespaces": { @@ -12881,21 +12504,6 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "license": "BSD-2-Clause" }, - "node_modules/webpack-sources": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.3.4.tgz", - "integrity": "sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==", - "license": "MIT", - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/webpack-virtual-modules": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.5.0.tgz", - "integrity": "sha512-kyDivFZ7ZM0BVOUteVbDFhlRt7Ah/CSPwJdi8hBpkK7QLumUqdLtVfm/PX/hkcnrvr0i77fO5+TjZ94Pe+C9iw==", - "license": "MIT" - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -12938,53 +12546,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.2.2", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", @@ -13054,9 +12615,9 @@ "license": "ISC" }, "node_modules/ws": { - "version": "8.19.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", - "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -13229,18 +12790,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", - "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/yoga-layout": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/yoga-layout/-/yoga-layout-3.2.1.tgz", diff --git a/epicshop/package.json b/epicshop/package.json index fbdfa9a..43e5ee3 100644 --- a/epicshop/package.json +++ b/epicshop/package.json @@ -4,11 +4,11 @@ "postinstall": "cd ./epic-me && npm install" }, "dependencies": { - "@epic-web/workshop-app": "^6.85.0", - "@epic-web/workshop-utils": "^6.85.0", + "@epic-web/workshop-app": "^6.90.3", + "@epic-web/workshop-utils": "^6.90.3", "chokidar": "^5.0.0", "enquirer": "^2.4.1", - "epicshop": "^6.85.0", + "epicshop": "^6.90.3", "execa": "^9.6.1", "fs-extra": "^11.3.2", "match-sorter": "^8.2.0", From 42a7f5220e69ee67a960293ccb4ebc6442e1dfb1 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 13:13:23 +0000 Subject: [PATCH 05/12] fix: prebundle mcp sdk ssr dependencies Co-authored-by: Kent C. Dodds --- exercises/03.complex/01.problem.iframe/vite.config.ts | 9 +++++++++ exercises/03.complex/01.solution.iframe/vite.config.ts | 9 +++++++++ exercises/03.complex/02.problem.ready/vite.config.ts | 9 +++++++++ exercises/03.complex/02.solution.ready/vite.config.ts | 9 +++++++++ exercises/03.complex/03.problem.sizing/vite.config.ts | 9 +++++++++ exercises/03.complex/03.solution.sizing/vite.config.ts | 9 +++++++++ .../03.complex/04.problem.dynamic-sizing/vite.config.ts | 9 +++++++++ .../03.complex/04.solution.dynamic-sizing/vite.config.ts | 9 +++++++++ exercises/04.interactive/01.problem.links/vite.config.ts | 9 +++++++++ .../04.interactive/01.solution.links/vite.config.ts | 9 +++++++++ exercises/04.interactive/02.problem.tools/vite.config.ts | 9 +++++++++ .../04.interactive/02.solution.tools/vite.config.ts | 9 +++++++++ .../04.interactive/03.problem.prompts/vite.config.ts | 9 +++++++++ .../04.interactive/03.solution.prompts/vite.config.ts | 9 +++++++++ .../05.advanced/01.problem.tool-results/vite.config.ts | 9 +++++++++ .../05.advanced/01.solution.tool-results/vite.config.ts | 9 +++++++++ .../05.advanced/02.problem.render-data/vite.config.ts | 9 +++++++++ .../05.advanced/02.solution.render-data/vite.config.ts | 9 +++++++++ 18 files changed, 162 insertions(+) diff --git a/exercises/03.complex/01.problem.iframe/vite.config.ts b/exercises/03.complex/01.problem.iframe/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/01.problem.iframe/vite.config.ts +++ b/exercises/03.complex/01.problem.iframe/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/03.complex/01.solution.iframe/vite.config.ts b/exercises/03.complex/01.solution.iframe/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/01.solution.iframe/vite.config.ts +++ b/exercises/03.complex/01.solution.iframe/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/03.complex/02.problem.ready/vite.config.ts b/exercises/03.complex/02.problem.ready/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/02.problem.ready/vite.config.ts +++ b/exercises/03.complex/02.problem.ready/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/03.complex/02.solution.ready/vite.config.ts b/exercises/03.complex/02.solution.ready/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/02.solution.ready/vite.config.ts +++ b/exercises/03.complex/02.solution.ready/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/03.complex/03.problem.sizing/vite.config.ts b/exercises/03.complex/03.problem.sizing/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/03.problem.sizing/vite.config.ts +++ b/exercises/03.complex/03.problem.sizing/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/03.complex/03.solution.sizing/vite.config.ts b/exercises/03.complex/03.solution.sizing/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/03.solution.sizing/vite.config.ts +++ b/exercises/03.complex/03.solution.sizing/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts b/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts +++ b/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts b/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts +++ b/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/04.interactive/01.problem.links/vite.config.ts b/exercises/04.interactive/01.problem.links/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/04.interactive/01.problem.links/vite.config.ts +++ b/exercises/04.interactive/01.problem.links/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/04.interactive/01.solution.links/vite.config.ts b/exercises/04.interactive/01.solution.links/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/04.interactive/01.solution.links/vite.config.ts +++ b/exercises/04.interactive/01.solution.links/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/04.interactive/02.problem.tools/vite.config.ts b/exercises/04.interactive/02.problem.tools/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/04.interactive/02.problem.tools/vite.config.ts +++ b/exercises/04.interactive/02.problem.tools/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/04.interactive/02.solution.tools/vite.config.ts b/exercises/04.interactive/02.solution.tools/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/04.interactive/02.solution.tools/vite.config.ts +++ b/exercises/04.interactive/02.solution.tools/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/04.interactive/03.problem.prompts/vite.config.ts b/exercises/04.interactive/03.problem.prompts/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/04.interactive/03.problem.prompts/vite.config.ts +++ b/exercises/04.interactive/03.problem.prompts/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/04.interactive/03.solution.prompts/vite.config.ts b/exercises/04.interactive/03.solution.prompts/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/04.interactive/03.solution.prompts/vite.config.ts +++ b/exercises/04.interactive/03.solution.prompts/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/05.advanced/01.problem.tool-results/vite.config.ts b/exercises/05.advanced/01.problem.tool-results/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/05.advanced/01.problem.tool-results/vite.config.ts +++ b/exercises/05.advanced/01.problem.tool-results/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/05.advanced/01.solution.tool-results/vite.config.ts b/exercises/05.advanced/01.solution.tool-results/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/05.advanced/01.solution.tool-results/vite.config.ts +++ b/exercises/05.advanced/01.solution.tool-results/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/05.advanced/02.problem.render-data/vite.config.ts b/exercises/05.advanced/02.problem.render-data/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/05.advanced/02.problem.render-data/vite.config.ts +++ b/exercises/05.advanced/02.problem.render-data/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', diff --git a/exercises/05.advanced/02.solution.render-data/vite.config.ts b/exercises/05.advanced/02.solution.render-data/vite.config.ts index d805b6f..68b05a1 100644 --- a/exercises/05.advanced/02.solution.render-data/vite.config.ts +++ b/exercises/05.advanced/02.solution.render-data/vite.config.ts @@ -11,6 +11,15 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + ssr: { + optimizeDeps: { + include: [ + '@modelcontextprotocol/sdk/server/completable.js', + '@modelcontextprotocol/sdk/server/mcp.js', + '@modelcontextprotocol/sdk/types.js', + ], + }, + }, plugins: [ { name: 'strip-typegen-imports', From e86d03ab3bead7548b9f1250f91ee15e56bd30df Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 13:23:24 +0000 Subject: [PATCH 06/12] fix: bridge mcp ui renderer messages Co-authored-by: Kent C. Dodds --- .../epic-me/app/routes/mcp-ui-renderer.tsx | 55 ++++++++++++++++--- 1 file changed, 48 insertions(+), 7 deletions(-) diff --git a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx index 058c896..510045a 100644 --- a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx +++ b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx @@ -135,6 +135,16 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { const iframeRef = useRef(null) const [isErrorResponse, setIsErrorResponse] = useState(false) + const sendResponseToIframe = ( + messageId: string, + payload: { response?: unknown; error?: unknown }, + ) => { + iframeRef.current?.contentWindow?.postMessage( + { type: 'ui-message-response', messageId, payload }, + '*', + ) + } + // Auto-scroll when new messages are added and user is at bottom useEffect(() => { if (isAtBottom) { @@ -154,7 +164,6 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { const messageData = typeof event.data === 'string' ? JSON.parse(event.data) : event.data - // Check if this is a UI action message that would be handled by onUIAction const isUIActionMessage = messageData && typeof messageData === 'object' && @@ -163,18 +172,36 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { messageData.type, ) - // Check if this is a lifecycle message that should be handled internally by UIResourceRenderer const isLifecycleMessage = messageData && typeof messageData === 'object' && messageData.type && messageData.type.startsWith('ui-lifecycle-') - // If it's not a UI action message and not a lifecycle message, display it as internal - if (!isUIActionMessage && !isLifecycleMessage) { - const messageContent = JSON.stringify(messageData, null, 2) + const messageContent = JSON.stringify(messageData, null, 2) + + if (isUIActionMessage) { + const { messageId } = messageData + if (!messageId || !pendingPromisesRef.current.has(messageId)) { + addMessage('received', messageContent, messageId) + } + + if (messageId && !pendingPromisesRef.current.has(messageId)) { + pendingPromisesRef.current.set(messageId, { + resolve: (response) => + sendResponseToIframe(messageId, { response }), + reject: (error) => sendResponseToIframe(messageId, { error }), + }) + } + return + } + + if (isLifecycleMessage) { addMessage('internal', messageContent, messageData.messageId) + return } + + addMessage('internal', messageContent, messageData.messageId) } catch { // If we can't parse the message, still display it as internal const messageContent = @@ -214,14 +241,28 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { const handleUIAction = async (result: UIActionResult) => { const messageId = 'messageId' in result ? result.messageId : undefined + const existingPending = messageId + ? pendingPromisesRef.current.get(messageId) + : undefined const fullResult = JSON.stringify(result, null, 2) - addMessage('received', fullResult, messageId) + if (!existingPending) { + addMessage('received', fullResult, messageId) + } // Return a promise that will be resolved when user submits response return new Promise((resolve, reject) => { if (messageId) { - pendingPromisesRef.current.set(messageId, { resolve, reject }) + pendingPromisesRef.current.set(messageId, { + resolve: (value) => { + existingPending?.resolve(value) + resolve(value) + }, + reject: (error) => { + existingPending?.reject(error) + reject(error) + }, + }) } }) } From 780648328dabac11507abfa2111a26466509043a Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 13:30:51 +0000 Subject: [PATCH 07/12] fix: capture iframe ui messages Co-authored-by: Kent C. Dodds --- epicshop/epic-me/app/routes/mcp-ui-renderer.tsx | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx index 510045a..1fe9ac1 100644 --- a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx +++ b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx @@ -213,8 +213,9 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { } } - window.addEventListener('message', handleMessage) - return () => window.removeEventListener('message', handleMessage) + window.addEventListener('message', handleMessage, { capture: true }) + return () => + window.removeEventListener('message', handleMessage, { capture: true }) }, []) const addMessage = ( From 69614ce13378abe317cddc8d39094dde241b2b58 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 13:38:08 +0000 Subject: [PATCH 08/12] fix: attach mcp ui listener before paint Co-authored-by: Kent C. Dodds --- epicshop/epic-me/app/routes/mcp-ui-renderer.tsx | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx index 1fe9ac1..c5282e2 100644 --- a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx +++ b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx @@ -4,7 +4,14 @@ import { type UIActionResult, isUIResource, } from '@mcp-ui/client' -import { useState, useRef, useEffect, useCallback, type RefObject } from 'react' +import { + useState, + useRef, + useEffect, + useCallback, + useLayoutEffect, + type RefObject, +} from 'react' import { Form, isRouteErrorResponse } from 'react-router' import { type Route } from './+types/mcp-ui-renderer' @@ -153,7 +160,7 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { }, [messages, isAtBottom, scrollToBottom]) // Listen to all iframe messages - useEffect(() => { + useLayoutEffect(() => { const handleMessage = (event: MessageEvent) => { // Only handle messages from our iframe if ( From 25cf6aa8e89b1adbe08ea6294d2623d3d800bcf4 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 13:47:15 +0000 Subject: [PATCH 09/12] fix: log mcp ui renderer events Co-authored-by: Kent C. Dodds --- epicshop/epic-me/app/routes/mcp-ui-renderer.tsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx index c5282e2..cd2b781 100644 --- a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx +++ b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx @@ -254,9 +254,7 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { : undefined const fullResult = JSON.stringify(result, null, 2) - if (!existingPending) { - addMessage('received', fullResult, messageId) - } + addMessage('received', fullResult, messageId) // Return a promise that will be resolved when user submits response return new Promise((resolve, reject) => { @@ -316,6 +314,13 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { return messageId && pendingPromisesRef.current.has(messageId) } + const handleIframeLoad = () => { + addMessage( + 'internal', + JSON.stringify({ type: 'ui-lifecycle-iframe-ready' }, null, 2), + ) + } + return (
@@ -366,6 +371,7 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { ref: iframeRef as RefObject, title: `Resource content: ${content.resource.uri}`, 'aria-label': 'Interactive resource renderer', + onLoad: handleIframeLoad, }, autoResizeIframe: true, }} From c34ea587a179b2b576ca51485b070ca0fd43d9d2 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 13:59:54 +0000 Subject: [PATCH 10/12] fix: prebundle interactive ui dependencies Co-authored-by: Kent C. Dodds --- epicshop/epic-me/app/routes/mcp-ui-renderer.tsx | 4 +++- exercises/03.complex/01.problem.iframe/vite.config.ts | 3 +++ exercises/03.complex/01.solution.iframe/vite.config.ts | 3 +++ exercises/03.complex/02.problem.ready/vite.config.ts | 3 +++ exercises/03.complex/02.solution.ready/vite.config.ts | 3 +++ exercises/03.complex/03.problem.sizing/vite.config.ts | 3 +++ exercises/03.complex/03.solution.sizing/vite.config.ts | 3 +++ exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts | 3 +++ .../03.complex/04.solution.dynamic-sizing/vite.config.ts | 3 +++ exercises/04.interactive/01.problem.links/vite.config.ts | 3 +++ exercises/04.interactive/01.solution.links/vite.config.ts | 3 +++ exercises/04.interactive/02.problem.tools/vite.config.ts | 3 +++ exercises/04.interactive/02.solution.tools/vite.config.ts | 3 +++ exercises/04.interactive/03.problem.prompts/vite.config.ts | 3 +++ exercises/04.interactive/03.solution.prompts/vite.config.ts | 3 +++ exercises/05.advanced/01.problem.tool-results/vite.config.ts | 3 +++ exercises/05.advanced/01.solution.tool-results/vite.config.ts | 3 +++ exercises/05.advanced/02.problem.render-data/vite.config.ts | 3 +++ exercises/05.advanced/02.solution.render-data/vite.config.ts | 3 +++ 19 files changed, 57 insertions(+), 1 deletion(-) diff --git a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx index cd2b781..e94f0f4 100644 --- a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx +++ b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx @@ -254,7 +254,9 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { : undefined const fullResult = JSON.stringify(result, null, 2) - addMessage('received', fullResult, messageId) + if (!existingPending) { + addMessage('received', fullResult, messageId) + } // Return a promise that will be resolved when user submits response return new Promise((resolve, reject) => { diff --git a/exercises/03.complex/01.problem.iframe/vite.config.ts b/exercises/03.complex/01.problem.iframe/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/01.problem.iframe/vite.config.ts +++ b/exercises/03.complex/01.problem.iframe/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/03.complex/01.solution.iframe/vite.config.ts b/exercises/03.complex/01.solution.iframe/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/01.solution.iframe/vite.config.ts +++ b/exercises/03.complex/01.solution.iframe/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/03.complex/02.problem.ready/vite.config.ts b/exercises/03.complex/02.problem.ready/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/02.problem.ready/vite.config.ts +++ b/exercises/03.complex/02.problem.ready/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/03.complex/02.solution.ready/vite.config.ts b/exercises/03.complex/02.solution.ready/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/02.solution.ready/vite.config.ts +++ b/exercises/03.complex/02.solution.ready/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/03.complex/03.problem.sizing/vite.config.ts b/exercises/03.complex/03.problem.sizing/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/03.problem.sizing/vite.config.ts +++ b/exercises/03.complex/03.problem.sizing/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/03.complex/03.solution.sizing/vite.config.ts b/exercises/03.complex/03.solution.sizing/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/03.solution.sizing/vite.config.ts +++ b/exercises/03.complex/03.solution.sizing/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts b/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts +++ b/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts b/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts +++ b/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/04.interactive/01.problem.links/vite.config.ts b/exercises/04.interactive/01.problem.links/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/04.interactive/01.problem.links/vite.config.ts +++ b/exercises/04.interactive/01.problem.links/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/04.interactive/01.solution.links/vite.config.ts b/exercises/04.interactive/01.solution.links/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/04.interactive/01.solution.links/vite.config.ts +++ b/exercises/04.interactive/01.solution.links/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/04.interactive/02.problem.tools/vite.config.ts b/exercises/04.interactive/02.problem.tools/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/04.interactive/02.problem.tools/vite.config.ts +++ b/exercises/04.interactive/02.problem.tools/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/04.interactive/02.solution.tools/vite.config.ts b/exercises/04.interactive/02.solution.tools/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/04.interactive/02.solution.tools/vite.config.ts +++ b/exercises/04.interactive/02.solution.tools/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/04.interactive/03.problem.prompts/vite.config.ts b/exercises/04.interactive/03.problem.prompts/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/04.interactive/03.problem.prompts/vite.config.ts +++ b/exercises/04.interactive/03.problem.prompts/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/04.interactive/03.solution.prompts/vite.config.ts b/exercises/04.interactive/03.solution.prompts/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/04.interactive/03.solution.prompts/vite.config.ts +++ b/exercises/04.interactive/03.solution.prompts/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/05.advanced/01.problem.tool-results/vite.config.ts b/exercises/05.advanced/01.problem.tool-results/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/05.advanced/01.problem.tool-results/vite.config.ts +++ b/exercises/05.advanced/01.problem.tool-results/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/05.advanced/01.solution.tool-results/vite.config.ts b/exercises/05.advanced/01.solution.tool-results/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/05.advanced/01.solution.tool-results/vite.config.ts +++ b/exercises/05.advanced/01.solution.tool-results/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/05.advanced/02.problem.render-data/vite.config.ts b/exercises/05.advanced/02.problem.render-data/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/05.advanced/02.problem.render-data/vite.config.ts +++ b/exercises/05.advanced/02.problem.render-data/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ diff --git a/exercises/05.advanced/02.solution.render-data/vite.config.ts b/exercises/05.advanced/02.solution.render-data/vite.config.ts index 68b05a1..f6c8e23 100644 --- a/exercises/05.advanced/02.solution.render-data/vite.config.ts +++ b/exercises/05.advanced/02.solution.render-data/vite.config.ts @@ -11,6 +11,9 @@ export default defineConfig({ server: { port: process.env.PORT ? Number(process.env.PORT) : undefined, }, + optimizeDeps: { + include: ['react-error-boundary'], + }, ssr: { optimizeDeps: { include: [ From 8212fb6936a34739be1e141f9d5a2fbd5466c657 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 14:10:45 +0000 Subject: [PATCH 11/12] fix: stabilize browser exercise tests Co-authored-by: Kent C. Dodds --- epicshop/epic-me/app/routes/mcp-ui-renderer.tsx | 1 - exercises/03.complex/01.problem.iframe/vite.config.ts | 2 +- exercises/03.complex/01.solution.iframe/vite.config.ts | 2 +- exercises/03.complex/02.problem.ready/test/index.test.ts | 2 +- exercises/03.complex/02.problem.ready/vite.config.ts | 2 +- exercises/03.complex/02.problem.ready/vitest.config.ts | 1 + exercises/03.complex/02.solution.ready/test/index.test.ts | 2 +- exercises/03.complex/02.solution.ready/vite.config.ts | 2 +- exercises/03.complex/02.solution.ready/vitest.config.ts | 1 + exercises/03.complex/03.problem.sizing/vite.config.ts | 2 +- exercises/03.complex/03.solution.sizing/vite.config.ts | 2 +- .../03.complex/04.problem.dynamic-sizing/test/index.test.ts | 2 +- exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts | 2 +- .../03.complex/04.problem.dynamic-sizing/vitest.config.ts | 1 + .../03.complex/04.solution.dynamic-sizing/test/index.test.ts | 2 +- .../03.complex/04.solution.dynamic-sizing/vite.config.ts | 2 +- .../03.complex/04.solution.dynamic-sizing/vitest.config.ts | 1 + exercises/04.interactive/01.problem.links/test/index.test.ts | 2 +- exercises/04.interactive/01.problem.links/vite.config.ts | 2 +- exercises/04.interactive/01.problem.links/vitest.config.ts | 1 + exercises/04.interactive/01.solution.links/test/index.test.ts | 2 +- exercises/04.interactive/01.solution.links/vite.config.ts | 2 +- exercises/04.interactive/01.solution.links/vitest.config.ts | 1 + exercises/04.interactive/02.problem.tools/test/index.test.ts | 2 +- exercises/04.interactive/02.problem.tools/vite.config.ts | 2 +- exercises/04.interactive/02.problem.tools/vitest.config.ts | 1 + exercises/04.interactive/02.solution.tools/test/index.test.ts | 2 +- exercises/04.interactive/02.solution.tools/vite.config.ts | 2 +- exercises/04.interactive/02.solution.tools/vitest.config.ts | 1 + .../04.interactive/03.problem.prompts/test/index.test.ts | 2 +- exercises/04.interactive/03.problem.prompts/vite.config.ts | 2 +- exercises/04.interactive/03.problem.prompts/vitest.config.ts | 1 + .../04.interactive/03.solution.prompts/test/index.test.ts | 2 +- exercises/04.interactive/03.solution.prompts/vite.config.ts | 2 +- exercises/04.interactive/03.solution.prompts/vitest.config.ts | 1 + .../05.advanced/01.problem.tool-results/test/index.test.ts | 4 ++-- exercises/05.advanced/01.problem.tool-results/vite.config.ts | 2 +- .../05.advanced/01.problem.tool-results/vitest.config.ts | 1 + .../05.advanced/01.solution.tool-results/test/index.test.ts | 4 ++-- exercises/05.advanced/01.solution.tool-results/vite.config.ts | 2 +- .../05.advanced/01.solution.tool-results/vitest.config.ts | 1 + exercises/05.advanced/02.problem.render-data/vite.config.ts | 2 +- exercises/05.advanced/02.problem.render-data/vitest.config.ts | 1 + exercises/05.advanced/02.solution.render-data/vite.config.ts | 2 +- .../05.advanced/02.solution.render-data/vitest.config.ts | 1 + 45 files changed, 46 insertions(+), 33 deletions(-) diff --git a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx index e94f0f4..ccad9fa 100644 --- a/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx +++ b/epicshop/epic-me/app/routes/mcp-ui-renderer.tsx @@ -204,7 +204,6 @@ export default function MCPRenderer({ loaderData }: Route.ComponentProps) { } if (isLifecycleMessage) { - addMessage('internal', messageContent, messageData.messageId) return } diff --git a/exercises/03.complex/01.problem.iframe/vite.config.ts b/exercises/03.complex/01.problem.iframe/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/01.problem.iframe/vite.config.ts +++ b/exercises/03.complex/01.problem.iframe/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/01.solution.iframe/vite.config.ts b/exercises/03.complex/01.solution.iframe/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/01.solution.iframe/vite.config.ts +++ b/exercises/03.complex/01.solution.iframe/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/02.problem.ready/test/index.test.ts b/exercises/03.complex/02.problem.ready/test/index.test.ts index 60185b3..47fcc08 100644 --- a/exercises/03.complex/02.problem.ready/test/index.test.ts +++ b/exercises/03.complex/02.problem.ready/test/index.test.ts @@ -69,7 +69,7 @@ test('journal viewer sends ui-lifecycle-iframe-ready message', async () => { await page .getByRole('log') .getByText('ui-lifecycle-iframe-ready') - .waitFor({ timeout: 1000 }) + .waitFor({ timeout: 5000 }) .catch((e) => { throw new Error( '🚨 ui-lifecycle-iframe-ready was never received. Make sure to call postMessage with "ui-lifecycle-iframe-ready" with the target set to "*".', diff --git a/exercises/03.complex/02.problem.ready/vite.config.ts b/exercises/03.complex/02.problem.ready/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/02.problem.ready/vite.config.ts +++ b/exercises/03.complex/02.problem.ready/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/02.problem.ready/vitest.config.ts b/exercises/03.complex/02.problem.ready/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/03.complex/02.problem.ready/vitest.config.ts +++ b/exercises/03.complex/02.problem.ready/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/03.complex/02.solution.ready/test/index.test.ts b/exercises/03.complex/02.solution.ready/test/index.test.ts index 60185b3..47fcc08 100644 --- a/exercises/03.complex/02.solution.ready/test/index.test.ts +++ b/exercises/03.complex/02.solution.ready/test/index.test.ts @@ -69,7 +69,7 @@ test('journal viewer sends ui-lifecycle-iframe-ready message', async () => { await page .getByRole('log') .getByText('ui-lifecycle-iframe-ready') - .waitFor({ timeout: 1000 }) + .waitFor({ timeout: 5000 }) .catch((e) => { throw new Error( '🚨 ui-lifecycle-iframe-ready was never received. Make sure to call postMessage with "ui-lifecycle-iframe-ready" with the target set to "*".', diff --git a/exercises/03.complex/02.solution.ready/vite.config.ts b/exercises/03.complex/02.solution.ready/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/02.solution.ready/vite.config.ts +++ b/exercises/03.complex/02.solution.ready/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/02.solution.ready/vitest.config.ts b/exercises/03.complex/02.solution.ready/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/03.complex/02.solution.ready/vitest.config.ts +++ b/exercises/03.complex/02.solution.ready/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/03.complex/03.problem.sizing/vite.config.ts b/exercises/03.complex/03.problem.sizing/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/03.problem.sizing/vite.config.ts +++ b/exercises/03.complex/03.problem.sizing/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/03.solution.sizing/vite.config.ts b/exercises/03.complex/03.solution.sizing/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/03.solution.sizing/vite.config.ts +++ b/exercises/03.complex/03.solution.sizing/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts b/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts index 702ede9..cce7314 100644 --- a/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts +++ b/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts @@ -66,7 +66,7 @@ test('journal viewer sends ui-size-change message', async () => { await page.goto(url.toString()) const message = page.getByRole('log').getByText('ui-size-change') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 ui-size-change was never received. Make sure to call postMessage with "ui-size-change" with width and height and the target set to "*".', { cause: e }, diff --git a/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts b/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts +++ b/exercises/03.complex/04.problem.dynamic-sizing/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/04.problem.dynamic-sizing/vitest.config.ts b/exercises/03.complex/04.problem.dynamic-sizing/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/03.complex/04.problem.dynamic-sizing/vitest.config.ts +++ b/exercises/03.complex/04.problem.dynamic-sizing/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts b/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts index 78affeb..1092659 100644 --- a/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts +++ b/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts @@ -67,7 +67,7 @@ test('journal viewer sends ui-size-change message', async () => { await handleViteDeps(page) const message = page.getByRole('log').getByText('ui-size-change') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 ui-size-change was never received. Make sure to call postMessage with "ui-size-change" with width and height and the target set to "*".', { cause: e }, diff --git a/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts b/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts +++ b/exercises/03.complex/04.solution.dynamic-sizing/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/03.complex/04.solution.dynamic-sizing/vitest.config.ts b/exercises/03.complex/04.solution.dynamic-sizing/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/03.complex/04.solution.dynamic-sizing/vitest.config.ts +++ b/exercises/03.complex/04.solution.dynamic-sizing/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/04.interactive/01.problem.links/test/index.test.ts b/exercises/04.interactive/01.problem.links/test/index.test.ts index a628651..d8f2166 100644 --- a/exercises/04.interactive/01.problem.links/test/index.test.ts +++ b/exercises/04.interactive/01.problem.links/test/index.test.ts @@ -71,7 +71,7 @@ test('journal viewer sends ui-size-change message', async () => { await postButton.click() const message = page.getByRole('log').getByText('link') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 link message was never received. Make sure to call postMessage with "link" with url and the target set to "*".', { cause: e }, diff --git a/exercises/04.interactive/01.problem.links/vite.config.ts b/exercises/04.interactive/01.problem.links/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/04.interactive/01.problem.links/vite.config.ts +++ b/exercises/04.interactive/01.problem.links/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/04.interactive/01.problem.links/vitest.config.ts b/exercises/04.interactive/01.problem.links/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/04.interactive/01.problem.links/vitest.config.ts +++ b/exercises/04.interactive/01.problem.links/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/04.interactive/01.solution.links/test/index.test.ts b/exercises/04.interactive/01.solution.links/test/index.test.ts index a628651..d8f2166 100644 --- a/exercises/04.interactive/01.solution.links/test/index.test.ts +++ b/exercises/04.interactive/01.solution.links/test/index.test.ts @@ -71,7 +71,7 @@ test('journal viewer sends ui-size-change message', async () => { await postButton.click() const message = page.getByRole('log').getByText('link') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 link message was never received. Make sure to call postMessage with "link" with url and the target set to "*".', { cause: e }, diff --git a/exercises/04.interactive/01.solution.links/vite.config.ts b/exercises/04.interactive/01.solution.links/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/04.interactive/01.solution.links/vite.config.ts +++ b/exercises/04.interactive/01.solution.links/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/04.interactive/01.solution.links/vitest.config.ts b/exercises/04.interactive/01.solution.links/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/04.interactive/01.solution.links/vitest.config.ts +++ b/exercises/04.interactive/01.solution.links/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/04.interactive/02.problem.tools/test/index.test.ts b/exercises/04.interactive/02.problem.tools/test/index.test.ts index 3752bb3..f57f91d 100644 --- a/exercises/04.interactive/02.problem.tools/test/index.test.ts +++ b/exercises/04.interactive/02.problem.tools/test/index.test.ts @@ -74,7 +74,7 @@ test('journal viewer sends tool message', async () => { await viewDetailsButton.click() const message = page.getByRole('log').getByText('tool') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 tool message was never received. Make sure to call sendMcpMessage with "tool"', { cause: e }, diff --git a/exercises/04.interactive/02.problem.tools/vite.config.ts b/exercises/04.interactive/02.problem.tools/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/04.interactive/02.problem.tools/vite.config.ts +++ b/exercises/04.interactive/02.problem.tools/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/04.interactive/02.problem.tools/vitest.config.ts b/exercises/04.interactive/02.problem.tools/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/04.interactive/02.problem.tools/vitest.config.ts +++ b/exercises/04.interactive/02.problem.tools/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/04.interactive/02.solution.tools/test/index.test.ts b/exercises/04.interactive/02.solution.tools/test/index.test.ts index 3752bb3..f57f91d 100644 --- a/exercises/04.interactive/02.solution.tools/test/index.test.ts +++ b/exercises/04.interactive/02.solution.tools/test/index.test.ts @@ -74,7 +74,7 @@ test('journal viewer sends tool message', async () => { await viewDetailsButton.click() const message = page.getByRole('log').getByText('tool') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 tool message was never received. Make sure to call sendMcpMessage with "tool"', { cause: e }, diff --git a/exercises/04.interactive/02.solution.tools/vite.config.ts b/exercises/04.interactive/02.solution.tools/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/04.interactive/02.solution.tools/vite.config.ts +++ b/exercises/04.interactive/02.solution.tools/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/04.interactive/02.solution.tools/vitest.config.ts b/exercises/04.interactive/02.solution.tools/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/04.interactive/02.solution.tools/vitest.config.ts +++ b/exercises/04.interactive/02.solution.tools/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/04.interactive/03.problem.prompts/test/index.test.ts b/exercises/04.interactive/03.problem.prompts/test/index.test.ts index 992716c..78b386b 100644 --- a/exercises/04.interactive/03.problem.prompts/test/index.test.ts +++ b/exercises/04.interactive/03.problem.prompts/test/index.test.ts @@ -74,7 +74,7 @@ test('journal viewer sends prompt message', async () => { await viewDetailsButton.click() const message = page.getByRole('log').getByText('prompt') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 prompt message was never received. Make sure to call sendMcpMessage with "prompt"', { cause: e }, diff --git a/exercises/04.interactive/03.problem.prompts/vite.config.ts b/exercises/04.interactive/03.problem.prompts/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/04.interactive/03.problem.prompts/vite.config.ts +++ b/exercises/04.interactive/03.problem.prompts/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/04.interactive/03.problem.prompts/vitest.config.ts b/exercises/04.interactive/03.problem.prompts/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/04.interactive/03.problem.prompts/vitest.config.ts +++ b/exercises/04.interactive/03.problem.prompts/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/04.interactive/03.solution.prompts/test/index.test.ts b/exercises/04.interactive/03.solution.prompts/test/index.test.ts index 992716c..78b386b 100644 --- a/exercises/04.interactive/03.solution.prompts/test/index.test.ts +++ b/exercises/04.interactive/03.solution.prompts/test/index.test.ts @@ -74,7 +74,7 @@ test('journal viewer sends prompt message', async () => { await viewDetailsButton.click() const message = page.getByRole('log').getByText('prompt') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 prompt message was never received. Make sure to call sendMcpMessage with "prompt"', { cause: e }, diff --git a/exercises/04.interactive/03.solution.prompts/vite.config.ts b/exercises/04.interactive/03.solution.prompts/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/04.interactive/03.solution.prompts/vite.config.ts +++ b/exercises/04.interactive/03.solution.prompts/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/04.interactive/03.solution.prompts/vitest.config.ts b/exercises/04.interactive/03.solution.prompts/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/04.interactive/03.solution.prompts/vitest.config.ts +++ b/exercises/04.interactive/03.solution.prompts/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/05.advanced/01.problem.tool-results/test/index.test.ts b/exercises/05.advanced/01.problem.tool-results/test/index.test.ts index f6f162b..ed725af 100644 --- a/exercises/05.advanced/01.problem.tool-results/test/index.test.ts +++ b/exercises/05.advanced/01.problem.tool-results/test/index.test.ts @@ -75,7 +75,7 @@ test('journal viewer sends tool message', async () => { await iframe.getByRole('button', { name: 'Confirm?' }).click() const message = page.getByRole('log').getByText('tool') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 tool message was never received. Make sure to call sendMcpMessage with "tool"', { cause: e }, @@ -103,7 +103,7 @@ test('journal viewer sends tool message', async () => { await page.getByRole('button', { name: 'send' }).click() await iframe .getByText('Deleted') - .waitFor({ timeout: 1000 }) + .waitFor({ timeout: 5000 }) .catch((e) => { throw new Error('🚨 delete_entry response was not processed properly', { cause: e, diff --git a/exercises/05.advanced/01.problem.tool-results/vite.config.ts b/exercises/05.advanced/01.problem.tool-results/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/05.advanced/01.problem.tool-results/vite.config.ts +++ b/exercises/05.advanced/01.problem.tool-results/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/05.advanced/01.problem.tool-results/vitest.config.ts b/exercises/05.advanced/01.problem.tool-results/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/05.advanced/01.problem.tool-results/vitest.config.ts +++ b/exercises/05.advanced/01.problem.tool-results/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/05.advanced/01.solution.tool-results/test/index.test.ts b/exercises/05.advanced/01.solution.tool-results/test/index.test.ts index f6f162b..ed725af 100644 --- a/exercises/05.advanced/01.solution.tool-results/test/index.test.ts +++ b/exercises/05.advanced/01.solution.tool-results/test/index.test.ts @@ -75,7 +75,7 @@ test('journal viewer sends tool message', async () => { await iframe.getByRole('button', { name: 'Confirm?' }).click() const message = page.getByRole('log').getByText('tool') - await message.waitFor({ timeout: 1000 }).catch((e) => { + await message.waitFor({ timeout: 5000 }).catch((e) => { throw new Error( '🚨 tool message was never received. Make sure to call sendMcpMessage with "tool"', { cause: e }, @@ -103,7 +103,7 @@ test('journal viewer sends tool message', async () => { await page.getByRole('button', { name: 'send' }).click() await iframe .getByText('Deleted') - .waitFor({ timeout: 1000 }) + .waitFor({ timeout: 5000 }) .catch((e) => { throw new Error('🚨 delete_entry response was not processed properly', { cause: e, diff --git a/exercises/05.advanced/01.solution.tool-results/vite.config.ts b/exercises/05.advanced/01.solution.tool-results/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/05.advanced/01.solution.tool-results/vite.config.ts +++ b/exercises/05.advanced/01.solution.tool-results/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/05.advanced/01.solution.tool-results/vitest.config.ts b/exercises/05.advanced/01.solution.tool-results/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/05.advanced/01.solution.tool-results/vitest.config.ts +++ b/exercises/05.advanced/01.solution.tool-results/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/05.advanced/02.problem.render-data/vite.config.ts b/exercises/05.advanced/02.problem.render-data/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/05.advanced/02.problem.render-data/vite.config.ts +++ b/exercises/05.advanced/02.problem.render-data/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/05.advanced/02.problem.render-data/vitest.config.ts b/exercises/05.advanced/02.problem.render-data/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/05.advanced/02.problem.render-data/vitest.config.ts +++ b/exercises/05.advanced/02.problem.render-data/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) diff --git a/exercises/05.advanced/02.solution.render-data/vite.config.ts b/exercises/05.advanced/02.solution.render-data/vite.config.ts index f6c8e23..56d6a23 100644 --- a/exercises/05.advanced/02.solution.render-data/vite.config.ts +++ b/exercises/05.advanced/02.solution.render-data/vite.config.ts @@ -12,7 +12,7 @@ export default defineConfig({ port: process.env.PORT ? Number(process.env.PORT) : undefined, }, optimizeDeps: { - include: ['react-error-boundary'], + include: ['react-error-boundary', 'zod'], }, ssr: { optimizeDeps: { diff --git a/exercises/05.advanced/02.solution.render-data/vitest.config.ts b/exercises/05.advanced/02.solution.render-data/vitest.config.ts index 54103c3..b99cb40 100644 --- a/exercises/05.advanced/02.solution.render-data/vitest.config.ts +++ b/exercises/05.advanced/02.solution.render-data/vitest.config.ts @@ -6,5 +6,6 @@ import { defineConfig } from 'vitest/config' export default defineConfig({ test: { globalSetup: './test/globalSetup.ts', + testTimeout: 30_000, }, }) From edd08aa7a435f3e4cd52d0d072d68915549cdd36 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Sun, 3 May 2026 14:22:35 +0000 Subject: [PATCH 12/12] fix: wait for iframe hydration in browser tests Co-authored-by: Kent C. Dodds --- exercises/03.complex/02.problem.ready/test/index.test.ts | 1 + exercises/03.complex/02.solution.ready/test/index.test.ts | 1 + .../03.complex/04.problem.dynamic-sizing/test/index.test.ts | 1 + .../03.complex/04.solution.dynamic-sizing/test/index.test.ts | 1 + exercises/04.interactive/01.problem.links/test/index.test.ts | 1 + exercises/04.interactive/01.solution.links/test/index.test.ts | 1 + exercises/04.interactive/02.problem.tools/test/index.test.ts | 1 + exercises/04.interactive/02.solution.tools/test/index.test.ts | 1 + exercises/04.interactive/03.problem.prompts/test/index.test.ts | 1 + exercises/04.interactive/03.solution.prompts/test/index.test.ts | 1 + exercises/05.advanced/01.problem.tool-results/test/index.test.ts | 1 + .../05.advanced/01.solution.tool-results/test/index.test.ts | 1 + exercises/05.advanced/02.problem.render-data/test/index.test.ts | 1 + exercises/05.advanced/02.solution.render-data/test/index.test.ts | 1 + 14 files changed, 14 insertions(+) diff --git a/exercises/03.complex/02.problem.ready/test/index.test.ts b/exercises/03.complex/02.problem.ready/test/index.test.ts index 47fcc08..83daefd 100644 --- a/exercises/03.complex/02.problem.ready/test/index.test.ts +++ b/exercises/03.complex/02.problem.ready/test/index.test.ts @@ -93,4 +93,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/03.complex/02.solution.ready/test/index.test.ts b/exercises/03.complex/02.solution.ready/test/index.test.ts index 47fcc08..83daefd 100644 --- a/exercises/03.complex/02.solution.ready/test/index.test.ts +++ b/exercises/03.complex/02.solution.ready/test/index.test.ts @@ -93,4 +93,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts b/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts index cce7314..345a2a8 100644 --- a/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts +++ b/exercises/03.complex/04.problem.dynamic-sizing/test/index.test.ts @@ -102,4 +102,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts b/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts index 1092659..925e6e6 100644 --- a/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts +++ b/exercises/03.complex/04.solution.dynamic-sizing/test/index.test.ts @@ -103,4 +103,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/04.interactive/01.problem.links/test/index.test.ts b/exercises/04.interactive/01.problem.links/test/index.test.ts index d8f2166..05c63fb 100644 --- a/exercises/04.interactive/01.problem.links/test/index.test.ts +++ b/exercises/04.interactive/01.problem.links/test/index.test.ts @@ -110,4 +110,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/04.interactive/01.solution.links/test/index.test.ts b/exercises/04.interactive/01.solution.links/test/index.test.ts index d8f2166..05c63fb 100644 --- a/exercises/04.interactive/01.solution.links/test/index.test.ts +++ b/exercises/04.interactive/01.solution.links/test/index.test.ts @@ -110,4 +110,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/04.interactive/02.problem.tools/test/index.test.ts b/exercises/04.interactive/02.problem.tools/test/index.test.ts index f57f91d..4670be4 100644 --- a/exercises/04.interactive/02.problem.tools/test/index.test.ts +++ b/exercises/04.interactive/02.problem.tools/test/index.test.ts @@ -114,4 +114,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/04.interactive/02.solution.tools/test/index.test.ts b/exercises/04.interactive/02.solution.tools/test/index.test.ts index f57f91d..4670be4 100644 --- a/exercises/04.interactive/02.solution.tools/test/index.test.ts +++ b/exercises/04.interactive/02.solution.tools/test/index.test.ts @@ -114,4 +114,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/04.interactive/03.problem.prompts/test/index.test.ts b/exercises/04.interactive/03.problem.prompts/test/index.test.ts index 78b386b..6c9952c 100644 --- a/exercises/04.interactive/03.problem.prompts/test/index.test.ts +++ b/exercises/04.interactive/03.problem.prompts/test/index.test.ts @@ -113,4 +113,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/04.interactive/03.solution.prompts/test/index.test.ts b/exercises/04.interactive/03.solution.prompts/test/index.test.ts index 78b386b..6c9952c 100644 --- a/exercises/04.interactive/03.solution.prompts/test/index.test.ts +++ b/exercises/04.interactive/03.solution.prompts/test/index.test.ts @@ -113,4 +113,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/05.advanced/01.problem.tool-results/test/index.test.ts b/exercises/05.advanced/01.problem.tool-results/test/index.test.ts index ed725af..6a58006 100644 --- a/exercises/05.advanced/01.problem.tool-results/test/index.test.ts +++ b/exercises/05.advanced/01.problem.tool-results/test/index.test.ts @@ -126,4 +126,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/05.advanced/01.solution.tool-results/test/index.test.ts b/exercises/05.advanced/01.solution.tool-results/test/index.test.ts index ed725af..6a58006 100644 --- a/exercises/05.advanced/01.solution.tool-results/test/index.test.ts +++ b/exercises/05.advanced/01.solution.tool-results/test/index.test.ts @@ -126,4 +126,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/05.advanced/02.problem.render-data/test/index.test.ts b/exercises/05.advanced/02.problem.render-data/test/index.test.ts index 5f67f97..6bd5366 100644 --- a/exercises/05.advanced/02.problem.render-data/test/index.test.ts +++ b/exercises/05.advanced/02.problem.render-data/test/index.test.ts @@ -90,4 +90,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) } diff --git a/exercises/05.advanced/02.solution.render-data/test/index.test.ts b/exercises/05.advanced/02.solution.render-data/test/index.test.ts index 5f67f97..6bd5366 100644 --- a/exercises/05.advanced/02.solution.render-data/test/index.test.ts +++ b/exercises/05.advanced/02.solution.render-data/test/index.test.ts @@ -90,4 +90,5 @@ async function handleViteDeps(page: Page) { // good... }, ) + await new Promise((resolve) => setTimeout(resolve, 1_000)) }