diff --git a/.dev/roadmap.md b/.dev/roadmap.md deleted file mode 100644 index 7c6476ec..00000000 --- a/.dev/roadmap.md +++ /dev/null @@ -1,17 +0,0 @@ -# overture/docs — Roadmap - -Planned work and known improvements for the Overture documentation site. - ---- - -## Submodule branch tracking - -### Track release branches, not default/main - -**What:** Configure each submodule in `.gitmodules` to track the project's release branch rather than its default branch (currently no `branch` is set, so `git submodule update --remote` follows the remote default, which is `main`). - -**Why:** `main` on each project repo carries in-progress and unreleased changes. The docs site should reflect what has been released, not what is being developed. Pinning to a release branch (e.g. `release` or `release-2.x`) means submodule updates stay in sync with published versions rather than pulling ahead of them. - -**How:** Add a `branch = ` line to each submodule entry in `.gitmodules`, then update the docs publish workflow to run `git submodule update --remote` against those branches. - -**Scope:** Requires confirming the release branch naming convention per project (Arranger uses `release`; verify for SONG, Score, Stage, Maestro, Lectern, Lyric). diff --git a/.gitignore b/.gitignore index c3178b05..143e55e1 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,7 @@ npm-debug.log* yarn-debug.log* yarn-error.log* + +# Project Management Context +/CCDdoc +/.dev \ No newline at end of file diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 00000000..1b041985 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,30 @@ + +# Agent collaboration conventions — Overture Docs + +**For AI agents:** this file is instructions you read and follow, not documentation written for people. If you're a person, see [README.md](README.md) instead. + +Adapted from [softeng/agentics](https://github.com/oicr-softeng/agentics). This is the canonical, agent-neutral source for **Overture Docs-specific** conventions; `CLAUDE.md` is a stub that points here. + +Universal conventions (interaction style, critical constraints, testing, code style, security, documentation, session discipline), the developer role, the softeng team layer, and the Overture product-family layer (`CLAUDE.overture.md`, applied because project memory flags this as an Overture repo) are **not duplicated here**: they come from the developer's agentics-based global context and the local clone at `~/.claude/agentics/template/`. Any agent working in this repo reads those on demand; this file adds only what is specific to Overture Docs. + +## Session start +Before touching content, read `.dev/roadmap.md`, `.dev/tech-debt.md`, and the most recent file(s) in `.dev/sessions/`. Full session-start sequence: `~/.claude/agentics/template/conventions/session-discipline.md`. + +## When to read what (agentics conventions — read on demand) +The canonical task→convention dispatch table lives in `~/.claude/agentics/template/AGENTS.md` § "When to read what": tests, code style, code review, docs, security, convention levels, upgrading adoption. Read the matching file from `~/.claude/agentics/template/conventions/` when doing that task. Most work here is documentation, so `conventions/documentation.md` applies to the majority of changes. + +## Project context +Overture Docs is the **centralized documentation site for the Overture stack**, built with [Docusaurus](https://docusaurus.io/). It aggregates Markdown from the `/docs` directory of each Overture project repository (pulled in as git submodules) and renders them as one navigable site. The point of the setup is that documentation stays with its source project while readers get a single hub. Full overview in [README.md](README.md); planned work lives in `.dev/roadmap.md`. + +## Project-specific constraints +- **Public repository** (`overture-stack/docs`): no credentials, secrets, tokens, or private URLs in any committed file, ever. +- **Documentation content is owned by the submodules, not this repo.** Each project's docs live in `submodules//docs/` and are symlinked into `website/docs/`. Edit the **source** file under `submodules//`, never the symlinked copy under `website/docs/`: editing through the link mutates the vendored submodule's working tree in a way that is easy to lose and confusing to review. Symlinks are (re)generated by `symlinker.sh`. +- **Submodules are separate Overture repos with their own conventions.** Defer to any in-tree `AGENTS.md`/`CLAUDE.md` inside a submodule; do not apply this repo's root conventions on top of vendored component code. Changes to a submodule's actual content belong in that submodule's own repo and PR flow, not here. +- **Only site scaffolding and aggregation live in this repo**: the Docusaurus config, theme, components, and the symlink/build wiring under `website/`. That is what a change to *this* repo (as opposed to a submodule) should normally touch. + +## Repository orientation +- `submodules/` — vendored Overture repos as git submodules: `arranger`, `lectern`, `lyric`, `maestro`, `score`, `song`, `stage`, and `.github`. Each carries its own `/docs`. Defined in `.gitmodules` (see `.dev/roadmap.md`: release-branch tracking is not yet configured, so `git submodule update --remote` currently follows each repo's default branch). +- `website/` — the Docusaurus site: `docs/` (aggregated, symlinked from submodules), `community/`, `guides/`, and `src/` (`components/`, `css/`, `theme/`, `pages/`). +- `symlinker.sh` — regenerates the symlinks that bring selected submodule `/docs` files into `website/docs/`. +- `README.md`, `preview.png` — human-facing project overview and screenshot. +- Local setup: Node 18+, `npm ci`, then `npm start` (see `README.md` § Getting Started). diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..01dc0424 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,7 @@ +# Agent collaboration conventions + +**For AI agents:** this file is instructions your agent reads and follows; it is not documentation written for people. If you're a person looking for how this project works, see [README.md](README.md) instead. + +Adapted from [softeng/agentics](https://github.com/oicr-softeng/agentics). + +This file exists only because Claude Code loads it automatically; it is not the canonical source. Read [AGENTS.md](AGENTS.md) now for this project's conventions. Universal conventions, your role, and the softeng team layer come from your global context (`~/.claude/CLAUDE.md`) and the agentics clone at `~/.claude/agentics/template/`, so none of it is duplicated here to drift out of sync. diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 6ab68257..00000000 --- a/package-lock.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "name": "docs", - "lockfileVersion": 3, - "requires": true, - "packages": {} -} diff --git a/submodules/.github b/submodules/.github index e750770a..95a989c4 160000 --- a/submodules/.github +++ b/submodules/.github @@ -1 +1 @@ -Subproject commit e750770a2fc9e15a3f5389f9e4d0aa8bee949ac2 +Subproject commit 95a989c42083ec9be906d4c14a840e608d877edf diff --git a/submodules/arranger b/submodules/arranger index 834ad943..0f85ea63 160000 --- a/submodules/arranger +++ b/submodules/arranger @@ -1 +1 @@ -Subproject commit 834ad943ef0c9c467ae4e53dc4660bcc0099420e +Subproject commit 0f85ea636b4f192dcd242d520747f998d838ae0e diff --git a/submodules/lectern b/submodules/lectern index b41a4d6c..fd3ad9cd 160000 --- a/submodules/lectern +++ b/submodules/lectern @@ -1 +1 @@ -Subproject commit b41a4d6c28ad669c9ebf8bf5d68187f38a126a64 +Subproject commit fd3ad9cd79cb3eacd1312c28fe2ece1d63d7a29b diff --git a/submodules/lyric b/submodules/lyric index b1d289fe..a2d6776a 160000 --- a/submodules/lyric +++ b/submodules/lyric @@ -1 +1 @@ -Subproject commit b1d289fec5c0f68f023e35fe1141677614c6242f +Subproject commit a2d6776a790b8665b236be4b4595d5f9cad60abe diff --git a/submodules/maestro b/submodules/maestro index e8beeb1b..bb49835a 160000 --- a/submodules/maestro +++ b/submodules/maestro @@ -1 +1 @@ -Subproject commit e8beeb1b6913a986b59390d50aa4cb0a87818eb4 +Subproject commit bb49835a1230146f2e1e9ba3d7ee831609e3e8f0 diff --git a/submodules/score b/submodules/score index 26ecc754..d4f98d09 160000 --- a/submodules/score +++ b/submodules/score @@ -1 +1 @@ -Subproject commit 26ecc754fe7fbe71e7d2acd31b2ec066c5be3f49 +Subproject commit d4f98d09c93b82b2d797e2c4b6007dd29d71d9b7 diff --git a/submodules/song b/submodules/song index 5ebe11fa..bb137387 160000 --- a/submodules/song +++ b/submodules/song @@ -1 +1 @@ -Subproject commit 5ebe11fae66679d6634ecdd3f7cbbd1e85b4defe +Subproject commit bb137387fd9234b39cdad02126812c20adf2421f diff --git a/submodules/stage b/submodules/stage index fa63b860..607490f6 160000 --- a/submodules/stage +++ b/submodules/stage @@ -1 +1 @@ -Subproject commit fa63b86054c853374ae982c85fffc9f5c72f6924 +Subproject commit 607490f6951384eec8b25333ca0eaae49a493a7d diff --git a/symlinker.sh b/symlinker.sh index 047acedd..346a5e08 100755 --- a/symlinker.sh +++ b/symlinker.sh @@ -1,16 +1,43 @@ -#!/bin/bash +#!/usr/bin/env bash +# +# Regenerates the documentation symlinks under website/docs/ that bring each +# submodule's docs into the Docusaurus site. Run from the repository root: +# +# ./symlinker.sh +# +# These links MUST match what is committed under website/docs/. If you change +# what the site surfaces, change it here and regenerate — so the script and the +# repo never disagree. (A drifted script silently rebuilds a *different* site.) +# +# Link targets are relative, never absolute: Netlify resolves them at build time +# and absolute paths do not deploy correctly. +# +set -euo pipefail +cd "$(dirname "$0")" -# Do not use absolute paths, they will not deploy on netlify correctly -# Run this from the directory you want the link to be made in -ln -s ../../../submodules/song/docs/ 01-song -ln -s ../../../submodules/score/docs/ 02-score -ln -s ../../../submodules/maestro/docs/ 03-maestro -ln -s ../../../submodules/arranger/docs/ 04-arranger -ln -s ../../../submodules/stage/docs/ 05-stage +# --- Core software: each links the component's whole docs/ directory --- +# link path (under website/docs/) submodule +core_links=( + "website/docs/develop-docs/01-Lectern lectern" + "website/docs/develop-docs/02-Lyric lyric" + "website/docs/develop-docs/03-Song song" + "website/docs/develop-docs/04-Score score" + "website/docs/develop-docs/05-Maestro maestro" + "website/docs/develop-docs/06-Arranger arranger" + "website/docs/develop-docs/07-Stage stage" +) +for entry in "${core_links[@]}"; do + read -r link comp <<<"$entry" + rm -rf "$link" + ln -s "../../../submodules/${comp}/docs/" "$link" +done -# Linked into from bridge/website/docs/04-Standards -ln -s ../../submodules/.github/standards 04-standards +# --- Org-level documentation standards (from the .github submodule) --- +# Re-homed under the Community journey (website/docs/community-docs/) in +# the Deploy·Build·Use IA migration; the relative target has one fewer +# ../ than the core_links above because this symlink sits directly under +# docs/community-docs/, not nested a level deeper like 01-core-software/. +rm -rf "website/docs/community-docs/07-documentation-standards" +ln -s "../../../submodules/.github/standards" "website/docs/community-docs/07-documentation-standards" -# Linked into from bridge/website/docs/03-under-development -ln -s ../../../submodules/lectern/docs/overview 01-lectern -ln -s ../../../submodules/lyric/docs/ 02-lyric +echo "Regenerated $(( ${#core_links[@]} + 1 )) doc symlinks under website/." diff --git a/website/casestudiesSidebars.ts b/website/casestudiesSidebars.ts deleted file mode 100644 index 63be8074..00000000 --- a/website/casestudiesSidebars.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; - -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ -const sidebars: SidebarsConfig = { - // By default, Docusaurus generates a sidebar from the docs folder structure -casestudiesSidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - -// guidesSidebar: [ -// { -// type: 'category', -// label: 'moduleA', -// items: ['moduleA/nestedFolder/nestedElement'], -// }, -// { -// type: 'category', -// label: 'moduleB', -// items: ['moduleB/littleBlackSubmarines'], -// }, -// ], -}; - -export default sidebars; diff --git a/website/communitySidebars.ts b/website/communitySidebars.ts index 27604c91..e96958fd 100644 --- a/website/communitySidebars.ts +++ b/website/communitySidebars.ts @@ -1,33 +1,25 @@ import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ +// The documentation-standards content is vendored from the .github submodule +// (symlinked), so we can't drop a _category_.json inside it to set the +// sidebar label — it's wired up explicitly here instead (same pattern as +// developSidebars.ts for the per-component vendored docs). const sidebars: SidebarsConfig = { - // By default, Docusaurus generates a sidebar from the docs folder structure - communitySidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - -// guidesSidebar: [ -// { -// type: 'category', -// label: 'moduleA', -// items: ['moduleA/nestedFolder/nestedElement'], -// }, -// { -// type: 'category', -// label: 'moduleB', -// items: ['moduleB/littleBlackSubmarines'], -// }, -// ], + communitySidebar: [ + 'support', + 'team', + 'funding', + 'licensing', + 'code-of-conduct', + 'contribution', + 'citing-us', + { + type: 'category', + label: 'Documentation Standards', + link: {type: 'doc', id: 'documentation-standards/documentation-standards'}, + items: [{type: 'autogenerated', dirName: '07-documentation-standards'}], + }, + ], }; export default sidebars; diff --git a/website/deploySidebars.ts b/website/deploySidebars.ts new file mode 100644 index 00000000..c3c0d355 --- /dev/null +++ b/website/deploySidebars.ts @@ -0,0 +1,50 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebars: SidebarsConfig = { + // Prelude is marked `unlisted` (hidden for now, still reachable by direct + // link) so it's left out here rather than autogenerated. The Quickstart page + // was removed entirely on 2026-07-30 along with the prelude `quickstart` + // branch it documented; each component now documents its own development + // environment in its own repository. The deployment docs are organized into + // service categories so users can open individual pages for each deployable + // service. + deploySidebar: [ + "index", + { + type: "category", + label: "Authorization", + collapsible: false, + className: "sidebar-section-heading", + items: ["deployment/keycloak"], + }, + { + type: "category", + label: "File Transfer", + collapsible: false, + className: "sidebar-section-heading", + items: ["deployment/song", "deployment/score"], + }, + { + type: "category", + label: "Tabular Data Submission", + collapsible: false, + className: "sidebar-section-heading", + items: ["deployment/lectern", "deployment/lyric"], + }, + { + type: "category", + label: "Search Portal", + collapsible: false, + className: "sidebar-section-heading", + items: [ + "deployment/search-engine", + "deployment/maestro", + "deployment/arranger", + "deployment/stage", + "deployment/arranger-mcp-server", + ], + }, + ], +}; + +export default sidebars; diff --git a/website/developSidebars.ts b/website/developSidebars.ts new file mode 100644 index 00000000..64aee4a8 --- /dev/null +++ b/website/developSidebars.ts @@ -0,0 +1,99 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebars: SidebarsConfig = { + useSidebar: [ + "index", + + { + type: "category", + label: "File Transfer", + collapsible: false, + className: "sidebar-section-heading", + items: [ + { + type: "category", + label: "Song", + link: { + type: "doc", + id: "Song/overview", + }, + items: [{ type: "autogenerated", dirName: "03-Song" }], + }, + { + type: "category", + label: "Score", + link: { + type: "doc", + id: "Score/overview", + }, + items: [{ type: "autogenerated", dirName: "04-Score" }], + }, + ], + }, + + { + type: "category", + label: "Tabular Data Submission", + collapsible: false, + className: "sidebar-section-heading", + items: [ + { + type: "category", + label: "Lectern", + link: { + type: "doc", + id: "Lectern/overview", + }, + items: [{ type: "autogenerated", dirName: "01-Lectern" }], + }, + { + type: "category", + label: "Lyric", + link: { + type: "doc", + id: "Lyric/overview", + }, + items: [{ type: "autogenerated", dirName: "02-Lyric" }], + }, + { + type: "category", + label: "Maestro", + link: { + type: "doc", + id: "Maestro/overview", + }, + items: [{ type: "autogenerated", dirName: "05-Maestro" }], + }, + ], + }, + + { + type: "category", + label: "Search Portal", + collapsible: false, + className: "sidebar-section-heading", + items: [ + { + type: "category", + label: "Arranger", + link: { + type: "doc", + id: "Arranger/overview", + }, + items: [{ type: "autogenerated", dirName: "06-Arranger" }], + }, + { + type: "category", + label: "Stage", + link: { + type: "doc", + id: "Stage/overview", + }, + items: [{ type: "autogenerated", dirName: "07-Stage" }], + }, + ], + }, + ], +}; + +export default sidebars; diff --git a/website/docs/00-getting-started.mdx b/website/docs/00-getting-started.mdx deleted file mode 100644 index 5b754d1d..00000000 --- a/website/docs/00-getting-started.mdx +++ /dev/null @@ -1,37 +0,0 @@ -# Getting Started - -Our documentation is the definitive resource for the Overture project. Here you'll find comprehensive guides for implementing our software in development environments, up-to-date documentation on products under active development, technical standards, and additional resources. - - - -## Support & Contributions - -- For support, feature requests, and bug reports, please see our [Support Guide](https://docs.overture.bio/community/support). - -- For detailed information on how to contribute to this project, please see our [Contributing Guide](https://docs.overture.bio/docs/contribution). diff --git a/website/docs/01-core-software/01-core-software.mdx b/website/docs/01-core-software/01-core-software.mdx deleted file mode 100644 index 3901907e..00000000 --- a/website/docs/01-core-software/01-core-software.mdx +++ /dev/null @@ -1,70 +0,0 @@ -# Core Software - -![Core Software](./images/core-software.webp "Core Software") - -:::info -Overture is a genomics data platform that combines front and back-end services. Stage handles navigation, while Arranger enables data search. Authentication runs through Keycloak/Ego, Song manages metadata, Score handles S3 file transfers, and Maestro indexes to Elasticsearch for Arranger's search functionality. Together, these components enable efficient genomics data management. -::: - -## Documentation Structure - -Our core software documentation is organized as follows: - -``` -. -└── /Service/ - ├── /Overview - ├── /Setup - └── /Usage -``` - -### Overview - -The Overview section for each service typically includes: - High-level overview of the service - System architecture diagram and explanation - Key features and capabilities - Repository structure - Links to relevant GitHub repositories or additional resources - -### Setup - -The Setup section runs you through the process of getting each service setup in a development environment. We offer guidance for the following Overture development configurations: - - - - ![Platform](../02-platform-tools/images/platform.svg 'Overture Platform') - - - ![Song Dev](../02-platform-tools/images/songDev.svg 'Song Dev Environment') - - - ![Score Dev](../02-platform-tools/images/scoreDev.svg 'Score Dev - Environment') - - - ![Maestro Dev](../02-platform-tools/images/maestroDev.svg 'Maestro Dev - Environment') - - - ![Arranger Dev](../02-platform-tools/images/arrangerDev.svg 'Arranger Dev - Environment') - - - ![Stage Dev](../02-platform-tools/images/stageDev.svg 'Stage Dev - Environment') - - - -:::info -For newcomers to Overture, we recommend starting with our Platform Quickstart and Platform Guides. Combined resources provide a comprehensive overview and hands-on experience with the Overture ecosystem. To begin your journey, [visit our Platform Guides](/guides/getting-started). -::: - -### Usage - -The Usage section provides detailed information on how to effectively use each service, including: - -- Interacting with the API -- Common use cases and best practices -- Troubleshooting and FAQs -- Integration tips with other Overture services -- Performance optimization suggestions - -### Contents - - diff --git a/website/docs/01-core-software/images/core-software.webp b/website/docs/01-core-software/images/core-software.webp deleted file mode 100644 index ed50ce73..00000000 Binary files a/website/docs/01-core-software/images/core-software.webp and /dev/null differ diff --git a/website/docs/02-platform-tools/02-platform-tools.mdx b/website/docs/02-platform-tools/02-platform-tools.mdx deleted file mode 100644 index 36bd00cc..00000000 --- a/website/docs/02-platform-tools/02-platform-tools.mdx +++ /dev/null @@ -1,5 +0,0 @@ -# Platform Tools - -This section provides information on software that is part of the broader Overture project including our quickstart and platform development toolkit (Prelude). - - diff --git a/website/docs/02-platform-tools/02-quickstart.mdx b/website/docs/02-platform-tools/02-quickstart.mdx deleted file mode 100644 index 675c60d0..00000000 --- a/website/docs/02-platform-tools/02-quickstart.mdx +++ /dev/null @@ -1,94 +0,0 @@ -# Quickstart - -Our quickstart platform is a Docker Compose setup that simplifies the process of spinning up Overture development and deployment configurations using Docker profiles and extensible scripting events. - -## System Architectures - -The following diagrams illustrate the system architecture for each deployment: - - - - ![Platform](./images/platform.svg 'Overture Platform') - - - ![Song Dev](./images/songDev.svg 'Song Dev Environment') - - - ![Score Dev](./images/scoreDev.svg 'Score Dev Environment') - - - ![Maestro Dev](./images/maestroDev.svg 'Maestro Dev Environment') - - - ![Arranger Dev](./images/arrangerDev.svg 'Arranger Dev Environment') - - - ![Stage Dev](./images/stageDev.svg 'Stage Dev Environment') - - - -All components are automatically deployed and configured, with exception to the services highlighted in pink. These services in the deployment context require manual setup and configuration for local development, instructions are provided within the logs following deployment. - -## Getting Started - -**1. Clone the repo branch** - -``` -git clone -b quickstart https://github.com/overture-stack/prelude.git && cd prelude -``` - -**2. Run one of the following commands to spin up different environments:** - -| Environment | Unix/macOS | Windows | -| ----------------- | ------------------ | ------------------------ | -| Overture Platform | `make platform` | `./make.bat platform` | -| Stage Dev | `make stageDev` | `./make.bat stageDev` | -| Arranger Dev | `make arrangerDev` | `./make.bat arrangerDev` | -| Maestro Dev | `make maestroDev` | `./make.bat maestroDev` | -| Song Dev | `make songDev` | `./make.bat songDev` | -| Score Dev | `make scoreDev` | `./make.bat scoreDev` | - -Each command spins up complementary services for the specified development environment. - -## Repository Structure - -``` -. -├── quickstartScripts/ -│ ├── deployments -│ └── services -├── configurationFiles/ -│ ├── arrangerConfigs -│ ├── elasticsearchConfigs -│ └── keycloakConfigs -├── guideMaterials -├── persistentStorage/ -│ ├── data-keycloak-db -│ ├── data-minio -│ └── data-song-db -├── Makefile -└── ./make.bat -``` - -- **`quickstartScripts/`** Contains scripts for orchestrating the deployment process. - - - `deployments/`: Scripts that execute service scripts sequentially based on the deployment configuration. These also include custom post-deployment logs with essential next steps for the deployment scenario. - - `services/`: Modular scripts for individual service setup tasks. Each file is named according to its purpose, with inline comments documenting the code. - -- **`configurationFiles/`** Stores all required configuration files, including: - - - `arrangerConfigs/`: Configuration files specific to Arranger. - - `elasticsearchConfigs/`: Configuration files for Elasticsearch, encompassing indexing mappings and documents for seeding data. - - `keycloakConfigs/`: Configuration files for Keycloak, including preconfigured realm files and Overture API key provider details. - -- **`guideMaterials/`** Supplementary folders and files for use with the [Overture guides](https://www.overture.bio/documentation/guides/). - -- **`persistentStorage/`** Directory for storing persistent data during container startups and restarts. These folders come pre-loaded with mock data. - - - `data-keycloak-db/`: Persistent local storage for the Keycloak database. - - `data-minio/`: Persistent local storage for MinIO object storage. - - `data-song-db/`: Persistent local storage for the Song database. - -- **`Makefile`** Contains make commands for Unix-based systems (macOS, Linux) to streamline Docker operations. - -- **`./make.bat`** Windows equivalent of the Makefile, featuring batch commands tailored for Windows systems. diff --git a/website/docs/02-platform-tools/tabs.css b/website/docs/02-platform-tools/tabs.css deleted file mode 100644 index 6ecd12eb..00000000 --- a/website/docs/02-platform-tools/tabs.css +++ /dev/null @@ -1,42 +0,0 @@ -/* In your global CSS file or a new CSS file */ -.custom-tabs { - background-color: #f0f0f0; - border-radius: 8px; - padding: 16px; - } - - .custom-tabs .tabs__item { - transition: background-color 0.3s ease, color 0.3s ease; - border-radius: 4px; - margin-right: 4px; - } - - .custom-tabs .tabs__item:hover { - background-color: #e0e0e0; - } - - .custom-tabs .tabs__item--active { - background-color: #007bff; - color: white; - } - - .custom-tabs .tab-content { - border: 1px solid #ddd; - padding: 10px; - transition: opacity 0.3s ease; - position: relative; - } - - .custom-tabs .tab-content img { - transition: opacity 1s ease, transform 1s ease; - position: absolute; - top: 10px; - left: 10px; - opacity: 0; - transform: scale(0.95); - } - - .custom-tabs .tab-content.tab-content--active img { - opacity: 1; - transform: scale(1); - } \ No newline at end of file diff --git a/website/docs/03-under-development/01-Lyric.md b/website/docs/03-under-development/01-Lyric.md deleted file mode 100644 index 7e3ddc66..00000000 --- a/website/docs/03-under-development/01-Lyric.md +++ /dev/null @@ -1,61 +0,0 @@ -# Lyric - -Lyric is a tabular data management service designed to handle structured clinical and research data. Built on top of [Lectern's](https://docs.overture.bio/docs/under-development/lectern/) dictionary framework, it provides a system for organizations to submit, validate, and manage structured data according to predefined schemas. While primarily used for clinical data management, Lyric's architecture remains domain-agnostic, allowing it to handle any type of structured data that can be defined within a Lectern dictionary. - -## Key Features - -- **Schema-driven validation:** Uses Lectern dictionaries to enforce data structure and relationships, validating submissions of tabular data files against predefined schemas. -- **Flexible submission workflow:** Provides a staged submission process where users can iteratively update and validate their data before committing to the database. -- **Comprehensive data management:** Offers complete CRUD operations (Create, Read, Update, Delete) through a RESTful API documented in Swagger. -- **Detailed change history:** Maintains a complete audit trail of all data modifications, tracking changes from committed submissions and updates ensuring data governance and accountability. -- **SQON Query Endpoint:** Provides an endpoint for SQON (Structured Query Object Notation) based queries allowing complex search operations through combinations of simple field operations (`in`, `<=`, `>=`) and logic (`and`, `or`, `not`). This allows complex queries to be expressed in a simple JSON format. -- **Multi-dictionary support:** Handles multiple Lectern dictionaries simultaneously, allowing organizations to manage different data categories with distinct schemas while maintaining data integrity and relationships - -## System Architecture - -Lyric manages the submission of tabular data through its API, validating submissions based on Lectern dictionary schemas stored within Lyric and specified on submission. Song will interact with Lyric to confirm the presence of the data in Lyric's database that corresponds to the file metadata being submitted to Song. All Lyric data is stored on the backend within a PostgreSQL database that will be indexed on publication by [Maestro](https://docs.overture.bio/docs/core-software/Maestro/overview) into Elasticsearch documents. - -![Submission System Architecture](./images/submission-system.svg "Updated Overture Submission System") - -:::info Why Elasticsearch? -Storing data in Elasticsearch allows us to build powerful search UI components linked to a flexible GraphQL API facilitated by the Arranger Server. This approach delivers enhanced query performance, advanced full-text search capabilities, and flexible filtering options compared to querying the database directly. -::: - -As part of the Overture, Lyric is typically used with additional integrations, including: - -- **[Lectern](https://docs.overture.bio/docs/under-development/lectern/):** Validates, stores and manages dictionary schemas fetched, stored, and used by Lyric -- **[Maestro](https://docs.overture.bio/docs/core-software/Maestro/overview):** Handles the indexing of data into elasticsearch on publication events -- **[Song](https://docs.overture.bio/docs/core-software/Song/overview) & [Score](https://docs.overture.bio/docs/core-software/Score/overview):** Facilitates the submission, validation and management of file data in object storage (Score) and the corresponding file metadata (Song) in a database - -## Development Roadmap - -1. **Authentication System** - - Implement authentication rules - - Integrate with Keycloak for identity and access management -2. **Song Integration** - - Enable Song to validate data registration with Lyric - - Implement pre-submission file validation checks -3. **Publication Control** - - Integrate indexing functionality with Maestro V5 - - Enable Lyric & Song data searchability through Arranger interface - -## Repository Structure - -The structure of this monorepo is app centric having `apps/` folder to keep deployable applications while `packages/` folder to keep shared libraries. - -``` -. -├── apps/ -│ └── server -├── packages - ├── data-model - └── data-provider -``` - -[Click here to view the Lyric repository on GitHub](https://github.com/overture-stack/lyric) - -- `app/`: Explanation of directory - - `server/`: Explanation of directory -- `packages`: Explanation of directory - - `data-model`: Explanation of directory - - `data-provider`: Explanation of directory diff --git a/website/docs/03-under-development/02-lecternViewer.md b/website/docs/03-under-development/02-lecternViewer.md deleted file mode 100644 index d99e6e2a..00000000 --- a/website/docs/03-under-development/02-lecternViewer.md +++ /dev/null @@ -1,164 +0,0 @@ -# Lectern Viewer - -The Lectern data dictionary viewer is a React-based component library that will provide user interfaces for viewing and interacting with Lectern data dictionaries. It aims to transform technical JSON schema specifications into accessible, organized displays that make data models and data requirements clear and understandable for researchers and data submitters. - -The Lectern UI is being developed as a standalone component library that can be integrated into any data platform to provide dictionary viewing capabilities. It will consume [Lectern dictionary schemas](../01-core-software/00-Lectern/03-dictionaryReference.md) and render them through two primary interface modes: tabular views for detailed field-by-field exploration and a diagram view for visualizing schema relationships. - -The viewer serves as the presentation layer in the data submission workflow, providing researchers with clear visualization of data requirements before they begin the submission process through integrated platforms. - -The viewer is being developed initially to serve the [Pan-Canadian Genome Library (PCGL)](https://genomelibrary.ca/), a national initiative that will integrate the viewer for communicating data requirements to researchers across Canada's genomics community. The PCGL implementation will serve as a reference for how other research platforms can integrate the viewer components. - -## Field Viewer - -![SchemaViewer](./images/lecternviewer.png) - -The tabular view provides comprehensive field-by-field documentation with expandable sections for detailed validation rules, examples, and metadata. Interactive elements allow users to filter, search, and navigate through complex schema definitions efficiently. - -**Key Features:** - -- **Interactive Schema Tables:** Detailed tabular views showing field definitions, data types, validation rules, and examples with expandable sections for complex restrictions -- **Version Management:** Built-in support for switching between different dictionary versions with change tracking and comparison capabilities -- **Template Downloads:** Generate CSV templates based on schema definitions to streamline data submission workflows -- **Responsive Design:** Modern, accessible interface that works across desktop and mobile devices with support for custom theming - -### Conditional Logic Modal - -![ConditionalLogicModal](./images/clm.png) - -Complex conditional validation rules are presented through modal overlays that break down if-then-else logic into digestible, structured displays that clearly communicate field dependencies and requirements. - -**Key Features:** - -- **Conditional Logic Visualization:** Clear presentation of complex conditional validation rules through modal overlays and structured displays - -## Entity Relationship Viewer - -![ERD Viewer](./images/erdviewer.png) - -The diagram view visualizes schema relationships using interactive flowcharts that demonstrate how different schemas connect through primary and foreign key relationships, helping users understand the overall data model structure. - -**Key Features:** - -- **Entity Relationship Diagrams:** Visual representations of schema relationships using interactive flowcharts that show primary and foreign key connections -- **Component-Driven Architecture:** Built with Storybook for isolated development, testing, and documentation of reusable components - -## Integration Points - -As part of the larger Overture ecosystem, the Lectern UI will be used with additional integrations, including: - -- **Lectern Server:** The REST API service that manages and serves dictionary schemas, providing version control and validation -- **Lyric:** Overture's tabular data submission service that uses Lectern schemas for data validation and quality assurance - -## Development Approach - -The Lectern UI is built using **component-driven development** with [Storybook](https://storybook.js.org/) as the primary development environment. This approach enables: - -- **Isolated Component Development:** Each UI component is developed and tested in isolation, ensuring reliability and reusability -- **Interactive Documentation:** Living documentation that serves both developers and stakeholders with real examples and use cases -- **Design System Integration:** Consistent theming and styling across all components with easy theme switching and testing -- **Collaborative Development:** Non-technical stakeholders can review and provide feedback on components before integration - -## Developer Quick Start - -The codebase leverages [Storybook](https://storybook.js.org/) as the primary development environment for building, testing, and documenting components. This component-driven development approach ensures each piece of the UI is developed in isolation and thoroughly tested before integration. - -To run Storybook: - -1. Install all dependencies: - -```sh -pnpm install -``` - -2. Run Storybook: - -```sh -pnpm storybook -``` - -Storybook will run on port 6006 by default: [http://localhost:6006/](http://localhost:6006/) - -:::tip Why Storybook? -Storybook enables rapid development and testing of UI components in isolation, provides living documentation for the design system, and facilitates collaboration between developers, designers, and stakeholders by offering a visual interface for component exploration. -::: - -## Editing Stories - -All stories are located within the `/stories` directory. - -### Theme Decorator - -All Lectern Components rely on the `LecternThemeProvider`. If this provider is not present, they will render using the default `LecternTheme`. - -In order to help testing Lectern-UI Components with alternate themes, a `themeDecorator` is provided to be used in stories. The `themeDecorator` can be added to any component story as follows: - -```ts -import themeDecorator from "../themeDecorator"; // import from stories/themeDecorator.tsx - -const meta = { - component: MyComponent, - title: "Category Name/My Component", - tags: ["autodocs"], - // INCLUDE THE DECORATOR HERE: - decorators: [themeDecorator()], -} satisfies Meta; -``` - -To help with testing, a global property named `theme` has been set, and a selector has been added to the Storybook Toolbar: - -![Storybook Global Theme Selector Toolbar](./images/global-theme-selector.png) - -The theme selected from the toolbar theme selection tool will be applied to all stories with the `themeDecorator`. - -At the moment there is only one alternate theme provided. It is defined inside the `themeDecorator` file - to test alternate stylings please update this custom theme. - -#### Adding Additional Themes - -To add additional themes in the drop down for the `themeDecorator` to use, you must add an option for the storybook `globalType.theme` property. This is done in the `/storybook/preview.ts`) file: - -```ts -const preview: Preview = { - globalTypes: { - theme: { - description: - "Display theme used for all components with the themeDecorator.", - toolbar: { - icon: "paintbrush", - items: [ - { value: "default", right: "✅", title: "Default Theme" }, - { value: "custom", right: "🎨", title: "Custom Theme" }, - { - value: "newTheme", - right: "{choose an emoji}", - title: "Your New Theme", - }, - ], - }, - }, - }, - // ... -}; -``` - -Now that we have an additional option, the `themeDecorator` must be provided the specified theme. The logic for providing the selected theme to the decorator is handled in the `themeDecorator` file in the function `function getGlobalTheme(globalTheme: string)`. Add a new case for the `globalType.theme` value that you added to `./storybook/preview.ts`. - -```ts -function getGlobalTheme(globalTheme: string): PartialTheme { - switch (globalTheme) { - case "custom": { - return customTheme; - } - case "newTheme": { - // Return your new theme - return {}; - } - default: { - return {}; - } - } -} -``` - -:::note Development Status -The Lectern UI is currently in active development. Features and interfaces are subject to change as we iterate based on community feedback and user testing with research platforms like the Pan-Canadian Genome Library (PCGL). -::: diff --git a/website/docs/03-under-development/03-under-development.md b/website/docs/03-under-development/03-under-development.md deleted file mode 100644 index 9e1e471d..00000000 --- a/website/docs/03-under-development/03-under-development.md +++ /dev/null @@ -1,22 +0,0 @@ -# Under Development - -As part of our work on the [Pan-Canadian Genome Library](https://oicr.on.ca/first-ever-national-library-of-genomic-data-will-help-personalize-cancer-treatment-in-canada-and-around-the-world/) we are currently developing a **new data submission system** to better -support tabular (clinical) data. - -This new system will see two new components integrated into the Overture Platform: - -- [**Lectern**](https://docs.overtue.bio/docs/core-software/lectern/overview): A version-controlled Data Dictionary Schema Manager that defines, validates, and manages schemas used for data submissions, supporting data integrity across evolving data management systems. -- [**Lyric**](https://docs.overture.bio/docs/development/lyric/): Validate, store, query, and re-validate tabular data against evolving Lectern Dictionary schemas. - -Additionally, we are updating our indexing service: - - - [**Maestro v5**](https://github.com/overture-stack/maestro/tree/M5) will see multiple updates including the ability to index data from Song and Lyric into one elasticsearch index. - -Combined together the new Overture Platfrom architecture will look as follows: - -![Submission System Architecture](./images/submission-system.svg "Updated Overture Submission System") - -We have also began development on a series of user interfaces to help communicate data in human readable formats: - -- [Lectern UI](./02-lecternViewer.md) -- Arranger Charts diff --git a/website/docs/03-under-development/images/clm.png b/website/docs/03-under-development/images/clm.png deleted file mode 100644 index 3191209a..00000000 Binary files a/website/docs/03-under-development/images/clm.png and /dev/null differ diff --git a/website/docs/03-under-development/images/erdviewer.png b/website/docs/03-under-development/images/erdviewer.png deleted file mode 100644 index 637f122e..00000000 Binary files a/website/docs/03-under-development/images/erdviewer.png and /dev/null differ diff --git a/website/docs/03-under-development/images/global-theme-selector.png b/website/docs/03-under-development/images/global-theme-selector.png deleted file mode 100644 index 1867c238..00000000 Binary files a/website/docs/03-under-development/images/global-theme-selector.png and /dev/null differ diff --git a/website/docs/03-under-development/images/lecternviewer.png b/website/docs/03-under-development/images/lecternviewer.png deleted file mode 100644 index bd38b51a..00000000 Binary files a/website/docs/03-under-development/images/lecternviewer.png and /dev/null differ diff --git a/website/docs/03-under-development/images/submission-system.svg b/website/docs/03-under-development/images/submission-system.svg deleted file mode 100644 index a41f4e66..00000000 --- a/website/docs/03-under-development/images/submission-system.svg +++ /dev/null @@ -1,4 +0,0 @@ - - - - \ No newline at end of file diff --git a/website/docs/04-documentation-standards b/website/docs/04-documentation-standards deleted file mode 120000 index 4d52cea9..00000000 --- a/website/docs/04-documentation-standards +++ /dev/null @@ -1 +0,0 @@ -../../submodules/.github/standards \ No newline at end of file diff --git a/website/community/00-support.md b/website/docs/community-docs/00-support.md similarity index 80% rename from website/community/00-support.md rename to website/docs/community-docs/00-support.md index 176a66c0..58bf3cec 100644 --- a/website/community/00-support.md +++ b/website/docs/community-docs/00-support.md @@ -13,8 +13,8 @@ If you have a collaboration or business enquiry you can reach us by email at **c ### Getting Help - [**Create a Support Discussion**](https://github.com/overture-stack/docs/discussions/categories/support) - - If you need assistance with Overture, please create a new discussion in our support category. - - Before creating a new discussion, please search existing discussions to see if your question has already been answered. + - If you need assistance with Overture, please create a new discussion in our support category. + - Before creating a new discussion, please search existing discussions to see if your question has already been answered. ### Feature Requests @@ -38,13 +38,6 @@ If you come across a potential bug or issue, please post it as a GitHub support This allows us to confirm the issue and gather more information if needed. If we determine that further development is required, we will create a GitHub Issue from your discussion post. -## Staying Informed - -### Release Announcements - -- [**Release Announcements**](https://github.com/overture-stack/docs/discussions/categories/announcements) - - To stay up-to-date with the latest Overture releases and updates, keep an eye on our Announcements category in our GitHub Discussions. - ## Community Guidelines When participating in our community, please adhere to the following guidelines: @@ -54,4 +47,3 @@ When participating in our community, please adhere to the following guidelines: 3. Use clear and descriptive titles for your discussions and issues. 4. Search existing discussions before creating a new one to avoid duplicates. 5. Follow the GitHub Community Guidelines and abide by our [code of conduct](https://docs.overture.bio/community/code-of-conduct). - diff --git a/website/community/01-team.md b/website/docs/community-docs/01-team.md similarity index 84% rename from website/community/01-team.md rename to website/docs/community-docs/01-team.md index 2a8a63b0..3d3bab51 100644 --- a/website/community/01-team.md +++ b/website/docs/community-docs/01-team.md @@ -8,14 +8,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Andres Melani

+

Yelizar Alturmessov

+ DevOps
@@ -23,14 +24,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Ann Catton

+

Caroline Bridge

+ Software Developer
@@ -38,14 +40,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Azher Ali

+

Ann Catton

+ Software Developer
@@ -61,6 +64,7 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C

Brandon Chan

+ Business Analyst
@@ -68,74 +72,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- - - -
-

Bhavik Bhagat

-
-
-
-
-
-
-
- - - -
-

Alexis Li

-
-
-
-
-
-
-
- - - -
-

Caroline Bridge

-
-
-
-
-
-
-
- - - -
-

Christina Yung

-
-
-
-
-
-
-
- +
-

Ciarán Schütte

+

Melanie Courtot

+ Director & Principal Investigator
@@ -151,6 +96,7 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C

Daniel DeMaria

+ Software Developer
@@ -158,14 +104,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Edmund Su

+

Jon Eubank

+ Associate Technical Director
@@ -173,14 +120,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Guanqiao Feng

+

Robin Haw

+ Program Manager
@@ -196,6 +144,7 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C

Henro

+ DevOps
@@ -203,14 +152,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Hardeep Nahal-Bose

+

Alexis Li

+ Business Analyst
@@ -218,14 +168,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Jon Eubank

+

James Lopez

+ Software Developer
@@ -233,14 +184,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Anders Richardsson

+

Mauricio Martinez

+ Software Developer
@@ -248,14 +200,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Leonardo Rivera

+

Andres Melani

+ PhD Student
@@ -263,14 +216,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Lincoln Stein

+

Rakesh Mistry

+ Software Developer
@@ -278,14 +232,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Linda Xiang

+

Hardeep Nahal-Bose

+ Bioinformatician
@@ -293,14 +248,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Mauricio Martinez

+

Sam Rich

+ Software Developer
@@ -308,14 +264,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Melanie Courtot

+

Anders Richardsson

+ Associate Technical Director
@@ -323,14 +280,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Rakesh Mistry

+

Leonardo Rivera

+ Software Developer
@@ -338,14 +296,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Robin Haw

+

Patrick Dos Santos

+ UI/UX Designer
@@ -361,6 +320,7 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C

Mitchell Shiell

+ Product Manager
@@ -368,14 +328,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Patrick Santos

+

Lincoln Stein

+ Scientific Director (Acting), and Head of Adaptive Oncology
@@ -383,14 +344,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Sam Rich

+

Edmund Su

+ Bioinformatician
@@ -398,21 +360,21 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C
- +
-

Yelizar Alturmessov

+

Linda Xiang

+ Bioinformatician
- ## Honorary Alumni - **Alex Wilmer**: Original creator of Arranger @@ -420,10 +382,15 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C - **Aleksandra Pejovic**: Technical Business Analyst - **Atul Kachru**: Senior Project Manager - **Bashar Allabadi**: Senior Software Engineer +- **Bhavik Bhagat**: Business Analyst - **Chang Wang**: Frontend Architect +- **Christina Yung**: Director & Senior Principal Investigator +- **Ciarán Schütte**: Software Developer - **Dusan Andric**: Software Architect - **Daniel Lu**: Developer for the Overture website refresh +- **Ethan Luc**: Developer - **Francois Gerthoffert**: Senior Project Manager +- **Guanqiao Feng**: Bioinformatician - **Jared Baker**: Lead Cloud Architect - **Jaser Uddin**: Software Developer - **Junjun Zhang**: Designer of the original Song functionalities and schemas @@ -432,4 +399,5 @@ Overture is managed by the Genome Informatics team at the Ontario Institute of C - **Puneet Bajwa**: Project Manager - **Robert Tisma**: Senior Software Developer - **Rosi Bajari**: Business Analyst & Product Manager -- **Vincent Ferretti**: Director & Senior Principal Investigator \ No newline at end of file +- **Saqib Ashraf**: Developer +- **Vincent Ferretti**: Director & Senior Principal Investigator diff --git a/website/community/02-funding.md b/website/docs/community-docs/02-funding.md similarity index 84% rename from website/community/02-funding.md rename to website/docs/community-docs/02-funding.md index 2eda4be8..5c9b54ab 100644 --- a/website/community/02-funding.md +++ b/website/docs/community-docs/02-funding.md @@ -2,6 +2,12 @@ We gratefully acknowledge the financial support that has made this project possible. Our work has been funded by the following organizations and grants: +### Digital Research Alliance of Canada + +Under this grant we are transforming Overture from a data catalogue into an AI-assisted discovery and analysis platform. Using the Model Context Protocol (MCP), researchers will be able to explore, analyze, and visualize data through transparent, reproducible conversational workflows across Canadian research platforms including ICGC-ARGO, OHCRN, and iMicroSeq. + +- **Funding Period:** 2026–2028 + ### Canadian Institutes of Health Research As working group 2, we are developing a federated framework for genomic data access and analysis, specifically building an enhanced Overture data submission system to facilitate the ingestion, validation, and tracking of clinical and molecular data into the PCGL platform. @@ -37,4 +43,4 @@ We also thank the following organizations for their contributions: For more information about our funding or to discuss potential collaborations, please email us at contact@overture.bio. -**Last updated:** 11-19-24 +**Last updated:** 07-22-26 diff --git a/website/community/03-licensing.md b/website/docs/community-docs/03-licensing.md similarity index 100% rename from website/community/03-licensing.md rename to website/docs/community-docs/03-licensing.md diff --git a/website/community/04-code-of-conduct.md b/website/docs/community-docs/04-code-of-conduct.md similarity index 100% rename from website/community/04-code-of-conduct.md rename to website/docs/community-docs/04-code-of-conduct.md diff --git a/website/community/05-contribution.md b/website/docs/community-docs/05-contribution.md similarity index 100% rename from website/community/05-contribution.md rename to website/docs/community-docs/05-contribution.md diff --git a/website/community/06-citing-us.md b/website/docs/community-docs/06-citing-us.md similarity index 100% rename from website/community/06-citing-us.md rename to website/docs/community-docs/06-citing-us.md diff --git a/website/docs/community-docs/07-documentation-standards b/website/docs/community-docs/07-documentation-standards new file mode 120000 index 00000000..eb34db70 --- /dev/null +++ b/website/docs/community-docs/07-documentation-standards @@ -0,0 +1 @@ +../../../submodules/.github/standards \ No newline at end of file diff --git a/website/docs/02-platform-tools/01-prelude.md b/website/docs/deploy-docs/01-prelude.md similarity index 93% rename from website/docs/02-platform-tools/01-prelude.md rename to website/docs/deploy-docs/01-prelude.md index b93bf4c2..d60ce9a1 100644 --- a/website/docs/02-platform-tools/01-prelude.md +++ b/website/docs/deploy-docs/01-prelude.md @@ -1,3 +1,7 @@ +--- +unlisted: true +--- + # Prelude **Prelude** is a toolkit designed for the **planning and development stages** of Overture data platform implementation. It helps teams incrementally build and validate platform requirements, enabling them to: @@ -6,11 +10,13 @@ - Minimize technical overhead - Build a foundation for production deployment +Prelude is developed in the open; see the [**overture-stack/prelude**](https://github.com/overture-stack/prelude) repository for the source, the latest demos, and full setup details. + :::important Prelude is **not intended for production environments**. It serves as a preparatory tool to ensure successful production deployments. We will be actively improving resources to support teams transitioning from Prelude to production. ::: -We welcome feedback and suggestions—please share them via our [ideas forum](https://github.com/overture-stack/docs/discussions/categories/ideas). +We welcome feedback and suggestions; please share them via our [ideas forum](https://github.com/overture-stack/docs/discussions/categories/ideas). ## Development Phases diff --git a/website/docs/deploy-docs/03-deployment/01-keycloak.md b/website/docs/deploy-docs/03-deployment/01-keycloak.md new file mode 100644 index 00000000..78d75d41 --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/01-keycloak.md @@ -0,0 +1,76 @@ +--- +id: keycloak +slug: /deployment/keycloak +title: Keycloak +sidebar_label: Keycloak +--- + +# Keycloak + +Keycloak will be set up first to broker authorization tokens, enabling secure communication for Overture services. + +## Setting up the Keycloak database + +1. **Run PostgreSQL:** Use the following command to pull and run the PostgreSQL docker container + + ```bash + docker run --name keycloak-db \ + -e POSTGRES_USER=admin \ + -e POSTGRES_PASSWORD=admin123 \ + -e POSTGRES_DB=keycloakDb \ + -v ./persistentStorage/keycloak-db-data:/var/lib/postgresql/data \ + -d postgres:14 + ``` + + This command runs a postgres image named `keycloak-db` with the username `admin`, password `admin123` and a database within it called `keycloakDb`. + + :::info Persistent Volumes + It also includes a defined persistent volume `-v./persistentStorage/keycloak-db-data:/var/lib/postgresql/data `. This volume will be a folder generated at runtime that will serve as local persistent storage within your directory. This means the data in your database is backed up outside of docker. + ::: + +## Setting up Keycloak + +1. **Create a folder titled `keycloakConfigs` and place the following configuration files within it:** + - The **[Overture API Key Provider](https://github.com/oicr-softeng/keycloak-apikeys/releases/download/1.0.1/keycloak-apikeys-1.0.1.jar)**, for extending Keycloak's functionality to support API key authentication. + + - The **[Realm.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/keycloakConfigs/myrealm-realm.json)**, containing pre-configured settings for our Overture Keycloak realm. + + - The **[Users.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/keycloakConfigs/myrealm-users-0.json)**, containing pre-configured user information to populate the realm. + +2. **Run Keycloak:** To deploy Keycloak, execute the following command. Make sure to run it in the directory containing the files mentioned above. + + ```bash + docker run -d --name keycloak \ + -p 8180:8080 \ + -e KC_DB=postgres \ + -e KC_DB_USERNAME=admin \ + -e KC_DB_PASSWORD=admin123 \ + -e KC_DB_URL=jdbc:postgresql://keycloak-db:5432/keycloakDb \ + -e KEYCLOAK_ADMIN=admin \ + -e KEYCLOAK_ADMIN_PASSWORD=admin123 \ + -e KC_HOSTNAME=localhost \ + -e KC_HEALTH_ENABLED=true \ + -v ./configurationFiles/keycloakConfigs/keycloak-apikeys-1.0.1.jar:/opt/keycloak/providers/keycloak-apikeys.jar \ + -v ./configurationFiles/keycloakConfigs/myrealm-realm.json:/opt/keycloak/data/import/myrealm-realm.json \ + -v ./configurationFiles/keycloakConfigs/myrealm-users-0.json:/opt/keycloak/data/import/myrealm-users-0.json \ + quay.io/keycloak/keycloak:22.0 \ + start-dev --import-realm --hostname-port=8180 + ``` + + Once running, you will be able to access the Keycloak admin console from `http://localhost:8180/admin` + +
+ For more details, click here + - **Local Port Mapping:** The `-p 8180:8080` option maps port `8180` on the host machine to port `8080` inside the Docker container. This is crucial as port `8080` is the default port Keycloak listens on, but it's often occupied by other services. By mapping it to port 8180 on the host, we are ensuring that Keycloak remains accessible without interfering with other services running on the same machine. + - **Configuration Files:** The `-v` options mount the local directories containing the Keycloak configuration files (`realm.json`, `users.json`, and the `API key provider JAR`) to the corresponding paths inside the container. This ensures that Keycloak starts with the desired realm configuration and user definitions, as well as the extended functionality provided by the API key provider. + - **Base Image:** `quay.io/keycloak/keycloak:22.0` specifies the Docker image to use, which is version 22.0 of Keycloak from Quay.io. This image includes Keycloak and all its dependencies, optimized for performance and security. + - **Start Command:** The `start-dev` argument passed to the container instructs Keycloak to start in development mode. This mode is suitable for our example deployment. A production deployment is largely the same with the exception of requiring an SSL certificate on startup. + - **Realm Import:** The `--import-realm` flag tells Keycloak to import the realm configuration from the specified JSON file upon startup. This is essential for setting up realms with predefined roles, users, and other settings without requiring manual configurations. + + - **Database Connection:** The database-related flags (`--db`, `--db-url`, `--db-username`, `--db-password`) configure Keycloak to connect to the PostgreSQL database. These settings are critical for persisting user data, sessions, and other operational data securely and reliably. + +
+ + :::info Server Deployments + If you are looking for information on deploying Keycloak on a server, we recommend seeing [Keycloak's official server documentation](https://www.keycloak.org/guides#server). Should you require assistance with deployments tailored to your specific needs, please feel free to reach out to us for consultation at contact@overture.bio. + ::: diff --git a/website/guides/01-deployment-guide/02-data-management-&-storage.md b/website/docs/deploy-docs/03-deployment/02-file-transfer.md similarity index 92% rename from website/guides/01-deployment-guide/02-data-management-&-storage.md rename to website/docs/deploy-docs/03-deployment/02-file-transfer.md index 065666bb..7b9829e0 100644 --- a/website/guides/01-deployment-guide/02-data-management-&-storage.md +++ b/website/docs/deploy-docs/03-deployment/02-file-transfer.md @@ -1,6 +1,18 @@ -# Data Management & Storage +--- +id: file-transfer +slug: /deployment/file-transfer +title: File Transfer +sidebar_label: File Transfer +unlisted: true +--- -Song, Score, and the services they depend on (Postgres, MinIO, and Kafka) will be set up next. These Overture services will manage, track, and store all our data on the backend. +# File Transfer + +This page has been split into individual service guides: +- [Song](/deploy/deployment/song) +- [Score](/deploy/deployment/score) + +Song, Score, and the services they depend on (Postgres, MinIO, and Kafka) will be set up next. These Overture services move and store file data and its metadata on the backend: Score handles file transfer to and from object storage, and Song tracks the associated metadata. ## Setting up Object Storage @@ -222,7 +234,7 @@ Song is our data cataloging system. It will provide submission validations and t SPRING_DATASOURCE_USERNAME=admin SPRING_DATASOURCE_PASSWORD=admin123 # Kafka Variables - SPRING_KAFKA_BOOTSTRAPSERVERS=http://kafka:9092 + SPRING_KAFKA_BOOTSTRAPSERVERS=kafka:9092 SPRING_KAFKA_TEMPLATE_DEFAULTTOPIC=song-analysis # Swagger Variable SWAGGER_ALTERNATEURL=/swagger-api @@ -251,13 +263,13 @@ Song is our data cataloging system. It will provide submission validations and t #### Song Variables - - The `ID_USELOCAL` mode indicates that Song will handle ID management internally, storing identifiers within its own system. Song can also be configured to use external ID management, for more information see our documentation for [ID management in Song](/). + - The `ID_USELOCAL` mode indicates that Song will handle ID management internally, storing identifiers within its own system. Song can also be configured to use external ID management, for more information see our documentation for [ID management in Song](/develop/Song/Reference/id-management). - - By setting `SCHEMAS_ENFORCELATEST` to `true`, the Song server will enforce that data conforms to the latest schema versions. Conversely, if set to `false`, data can be submitted to any schema version specified with the metadata submission. For more information, see our [documentation on Song Schema Management](/). + - By setting `SCHEMAS_ENFORCELATEST` to `true`, the Song server will enforce that data conforms to the latest schema versions. Conversely, if set to `false`, data can be submitted to any schema version specified with the metadata submission. For more information, see our [documentation on Song Schema Management](/develop/Song/Reference/data-model-management). #### Score Variables - - The `SCORE_URL` specifies the future URL of the Score service (`http://host.docker.internal:8087`). + - The `SCORE_URL` specifies the future URL of the Score service (`http://score:8087`). - The `SCORE_ACCESSTOKEN` is used by Song for authorized communication with Score. For example, during data publication Song will need to call Score to check if objects exist before publishing this access token, generated by Keycloak, encodes the permissions necessary to communicate securely. @@ -295,7 +307,7 @@ Song is our data cataloging system. It will provide submission validations and t #### Custom Swagger URL - - `SWAGGER_ALTERNATEURL` specifies a custom URL for accessing the Swagger UI (`/swagger-ui`). + - `SWAGGER_ALTERNATEURL` specifies a custom URL for accessing the Swagger UI (`/swagger-api`). @@ -307,10 +319,10 @@ Song is our data cataloging system. It will provide submission validations and t --platform linux/amd64 \ -p 8080:8080 \ --env-file .env.song \ - ghcr.io/overture-stack/song-server:5.2.0 + ghcr.io/overture-stack/song-server:fc479c13 ``` - Once running you should be able to access the Song Swagger UI from `http://localhost:8080/swagger-ui` + Once running you should be able to access the Song Swagger UI from `http://localhost:8080/swagger-api` ## Running Score @@ -324,7 +336,7 @@ Score is a fault-tolerant multi-part parallel transfer service made to facilitat # ============================== # Spring Variables - SPRING_PROFILES_ACTIVE=default,collaboratory,prod,secure,jwt + SPRING_PROFILES_ACTIVE=default,s3,prod,secure SERVER_PORT=8087 # Song Variable METADATA_URL=http://song:8080 @@ -348,13 +360,13 @@ Score is a fault-tolerant multi-part parallel transfer service made to facilitat AUTH_SERVER_TOKENNAME=apiKey AUTH_SERVER_KEYCLOAK_HOST=http://keycloak:8080 AUTH_SERVER_KEYCLOAK_REALM=myrealm - AUTH_SERVER_SCOPE_STUDY_PREFIX=STUDY. - AUTH_SERVER_SCOPE_DOWNLOAD_SUFFIX=.READ + AUTH_SERVER_SCOPE_DOWNLOAD_STUDY_PREFIX=STUDY. + AUTH_SERVER_SCOPE_DOWNLOAD_STUDY_SUFFIX=.READ AUTH_SERVER_SCOPE_DOWNLOAD_SYSTEM=score.READ + AUTH_SERVER_SCOPE_UPLOAD_STUDY_PREFIX=STUDY. + AUTH_SERVER_SCOPE_UPLOAD_STUDY_SUFFIX=.WRITE AUTH_SERVER_SCOPE_UPLOAD_SYSTEM=score.WRITE - AUTH_SERVER_SCOPE_UPLOAD_SUFFIX=.WRITE - AUTH_SERVER_URL=http://keycloak:8080/realms/myrealm/apikey/check_api_key/ - AUTH_JWT_PUBLICKEYURL=http://keycloak:8080/oauth/token/public_key + AUTH_SERVER_URL=http://keycloak:8080/realms/myrealm/apikey/check_api_key/ SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI=http://keycloak:8080/realms/myrealm/protocol/openid-connect/certs ``` @@ -367,10 +379,9 @@ Score is a fault-tolerant multi-part parallel transfer service made to facilitat | Profile | Description | |---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| - | `collaboratory` | Configures the service for use with an S3 backend. | + | `s3` | Configures the service for use with an S3-compatible backend. | | `prod` | Optimizes the service for production use, enabling S3 security features and specifying the metadata server URL. | | `secure` | Implements OAuth authentication, specifying the authentication server URL, token name, client ID, client secret, and scopes for download and upload operations. | - | `JWT` | The JWT (JSON Web Token) profile is used to configure the authentication method based on JWT. This profile includes settings to obtain the public key for token validation from an OAuth server. | #### Song & Score Variables @@ -380,7 +391,7 @@ Score is a fault-tolerant multi-part parallel transfer service made to facilitat #### Object Storage Variables - - `S3_ENDPOINT`, `S3_ACCESSKEY`, `S3_SECRETKEY`, `BUCKET_NAME_OBJECT`, `BUCKET_NAME_STATE` defines access to object storage, including the endpoint (`minio:9001`), access key (`admin`), secret key (`admin123`), bucket names for objects (`object`) and state (`state`). + - `S3_ENDPOINT`, `S3_ACCESSKEY`, `S3_SECRETKEY`, `BUCKET_NAME_OBJECT`, `BUCKET_NAME_STATE` defines access to object storage, including the endpoint (`minio:9000`), access key (`admin`), secret key (`admin123`), bucket names for objects (`object`) and state (`state`). - `UPLOAD_PARTSIZE` specifies the maximum size of individual parts when uploading large files to an object storage service. Large files are typically split into smaller parts to facilitate parallel uploads and to manage network bandwidth efficiently. If network bandwidth is limited, smaller part sizes might be beneficial to keep the upload process moving quickly. On the other hand, if the application requires high throughput and can afford to wait longer for uploads to complete, larger part sizes might be preferable. @@ -390,7 +401,7 @@ Score is a fault-tolerant multi-part parallel transfer service made to facilitat - **Authentication Configuration**: Specifies the authentication server provider (`Keycloak`), the Keycloak server's host (`http://keycloak:8080`), and the realm (`myrealm`) that contains the users and roles. This setup is crucial for securing applications by directing them to the correct Keycloak instance and realm for authentication and authorization processes. - - **Token and Client Details**: Defines the token name (`apiKey`), client ID (`score`), and client secret (`scoresecret`) used for authentication. These elements are essential for establishing a secure connection between the application and the Keycloak server, ensuring that only authorized applications can access protected resources. + - **Token and Client Details**: Defines the token name (`apiKey`), client ID (`dms`), and the client secret configured in your `.env.score` used for authentication. These elements are essential for establishing a secure connection between the application and the Keycloak server, ensuring that only authorized applications can access protected resources. - **Scope Definitions**: Outlines the scopes for study, download, and upload operations, specifying prefixes and suffixes that indicate the level of access granted to the token holder. These scopes are critical for defining the permissions associated with the tokens, controlling what actions can be performed by the authenticated users. @@ -409,4 +420,8 @@ Score is a fault-tolerant multi-part parallel transfer service made to facilitat ghcr.io/overture-stack/score-server:5.11.0 ``` - Once running you should be able to access the Score Swagger UI from `http://localhost:8087/swagger-ui` + Once running you should be able to access the Score Swagger UI from `http://localhost:8087/swagger-ui.html` + +:::note Verified against +This guide was verified against **Song** `5.1.2-SNAPSHOT` (`2de5c0d`) and **Score** `5.12.0-SNAPSHOT` (`174ed13`) on 2026-07-28. Newer releases may differ. +::: diff --git a/website/docs/deploy-docs/03-deployment/02-song.md b/website/docs/deploy-docs/03-deployment/02-song.md new file mode 100644 index 00000000..dd5766fe --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/02-song.md @@ -0,0 +1,324 @@ +--- +id: song +slug: /deployment/song +title: Song +sidebar_label: Song +--- + +# Song + +Song is our data cataloging service for metadata and submission validation. It works with Score for file transfer, MinIO for object storage, PostgreSQL for the Song database, and Kafka for asynchronous communication. + +If you want to deploy the file-transfer service that moves file data, see [Score](/deploy/deployment/score). + +## Setting up Object Storage + +The file transfer service Score is compatible with any S3 storage provider; for simplicity, we will use the open-source object storage provider MinIO for this setup. + +1. **Run MinIO:** Use the following command to pull and run the MinIO docker container + + ```bash + docker run -d --name minio \ + -p 9000:9000 \ + -e MINIO_ACCESS_KEY=admin \ + -e MINIO_SECRET_KEY=admin123 \ + -v $./persistentStorage/data-minio:/data \ + minio/minio:RELEASE.2018-05-11T00-29-24Z \ + server /data + ``` + + **Create buckets in MinIO:** Run the following command to create two buckets in the running MinIO server using the MinIO CLI - this will create an **object** bucket to store uploaded files and a **state** bucket for metadata files managed by Score. + + ```bash + docker run --name minio-client \ + --entrypoint /bin/sh \ + minio/mc -c \ + '/usr/bin/mc alias set myminio http://host.docker.internal:9000 admin admin123 && \ + /usr/bin/mc mb myminio/state && \ + /usr/bin/mc mb myminio/object && \ + /usr/bin/mc mb myminio/object/data && \ + echo "" > /tmp/heliograph && \ + /usr/bin/mc put /tmp/heliograph myminio/object/data/heliograph && \ + rm /tmp/heliograph && \ + exit 0;' + ``` + + You should now be able to access the MinIO console from the browser at `localhost:9000` + +
+ For more details, click here + + ### Minio Image + + - The `-v $./persistentStorage/data-minio:/data` configures MinIO to store data in our local file system instead of in the docker container. Files you upload to MinIO will be stored at the path `./persistentStorage/data-minio`. + + ### Minio Client Image + + - **Alias:** `alias set myminio http://host.docker.internal:9000 admin admin123` creates an `alias` for the MinIO server, with an `admin` user with the password `admin123`. + + - **State Bucket:** `mb myminio/state` creates a bucket named "state". The "state" bucket is designated for storing application state data. This could include metadata about the objects stored in the "object" bucket. + + - **Object Bucket:** `mb myminio/object` creates another bucket named "object". The "object" bucket is intended for storing the actual content objects, such as VCFs, BAMs, etc. + + - **Data directory & Heliograph File:** The `put` command seeds an empty 'heliograph' file within the object storage data folder. Score uses this dummy file to test that the server can successfully communicate with the storage provider and that your client can successfully retrieve files from it, too. + +
+ +## Setting up the Song Database + +1. **Run PostgreSQL:** Use the following command to pull and run the PostgreSQL docker container + + ```bash + docker run --name song-db \ + -e POSTGRES_USER=admin \ + -e POSTGRES_PASSWORD=admin123 \ + -e POSTGRES_DB=songDb \ + -v ./persistentStorage/data-song-db:/var/lib/postgresql/data \ + -d postgres:11.1 + ``` + +
+ For more details, click here + + - This command runs a postgres image named `song-db` with the username `admin`, password `admin123` and a database within it called `songDb`. + + - We have included a persistent volume `-v ./persistentStorage/song-db-data:/var/lib/postgresql/data`. This volume stores Song's Postgres data in our local filesystem instead of the docker container; in other words, the data contained in the Song database will be stored at the path `./persistentStorage/song-db-data:/var/lib/postgresql/data`. + +
+ + :::info Bringing it together + By setting up MinIO alongside PostgreSQL, we have created an environment capable of handling both relational and object data storage, simulating a backend infrastructure similar to what you'd find in a cloud-based application. + ::: + +## Running Kafka + +Kafka serves as a distributed streaming platform, enabling high-throughput, fault-tolerant, and scalable messaging between Song and Maestro. + + :::info Why Kafka? + Kafka serves as a message broker between Song and Maestro, enabling asynchronous communication between services. Kafka provides reliable message delivery and persistence, handling message queuing and processing at scale. This ensures fault tolerance when processing multiple indexing requests between Song and Maestro. + ::: + + The following configuration creates a single-node Kafka broker for development use: + +1. **Create an env file:** Create a file named `.env.kafka` with the following content: + + ```bash + # ============================== + # Kafka Environment Variables + # ============================== + + # Core Kafka Configuration + KAFKA_PROCESS_ROLES=broker,controller + KAFKA_NODE_ID=1 + KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:29092 + KAFKA_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://0.0.0.0:29092,CONTROLLER://kafka:9093 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP=PLAINTEXT:PLAINTEXT,EXTERNAL:PLAINTEXT,CONTROLLER:PLAINTEXT + KAFKA_INTER_BROKER_LISTENER_NAME=PLAINTEXT + KAFKA_CONTROLLER_QUORUM_VOTERS=1@kafka:9093 + KAFKA_CONTROLLER_LISTENER_NAMES=CONTROLLER + + # Storage Configuration + KAFKA_LOG_DIRS=/var/lib/kafka/data + KAFKA_LOG_RETENTION_HOURS=168 + KAFKA_LOG_RETENTION_BYTES=-1 + + # Topic Configuration + KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR=1 + KAFKA_AUTO_CREATE_TOPICS_ENABLE=false + KAFKA_NUM_PARTITIONS=1 + KAFKA_DEFAULT_REPLICATION_FACTOR=1 + KAFKA_MIN_INSYNC_REPLICAS=1 + + # Performance Tuning + KAFKA_MESSAGE_MAX_BYTES=5242880 + KAFKA_REPLICA_FETCH_MAX_BYTES=5242880 + + # Logging Configuration + KAFKA_LOG4J_LOGGERS=kafka.controller=INFO,kafka.producer.async.DefaultEventHandler=INFO,state.change.logger=INFO + KAFKA_LOG4J_ROOT_LOGLEVEL=INFO + + # Cluster Configuration + CLUSTER_ID=q1Sh-9_ISia_zwGINzRvyQ + ``` + +
+ Click here for a detailed breakdown + + #### Core Kafka Configuration + - `KAFKA_PROCESS_ROLES`: Defines the roles this broker will fulfill (broker and controller) + - `KAFKA_NODE_ID`: Unique identifier for this broker in the cluster + - `KAFKA_ADVERTISED_LISTENERS`: External connection points other clients will use to connect + - `KAFKA_LISTENERS`: Internal connection points for broker communication + - `KAFKA_LISTENER_SECURITY_PROTOCOL_MAP`: Maps listener names to security protocols + - `KAFKA_INTER_BROKER_LISTENER_NAME`: Listener used for inter-broker communication + - `KAFKA_CONTROLLER_QUORUM_VOTERS`: List of controller nodes in the cluster + - `KAFKA_CONTROLLER_LISTENER_NAMES`: Names of listeners used for controller connections + + #### Storage Configuration + - `KAFKA_LOG_DIRS`: Directory where Kafka stores its log files + - `KAFKA_LOG_RETENTION_HOURS`: How long to keep messages (7 days) + - `KAFKA_LOG_RETENTION_BYTES`: Maximum size of the log before deletion (-1 means unlimited) + + #### Topic Configuration + - `KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR`: Replication factor for the offsets topic + - `KAFKA_AUTO_CREATE_TOPICS_ENABLE`: Whether to allow automatic topic creation + - `KAFKA_NUM_PARTITIONS`: Default number of partitions for new topics + - `KAFKA_DEFAULT_REPLICATION_FACTOR`: Default replication factor for new topics + - `KAFKA_MIN_INSYNC_REPLICAS`: Minimum number of replicas that must acknowledge writes + + #### Performance Tuning + - `KAFKA_MESSAGE_MAX_BYTES`: Maximum message size (5MB) + - `KAFKA_REPLICA_FETCH_MAX_BYTES`: Maximum size of messages that can be fetched + + #### Logging Configuration + - `KAFKA_LOG4J_LOGGERS`: Specific logger levels for Kafka components + - `KAFKA_LOG4J_ROOT_LOGLEVEL`: Default logging level for all components + + #### Cluster Configuration + - `CLUSTER_ID`: Unique identifier for the Kafka cluster + +
+ +2. **Run Kafka:** Use the docker run command with your `.env.kafka` file: + + ```bash + docker run -d \ + --name kafka \ + --platform linux/amd64 \ + -p 9092:9092 \ + -p 29092:29092 \ + --env-file .env.kafka \ + confluentinc/cp-kafka:7.6.1 + ``` + +## Running Song + +Song is our data cataloging system. It will provide submission validations and track and manage all our metadata and file data. + +1. **Create an env file:** Create a file named `.env.song` with the following content: + + ```bash + # ============================== + # Song Environment Variables + # ============================== + + # Spring Run Profiles + SPRING_PROFILES_ACTIVE=prod,secure,kafka + # Flyway variables + SPRING_FLYWAY_ENABLED=true + # Song Variables + ID_USELOCAL=true + SCHEMAS_ENFORCELATEST=true + # Score Variables + SCORE_URL=http://score:8087 + SCORE_ACCESSTOKEN= + # Keycloak Variables + AUTH_SERVER_PROVIDER=keycloak + AUTH_SERVER_CLIENTID=dms + AUTH_SERVER_CLIENTSECRET=t016kqXfI648ORoIP5gepqCzqtsRjlcc + AUTH_SERVER_TOKENNAME=apiKey + AUTH_SERVER_KEYCLOAK_HOST=http://keycloak:8080 + AUTH_SERVER_KEYCLOAK_REALM=myrealm + AUTH_SERVER_SCOPE_STUDY_PREFIX=STUDY. + AUTH_SERVER_SCOPE_STUDY_SUFFIX=.WRITE + AUTH_SERVER_SCOPE_SYSTEM=song.WRITE + SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI=http://keycloak:8080/realms/myrealm/protocol/openid-connect/certs + AUTH_SERVER_INTROSPECTIONURI=http://keycloak:8080/realms/myrealm/apikey/check_api_key/ + # Postgres Variables + SPRING_DATASOURCE_URL=jdbc:postgresql://song-db:5432/songDb?stringtype=unspecified + SPRING_DATASOURCE_USERNAME=admin + SPRING_DATASOURCE_PASSWORD=admin123 + # Kafka Variables + SPRING_KAFKA_BOOTSTRAPSERVERS=kafka:9092 + SPRING_KAFKA_TEMPLATE_DEFAULTTOPIC=song-analysis + # Swagger Variable + SWAGGER_ALTERNATEURL=/swagger-api + ``` + + :::info Score Access Token + We will update our `SCORE_ACCESSTOKEN` value after portal deployment. Once Stage, our portal UI is deployed, we can more easily generate an admin API key with the appropriate credentials + ::: + +
+ Click here for a detailed breakdown + + #### Spring Run Profiles + + - **Spring Run Profiles** activates specific profiles for the application with defined configurations. Profiles and their specified environment variables are defined in the [Song server application.yml](https://github.com/overture-stack/SONG/blob/develop/song-server/src/main/resources/application.yml). + + | Profile | Description | + |---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | `prod` | Optimized for production use with minimal initialization and direct database connections. | + | `secure` | Focuses on security with OAuth2 JWTs for API protection. This profile calls for a public key location for JWT verification and an introspection URI for authenticating clients. | + | `kafka` | Targets Kafka integration, specifying Kafka bootstrap servers and a default topic for message exchange. Does not include specific configurations for other services or security settings. | + + #### Flyway Variables + + - The `SPRING_FLYWAY_ENABLED` variable enables the initialization of the Song database with a Flyway database migration, setting up the necessary tables for API interactions. This migration utilizes SQL scripts located within Song and [found here](https://github.com/overture-stack/SONG/tree/develop/song-server/src/main/resources/db/migration). Without this setting, the database would remain uninitialized, leading to generic SQL errors (SQL Error: 0) with a SQLState of 42P01, corresponding to an undefined_table. + + #### Song Variables + + - The `ID_USELOCAL` mode indicates that Song will handle ID management internally, storing identifiers within its own system. Song can also be configured to use external ID management, for more information see our documentation for [ID management in Song](/develop/Song/Reference/id-management). + + - By setting `SCHEMAS_ENFORCELATEST` to `true`, the Song server will enforce that data conforms to the latest schema versions. Conversely, if set to `false`, data can be submitted to any schema version specified with the metadata submission. For more information, see our [documentation on Song Schema Management](/develop/Song/Reference/data-model-management). + + #### Score Variables + + - The `SCORE_URL` specifies the future URL of the Score service (`http://score:8087`). + + - The `SCORE_ACCESSTOKEN` is used by Song for authorized communication with Score. For example, during data publication Song will need to call Score to check if objects exist before publishing this access token, generated by Keycloak, encodes the permissions necessary to communicate securely. + + #### Keycloak Variables + + - `AUTH_SERVER_PROVIDER` specifies the authentication server provider, in this case, Keycloak. + + - `AUTH_SERVER_CLIENTID` the client ID assigned to the application by Keycloak. This identifier is used by the application to authenticate itself to the Keycloak server. + + - `AUTH_SERVER_CLIENTSECRET` the client secret associated with the client ID. This secret is used by the application to prove its identity to the Keycloak server. + + - `AUTH_SERVER_TOKENNAME`: the name of the token issued by Keycloak. This token is used by the application to authenticate subsequent requests to protected resources. + + - `AUTH_SERVER_KEYCLOAK_HOST` the URL where the Keycloak server is hosted. + + - `AUTH_SERVER_KEYCLOAK_REALM` the realm in Keycloak that contains the users and roles. The realm encapsulates the grouping of applications and users configured to Keycloak for this application. + + - `AUTH_SERVER_SCOPE_STUDY_PREFIX` the prefix added to the scope claim in the token. Scopes define the level of access granted to the token holder. In this case, it indicates a specific type of access related to studies. + + - `AUTH_SERVER_SCOPE_STUDY_SUFFIX` the suffix added to the scope claim in the token, further defining the level of access. Here, it specifies write access to study-related resources. + + - `AUTH_SERVER_SCOPE_SYSTEM` is the scope for system-level permissions, indicating write access to system resources managed by the application. + + - `SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI` is the URL where the JSON Web Key Set (JWS) for the JWT tokens is located. This key set is used by the application to validate the signature of the JWT tokens issued by Keycloak. + + - `AUTH_SERVER_INTROSPECTIONURI` the URL used by the application to check the validity of a token against the Keycloak server. Introspection allows the application to verify that a token has not been revoked or expired. + + #### PostgreSQL connection details + + - `SPRING_DATASOURCE_URL`, `SPRING_DATASOURCE_USERNAME`, `SPRING_DATASOURCE_PASSWORD` are the connection details for the PostgreSQL database. The value for the `SPRING_DATASOURCE_URL` needs to be appended with `?stringtype=unspecified` (Song as it is coded requires string type to be unspecified to interact with JSONb columns). + + #### Kafka Variables + + - `SPRING_KAFKA_BOOTSTRAP-SERVERS` and `SPRING_KAFKA_TEMPLATE_DEFAULT-TOPIC` specifies the bootstrap servers and default topics for message publishing. + + #### Custom Swagger URL + + - `SWAGGER_ALTERNATEURL` specifies a custom URL for accessing the Swagger UI (`/swagger-api`). + +
+ +2. **Run Song:** Use the docker run command with your `.env.song` file: + + ```bash + docker run -d \ + --name song \ + --platform linux/amd64 \ + -p 8080:8080 \ + --env-file .env.song \ + ghcr.io/overture-stack/song-server:fc479c13 + ``` + + Once running you should be able to access the Song Swagger UI from `http://localhost:8080/swagger-api` + +:::info Next step +Once Song is running, continue with [Score](/deploy/deployment/score) to deploy the file transfer service. +::: diff --git a/website/docs/deploy-docs/03-deployment/03-score.md b/website/docs/deploy-docs/03-deployment/03-score.md new file mode 100644 index 00000000..9545ee86 --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/03-score.md @@ -0,0 +1,114 @@ +--- +id: score +slug: /deployment/score +title: Score +sidebar_label: Score +--- + +# Score + +Score is a fault-tolerant multi-part parallel transfer service made to facilitate transfers of file data to and from object storage. + +If you have not already set up Keycloak and Song, see [Keycloak](/deploy/deployment/keycloak) and [Song](/deploy/deployment/song). + +## Running Score + +1. **Create an env file:** Create a file named `.env.score` with the following content: + + ```bash + # ============================== + # Score Environment Variables + # ============================== + + # Spring Variables + SPRING_PROFILES_ACTIVE=default,s3,prod,secure + SERVER_PORT=8087 + # Song Variable + METADATA_URL=http://song:8080 + # Score Variables + SERVER_SSL_ENABLED="false" + # Object Storage Variables + S3_ENDPOINT=http://host.docker.internal:9000 + S3_ACCESSKEY=admin + S3_SECRETKEY=admin123 + S3_SIGV4ENABLED=true + S3_SECURED=false + OBJECT_SENTINEL=heliograph + BUCKET_NAME_OBJECT=object + BUCKET_NAME_STATE=state + UPLOAD_PARTSIZE=1073741824 + UPLOAD_CONNECTION_TIMEOUT=1200000 + # Keycloak Variables + AUTH_SERVER_PROVIDER=keycloak + AUTH_SERVER_CLIENTID=dms + AUTH_SERVER_CLIENTSECRET=t016kqXfI648ORoIP5gepqCzqtsRjlcc + AUTH_SERVER_TOKENNAME=apiKey + AUTH_SERVER_KEYCLOAK_HOST=http://keycloak:8080 + AUTH_SERVER_KEYCLOAK_REALM=myrealm + AUTH_SERVER_SCOPE_DOWNLOAD_STUDY_PREFIX=STUDY. + AUTH_SERVER_SCOPE_DOWNLOAD_STUDY_SUFFIX=.READ + AUTH_SERVER_SCOPE_DOWNLOAD_SYSTEM=score.READ + AUTH_SERVER_SCOPE_UPLOAD_STUDY_PREFIX=STUDY. + AUTH_SERVER_SCOPE_UPLOAD_STUDY_SUFFIX=.WRITE + AUTH_SERVER_SCOPE_UPLOAD_SYSTEM=score.WRITE + AUTH_SERVER_URL=http://keycloak:8080/realms/myrealm/apikey/check_api_key/ + SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_JWK_SET_URI=http://keycloak:8080/realms/myrealm/protocol/openid-connect/certs + ``` + +
+ Click here for a detailed breakdown + + #### Spring Run Profiles + + - **Spring Run Profiles** activates specific profiles for the application with defined configurations. Profiles and their specified environment variables are defined in the [Score server application.yml](https://github.com/overture-stack/score/blob/develop/score-server/src/main/resources/application.yml). The profiles used here are summarized below. + + | Profile | Description | + |---------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| + | `s3` | Configures the service for use with an S3-compatible backend. | + | `prod` | Optimizes the service for production use, enabling S3 security features and specifying the metadata server URL. | + | `secure` | Implements OAuth authentication, specifying the authentication server URL, token name, client ID, client secret, and scopes for download and upload operations. | + + #### Song & Score Variables + + - `SERVER_PORT` and `SERVER_SSL_ENABLED` specifies the port for the Score service (`8087`) and disables SSL (`false`), indicating HTTP communication. SSL is disabled to simplify deployment by avoiding the need to configure SSL certificates for HTTPS. This configuration should only be used in development environments and not in production. + + - `METADATA_URL` points to the URL for our previously deployed song-server at `http://song:8080`. + + #### Object Storage Variables + + - `S3_ENDPOINT`, `S3_ACCESSKEY`, `S3_SECRETKEY`, `BUCKET_NAME_OBJECT`, `BUCKET_NAME_STATE` defines access to object storage, including the endpoint (`minio:9000`), access key (`admin`), secret key (`admin123`), bucket names for objects (`object`) and state (`state`). + + - `UPLOAD_PARTSIZE` specifies the maximum size of individual parts when uploading large files to an object storage service. Large files are typically split into smaller parts to facilitate parallel uploads and to manage network bandwidth efficiently. If network bandwidth is limited, smaller part sizes might be beneficial to keep the upload process moving quickly. On the other hand, if the application requires high throughput and can afford to wait longer for uploads to complete, larger part sizes might be preferable. + + - `UPLOAD_CONNECTION_TIMEOUT` This variable sets the timeout duration for establishing a connection to the object storage service during the upload process. It is measured in milliseconds (ms). Adjusting the connection timeout allows for fine-tuning the application's tolerance for network latency and variability. + + #### Keycloak Variables + + - **Authentication Configuration**: Specifies the authentication server provider (`Keycloak`), the Keycloak server's host (`http://keycloak:8080`), and the realm (`myrealm`) that contains the users and roles. This setup is crucial for securing applications by directing them to the correct Keycloak instance and realm for authentication and authorization processes. + + - **Token and Client Details**: Defines the token name (`apiKey`), client ID (`dms`), and the client secret configured in your `.env.score` used for authentication. These elements are essential for establishing a secure connection between the application and the Keycloak server, ensuring that only authorized applications can access protected resources. + + - **Scope Definitions**: Outlines the scopes for study, download, and upload operations, specifying prefixes and suffixes that indicate the level of access granted to the token holder. These scopes are critical for defining the permissions associated with the tokens, controlling what actions can be performed by the authenticated users. + + - **Introspection and JWT Validation**: Provides the URL for checking the validity of a token (`http://keycloak:8080/realms/myrealm/apikey/check_api_key/`) and the location of the JSON Web Key Set (JWS) for validating JWT tokens (`http://keycloak:8080/realms/myrealm/protocol/openid-connect/certs`). These mechanisms ensure that tokens are valid and have not been tampered with, maintaining the security of the authentication process. + +
+ +2. **Run Score:** Use the docker run command with the `--env-file` option: + + ```bash + docker run -d \ + --name score \ + --platform linux/amd64 \ + -p 8087:8087 \ + --env-file .env.score \ + ghcr.io/overture-stack/score-server:latest + ``` + + :::info + The `score` container will now expose the file transfer API on port `8087`. + ::: + +:::note +If you have not already deployed MinIO or Song, return to [Song](/deploy/deployment/song) for the required backend services. +::: diff --git a/website/guides/01-deployment-guide/03-search-portal.md b/website/docs/deploy-docs/03-deployment/03-search-portal.mdx similarity index 68% rename from website/guides/01-deployment-guide/03-search-portal.md rename to website/docs/deploy-docs/03-deployment/03-search-portal.mdx index da13080b..4fa55801 100644 --- a/website/guides/01-deployment-guide/03-search-portal.md +++ b/website/docs/deploy-docs/03-deployment/03-search-portal.mdx @@ -1,8 +1,33 @@ +--- +id: search-portal +slug: /deployment/search-portal +title: Data Portal +sidebar_label: Data Portal +unlisted: true +--- + # Data Portal -Setting up your data portal involves configuring and running Elasticsearch, Maestro, Arranger and Stage. Below are the steps and breakdowns to ensure a smooth setup process. +This page has been split into individual service guides: +- [Search Engine](/deploy/deployment/search-engine) +- [Maestro](/deploy/deployment/maestro) +- [Arranger](/deploy/deployment/arranger) +- [Stage](/deploy/deployment/stage) + +Setting up your data portal involves configuring and running a search engine (Elasticsearch or OpenSearch), Maestro, Arranger and Stage. Below are the steps and breakdowns to ensure a smooth setup process. + +## Setting up your search engine + +Overture's search platform runs on either Elasticsearch or OpenSearch. Maestro indexes your metadata into whichever engine you choose, and Arranger generates the search API and UI components on top of it. The steps below are given for both engines; follow the tab for the one you are running. -## Setting up Elasticsearch +:::note Supported search engines + +Arranger supports **OpenSearch 1.x or higher** and **Elasticsearch 7.x** (minimum 7.0, licensed or default distribution only; ES OSS and ES 8.x are not supported; the bundled client is `@elastic/elasticsearch` v7). OpenSearch maintains API compatibility with Elasticsearch 7.x, so the index templates, mappings, and queries in this guide apply to both engines unchanged. + +::: + + + 1. **Run Elasticsearch:** Use the following command to pull and run the Elasticsearch docker container @@ -46,14 +71,12 @@ Setting up your data portal involves configuring and running Elasticsearch, Maes ::: -Would you like me to explain any specific Elasticsearch 7 features or compatibility considerations in more detail? - 2. **Supply an index template:** Create a folder titled `elasticsearchConfigs` Download and place the following **[quickstart_index_template.json](https://raw.githubusercontent.com/overture-stack/composer/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json)** within your `elasticsearchConfigs` folder. This file specifies settings, mappings, and configurations that will be applied automatically to new indices that match the template's pattern :::info Learn More - If you'd like to learn more about creating an index mapping for your own data see our [administration guide on configuring the index mapping](/guides/administration-guides/index-mappings). + If you'd like to learn more about creating an index mapping for your own data see our [administration guide on configuring the index mapping](/use/administration/index-mappings). ::: 3. **Initialize your index:** Run the following scripts to set up your Elasticsearch cluster @@ -76,8 +99,86 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil Any index alias that starts with `overture-` will use the mapping of the index template we initially provided. This is defined on [line two of our `quickstart_index_template`](https://github.com/overture-stack/composer/blob/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json#L2). ::: + + + +1. **Run OpenSearch:** Use the following command to pull and run the OpenSearch docker container + + ```bash + docker run -d --name opensearch \ + -p 9200:9200 \ + -e discovery.type=single-node \ + -e cluster.name=workflow.opensearch \ + -e OPENSEARCH_JAVA_OPTS="-Xms512m -Xmx2048m" \ + -e DISABLE_SECURITY_PLUGIN=true \ + -e DISABLE_INSTALL_DEMO_CONFIG=true \ + opensearchproject/opensearch:2.17.1 + ``` + +
+ Click here for a detailed breakdown + + - `-p 9200:9200` maps port 9200 of the host to port 9200 of the container + + - `-e discovery.type=single-node` runs OpenSearch as a standalone node, bypassing cluster discovery and formation, ideal for development, testing, or small-scale deployments where clustering is not necessary + + - `-e cluster.name=workflow.opensearch` names the cluster, good practice in case you choose to run multiple clusters or nodes in the future + + - `-e OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx2048m` sets the initial (`-Xms512m`, 512 MB) and maximum (`-Xmx2048m`, 2 GB) heap size for the JVM running OpenSearch. This is the OpenSearch equivalent of Elasticsearch's `ES_JAVA_OPTS` + + - `-e DISABLE_SECURITY_PLUGIN=true` turns off the OpenSearch security plugin so the REST API is served over plain HTTP with no TLS and no admin password. This keeps the `curl`, Maestro, and Arranger configuration in this guide identical to the Elasticsearch path + + - `-e DISABLE_INSTALL_DEMO_CONFIG=true` skips installing the demo security certificates and users, which are not needed when the security plugin is disabled + +
+ + :::warning OpenSearch configuration notes + + - OpenSearch 2.x serves the Elasticsearch 7.x style index templates and queries used throughout this guide, so the index template and mapping files work unchanged. + + - Do not set `compatibility.override_main_response_version`. It hides `version.distribution` from the `GET /` response, which causes Arranger to auto-detect the Elasticsearch client instead of OpenSearch and fail to initialize. + + - Disabling the security plugin is only appropriate for a localhost-bound development instance. On any network-exposed deployment, keep the security plugin enabled and connect over HTTPS with credentials. + + ::: + +2. **Supply an index template:** Create a folder titled `elasticsearchConfigs` + + Download and place the following **[quickstart_index_template.json](https://raw.githubusercontent.com/overture-stack/composer/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json)** within your `elasticsearchConfigs` folder. This is the same template used for Elasticsearch; OpenSearch applies it without changes. + + :::info Learn More + If you'd like to learn more about creating an index mapping for your own data see our [administration guide on configuring the index mapping](/use/administration/index-mappings). + ::: + +3. **Initialize your index:** Run the following scripts to set up your OpenSearch cluster + + Update OpenSearch with your index template using the following `curl` command: + + ```bash + curl -X PUT 'http://localhost:9200/_template/index_template' -H 'Content-Type: application/json' -d ./elasticsearchConfigs/quickstart_index_template.json + ``` + + Create a new alias in OpenSearch using the following `curl` command: + + ```bash + curl -X PUT 'http://localhost:9200/overture-quickstart-index' + ``` + + With the security plugin disabled these requests need no credentials. If successful you should be able to view the updated index in your browser from `http://localhost:9200/overture-quickstart-index`. + + :::info How this works + Any index alias that starts with `overture-` will use the mapping of the index template we initially provided. This is defined on [line two of our `quickstart_index_template`](https://github.com/overture-stack/composer/blob/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json#L2). + ::: + +
+
+ ## Running Maestro +:::info Using OpenSearch +Maestro communicates with the search engine over the Elasticsearch 7.x REST API, which OpenSearch 2.x also serves, so the same `MAESTRO_ELASTICSEARCH_*` variables below drive an OpenSearch cluster. Point `MAESTRO_ELASTICSEARCH_CLUSTER_NODES` at your OpenSearch node (for example `http://opensearch:9200`), and if you disabled the OpenSearch security plugin as shown above, set `MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_ENABLED=false` since no credentials are required. +::: + 1. **Create an env file:** Create a file named `.env.maestro` with the following content: ```bash @@ -100,7 +201,7 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil MAESTRO_ELASTICSEARCH_CLUSTER_NODES=http://elasticsearch:9200 MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_USER=elastic MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_PASSWORD=myelasticpassword - MAESTRO_ELASTICSEARCH_CLIENT_TRUSTSELFSIGNCERT=true + MAESTRO_ELASTICSEARCH_CLIENT_TRUSTSELFSIGNEDCERT=true MAESTRO_ELASTICSEARCH_INDEXES_ANALYSISCENTRIC_ENABLED=false MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_ENABLED=true MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_NAME=overture-quickstart-index @@ -142,9 +243,9 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil #### Elasticsearch Variables - - `MAESTRO_ELASTICSEARCH_INDEXES_ANALYSISCENTRIC_ENABLED` set to `true` specifying that analysis-centric indices are to be expected + - `MAESTRO_ELASTICSEARCH_INDEXES_ANALYSISCENTRIC_ENABLED` set to `false` specifying that analysis-centric indices are not to be expected - - `MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_ENABLED` set to `false` specifying to Maestro that file-centric indices are not to be expected + - `MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_ENABLED` set to `true` specifying to Maestro that file-centric indices are to be expected - `MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_ENABLED` enables basic authentication for the Elasticsearch client @@ -186,6 +287,10 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil ## Running Arranger +:::info Using OpenSearch +Set `SEARCH_ENGINE=opensearch` and point `ES_HOST` at your OpenSearch node (for example `http://opensearch:9200`). The `ES_HOST`, `ES_USER`, and `ES_PASS` variables apply to both engines; the credentials are ignored when the OpenSearch security plugin is disabled. Leaving `SEARCH_ENGINE` unset makes Arranger auto-detect the engine from the cluster. +::: + 1. **Create an env file:** Create a file named `.env.arranger` with the following content: ```bash @@ -195,13 +300,13 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil # Arranger Variables ENABLE_LOGS=false - # Elasticsearch Variables + # Directory holding the per-catalogue config files (mounted below) + CONFIGS_PATH=/configs + # Elasticsearch / OpenSearch Variables ES_HOST=http://elasticsearch:9200 ES_USER=elastic ES_PASS=myelasticpassword - # Stage Variables - REACT_APP_BASE_URL=http://stage:3000 - REACT_APP_ARRANGER_ADMIN_ROOT=http://arranger-server:5050/graphql + SEARCH_ENGINE=elasticsearch ``` 2. **Create a folder titled `arrangerConfigs` and place the following configuration files within it:** @@ -209,7 +314,6 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil - The **[base.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/base.json)**, containing the base configuration for the Arranger server - The **[extended.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/extended.json)**, containing all possible fields inputted into arranger - The **[facets.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/facets.json)**, defines the facets found within the facet panel of the data exploration page in Stage - - The **[matchbox.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/matchbox.json)**, containing matchbox configuration settings - The **[table.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/table.json)**, defines the formatting of the tables found on the data exploration page in Stage 3. **Run Arranger:** Use the docker run command with your `.env.arranger` file: @@ -218,12 +322,8 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil docker run --env-file .env.arranger \ --name arranger-server \ -p 5050:5050 \ - -v ./arrangerConfigs/base.json:/app/modules/server/configs/base.json \ - -v ./arrangerConfigs/extended.json:/app/modules/server/configs/extended.json \ - -v ./arrangerConfigs/facets.json:/app/modules/server/configs/facets.json \ - -v ./arrangerConfigs/matchbox.json:/app/modules/server/configs/matchbox.json \ - -v ./arrangerConfigs/table.json:/app/modules/server/configs/table.json \ - ghcr.io/overture-stack/arranger-server:3.0.0-beta.33 + -v ./arrangerConfigs:/configs \ + ghcr.io/overture-stack/arranger-search-server:3.1.0-rc.2 ``` Make sure to confirm the `./arrangerConfigs/` path aligns with the actual paths to your Arranger-Server configuration files, update your command or folder structure accordingly. @@ -237,25 +337,24 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil - `ES_USER` and `ES_PASS` are the credentials for accessing Elasticsearch - - `REACT_APP_BASE_URL` is the base URL for your front-end application, in this case Stage, which we will set up next + - `SEARCH_ENGINE` selects the search backend, either `elasticsearch` or `opensearch` - - `REACT_APP_ARRANGER_ADMIN_ROOT` is the URL for the Arranger GraphQL endpoint + - `CONFIGS_PATH` is the directory inside the container that holds the per-catalogue config files (matched by the volume mount below) ### When running Arranger: - `-p 5050:5050` maps port 5050 of the host to port 5050 of the container. - - `-v ./arrangerConfigs/...:/app/modules/server/configs/...` mounts configuration files into the container + - `-v ./arrangerConfigs:/configs` mounts the config directory into the container (matched by `CONFIGS_PATH`) - `base.json` contains the base configuration for the Arranger server - `extended.json` contains all possible fields inputted into arranger - `facets.json` defines the facets found within the facet panel of the data exploration page in Stage - `table.json` defines the formatting of the tables found on the data exploration page in Stage - - `matchbox.json` contains matchbox configuration settings :::info Configuring Arranger - If you want to learn more about configuring Arranger see our administration guide on [customizing the search portal](../02-administration-guides/03-customizing-the-data-portal.md). + If you want to learn more about configuring Arranger see our administration guide on [customizing the search portal](/use/administration/customizing-the-data-portal). ::: ## Setting up Stage @@ -272,7 +371,6 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil NEXT_PUBLIC_LAB_NAME=Overture QuickStart Portal NEXT_PUBLIC_ADMIN_EMAIL=contact@overture.bio NEXT_PUBLIC_DEBUG=true - NEXT_PUBLIC_SHOW_MOBILE_WARNING=true # Keycloak Variables NEXT_PUBLIC_AUTH_PROVIDER=keycloak ACCESSTOKEN_ENCRYPTION_SECRET=super_secret @@ -282,8 +380,6 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil NEXT_PUBLIC_KEYCLOAK_CLIENT_ID=webclient KEYCLOAK_CLIENT_SECRET=ikksyrYaKX07acf4hpGrpKWcUGaFkEdM NEXT_PUBLIC_KEYCLOAK_PERMISSION_AUDIENCE=dms - # Score Variables - NEXT_PUBLIC_SCORE_API_URL=http://score:8087 # Arranger Variables NEXT_PUBLIC_ARRANGER_DOCUMENT_TYPE=file NEXT_PUBLIC_ARRANGER_INDEX=file_centric @@ -316,10 +412,6 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil - `NEXT_PUBLIC_KEYCLOAK_PERMISSION_AUDIENCE` specifies the audience for the permission claims in the access token, restricting the scope of access granted to the token - #### Score Variables - - - `NEXT_PUBLIC_SCORE_API_URL` is the URL of the Score API, which the application uses to communicate with the Score service - #### Arranger Variables - `NEXT_PUBLIC_ARRANGER_DOCUMENT_TYPE` indexes can be either file centric or analysis (participant) centric, the document type variable specifies which of these configurations is true @@ -365,9 +457,13 @@ API Keys are brokered by Keycloak and accessible when logged in to the Stage UI --platform linux/amd64 \ -p 8080:8080 \ --env-file .env.song \ - ghcr.io/overture-stack/song-server:438c2c42 + ghcr.io/overture-stack/song-server:fc479c13 ``` :::tip Next Steps - Now that you have the end-to-end portal setup we recommend you check out our [administration guide on updating the data model](/guides/administration-guides/updating-the-data-model). + Now that you have the end-to-end portal setup we recommend you check out our [administration guide on building Song schemas](/use/administration/building-song-schemas). ::: + +:::note Verified against +This guide was verified against **Maestro** `4.3.0` (`d831878`), **Arranger** image `arranger-search-server:3.1.0-rc.2` (checkout `8e84b4b`), and **Stage** `1.1.3` (`2072033`) on 2026-07-28. The Elasticsearch path was verified with Elasticsearch `7.17.1`; the OpenSearch configuration mirrors the verified AI-assisted discovery stack (`opensearchproject/opensearch:2.17.1`). Newer releases may differ. +::: diff --git a/website/docs/deploy-docs/03-deployment/04-lectern.md b/website/docs/deploy-docs/03-deployment/04-lectern.md new file mode 100644 index 00000000..c4b5c0fe --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/04-lectern.md @@ -0,0 +1,68 @@ +--- +id: lectern +slug: /deployment/lectern +title: Lectern +sidebar_label: Lectern +--- + +# Lectern + +Lectern and Lyric form Overture's structured, dictionary-driven tabular data submission system. Lectern manages the dictionaries that define your tabular data, and Lyric validates and stores tabular submissions against those dictionaries. + +Lyric depends on Lectern, so set up Lectern first. After this page, continue to [Lyric](/deploy/deployment/lyric). + +## Setting up the Lectern database + +Lectern stores its dictionaries, versions, and metadata in MongoDB. + +1. **Run MongoDB:** Use the following command to pull and run the MongoDB docker container + + ```bash + docker run -d --name lectern-mongo \ + -e MONGODB_USERNAME=admin \ + -e MONGODB_PASSWORD=password \ + -e MONGODB_DATABASE=lectern \ + -e MONGODB_ROOT_PASSWORD=password123 \ + -p 27017:27017 \ + bitnami/mongodb:4.0 + ``` + +
+ For more details, click here + + - This runs a MongoDB instance named `lectern-mongo` with an application user `admin` (password `password`) scoped to the `lectern` database. + - Lectern connects to this database using the `MONGO_*` variables set in the next step. + +
+ +## Running Lectern + +1. **Run Lectern:** Use the following command to pull and run the Lectern docker container + + ```bash + docker run -d --name lectern \ + -e PORT=3000 \ + -e MONGO_HOST=lectern-mongo \ + -e MONGO_PORT=27017 \ + -e MONGO_DB=lectern \ + -e MONGO_USER=admin \ + -e MONGO_PASS=password \ + -e AUTH_ENABLED=false \ + -p 3000:3000 \ + ghcr.io/overture-stack/lectern:latest + ``` + +
+ Click here for a detailed breakdown + + #### Lectern Variables + + - `PORT` is the port Lectern listens on (default `3000`). + - `MONGO_HOST`, `MONGO_PORT`, `MONGO_DB`, `MONGO_USER`, and `MONGO_PASS` point Lectern at the MongoDB instance from the previous step. Alternatively, set `MONGO_URL` to a full connection string, which overrides these discrete variables. + - `AUTH_ENABLED` toggles JWT-based authorization. It is set to `false` here for a simpler local deployment; enable it and set `EGO_API` and `SCOPE` to secure Lectern. + +
+ + :::info + Once running, the Lectern API and its Swagger UI are available at `http://localhost:3000/api-docs`. + ::: diff --git a/website/docs/deploy-docs/03-deployment/04-tabular-data-submission.md b/website/docs/deploy-docs/03-deployment/04-tabular-data-submission.md new file mode 100644 index 00000000..de8daa40 --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/04-tabular-data-submission.md @@ -0,0 +1,132 @@ +--- +id: tabular-data-submission +slug: /deployment/tabular-data-submission +title: Tabular Data Submission +sidebar_label: Tabular Data Submission +unlisted: true +--- + +# Tabular Data Submission + +This page has been split into individual service guides: +- [Lectern](/deploy/deployment/lectern) +- [Lyric](/deploy/deployment/lyric) + +Lectern and Lyric will be set up next. Together they form Overture's structured, dictionary-driven data submission system: Lectern manages the data dictionaries (the schemas that define your tabular data), and Lyric validates and stores tabular submissions against those dictionaries. Lyric depends on Lectern, so we set up Lectern first. + +## Setting up the Lectern database + +Lectern stores its dictionaries, versions, and metadata in MongoDB. + +1. **Run MongoDB:** Use the following command to pull and run the MongoDB docker container + + ```bash + docker run -d --name lectern-mongo \ + -e MONGODB_USERNAME=admin \ + -e MONGODB_PASSWORD=password \ + -e MONGODB_DATABASE=lectern \ + -e MONGODB_ROOT_PASSWORD=password123 \ + -p 27017:27017 \ + bitnami/mongodb:4.0 + ``` + +
+ For more details, click here + + - This runs a MongoDB instance named `lectern-mongo` with an application user `admin` (password `password`) scoped to the `lectern` database. + - Lectern connects to this database using the `MONGO_*` variables set in the next step. + +
+ +## Running Lectern + +1. **Run Lectern:** Use the following command to pull and run the Lectern docker container + + ```bash + docker run -d --name lectern \ + -e PORT=3000 \ + -e MONGO_HOST=lectern-mongo \ + -e MONGO_PORT=27017 \ + -e MONGO_DB=lectern \ + -e MONGO_USER=admin \ + -e MONGO_PASS=password \ + -e AUTH_ENABLED=false \ + -p 3000:3000 \ + ghcr.io/overture-stack/lectern:latest + ``` + +
+ Click here for a detailed breakdown + + #### Lectern Variables + + - `PORT` is the port Lectern listens on (default `3000`). + - `MONGO_HOST`, `MONGO_PORT`, `MONGO_DB`, `MONGO_USER`, and `MONGO_PASS` point Lectern at the MongoDB instance from the previous step. Alternatively, set `MONGO_URL` to a full connection string, which overrides these discrete variables. + - `AUTH_ENABLED` toggles JWT-based authorization. It is set to `false` here for a simpler local deployment; enable it and set `EGO_API` and `SCOPE` to secure Lectern. + +
+ + :::info + Once running, the Lectern API and its Swagger UI are available at `http://localhost:3000/api-docs`. + ::: + +## Setting up the Lyric database + +Lyric stores submitted tabular data in PostgreSQL. + +1. **Run PostgreSQL:** Use the following command to pull and run the PostgreSQL docker container + + ```bash + docker run -d --name lyric-db \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=secret \ + -e POSTGRES_DB=lyric \ + -p 5432:5432 \ + postgres:15-alpine + ``` + +
+ For more details, click here + + - This runs a PostgreSQL instance named `lyric-db` with the user `postgres`, password `secret`, and a database named `lyric`. + - Lyric connects to this database using the `DB_*` variables set in the next step. + +
+ +## Running Lyric + +1. **Run Lyric:** Use the following command to pull and run the Lyric docker container + + ```bash + docker run -d --name lyric \ + -e PORT=3030 \ + -e DB_HOST=lyric-db \ + -e DB_PORT=5432 \ + -e DB_NAME=lyric \ + -e DB_USER=postgres \ + -e DB_PASSWORD=secret \ + -e LECTERN_URL=http://lectern:3000 \ + -e ID_USELOCAL=true \ + -p 3030:3030 \ + ghcr.io/overture-stack/lyric:latest + ``` + +
+ Click here for a detailed breakdown + + #### Lyric Variables + + - `PORT` is the port Lyric listens on (default `3030`). + - `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, and `DB_PASSWORD` point Lyric at the PostgreSQL instance from the previous step. + - `LECTERN_URL` is the URL of the running Lectern service supplying dictionary schemas; here it is the `lectern` container on port `3000`. + - `ID_USELOCAL` set to `true` has Lyric generate record identifiers locally rather than delegating to an external ID service. + +
+ + :::info + Once running, the Lyric API and its Swagger UI are available at `http://localhost:3030/api-docs`. Confirm `LECTERN_URL` points to a running Lectern service before submitting data. + ::: + +:::note Verified against +This guide was verified against **Lectern** `2.0.0-beta.3` (`8d9182f`) and **Lyric** `0.3.0` (`a6bb4e0`) on 2026-07-28, with MongoDB `4.0` and PostgreSQL `15`. Newer releases may differ. +::: diff --git a/website/docs/deploy-docs/03-deployment/05-arranger-mcp-server.md b/website/docs/deploy-docs/03-deployment/05-arranger-mcp-server.md new file mode 100644 index 00000000..5993607e --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/05-arranger-mcp-server.md @@ -0,0 +1,60 @@ +--- +id: arranger-mcp-server +slug: /deployment/arranger-mcp-server +title: Arranger MCP Server +sidebar_label: Arranger MCP Server +--- + +# Arranger MCP Server + +The Arranger MCP server sits on top of Arranger (deployed with the search portal above) and exposes your indexed data to MCP-compatible AI clients, so researchers can query the portal in plain language. Deploy it only if you want to offer AI-assisted, conversational data discovery on top of your search portal. + +For the workflow this enables, the researcher experience, and a locally deployable demo, see the [AI-Assisted Data Discovery](/use/ai-assisted-data-discovery) guide. + +## Running the MCP server + +1. **Run the MCP server:** Point the container at the Arranger you deployed with the search portal. + + ```bash + docker pull ghcr.io/overture-stack/arranger-mcp-server:b4a414ce + + docker run -d \ + --name arranger-mcp \ + -e ARRANGER_BASE_URL=http://:5050 \ + -e ARRANGER_CATALOGUES= \ + -p 3100:3100 \ + ghcr.io/overture-stack/arranger-mcp-server:b4a414ce + ``` + + Replace `` with your Arranger's hostname or IP. If Arranger runs in Docker on the same host, use `host.docker.internal` (macOS/Windows) or the Arranger container's service name on a shared network. Set `ARRANGER_CATALOGUES` to the catalogues your Arranger actually serves; the server exits on startup if that list is missing or empty. + + | Variable | Default | Required | Description | + | ----------------------------- | ----------------------- | ------------ | ------------------------------------------------------------------- | + | `ARRANGER_BASE_URL` | `http://localhost:5050` | **Required** | Base URL of the Arranger server | + | `ARRANGER_CATALOGUES` | `server` | **Required** | Comma-separated list of Arranger catalogues to expose | + | `ARRANGER_REQUEST_TIMEOUT_MS` | `10000` | Optional | HTTP timeout in milliseconds for requests to Arranger | + | `MCP_HOST` | `0.0.0.0` | Optional | Host the MCP server binds to | + | `MCP_PORT` | `3100` | Optional | Port the MCP server listens on | + | `MCP_PATH` | `/mcp` | Optional | Endpoint path for the Streamable HTTP transport | + | `LOG_LEVEL` | `info` | Optional | Pino log level (`trace`, `debug`, `info`, `warn`, `error`, `fatal`) | + +2. **Confirm the server is up:** Check that the container is running and connected to Arranger. + + ```bash + docker ps | grep arranger-mcp + docker logs arranger-mcp # should show it connected to Arranger and listening + ``` + + The server is now reachable at `http://:3100/mcp` over the Streamable HTTP transport, ready for an MCP-compatible client to connect. + +:::warning Log files can be sensitive +At `LOG_LEVEL` `debug` or `trace`, the server may write SQON query objects to its logs. Those queries are generated from researcher input and can reveal which datasets, filters, and value ranges a researcher is investigating. Treat log files as potentially sensitive data: keep `LOG_LEVEL` at `info` or higher in production unless you are actively debugging, and apply the same access controls and retention policies you use for your primary portal's query logs. +::: + +:::info Learn More +For the server's internals, its full tool inventory, and development and testing workflows, see the canonical Arranger MCP Server documentation at [`apps/mcp-server`](https://github.com/overture-stack/arranger/tree/main/apps/mcp-server) and Arranger's [MCP server](/develop/Arranger/mcp-server) reference. +::: + +:::note Verified against +This guide was verified against the **Arranger MCP server** image `arranger-mcp-server:b4a414ce`, built from **Arranger** `v3.0.0-beta.32`+`8e84b4b`, on 2026-07-28. Newer releases may differ. +::: diff --git a/website/docs/deploy-docs/03-deployment/05-lyric.md b/website/docs/deploy-docs/03-deployment/05-lyric.md new file mode 100644 index 00000000..dc9e0a55 --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/05-lyric.md @@ -0,0 +1,73 @@ +--- +id: lyric +slug: /deployment/lyric +title: Lyric +sidebar_label: Lyric +--- + +# Lyric + +Lyric validates and stores tabular submissions against the dictionaries managed by Lectern. + +Make sure Lectern is running before starting Lyric. If not, return to [Lectern](/deploy/deployment/lectern). + +## Setting up the Lyric database + +Lyric stores submitted tabular data in PostgreSQL. + +1. **Run PostgreSQL:** Use the following command to pull and run the PostgreSQL docker container + + ```bash + docker run -d --name lyric-db \ + -e POSTGRES_USER=postgres \ + -e POSTGRES_PASSWORD=secret \ + -e POSTGRES_DB=lyric \ + -p 5432:5432 \ + postgres:15-alpine + ``` + +
+ For more details + + - This runs a PostgreSQL instance named `lyric-db` with the user `postgres`, password `secret`, and a database named `lyric`. + - Lyric connects to this database using the `DB_*` variables set in the next step. + +
+ +## Running Lyric + +1. **Run Lyric:** Use the following command to pull and run the Lyric docker container + + ```bash + docker run -d --name lyric \ + -e PORT=3030 \ + -e DB_HOST=lyric-db \ + -e DB_PORT=5432 \ + -e DB_NAME=lyric \ + -e DB_USER=postgres \ + -e DB_PASSWORD=secret \ + -e LECTERN_URL=http://lectern:3000 \ + -e ID_USELOCAL=true \ + -p 3030:3030 \ + ghcr.io/overture-stack/lyric:latest + ``` + +
+ Click here for a detailed breakdown + + #### Lyric Variables + + - `PORT` is the port Lyric listens on (default `3030`). + - `DB_HOST`, `DB_PORT`, `DB_NAME`, `DB_USER`, and `DB_PASSWORD` point Lyric at the PostgreSQL instance from the previous step. + - `LECTERN_URL` is the URL of the running Lectern service supplying dictionary schemas; here it is the `lectern` container on port `3000`. + - `ID_USELOCAL` set to `true` has Lyric generate record identifiers locally rather than delegating to an external ID service. + +
+ + :::info + Once running, the Lyric API and its Swagger UI are available at `http://localhost:3030/api-docs`. Confirm `LECTERN_URL` points to a running Lectern service before submitting data. + ::: + +:::note Verified against +This guide was verified against **Lectern** `2.0.0-beta.3` (`8d9182f`) and **Lyric** `0.3.0` (`a6bb4e0`) on 2026-07-28, with MongoDB `4.0` and PostgreSQL `15`. Newer releases may differ. +::: diff --git a/website/docs/deploy-docs/03-deployment/06-search-engine.mdx b/website/docs/deploy-docs/03-deployment/06-search-engine.mdx new file mode 100644 index 00000000..c93e484b --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/06-search-engine.mdx @@ -0,0 +1,164 @@ +--- +id: search-engine +slug: /deployment/search-engine +title: Search Engine +sidebar_label: Search Engine +--- + +# Search Engine + +Setting up your data portal begins with a search engine: Elasticsearch or OpenSearch. Maestro indexes your metadata into whichever engine you choose, and Arranger generates the search API and UI components on top of it. + +Below are the steps for both engines; follow the tab for the one you are running. + +:::note Supported search engines + +Arranger supports **OpenSearch 1.x or higher** and **Elasticsearch 7.x** (minimum 7.0, licensed or default distribution only; ES OSS and ES 8.x are not supported; the bundled client is `@elastic/elasticsearch` v7). OpenSearch maintains API compatibility with Elasticsearch 7.x, so the index templates, mappings, and queries in this guide apply to both engines unchanged. + +::: + + + + +1. **Run Elasticsearch:** Use the following command to pull and run the Elasticsearch docker container + + ```bash + docker run -d --name elasticsearch \ + -p 9200:9200 \ + -e discovery.type=single-node \ + -e cluster.name=workflow.elasticsearch \ + -e ES_JAVA_OPTS="-Xms512m -Xmx2048m" \ + -e ELASTIC_PASSWORD=myelasticpassword \ + -e xpack.security.enabled=true \ + -e MANAGE_INDEX_TEMPLATES=true \ + -e NETWORK_HOST=http://localhost:9200 \ + docker.elastic.co/elasticsearch/elasticsearch:7.17.1 + ``` + +
+ Click here for a detailed breakdown + + - `-p 9200:9200` maps port 9200 of the host to port 9200 of the container + + - `-e discovery.type=single-node` configures Elasticsearch to run in single-node mode, this bypasses the need for cluster discovery and formation protocols, making Elasticsearch start up as a standalone node, ideal for development, testing, or small-scale deployments where clustering is not necessary + + - `-e cluster.name=workflow.elasticsearch` names the Elasticsearch cluster, this is good practice in case you choose to run multiple clusters or nodes in the future + + - `-e ES_JAVA_OPTS=-Xms512m -Xmx2048m` sets the initial and maximum heap size for the Java Virtual Machine (JVM) running Elasticsearch. `-Xms512m` sets the initial heap size to 512 MB. `-Xmx2048m` sets the maximum heap size to 2048 MB (2 GB). Properly setting these values ensures that Elasticsearch has enough memory to handle its operations efficiently, but not so much that it starves other processes on the host machine. + + - `-e xpack.security.enabled=true` activates security features such as authentication, authorization, encryption, and audit logging + + - `-e MANAGE_INDEX_TEMPLATES=true` ensures Elasticsearch manages index templates, when true, the system expects to manage the index templates as part of its operations. In the next step we will create a client services to set up the default configurations for new indices + + - `-e ELASTIC_PASSWORD=myelasticpassword` Sets the password for the elastic user + +
+ + :::warning We use Elasticsearch 7 + + Our search platform is built on and compatible with version 7.x of Elasticsearch. Applications and queries need to follow Elasticsearch 7 syntax and conventions. + + ::: + +2. **Supply an index template:** Create a folder titled `elasticsearchConfigs` + + Download and place the following **[quickstart_index_template.json](https://raw.githubusercontent.com/overture-stack/composer/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json)** within your `elasticsearchConfigs` folder. This file specifies settings, mappings, and configurations that will be applied automatically to new indices that match the template's pattern + + :::info Learn More + If you'd like to learn more about creating an index mapping for your own data see our [administration guide on configuring the index mapping](/use/administration/index-mappings). + ::: + +3. **Initialize your index:** Run the following scripts to set up your Elasticsearch cluster + + Update Elasticsearch with your index template using the following `curl` command: + + ```bash + curl -u elastic:myelasticpassword -X PUT 'http://localhost:9200/_template/index_template' -H 'Content-Type: application/json' -d ./elasticsearchConfigs/quickstart_index_template.json + ``` + + Create a new alias in Elasticsearch using the following `curl` command: + + ```bash + curl -u elastic:myelasticpassword -X PUT 'http://localhost:9200/overture-quickstart-index' + ``` + + If successful you should be able to view the updated index in your browser from `http://localhost:9200/overture-quickstart-index` with the username `elastic` and password `myelasticpassword`. + + :::info How this works + Any index alias that starts with `overture-` will use the mapping of the index template we initially provided. This is defined on [line two of our `quickstart_index_template`](https://github.com/overture-stack/composer/blob/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json#L2). + ::: + +
+ + +1. **Run OpenSearch:** Use the following command to pull and run the OpenSearch docker container + + ```bash + docker run -d --name opensearch \ + -p 9200:9200 \ + -e discovery.type=single-node \ + -e cluster.name=workflow.opensearch \ + -e OPENSEARCH_JAVA_OPTS="-Xms512m -Xmx2048m" \ + -e DISABLE_SECURITY_PLUGIN=true \ + -e DISABLE_INSTALL_DEMO_CONFIG=true \ + opensearchproject/opensearch:2.17.1 + ``` + +
+ Click here for a detailed breakdown + + - `-p 9200:9200` maps port 9200 of the host to port 9200 of the container + + - `-e discovery.type=single-node` runs OpenSearch as a standalone node, bypassing cluster discovery and formation, ideal for development, testing, or small-scale deployments where clustering is not necessary + + - `-e cluster.name=workflow.opensearch` names the cluster, good practice in case you choose to run multiple clusters or nodes in the future + + - `-e OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx2048m` sets the initial (`-Xms512m`, 512 MB) and maximum (`-Xmx2048m`, 2 GB) heap size for the JVM running OpenSearch. This is the OpenSearch equivalent of Elasticsearch's `ES_JAVA_OPTS` + + - `-e DISABLE_SECURITY_PLUGIN=true` turns off the OpenSearch security plugin so the REST API is served over plain HTTP with no TLS and no admin password. This keeps the `curl`, Maestro, and Arranger configuration in this guide identical to the Elasticsearch path + + - `-e DISABLE_INSTALL_DEMO_CONFIG=true` skips installing the demo security certificates and users, which are not needed when the security plugin is disabled + +
+ + :::warning OpenSearch configuration notes + - OpenSearch 2.x serves the Elasticsearch 7.x style index templates and queries used throughout this guide, so the index template and mapping files work unchanged. + + - Do not set `compatibility.override_main_response_version`. It hides `version.distribution` from the `GET /` response, which causes Arranger to auto-detect the Elasticsearch client instead of OpenSearch and fail to initialize. + + - Disabling the security plugin is only appropriate for a localhost-bound development instance. On any network-exposed deployment, keep the security plugin enabled and connect over HTTPS with credentials. + + ::: + +2. **Supply an index template:** Create a folder titled `elasticsearchConfigs` + + Download and place the following **[quickstart_index_template.json](https://raw.githubusercontent.com/overture-stack/composer/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json)** within your `elasticsearchConfigs` folder. This is the same template used for Elasticsearch; OpenSearch applies it without changes. + + :::info Learn More + If you'd like to learn more about creating an index mapping for your own data see our [administration guide on configuring the index mapping](/use/administration/index-mappings). + ::: + +3. **Initialize your index:** Run the following scripts to set up your OpenSearch cluster + + Update OpenSearch with your index template using the following `curl` command: + + ```bash + curl -X PUT 'http://localhost:9200/_template/index_template' -H 'Content-Type: application/json' -d ./elasticsearchConfigs/quickstart_index_template.json + ``` + + Create a new alias in OpenSearch using the following `curl` command: + + ```bash + curl -X PUT 'http://localhost:9200/overture-quickstart-index' + ``` + + With the security plugin disabled these requests need no credentials. If successful you should be able to view the updated index in your browser from `http://localhost:9200/overture-quickstart-index`. + + :::info How this works + Any index alias that starts with `overture-` will use the mapping of the index template we initially provided. This is defined on [line two of our `quickstart_index_template`](https://github.com/overture-stack/composer/blob/develop/configurationFiles/elasticsearchConfigs/quickstart_index_template.json#L2). + ::: + +
+
+ +Continue to [Maestro](/deploy/deployment/maestro) once your search engine is running and indexed. diff --git a/website/docs/deploy-docs/03-deployment/07-maestro.md b/website/docs/deploy-docs/03-deployment/07-maestro.md new file mode 100644 index 00000000..f7700665 --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/07-maestro.md @@ -0,0 +1,126 @@ +--- +id: maestro +slug: /deployment/maestro +title: Maestro +sidebar_label: Maestro +--- + +# Maestro + +Maestro transforms metadata in Song into a search index that Arranger can expose through a search API and UI. + +If you have not yet deployed your search engine, return to [Search Engine](/deploy/deployment/search-engine) first. + +:::info Using OpenSearch +Maestro communicates with the search engine over the Elasticsearch 7.x REST API, which OpenSearch 2.x also serves, so the same `MAESTRO_ELASTICSEARCH_*` variables below drive an OpenSearch cluster. Point `MAESTRO_ELASTICSEARCH_CLUSTER_NODES` at your OpenSearch node (for example `http://opensearch:9200`), and if you disabled the OpenSearch security plugin as shown above, set `MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_ENABLED=false` since no credentials are required. +::: + +## Running Maestro + +1. **Create an env file:** Create a file named `.env.maestro` with the following content: + + ```bash + # ============================== + # Maestro Environment Variables + # ============================== + + # Maestro Variables + MAESTRO_FAILURELOG_ENABLED=true + MAESTRO_FAILURELOG_DIR=app/logs/maestro + MAESTRO_LOGGING_LEVEL_ROOT=INFO + MAESTRO_NOTIFICATIONS_SLACK_ENABLED=false + # Song Variables + MAESTRO_REPOSITORIES_0_CODE=song.overture + MAESTRO_REPOSITORIES_0_URL=http://song:8080 + MAESTRO_REPOSITORIES_0_NAME=Overture + MAESTRO_REPOSITORIES_0_ORGANIZATION=Overture + MAESTRO_REPOSITORIES_0_COUNTRY=CA + # Elasticsearch Variables + MAESTRO_ELASTICSEARCH_CLUSTER_NODES=http://elasticsearch:9200 + MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_USER=elastic + MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_PASSWORD=myelasticpassword + MAESTRO_ELASTICSEARCH_CLIENT_TRUSTSELFSIGNEDCERT=true + MAESTRO_ELASTICSEARCH_INDEXES_ANALYSISCENTRIC_ENABLED=false + MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_ENABLED=true + MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_NAME=overture-quickstart-index + MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_ALIAS=file_centric + MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_ENABLED=true + MANAGEMENT_HEALTH_ELASTICSEARCH_ENABLED=false + # Spring Variables + SPRING_MVC_ASYNC_REQUESTTIMEOUT=-1 + SPRINGDOC_SWAGGERUI_PATH=/swagger-api + # Kafka Variables + SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS=kafka:9092 + SPRING_CLOUD_STREAM_BINDINGS_SONGINPUT_DESTINATION=song-analysis + ``` + +
+ Click here for a detailed breakdown + + ### Maestro Variables + + - `MAESTRO_FAILURELOG_ENABLED` enables or disables failure logging. When set to `true`, Maestro logs any failures that occur, which is useful for debugging and monitoring purposes. + + - `MAESTRO_FAILURELOG_DIR` sets the directory path where failure logs are stored. + + - `MAESTRO_LOGGING_LEVEL_ROOT` sets the root logging level for Maestro. `INFO` is standard and `DEBUG` provides more detailed output. + + - `MAESTRO_NOTIFICATIONS_SLACK_ENABLED` enables or disables Slack notifications. + + #### Song Variables + + - `MAESTRO_REPOSITORIES_0_CODE` sets the code identifier for the repository. The value here is `song.overture`, serving as a unique identifier used within Maestro to reference the repository. + + - `MAESTRO_REPOSITORIES_0_URL` is the URL of the metadata repository. + + - `MAESTRO_REPOSITORIES_0_NAME` defines the display name for the repository. + + - `MAESTRO_REPOSITORIES_0_ORGANIZATION` defines the name of the organization that owns the repository. + + - `MAESTRO_REPOSITORIES_0_COUNTRY` defines the country code for the repository's location. + + #### Elasticsearch Variables + + - `MAESTRO_ELASTICSEARCH_INDEXES_ANALYSISCENTRIC_ENABLED` set to `false` specifies that analysis-centric indices are not expected. + + - `MAESTRO_ELASTICSEARCH_INDEXES_FILECENTRIC_ENABLED` set to `true` enables file-centric indices. + + - `MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_ENABLED` enables basic authentication for the Elasticsearch client. + + - `MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_USER` and `MAESTRO_ELASTICSEARCH_CLIENT_BASICAUTH_PASSWORD` provide credentials for Elasticsearch. + + - `MAESTRO_ELASTICSEARCH_CLUSTER_NODES` points to the address of the Elasticsearch cluster node(s). + + - `MANAGEMENT_HEALTH_ELASTICSEARCH_ENABLED` controls whether Elasticsearch health checks are performed. + + #### Spring Variables + + - `SPRING_MVC_ASYNC_REQUESTTIMEOUT` is `-1` (no timeout). + + - `SPRINGDOC_SWAGGERUI_PATH` specifies the URL path for the Swagger UI. + + #### Kafka Variables + + - `SPRING_CLOUD_STREAM_KAFKA_BINDER_BROKERS` defines the address of the Kafka broker(s). + + - `SPRING_CLOUD_STREAM_BINDINGS_SONGINPUT_DESTINATION` is the destination topic for the Song input binding. + +
+ +2. **Run Maestro:** Use the docker run command with your `.env.maestro` file: + + ```bash + docker run --env-file .env.maestro \ + --name maestro \ + --platform linux/amd64 \ + -p 11235:11235 \ + ghcr.io/overture-stack/maestro:4.3.0 + ``` + + :::info + Maestro will now be available and can index metadata from Song into your search engine. + ::: + +:::tip +After Maestro is running, continue with [Arranger](/deploy/deployment/arranger) to expose search APIs and UI components. +::: diff --git a/website/docs/deploy-docs/03-deployment/08-arranger.md b/website/docs/deploy-docs/03-deployment/08-arranger.md new file mode 100644 index 00000000..0ce51da6 --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/08-arranger.md @@ -0,0 +1,88 @@ +--- +id: arranger +slug: /deployment/arranger +title: Arranger +sidebar_label: Arranger +--- + +# Arranger + +Arranger generates the search API and UI components on top of your search engine and Maestro-indexed metadata. + +If you have not yet deployed Maestro, return to [Maestro](/deploy/deployment/maestro). + +:::info Using OpenSearch +Set `SEARCH_ENGINE=opensearch` and point `ES_HOST` at your OpenSearch node (for example `http://opensearch:9200`). The `ES_HOST`, `ES_USER`, and `ES_PASS` variables apply to both engines; the credentials are ignored when the OpenSearch security plugin is disabled. Leaving `SEARCH_ENGINE` unset makes Arranger auto-detect the engine from the cluster. +::: + +## Running Arranger + +1. **Create an env file:** Create a file named `.env.arranger` with the following content: + + ```bash + # ============================== + # Arranger Environment Variables + # ============================== + + # Arranger Variables + ENABLE_LOGS=false + # Directory holding the per-catalogue config files (mounted below) + CONFIGS_PATH=/configs + # Elasticsearch / OpenSearch Variables + ES_HOST=http://elasticsearch:9200 + ES_USER=elastic + ES_PASS=myelasticpassword + SEARCH_ENGINE=elasticsearch + ``` + +2. **Create a folder titled `arrangerConfigs` and place the following configuration files within it:** + + - The **[base.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/base.json)**, containing the base configuration for the Arranger server + - The **[extended.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/extended.json)**, containing all possible fields inputted into arranger + - The **[facets.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/facets.json)**, defines the facets found within the facet panel of the data exploration page in Stage + - The **[table.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/arrangerConfigs/table.json)**, defines the formatting of the tables found on the data exploration page in Stage + +3. **Run Arranger:** Use the docker run command with your `.env.arranger` file: + + ```bash + docker run --env-file .env.arranger \ + --name arranger-server \ + -p 5050:5050 \ + -v ./arrangerConfigs:/configs \ + ghcr.io/overture-stack/arranger-search-server:3.1.0-rc.2 + ``` + + Make sure to confirm the `./arrangerConfigs/` path aligns with the actual paths to your Arranger-Server configuration files, update your command or folder structure accordingly. + +
+ Click here for a detailed breakdown + + ### When creating the .env.arranger file: + + - `ES_HOST` is the URL of your Elasticsearch instance. + + - `ES_USER` and `ES_PASS` are the credentials for accessing Elasticsearch. + + - `SEARCH_ENGINE` selects the search backend, either `elasticsearch` or `opensearch`. + + - `CONFIGS_PATH` is the directory inside the container that holds the per-catalogue config files (matched by the volume mount below). + + ### When running Arranger: + + - `-p 5050:5050` maps port 5050 of the host to port 5050 of the container. + + - `-v ./arrangerConfigs:/configs` mounts the config directory into the container (matched by `CONFIGS_PATH`). + - `base.json` contains the base configuration for the Arranger server + - `extended.json` contains all possible fields inputted into arranger + - `facets.json` defines the facets found within the facet panel of the data exploration page in Stage + - `table.json` defines the formatting of the tables found on the data exploration page in Stage + +
+ + :::info Configuring Arranger + If you want to learn more about configuring Arranger see our administration guide on [customizing the search portal](/use/administration/customizing-the-data-portal). + ::: + +:::tip +After Arranger is running, continue with [Stage](/deploy/deployment/stage) to deploy the portal UI. +::: diff --git a/website/docs/deploy-docs/03-deployment/09-stage.md b/website/docs/deploy-docs/03-deployment/09-stage.md new file mode 100644 index 00000000..83cc9302 --- /dev/null +++ b/website/docs/deploy-docs/03-deployment/09-stage.md @@ -0,0 +1,98 @@ +--- +id: stage +slug: /deployment/stage +title: Stage +sidebar_label: Stage +--- + +# Stage + +Stage is the React-based portal UI that researchers use to query and explore Overture data. + +If you have not yet deployed Arranger, return to [Arranger](/deploy/deployment/arranger). + +## Setting up Stage + +1. **Create an env file:** Create a file named `.env.stage` with the following content: + + ```bash + # ============================== + # Stage Environment Variables + # ============================== + + # Stage Variables + NEXTAUTH_URL=http://localhost:3000/api/auth + NEXT_PUBLIC_LAB_NAME=Overture QuickStart Portal + NEXT_PUBLIC_ADMIN_EMAIL=contact@overture.bio + NEXT_PUBLIC_DEBUG=true + # Keycloak Variables + NEXT_PUBLIC_AUTH_PROVIDER=keycloak + ACCESSTOKEN_ENCRYPTION_SECRET=super_secret + SESSION_ENCRYPTION_SECRET=this_is_a_super_secret_secret + NEXT_PUBLIC_KEYCLOAK_HOST=http://keycloak:8080 + NEXT_PUBLIC_KEYCLOAK_REALM=myrealm + NEXT_PUBLIC_KEYCLOAK_CLIENT_ID=webclient + KEYCLOAK_CLIENT_SECRET=ikksyrYaKX07acf4hpGrpKWcUGaFkEdM + NEXT_PUBLIC_KEYCLOAK_PERMISSION_AUDIENCE=dms + # Arranger Variables + NEXT_PUBLIC_ARRANGER_DOCUMENT_TYPE=file + NEXT_PUBLIC_ARRANGER_INDEX=file_centric + NEXT_PUBLIC_ARRANGER_API_URL=http://arranger-server:5050 + NEXT_PUBLIC_ARRANGER_MANIFEST_COLUMNS=repositories.code, object_id, analysis.analysis_id, study_id, file_type, file.name, file.size, file.md5sum, file.index_file.object_id, donors.donor_id, donors.specimens.samples.sample_id + ``` + +
+ Click here for a detailed breakdown + + #### Stage Variables + + - `NEXTAUTH_URL` specifies the base URL for NextAuth.js, which handles authentication in the portal. + + - `NEXT_PUBLIC_LAB_NAME` is the name displayed in the top left of the portal interface. + + - `NEXT_PUBLIC_ADMIN_EMAIL` is the administrator or support contact email. + + - `NEXT_PUBLIC_DEBUG` enables debug mode. + + #### Keycloak Variables + + - `NEXT_PUBLIC_AUTH_PROVIDER` specifies the authentication provider, in this case Keycloak. + + - `ACCESSTOKEN_ENCRYPTION_SECRET` defines the secret used to encrypt access tokens. + + - `SESSION_ENCRYPTION_SECRET` specifies the secret used to encrypt session cookies. + + - `NEXT_PUBLIC_KEYCLOAK_HOST` specifies the Keycloak server URL. + + - `NEXT_PUBLIC_KEYCLOAK_REALM` defines the Keycloak realm used for authentication. + + - `NEXT_PUBLIC_KEYCLOAK_CLIENT_ID` and `KEYCLOAK_CLIENT_SECRET` are the Keycloak client credentials. + + - `NEXT_PUBLIC_KEYCLOAK_PERMISSION_AUDIENCE` specifies the audience for permission claims. + + #### Arranger Variables + + - `NEXT_PUBLIC_ARRANGER_DOCUMENT_TYPE` defines the document type for Arranger (file-centric or analysis-centric). + + - `NEXT_PUBLIC_ARRANGER_INDEX` defines the Arranger index used by the portal. + + - `NEXT_PUBLIC_ARRANGER_API_URL` is the URL of the Arranger GraphQL API. + + - `NEXT_PUBLIC_ARRANGER_MANIFEST_COLUMNS` lists the columns included in the manifest generated for downloads. + +
+ +2. **Run Stage:** Use the docker run command with your `.env.stage` file: + + ```bash + docker run --env-file .env.stage \ + --name stage \ + -p 3000:3000 \ + ghcr.io/overture-stack/stage:3ede4e2 + ``` + + The front-end portal will now be available in your browser at `localhost:3000`. + +:::info +Stage depends on Arranger, so confirm Arranger is accessible before attempting to use the portal. +::: diff --git a/website/guides/01-deployment-guide/01-deployment-guide.md b/website/docs/deploy-docs/03-deployment/index.md similarity index 92% rename from website/guides/01-deployment-guide/01-deployment-guide.md rename to website/docs/deploy-docs/03-deployment/index.md index 06f60ccd..ab89db62 100644 --- a/website/guides/01-deployment-guide/01-deployment-guide.md +++ b/website/docs/deploy-docs/03-deployment/index.md @@ -1,3 +1,7 @@ +--- +unlisted: true +--- + # Deployment Guide ## Introduction @@ -32,7 +36,7 @@ This guide provides a step-by-step deployment of an Overture platform, including | ----------------- | -------------------------------------------------------------------------------------------------- | | **Song** | Our metadata management service with automated submission validation system. | | **Score** | Our file transfer microservice that supports fault-tolerant multi-part parallel transfer. | - | **Maestro** | Our indexing service for transforming metadata in Song into an Elasticsearch search index. | + | **Maestro** | Our indexing service for transforming metadata in Song into a search index (Elasticsearch or OpenSearch). | | **Arranger** | Our search API and UI component generation services. | | **Stage** | Our React-based user interface designed to allow easy deployment of data portals. | @@ -42,7 +46,7 @@ This guide provides a step-by-step deployment of an Overture platform, including | **Postgres** | A free and open-source relational database management system. | | **Minio** | A high-performance open-source object storage provider. | | **Kafka** | The messaging system used to enable asynchronous communication between Song and Maestro. | - | **Elasticsearch** | A search and analytics engine used to help query massive datasets flexibly and efficiently. | + | **Elasticsearch** or **OpenSearch** | A search and analytics engine used to query massive datasets flexibly and efficiently. Maestro and Arranger support either engine. | :::info Do you have a specific deployment scenario? Due to the variety of possible deployment scenarios (notably cloud servers and object storage providers) we are providing a generalized and reproducible deployment of an Overture platform running on your local machine. If you require further assistance with server deployments customized to your specific needs, our team can help. Feel free to reach out to us at contact@overture.bio for personalized consultation. diff --git a/website/docs/02-platform-tools/images/DevelopmentPhases.png b/website/docs/deploy-docs/images/DevelopmentPhases.png similarity index 100% rename from website/docs/02-platform-tools/images/DevelopmentPhases.png rename to website/docs/deploy-docs/images/DevelopmentPhases.png diff --git a/website/guides/images/apikeys.png b/website/docs/deploy-docs/images/apikeys.png similarity index 100% rename from website/guides/images/apikeys.png rename to website/docs/deploy-docs/images/apikeys.png diff --git a/website/guides/images/platform.svg b/website/docs/deploy-docs/images/platform.svg similarity index 100% rename from website/guides/images/platform.svg rename to website/docs/deploy-docs/images/platform.svg diff --git a/website/docs/deploy-docs/index.md b/website/docs/deploy-docs/index.md new file mode 100644 index 00000000..20e09c32 --- /dev/null +++ b/website/docs/deploy-docs/index.md @@ -0,0 +1,21 @@ +--- +title: Deploy +slug: / +sidebar_label: Deploy Overture +sidebar_position: 0 +--- + +# Deploying Overture + +**For teams standing up and operating an Overture instance.** + +This guide walks through deploying the Overture stack yourself, step by step: authorization with Keycloak, file transfer with Song and Score, tabular data submission with Lectern and Lyric, then the search portal with Maestro, Arranger, and Stage, and optionally the MCP server for AI-assisted, conversational data discovery. + +If you'd rather try things out locally first, the [**Use docs**](/use) guides each ship with their own locally deployable demo environment. + +:::info We're expanding this section +We're actively working on updating and expanding these docs with guidance on Kubernetes and Helm chart deployments and deployment best practices. + +In the meantime, if you have questions about deployment, reach out through +our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/01-core-software/00-Lectern b/website/docs/develop-docs/01-Lectern similarity index 100% rename from website/docs/01-core-software/00-Lectern rename to website/docs/develop-docs/01-Lectern diff --git a/website/docs/develop-docs/02-Lyric b/website/docs/develop-docs/02-Lyric new file mode 120000 index 00000000..023ba46c --- /dev/null +++ b/website/docs/develop-docs/02-Lyric @@ -0,0 +1 @@ +../../../submodules/lyric/docs/ \ No newline at end of file diff --git a/website/docs/01-core-software/01-Song b/website/docs/develop-docs/03-Song similarity index 100% rename from website/docs/01-core-software/01-Song rename to website/docs/develop-docs/03-Song diff --git a/website/docs/01-core-software/02-Score b/website/docs/develop-docs/04-Score similarity index 100% rename from website/docs/01-core-software/02-Score rename to website/docs/develop-docs/04-Score diff --git a/website/docs/01-core-software/03-Maestro b/website/docs/develop-docs/05-Maestro similarity index 100% rename from website/docs/01-core-software/03-Maestro rename to website/docs/develop-docs/05-Maestro diff --git a/website/docs/01-core-software/04-Arranger b/website/docs/develop-docs/06-Arranger similarity index 100% rename from website/docs/01-core-software/04-Arranger rename to website/docs/develop-docs/06-Arranger diff --git a/website/docs/01-core-software/05-Stage b/website/docs/develop-docs/07-Stage similarity index 100% rename from website/docs/01-core-software/05-Stage rename to website/docs/develop-docs/07-Stage diff --git a/website/docs/develop-docs/08-api-reference/01-song.mdx b/website/docs/develop-docs/08-api-reference/01-song.mdx new file mode 100644 index 00000000..b4ad1f76 --- /dev/null +++ b/website/docs/develop-docs/08-api-reference/01-song.mdx @@ -0,0 +1,18 @@ +import SwaggerAPIDoc from '/src/components/SwaggerAPIDoc'; + +# Song API + +The Song API allows you to manage and query file metadata in your system. + +## Key Features + +- Manage study, analysis, and file-centric entity metadata +- Validate and submit analysis metadata with schema versioning and publication controls (published/unpublished/suppressed) +- Manage schemas used for validations +- Check the health of the Song-server + + + +:::info Need Help? +If you encounter any issues or have questions about our API, please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/develop-docs/08-api-reference/02-score.mdx b/website/docs/develop-docs/08-api-reference/02-score.mdx new file mode 100644 index 00000000..d3368c5f --- /dev/null +++ b/website/docs/develop-docs/08-api-reference/02-score.mdx @@ -0,0 +1,17 @@ +import SwaggerAPIDoc from '/src/components/SwaggerAPIDoc'; + +# Score API + +The Score API provides endpoints that allow you to query the Score server and programmatically transfer files to and from object storage. + +## Key Features + +- Manage file uploads and downloads with multipart support and recovery mechanisms +- Track and verify file integrity using MD5 checksums and progress monitoring +- Control object storage with flexible listing, partial content handling, and secure access controls + + + +:::info Need Help? +If you encounter any issues or have questions about our API, please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/develop-docs/08-api-reference/03-maestro.mdx b/website/docs/develop-docs/08-api-reference/03-maestro.mdx new file mode 100644 index 00000000..6708a472 --- /dev/null +++ b/website/docs/develop-docs/08-api-reference/03-maestro.mdx @@ -0,0 +1,16 @@ +import SwaggerAPIDoc from '/src/components/SwaggerAPIDoc'; + +# Maestro API + +The Maestro API provides you with endpoints for data indexing. + +## Key Features + +- Index an entire repository, a specific organization within it, or a single record by ID +- Trigger indexing at the granularity you need, from full-repository re-indexing down to one record + + + +:::info Need Help? +If you encounter any issues or have questions about our API, please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/develop-docs/08-api-reference/04-lyric.mdx b/website/docs/develop-docs/08-api-reference/04-lyric.mdx new file mode 100644 index 00000000..e5ed2067 --- /dev/null +++ b/website/docs/develop-docs/08-api-reference/04-lyric.mdx @@ -0,0 +1,19 @@ +import SwaggerAPIDoc from '/src/components/SwaggerAPIDoc'; + +# Lyric API + +The Lyric API allows you to submit, validate, query, and manage tabular data against Lectern dictionary schemas. + +## Key Features + +- Validate and submit tabular data files against Lectern dictionary schemas, with a staged submission workflow +- Manage committed data with full CRUD operations +- Query committed data, including SQON-based search +- Track a complete audit history of data changes +- Manage dictionary categories and register Lectern dictionaries for use + + + +:::info Need Help? +If you encounter any issues or have questions about our API, please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/develop-docs/08-api-reference/05-lectern.mdx b/website/docs/develop-docs/08-api-reference/05-lectern.mdx new file mode 100644 index 00000000..c50d777e --- /dev/null +++ b/website/docs/develop-docs/08-api-reference/05-lectern.mdx @@ -0,0 +1,18 @@ +import SwaggerAPIDoc from '/src/components/SwaggerAPIDoc'; + +# Lectern API + +The Lectern API allows you to manage and query data dictionary schemas. + +## Key Features + +- List, create, and retrieve data dictionaries, and add or update the schemas within them +- Look up an individual schema or field definition within a dictionary +- Compute the difference between two dictionary versions +- Download a dictionary schema template + + + +:::info Need Help? +If you encounter any issues or have questions about our API, please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/develop-docs/08-api-reference/06-arranger.mdx b/website/docs/develop-docs/08-api-reference/06-arranger.mdx new file mode 100644 index 00000000..220eb910 --- /dev/null +++ b/website/docs/develop-docs/08-api-reference/06-arranger.mdx @@ -0,0 +1,14 @@ +# Arranger API + +Arranger is Overture's search API. Unlike the services above it is a **GraphQL** API rather than REST/Swagger: a client sends a [SQON](/develop/Arranger/reference/building-sqon-queries) filter with field selections to a single `/graphql` endpoint, and Arranger translates it into an Elasticsearch query. It also exposes read-only **introspection** REST endpoints for discovering a server's catalogues and fields. + +Arranger's API is documented in the Arranger component reference: + +- [**Query processing**](/develop/Arranger/reference/query-processing): how a search request flows from SQON through GraphQL to Elasticsearch. +- [**Building SQON queries**](/develop/Arranger/reference/building-sqon-queries) and [**SQON in detail**](/develop/Arranger/reference/sqon-in-detail): the filter language. +- [**Introspection API**](/develop/Arranger/reference/introspection): read-only REST endpoints describing a server's catalogues, fields, types, and operators. +- [**Arranger MCP server**](/develop/Arranger/mcp-server): the MCP server that wraps this API for AI-agent access. + +:::info Need Help? +If you encounter any issues or have questions about our API, please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/develop-docs/08-api-reference/index.mdx b/website/docs/develop-docs/08-api-reference/index.mdx new file mode 100644 index 00000000..1ccff3bc --- /dev/null +++ b/website/docs/develop-docs/08-api-reference/index.mdx @@ -0,0 +1,19 @@ +--- +sidebar_label: Overview +sidebar_position: 0 +--- + +# API Reference + +The Overture Platform has six APIs, each documented on its own page. Song, Score, Maestro, Lyric, and Lectern are RESTful and documented with Swagger; Arranger's is GraphQL, so it's documented separately. + +- **[Song](/develop/api-reference/song):** file metadata stored in Song. +- **[Score](/develop/api-reference/score):** communicating with the Score Server. +- **[Maestro](/develop/api-reference/maestro):** managing Song data indexing operations. +- **[Lyric](/develop/api-reference/lyric):** tabular data submission, validation, and querying. +- **[Lectern](/develop/api-reference/lectern):** managing data dictionary schemas. +- **[Arranger](/develop/api-reference/arranger):** search, with a set of read-only introspection REST endpoints. + +:::info Need Help? +If you encounter any issues or have questions about our API, please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/contribution.md b/website/docs/develop-docs/09-contributing.md similarity index 73% rename from website/docs/contribution.md rename to website/docs/develop-docs/09-contributing.md index 403dfdff..e772d53d 100644 --- a/website/docs/contribution.md +++ b/website/docs/develop-docs/09-contributing.md @@ -4,7 +4,7 @@ sidebar_label: Contribution # Contributing to Overture -We appreciate your interest in contributing to the Overture project. We are the Genome Informatics Software Engineering team from Ontario Institute for Cancer Research. At OICR we develop new software, databases and other necessary components to store, organize and compute over the large and complex datasets being generated by our cancer research programs. Embodying OICR's values of collaboration and community, we are firm believers in open-source and open-science. As such we strongly believe in the collective power of expertise and shared resources. +We appreciate your interest in contributing to the Overture project. We're the Genome Informatics Software Engineering team at the Ontario Institute for Cancer Research (OICR), where we build software, databases, and other tools to store, organize, and compute over the large, complex datasets generated by our cancer research programs. In line with OICR's values of collaboration and community, we're committed to open-source and open-science, believing strongly in the collective power of shared expertise and resources. ## Code of Conduct @@ -14,19 +14,18 @@ By participating in this project, you are expected to abide by our [Code of Cond **Getting Started:** Our primary platform for community support, feature requests, and general discussions is GitHub Discussions. This allows us to keep all conversations in one place and make them easily searchable for future reference. - **Community Support:** Our primary platform for community support, feature requests, and general discussions is [GitHub Discussions](https://github.com/overture-stack/docs/discussions). This allows us to keep all conversations in one place and make them easily searchable for future reference. - **Getting Help:** If you need assistance with Overture, please create a [new discussion in our support category](https://github.com/overture-stack/docs/discussions/categories/support). - Before creating a new discussion, please search existing discussions to see if your question has already been answered. - **Feature Requests & Proposals:** We love hearing your ideas for improving Overture! Before making a feature request, please check our [**feature roadmap**](https://github.com/orgs/overture-stack/projects/11/views/1) to see if your idea is already planned. - - If your idea isn't on the roadmap, feel free to [**submit a feature request**](https://github.com/overture-stack/docs/discussions/categories/ideas) by creating a new discussion in our Ideas category + - If your idea isn't on the roadmap, feel free to [**submit a feature request**](https://github.com/overture-stack/docs/discussions/categories/ideas) by creating a new discussion in our Ideas category - **Report a Potential Bug:** We use GitHub Issues primarily for tracking confirmed bugs and ticketing development tasks. If you come across a potential bug or issue, please first post it to our [**GitHub support discussion forum**](https://github.com/overture-stack/docs/discussions/categories/support). - This allows us to confirm the issue and gather more information if needed. If we determine that further development is required, we will create and tag you into a GitHub Issue from your discussion post. ## Our Development Process -We use GitHub issues and pull requests for communication related to code changes. +We use GitHub issues and pull requests for communication related to code changes. ### Branch Organization @@ -55,50 +54,14 @@ We welcome and encourage pull requests from the community. To submit a pull requ ### Best Practices 1. **Keep PRs as small as possible:** Focus on one feature or bug fix per pull request. Break large changes into smaller, more manageable pieces making it easier for reviewers to understand and approve your changes. - 2. **Use descriptive titles:** Start with a verb (e.g., "Add", "Fix", "Update", "Refactor"), briefly summarize the main purpose of the PR and include the issue number if applicable (e.g., "Fix user authentication bug (#123)"). - 3. **Describe how you tested it:** Explain the testing process you followed and mention any new automated tests you've added. - 4. **Provide a clear description:** Explain the purpose of your changes and list the main modifications you've made. Mention any potential side effects or areas that might need extra attention. - 5. **Link related issues:** Reference any related issues or pull requests. Use GitHub keywords to automatically link issues (e.g., "Closes #123", "Fixes #456"). 6. **Keep the PR's branch up-to-date:** Regularly rebase your branch on the latest main branch and resolve any merge conflicts promptly. - 7. **Respond to feedback:** Be open to suggestions and willing to make changes. Address all comments from reviewers. If you disagree with a suggestion, explain your reasoning politely. - 8. **Include documentation updates:** If your changes affect user-facing features, update or create and issue detailing the relevant changes need to the documentation. Where appropriate include inline comments for complex code sections. - -10. **Be patient:** Reviewers will likely be unable to respond immediately. However, feel free to follow up politely if you haven't received feedback after a reasonable time. - -### Using Draft Pull Requests - -Draft Pull Requests are an excellent way to document work in progress and facilitate early feedback. Use them to: - -- Organize your thoughts and process -- Share early work and ideas with the team -- Get feedback on implementation approaches before finalizing code -- Track progress on long-running features - -Guidelines for Draft Pull Requests: - -1. **Creation**: - - Open a pull request and select "Create draft pull request" - - Clearly mark the title with [WIP] or [DRAFT] prefix -2. **Description**: - - Outline the current state of the work - - List planned tasks or improvements - - Highlight areas where feedback is specifically needed -3. **Updates**: - - Regularly update the description or provide comments following commits with progress notes -- Use task lists (using `- [ ]` in Markdown) to track completion of sub-tasks -4. **Collaboration**: - - Encourage early feedback and discussion - - Use the pull request comments for design discussions -5. **Finalization**: - - Complete all planned work and address feedback - - Update tests and documentation - - Click "Ready for review" to move out of draft state +9. **Be patient:** Reviewers will likely be unable to respond immediately. However, feel free to follow up politely if you haven't received feedback after a reasonable time. ### Merging a Pull Request @@ -106,5 +69,3 @@ Guidelines for Draft Pull Requests: - Obtain the required number of approvals - Use the project's specified merge strategy (Typically squash and merge) - Delete the source branch after merging if no longer needed - - diff --git a/website/docs/02-platform-tools/images/arrangerDev.svg b/website/docs/develop-docs/images/arrangerDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/arrangerDev.svg rename to website/docs/develop-docs/images/arrangerDev.svg diff --git a/website/docs/02-platform-tools/images/maestroDev.svg b/website/docs/develop-docs/images/maestroDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/maestroDev.svg rename to website/docs/develop-docs/images/maestroDev.svg diff --git a/website/docs/02-platform-tools/images/platform.svg b/website/docs/develop-docs/images/platform.svg similarity index 100% rename from website/docs/02-platform-tools/images/platform.svg rename to website/docs/develop-docs/images/platform.svg diff --git a/website/docs/02-platform-tools/images/scoreDev.svg b/website/docs/develop-docs/images/scoreDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/scoreDev.svg rename to website/docs/develop-docs/images/scoreDev.svg diff --git a/website/docs/02-platform-tools/images/songDev.svg b/website/docs/develop-docs/images/songDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/songDev.svg rename to website/docs/develop-docs/images/songDev.svg diff --git a/website/docs/02-platform-tools/images/stageDev.svg b/website/docs/develop-docs/images/stageDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/stageDev.svg rename to website/docs/develop-docs/images/stageDev.svg diff --git a/website/docs/develop-docs/index.md b/website/docs/develop-docs/index.md new file mode 100644 index 00000000..bc1034cc --- /dev/null +++ b/website/docs/develop-docs/index.md @@ -0,0 +1,22 @@ +--- +title: Build +slug: / +sidebar_label: Develop Overture +sidebar_position: 0 +--- + +# Building on Overture + +**For developers working with or extending Overture components.** + +These developer docs cover Overture component by component, alongside our [API reference](/develop/api-reference) and [standards for contributing](/develop/contributing). + +| Component | Description | +| --- | --- | +| **[Lectern](/develop/Lectern/overview)** | Manages data dictionaries, the schemas that define your data's structure, constraints, and relationships | +| **[Lyric](/develop/Lyric/overview)** | A model-agnostic service for submitting, validating, and managing tabular data against Lectern dictionaries | +| **[Song](/develop/Song/overview)** | A file catalog service that tracks files and manages their metadata | +| **[Score](/develop/Score/overview)** | A file transfer service for secure, large-file upload and download to and from object storage | +| **[Maestro](/develop/Maestro/overview)** | Indexes metadata from Song into Elasticsearch for search and exploration | +| **[Arranger](/develop/Arranger/overview)** | A model-agnostic search API and UI component library for building data portals | +| **[Stage](/develop/Stage/overview)** | A React-based UI framework for building the front-end of data portals | diff --git a/website/docs/use-docs/02-cli-downloads.md b/website/docs/use-docs/02-cli-downloads.md new file mode 100644 index 00000000..3f7f2a38 --- /dev/null +++ b/website/docs/use-docs/02-cli-downloads.md @@ -0,0 +1,173 @@ +# File Download + +**This guide is for** anyone seeking guidance on how to download data from an Overture platform. + +**You will need** Docker installed. We recommend using Docker Desktop; for more information, visit [Docker's website](https://www.docker.com/products/docker-desktop/). + +#### Visual Summary: + +![Retrieval Overview](./images/dataRetrieval.webp "End Goal") + +## Prerequisites + +Install and verify the following before you start. + +
+1. WSL2 Setup (windows only) + +Docker Desktop on Windows runs on WSL2, so configure it before installing Docker Desktop below: + +1. Install [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) +2. Use Ubuntu or another Linux distribution within WSL2 +3. Enable Docker Desktop's WSL2 integration (Docker Desktop → Settings → Resources → WSL Integration) +4. Run all commands from a **Bash terminal inside WSL2**, not PowerShell or Command Prompt. To open one, search for your Linux distribution (e.g. "Ubuntu") in the Start menu. + +
+ +
+2. Git installed + +Download from [git-scm.com](https://git-scm.com/downloads) if the command is not recognised. + +
+ +
+3. Docker Desktop (`28.0.0` or later) + +- **macOS / Windows:** Download from [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop/) +- **Linux:** Follow the [Docker Engine install guide](https://docs.docker.com/engine/install/) + +Once installed, open Docker Desktop → Settings → Resources and set: + +- **CPUs:** 4+ cores (8 recommended) +- **Memory:** 8 GB minimum +- **Disk:** 10 GB+ available + +Please ensure `docker --version` and `docker compose version` both return version numbers, and Docker Desktop is **running** with **4+ CPUs** and **8 GB+ memory** allocated + +
+ +## Getting Started + +This guide uses a dedicated demo environment: the `docs-demo/file-transfer` branch of the Overture Prelude repository. It is a self-contained Overture portal (Song, Score, Maestro, MinIO, Arranger, and Stage). + +**1. Clone the demo branch** + +```bash +git clone -b docs-demo/file-transfer https://github.com/overture-stack/prelude.git +cd prelude +``` + +**2. Start the platform with sample data** + +```bash +make demo +``` + +:::caution +**Ensure enough resources are allocated to Docker.** We recommend a minimum CPU limit of `8`, memory limit of `8 GB`, swap of `2 GB`, and virtual disk limit of `64 GB`. You can access these settings by selecting the **cog wheel** at the top right of the Docker Desktop app and selecting **Resources** from the left panel. **Ensure you are on Docker Desktop version 4.39.0 or higher.** +::: + +`make demo` starts the stack and loads the sample dataset (3 donors, 12 files). Once indexing completes, the portal at `localhost:3000` shows 12 records ready to download. If you already started the platform with `make platform`, run `make submit` to load the sample data. + +## Data Download with the Score Client + +### Generate a Manifest + +1. **Build your query:** Open the portal's file repository at `localhost:3000/fileTable` and use the search facets and data table to narrow your selection. The file count updates in real time. + +![Build Query](./images/buildQueries.png "Build Query") + +2. **Download your manifest:** With your data of interest selected, click the **Download** dropdown and select **File Manifest**. + +:::info +**Why a manifest?** + +The file manifest is a tab-separated (TSV) list of the files matching your query. Score uses it to locate and download your data efficiently. We use manifests with a dedicated file-transfer service because large genomic datasets require reliable multi-part download sessions, which are not suitable for browser-based transfers. +::: + +### Run the Score Client + +Authentication is disabled in this demo, so a fixed placeholder access token is used. The client runs as a Docker container joined to the platform's internal network (`overture-demo_platform-network`) so it can reach Song and Score by hostname. + +```bash +docker run -d -it --name score-client \ + -e ACCESSTOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528 \ + -e STORAGE_URL=http://score:8087 \ + -e METADATA_URL=http://song:8080 \ + --network overture-demo_platform-network \ + --platform linux/amd64 \ + --mount type=bind,source="$(pwd)/data",target=/data \ + ghcr.io/overture-stack/score-client:ee758b91 +``` + +
+ + Click here for a detailed breakdown + +- `-d` runs the container in detached mode, so it runs in the background + +- `-it` combines `-i` (interactive) and `-t` (allocate a pseudo-TTY), allowing you to interact with the container + +- `-e ACCESSTOKEN=...` supplies the access token. Auth is disabled in this demo, so the value is accepted without being checked + +- `-e STORAGE_URL=http://score:8087` is the Score server the client interacts with, reachable by hostname on the platform network + +- `-e METADATA_URL=http://song:8080` is the Song server the client interacts with + +- `--network overture-demo_platform-network` joins the container to the platform's internal network so `song` and `score` resolve + +- `--platform linux/amd64` selects the image architecture + +- `--mount type=bind,source="$(pwd)/data",target=/data` mounts the local `data/` directory into the container. Downloaded files and the manifest are shared through this directory + +
+ +### Download your Data + +Place the manifest downloaded from the portal into the `data/` directory of the cloned repository. For simplicity, rename it to `manifest.tsv`. Then run: + +```bash +docker exec score-client sh -c "score-client download --manifest /data/manifest.tsv --output-dir /data/downloads" +``` + +- `--manifest /data/manifest.tsv` points at the manifest you downloaded from the portal + +- `--output-dir /data/downloads` is where the files are written + +If successful, the Score client produces logs like the following, and your files are written to `./data/downloads/`: + +```bash +Downloading... +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +[1/2] Downloading object: 5b3bf92a-8f57-54b9-9ab9-6dcf34a0dc78 (DO001.snv.vcf.gz) +--------------------------------------------------------------------------------------------------------------------------------------------------------------- +100% [#########################] Parts: 1/1, Checksum: 100%, Write/sec: 177.7K/s, Read/sec: 177.7K/s +Finalizing... +Total execution time: 122.6 ms +Total bytes read : 17,346 +Total bytes written : 17,346 +Verifying checksum...Done. +``` + +### Clean up + +Remove the client container when finished: + +```bash +docker rm -f score-client +``` + +## Exporting Search Results (No Download) + +To export the filtered table as a spreadsheet without downloading files: + +1. Apply your filters in the portal +2. Click **Download**, then **File Table** + +This downloads a TSV with the rows for all matching records. No Score client or manifest is needed. + +:::tip +**Help us make our guides better** +If you can't find what you're looking for please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/use-docs/03-cli-submissions.md b/website/docs/use-docs/03-cli-submissions.md new file mode 100644 index 00000000..da2cb6b3 --- /dev/null +++ b/website/docs/use-docs/03-cli-submissions.md @@ -0,0 +1,297 @@ +# File Submission + +**This guide is for** anyone seeking guidance on submitting data to an Overture platform. By the end of this guide you will have completed a full data submission workflow: registering an analysis with Song and uploading its files with Score. + +**You will need** Docker installed. We recommend using Docker Desktop; for more information, visit [Docker's website](https://www.docker.com/products/docker-desktop/). + +**Background:** Submitting data to an Overture platform typically means data files (BAMs, CRAMs, VCFs, and similar) together with associated metadata that provides context, including donor information and descriptions of the data files. This guide focuses on submitting data to Song and Score using their command-line clients (CLIs). + +#### Visual Summary: + +![Submission Overview](./images/dataSubmission.webp "End Goal") + +## Prerequisites + +Install and verify the following before you start. + +
+1. WSL2 Setup (windows only) + +Docker Desktop on Windows runs on WSL2, so configure it before installing Docker Desktop below: + +1. Install [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) +2. Use Ubuntu or another Linux distribution within WSL2 +3. Enable Docker Desktop's WSL2 integration (Docker Desktop → Settings → Resources → WSL Integration) +4. Run all commands from a **Bash terminal inside WSL2**, not PowerShell or Command Prompt. To open one, search for your Linux distribution (e.g. "Ubuntu") in the Start menu. + +
+ +
+2. Git installed + +Download from [git-scm.com](https://git-scm.com/downloads) if the command is not recognised. + +
+ +
+3. Docker Desktop (`28.0.0` or later) + +- **macOS / Windows:** Download from [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop/) +- **Linux:** Follow the [Docker Engine install guide](https://docs.docker.com/engine/install/) + +Once installed, open Docker Desktop → Settings → Resources and set: + +- **CPUs:** 4+ cores (8 recommended) +- **Memory:** 8 GB minimum +- **Disk:** 10 GB+ available + +Please ensure `docker --version` and `docker compose version` both return version numbers, and Docker Desktop is **running** with **4+ CPUs** and **8 GB+ memory** allocated + +
+ +## Getting Started + +This guide uses a dedicated demo environment: the `docs-demo/file-transfer` branch of the Overture Prelude repository. It is a self-contained Overture portal (Song, Score, Maestro, MinIO, Arranger, and Stage) preconfigured with a `demo` study and a `genomicVariants` analysis schema. + +**1. Clone the demo branch** + +```bash +git clone -b docs-demo/file-transfer https://github.com/overture-stack/prelude.git +cd prelude +``` + +**2. Start the platform** + +```bash +make platform +``` + +:::caution +**Ensure enough resources are allocated to Docker.** We recommend a minimum CPU limit of `8`, memory limit of `8 GB`, swap of `2 GB`, and virtual disk limit of `64 GB`. You can access these settings by selecting the **cog wheel** at the top right of the Docker Desktop app and selecting **Resources** from the left panel. **Ensure you are on Docker Desktop version 4.39.0 or higher.** +::: + +`make platform` starts the stack empty so you can submit your own data. The setup step creates the `demo` study and registers the `genomicVariants` schema automatically. + +## What are we submitting? + +A **payload** is a JSON file describing an analysis: its clinical metadata and the list of files to upload. The demo ships three sample payloads in `data/payloads/` (`DO001.json`, `DO002.json`, `DO003.json`), each listing four small placeholder genomic files in `data/files/`. + +Below is the payload for donor `DO001`. Its `analysisType` is `genomicVariants`, the schema registered during setup. + +
+View the payload (DO001.json) + +```json +{ + "studyId": "demo", + "analysisType": { "name": "genomicVariants" }, + "samples": [ + { + "submitterSampleId": "DO001-SA01", + "matchedNormalSubmitterSampleId": null, + "sampleType": "Total DNA", + "specimen": { + "submitterSpecimenId": "DO001-SP01", + "tumourNormalDesignation": "Tumour", + "specimenType": "Primary tumour", + "specimenTissueSource": "Breast" + }, + "donor": { + "submitterDonorId": "DO001", + "gender": "Female" + } + } + ], + "files": [ + { + "fileName": "DO001.snv.vcf.gz", + "fileSize": 0, + "fileMd5sum": "00000000000000000000000000000000", + "fileType": "VCF", + "fileAccess": "open", + "dataType": "SNV" + }, + { + "fileName": "DO001.indel.vcf.gz", + "fileSize": 0, + "fileMd5sum": "00000000000000000000000000000000", + "fileType": "VCF", + "fileAccess": "open", + "dataType": "INDEL" + }, + { + "fileName": "DO001.cnv.txt.gz", + "fileSize": 0, + "fileMd5sum": "00000000000000000000000000000000", + "fileType": "TXT", + "fileAccess": "open", + "dataType": "CNV" + }, + { + "fileName": "DO001.sv.vcf.gz", + "fileSize": 0, + "fileMd5sum": "00000000000000000000000000000000", + "fileType": "VCF", + "fileAccess": "open", + "dataType": "SV" + } + ], + "experiment": { + "sex": "female", + "age_at_diagnosis": 55, + "vital_status": "alive", + "diagnosis_date": "2021-03-15", + "disease_stage": "Stage II", + "primary_diagnosis": "Breast Adenocarcinoma", + "treatment_type": "Surgery", + "treatment_response": "Complete Response" + } +} +``` + +
+ +:::info +`fileSize` and `fileMd5sum` are placeholders in the committed payloads. The Song and Score clients compute the real values from disk at submission time; the payload files themselves are never modified. +::: + +## Run the Song and Score clients + +The clients run as Docker containers joined to the platform's internal network (`overture-demo_platform-network`) so they can reach the services by hostname. Authentication is disabled in this demo, so a fixed placeholder access token is used throughout. + +**1. Start the Song client** + +```bash +docker run -d -it --name song-client \ + -e CLIENT_ACCESS_TOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528 \ + -e CLIENT_STUDY_ID=demo \ + -e CLIENT_SERVER_URL=http://song:8080 \ + --network overture-demo_platform-network \ + --platform linux/amd64 \ + --mount type=bind,source="$(pwd)/data/payloads",target=/payloads \ + --mount type=bind,source="$(pwd)/data",target=/data \ + ghcr.io/overture-stack/song-client:5131f6f8 +``` + +
+Click here for a detailed breakdown + +- `-d` runs the container in detached mode, so it runs in the background + +- `-it` combines `-i` (interactive) and `-t` (allocate a pseudo-TTY), allowing you to interact with the container + +- `-e CLIENT_ACCESS_TOKEN=...` supplies the access token. Auth is disabled in this demo, so the value is accepted without being checked + +- `-e CLIENT_STUDY_ID=demo` sets the study the analysis is registered under; the demo study is named `demo` + +- `-e CLIENT_SERVER_URL=http://song:8080` is the Song server the client talks to, reachable by hostname on the platform network + +- `--network overture-demo_platform-network` joins the container to the platform's internal network so `song` and `score` resolve + +- `--platform linux/amd64` selects the image architecture + +- `--mount ...data/payloads` and `--mount ...data` make the payload JSON files and the data directory (files plus the generated manifest) available inside the container + +
+ +**2. Start the Score client** + +```bash +docker run -d -it --name score-client \ + -e ACCESSTOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528 \ + -e STORAGE_URL=http://score:8087 \ + -e METADATA_URL=http://song:8080 \ + --network overture-demo_platform-network \ + --platform linux/amd64 \ + --mount type=bind,source="$(pwd)/data",target=/data \ + ghcr.io/overture-stack/score-client:ee758b91 +``` + +## Submit metadata to Song + +Submit the payload with the Song client `submit` command: + +```bash +docker exec song-client sh -c "sing submit -f /payloads/DO001.json" +``` + +Song validates the payload against the `genomicVariants` schema. On success it returns an `analysisId`: + +```json +{ + "analysisId": "4d9ed1c5-1053-4377-9ed1-c51053f3771f", + "status": "OK" +} +``` + +An analysis ID is a randomly generated UUID, so yours will differ. Note it down; the next steps reference it. + +:::info +**What is an analysis?** +Once Song accepts and stores the metadata under an analysis ID, it is a Song analysis. To complete it, you upload its associated file data. +::: + +:::tip +If Song rejects the payload with a `schema.violation` error, the metadata does not match the `genomicVariants` schema. You can inspect the registered schema from Song's Swagger UI at `localhost:8080/swagger-ui.html` under **Schema**, then **GET /schemas**. + +![Song Swagger](./images/song-swagger.png "Song Swagger") +::: + +## Generate a manifest + +With your analysis ID, generate a manifest for file upload. The manifest links the analysis ID to the data files on disk and validates that the files match those declared in the metadata. + +Replace `{AnalysisId}` with the ID returned above: + +```bash +docker exec song-client sh -c "sing manifest -a {AnalysisId} -f /data/manifest.txt -d /data/files" +``` + +Expected response: + +```bash +Wrote manifest file '/data/manifest.txt' for analysisId '4d9ed1c5-1053-4377-9ed1-c51053f3771f' +``` + +## Upload files with Score + +Use the Score client `upload` command to transfer the file data to object storage using the manifest: + +```bash +docker exec score-client sh -c "score-client upload --manifest /data/manifest.txt" +``` + +Score handles the multipart upload protocol (initiate, upload parts, verify, finalise) for each file. + +## Publish the analysis + +The final step sets the analysis state to `PUBLISHED`. Publishing signals Maestro to index the data, making it available in the portal. + +Replace `{AnalysisId}` with your analysis ID: + +```bash +docker exec song-client sh -c "sing publish -a {AnalysisId}" +``` + +Expected response: + +```bash +{"message":"AnalysisId 4d9ed1c5-1053-4377-9ed1-c51053f3771f successfully published"} +``` + +Maestro indexes the published analysis within a few seconds. Your uploaded data now appears in the portal at `localhost:3000`. + +![Success](./images/success.png "Success") + +## Clean up + +Remove the client containers when finished: + +```bash +docker rm -f song-client score-client +``` + +:::tip +**Help us make our guides better** +If you can't find what you're looking for please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/use-docs/administration/01-building-dictionaries.mdx b/website/docs/use-docs/administration/01-building-dictionaries.mdx new file mode 100644 index 00000000..bfaba91e --- /dev/null +++ b/website/docs/use-docs/administration/01-building-dictionaries.mdx @@ -0,0 +1,56 @@ +# Building Dictionaries + +Before any record is submitted to your platform, someone has to decide what fields exist, what types they hold, what values are permitted, and which are required. Lectern is Overture's data dictionary management service: it gives those decisions a persistent, versioned, machine-readable home, so the same dictionary that guides submitters also drives automated validation at ingestion time. + +:::info Looking for the complete specification? +This page is a hands-on introduction to building dictionaries. The full reference lives in the [Lectern dictionary reference](/develop/Lectern/dictionaryReference): every restriction type, schema-level `uniqueKey`/`foreignKey` relationships, reusable `references`, and versioning. +::: + +## Dictionary Structure + +A Lectern dictionary is a JSON document made up of a name, a version, and one or more **schemas**, each schema modeling a single data entity (for example, `donor` or `specimen`). Within a schema, each **field** specifies a name, a value type (`string`, `integer`, `number`, or `boolean`), and any restrictions on the values it will accept: + +```json +{ + "name": "my-dictionary", + "version": "1.0", + "schemas": [ + { + "name": "donor", + "description": "Core donor record", + "fields": [ + { + "name": "donor_id", + "valueType": "string", + "restrictions": { "required": true, "regex": "^DO-[0-9]{3,}$" } + }, + { + "name": "sex", + "valueType": "string", + "restrictions": { + "required": true, + "codeList": ["Female", "Male", "Other", "Unknown"] + } + } + ] + } + ] +} +``` + +Restrictions (`required`, `codeList`, `regex`, `range`, and [many more](/develop/Lectern/dictionaryReference#field-restrictions)) are where the curation work lives; they turn naming conventions and value ranges into enforced constraints, rejected at submission time rather than discovered after the fact. Schemas can also reference each other through shared identifier fields (a `specimen` schema referencing its donor's `donor_id`), expressing hierarchy without flattening everything into one table. + +## Where a Dictionary Fits + +Once published to a running Lectern server, a dictionary drives the rest of the pipeline: + +- **Lyric** validates incoming submissions against it; every restriction becomes an automated, field-level check +- **Maestro** uses the schema to inform how validated data is indexed into Elasticsearch, carrying typed fields, controlled vocabularies, and relationships through to the search layer + +## Try It: Dictionary Playground + +Build a dictionary hands-on in the [Lectern Dictionary Playground](/use/config-generators-and-playgrounds/lectern-dictionary-playground). Edit a Lectern schema and it renders as an interactive table, validated live as you type, then download or copy the JSON to take it with you. + +:::tip Prefer a guided walkthrough? +The workshop's [Extension Task](/use/workshop/extension-task) builds a dictionary step by step in that same playground: starting from a single required field, layering on restrictions, then adding a second related schema. +::: diff --git a/website/guides/02-administration-guides/01-updating-the-data-model.md b/website/docs/use-docs/administration/02-building-song-schemas.mdx similarity index 90% rename from website/guides/02-administration-guides/01-updating-the-data-model.md rename to website/docs/use-docs/administration/02-building-song-schemas.mdx index 9249a03b..c742e255 100644 --- a/website/guides/02-administration-guides/01-updating-the-data-model.md +++ b/website/docs/use-docs/administration/02-building-song-schemas.mdx @@ -1,4 +1,8 @@ -# Updating the Data Model +--- +title: Building Song Schemas +--- + +# Building Song Schemas ## Schema Validation and Submission @@ -9,7 +13,7 @@ Data administrators can configure custom data submission validations for Song by Song merges all admin-defined schemas with its pre-existing [base schema](https://github.com/overture-stack/SONG/blob/develop/song-server/src/main/resources/schemas/analysis/analysisBase.json). Therefore, when creating your schemas, it is important to reference the base schema to avoid specifying conflicting properties. :::info Song Base Schema -The Song base schema can be restrictive for data models outside of cancer research contexts, as it requires tumor and normal samples. We are aware of this limitation and are currently working on a new data-agnostic submission system. For more information, check out our [**software currently under development section**](/docs/under-development/) +As of Song 5.3.0, the base schema requires only `studyId`, `analysisType`, and `files` — donor, specimen, and sample entities are no longer required, making it far less restrictive for data models outside of cancer research contexts. For submitting tabular (clinical) data, check out [**Lyric, our tabular data submission service**](/develop/Lyric/overview) ::: ## Building Schemas @@ -49,6 +53,15 @@ There are many different type values available in JSON schema, here is a list of #### JSON Schema can also include various additional constraints: +- **Descriptions:** Any object or field can carry a `description`, which documents it for whoever submits data against the schema. Annotations like `description` and `title` are allowed anywhere inside `properties`, but not in the schema body itself: Song accepts only `type`, `definitions`, `properties`, and `required` there, and rejects the registration outright if it finds anything else. + + ```JSON + "field1": { + "type": "string", + "description": "Your own identifier for the donor. Song does not assign this." + } + ``` + - **Regex Patterns:** Fields can use regex patterns to enforce specific formatting rules ```JSON @@ -272,6 +285,8 @@ Let's break down some more complex schema examples. We will pull from a referenc - `const` is a validation keyword that specifies that a property's value must exactly match for the submission to be considered valid + - Define `causeOfDeath` and `survivalTime` in `properties` as well. Naming a property in `required` only forces the key to be present; a property the schema never defines carries no type, no `enum`, and no `pattern`, so any value passes. + - **Null Values:** Null values can provide flexibility by allowing a property to be explicitly null when no valid string value is applicable or known. The schema segment below shows the use of a `null` enum value for a `relapseType` property. @@ -320,6 +335,10 @@ The above key value pair is considered valid according to the schema. This allow If you want to learn more about JSON schema take a look at the following [JSON Schema guide](https://json-schema.org/understanding-json-schema). ::: +## Try It: Song Schema Playground + +You have seen the pieces; now assemble one in the [Song Schema Playground](/use/config-generators-and-playgrounds/song-schema-playground). Press **Generate from CSV** to turn example data into a starter schema, or write the JSON directly; it validates the Song envelope and the inner JSON Schema as you type. Use **Copy JSON** to carry your schema to the update step below. + ## Updating the Schema You can update Song schemas using the Song server's Swagger UI or using curl commands. diff --git a/website/guides/02-administration-guides/03-customizing-the-data-portal.md b/website/docs/use-docs/administration/03-customizing-the-data-portal.mdx similarity index 92% rename from website/guides/02-administration-guides/03-customizing-the-data-portal.md rename to website/docs/use-docs/administration/03-customizing-the-data-portal.mdx index 48a6d1ef..7db62343 100644 --- a/website/guides/02-administration-guides/03-customizing-the-data-portal.md +++ b/website/docs/use-docs/administration/03-customizing-the-data-portal.mdx @@ -55,7 +55,7 @@ The [base.json file](https://github.com/overture-stack/composer/blob/develop/con - `documentType` informs Arranger of the mapping type being used by Maestro, `analysis` or `file` centric :::info Learn More - For more information on index mappings and index centricity, see our [administration guide covering index mappings.](/guides/administration-guides/index-mappings) + For more information on index mappings and index centricity, see our [administration guide covering index mappings.](/use/administration/index-mappings) ::: ### Extended Configuration @@ -228,3 +228,9 @@ The [facets.json file](https://github.com/overture-stack/composer/blob/develop/c :::info Facets.json Syntax One caveat of the `facets.json` file is the notation used for fieldNames. Here we use double underscores `__` rather than `.` for nested elements, for example `analysis__collaborator__name` instead of `analysis.collaborator.name` ::: + +## Try It: Generate Your Arranger Configs + +Rather than assembling `base.json`, `extended.json`, `table.json`, and `facets.json` from scratch, generate a working set from your data with the [Config Generator](/use/config-generators-and-playgrounds/config-generator), then adjust from there. It produces all four Arranger configuration files (alongside the index mapping, Lectern dictionary, and Postgres table) from a CSV, entirely in your browser. + +The generated configs use flat, top-level fields (`data.`), so they are an ideal starting point for a new index. When your Elasticsearch documents nest fields more deeply, extend the generated `fieldName` values using the `.` (and `__` for facets) notation described above. diff --git a/website/guides/02-administration-guides/02-index-mappings.md b/website/docs/use-docs/administration/04-index-mappings.mdx similarity index 67% rename from website/guides/02-administration-guides/02-index-mappings.md rename to website/docs/use-docs/administration/04-index-mappings.mdx index 6750c9be..eb6e3cbc 100644 --- a/website/guides/02-administration-guides/02-index-mappings.md +++ b/website/docs/use-docs/administration/04-index-mappings.mdx @@ -1,6 +1,6 @@ # Index Mappings -An index mapping defines how documents and their fields are stored and indexed in Elasticsearch. Maestro is responsible for taking published Song metadata and translating it into Elasticsearch documents. With these documents Arranger uses the index mapping and generates our GraphQL server which enables fast and flexible queries. +An index mapping defines how documents and their fields are stored and indexed in your search engine, either Elasticsearch or OpenSearch. Maestro is responsible for taking published Song metadata and translating it into search engine documents. With these documents Arranger uses the index mapping and generates our GraphQL server which enables fast and flexible queries. Depending on how Maestro is configured it can index data into documents in one of two ways: @@ -8,18 +8,17 @@ Depending on how Maestro is configured it can index data into documents in one o - **Analysis Centric Indexing** Each document indexed in Elasticsearch describes all information central to a specific analysis. [Click here to see an example of an analysis centric JSON document](https://github.com/overture-stack/composer/blob/develop/guideMaterials/dataAdministration/ES-analysisCentric-document.json). - :::info File or Analysis Centric Indexing - If your queries focus on individual files and their attributes, choose file-centric indexing. If your queries center on analyses/participants and their associated data, choose analysis-centric indexing. - ::: + :::info File or Analysis Centric Indexing + If your queries focus on individual files and their attributes, choose file-centric indexing. If your queries center on analyses/participants and their associated data, choose analysis-centric indexing. + ::: -The index mapping can be defined within an index template supplied to Elasticsearch on startup. In the next section we will break down the structure of an index template. +The index mapping can be defined within an index template supplied to your search engine on startup. In the next section we will break down the structure of an index template. - :::warning We use Elasticsearch 7 +:::note Supported search engines - Our search platform is built on and compatible with version 7.x of Elasticsearch. Applications and queries need to follow Elasticsearch 7 syntax and conventions. - - ::: +Overture's search platform runs on either **Elasticsearch 7.x** or **OpenSearch 1.x or higher** (Elasticsearch minimum 7.0, licensed or default distribution only; ES OSS and ES 8.x are not supported). OpenSearch was forked from Elasticsearch 7.10 and maintains API compatibility with Elasticsearch 7.x, so everything on this page, the index template structure, analyzers, field types, and the shared quickstart template, applies to both engines unchanged. Queries and applications follow Elasticsearch 7 syntax and conventions, which OpenSearch serves as well. For engine-specific detail, see the OpenSearch documentation on [mappings](https://docs.opensearch.org/latest/mappings/) and [text analysis](https://docs.opensearch.org/latest/analyzers/). +::: # Breaking Down Index Templates @@ -28,12 +27,9 @@ When broken down the index template has four components, `index_patterns`, `alia ```json { "index_patterns": ["overture-*"], - "aliases": { - }, - "mappings": { - }, - "settings": { - } + "aliases": {}, + "mappings": {}, + "settings": {} } ``` @@ -49,19 +45,19 @@ The above code snippet references [the Overture Quickstart Index template](https ## Aliases -Here we can define an alias for indices that use this template. Aliases are a secondary and more generalized index name typically used to group related indices. +Here we can define an alias for indices that use this template. Aliases are a secondary and more generalized index name typically used to group related indices. - Here we define our alias as `file_centric` providing us some context on the method of indexing configured with Maestro: - ```json - "aliases": { - "file_centric": {} - }, - ``` + ```json + "aliases": { + "file_centric": {} + }, + ``` ## Settings -The settings section is for configuring index behavior. Each setting plays a role in defining how data is indexed, stored, and queried in Elasticsearch, optimizing performance and scalability based on specific use cases and requirements. +The settings section is for configuring index behavior. Each setting plays a role in defining how data is indexed, stored, and queried in Elasticsearch, optimizing performance and scalability based on specific use cases and requirements. Most of these will be automatically configured by Maestro. However, we will outline the additional settings used in our index template including `analyzers`, `filters`, and `tokenizers`, essential components in Elasticsearch that contribute to how text data is indexed, analyzed, and searched. @@ -100,11 +96,11 @@ Most of these will be automatically configured by Maestro. However, we will outl - **Filters** in Elasticsearch are specific processing steps, typically used for text transformations within an analyzer or independently applied during indexing or querying. Filters are used to improve search relevance and efficiency by modifying or discarding certain tokens. -- **Tokens and Tokenizers** are fundamental concepts in text processing and search indexing. Tokens are individual units of text generated during tokenization. Tokenizers are components responsible for breaking down text into tokens (tokenization). They define how text is segmented based on rules like whitespace, punctuation, or specific character patterns. +- **Tokens and Tokenizers** are fundamental concepts in text processing and search indexing. Tokens are individual units of text generated during tokenization. Tokenizers are components responsible for breaking down text into tokens (tokenization). They define how text is segmented based on rules like whitespace, punctuation, or specific character patterns. - :::info For more information - For more information on tokenizers, analyzers and filters refer to [Elasticsearch's documentation on the Anatomy of analyzers](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/analyzer-anatomy.html). - ::: + :::info For more information + For more information on tokenizers, analyzers and filters refer to [Elasticsearch's documentation on the Anatomy of analyzers](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/analyzer-anatomy.html). + ::: With this information, let's break down some of the settings found in our index template @@ -147,7 +143,7 @@ Here, `autocomplete_analyzed` is defined with a `Tokenizer` using the +1. WSL2 Setup (windows only) + +Docker Desktop on Windows runs on WSL2, so configure it before installing Docker Desktop below: + +1. Install [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) +2. Use Ubuntu or another Linux distribution within WSL2 +3. Enable Docker Desktop's WSL2 integration (Docker Desktop → Settings → Resources → WSL Integration) +4. Run all commands from a **Bash terminal inside WSL2**, not PowerShell or Command Prompt. To open one, search for your Linux distribution (e.g. "Ubuntu") in the Start menu. + + + +
+2. Git installed + +Download from [git-scm.com](https://git-scm.com/downloads) if the command is not recognised. + +
+ +
+3. Docker Desktop (`28.0.0` or later) + +- **macOS / Windows:** Download from [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop/) +- **Linux:** Follow the [Docker Engine install guide](https://docs.docker.com/engine/install/) + +Once installed, open Docker Desktop → Settings → Resources and set: + +- **CPUs:** 4+ cores (8 recommended) +- **Memory:** 8 GB minimum +- **Disk:** 10 GB+ available + +Please ensure `docker --version` and `docker compose version` both return version numbers, and Docker Desktop is **running** with **4+ CPUs** and **8 GB+ memory** allocated + +
+ +The local model runtime (LM Studio) is installed later, in [Connect a host application](/use/ai-assisted-data-discovery/connect-a-host). + +## Start the demo + +Clone the demo branch and start the stack: + +```bash +git clone -b docs-demo/ai-assisted-data-discovery --recurse-submodules https://github.com/overture-stack/prelude.git +cd prelude +make demo +``` + +`make demo` runs system checks, starts the stack via Docker Compose, and loads the sample catalogues. The first run also downloads and builds the container images, so it can take a while depending on your connection. When it completes: + +- the **portal** is at [http://localhost:3000](http://localhost:3000) (the stack does not open a browser for you), and +- the **MCP server** is at `http://localhost:3100/mcp`. + +To stop the stack, run `make down`; to wipe all data and start clean, run `make reset`. + +:::info Windows +Run `make demo` from a **Bash terminal inside WSL2**. The MCP demo branch drives the stack through the `Makefile`, so use WSL2 rather than native PowerShell. +::: + +## What's running + +`docker ps` should list the stack. All ports bind to `127.0.0.1` only: + +| Service | Port | Role | +| ----------------- | ------ | --------------------------------------- | +| Stage (portal UI) | `3000` | Portal frontend | +| Arranger | `5050` | GraphQL API and introspection endpoints | +| Arranger MCP | `3100` | MCP server, Streamable HTTP at `/mcp` | +| OpenSearch | `9200` | Search engine | +| PostgreSQL | `5435` | Persistent storage | + +## The demo data + +The data is a **representative sample** drawn from the Drug Discovery Portal, roughly 1,000 rows in each of four gene-statistics catalogues. The upstream portal spans about **405 million records** across roughly **20,000 genes** and **32 cancer types**, and its datasets are related by gene (HUGO symbol), so a cohort filtered in one catalogue can be refined against the others: + +| Catalogue | Contents | Sample coverage | +| ------------- | ------------------------------ | --------------- | +| `correlation` | Gene correlation data | DLBC only | +| `mutation` | Gene mutation data | BRCA only | +| `expression` | Gene expression profiles | 32 cancer types | +| `protein` | Protein interaction statistics | Sampled | +| `donor` | Donor records | Sampled | + +## Verify + +Confirm Arranger and the MCP server are up before connecting a host: + +```bash +# Arranger introspection lists the loaded catalogues +curl http://localhost:5050/introspection + +# The MCP container is running and listening on 3100 +docker ps | grep arranger-mcp +docker logs arranger-mcp # should show it connected to Arranger and listening +``` + +Once the stack is up we can move on to [connecting a host application](/use/ai-assisted-data-discovery/connect-a-host). diff --git a/website/docs/use-docs/ai-assisted-data-discovery/02-connect-a-host.md b/website/docs/use-docs/ai-assisted-data-discovery/02-connect-a-host.md new file mode 100644 index 00000000..e1dc6542 --- /dev/null +++ b/website/docs/use-docs/ai-assisted-data-discovery/02-connect-a-host.md @@ -0,0 +1,46 @@ +--- +id: connect-a-host +sidebar_label: Connect a host +--- + +# Connect a host application + +You interact with the data through your **MCP host application**; there is no separate chat UI to install. This section uses **LM Studio** as the worked example. Any MCP-compatible host (Claude Desktop, Ollama, OpenCode, OpenWebUI, and others) works the same way once pointed at the server; only the location of the MCP configuration differs, so consult that application's MCP documentation for where to put the [server entry](/use/ai-assisted-data-discovery/configuration-templates#mcp-server-entry). + +Before you start, make sure the [testing environment](/use/ai-assisted-data-discovery/testing-environment) is running. + +## Install LM Studio + +[Download and install LM Studio](https://lmstudio.ai/) for macOS, Windows, or Linux. LM Studio bundles a local model runtime with a chat UI, so the model runs on your machine and nothing leaves it. + +## Choose a local model + +The workflow requires a model that supports **tool calling**: the model calls the server's tools to discover the schema and run queries. In LM Studio, tool-capable models are marked with a tool-use badge. The target is open-weights models in roughly the **4B to 70B parameter range, Q4-quantized**, so the whole workflow runs locally on accessible hardware. + +1. Open the **Discover** tab (magnifying glass icon). +2. Search for a tool-capable model. Reasonable starting points: + + | Model | Notes | + | ----------------------------------- | -------------------------------------------------------- | + | `Qwen2.5-7B-Instruct` (Q4, ~4.7 GB) | Good balance of speed and reasoning; strong tool-calling | + | `Qwen2.5-3B-Instruct` (Q4, ~2 GB) | Smaller option for machines with limited RAM | + + :::important + These are **provisional starting points**, not a benchmarked recommendation. We are currently working on establishing a defensible, benchmarked model recommendation. + ::: + +3. Click **Download** and wait for it to complete. +4. Open the **Chat** tab and load the downloaded model; it should appear in the top status bar. + +## Configure the MCP connection + +The server is setup for **Streamable HTTP** MCP transport at `http://localhost:3100/mcp`. In LM Studio: + +1. Select the **Chat** tab from the left-hand menu. +2. In the right-hand panel, under **Integrations**, select **`+ Install`**. This opens your `mcp.json` file. +3. Add the [MCP server entry](/use/ai-assisted-data-discovery/configuration-templates#mcp-server-entry). +4. Click **Save** and confirm the server status shows **Connected**. + +If you set a custom `MCP_PORT` in the demo's `.env`, use that port in the URL instead of `3100`. + +With a host connected, work through the [demonstrated use cases](/use/ai-assisted-data-discovery/use-cases). diff --git a/website/docs/use-docs/ai-assisted-data-discovery/03-configuration-templates.md b/website/docs/use-docs/ai-assisted-data-discovery/03-configuration-templates.md new file mode 100644 index 00000000..0b8c7b68 --- /dev/null +++ b/website/docs/use-docs/ai-assisted-data-discovery/03-configuration-templates.md @@ -0,0 +1,68 @@ +--- +id: configuration-templates +sidebar_label: Configuration templates +--- + +# Configuration templates + +These templates are intended to be **extended after pilot testing**, not rewritten. Start from them and add your own catalogues, prompts, and checks as your deployment grows. + +## MCP server entry + +The host connection is a single server entry pointed at the Streamable HTTP endpoint: + +```json +{ + "mcpServers": { + "arranger": { + "url": "http://localhost:3100/mcp" + } + } +} +``` + +## Recommended prompts + +The model performs best when a question names its catalogue and stays within that catalogue's coverage. Useful starting prompts: + +- _What datasets are available?_ (lists the catalogues the server exposes) +- _What fields are available in the mutation catalogue?_ (lists each field, its type, and valid operators) +- _Show me BRCA genes with an overall mutation frequency above 10%._ (a first query) +- _Explain the filter you constructed for that query._ (the model can describe the SQON it built) + +Tips that carry across portals: + +- **Name the catalogue** in the question (for example "in the mutation catalogue"). +- **Ask about available fields first** if you are unsure what filters are possible. +- **Stay within a catalogue's coverage**; a filter outside it returns nothing. +- **Iterate conversationally**; each follow-up refines the previous result set. + +## Connection-testing procedure + +Before running a session, confirm each layer responds. Arranger exposes three introspection endpoints the MCP server depends on: + +```bash +# Server introspection: expect catalogCount, catalogs, mode, sqonSchemaPath +curl http://localhost:5050/introspection + +# SQON schema: expect $schema, operators, aliases, title, version +curl http://localhost:5050/introspection/sqon + +# Catalogue fields: expect catalogId, documentType, generatedAt, and a fields map +curl http://localhost:5050/introspection/mutation +``` + +The MCP server has no plain health route (its `/mcp` endpoint requires an MCP session handshake), so a port check is enough to confirm the process is up: + +```bash +nc -z localhost 3100 && echo "port open" +``` + +If the host cannot connect, the common causes are: + +| Symptom | Likely cause | Fix | +| ------------------------------------------ | --------------------------------------------- | ---------------------------------------------------------------------------------------------- | +| Host shows **Disconnected** | The `arranger-mcp` container isn't running | `docker ps` should list `arranger-mcp` on port 3100; check `docker logs arranger-mcp`. | +| Connection refused at `localhost:3100` | Wrong port, or another process is using 3100 | Confirm the host-side port with `docker ps`; if you overrode `MCP_PORT`, use that value. | +| Connected, but the model never calls a tool | The loaded model doesn't support tool calling | Load a tool-capable model (look for the tool-use badge). | +| A query returns no rows | The filter falls outside the sample's coverage | Ask the model what fields and values exist first, then query within the catalogue's coverage. | diff --git a/website/docs/use-docs/ai-assisted-data-discovery/04-use-cases.md b/website/docs/use-docs/ai-assisted-data-discovery/04-use-cases.md new file mode 100644 index 00000000..f3fcb752 --- /dev/null +++ b/website/docs/use-docs/ai-assisted-data-discovery/04-use-cases.md @@ -0,0 +1,64 @@ +--- +id: use-cases +sidebar_label: Demonstrated Use cases +--- + +# Demonstrated use cases + +These are reproducible against the demo's Drug Discovery sample. The goal in each case is to refine a large gene list into a focused set of candidate targets. They are written so you can adapt the pattern to a different portal: substitute your own catalogue and field names, and keep the shape of the conversation. If a request is ambiguous, the model asks a targeted follow-up before querying (see [the reseaher workflow](/use/ai-assisted-data-discovery#the-researcher-workflow)). + +## Use case 1: iterative refinement + +Iterative refinement narrows a large candidate set into a focused one through cross-table filtering, one conversational step at a time. This example moves from the `mutation` catalogue to the `expression` catalogue. + +1. **Discover the data.** + + > _What datasets are available?_ + + The model calls `list-catalogues` and returns the catalogues the server exposes. + +2. **Explore a catalogue's fields.** + + > _What fields are available in the mutation catalogue?_ + + The model calls `get-catalogue-fields` and returns fields such as `hugo_symbol`, `cancer_type`, `overall_mutation_frequency`, `is_oncogene`, and `is_tumor_suppressor_gene`, each with its type and valid operators. + +3. **Run a first query.** + + > _Show me BRCA genes with an overall mutation frequency above 10%._ + + The model constructs a SQON filter from the field metadata and calls `execute-query`, returning the matching genes as a table. + +4. **Refine across a second catalogue.** + + > _Which of these genes show elevated average expression?_ + + The model cross-references the `expression` catalogue using the gene list from the previous step and keeps the genes that also meet the expression criterion. + +5. **Narrow further.** + + > _Of those, which are annotated as oncogenes?_ + + The model adds an `is_oncogene` filter, leaving a short, focused candidate list. + +Each step approves and runs one query, and each follow-up operates on the previous result set, so a researcher builds a precise cohort without writing a single filter by hand. + +## Use case 2: pathway-informed filtering + +Pathway-informed filtering uses the same refinement pattern to assemble a candidate gene set, then relates those genes to biological pathways, the question that feeds deeper analysis. + +1. **Assemble a candidate set** by mutation burden and cancer type: + + > _What are the most mutated genes in colorectal cancer?_ + + An open-ended request like this is usually ambiguous, so the model clarifies intent (which catalogue, which threshold) before proposing a filter such as `mutation_frequency > 10% AND hotspot = true` for the COADREAD cohort, then runs it once you approve. + +2. **Add an expression criterion** to keep genes that are also active: + + > _Which of these genes show elevated expression levels?_ + +3. **Ask the pathway question** to relate the focused set to known biology: + + > _What pathways are these genes involved in?_ + +**What is reproducible today, and what is not.** The gene-refinement pattern (steps 1 and 2) is reproducible against the demo, as long as you stay within each catalogue's loaded coverage. The demo's `mutation` sample is BRCA-only and does not include a `hotspot` field, so the colorectal (COADREAD) example above illustrates the full Drug Discovery Portal rather than the demo sample; to reproduce it locally, run the same shape of conversation against BRCA and the fields the demo actually exposes (see [use case 1](#use-case-1-iterative-refinement)). Step 3 is the hand-off point: dedicated pathway querying (a companion MCP server over MSigDB, the Molecular Signatures Database) is a forthcoming capability, so today the workflow produces the focused gene list that pathway analysis will consume. diff --git a/website/docs/use-docs/ai-assisted-data-discovery/05-deploy-your-own-mcp-server.md b/website/docs/use-docs/ai-assisted-data-discovery/05-deploy-your-own-mcp-server.md new file mode 100644 index 00000000..a0ed992d --- /dev/null +++ b/website/docs/use-docs/ai-assisted-data-discovery/05-deploy-your-own-mcp-server.md @@ -0,0 +1,18 @@ +--- +id: deploy-your-own-mcp-server +sidebar_label: Deploy your own server +--- + +# Deploy the MCP server against your own Arranger + +In the demo, you do not run the MCP server by hand; `make demo` starts it as the `arranger-mcp` container. To point the server at a **different or standalone** Arranger instance, deploy the container yourself. + +:::tip Don't have an Arranger portal yet? +The [Building a Foundational Search Portal workshop](/use/workshop/prerequisites) walks you through standing up Arranger and Stage on your own tabular data. Once that portal is running, deploy the MCP server against it using the steps below. +::: + +The deployment steps, the full environment-variable reference, and production guidance live in the Deploy guide: + +**[Deploy the MCP Server](/deploy/deployment/arranger-mcp-server)** + +For the server's internals, its full tool inventory, and development and testing workflows, see the canonical Arranger MCP Server documentation at [`apps/mcp-server`](https://github.com/overture-stack/arranger/tree/main/apps/mcp-server) and Arranger's [MCP server](/develop/Arranger/mcp-server) reference. diff --git a/website/docs/use-docs/ai-assisted-data-discovery/image.png b/website/docs/use-docs/ai-assisted-data-discovery/image.png new file mode 100644 index 00000000..a6ed167c Binary files /dev/null and b/website/docs/use-docs/ai-assisted-data-discovery/image.png differ diff --git a/website/docs/use-docs/ai-assisted-data-discovery/index.md b/website/docs/use-docs/ai-assisted-data-discovery/index.md new file mode 100644 index 00000000..87a8e3d6 --- /dev/null +++ b/website/docs/use-docs/ai-assisted-data-discovery/index.md @@ -0,0 +1,76 @@ +--- +sidebar_label: Overview +--- + +# AI-Assisted Data Discovery + +AI-Assisted data discovery lets a researcher ask any deployed Overture portal questions in **plain language** and get back the exact records that answer them. + +> _"show me all breast cancer samples with RNA-seq data from Canadian donors"_ + +The task is **natural language in, structured query out**, close in spirit to text-to-SQL, but the target is an Overture [Arranger](/develop/Arranger/overview) search query rather than SQL. This guide describes the workflow and the principles that govern it, walks you through a locally deployable testing environment, and gives reproducible use cases you can adapt to your own portal. + +:::info Function first +This guide documents the _function_ (ask a question, review the generated query, get results) and the connection steps, so it holds regardless of which model host or chat client you use. Specific tools named below (LM Studio, MCP Inspector) are reference implementations, not requirements. A dedicated researcher-facing conversational host is in active development; today the capability is reachable through any MCP-compatible client pointed at the Arranger MCP server (see [Connect a host application](/use/ai-assisted-data-discovery/connect-a-host)). +::: + +:::tip New to Overture search portals? +The [Building a Foundational Search Portal workshop](/use/workshop/prerequisites) walks you through standing up the base portal (Arranger and Stage) on your own tabular data. This guide picks up from there, extending that same platform with the Arranger MCP server so a language model can query it in plain language. +::: + +## Why conversational discovery + +Search APIs make data machine-accessible, but exposing them through MCP transforms how researchers interact with it. Rather than building custom, one-off integrations for every view or external dataset, MCP provides a standard protocol. A single conversational interface can query Overture data, synthesize results alongside other MCP-connected tools, and power end-to-end research workflows combining interactive data exploration, code execution, and dynamic visualization within one unified system. + +![Integration Trap](../images/integration.png) + +## How a question becomes a query + +A generated query is three parts, each mapping to part of the sentence: + +| Part | What it decides | From the example | +| ------------------------------------ | ---------------------------------------- | ------------------------------------------- | +| **SQON filter** | _which_ records to return | "breast cancer … RNA-seq … Canadian donors" | +| **GraphQL field selection** | _which fields_ to return for each record | "show me … samples" | +| **GraphQL aggregation** _(optional)_ | a summary, when the question implies one | "_how many_ … per province" | + +[SQON](/develop/Arranger/reference/building-sqon-queries) is Overture's JSON filter language; the [GraphQL API](/develop/Arranger/reference/query-processing) carries the filter, field selection, and aggregation to Arranger, which translates them into an Elasticsearch query. Because the model must know a catalogue's real fields, types, and valid operators before it can build a valid query, it discovers them at runtime through Arranger's [Introspection API](/develop/Arranger/reference/introspection) rather than guessing. Because Arranger generates that schema live from the indexed data, the same MCP server works against any Overture deployment without changes. + +## The researcher workflow + +The workflow runs in four beats: **request, clarifying intent, confirm, execute.** + +![Researcher Workflow](../images/researcher-workflow.png) + +1. **Request.** The researcher asks a question in plain language. Before answering, the model grounds itself: it **lists the catalogues** to see which datasets exist, reads their descriptions to pick the relevant one, then **loads that catalogue's fields** (their types, descriptions, and valid operators) and the **SQON filter grammar** it needs to build a valid query. Loading fields for only the chosen catalogue, rather than every dataset up front, keeps the model within its context budget. +2. **Clarifying intent.** The model classifies the request as _answerable_, _ambiguous_, _unanswerable_, or _improper_, and responds accordingly: proposing a filter in plain language when it is answerable, presenting its interpretation and asking a targeted follow-up when it is ambiguous, or suggesting the closest available fields when the data cannot answer it. Because the fields come from live introspection, the model stays grounded in fields that actually exist rather than inventing them. (This classify-then-respond loop is adapted from Guo et al. (2024), [Enhancing LLMs for Multi-turn Text-to-SQL](https://arxiv.org/abs/2412.17867); the task here has the same shape, with an Arranger GraphQL query as the target instead of SQL.) +3. **Confirm.** The model presents the finished query in plain language for approval. Nothing runs until the researcher confirms (principle 2), a human-in-the-loop check enforced on every query. +4. **Execute.** Arranger runs the approved query and returns the matching records (or aggregation buckets). + +## In this guide we will + +1. **[Set up the testing environment](/use/ai-assisted-data-discovery/testing-environment)**: deploy the demo locally. +2. **[Connect a host application](/use/ai-assisted-data-discovery/connect-a-host)**: point LM Studio (or another MCP host) at the server. +3. **[Configuration templates](/use/ai-assisted-data-discovery/configuration-templates)**: server entry, recommended prompts, connection tests. +4. **[Demonstrated use cases](/use/ai-assisted-data-discovery/use-cases)**: reproducible conversational workflows. +5. **[Deploy the MCP server against your own Arranger](/use/ai-assisted-data-discovery/deploy-your-own-mcp-server)**: go beyond the demo. + +## What's coming + +Establishing accurate, precise retrieval within the conversational interface is the critical foundation for what comes next. Bringing data directly into the conversational flow moves us beyond traditional search and opens us up to entirely new horizons for AI-assisted reasoning, multi-tool integration, and interactive research. + +![AI Assisted Data Discovery](../images/bigpicture.png) + +- **A dedicated research environment** for interactive exploration, analysis, and visualization, where the model produces reproducible **code artifacts** (the data query, the analysis code, the visualization code) rather than opaque answers. +- **Extensibility** through additional MCP servers and reusable **Skills**, keeping research data under local context control. +- **Testing and model optimization**, including a benchmarked model recommendation after the August 2026 evaluation. + +:::info Concept Art +These are early-stage exploratory concept mocks intended to illustrate potential design directions and functionality. They are not final representations of the user interface or system architecture. +::: + +For the Arranger server's own roadmap, see its [Arranger MCP server](/develop/Arranger/mcp-server#whats-coming) reference. + +:::info **Need Help?** +If you encounter any issues or have questions, please reach out through our [**community support channels**](https://docs.overture.bio/community/support). +::: diff --git a/website/docs/use-docs/config-generators-and-playgrounds/01-config-generator.mdx b/website/docs/use-docs/config-generators-and-playgrounds/01-config-generator.mdx new file mode 100644 index 00000000..2ec7ca26 --- /dev/null +++ b/website/docs/use-docs/config-generators-and-playgrounds/01-config-generator.mdx @@ -0,0 +1,33 @@ +--- +title: Config Generator +--- + +import ConfigGenerator from '/src/components/ConfigGenerator'; + +# Config Generator + +Give the generator a CSV (upload a file, paste rows, or press **Load example**) and it produces a starter for every configuration file Overture derives from your data: + +- an Elasticsearch or OpenSearch **index mapping** +- the four **Arranger** configs: `base.json`, `extended.json`, `table.json`, and `facets.json` +- a **Lectern** dictionary +- a **Postgres** table definition + +Treat the output as a starting point, not a finished config: types are inferred from a sample of your values, so review them and add descriptions and validation before production. Switch between the tabs to review each file, then copy or download it. For the field-by-field walkthrough, see [Index Mappings](/use/administration/index-mappings) and [Customizing the Data Portal](/use/administration/customizing-the-data-portal). + + + +## Working with hierarchical data + +The generator treats your CSV as a single table, producing one schema, one index mapping, and one Postgres table. It does not infer relationships between files, so it is a per-table starting point, not a whole data model. + +Overture data can span several related entities. Clinical data, for example, is a hierarchy: a donor has many specimens, each specimen has many samples, plus diagnoses and treatments. Rather than flattening that into one wide CSV, model it as related tables: + +1. **Split it into one CSV per entity** (`donor.csv`, `specimen.csv`, `sample.csv`), each with its own identifier column and a column holding its parent's identifier (`specimen.csv` carries a `donor_id`). +2. **Run the generator once per file** for a starting schema, mapping, and table. +3. **Join them by hand:** collect the schemas into one Lectern dictionary, mark each entity's identifier as its `uniqueKey` and each child's parent column as a `foreignKey`, then add the matching primary and foreign keys in Postgres. + +See [Building Dictionaries](/use/administration/building-dictionaries) for how `uniqueKey` and `foreignKey` express these relationships. diff --git a/website/docs/use-docs/config-generators-and-playgrounds/02-lectern-dictionary-playground.mdx b/website/docs/use-docs/config-generators-and-playgrounds/02-lectern-dictionary-playground.mdx new file mode 100644 index 00000000..6a29d756 --- /dev/null +++ b/website/docs/use-docs/config-generators-and-playgrounds/02-lectern-dictionary-playground.mdx @@ -0,0 +1,11 @@ +--- +title: Lectern Dictionary Playground +--- + +import DictionaryPlayground from "/src/components/DictionaryPlayground"; + +# Dictionary Playground + +Edit a Lectern schema on the left and it renders as an interactive table on the right, validated live against the Lectern schema as you type. Start from the template, press **Load Demo** for a fuller multi-schema example, then **Download JSON** or **Copy JSON** to take your dictionary with you. For the concepts behind it, see [Building Dictionaries](/use/administration/building-dictionaries). + + diff --git a/website/docs/use-docs/config-generators-and-playgrounds/03-song-schema-playground.mdx b/website/docs/use-docs/config-generators-and-playgrounds/03-song-schema-playground.mdx new file mode 100644 index 00000000..fe10b6d7 --- /dev/null +++ b/website/docs/use-docs/config-generators-and-playgrounds/03-song-schema-playground.mdx @@ -0,0 +1,18 @@ +--- +title: Song Schema Playground +--- + +import SongSchemaPlayground from "/src/components/SongSchemaPlayground"; + +# Song Schema Playground + +Build a Song schema two ways: click Generate from CSV to turn example data into a starter schema, or write the JSON directly. Generate from CSV converts each column into a typed property and suggests an enum for low-cardinality columns. The editor validates the Song envelope and inner JSON Schema live, rendering each schema object as its own table on the right, one row per field, with the rules that apply to the whole object shown above it. +Background: [Building Song Schemas](/use/administration/building-song-schemas) + + + +:::note Limitations +The playground checks structure only. It does not merge Song's base schema, and it does not cover the registration options an analysis type can carry, such as restricting file types or validating against an external service. Song itself is the authoritative check when you register a schema. + +For the full picture, see [Data Model Management](/develop/Song/Reference/data-model-management) in the Song reference. +::: diff --git a/website/docs/use-docs/config-generators-and-playgrounds/index.mdx b/website/docs/use-docs/config-generators-and-playgrounds/index.mdx new file mode 100644 index 00000000..00ad0562 --- /dev/null +++ b/website/docs/use-docs/config-generators-and-playgrounds/index.mdx @@ -0,0 +1,13 @@ +--- +title: Config Generators and Playgrounds +--- + +# Config Generators and Playgrounds + +Every interactive tool from the configuration guides, gathered in one place. Use the generator to turn a CSV into a full set of starter configuration files, then use the playgrounds to shape a Lectern dictionary or a Song schema by hand. Every tool here runs entirely in your browser; nothing is sent to a server. + +Each tool has its own page, and each one links back to the guide that explains the concepts behind it: + +- **[Config Generator](/use/config-generators-and-playgrounds/config-generator)** turns a CSV into a full set of starter configs: an index mapping, the four Arranger configs, a Lectern dictionary, and a Postgres table. +- **[Lectern Dictionary Playground](/use/config-generators-and-playgrounds/lectern-dictionary-playground)** shapes a Lectern dictionary by hand, validated live as you type. +- **[Song Schema Playground](/use/config-generators-and-playgrounds/song-schema-playground)** builds a Song analysis schema from example data or by hand. diff --git a/website/docs/use-docs/images/apikeys.png b/website/docs/use-docs/images/apikeys.png new file mode 100644 index 00000000..6a223417 Binary files /dev/null and b/website/docs/use-docs/images/apikeys.png differ diff --git a/website/docs/use-docs/images/bigpicture.png b/website/docs/use-docs/images/bigpicture.png new file mode 100644 index 00000000..a6ed167c Binary files /dev/null and b/website/docs/use-docs/images/bigpicture.png differ diff --git a/website/guides/images/buildQueries.png b/website/docs/use-docs/images/buildQueries.png similarity index 100% rename from website/guides/images/buildQueries.png rename to website/docs/use-docs/images/buildQueries.png diff --git a/website/docs/use-docs/images/cdd.png b/website/docs/use-docs/images/cdd.png new file mode 100644 index 00000000..9bc341c1 Binary files /dev/null and b/website/docs/use-docs/images/cdd.png differ diff --git a/website/guides/images/dataRetrieval.webp b/website/docs/use-docs/images/dataRetrieval.webp similarity index 100% rename from website/guides/images/dataRetrieval.webp rename to website/docs/use-docs/images/dataRetrieval.webp diff --git a/website/guides/images/dataSubmission.webp b/website/docs/use-docs/images/dataSubmission.webp similarity index 100% rename from website/guides/images/dataSubmission.webp rename to website/docs/use-docs/images/dataSubmission.webp diff --git a/website/guides/images/elasticvue.png b/website/docs/use-docs/images/elasticvue.png similarity index 100% rename from website/guides/images/elasticvue.png rename to website/docs/use-docs/images/elasticvue.png diff --git a/website/docs/use-docs/images/integration.png b/website/docs/use-docs/images/integration.png new file mode 100644 index 00000000..c733bec1 Binary files /dev/null and b/website/docs/use-docs/images/integration.png differ diff --git a/website/docs/use-docs/images/platform.svg b/website/docs/use-docs/images/platform.svg new file mode 100644 index 00000000..2aecd9f8 --- /dev/null +++ b/website/docs/use-docs/images/platform.svg @@ -0,0 +1 @@ +
e
e
Search & Exploration
Search & Exploration
Arranger Configs
Define the structure and formatting of your data
Arranger Configs...


Index Mapping
Define the structure of your index

Index Mapping...
Event Processing
Message queuing of publication events for triggering downstream data indexing 
Event Processing...
Data Management & Storage
Data Management & Storage
z

Song Schema
Define input fields with rules, logic and syntax

Song Schema...

Object Storage Providers
Score is compatible with any S3 compliant object storage provider

Object Storage Providers...
Authorization & Authentication
Authorization & Authentication

Overture API Key Provider
Extends Keycloak's functionality to support API authentication

Overture API Key Provider...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/guides/images/portal.png b/website/docs/use-docs/images/portal.png similarity index 100% rename from website/guides/images/portal.png rename to website/docs/use-docs/images/portal.png diff --git a/website/docs/use-docs/images/researcher-workflow.png b/website/docs/use-docs/images/researcher-workflow.png new file mode 100644 index 00000000..47f8c78d Binary files /dev/null and b/website/docs/use-docs/images/researcher-workflow.png differ diff --git a/website/guides/images/song-swagger.png b/website/docs/use-docs/images/song-swagger.png similarity index 100% rename from website/guides/images/song-swagger.png rename to website/docs/use-docs/images/song-swagger.png diff --git a/website/guides/images/success.png b/website/docs/use-docs/images/success.png similarity index 100% rename from website/guides/images/success.png rename to website/docs/use-docs/images/success.png diff --git a/website/guides/images/swagger_register_schema.png b/website/docs/use-docs/images/swagger_register_schema.png similarity index 100% rename from website/guides/images/swagger_register_schema.png rename to website/docs/use-docs/images/swagger_register_schema.png diff --git a/website/docs/use-docs/index.mdx b/website/docs/use-docs/index.mdx new file mode 100644 index 00000000..1175df14 --- /dev/null +++ b/website/docs/use-docs/index.mdx @@ -0,0 +1,83 @@ +--- +title: Use +slug: / +sidebar_label: Use Overture +sidebar_position: 0 +--- + +# Using Overture + +**For those interacting with, and managing Overture platforms and services.** + +Each guide and tutorial below pairs with a locally deployable Overture demo environment. Feel free to use these pages purely as reference, the demos are optional. + +## Who these guides are for + +These guides are grouped by role in the sidebar. If you are not sure where to start, find yourself below. + +### Data Consumers + +Researchers and analysts who search and retrieve data from a platform someone else runs. + +- **Ask a portal questions in plain language.** [AI-Assisted Data Discovery](/use/ai-assisted-data-discovery) covers the researcher workflow, a locally deployable testing environment, and reproducible use cases you can adapt to your own portal. +- **Connect the client you already use.** Any MCP-compatible host (LM Studio, Claude Desktop, and others) can be pointed at a portal's Arranger MCP server using the provided [configuration templates](/use/ai-assisted-data-discovery/configuration-templates). +- **Download the files you find.** [File Download](/use/cli-downloads) walks through retrieving data from a platform with the Song and Score command-line clients. + +### Data Submitters + +Anyone contributing data files and their accompanying metadata to a platform. + +- **Complete a full submission workflow.** [File Submission](/use/cli-submissions) takes you through registering an analysis with Song and uploading its files with Score. +- **Understand what a submission is.** A submission pairs data files (BAMs, CRAMs, VCFs, and similar) with the metadata that gives them context, including donor information and file descriptions. +- **See what your submission is validated against.** The permitted fields, types, and values are set by the platform's administrators; [Building Song Schemas](/use/administration/building-song-schemas) explains the schemas your metadata is checked against. + +### Platform Administrators + +Those deploying, configuring, and maintaining an Overture platform. + +- **Stand up a portal end to end.** [Building a Foundational Search Portal](/use/workshop/prerequisites) deploys Elasticsearch, Arranger, and Stage over your own tabular CSV data. +- **Configure each piece in depth.** Separate guides cover [Lectern dictionaries](/use/administration/building-dictionaries), [Song schemas](/use/administration/building-song-schemas), [search facets and data tables](/use/administration/customizing-the-data-portal), and [index mappings](/use/administration/index-mappings). +- **Generate configs instead of writing them.** The [generators and playgrounds](/use/config-generators-and-playgrounds) turn a CSV into a full set of starter configuration files, or let you shape a dictionary or schema by hand. All of them run entirely in your browser. + +## Prerequisites + +Most demo environments use Docker Compose with similar setups. Before starting you can install and verify the following: + +
+0. WSL2 Setup (windows only) + +Docker Desktop on Windows runs on WSL2, so configure it before installing Docker Desktop below: + +1. Install [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) +2. Use Ubuntu or another Linux distribution within WSL2 +3. Enable Docker Desktop's WSL2 integration (Docker Desktop → Settings → Resources → WSL Integration) +4. Run all commands from a **Bash terminal inside WSL2**, not PowerShell or Command Prompt. To open one, search for your Linux distribution (e.g. "Ubuntu") in the Start menu. + +
+ +
+1. Git installed + +Download from [git-scm.com](https://git-scm.com/downloads) if the command is not recognised. + +
+ +
+2. Docker Desktop (`28.0.0` or later) + +- **macOS / Windows:** Download from [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop/) +- **Linux:** Follow the [Docker Engine install guide](https://docs.docker.com/engine/install/) + +Once installed, open Docker Desktop → Settings → Resources and set: + +- **CPUs:** 4+ cores (8 recommended) +- **Memory:** 8 GB minimum +- **Disk:** 10 GB+ available + +Please ensure `docker --version` and `docker compose version` both return version numbers, and Docker Desktop is **running** with **4+ CPUs** and **8 GB+ memory** allocated + +
+ +:::tip Help us make our guides better +If you can't find what you're looking for please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/docs/use-docs/workshop/00-Intro.md b/website/docs/use-docs/workshop/00-Intro.md new file mode 100644 index 00000000..af475f73 --- /dev/null +++ b/website/docs/use-docs/workshop/00-Intro.md @@ -0,0 +1,95 @@ +--- +id: prerequisites +title: Prerequisites +sidebar_position: 0 +description: Build a searchable, FAIR-compliant data discovery portal from tabular CSV data using Elasticsearch, Arranger, and Stage. +--- + +# Building a Foundational Search Portal + +This tutorial will guide you through building a foundational data discovery portal for tabular CSV data using Elasticsearch, Arranger, and Stage. + +![Demo search and aggregation](./images/workshop-portal-preview.webp) + +**Objectives:** + +1. Deploy a functional data discovery portal using Elasticsearch, GraphQL, Arranger, and Stage +2. Configure search interfaces and indices tailored to tabular datasets +3. Gain familiarity with the tools needed to adapt this portal to your own data +4. Understand deployment options for making portals accessible on institutional networks and beyond + +## Prerequisites + +Install and verify the following before you start. + +
+1. WSL2 Setup (windows only) + +Docker Desktop on Windows runs on WSL2, so configure it before installing Docker Desktop below: + +1. Install [WSL2](https://learn.microsoft.com/en-us/windows/wsl/install) +2. Use Ubuntu or another Linux distribution within WSL2 +3. Enable Docker Desktop's WSL2 integration (Docker Desktop → Settings → Resources → WSL Integration) +4. Run all commands from a **Bash terminal inside WSL2**, not PowerShell or Command Prompt. To open one, search for your Linux distribution (e.g. "Ubuntu") in the Start menu. + +
+ +
+2. Git installed + +Download from [git-scm.com](https://git-scm.com/downloads) if the command is not recognised. + +
+ +
+3. Docker Desktop (`28.0.0` or later) + +- **macOS / Windows:** Download from [docker.com/products/docker-desktop](https://www.docker.com/products/docker-desktop/) +- **Linux:** Follow the [Docker Engine install guide](https://docs.docker.com/engine/install/) + +Once installed, open Docker Desktop → Settings → Resources and set: + +- **CPUs:** 4+ cores (8 recommended) +- **Memory:** 8 GB minimum +- **Disk:** 10 GB+ available + +Please ensure `docker --version` and `docker compose version` both return version numbers, and Docker Desktop is **running** with **4+ CPUs** and **8 GB+ memory** allocated + +
+ +#### Optional Prerequisites + +These are not required but will make this tutorial easier to follow: + +
+5. (Optional) Elasticvue: browser-based Elasticsearch GUI + +[Elasticvue](https://elasticvue.com/installation) is a browser-based Elasticsearch GUI useful for inspecting indices, browsing documents, and troubleshooting. It is not required but helpful for understanding what's happening inside Elasticsearch while working through this tutorial. + +Install it as a browser extension or standalone app. + +
+ +
+6. (Optional) PostgreSQL GUI client + +A PostgreSQL GUI client is useful for browsing the database while working through this tutorial. It is not required but helpful if you want to inspect the Postgres data directly. + +| OS | Recommended client | +| ------- | ----------------------------------------- | +| macOS | [Postico](https://eggerapps.at/postico2/) | +| Windows | [pgAdmin](https://www.pgadmin.org/) | +| Linux | [pgAdmin](https://www.pgadmin.org/) | + +
+ +
+7. (Optional) Bring your own data: CSV file + +If you have a tabular dataset you'd like to use, bring it as a CSV file. This tutorial uses demo data throughout, but the final sections cover adapting the portal to your own dataset. + +
+ +:::tip Finding Support +If you can't find what you're looking for please don't hesitate to reach out through our [**support page**](/community/support) or our [**discussion forum**](https://github.com/overture-stack/docs/discussions?discussions_q=). +::: diff --git a/website/workshop/01-Running-the-Demo.md b/website/docs/use-docs/workshop/01-Running-the-Demo.md similarity index 90% rename from website/workshop/01-Running-the-Demo.md rename to website/docs/use-docs/workshop/01-Running-the-Demo.md index 9c21bcca..b430a5cd 100644 --- a/website/workshop/01-Running-the-Demo.md +++ b/website/docs/use-docs/workshop/01-Running-the-Demo.md @@ -16,10 +16,10 @@ Before building anything from scratch, let's deploy the pre-configured demo port -If you have not done so yet, clone the following repository. +Clone the following repository: ``` -git clone -b IBCworkshop https://github.com/overture-stack/prelude.git +git clone -b docs-demo/search-portal-workshop https://github.com/overture-stack/prelude.git cd prelude ``` @@ -29,22 +29,6 @@ From the root of the cloned repository, run: make demo ``` -
-Running on Windows? - -| Platform | Command | -| ------------------ | ----------------------------------- | -| WSL2 (recommended) | `make demo` (in an Ubuntu terminal) | -| Native PowerShell | `.\run.ps1 demo` | - -**One-time setup for native PowerShell:** allow local scripts to run by executing this once: - -```powershell -Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser -``` - -
- The portal will be available at **http://localhost:3000** once deployment completes.
@@ -61,6 +45,22 @@ The portal will be available at **http://localhost:3000** once deployment comple
+
+Running on Windows? + +| Platform | Command | +| ------------------ | ----------------------------------- | +| WSL2 (recommended) | `make demo` (in an Ubuntu terminal) | +| Native PowerShell | `.\run.ps1 demo` | + +**One-time setup for native PowerShell:** allow local scripts to run by executing this once: + +```powershell +Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser +``` + +
+ :::info The first run takes longer because Docker needs to build the Stage image. Subsequent runs will be faster. ::: @@ -108,7 +108,7 @@ You should see containers for: | Container | Port | Role | | --------------------- | ---- | ------------------------- | | `stage` | 3000 | Portal frontend | -| `arranger-datatable1` | 5050 | Search API for datatable1 | +| `arranger` | 5050 | Search API | | `elasticsearch` | 9200 | Search engine | | `postgres` | 5435 | Persistent storage | @@ -159,10 +159,10 @@ Arranger exposes a GraphQL API at `http://localhost:5050/graphql`. You can query ```bash curl -X POST http://localhost:5050/graphql \ -H "Content-Type: application/json" \ - -d '{"query": "{ datatable1 { hits { total } } }"}' + -d '{"query": "{ records { hits { total } } }"}' ``` -This should return the total number of indexed records. You can also open `http://localhost:5050/graphql` in a browser to access the GraphQL playground and explore the schema interactively. +This should return the total number of indexed records. The root field is `records` because that is the `documentType` set in `base.json`. You can also open `http://localhost:5050/graphql` in a browser to access the GraphQL playground and explore the schema interactively. ### Checkpoint @@ -171,7 +171,7 @@ Before moving on, confirm: 1. The portal is running at http://localhost:3000 2. You can see the data exploration page with records in the table 3. Clicking a facet value filters the table results -4. `docker ps` shows containers for `stage`, `arranger-datatable1`, `elasticsearch`, and `postgres` +4. `docker ps` shows containers for `stage`, `arranger`, `elasticsearch`, and `postgres` :::info **Stuck?** Run `docker logs setup` to see where initialization may have failed. Common issues: Docker not running, port 3000 already in use, insufficient memory allocated to Docker. diff --git a/website/workshop/02-Architecture.md b/website/docs/use-docs/workshop/02-Architecture.md similarity index 86% rename from website/workshop/02-Architecture.md rename to website/docs/use-docs/workshop/02-Architecture.md index 81131343..38625836 100644 --- a/website/workshop/02-Architecture.md +++ b/website/docs/use-docs/workshop/02-Architecture.md @@ -16,8 +16,8 @@ Now that you've seen the running portal, let's walk through how data flows from | **Conductor** | CLI tool | Reads CSV files, loads records into PostgreSQL, then indexes them into Elasticsearch as structured documents. | | **[PostgreSQL](https://www.postgresql.org/)** | Database | Persistent relational storage for your data. Serves as the source of truth: data is loaded here first, then indexed into Elasticsearch for search. | | **[Elasticsearch](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/elasticsearch-intro.html)** | Search engine | Indexes and stores your data for search. Handles full-text search, faceted filtering, aggregations, and sorting. | -| **[Arranger](https://docs.overture.bio/docs/core-software/arranger/overview)** | Search API + UI layer | Sits between Elasticsearch and the frontend. Provides a GraphQL API and generates search UI components (facets, tables, filters) based on configuration files. | -| **[Stage](https://docs.overture.bio/docs/core-software/stage/overview/)** | Portal frontend | A React-based web application that renders Arranger's search components and provides the overall portal experience (navigation, theming, documentation pages). | +| **[Arranger](https://docs.overture.bio/develop/Arranger/overview)** | Search API + UI layer | Sits between Elasticsearch and the frontend. Provides a GraphQL API and generates search UI components (facets, tables, filters) based on configuration files. | +| **[Stage](https://docs.overture.bio/develop/Stage/overview/)** | Portal frontend | A React-based web application that renders Arranger's search components and provides the overall portal experience (navigation, theming, documentation pages). | ### Data Flow @@ -85,7 +85,7 @@ Services start in dependency order: PostgreSQL and Elasticsearch must be healthy ### The Overture Ecosystem -The components used in this workshop are part of the broader [Overture](https://overture.bio) open-source platform for research data management. The search and exploration stack we're using can be extended with additional services: +The components used in this tutorial are part of the broader [Overture](https://overture.bio) open-source platform for research data management. The search and exploration stack we're using can be extended with additional services: ![Platform Integration](./images/overture-platform-overview.webp) @@ -95,21 +95,23 @@ The components used in this workshop are part of the broader [Overture](https:// - **Score:** Object storage and file transfer - **Maestro:** Event-driven indexing from Song/Lyric into Elasticsearch -These extensions are beyond the scope of this workshop but represent the natural next steps for teams that need structured data submission workflows, file management, or multi-service integration. +These extensions are beyond the scope of this tutorial but represent the natural next steps for teams that need structured data submission workflows, file management, or multi-service integration. -#### Conversational Data Discovery _(Active development 2026-2028)_ +### AI-Assisted Data Discovery -Structuring data through a search API like Arranger makes it **machine-accessible in a way that modern AI tooling can reason over**. Arranger exposes a live, structured description of your data, including field names, types, value distributions, and schema, making it a natural foundation for AI-assisted discovery. Our team is building a **[Conversational Data Discovery (CDD)](https://www.alliancecan.ca/en/latest/news/the-alliance-invests-in-transforming-research-software-to-accelerate-discovery)** platform that wraps self-hosted language models around Arranger-indexed datasets, allowing researchers to query and analyse data in plain language rather than constructing filters manually. +Structuring data through a search API like Arranger makes it **machine-accessible in a way that modern AI tooling can reason over**. Arranger exposes a live, structured description of your data, including field names, types, value distributions, and schema, making it a natural foundation for AI-assisted discovery. Our team is building an **[AI-Assisted Data Discovery](https://www.alliancecan.ca/en/latest/news/the-alliance-invests-in-transforming-research-software-to-accelerate-discovery)** platform that wraps self-hosted language models around Arranger-indexed datasets, allowing researchers to query and analyse data in plain language rather than constructing filters manually. The platform connects to Arranger via the [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) and is designed around four core principles: data minimisation by default, no action without explicit researcher consent, sandboxed code execution, and fully reproducible sessions. Because research data is often sensitive, the platform runs on sovereign infrastructure rather than routing queries through commercial AI providers. -![CDD Conceptual Mock](./images/conversational-data-discovery-mockup.webp) +See the [AI-Assisted Data Discovery guide](/use/ai-assisted-data-discovery) for the workflow, the governing principles, and how to connect a client today. + +![AI-Assisted Data Discovery conceptual mock](./images/conversational-data-discovery-mockup.webp) :::info -**The interface shown above is a conceptual mock-up**. CDD is under active development and is not covered in this workshop. +**The interface shown above is a conceptual mock-up**. AI-Assisted Data Discovery is under active development and is not covered in this tutorial. ::: -The infrastructure you are building today will be compatible when the CDD platform reaches production. +The infrastructure you are building today will be compatible when the AI-Assisted Data Discovery platform reaches production. ### Checkpoint diff --git a/website/workshop/03-Data-Preparation.md b/website/docs/use-docs/workshop/03-Data-Preparation.md similarity index 96% rename from website/workshop/03-Data-Preparation.md rename to website/docs/use-docs/workshop/03-Data-Preparation.md index 0eec6e54..7c2fb803 100644 --- a/website/workshop/03-Data-Preparation.md +++ b/website/docs/use-docs/workshop/03-Data-Preparation.md @@ -11,7 +11,7 @@ In this section, we'll look at how to organize your data and what CSV formatting ### The Data Folder -Your CSV files can live anywhere on your machine, our data upload utility, Conductor, will accept a file path at upload time, so the portal doesn't require a fixed location. However, for this workshop we use the `data/` directory at the project root as a convenient working area. Place a representative subset of your data here so we have something to configure and test against: +Your CSV files can live anywhere on your machine, our data upload utility, Conductor, will accept a file path at upload time, so the portal doesn't require a fixed location. However, in this tutorial we use the `data/` directory at the project root as a convenient working area. Place a representative subset of your data here so we have something to configure and test against: ```plaintext project-root/ diff --git a/website/workshop/04-Generating-Configurations.md b/website/docs/use-docs/workshop/04-Generating-Configurations.md similarity index 95% rename from website/workshop/04-Generating-Configurations.md rename to website/docs/use-docs/workshop/04-Generating-Configurations.md index fff6e861..01ee68f4 100644 --- a/website/workshop/04-Generating-Configurations.md +++ b/website/docs/use-docs/workshop/04-Generating-Configurations.md @@ -13,6 +13,10 @@ Navigate to **Config Generator** in the Stage portal navigation bar (visible onc ![Config Generator page in the Stage portal navigation](./images/config-generator-page.webp) +:::tip +This same generator also runs in the docs, outside the workshop: [Config Generators and Playgrounds](/use/config-generators-and-playgrounds) produces the same files from a CSV entirely in your browser, with no running portal required. +::: + ### Step 1: Provide CSV Data Upload a `.csv` file using the **Upload .csv file** button, or paste CSV content directly into the text area. Once loaded, a preview of the first five rows is shown so you can confirm the correct file was used. @@ -48,6 +52,14 @@ Use the **Copy** button on each tab to copy the content, then paste it into the The generated configs are a starting point; review each file before saving and adjust as needed: +:::info Field-by-field references +Each generated file has a configuration guide that covers every option in detail: + +- For `elasticsearch-mapping.json`, see [Index Mappings](/use/administration/index-mappings). +- For the four `arranger/*.json` files, see [Customizing the Data Portal](/use/administration/customizing-the-data-portal). +- For `lectern/dictionary.json`, see [Building Dictionaries](/use/administration/building-dictionaries). +::: + #### postgres-table.sql The generator infers SQL column types from your data (e.g. `VARCHAR` for text, `SMALLINT` or `INTEGER` for numbers) and adds a `submission_metadata JSONB` column for tracking. You may want to: @@ -261,7 +273,7 @@ Display names are auto-generated by converting `snake_case` to Title Case. Revie :::tip -For a full reference on `extended.json`, see the [Arranger extended configuration docs](https://docs.overture.bio/docs/core-software/arranger/usage/arranger-components). +For a full reference on `extended.json`, see the [Arranger extended configuration docs](/develop/Arranger/reference/arranger-configs#extendedjson). ::: #### arranger/table.json @@ -310,7 +322,7 @@ Consider hiding metadata columns (e.g. `submission_metadata.*`) by setting `"sho :::tip -For a full reference on `table.json`, see the [Arranger table configuration docs](https://docs.overture.bio/docs/core-software/Arranger/usage/arranger-components#table-configuration-tablejson). +For a full reference on `table.json`, see the [Arranger table configuration docs](/develop/Arranger/reference/arranger-configs#tablejson). ::: #### arranger/facets.json @@ -353,7 +365,7 @@ Remove or deactivate facets that aren't useful for filtering, such as unique ID :::tip -For a full reference on `facets.json`, see the [Arranger facet configuration docs](https://docs.overture.bio/docs/core-software/Arranger/usage/arranger-components#facet-configuration-facetsjson). +For a full reference on `facets.json`, see the [Arranger facet configuration docs](/develop/Arranger/reference/arranger-configs#facetsjson). ::: ### Checkpoint diff --git a/website/workshop/05-Docker-Configuration.md b/website/docs/use-docs/workshop/05-Docker-Configuration.md similarity index 72% rename from website/workshop/05-Docker-Configuration.md rename to website/docs/use-docs/workshop/05-Docker-Configuration.md index b2ed067e..838c4c19 100644 --- a/website/workshop/05-Docker-Configuration.md +++ b/website/docs/use-docs/workshop/05-Docker-Configuration.md @@ -15,15 +15,15 @@ When you swap in a different dataset, a few values must change within the `docke | Variable | Service | Update to | | ---------------------------------------- | ------- | ------------------------------------------ | -| `ES_INDEX_0_NAME` | `setup` | your index name (`hockey_players-index`) | -| `ES_INDEX_0_TEMPLATE_NAME` | `setup` | your index name (`hockey_players-index`) | -| `ES_INDEX_0_ALIAS_NAME` | `setup` | your alias name (`hockey_players_centric`) | -| `NEXT_PUBLIC_ARRANGER_DATATABLE_1_INDEX` | `stage` | your alias name (`hockey_players_centric`) | +| `ES_INDEX_0_NAME` | `setup` | your index name (`datatable1-index`) | +| `ES_INDEX_0_TEMPLATE_NAME` | `setup` | your index name (`datatable1-index`) | +| `ES_INDEX_0_ALIAS_NAME` | `setup` | your alias name (`datatable1_centric`) | +| `NEXT_PUBLIC_ARRANGER_DATATABLE_1_INDEX` | `stage` | your alias name (`datatable1_centric`) | The most common mistake is updating the alias in one place but not the others. If Arranger throws a GraphQL schema error on startup, check that `ES_INDEX_0_ALIAS_NAME`, `esIndex` in `base.json`, and `NEXT_PUBLIC_ARRANGER_DATATABLE_1_INDEX` all carry the same value. :::info -**The index pattern** (e.g. `hockey_players-*`) determines which future indices automatically inherit the mapping template. **The index name** (e.g. `hockey_player-index`) is the concrete index created at startup. **The alias** (e.g. `hockey_players_centric`) is what Arranger and Stage actually query. Aliases become more valuable when managing or migrating multiple indices, the distinction will be less apparent in this workshop. +**The index pattern** (e.g. `datatable1-*`) determines which future indices automatically inherit the mapping template. **The index name** (e.g. `datatable1-index`) is the concrete index created at startup. **The alias** (e.g. `datatable1_centric`) is what Arranger and Stage actually query. Aliases become more valuable when managing or migrating multiple indices, the distinction will be less apparent at this scale. ::: ## Step 2: Apply the Changes @@ -57,7 +57,7 @@ make platform ::: :::info -For future configuration changes (once your own data is loaded), `make restart` is sufficient — it reloads configs without wiping data. Only use `make reset` when you need to start from scratch. +For future configuration changes (once your own data is loaded), `make restart` is sufficient; it reloads configs without wiping data. Only use `make reset` when you need to start from scratch. ::: #### Troubleshooting @@ -68,7 +68,7 @@ If services don't start correctly after changes: # Check container logs docker logs setup docker logs postgres -docker logs arranger-datatable1 +docker logs arranger docker logs stage # Verify PostgreSQL is healthy @@ -81,7 +81,7 @@ curl -u elastic:myelasticpassword http://localhost:9200/_cluster/health?pretty make reset ``` -:::tip Windows (PowerShell) — full reset +:::tip Windows (PowerShell): full reset ```powershell .\run.ps1 reset @@ -103,7 +103,7 @@ Before proceeding, confirm: ## Reference: Service Configuration Details -The following sections explain how each service in `docker-compose.yml` is wired up. This is supplemental — you don't need to modify these during the workshop, but it's useful context if you're adapting the platform for your own deployment. +The following sections explain how each service in `docker-compose.yml` is wired up. This is supplemental; you don't need to modify these while following along, but it's useful context if you're adapting the platform for your own deployment. ### Setup @@ -124,10 +124,10 @@ POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-admin123} ES_INDEX_COUNT: 1 # highlight-start -ES_INDEX_0_NAME: hockey_player-index # must match the index name in your mapping file +ES_INDEX_0_NAME: datatable1-index # must match the index name in your mapping file ES_INDEX_0_TEMPLATE_FILE: setup/configs/elasticsearchConfigs/datatable1-mapping.json # path to your mapping -ES_INDEX_0_TEMPLATE_NAME: hockey_players-index -ES_INDEX_0_ALIAS_NAME: hockey_players_centric # must match the alias in your mapping and base.json +ES_INDEX_0_TEMPLATE_NAME: datatable1-index +ES_INDEX_0_ALIAS_NAME: datatable1_centric # must match the alias in your mapping and base.json # highlight-end ``` @@ -139,11 +139,11 @@ ES_INDEX_0_ALIAS_NAME: hockey_players_centric # must match the alias in your map | `ES_INDEX_0_ALIAS_NAME` | The alias Arranger queries, must match `aliases` in your mapping and `esIndex` in `base.json` | :::info -The `setup` container is backed by shell scripts under `setup/scripts/` that handle sequencing, health checks, and initialization signalling. You do not need to modify these during the workshop, they run automatically with `make platform` or `make demo`. +The `setup` container is backed by shell scripts under `setup/scripts/` that handle sequencing, health checks, and initialization signalling. You do not need to modify these while following along, they run automatically with `make platform` or `make demo`. ::: :::tip -Multiple datasets are supported, each gets its own index block following the same `ES_INDEX_1_*` pattern. This is beyond the scope of this workshop, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance on multi-dataset setups afterwards. +Multiple datasets are supported, each gets its own index block following the same `ES_INDEX_1_*` pattern. This is beyond the scope of this tutorial, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance on multi-dataset setups afterwards. ::: ### PostgreSQL @@ -170,42 +170,46 @@ postgres: | `POSTGRES_USER` | Database user, must match the value set in the setup service | | `POSTGRES_DB` | Database name, must match the value set in the setup service and your SQL schema | -The `postgres-data` volume ensures your data persists across container restarts. Credentials use `${VARIABLE:-default}` syntax, Docker Compose reads actual values from the `.env` file if it exists, falling back to the workshop defaults. For production, create a `.env` file with strong passwords (see `.env.example`). +The `postgres-data` volume ensures your data persists across container restarts. Credentials use `${VARIABLE:-default}` syntax, Docker Compose reads actual values from the `.env` file if it exists, falling back to the tutorial defaults. For production, create a `.env` file with strong passwords (see `.env.example`). :::tip -Adding a second dataset only requires a new SQL file in `setup/configs/postgresConfigs/`, the setup service discovers and executes all `.sql` files automatically, no changes to `docker-compose.yml` are needed. This is beyond the scope of this workshop, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance afterwards. +Adding a second dataset only requires a new SQL file in `setup/configs/postgresConfigs/`, the setup service discovers and executes all `.sql` files automatically, no changes to `docker-compose.yml` are needed. This is beyond the scope of this tutorial, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance afterwards. ::: ### Arranger -Each data table requires its own Arranger service instance. The volume mount connects the Arranger configuration files you generated to the running container, and the environment variables tell it how to reach Elasticsearch: +A single Arranger service provides the search API for your data. It reads one config directory per catalogue from the mounted `arrangerConfigs` folder; with one data table, that folder holds a single `datatable1` catalogue. The volume mount connects the Arranger configuration files you generated to the running container, and the environment variables tell it how to reach Elasticsearch: ```yaml showLineNumbers -arranger-datatable1: - image: ghcr.io/overture-stack/arranger-server:4919f736 - container_name: arranger-datatable1 +arranger: + image: ghcr.io/overture-stack/arranger-search-server:b5c6051b + container_name: arranger restart: unless-stopped volumes: # highlight-next-line - - ./setup/configs/arrangerConfigs/datatable1:/app/apps/search-server/configs + - ./setup/configs/arrangerConfigs:/app/configs # each subfolder is one catalogue environment: ES_HOST: http://elasticsearch:9200 # highlight-start ES_USER: ${ES_USER:-elastic} # update if changing Elasticsearch credentials ES_PASS: ${ES_PASSWORD:-myelasticpassword} # update if changing Elasticsearch credentials - ES_ARRANGER_SET_INDEX: datatable1_arranger_set # must be unique per Arranger instance + ES_ARRANGER_SET_INDEX: arranger_set # index for saved sets, shared across catalogues # highlight-end PORT: 5050 ``` -| Setting | What it controls | -| ----------------------- | ------------------------------------------------------------------------------------------- | -| Volume mount path | Which Arranger config directory is loaded, the `datatable1` segment matches your table name | -| `ES_USER` / `ES_PASS` | Credentials used to connect to Elasticsearch | -| `ES_ARRANGER_SET_INDEX` | Internal Arranger bookmarks index, must be unique per Arranger instance | +| Setting | What it controls | +| ----------------------- | --------------------------------------------------------------------------------------------- | +| Volume mount path | The parent config directory; each subfolder (here, `datatable1`) is served as one catalogue | +| `ES_USER` / `ES_PASS` | Credentials used to connect to Elasticsearch | +| `ES_ARRANGER_SET_INDEX` | Elasticsearch index Arranger uses to store saved sets | + +:::info Catalogue routing +With a single catalogue, Arranger serves it at the root: `http://arranger:5050/graphql`. Add more catalogues (see the tip below) and each is served under its own path instead: `http://arranger:5050//graphql`. +::: :::tip -Adding a second Arranger instance requires a new service block with a unique port, container name, config directory, and `ES_ARRANGER_SET_INDEX`. This is beyond the scope of this workshop, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance afterwards. +Adding a second catalogue only requires a new config directory under `setup/configs/arrangerConfigs/`; the single Arranger service discovers it on restart and serves it at `//graphql`, no new service block needed. This is beyond the scope of this tutorial, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance afterwards. ::: ### Stage @@ -222,9 +226,9 @@ stage: # highlight-end # highlight-start - NEXT_PUBLIC_ARRANGER_DATATABLE_1_API: http://arranger-datatable1:5050 # must match Arranger service name and port + NEXT_PUBLIC_ARRANGER_DATATABLE_1_API: http://arranger:5050 # must match Arranger service name and port NEXT_PUBLIC_ARRANGER_DATATABLE_1_DOCUMENT_TYPE: records - NEXT_PUBLIC_ARRANGER_DATATABLE_1_INDEX: hockey_players_centric # must match ES_INDEX_0_ALIAS_NAME in setup + NEXT_PUBLIC_ARRANGER_DATATABLE_1_INDEX: datatable1_centric # must match ES_INDEX_0_ALIAS_NAME in setup NEXT_PUBLIC_DATATABLE_1_EXPORT_ROW_ID_FIELD: submission_metadata.submission_id # highlight-end @@ -240,5 +244,5 @@ stage: | `NEXT_PUBLIC_DATATABLE_1_EXPORT_ROW_ID_FIELD` | The field used as the unique row identifier for TSV export | :::tip -Stage natively supports up to 5 data table connections following the `DATATABLE_1`, `DATATABLE_2` naming pattern. Adding a second connection is beyond the scope of this workshop, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance afterwards. +Stage natively supports up to 5 data table connections following the `DATATABLE_1`, `DATATABLE_2` naming pattern. Adding a second connection is beyond the scope of this tutorial, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance afterwards. ::: diff --git a/website/workshop/06-Loading-Data.md b/website/docs/use-docs/workshop/06-Loading-Data.md similarity index 96% rename from website/workshop/06-Loading-Data.md rename to website/docs/use-docs/workshop/06-Loading-Data.md index a54819ba..83880c97 100644 --- a/website/workshop/06-Loading-Data.md +++ b/website/docs/use-docs/workshop/06-Loading-Data.md @@ -214,7 +214,7 @@ If you fixed errors in the CSV itself, you need to clear both PostgreSQL and Ela
Other Conductor commands -The standard `upload` command runs the full CSV → PostgreSQL → Elasticsearch pipeline in one pass, which is what you need for the workshop. Conductor also exposes two targeted commands that operate on only one destination, useful when the two stages need to happen separately, for example if PostgreSQL and Elasticsearch are being managed independently, or if you need to debug one layer in isolation: +The standard `upload` command runs the full CSV → PostgreSQL → Elasticsearch pipeline in one pass, which is what you need here. Conductor also exposes two targeted commands that operate on only one destination, useful when the two stages need to happen separately, for example if PostgreSQL and Elasticsearch are being managed independently, or if you need to debug one layer in isolation: - **`upload-db`:** loads CSV data into PostgreSQL only, without indexing to Elasticsearch: diff --git a/website/workshop/07-Troubleshooting.md b/website/docs/use-docs/workshop/07-Troubleshooting.md similarity index 94% rename from website/workshop/07-Troubleshooting.md rename to website/docs/use-docs/workshop/07-Troubleshooting.md index ba348811..9b2285da 100644 --- a/website/workshop/07-Troubleshooting.md +++ b/website/docs/use-docs/workshop/07-Troubleshooting.md @@ -32,13 +32,13 @@ Confirm all containers are up: docker ps ``` -You should see `stage`, `arranger-datatable1`, `elasticsearch`, and `postgres`. If any are missing, check their logs: +You should see `stage`, `arranger`, `elasticsearch`, and `postgres`. If any are missing, check their logs: ```bash docker logs setup docker logs postgres docker logs elasticsearch -docker logs arranger-datatable1 +docker logs arranger docker logs stage ``` @@ -98,7 +98,7 @@ curl -X POST http://localhost:5050/graphql \ `documentType` in `base.json` is always `"records"`, so the GraphQL query always uses `{ records { hits { total } } }`. If you see a `Cannot query field` error, it means `base.json` has the wrong value; verify that `"documentType": "records"` is set correctly. ::: -This should return a document count. If it fails, check `docker logs arranger-datatable1`. Common causes: +This should return a document count. If it fails, check `docker logs arranger`. Common causes: - Elasticsearch is not yet healthy when Arranger starts, run `make restart` - `esIndex` in `base.json` doesn't match the alias in your Elasticsearch mapping @@ -114,7 +114,7 @@ If Arranger responds to the GraphQL query above but the data table or facet pane | `extended.json` | Dot notation | `data.field_name` | | `base.json` | Alias name (`esIndex`) | `datatable1_centric` | -Another common `table.json` issue is the `query` field, which must use the correct GraphQL traversal path (`hits`, `edges`, `nodes`) to reach the field value. An incorrect path here will cause columns to render empty even when data is present. See the [Arranger table configuration docs](https://docs.overture.bio/docs/core-software/arranger/usage/arranger-components#table-configuration-tablejson) for the expected structure. +Another common `table.json` issue is the `query` field, which must use the correct GraphQL traversal path (`hits`, `edges`, `nodes`) to reach the field value. An incorrect path here will cause columns to render empty even when data is present. See the [Arranger table configuration docs](/develop/Arranger/reference/arranger-configs#tablejson) for the expected structure. ### Step 5: Check Stage and the Browser diff --git a/website/workshop/08-Portal-Customization.md b/website/docs/use-docs/workshop/08-Portal-Customization.md similarity index 96% rename from website/workshop/08-Portal-Customization.md rename to website/docs/use-docs/workshop/08-Portal-Customization.md index 13cd5f7f..b0373e2b 100644 --- a/website/workshop/08-Portal-Customization.md +++ b/website/docs/use-docs/workshop/08-Portal-Customization.md @@ -55,7 +55,7 @@ Additional typography variants (heading, subheading, data) can be adjusted in th The portal name displayed in the UI is set via the `NEXT_PUBLIC_LAB_NAME` environment variable in `docker-compose.yml`: ```yaml -NEXT_PUBLIC_LAB_NAME: IBC Workshop 2026 +NEXT_PUBLIC_LAB_NAME: My Data Portal ``` Change this to your lab or project name. @@ -210,7 +210,7 @@ The application uses `@emotion/react` for CSS-in-JS styling. Component-specific ### Further Customization -The platform is considerably more flexible than what this workshop covers. Two capabilities worth highlighting for those working with more complex datasets: +The platform is considerably more flexible than what this tutorial covers. Two capabilities worth highlighting for those working with more complex datasets: **QuickSearch (purple box)** adds a type-ahead search input to a data table that lets users find records by typing a field value directly, rather than browsing facet filters. It works by adding edge n-gram tokenization to the Elasticsearch mapping and enabling the feature in Arranger's `extended.json` and `facets.json`. It's well-suited to datasets where users already know the identifier they're looking for (a gene name, sample ID, etc.). @@ -218,7 +218,7 @@ The platform is considerably more flexible than what this workshop covers. Two c **Cross-table search (green box)** allows a selection made in one data table to propagate as a filter in another, using a shared identifier across heterogeneous datasets. For example, selecting a gene in one table can automatically filter a second table to show only records that share that gene. This is particularly useful for multi-omics or linked clinical and molecular datasets. -Both features require configuration beyond the scope of this workshop. Reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance on either. +Both features require configuration beyond the scope of this tutorial. Reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance on either. ### Checkpoint diff --git a/website/workshop/09-Next-Steps.md b/website/docs/use-docs/workshop/09-Next-Steps.md similarity index 73% rename from website/workshop/09-Next-Steps.md rename to website/docs/use-docs/workshop/09-Next-Steps.md index 66fd93c6..1b369c3e 100644 --- a/website/workshop/09-Next-Steps.md +++ b/website/docs/use-docs/workshop/09-Next-Steps.md @@ -22,7 +22,7 @@ You've seen how to generate configuration files from CSV data, wire services tog ### Going Beyond Localhost -The portal you've built runs entirely on your laptop and is only reachable at `localhost`. This is intentional for the workshop; it keeps the setup self-contained and requires no external infrastructure. However, a laptop is not a suitable host for a live web service. Laptops are not always on, and a portal goes offline whenever yours does. +The portal you've built runs entirely on your laptop and is only reachable at `localhost`. This is intentional for this tutorial; it keeps the setup self-contained and requires no external infrastructure. However, a laptop is not a suitable host for a live web service. Laptops are not always on, and a portal goes offline whenever yours does. Making the portal accessible to collaborators or the public requires dedicated infrastructure: @@ -35,7 +35,7 @@ Setting up and maintaining this infrastructure typically requires a system admin ### Expanding the Platform -The search and exploration stack used in this workshop is part of the broader Overture platform. Depending on your needs, you can extend it with: +The search and exploration stack used in this tutorial is part of the broader Overture platform. Depending on your needs, you can extend it with: ![Platform Integration](./images/overture-platform-overview.webp) @@ -49,15 +49,15 @@ The search and exploration stack used in this workshop is part of the broader Ov These services compose together, letting you build from a simple search portal to a full data management platform incrementally. For more information, see the [Overture documentation](https://docs.overture.bio). -### Conversational Data Discovery +### AI-Assisted Data Discovery One of the most compelling reasons to structure your data through Arranger is that it makes your data **machine-accessible in a way that modern AI tooling can reason over**. We are actively updating our search API so it can be consumed by a language model, enabling researchers to query and retrieve data in plain language. :::info -This capability is currently in active development by the Overture team. It is not part of this workshop, but it is a direct and natural extension of the infrastructure you are building here. +This capability is a direct and natural extension of the infrastructure you are building here. It is not part of this tutorial, but you can read how it works (the workflow, the governing principles, and how to connect a client) in the [AI-Assisted Data Discovery guide](/use/ai-assisted-data-discovery). ::: -In addition to this our team is building a **Conversational Data Discovery (CDD)** platform: an interactive research environment that connects a self-hosted LLM to Overture datasets and beyond. Because Arranger exposes a live description of your data, including field names, types, value distributions, and catalogue structure, a language model is capable of: +In addition to this our team is building an **AI-Assisted Data Discovery** platform: an interactive research environment that connects a self-hosted LLM to Overture datasets and beyond. Because Arranger exposes a live description of your data, including field names, types, value distributions, and catalogue structure, a language model is capable of: - **Understanding what data is available** without being hardcoded to a specific schema. - **Translating natural language questions into validated queries.** A researcher asks "how many samples have a TP53 mutation?" and the model constructs the correct filter against your specific field names. @@ -65,24 +65,18 @@ In addition to this our team is building a **Conversational Data Discovery (CDD) - **Executing analysis code in a sandboxed workspace.** Once a query is confirmed, the model can generate Python to analyse and visualize results, running it in an isolated container where the researcher approves every step. :::info -**Why self-hosted models:** Research data is often sensitive. Routing queries through commercial AI providers is not viable for many research contexts. The CDD platform can be used to run capable models, adjacent to the data, with full control over the stack. +**Why self-hosted models:** Research data is often sensitive. Routing queries through commercial AI providers is not viable for many research contexts. This platform can be used to run capable models, adjacent to the data, with full control over the stack. ::: ### Get in Touch -Whether you're adapting the platform to your own data, running into issues after the workshop, or exploring what a larger deployment might look like for your research group, we're happy to help. Reach out to the Overture team directly at [contact@overture.bio](mailto:contact@overture.bio). - -### Post-Workshop Survey - -If you have a few minutes, we'd appreciate your feedback on the workshop. Your responses help us improve the content, pacing, and hands-on exercises for future sessions. - -**[Fill in the post-workshop survey →](https://docs.google.com/forms/d/e/1FAIpQLSc2lbZdaxW55SRgxw8f6NColoWIUm8299WU6DfkvsRnh6WQNA/viewform?usp=dialog)** +Whether you're adapting the platform to your own data, running into issues, or exploring what a larger deployment might look like for your research group, we're happy to help. Reach out to the Overture team directly at [contact@overture.bio](mailto:contact@overture.bio). ### Resources - **Overture Documentation:** [docs.overture.bio](https://docs.overture.bio) - **Overture GitHub:** [github.com/overture-stack](https://github.com/overture-stack) -- **Arranger Docs:** [Arranger overview](https://docs.overture.bio/docs/core-software/arranger/overview/) -- **Stage Docs:** [Stage overview](https://docs.overture.bio/docs/core-software/stage/overview/) +- **Arranger Docs:** [Arranger overview](https://docs.overture.bio/develop/Arranger/overview/) +- **Stage Docs:** [Stage overview](https://docs.overture.bio/develop/Stage/overview/) - **Elasticsearch 7.17 Reference:** [elastic.co/guide](https://www.elastic.co/guide/en/elasticsearch/reference/7.17/index.html) - **Support Forum:** [GitHub Discussions](https://github.com/overture-stack/roadmap/discussions/categories/support) diff --git a/website/workshop/10-Extension-Task.md b/website/docs/use-docs/workshop/10-Extension-Task.md similarity index 81% rename from website/workshop/10-Extension-Task.md rename to website/docs/use-docs/workshop/10-Extension-Task.md index 2515c200..50f0d20a 100644 --- a/website/workshop/10-Extension-Task.md +++ b/website/docs/use-docs/workshop/10-Extension-Task.md @@ -2,7 +2,7 @@ id: extension-task title: Extension Task sidebar_position: 10 -description: Use the Dictionary Playground to design a Lectern data dictionary with typed fields, controlled vocabularies, and multi-schema relationships — and see how it connects to submission validation and search indexing. +description: Use the Dictionary Playground to design a Lectern data dictionary with typed fields, controlled vocabularies, and multi-schema relationships, then see how it connects to submission validation and search indexing. --- # Extension Task @@ -14,7 +14,7 @@ Lectern is Overture's data dictionary management service. It gives those design The portal includes a **Dictionary Playground**: a live editor where you can write a Lectern schema and see it rendered as an interactive table in real time, with no server required. :::info -This is an extension task for participants who have completed the core workshop. +This is an optional follow-on for readers who want to go further after completing the walkthrough above. It covers the same Dictionary Playground as the [Building Dictionaries](/use/administration/building-dictionaries) configuration guide; use that guide when you want the reference version, with links to every restriction type. ::: ## Core Concepts @@ -29,7 +29,7 @@ Schemas within a dictionary can reference each other through shared identifier f ## Step 1: Open the Playground -Navigate to **http://localhost:3000/dictionary/playground**. +Open the [Lectern Dictionary Playground](/use/config-generators-and-playgrounds/lectern-dictionary-playground). The playground opens with a demo dictionary. Clear the editor and replace it with this minimal starting point, a single `donor` entity with one required field: @@ -158,14 +158,14 @@ The playground validates and previews dictionaries entirely in the browser. To p ### Lyric: Submission and Validation -[Lyric](https://docs.overture.bio/docs/core-software/lyric/overview) is Overture's data submission service. Once a dictionary is published to a running Lectern server, Lyric uses it to validate incoming records at submission time. Every field restriction you defined (required fields, code lists, regex patterns, numeric ranges) becomes an automated check that runs before a record is accepted. Submitters get immediate, field-level feedback rather than discovering inconsistencies after the fact. +[Lyric](https://docs.overture.bio/develop/Lyric/overview) is Overture's data submission service. Once a dictionary is published to a running Lectern server, Lyric uses it to validate incoming records at submission time. Every field restriction you defined (required fields, code lists, regex patterns, numeric ranges) becomes an automated check that runs before a record is accepted. Submitters get immediate, field-level feedback rather than discovering inconsistencies after the fact. ### Maestro: Indexing for Search -[Maestro](https://docs.overture.bio/docs/core-software/maestro/overview) is Overture's indexing service. Once validated data is in the system, Maestro transforms it into Elasticsearch indices that power the portal's search and exploration features. The schema you defined in Lectern informs how fields are indexed; typed fields, controlled vocabularies, and relationships carry through from the dictionary into the search layer. +[Maestro](https://docs.overture.bio/develop/Maestro/overview) is Overture's indexing service. Once validated data is in the system, Maestro transforms it into Elasticsearch indices that power the portal's search and exploration features. The schema you defined in Lectern informs how fields are indexed; typed fields, controlled vocabularies, and relationships carry through from the dictionary into the search layer. Together, Lectern -> Lyric -> Maestro form the data pipeline: you define the schema, submitters upload against it, and the resulting data becomes searchable in the portal. :::tip -The full Lectern schema reference (including all restriction types, versioning, and foreign key syntax) is documented at [docs.overture.bio](https://docs.overture.bio/docs/core-software/Lectern/dictionaryReference). +The full Lectern schema reference (including all restriction types, versioning, and foreign key syntax) is documented at [docs.overture.bio](https://docs.overture.bio/develop/Lectern/dictionaryReference). ::: diff --git a/website/workshop/images/basicPortal.webp b/website/docs/use-docs/workshop/images/basicPortal.webp similarity index 100% rename from website/workshop/images/basicPortal.webp rename to website/docs/use-docs/workshop/images/basicPortal.webp diff --git a/website/workshop/images/config-generator-page.webp b/website/docs/use-docs/workshop/images/config-generator-page.webp similarity index 100% rename from website/workshop/images/config-generator-page.webp rename to website/docs/use-docs/workshop/images/config-generator-page.webp diff --git a/website/workshop/images/conversational-data-discovery-mockup.webp b/website/docs/use-docs/workshop/images/conversational-data-discovery-mockup.webp similarity index 100% rename from website/workshop/images/conversational-data-discovery-mockup.webp rename to website/docs/use-docs/workshop/images/conversational-data-discovery-mockup.webp diff --git a/website/workshop/images/csv-upload-area.webp b/website/docs/use-docs/workshop/images/csv-upload-area.webp similarity index 100% rename from website/workshop/images/csv-upload-area.webp rename to website/docs/use-docs/workshop/images/csv-upload-area.webp diff --git a/website/workshop/images/demo-portal-cross-table.webp b/website/docs/use-docs/workshop/images/demo-portal-cross-table.webp similarity index 100% rename from website/workshop/images/demo-portal-cross-table.webp rename to website/docs/use-docs/workshop/images/demo-portal-cross-table.webp diff --git a/website/workshop/images/demo-search-and-aggregation.webm b/website/docs/use-docs/workshop/images/demo-search-and-aggregation.webm similarity index 100% rename from website/workshop/images/demo-search-and-aggregation.webm rename to website/docs/use-docs/workshop/images/demo-search-and-aggregation.webm diff --git a/website/workshop/images/documentation.webp b/website/docs/use-docs/workshop/images/documentation.webp similarity index 100% rename from website/workshop/images/documentation.webp rename to website/docs/use-docs/workshop/images/documentation.webp diff --git a/website/workshop/images/generated-output-panel.webp b/website/docs/use-docs/workshop/images/generated-output-panel.webp similarity index 100% rename from website/workshop/images/generated-output-panel.webp rename to website/docs/use-docs/workshop/images/generated-output-panel.webp diff --git a/website/workshop/images/homepage.webp b/website/docs/use-docs/workshop/images/homepage.webp similarity index 100% rename from website/workshop/images/homepage.webp rename to website/docs/use-docs/workshop/images/homepage.webp diff --git a/website/workshop/images/overture-platform-overview.webp b/website/docs/use-docs/workshop/images/overture-platform-overview.webp similarity index 100% rename from website/workshop/images/overture-platform-overview.webp rename to website/docs/use-docs/workshop/images/overture-platform-overview.webp diff --git a/website/workshop/images/workshop-architecture-diagram.webp b/website/docs/use-docs/workshop/images/workshop-architecture-diagram.webp similarity index 100% rename from website/workshop/images/workshop-architecture-diagram.webp rename to website/docs/use-docs/workshop/images/workshop-architecture-diagram.webp diff --git a/website/workshop/images/workshop-portal-preview.webp b/website/docs/use-docs/workshop/images/workshop-portal-preview.webp similarity index 100% rename from website/workshop/images/workshop-portal-preview.webp rename to website/docs/use-docs/workshop/images/workshop-portal-preview.webp diff --git a/website/docsPlugin.ts b/website/docsPlugin.ts index 1e512ced..d5a992c8 100644 --- a/website/docsPlugin.ts +++ b/website/docsPlugin.ts @@ -1,12 +1,61 @@ -module.exports = function(context, options) { - return { - name: "custom-docusaurus-plugin", - configureWebpack(config, isServer, utils) { - return { - resolve: { - symlinks: false - } - }; - } - }; - }; \ No newline at end of file +const path = require("path"); +const webpack = require("webpack"); + +// d3-dag's `exports` map blocks deep subpath imports, so resolve the ESM build +// as an absolute filesystem path (a sibling of the CJS `main` entry) — this +// bypasses the exports map, and an absolute alias target resolves directly. +const d3dagEsm = path.join( + path.dirname(require.resolve("d3-dag")), + "d3-dag.esm.min.mjs", +); + +module.exports = function (context, options) { + return { + name: "custom-docusaurus-plugin", + configureWebpack(config, isServer, utils) { + return { + resolve: { + symlinks: false, + alias: { + // The Lectern dictionary viewer (embedded in the Building + // Dictionaries playground) depends on d3-dag. d3-dag's CJS `main` + // build (which webpack picks when the CJS Lectern bundle require()s + // it) references Node built-ins (fs, vm, child_process, ...) in + // code paths that never run in the browser, which breaks the web + // bundle. Its ESM build is free of those references, so point the + // bare `d3-dag` specifier at it. + "d3-dag$": d3dagEsm, + }, + // Safety net: stub any remaining Node core-module references reached + // through browser-only third-party code so the web build never tries + // to bundle them. + fallback: { + fs: false, + path: false, + os: false, + vm: false, + url: false, + crypto: false, + stream: false, + module: false, + worker_threads: false, + child_process: false, + }, + }, + // d3-dag's CJS build carries a dynamic `require(expr)` in a code path + // the browser never reaches; it only lands in the server bundle (the + // playground is browser-only and never executes during SSR). Silence + // the resulting "Critical dependency" warning so the build stays clean. + ignoreWarnings: [{ module: /d3-dag/ }], + plugins: [ + // Rewrite `node:`-scheme built-in imports (e.g. `node:vm`) to their + // bare specifiers so the fallback stubs above can catch them; without + // this webpack throws UnhandledSchemeError on the web target. + new webpack.NormalModuleReplacementPlugin(/^node:/, (resource) => { + resource.request = resource.request.replace(/^node:/, ""); + }), + ], + }; + }, + }; +}; diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index 477533e3..e652faf6 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -4,7 +4,7 @@ import type * as Preset from "@docusaurus/preset-classic"; const config: Config = { title: "Overture Docs", - tagline: "Resources for Developers & Informaticians", + tagline: "Resources for Developers, Operators & Informaticians", favicon: "img/favicon.ico", // Set the production url of your site here @@ -19,7 +19,6 @@ const config: Config = { projectName: "Overture Docs", // Usually your repo name. onBrokenLinks: "throw", - onBrokenMarkdownLinks: "warn", headTags: [ { @@ -29,6 +28,24 @@ const config: Config = { content: "same-origin", }, }, + { + tagName: "link", + attributes: { rel: "preconnect", href: "https://fonts.googleapis.com" }, + }, + { + tagName: "link", + attributes: { + rel: "preconnect", + href: "https://fonts.gstatic.com", + crossorigin: "anonymous", + }, + }, + ], + + // Lato is the Overture brand typeface (matches overture.bio); it is the base + // font via --ifm-font-family-base in src/css/custom.css. + stylesheets: [ + "https://fonts.googleapis.com/css2?family=Lato:ital,wght@0,400;0,700;0,900;1,400;1,700&display=swap", ], // Even if you don't use internationalization, you can use this field to set @@ -44,34 +61,281 @@ const config: Config = { [ "@docusaurus/plugin-content-docs", { - id: "guides", - path: "guides", - routeBasePath: "guides", - sidebarPath: require.resolve("./guidesSidebars.ts"), + id: "community", + // Source dir is "docs/community-docs" for consistency with the other + // journeys (develop, deploy, use), which all live under website/docs/. + path: "docs/community-docs", + routeBasePath: "community", + sidebarPath: require.resolve("./communitySidebars.ts"), + // The documentation-standards content is vendored (.github submodule) + // and may carry dead /guides links (see remark/unlink-legacy-paths.js). + remarkPlugins: [require("./remark/unlink-legacy-paths")], }, ], [ "@docusaurus/plugin-content-docs", { - id: "workshop", - path: "workshop", - routeBasePath: "workshop", - sidebarPath: require.resolve("./workshopSidebars.ts"), + id: "develop", + path: "docs/develop-docs", + routeBasePath: "develop", + sidebarPath: require.resolve("./developSidebars.ts"), + // The per-component docs (Song, Maestro, ...) are vendored from each + // component's own submodule and may carry dead /guides links (see + // remark/unlink-legacy-paths.js). + remarkPlugins: [require("./remark/unlink-legacy-paths")], }, ], [ "@docusaurus/plugin-content-docs", { - id: "community", - path: "community", - routeBasePath: "community", - sidebarPath: require.resolve("./communitySidebars.ts"), + id: "deploy", + path: "docs/deploy-docs", + routeBasePath: "deploy", + sidebarPath: require.resolve("./deploySidebars.ts"), + }, + ], + [ + "@docusaurus/plugin-content-docs", + { + id: "use", + path: "docs/use-docs", + routeBasePath: "use", + sidebarPath: require.resolve("./useSidebars.ts"), + }, + ], + [ + // Preserves old URLs after the Deploy·Build·Use IA migration so external + // links, bookmarks, and cross-links from vendored component docs (which + // this repo cannot edit) don't 404. + "@docusaurus/plugin-client-redirects", + { + redirects: [ + // Guides -> journeys + { to: "/deploy", from: ["/guides", "/guides/getting-started"] }, + { to: "/deploy/deployment", from: "/guides/deployment-guide" }, + { + to: "/deploy/deployment/keycloak", + from: "/guides/deployment-guide/authorization", + }, + { + to: "/deploy/deployment/file-transfer", + from: [ + "/guides/deployment-guide/data-management-storage", + "/deploy/deployment/data-management-storage", + ], + }, + { + to: "/deploy/deployment/search-portal", + from: "/guides/deployment-guide/search-portal", + }, + // Administration guides moved from Deploy to Use (Administrators); + // the overview content now lives on the main Use overview page. + { + to: "/use", + from: ["/guides/administration-guides", "/deploy/administration"], + }, + // Renamed from "Updating the Data Model" for clarity (it's + // specifically about Song's metadata schemas) + { + to: "/use/administration/building-song-schemas", + from: [ + "/guides/administration-guides/updating-the-data-model", + "/deploy/administration/updating-the-data-model", + "/use/administration/updating-the-data-model", + ], + }, + { + to: "/use/administration/index-mappings", + from: [ + "/guides/administration-guides/index-mappings", + "/deploy/administration/index-mappings", + ], + }, + { + to: "/use/administration/customizing-the-data-portal", + from: [ + "/guides/administration-guides/customizing-the-data-portal", + "/deploy/administration/customizing-the-data-portal", + ], + }, + { to: "/use", from: "/guides/user-guides" }, + { + to: "/use/cli-submissions", + from: "/guides/user-guides/cli-submissions", + }, + { + to: "/use/cli-downloads", + from: "/guides/user-guides/cli-downloads", + }, + { + to: "/develop/api-reference", + from: ["/guides/api-reference", "/build/api-reference"], + }, + // Platform Tools -> Deploy + { to: "/deploy", from: "/docs/platform-tools" }, + { to: "/deploy/prelude", from: "/docs/platform-tools/prelude" }, + // The Quickstart page was retired with the prelude `quickstart` branch + // (2026-07-30). Components now document their own development + // environments; this redirect lands on Prelude, its nearest successor. + { to: "/deploy/prelude", from: "/docs/platform-tools/quickstart" }, + // Docs -> Develop + { + to: "/develop/contributing", + from: ["/docs/contribution", "/build/contributing"], + }, + // Documentation standards moved from Build to Community (the + // /build/documentation-standards -> /community/... redirect is + // handled by createRedirects below, alongside its subpages) + { + to: "/community/documentation-standards/documentation-standards", + from: "/docs/documentation-standards", + }, + // Workshop -> Use + { to: "/use/workshop/prerequisites", from: "/workshop" }, + { + to: "/use/workshop/prerequisites", + from: "/workshop/prerequisites", + }, + { + to: "/use/workshop/running-the-demo", + from: "/workshop/running-the-demo", + }, + { + to: "/use/workshop/architecture", + from: "/workshop/architecture", + }, + { + to: "/use/workshop/data-preparation", + from: "/workshop/data-preparation", + }, + { + to: "/use/workshop/generating-configurations", + from: "/workshop/generating-configurations", + }, + { + to: "/use/workshop/docker-configuration", + from: "/workshop/docker-configuration", + }, + { + to: "/use/workshop/loading-data", + from: "/workshop/loading-data", + }, + { + to: "/use/workshop/troubleshooting", + from: "/workshop/troubleshooting", + }, + { + to: "/use/workshop/portal-customization", + from: "/workshop/portal-customization", + }, + { to: "/use/workshop/next-steps", from: "/workshop/next-steps" }, + { + to: "/use/workshop/extension-task", + from: "/workshop/extension-task", + }, + // Reference folded into Develop (formerly named Build) + { + to: "/develop", + from: ["/docs", "/docs/getting-started", "/build"], + }, + // Arranger docs reshuffle: the "AI and automation" reference page + // became the standalone "Arranger MCP server" page, and the + // migration guides moved under Reference. + { + to: "/develop/Arranger/mcp-server", + from: "/develop/Arranger/reference/ai-and-automation", + }, + { + to: "/develop/Arranger/reference/Migration/v3.1", + from: "/develop/Arranger/migration/v3.1", + }, + // Pages retired by the component usage/ -> reference/ restructure + // that have no like-for-like successor, so createRedirects (which + // only rewrites the /develop, /build, /docs prefix) cannot cover + // them. Each target must be a page that exists in the build -- + // plugin-client-redirects fails on a `to` it cannot resolve. + // + // Maestro V5 does not implement exclusion rules or Slack + // notifications; both pages are now draft: true and absent from + // production builds, so these land on the Reference index. + { + // Trailing slash required: category index routes carry one, and + // the plugin validates `to` against the exact route path. + to: "/develop/Maestro/reference/", + from: [ + "/develop/Maestro/usage/exclusion-rules", + "/develop/Maestro/usage/slack-notifications", + ], + }, + // Song's standalone custom-schemas page is gone; its Options content + // is now the "Schema Options" section of Data Model Management. + { + to: "/develop/Song/Reference/data-model-management", + from: "/develop/Song/custom-schemas", + }, + // Lyric's single placeholder page became Overview + Setup. + { + to: "/develop/Lyric/overview", + from: "/develop/Lyric/lyric", + }, + ], + // Component reference moved from /docs/* to /build/* (Reference folded + // into Build), then from /build/core-software/* to /build/* (the + // "Core Software" dropdown was flattened), then from /build/* to + // /develop/* (Build renamed to Develop); redirect every such page. + createRedirects(existingPath) { + const components = [ + "Lectern", + "Lyric", + "Song", + "Score", + "Maestro", + "Arranger", + "Stage", + ]; + for (const component of components) { + const prefix = `/develop/${component}`; + if ( + existingPath === prefix || + existingPath.startsWith(`${prefix}/`) + ) { + const rest = existingPath.slice("/develop/".length); + return [ + `/docs/core-software/${rest}`, + `/build/core-software/${rest}`, + `/build/${rest}`, + ]; + } + } + // Documentation standards moved from /build/documentation-standards/* + // to /community/documentation-standards/documentation-standards/*. + if ( + existingPath.startsWith( + "/community/documentation-standards/documentation-standards", + ) + ) { + return existingPath.replace( + "/community/documentation-standards/documentation-standards", + "/build/documentation-standards", + ); + } + if (existingPath.startsWith("/community/documentation-standards/")) { + return existingPath.replace( + "/community/documentation-standards/", + "/build/documentation-standards/", + ); + } + return undefined; + }, }, ], ], markdown: { mermaid: true, + hooks: { + onBrokenMarkdownLinks: "warn", + }, }, themes: ["@docusaurus/theme-mermaid"], @@ -79,22 +343,17 @@ const config: Config = { [ "classic", { - docs: { - sidebarPath: "./sidebars.ts", - // Please change this to your repo. - // Remove this to remove the "edit this page" links. - editUrl: "https://github.com/overture-stack/docs", - }, - // Please change this to your repo. + // The default docs instance is disabled: the component reference now + // lives under the Develop journey (the "develop" plugin-content-docs + // instance above, served at /develop/*). + docs: false, blog: { showReadingTime: true, feedOptions: { type: ["rss", "atom"], xslt: true, }, - // Remove this to remove the "edit this page" links. - editUrl: - "https://github.com/overture-stack/docs/tree/main/packages/create-docusaurus/templates/shared/", + editUrl: "https://github.com/overture-stack/docs", // Useful options to enforce blogging best practices onInlineTags: "warn", onInlineAuthors: "warn", @@ -117,22 +376,19 @@ const config: Config = { src: "img/Overture-logo.png", }, items: [ - { to: "/guides/getting-started", label: "Guides", position: "left" }, + { to: "/develop", label: "Develop", position: "left" }, + { to: "/deploy", label: "Deploy", position: "left" }, + { to: "/use", label: "Use", position: "left" }, { - type: "docSidebar", - sidebarId: "docsSidebar", - position: "left", - label: "Documentation", - }, - { - to: "/workshop/prerequisites", - label: "Workshop", - position: "left", + to: "/community/support", + label: "Community", + position: "right", + className: "navbar__item--community", }, { - to: "/community/support", - label: "Community & Support", - position: "left", + href: "https://github.com/overture-stack/docs/discussions?discussions_q=", + label: "Support Forum", + position: "right", }, { href: "https://github.com/overture-stack", @@ -148,20 +404,16 @@ const config: Config = { title: "Docs", items: [ { - label: "Platform Guides", - to: "/guides/getting-started", - }, - { - label: "Developer Documentation", - to: "/docs/getting-started", + label: "Develop", + to: "/develop", }, { - label: "Under Development", - to: "/docs/under-development/", + label: "Deploy", + to: "/deploy", }, { - label: "Workshops", - to: "/workshop/prerequisites", + label: "Use", + to: "/use", }, ], }, @@ -200,7 +452,7 @@ const config: Config = { ], }, ], - copyright: `Copyright © ${new Date().getFullYear()} Overture, Inc. Built with Docusaurus.`, + copyright: `Copyright © ${new Date().getFullYear()} Copyright © 2026 Ontario Institute for Cancer Research. Built with Docusaurus.`, }, prism: { theme: prismThemes.github, diff --git a/website/guides/00-getting-started.mdx b/website/guides/00-getting-started.mdx deleted file mode 100644 index 2b2c7568..00000000 --- a/website/guides/00-getting-started.mdx +++ /dev/null @@ -1,74 +0,0 @@ -# Getting Started - -Welcome to the Overture platform guides. Here you'll find comprehensive information on deploying and using Overture microservices as an integrated platform. Our guides currently cover the following key areas: - - - -:::tip Help us make our guides better -If you can't find what you're looking for please don't hesitate to reach out through our relevant [**community support channels**](https://docs.overture.bio/community/support). -::: - -## Overture Platform Quick Start - -![Overture Platform Quickstart](./images/core-software.webp "Overture Platform Quickstart") - -For a rapid, hassle-free setup of the Overture data platform on your local machine, follow these steps: - -1. **Set Up Docker:** Install or update to Docker Desktop version 4.39.0 or higher. Visit [Docker's website](https://www.docker.com/products/docker-desktop/) for installation details. - - :::important - Allocate sufficient resources to Docker: - - - Minimum CPU: `8 cores` - - Memory: `8 GB` - - Swap: `2 GB` - - Virtual disk: `64 GB` - - Adjust these in Docker Desktop settings under "Resources". - ::: - -2. **Clone the Repository** - - ```bash - git clone -b quickstart https://github.com/overture-stack/prelude.git - ``` - -3. **Launch the Platform:** Run the appropriate command for your operating system: - - - For Unix/macOS run `make platform` - - For Windows run`./make.bat platform` - -This will deploy the following services in Docker: - -![Overture Platform Architecture](./images/platform.svg "Overture Platform") - -:::info Get Started with Our Platform Guides -Check out our [**administration**](/guides/administration-guides/) and [**user guides**](/guides/user-guides/) for detailed guidance on using the platform. -::: diff --git a/website/guides/01-deployment-guide/01-authorization.md b/website/guides/01-deployment-guide/01-authorization.md deleted file mode 100644 index 9d29fcf8..00000000 --- a/website/guides/01-deployment-guide/01-authorization.md +++ /dev/null @@ -1,76 +0,0 @@ -# Authorization - -Keycloak will be set up first to broker authorization tokens, enabling secure communication for Overture services. - -## Setting up the Keycloak database - -1. **Run PostgreSQL:** Use the following command to pull and run the PostgreSQL docker container - - ```bash - docker run --name keycloak-db \ - -e POSTGRES_USER=admin \ - -e POSTGRES_PASSWORD=admin123 \ - -e POSTGRES_DB=keycloakDb \ - -v ./persistentStorage/keycloak-db-data:/var/lib/postgresql/data \ - -d postgres:14 - ``` - - This command runs a postgres image named `keycloak-db` with the username `admin`, password `admin123` and a database within it called `keycloakDb`. - - :::info Persistent Volumes - It also includes a defined persistent volume `-v./persistentStorage/keycloak-db-data:/var/lib/postgresql/data `. This volume will be a folder generated at runtime that will serve as local persistent storage within your directory. This means the data in your database is backed up outside of docker. - ::: - -## Setting up Keycloak - -1. **Create a folder titled `keycloakConfigs` and place the following configuration files within it:** - - - The **[Overture API Key Provider](https://github.com/oicr-softeng/keycloak-apikeys/releases/download/1.0.1/keycloak-apikeys-1.0.1.jar)**, for extending Keycloak's functionality to support API key authentication. - - - The **[Realm.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/keycloakConfigs/myrealm-realm.json)**, containing pre-configured settings for our Overture Keycloak realm. - - - The **[Users.json](https://github.com/overture-stack/composer/blob/develop/configurationFiles/keycloakConfigs/myrealm-users-0.json)**, containing pre-configured user information to populate the realm. - - -2. **Run Keycloak:** To deploy Keycloak, execute the following command. Make sure to run it in the directory containing the files mentioned above. - - ```bash - docker run -d --name keycloak \ - -p 8180:8080 \ - -e KC_DB=postgres \ - -e KC_DB_USERNAME=admin \ - -e KC_DB_PASSWORD=admin123 \ - -e KC_DB_URL=jdbc:postgresql://keycloak-db:5432/keycloakDb \ - -e KEYCLOAK_ADMIN=admin \ - -e KEYCLOAK_ADMIN_PASSWORD=admin123 \ - -e KC_HOSTNAME=localhost \ - -e KC_HEALTH_ENABLED=true \ - -v ./configurationFiles/keycloakConfigs/keycloak-apikeys-1.0.1.jar:/opt/keycloak/providers/keycloak-apikeys.jar \ - -v ./configurationFiles/keycloakConfigs/myrealm-realm.json:/opt/keycloak/data/import/myrealm-realm.json \ - -v ./configurationFiles/keycloakConfigs/myrealm-users-0.json:/opt/keycloak/data/import/myrealm-users-0.json \ - quay.io/keycloak/keycloak:22.0 \ - start-dev --import-realm --hostname-port=8180 - ``` - - Once running, you will be able to access the Keycloak admin console from `http://localhost:8180/admin` - -
- For more details, click here - - - **Local Port Mapping:** The `-p 8180:8080` option maps port `8180` on the host machine to port `8080` inside the Docker container. This is crucial as port `8080` is the default port Keycloak listens on, but it's often occupied by other services. By mapping it to port 8180 on the host, we are ensuring that Keycloak remains accessible without interfering with other services running on the same machine. - - - **Configuration Files:** The `-v` options mount the local directories containing the Keycloak configuration files (`realm.json`, `users.json`, and the `API key provider JAR`) to the corresponding paths inside the container. This ensures that Keycloak starts with the desired realm configuration and user definitions, as well as the extended functionality provided by the API key provider. - - - **Base Image:** `quay.io/keycloak/keycloak:22.0` specifies the Docker image to use, which is version 22.0 of Keycloak from Quay.io. This image includes Keycloak and all its dependencies, optimized for performance and security. - - - **Start Command:** The `start-dev` argument passed to the container instructs Keycloak to start in development mode. This mode is suitable for our example deployment. A production deployment is largely the same with the exception of requiring an SSL certificate on startup. - - - **Realm Import:** The `--import-realm` flag tells Keycloak to import the realm configuration from the specified JSON file upon startup. This is essential for setting up realms with predefined roles, users, and other settings without requiring manual configurations. - - - **Database Connection:** The database-related flags (`--db`, `--db-url`, `--db-username`, `--db-password`) configure Keycloak to connect to the PostgreSQL database. These settings are critical for persisting user data, sessions, and other operational data securely and reliably. - -
- - :::info Server Deployments - If you are looking for information on deploying Keycloak on a server, we recommend seeing [Keycloak's official server documentationhttps://www.keycloak.org/guides##server). Should you require assistance with deployments tailored to your specific needs, please feel free to reach out to us for consultation at contact@overture.bio. - ::: diff --git a/website/guides/02-administration-guides/02-administration-guides.md b/website/guides/02-administration-guides/02-administration-guides.md deleted file mode 100644 index f830614e..00000000 --- a/website/guides/02-administration-guides/02-administration-guides.md +++ /dev/null @@ -1,55 +0,0 @@ -# Administration Guides - -- **These guides are for** anyone seeking information on configuring and using Overture as their platform's foundation. We will walk you through the essential information for configuring it. - -- **You will need** Docker, we recommend using Docker Desktop version `4.39.0` or higher. If you already have Docker installed, please ensure it's up to date. For more information see, [Docker's website here](https://www.docker.com/products/docker-desktop/). - - :::caution - **Note:** Ensure enough resources get allocated to Docker. We recommend a minimum CPU limit of `8`, memory limit of `8 GB`, swap of `2 GB`, and virtual disk limit of `64 GB`. You can access these settings by selecting the **cog wheel** found on the top right of the Docker desktop app and selecting **resources** from the left panel. **If you already have docker desktop installed, ensure you are on version 4.39.0 or higher**. - ::: - -- **Overview:** This guide covers basic administration tasks associated with setting up and maintaining an Overture platform. Topics covered include: - - - **[Updating the Data Model](/guides/administration-guides/updating-the-data-model):** Learn how to update your data model to reflect your data requirements - - - **[Index Mappings](/guides/administration-guides/updating-the-data-model):** Understand what Index mappings are and how to configure them - - - **[Search Portal Customization](/guides/administration-guides/updating-the-data-model):** Learn how to customize how data is displayed in your front-end data facets and table components - - :::tip Help us make our guides better - If you can't find what you're looking for please don't hesitate to reach out through our relevant [**community support channels**](https://docs.overture.bio/community/support). - ::: - -# Getting Started - -For a rapid, hassle-free setup of an Overture data platform on your local machine, follow these steps: - -1. **Set Up Docker:** Install or update to Docker Desktop version 4.39.0 or higher. Visit [Docker's website](https://www.docker.com/products/docker-desktop/) for installation details. - - :::important - Allocate sufficient resources to Docker: - - - Minimum CPU: `8 cores` - - Memory: `8 GB` - - Swap: `2 GB` - - Virtual disk: `64 GB` - - Adjust these in Docker Desktop settings under "Resources". - ::: - -2. **Clone the Repository** - - ```bash - git clone -b quickstart https://github.com/overture-stack/prelude.git - ``` - -3. **Launch the Platform:** Run the appropriate command for your operating system: - - | OS | Command | - | ---------- | --------------------- | - | Unix/macOS | `make platform` | - | Windows | `./make.bat platform` | - - This will deploy the following services in Docker: - - ![Overture Platform Architecture](../images/platform.svg "Overture Platform") diff --git a/website/guides/03-user-guides/01-cli-submissions.md b/website/guides/03-user-guides/01-cli-submissions.md deleted file mode 100644 index 51b86a87..00000000 --- a/website/guides/03-user-guides/01-cli-submissions.md +++ /dev/null @@ -1,1114 +0,0 @@ -# CLI Submission - -**This guide is for** anyone seeking guidance on submitting data to an Overture platform. By the end of this guide you will have completed a full data submission workflow, including updating the submitted data to conform to the data model enforced by Song. - -**You will need** docker installed. We recommend using Docker Desktop; for more information, visit [Docker's website](https://www.docker.com/products/docker-desktop/). - -**Background:** Submitting data to an Overture platform typically includes data files (BAMS, CRAMS, VCFs, etc.) along with associated metadata that provides context including donor information and descriptions of the data files. This guide focuses on submitting data to Song & Score using their Command Line Clients (CLIs). - -#### Visual Summary: - -![Submission Overview](../images/dataSubmission.webp "End Goal") - -### Getting Started - -**1. Clone the Quickstart repository** - - ```bash - git clone https://github.com/overture-stack/composer.git - ``` - -**2. With Docker open, run the docker-compose** - - ```bash - docker compose up --attach conductor - ``` - - :::caution - **Ensure enough resources get allocated to Docker** We recommend a minimum CPU limit of `8`, memory limit of `8 GB`, swap of `2 GB`, and virtual disk limit of `64 GB`. You can access these settings by selecting the **cog wheel** found on the top right of the Docker desktop app and selecting **resources** from the left panel. **If you already have docker desktop installed, ensure you are on version 4.39.0 or higher** - ::: - -## CLI Submssion - -### Generate an API Key - -API Keys are brokered by Keycloak and accessible when logged in to the Stage UI. For the Overture QuickStart, Stage can access from `localhost:3000` - -1. **Login through the Stage UI** by selecting login from the top right. The default credentials will be username `admin` and password `admin123` when using the Overture QuickStart. - -2. **Once logged in, it's time to generate a new API token:** To do this, click on **Profile and Token** from your user drop down menu, located on the top right of the Stage UI. Then, select **Generate New Token**. - -![Accessing an API Key](../images/apikeys.png "Accessing an API Key") - -### Run the Song & Score Clients - -1. **Running the Song Client:** Use the following command with your API token to pull and run a Song Client docker container - - ```bash - docker run -d -it --name song-client \ - -e CLIENT_ACCESS_TOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528 \ - -e CLIENT_STUDY_ID=demo \ - -e CLIENT_SERVER_URL=http://localhost:8080 \ - --network="host" \ - --platform="linux/amd64" \ - --mount type=bind,source=./guideMaterials/dataSubmission,target=/output \ - ghcr.io/overture-stack/song-client:5.1.1 - ``` - -
- Click here for a detailed breakdown - - - `-d` runs the container in detached mode, meaning it runs in the background and does not receive input or display output in the terminal - - - `-it` combines the `-i` (interactive) and `-t` (allocate a pseudo-TTY) options, allowing you to interact with the container via the terminal - - - `-e CLIENT_ACCESS_TOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528` sets up the song-client with a pre-configured system-wide access token. Alternatively, you can log in through Stage from `localhost:3000/login` with the username `admin` and password `admin123`. From the profile page, you can generate your API key and supply it here - - - `-e CLIENT_STUDY_ID=demo` the quickstart is pre-configured with a `Study ID` named `demo`, we supply the `Study ID` value to the song-client on start-up - - - `-e CLIENT_SERVER_URL=http://localhost:8080` is the url for the Song server which the Song-Client will interact with - - - `--network="host"` Uses the host network stack inside the container, bypassing the usual network isolation. This means the container shares the network namespace with the host machine - - - `--platform="linux/amd64"` Specifies the platform the container should emulate. In this case, it's set to linux/amd64, indicating the container is intended to run on a Linux system with an AMD64 architecture - - - `--mount type=bind,source=./guideMaterials/dataSubmission,target=/output` mounts the directory and its contents (volume) from the host machine to the container. In this case, the mockData being used for our submission. It binds the directory ./guideMaterials/dataSubmission from the host to /output inside the container. Any changes made to the files in this directory will be reflected in both locations - -
- - :::caution - **Note:** Ensure you are running the following commands from the root directory of the quickstart folder. The values here reflect those compatible with the Overture QuickStart. - ::: - -2. **Running the Score Client:** Use the following command with your API token to pull and run a Score Client docker container - - ```bash - docker run -d -it --name score-client \ - -e ACCESSTOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528 \ - -e STORAGE_URL=http://localhost:8087 \ - -e METADATA_URL=http://localhost:8080 \ - --network="host" \ - --platform="linux/amd64" \ - --mount type=bind,source=./guideMaterials/dataSubmission,target=/output \ - ghcr.io/overture-stack/score:latest - ``` - -
- Click here for a detailed breakdown - - - `-d` runs the container in detached mode, meaning it runs in the background and does not receive input or display output in the terminal - - - `-it` combines the `-i` (interactive) and `-t` (allocate a pseudo-TTY) options, allowing you to interact with the container via the terminal - - - `-e ACCESSTOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528` sets up the score-client with a pre-configured system-wide access token. Alternatively, you can log in to Stage from `localhost:3000/login` with the username `admin` and password `admin123`. From the profile page, you can generate your API key and supply it here - - - `-e STORAGE_URL=http://score:8087` is the url for the Score server that the Score-Client will interact with - - - `-e METADATA_URL=http://song:8080` is the url for the song server that the score-client will interact with - - - `--network="host"` Uses the host network stack inside the container, bypassing the usual network isolation. This means the container shares the network namespace with the host machine - - - `--platform="linux/amd64"` Specifies the platform the container should emulate. In this case, it's set to linux/amd64, indicating the container is intended to run on a Linux system with an AMD64 architecture - - - `--mount type=bind,source=./guideMaterials/dataSubmission,target=/output` mounts the directory and its contents (volume) from the host machine to the container. In this case, the mockData being used for our submission. It binds the directory ./guideMaterials/dataSubmission from the host to /output inside the container. Any changes made to the files in this directory will be reflected in both locations - -
- - :::caution - **Note:** Ensure you are running the following commands from the root directory of the quickstart folder. The values here reflect those compatible with the Overture QuickStart. - ::: - -### Submit metadata to Song - -#### What are we submitting? - -We will now begin submitting our payload to the Overture platform. In this context a payload refers to a collection of related metadata and file data to be uploaded to the resource. - -- The mock data we will use can be found in the Overture Quickstart repository from the
composer/guideMaterials/dataSubmission/ directory - -- The files included are two VCF data files (`SP059902.snv.vcf.gz` and `SP059902.snv.vcf.gz.tbi`) and a JSON file, `SP059902.vcf.json` that contains all the associated metadata - -
- Click here to view the metadata file (SP059902.vcf.json) - - ```JSON - { - "studyId": "demo", - "analysisType": { - "name": "quickStartSchema" - }, - "collaborator": [ - { - "name": "IICR", - "contactEmail": "dataSubmitter@example.com" - } - ], - "samples": [ - { - "submitterSampleId": "SP059902", - "sampleType": "Total DNA", - "matchedNormalSubmitterSampleId": null, - "specimen": { - "submitterSpecimenId": "SP059902", - "specimenType": "Normal - tissue adjacent to primary tumour", - "tumourNormalDesignation": "Normal", - "specimenTissueSource": "Blood derived - bone marrow" - }, - "donor": { - "submitterDonorId": "DO0599", - "gender": "Female" - } - } - ], - "files": [ - { - "dataType": "Raw SV Calls", - "fileName": "SP059902.snv.vcf.gz", - "fileSize": 17246, - "fileMd5sum": "94b790078d8e98ad08ffc42389e2fa68", - "fileAccess": "open", - "fileType": "VCF", - "info": { - "dataCategory": "Simple Nucelotide Variation", - "jbrowseCoordinates": "hg38:chr1:100000-200000" - } - }, - { - "dataType": "Raw SV Calls", - "fileName": "SP059902.snv.vcf.gz.tbi", - "fileSize": 141, - "fileMd5sum": "f5cca6ace25d076d1f76cebf4ce3defd", - "fileAccess": "open", - "fileType": "TBI", - "info": { - "dataCategory": "Simple Nucelotide Variation", - "jbrowseCoordinates": "hg38:chr1:100000-200000" - } - } - ], - "specimen": { - "submitterPrimaryDiagnosisId": "PD059901", - "submitterSpecimenId": "SP059902", - "specimenAnatomicLocation": "C31", - "tumourGradingSystem": "Nuclear grading system for DCIS", - "tumourGrade": "G1" - }, - "donor": { - "submitterDonorId": "DO0599", - "primarySite": "Trachea", - "vitalStatus": "Alive", - "survivalTime": null, - "causeOfDeath": null, - "primaryDiagnosis": [ - { - "submitterPrimaryDiagnosisId": "PD059901", - "ageAtDiagnosis": 50, - "cancerTypeCode": "C34.2", - "clinicalTumourStagingSystem": "Binet staging system", - "clinicalStageGroup": "Stage A", - "treatment": [ - { - "submitterTreatmentId": "TR059901", - "treatmentType": [ - "Chemotherapy" - ], - "treatmentStartInterval": 58, - "treatmentDuration": 52, - "responseToTreatment": "Complete response", - "chemotherapy": [ - { - "drugName": "Tamoxifen " - } - ] - } - ], - "followUp": [ - { - "submitterFollowUpId": "FO059901", - "submitterTreatmentId": "TR059901", - "intervalOfFollowUp": 45, - "diseaseStatusAtFollowUp": "Stable", - "relapseType": null - } - ] - } - ] - }, - "experiment": { - "platform": "PacBio", - "experimentalStrategy": "WXS", - "model": "SEQUEL IIe", - "sequencingCenter": "CGTA", - "sequencingDate": "2021-03-08T19:00:00.000Z" - }, - "workflow": { - "workflowName": "Mutect2 Variant Calling", - "workflowShortName": "Mutect2Variant", - "workflowVersion": "0.1.1.1", - "genomeBuild": "GRCh38_hla_decoy_ebv", - "inputs": [ - { - "analysisType": "sequencing_alignment", - "tumourAnalysisId": "00000000-0000-0000-0000-0000000000599", - "normalAnalysisId": "00000000-0000-0000-0000-0000000000599" - } - ], - "runId": "RI0599", - "sessionId": "SI0599" - }, - "publication": { - "publication": "NAR", - "doi": "10.1093/nar/gkae188" - } - } - ``` - -
- -#### The Submission Command - -First we will submit the JSON metadta file to Song using the song-client `submit` command: - - ```bash - docker exec song-client sh -c "sing submit -f /output/SP059902.vcf.json" - ``` - -#### Expected Error Response - -When submitting data, Song checks the metadata against the specified data model, identified by the analysisType field located on line 4 of the SP059902.vcf.json file. The error logs indicate that the submitted metadata does not conform to this data model: - - ```bash - SONG_SERVER_ERROR[schema.violation @ 1719691299284]: [SubmitService::schema.violation] - ##/collaborator/0: required key [name] not found,##/donor/primarySite: Windpipe is not a valid enum value - ``` - -**The error log tells us the following:** - -- We are missing the required `collaborator.name` field - -- The value `Windpipe` is not valid entry for the field `primarySite` - -**Addressing the missing field:** - -We will address our first error by updating our metadata payload with a collaborator `name`. To do this we will append lines 6 to 10 as follows: - - ```JSON - "collaborator": [ - { - "name": "IICR", - "contactEmail": "dataSubmitter@example.com" - } - ], - ``` - -Feel free to provide any name value you like, in this example we are submitting from the Imaginary Institute for Cancer Research (IICR). - -**Addressing the invalid value:** - -To address our second error we will have to take a look at the resources data model. For convenience we are providing the relevant Song schema below however, if you're interested in learning how to access this information through Songs API, we've provided additional instructions below. - -
- View Song Schema - ```json - { - "name": "quickStartSchema", - "schema": { - "type": "object", - "required": ["donor", "specimen", "workflow", "experiment"], - "properties": { - "workflow": { - "propertyNames": { - "enum": ["workflowName", "workflowShortName", "workflowVersion", "genomeBuild", "inputs","sessionId","runId"] - }, - "required": ["workflowName", "genomeBuild", "inputs"], - "type": "object", - "properties": { - "workflowName": { - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9 _\\-]+[a-zA-Z0-9]+$" - }, - "workflowShortName": { - "type": "string", - "pattern": "^[a-zA-Z][a-zA-Z0-9_\\-]+[a-zA-Z0-9]+$" - }, - "workflowVersion": { - "type": "string" - }, - "genomeBuild": { - "type": "string", - "enum": ["GRCh37", "GRCh38_hla_decoy_ebv", "GRCh38_Verily_v1"] - }, - "inputs": { - "type": "array", - "items": { - "type": "object", - "properties": { - "tumourAnalysisId": { - "type": "string", - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{13}$" - }, - "normalAnalysisId": { - "type": "string", - "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{13}$" - }, - "analysisType": { - "type": "string" - } - } - }, - "minItems": 1, - "maxItems": 2 - }, - "runId": { - "type": "string" - }, - "sessionId": { - "type": "string", - "pattern": "SI[0-9]{4}" - } - } - }, - "experiment": { - "propertyNames": { - "enum": [ - "platform", - "experimentalStrategy", - "model", - "sequencingCenter", - "sequencingDate" - ] - }, - "required": ["platform", "experimentalStrategy"], - "type": "object", - "properties": { - "platform": { - "type": ["string", "null"] - }, - "experimentalStrategy": { - "type": ["string", "null"] - }, - "model": { - "type": ["string", "null"] - }, - "sequencingCenter": { - "type": ["string", "null"] - }, - "sequencingDate": { - "type": ["string", "null"], - "pattern": "^(-?(?:[1-9][0-9]*)?[0-9]{4})-(1[0-2]|0[1-9])-(3[01]|0[1-9]|[12][0-9])T(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]+)?(Z|[+-](?:2[0-3]|[01][0-9]):[0-5][0-9])?$" - } - } - }, - "donor": { - "type": "object", - "propertyNames": { - "enum": [ - "submitterDonorId", - "primarySite", - "vitalStatus", - "survivalTime", - "causeOfDeath", - "primaryDiagnosis" - ] - }, - "required": ["submitterDonorId", "primarySite", "vitalStatus", "primaryDiagnosis"], - "properties": { - "submitterDonorId": { - "type": "string" - }, - "primarySite": { - "type": "string", - "enum": [ - "Accessory sinuses", - "Adrenal gland", - "Base of tongue", - "Bladder", - "Bones, joints and articular cartilage of limbs", - "Bones, joints and articular cartilage of other and unspecified sites", - "Brain", - "Breast", - "Bronchus and lung", - "Cervix uteri", - "Colon", - "Connective, subcutaneous and other soft tissues", - "Corpus uteri", - "Esophagus", - "Eye and adnexa", - "Floor of mouth", - "Gallbladder", - "Gum", - "Heart, mediastinum, and pleura", - "Hematopoietic and reticuloendothelial systems", - "Hypopharynx", - "Kidney", - "Larynx", - "Lip", - "Liver and intrahepatic bile ducts", - "Lymph nodes", - "Meninges", - "Nasal cavity and middle ear", - "Nasopharynx", - "Oropharynx", - "Other and ill-defined digestive organs", - "Other and ill-defined sites", - "Other and ill-defined sites in lip, oral cavity and pharynx", - "Other and ill-defined sites within respiratory system and intrathoracic organs", - "Other and unspecified female genital organs", - "Other and unspecified major salivary glands", - "Other and unspecified male genital organs", - "Other and unspecified parts of biliary tract", - "Other and unspecified parts of mouth", - "Other and unspecified parts of tongue", - "Other and unspecified urinary organs", - "Other endocrine glands and related structures", - "Ovary", - "Palate", - "Pancreas", - "Parotid gland", - "Penis", - "Peripheral nerves and autonomic nervous system", - "Placenta", - "Prostate gland", - "Pyriform sinus", - "Rectosigmoid junction", - "Rectum", - "Renal pelvis", - "Retroperitoneum and peritoneum", - "Skin", - "Small intestine", - "Spinal cord, cranial nerves, and other parts of central nervous system", - "Stomach", - "Testis", - "Thymus", - "Thyroid gland", - "Tonsil", - "Trachea", - "Ureter", - "Uterus, NOS", - "Vagina", - "Vulva" - ] - }, - "vitalStatus": { - "type": "string", - "enum": ["Alive", "Deceased"] - }, - "survivalTime": { - "type": ["null", "integer"], - "minimum": 0 - }, - "causeOfDeath": { - "type": ["null", "string"], - "enum": ["Died of cancer", "Died of other reasons", "Unknown", null] - }, - "primaryDiagnosis": { - "type": "array", - "minItems": 1, - "items": { - "type": "object", - "propertyNames": { - "enum": [ - "submitterPrimaryDiagnosisId", - "ageAtDiagnosis", - "cancerTypeCode", - "clinicalTumourStagingSystem", - "clinicalStageGroup", - "treatment", - "followUp" - ] - }, - "required": ["submitterPrimaryDiagnosisId", "ageAtDiagnosis", "cancerTypeCode"], - "properties": { - "submitterPrimaryDiagnosisId": { - "type": "string" - }, - "ageAtDiagnosis": { - "type": "integer", - "minimum": 0 - }, - "cancerTypeCode": { - "type": "string", - "pattern": "^[C|D][0-9]{2}(.[0-9]{1,3}[A-Z]{0,1})?$" - }, - "clinicalTumourStagingSystem": { - "type": "string", - "enum": [ - "AJCC 8th edition", - "AJCC 7th edition", - "AJCC 6th edition", - "Ann Arbor staging system", - "Binet staging system", - "Durie-Salmon staging system", - "FIGO staging system", - "Lugano staging system", - "Rai staging system", - "Revised International staging system (RISS)", - "St Jude staging system" - ] - }, - "clinicalStageGroup": { - "type": "string", - "enum": [ - "Occult Carcinoma", - "Stage 0", - "Stage 0a", - "Stage 0is", - "Stage 1", - "Stage 1A", - "Stage 1B", - "Stage A", - "Stage B", - "Stage C", - "Stage I", - "Stage IA", - "Stage IA1", - "Stage IA2", - "Stage IA3", - "Stage IAB", - "Stage IAE", - "Stage IAES", - "Stage IAS", - "Stage IB", - "Stage IB1", - "Stage IB2", - "Stage IBE", - "Stage IBES", - "Stage IBS", - "Stage IC", - "Stage IE", - "Stage IEA", - "Stage IEB", - "Stage IES", - "Stage II", - "Stage II bulky", - "Stage IIA", - "Stage IIA1", - "Stage IIA2", - "Stage IIAE", - "Stage IIAES", - "Stage IIAS", - "Stage IIB", - "Stage IIBE", - "Stage IIBES", - "Stage IIBS", - "Stage IIC", - "Stage IIE", - "Stage IIEA", - "Stage IIEB", - "Stage IIES", - "Stage III", - "Stage IIIA", - "Stage IIIA1", - "Stage IIIA2", - "Stage IIIAE", - "Stage IIIAES", - "Stage IIIAS", - "Stage IIIB", - "Stage IIIBE", - "Stage IIIBES", - "Stage IIIBS", - "Stage IIIC", - "Stage IIIC1", - "Stage IIIC2", - "Stage IIID", - "Stage IIIE", - "Stage IIIES", - "Stage IIIS", - "Stage IIS", - "Stage IS", - "Stage IV", - "Stage IVA", - "Stage IVA1", - "Stage IVA2", - "Stage IVAE", - "Stage IVAES", - "Stage IVAS", - "Stage IVB", - "Stage IVBE", - "Stage IVBES", - "Stage IVBS", - "Stage IVC", - "Stage IVE", - "Stage IVES", - "Stage IVS", - "Cannot be assessed" - ] - }, - "followUp": { - "type": "array", - "items": { - "type": "object", - "propertyNames": { - "enum": [ - "submitterFollowUpId", - "intervalOfFollowUp", - "diseaseStatusAtFollowUp", - "relapseType", - "submitterTreatmentId" - ] - }, - "required": [ - "submitterFollowUpId", - "intervalOfFollowUp", - "diseaseStatusAtFollowUp" - ], - "properties": { - "submitterFollowUpId": { - "type": "string" - }, - "submitterTreatmentId": { - "type": "string" - }, - "intervalOfFollowUp": { - "type": "integer", - "minimum": 0 - }, - "diseaseStatusAtFollowUp": { - "type": "string", - "enum": [ - "Complete remission", - "Distant progression", - "Loco-regional progression", - "No evidence of disease", - "Partial remission", - "Progression NOS", - "Relapse or recurrence", - "Stable" - ] - }, - "relapseType": { - "type": ["string", "null"], - "enum": [ - "Distant recurrence/metastasis", - "Local recurrence", - "Local recurrence and distant metastasis", - "Progression (liquid tumours)", - null - ] - } - } - } - }, - "treatment": { - "type": "array", - "items": { - "type": "object", - "propertyNames": { - "enum": [ - "submitterTreatmentId", - "treatmentType", - "treatmentStartInterval", - "treatmentDuration", - "responseToTreatment", - "chemotherapy", - "hormoneTherapy", - "radiation" - ] - }, - "required": ["submitterTreatmentId", "treatmentType"], - "properties": { - "submitterTreatmentId": { - "type": "string" - }, - "treatmentType": { - "type": "array", - "items": { - "type": "string", - "enum": [ - "Ablation", - "Bone marrow transplant", - "Chemotherapy", - "Endoscopic therapy", - "Hormonal therapy", - "No treatment", - "Other targeting molecular therapy", - "Photodynamic therapy", - "Radiation therapy", - "Stem cell transplant", - "Surgery" - ] - } - }, - "treatmentStartInterval": { - "type": "integer", - "minimum": 0 - }, - "treatmentDuration": { - "type": "integer", - "minimum": 0 - }, - "responseToTreatment": { - "type": "string", - "enum": [ - "Complete response", - "Disease progression", - "NED", - "Minor response", - "Partial response", - "Stable disease" - ] - }, - "chemotherapy": { - "type": "array", - "items": { - "type": "object", - "propertyNames": { - "enum": ["drugName"] - }, - "required": ["drugName"], - "properties": { - "drugName": { - "type": "string" - } - } - } - }, - "hormoneTherapy": { - "type": "array", - "items": { - "type": "object", - "propertyNames": { - "enum": ["drugName"] - }, - "required": ["drugName"], - "properties": { - "drugName": { - "type": "string" - } - } - } - }, - "radiation": { - "type": "array", - "items": { - "type": "object", - "propertyNames": { - "enum": ["radiationTherapyModality", "anatomicalSiteIrradiated"] - }, - "required": ["radiationTherapyModality", "anatomicalSiteIrradiated"], - "properties": { - "radiationTherapyModality": { - "type": "string", - "enum": ["Electron", "Heavy Ions", "Photon", "Proton"] - }, - "anatomicalSiteIrradiated": { - "type": "string", - "enum": [ - "Abdomen", - "Body", - "Brain", - "Chest", - "Head", - "Liver", - "Lower Limb", - "Lung", - "Neck", - "Pelvis", - "Skin", - "Spine", - "Thorax", - "Upper Limb" - ] - } - } - } - } - }, - "allOf": [ - { - "if": { - "properties": { - "treatmentType": { - "contains": { - "const": "Chemotherapy" - } - } - } - }, - "then": { - "required": ["chemotherapy"] - } - }, - { - "if": { - "properties": { - "treatmentType": { - "contains": { - "const": "Radiation therapy" - } - } - } - }, - "then": { - "required": ["radiation"] - } - }, - { - "if": { - "properties": { - "treatmentType": { - "contains": { - "const": "Hormonal therapy" - } - } - } - }, - "then": { - "required": ["hormoneTherapy"] - } - } - ] - } - } - } - } - } - }, - "if": { - "properties": { - "vitalStatus": { - "const": "Deceased" - } - } - }, - "then": { - "required": ["causeOfDeath", "survivalTime"] - } - }, - "specimen": { - "type": "object", - "propertyNames": { - "enum": [ - "submitterSpecimenId", - "submitterPrimaryDiagnosisId", - "specimenAnatomicLocation", - "tumourGradingSystem", - "tumourGrade" - ] - }, - "required": [ - "submitterSpecimenId", - "submitterPrimaryDiagnosisId", - "specimenAnatomicLocation" - ], - "properties": { - "submitterSpecimenId": { - "type": "string" - }, - "submitterPrimaryDiagnosisId": { - "type": "string" - }, - "specimenAnatomicLocation": { - "type": "string", - "pattern": "^[C][0-9]{2}(.[0-9]{1})?$" - }, - "tumourGradingSystem": { - "type": "string", - "enum": [ - "FNCLCC grading system", - "Four-tier grading system", - "Gleason grade group system", - "Grading system for GISTs", - "Grading system for GNETs", - "ISUP grading system", - "Nuclear grading system for DCIS", - "Scarff-Bloom-Richardson grading system", - "Three-tier grading system", - "Two-tier grading system", - "WHO grading system for CNS tumours" - ] - }, - "tumourGrade": { - "type": "string", - "enum": [ - "Low grade", - "High grade", - "GX", - "G1", - "G2", - "G3", - "G4", - "Low", - "High", - "Grade I", - "Grade II", - "Grade III", - "Grade IV", - "Grade Group 1", - "Grade Group 2", - "Grade Group 3", - "Grade Group 4", - "Grade Group 5" - ] - } - } - }, - "publication": { - "type": "object", - "propertyNames": { - "enum": ["publication", "doi"] - }, - "properties": { - "publication": { - "type": ["string", "null"] - }, - "doi": { - "type": ["string", "null"] - } - } - }, - "collaborator": { - "type": "array", - "items": { - "type": "object", - "propertyNames": { - "enum": [ - "name", - "contactEmail" - ] - }, - "required": [ - "name" - ], - "properties": { - "name": { - "type": "string" - }, - "contactEmail": { - "type": [ - "string", - "null" - ], - "pattern": "^\\S+@\\S+\\.\\S+$" - } - } - } - } - } - } - } - ``` -
- -
- Instructions on accessing the Schema using the Swagger UI click here - - 1. Go to Songs swagger UI located at `localhost:8080/swagger-ui.html` - 2. Select **Schema** and the **GET /schemas** endpoint - 3. Click try it out and execute - - ![Song Swagger](../images/song-swagger.png 'Song Swagger') - - The response body will provide you a JSON document outlining Songs data model. In this case we are interested in the `quickStartSchema` as it was the `analysisType` used for validation of our payload. - -
- -By looking at the `primarySite` field found within the quickStartSchema, we can see an array of values that do not include `windpipe`; however, it does include the value `trachea`. - -Therefore, we can simply append the `windpipe` value on line 64 of our `SP059902.vcf.json` to `trachea`. - - ```JSON - "donor": { - "submitterDonorId": "DO0599", - "primarySite": "Trachea", - "vitalStatus": "Alive", - ``` - -**Resubmission:** - -Save and resubmit the corrected metadata file: - - ```bash - docker exec song-client sh -c "sing submit -f /output/SP059902.vcf.json" - ``` - -Now that your metadata file is correctly formatted, you should recieve a status of `OK` and a Song generated `analysisId` - - ```json - { - "analysisId": "4d9ed1c5-1053-4377-9ed1-c51053f3771f", - "status": "OK" - } - ``` - -An analysis ID is a randomly generated UUID created by Song; as such, yours will differ. Please note your analysis ID and use it for all subsequent steps referencing its usage. - -:::info -**What is an analysis?** -Since the metadata data has successfully been submitted and accepted by Song and provided an analysis ID, it is now considered part of a Song analysis. To complete the analysis, we will need to upload its associated file data. -::: - -### Generate a manifest - -With your `analysis_id`, we will now generate a manifest for file upload. - -- The manifest establishes a link between the analysis ID that has been submitted and the data file(s) on your local system that is being uploaded. - -- This step also validates that all files being uploaded are in line with those documented in the metadata tagged with the corresponding analysis ID. - -#### Manifest Command - -Make sure to replace `{AnalysisId}` with your previously generated Song analysis ID - - ```bash - docker exec song-client sh -c "sing manifest -a {AnalysisId} -f /output/manifest.txt -d /output/" - ``` - -The `manifest.txt` file will be written out to a defined output file path. If the output directory does not exist, it will be automatically created. - -#### Expected Response - - ```bash - Wrote manifest file '/output/manifest.txt' for analysisId '4d9ed1c5-1053-4377-9ed1-c51053f3771f' - ``` - -### Upload files with Score - -Use the following score-client upload command to transfer your file data to object storage using your previously generated manifest. - - ```bash - docker exec score-client sh -c "score-client upload --manifest /output/manifest.txt" - ``` - -#### Expected Response - - ```bash - Uploading object: '/output/SP059902.snv.vcf.gz.tbi' using the object id d7442418-7d59-5063-91d4-2e083549c9b2 - 100% [#########################] Parts: 1/1, Checksum: 100%, Write/sec: 2.0K/s, Read/sec: 0B/s - Finalizing... - Total execution time: 3.239 s - Total bytes read : 0 - Total bytes written : 141 - Upload completed - Uploading object: '/output/SP059902.snv.vcf.gz' using the object id 0e3ed34d-8f4d-554e-a23e-59b1ae60b75b - 100% [#########################] Parts: 1/1, Checksum: 100%, Write/sec: 1.3M/s, Read/sec: 0B/s - Finalizing... - Total execution time: 3.139 s - Total bytes read : 0 - Total bytes written : 17,246 - Upload completed - ``` - -## Publishing analyses - -The final step in data submission is to set the state of the analysis to `PUBLISHED`. A published analysis signals Maestro to index the data making it available on the front end portal interface. - -#### Publish Command - - ```bash - docker exec song-client sh -c "sing publish -a {AnalysisId}" - ``` - -#### Expected Response - - ```bash - {"message":"AnalysisId 4d9ed1c5-1053-4377-9ed1-c51053f3771f successfully published"} - ``` - -You should now be able to find you uploaded data on the front-end portal found at `localhost:3000/explorer` - -![Success](../images/success.png "Success") - -:::tip -**Help us make our guides better** -If you can't find what you're looking for please don't hesitate to reach out through our relevant [**community support channels**](https://docs.overture.bio/community/support). -::: diff --git a/website/guides/03-user-guides/02-cli-downloads.md b/website/guides/03-user-guides/02-cli-downloads.md deleted file mode 100644 index d5891d0a..00000000 --- a/website/guides/03-user-guides/02-cli-downloads.md +++ /dev/null @@ -1,136 +0,0 @@ -# CLI Downloads - -**This guide is for** anyone seeking guidance on how to download data from an Overture platform. - -**You will need** docker installed. We recommend using Docker Desktop; for more information, visit [Docker's website](https://www.docker.com/products/docker-desktop/). - -#### Visual Summary: - -![Retrieval Overview](../images/dataRetrieval.webp "End Goal") - -## Getting Started - -**1. Clone the Quickstart repository** - -```bash -git clone https://github.com/overture-stack/composer.git -``` - -**2. With Docker open run the docker-compose** - -```bash -docker compose up --attach conductor -``` - -:::caution -**Ensure enough resources get allocated to Docker** We recommend a minimum CPU limit of `8`, memory limit of `8 GB`, swap of `2 GB`, and virtual disk limit of `64 GB`. You can access these settings by selecting the **cog wheel** found on the top right of the Docker desktop app and selecting **resources** from the left panel. **If you already have docker desktop installed, ensure you are on version 4.39.0 or higher** -::: - -## Data Download with the Score Client - -### Generate a Manifest - -1. **Build your Query:** From the portal exploration page (`localhost:3000/explorer`), build your query using the search facets panel and data table. - -![Build Query](../images/buildQueries.png "Build Query") - -2. **Download your manifest:** With your data of interest selected, click the download dropdown and select file manifest - -:::info -**Why a Manifest?** - -The file manifest provides a detailed list of fields relevant to your query in a TSV (Tab-Separated Values) format. This file is essential for Score to locate and download your data efficiently. We utilize manifests in conjunction with specialized file transfer services because large genomic datasets require reliable multi-part download sessions, which are not suitable for browser-based transfers. -::: - -### Retrieve your API Key - -API Keys are brokered by Keycloak and accessible when logged in to the Stage UI. For the Overture QuickStart, Stage can access from `localhost:3000` - -**1. Login through the Stage UI** by selecting login from the top right. Default credentials when using the Overture Composer will be username `admin` and password `admin123`. - -**2. Generate a new API token** by selecting **Profile and Token** from your user dropdown menu at the top right of the Stage UI and selecting **Generate New Token**. - -![Accessing an API Key](../images/apikeys.png "Accessing an API Key") - -### Run the Score Client - -**Running the Score Client:** Use the following command with your API token to pull and run a Score Client docker container - -```bash -docker run -d -it --name score-client \ - -e ACCESSTOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528 \ - -e STORAGE_URL=http://localhost:8087 \ - -e METADATA_URL=http://localhost:8080 \ - --network="host" \ - --platform="linux/amd64" \ - --mount type=bind,source=./guideMaterials/dataDownload/,target=/output \ - ghcr.io/overture-stack/score:latest -``` - -:::caution -**Note:** Ensure you are running the following commands from the root directory of the quickstart folder. The values here reflect those compatible with the Overture QuickStart. -::: - -
- - Click here for a detailed breakdown - -- `-d` runs the container in detached mode, meaning it runs in the background and does not receive input or display output in the terminal - -- `-it` combines the `-i` (interactive) and `-t` (allocate a pseudo-TTY) options, allowing you to interact with the container via the terminal - -- `-e ACCESSTOKEN=68fb42b4-f1ed-4e8c-beab-3724b99fe528` sets up the score-client with a pre-configured system-wide access token. Alternatively, you can log in through stage found on `localhost:3000/login` with the username `admin` and password `admin123`. From the profile page you can generate your own API key and supply it here - -- `-e STORAGE_URL=http://score:8087` is the url for the Score server that the Score-Client will interact with - -- `-e METADATA_URL=http://song:8080` is the url for the song server that the score-client will interact with - -- `--network="host"` Uses the host network stack inside the container, bypassing the usual network isolation. This means the container shares the network namespace with the host machine - -- `--platform="linux/amd64"` Specifies the platform the container should emulate. In this case, it's set to linux/amd64, indicating the container is intended to run on a Linux system with an AMD64 architecture - -- `--mount type=bind,source=./guideMaterials/dataDownload,target=/output` mounts the directory and its contents from the host machine to the container. Any changes made to the files in this directory will be reflected locally and in your docker container. - -
- -### Download your Data - -Add the manifest to the `./guideMaterials/dataDownload` folder in your QuickStart repository. For simplicity, update its name to manifest.tsv. After moving and renaming the manifest, you can run the provided command: - -```bash -docker exec score-client sh -c "score-client download --manifest /output/manifest.tsv --output-dir /output" -``` - -- `/dataFiles/manifest.tsv` represents the location of the earlier generated manifest file for simplicity you can either point to your download folder or move your manifest.tsv to the dataDownload folder in the quickstart repository - -- `/output` specifies the directory you intend to download the files too - -If successful the Score Client should produce the following logs and your files will now be located within your output directory (`./guideMaterials/dataDownload`). - -```bash -Downloading... ---------------------------------------------------------------------------------------------------------------------------------------------------------------- -[1/2] Downloading object: 5b3bf92a-8f57-54b9-9ab9-6dcf34a0dc78 (SP011501.indel.vcf.gz) ---------------------------------------------------------------------------------------------------------------------------------------------------------------- -100% [#########################] Parts: 1/1, Checksum: 100%, Write/sec: 177.7K/s, Read/sec: 177.7K/s -Finalizing... -Total execution time: 122.6 ms -Total bytes read : 17,346 -Total bytes written : 17,346 -Verifying checksum...--------------------------------------------------------------------------------------------------------------------------------------------------------------- -[2/2] Downloading object: 30697525-1033-543c-a86b-1ab428c7e8d5 (SP011501.indel.vcf.gz.tbi) ---------------------------------------------------------------------------------------------------------------------------------------------------------------- -100% [#########################] Parts: 1/1, Checksum: 100%, Write/sec: 2.9K/s, Read/sec: 2.9K/s -Finalizing... -Total execution time: 56.86 ms -Total bytes read : 144 -Total bytes written : 144 -Verifying checksum...Done. -``` - -For more information on using the Score-Client see our [Score-Client command reference documentation](/) - -:::tip -**Help us make our guides better** -If you can't find what you're looking for please don't hesitate to reach out through our relevant [**community support channels**](https://docs.overture.bio/community/support). -::: diff --git a/website/guides/03-user-guides/03-user-guides.mdx b/website/guides/03-user-guides/03-user-guides.mdx deleted file mode 100644 index 3a3073e5..00000000 --- a/website/guides/03-user-guides/03-user-guides.mdx +++ /dev/null @@ -1,7 +0,0 @@ -# User Guides - -Using the Overture platform for data submission and retrieval. - - - - diff --git a/website/guides/04-api-reference.mdx b/website/guides/04-api-reference.mdx deleted file mode 100644 index a8cb41e3..00000000 --- a/website/guides/04-api-reference.mdx +++ /dev/null @@ -1,68 +0,0 @@ -# API Reference - -Welcome to our API reference documentation. This page provides detailed information about our available APIs. -You can explore the endpoints, request parameters and response schemas directly from this page. - -The Overture Platform has four APIs: - -1. [**Song:**](/guides/api-reference#song-api) A RESTful (Swagger) API for file metadata stored in Song. -2. [**Score:**](/guides/api-reference#score-api) RESTful (Swagger) API for communicating with the Score Server. -3. [**Maestro:**](/guides/api-reference#maestro-api) RESTful (Swagger) API for managing Song data indexing operations. - -:::info Important Note -Arranger API Reference documentation is currently under development and will be available soon. If you encounter any issues or have questions about our API, please don't hesitate to reach out through our relevant [**community support channels**](https://docs.overture.bio/community/support). -::: - -## RESTful APIs - -import SwaggerAPIDoc from '/src/components/SwaggerAPIDoc'; - -All our available RESTful APIs use Swagger to help document endpoint usage and expected outcomes. Here are some tips for using the Swagger UI: - -1. **Expand Operations**: Click on an endpoint to expand its details. -2. **Read Descriptions**: Each endpoint has a description explaining its purpose and usage. -3. **Check Parameters**: Review the required and optional parameters for each endpoint. -4. **Examine Responses**: Look at the possible response codes and schemas to understand what to expect from each endpoint. - -### Song API - -The Song API allows you to manage and query file metadata in your system. - -#### Key Features - -- Manage study, analysis, donor, specimen, and sample metadata -- Validate and submit analysis metadata with schema versioning and publication controls (published/unpublished/suppressed) -- Manage schemas used for validations -- Check the health of the Song-server - - - -### Score API - -The Score API provides endpoints that allow to to query the Score server and programmatically transfer files to and from object storage. - -#### Key Features - -- Manage file uploads and downloads with multipart support and recovery mechanisms -- Track and verify file integrity using MD5 checksums and progress monitoring -- Control object storage with flexible listing, partial content handling, and secure access controls - - - -### Maestro API - -The Maestro API provides you with endpoints for data indexing. - -#### Key Features - -- Index Song repositories by analysis or study ID -- Convert analysis-centric data to file-centric document format -- Manage index operations at repository, study, and analysis levels with failure tracking - - - -

- -:::info Need Help? -If you encounter any issues or have questions about our API, please don't hesitate to reach out through our relevant [**community support channels**](https://docs.overture.bio/community/support). -::: \ No newline at end of file diff --git a/website/guides/images/core-software.webp b/website/guides/images/core-software.webp deleted file mode 100644 index ed50ce73..00000000 Binary files a/website/guides/images/core-software.webp and /dev/null differ diff --git a/website/guidesSidebars.ts b/website/guidesSidebars.ts deleted file mode 100644 index 68e22e36..00000000 --- a/website/guidesSidebars.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; - -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ -const sidebars: SidebarsConfig = { - // By default, Docusaurus generates a sidebar from the docs folder structure - guidesSidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - -// guidesSidebar: [ -// { -// type: 'category', -// label: 'moduleA', -// items: ['moduleA/nestedFolder/nestedElement'], -// }, -// { -// type: 'category', -// label: 'moduleB', -// items: ['moduleB/littleBlackSubmarines'], -// }, -// ], -}; - -export default sidebars; diff --git a/website/package-lock.json b/website/package-lock.json index 1ed035e5..981651b3 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -1,18 +1,27 @@ { - "name": "bridge-poc", + "name": "overture-docs", "version": "0.0.0", "lockfileVersion": 3, "requires": true, "packages": { "": { - "name": "bridge-poc", + "name": "overture-docs", "version": "0.0.0", "dependencies": { - "@docusaurus/core": "^3.9.2", - "@docusaurus/preset-classic": "^3.9.2", - "@docusaurus/theme-mermaid": "^3.9.2", - "@docusaurus/theme-search-algolia": "^3.9.2", + "@codemirror/lang-json": "^6.0.2", + "@codemirror/state": "^6.7.1", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "^6.43.7", + "@docusaurus/core": "^3.10.2", + "@docusaurus/plugin-client-redirects": "^3.10.2", + "@docusaurus/preset-classic": "^3.10.2", + "@docusaurus/theme-mermaid": "^3.10.2", + "@docusaurus/theme-search-algolia": "^3.10.2", "@mdx-js/react": "^3.0.0", + "@overture-stack/lectern-dictionary": "^2.0.0", + "@overture-stack/lectern-ui": "^1.0.0", + "@replit/codemirror-indentation-markers": "^6.5.3", + "@uiw/react-codemirror": "^4.25.11", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", @@ -20,56 +29,71 @@ "swagger-ui-react": "^5.29.2" }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.6.2", - "@docusaurus/tsconfig": "^3.6.2", - "@docusaurus/types": "^3.6.2", + "@docusaurus/module-type-aliases": "^3.10.2", + "@docusaurus/tsconfig": "^3.10.2", + "@docusaurus/types": "^3.10.2", "typescript": "~5.5.2" }, "engines": { "node": ">=18.0" } }, + "node_modules/@11ty/gray-matter": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@11ty/gray-matter/-/gray-matter-1.0.0.tgz", + "integrity": "sha512-7mJJl+wf1AByoT0PknQiQfOPnVNT4fevGrUBVWO4HXsnYn1aQPyRyrELYrNUFleUBM++KzMKN6QaxHPk0t/6/g==", + "license": "MIT", + "dependencies": { + "js-yaml": "^4.1.0", + "kind-of": "^6.0.3", + "section-matter": "^1.0.0", + "strip-bom-string": "^1.0.0" + }, + "engines": { + "node": ">=11" + } + }, "node_modules/@algolia/abtesting": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.16.0.tgz", - "integrity": "sha512-alHFZ68/i9qLC/muEB07VQ9r7cB8AvCcGX6dVQi2PNHhc/ZQRmmFAv8KK1ay4UiseGSFr7f0nXBKsZ/jRg7e4g==", + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@algolia/abtesting/-/abtesting-1.22.0.tgz", + "integrity": "sha512-BFR6zNowNKcY7Ou7TaJc9QWexES4YKPbmf/OTFofpdsdhz4x6q0lbxp3duO0EHnyrN7rE4ba/TSXuY+BDGu4+g==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/autocomplete-core": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz", - "integrity": "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.9.tgz", + "integrity": "sha512-4U2JKLMWlDu0CotYyUkWakDxr8AIav3QtIUXXRpfavYN29aVWfzlwJp9T0rPKEf/dO2QCPAUc0Kq1Tj1GJxo2A==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", - "@algolia/autocomplete-shared": "1.19.2" + "@algolia/autocomplete-plugin-algolia-insights": "1.19.9", + "@algolia/autocomplete-shared": "1.19.9" } }, "node_modules/@algolia/autocomplete-plugin-algolia-insights": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz", - "integrity": "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.9.tgz", + "integrity": "sha512-6mExC6X7762s2SV3eJy3QOkB8bdMmnUhQ2agvGVDuzwoGyr3PquGSY/0vPQXCfiAiCaXUz1rXn+lwghgSi0l0w==", "license": "MIT", "dependencies": { - "@algolia/autocomplete-shared": "1.19.2" + "@algolia/autocomplete-shared": "1.19.9" }, "peerDependencies": { "search-insights": ">= 1 < 3" } }, "node_modules/@algolia/autocomplete-shared": { - "version": "1.19.2", - "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz", - "integrity": "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==", + "version": "1.19.9", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.9.tgz", + "integrity": "sha512-YosP9Uoek6y/Ur1r1qeogk4biMe/hzkyNcgMCciw0//3XpCM7VlYLSHnyt/vOnEOGhCCc0+3v+unEiH6zz+Z1A==", "license": "MIT", "peerDependencies": { "@algolia/client-search": ">= 4.9.1 < 6", @@ -77,99 +101,99 @@ } }, "node_modules/@algolia/client-abtesting": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.50.0.tgz", - "integrity": "sha512-mfgUdLQNxOAvCZUGzPQxjahEWEPuQkKlV0ZtGmePOa9ZxIQZlk31vRBNbM6ScU8jTH41SCYE77G/lCifDr1SVw==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-abtesting/-/client-abtesting-5.56.0.tgz", + "integrity": "sha512-7r4Z3NC7yU1oAQVWJNA2HX7tX481F3pJvCGyLIXiTdBcthz4Q/o21jwcMYDFkuI92UWTNBQQmHYgwHo1zS5dzg==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-analytics": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.50.0.tgz", - "integrity": "sha512-5mjokeKYyPaP3Q8IYJEnutI+O4dW/Ixxx5IgsSxT04pCfGqPXxTOH311hTQxyNpcGGEOGrMv8n8Z+UMTPamioQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-analytics/-/client-analytics-5.56.0.tgz", + "integrity": "sha512-avmjXQSq+jadFO8Xl2em05/uQdQnEmHsJyOAdVbZkmVgpMfxL12aJwVVfGNwYr9nulcpuJN1X0lTaQ5wxuNGcA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-common": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.50.0.tgz", - "integrity": "sha512-emtOvR6dl3rX3sBJXXbofMNHU1qMQqQSWu319RMrNL5BWoBqyiq7y0Zn6cjJm7aGHV/Qbf+KCCYeWNKEMPI3BQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-common/-/client-common-5.56.0.tgz", + "integrity": "sha512-v2TPStUhY//ripPjIVclZ8AWc7DEGooXULZGFlFu37zNatgHjw34oZZ+OSbbc/YHO+xZwPl62I1k8xH1m4S2eg==", "license": "MIT", "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-insights": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.50.0.tgz", - "integrity": "sha512-IerGH2/hcj/6bwkpQg/HHRqmlGN1XwygQWythAk0gZFBrghs9danJaYuSS3ShzLSVoIVth4jY5GDPX9Lbw5cgg==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-insights/-/client-insights-5.56.0.tgz", + "integrity": "sha512-P0ehROpM4Sem3Sqo5x2cKPgj67D3G3jy0rh1Amwkcvsfr6tkvIcdCmerieanqTF7NxUMPNFLkpIFeMO8Rpa50w==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-personalization": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.50.0.tgz", - "integrity": "sha512-3idPJeXn5L0MmgP9jk9JJqblrQ/SguN93dNK9z9gfgyupBhHnJMOEjrRYcVgTIfvG13Y04wO+Q0FxE2Ut8PVbA==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-personalization/-/client-personalization-5.56.0.tgz", + "integrity": "sha512-SXK3Vn3WVxyzbm31oePZBJkp1wpOyuWdd4B/Pv7n0aXDxmeSWhC1R1FC1517mMrFAIaPH4Rt0x6RUe7ZNjz8FA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-query-suggestions": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.50.0.tgz", - "integrity": "sha512-q7qRoWrQK1a8m5EFQEmPlo7+pg9mVQ8X5jsChtChERre0uS2pdYEDixBBl0ydBSGkdGbLUDufcACIhH/077E4g==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-query-suggestions/-/client-query-suggestions-5.56.0.tgz", + "integrity": "sha512-5+ZdX8garFnmycnZgKhtXHePEaLj5zqDxI/0lkhhluzCcvTn0/PvvTirTg8hHYetQHvn7GDyeAiqTAieMvMW4A==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/client-search": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.50.0.tgz", - "integrity": "sha512-Jc360x4yqb3eEg4OY4KEIdGePBxZogivKI+OGIU8aLXgAYPTECvzeOBc90312yHA1hr3AeRlAFl0rIc8lQaIrQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.56.0.tgz", + "integrity": "sha512-+mKUdYvqOi0BcvpAEyCEw49vSBptufIcfibtHz2bdr1pI789M46Yt0uQEk/sxtK3teh71OQvVFHaTDzShUWewQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" @@ -182,81 +206,81 @@ "license": "MIT" }, "node_modules/@algolia/ingestion": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.50.0.tgz", - "integrity": "sha512-OS3/Viao+NPpyBbEY3tf6hLewppG+UclD+9i0ju56mq2DrdMJFCkEky6Sk9S5VPcbLzxzg3BqBX6u9Q35w19aQ==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@algolia/ingestion/-/ingestion-1.56.0.tgz", + "integrity": "sha512-9g/zj+AZx5moFcdFIrYQoVrueXivjUcc3MQHtCYT8WhIuk1lUh1AyEhvJCS0XBZld09cLvd1AZ3BvDBpVpX2UA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/monitoring": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.50.0.tgz", - "integrity": "sha512-/znwgSiGufpbJVIoDmeQaHtTq+OMdDawFRbMSJVv+12n79hW+qdQXS8/Uu3BD3yn0BzgVFJEvrsHrCsInZKdhw==", + "version": "1.56.0", + "resolved": "https://registry.npmjs.org/@algolia/monitoring/-/monitoring-1.56.0.tgz", + "integrity": "sha512-Qf3Sr6f9A9uxCZUf3MXS0d2b877uYzEB5yxqpVGXAhcJnBCQjrRRon0KvefpGkxy+BshrIJs96OUoMtGqXTFDA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/recommend": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.50.0.tgz", - "integrity": "sha512-dHjUfu4jfjdQiKDpCpAnM7LP5yfG0oNShtfpF5rMCel6/4HIoqJ4DC4h5GKDzgrvJYtgAhblo0AYBmOM00T+lQ==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/recommend/-/recommend-5.56.0.tgz", + "integrity": "sha512-GXWG1rWc5wu8hY4N33Y3b6ernY6sAdAvmKWN/zHAiACOx40WnpG0TVX5YazCAr/9gOYGInSiM2A0y2jy2xbiDA==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "@algolia/client-common": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-browser-xhr": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.50.0.tgz", - "integrity": "sha512-bffIbUljAWnh/Ctu5uScORajuUavqmZ0ACYd1fQQeSSYA9NNN83ynO26pSc2dZRXpSK0fkc1//qSSFXMKGu+aw==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-browser-xhr/-/requester-browser-xhr-5.56.0.tgz", + "integrity": "sha512-7t24cBxaInS3mZb7ddEaZT/tp6q+/aR4YttsQVyP1/i+LmwPR34atO35KjaLFCcRVrlP7sYOAqkCfg6lIRB+ew==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0" + "@algolia/client-common": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-fetch": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.50.0.tgz", - "integrity": "sha512-y0EwNvPGvkM+yTAqqO6Gpt9wVGm3CLDtpLvNEiB3VGvN3WzfkjZGtLUsG/ru2kVJIIU7QcV0puuYgEpBeFxcJg==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-fetch/-/requester-fetch-5.56.0.tgz", + "integrity": "sha512-R7ePHgVYmDFjZpvrsVAfbDz/d4RxKAYZ5/vgLfIsCVRZRryjWl/3INOxpOICzitehQ5FjNtNjcLQTrmHPTcHBQ==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0" + "@algolia/client-common": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/@algolia/requester-node-http": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.50.0.tgz", - "integrity": "sha512-xpwefe4fCOWnZgXCbkGpqQY6jgBSCf2hmgnySbyzZIccrv3SoashHKGPE4x6vVG+gdHrGciMTAcDo9HOZwH22Q==", + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/@algolia/requester-node-http/-/requester-node-http-5.56.0.tgz", + "integrity": "sha512-PIOUXlSnrqM0S+WOgDRb4RzotydJH7ZoT6tOyL7tAO7qJOfvX5wsEW8Pe+PMKMwvuI4/gIyK9cg2H7lJXqnc4Q==", "license": "MIT", "dependencies": { - "@algolia/client-common": "5.50.0" + "@algolia/client-common": "5.56.0" }, "engines": { "node": ">= 14.0.0" @@ -275,22 +299,13 @@ "url": "https://github.com/sponsors/antfu" } }, - "node_modules/@antfu/utils": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-9.2.1.tgz", - "integrity": "sha512-TMilPqXyii1AsiEii6l6ubRzbo76p6oshUSYPaKsmXDavyMLqjzVDkcp3pHp5ELMUNJHATcEOGxKTTsX9yYhGg==", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/@babel/code-frame": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", - "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.7.tgz", + "integrity": "sha512-Aup7aUOfpbAUg2ROOJN6Iw5f9DMBlzu0mIkm/malLQFN/YQgO48wCj0Kxa3sEHJvPVFg7siR+qRInwXd2qhQKw==", "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.28.5", + "@babel/helper-validator-identifier": "^7.29.7", "js-tokens": "^4.0.0", "picocolors": "^1.1.1" }, @@ -299,29 +314,29 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", - "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.7.tgz", + "integrity": "sha512-locTkQyKvwIEgBzVrn8693ebc97F2U8ZHjbXwDXJ5Fn2TCpNwTlKcaKLkdHop5c/icOFE7qt7Q9JC5hnKNa6Gg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", - "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helpers": "^7.28.6", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.29.0", - "@babel/types": "^7.29.0", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.7.tgz", + "integrity": "sha512-RgHBCvtjbOK2gXSNBNIkNoEc9qoVEtau3hj8gEqKQuL3HZAibKarWFEI3Lfm6EYKkLalOh8eSrj9b+ch9H/VBA==", + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helpers": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/remapping": "^2.3.5", "convert-source-map": "^2.0.0", "debug": "^4.1.0", @@ -347,13 +362,13 @@ } }, "node_modules/@babel/generator": { - "version": "7.29.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", - "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.7.tgz", + "integrity": "sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==", "license": "MIT", "dependencies": { - "@babel/parser": "^7.29.0", - "@babel/types": "^7.29.0", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7", "@jridgewell/gen-mapping": "^0.3.12", "@jridgewell/trace-mapping": "^0.3.28", "jsesc": "^3.0.2" @@ -363,25 +378,25 @@ } }, "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.27.3", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.3.tgz", - "integrity": "sha512-fXSwMQqitTGeHLBC08Eq5yXz2m37E4pJX1qAU1+2cNedz/ifv/bVXft90VeSav5nFO61EcNgwr0aJxbyPaWBPg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.29.7.tgz", + "integrity": "sha512-OoK6239jHPuSQOoS0kfTVKn0b/rVTk0seKq4Gd2UMLtmOVLjDC0ki3e+c90Trqv2gMfvJFqkiljrr568+qddiw==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.3" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", - "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", + "integrity": "sha512-wem6WaBj4NaVYVdNhLPPVacES6ZJ+KBBfSkTMD3YZxbP3rm3Di85tJU5ljaUNhaOynt+Aj0xruhYuzQBt8n71g==", "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", + "@babel/compat-data": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" @@ -400,17 +415,17 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.28.6.tgz", - "integrity": "sha512-dTOdvsjnG3xNT9Y0AUg1wAl38y+4Rl4sf9caSQZOXdNqVn+H+HbbJ4IyyHaIqNR6SW9oJpA/RuRjsjCw2IdIow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.29.7.tgz", + "integrity": "sha512-IY3ZD9Tmooqr3TUhc3DUWxiuo8xx1DWLhd5M7hQ+ZWJamqM2BbalrBJb2MisSLoYorOj75U03qULCxQTY9r3hg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/traverse": "^7.28.6", + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/traverse": "^7.29.7", "semver": "^6.3.1" }, "engines": { @@ -430,12 +445,12 @@ } }, "node_modules/@babel/helper-create-regexp-features-plugin": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.28.5.tgz", - "integrity": "sha512-N1EhvLtHzOvj7QQOUCCS3NrPJP8c5W6ZXCHDn7Yialuy1iu4r5EmIYkXlKNqT99Ciw+W0mDqWoR6HWMZlFP3hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.29.7.tgz", + "integrity": "sha512-907Uymvqgg1dwUA+7IGwFAOSYzQOuzPXKNJ1yxzwPffzkYFg2q2eHi1fIOs6sXkG9NbIUMunnUlkYsfRFNvomg==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", + "@babel/helper-annotate-as-pure": "^7.29.7", "regexpu-core": "^6.3.1", "semver": "^6.3.1" }, @@ -472,49 +487,49 @@ } }, "node_modules/@babel/helper-globals": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", - "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.29.7.tgz", + "integrity": "sha512-3nQVUAtvkKH9zahfWgw96Jc/uFOmjACE1kQz82E2lqWmHBgjzbNlsC22nuQTfahmWeQtTq5nQ/4Nnd2A1wj4zA==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-member-expression-to-functions": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.28.5.tgz", - "integrity": "sha512-cwM7SBRZcPCLgl8a7cY0soT1SptSzAlMH39vwiRpOQkJlh53r5hdHwLSCZpQdVLT39sZt+CRpNwYG4Y2v77atg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.29.7.tgz", + "integrity": "sha512-j+7JYmk1JYDtACIGj0QJqqWZjoUpMoEikQGADMaHgCMCSDqd2+P32rfcibUNrGOMWrlzK1WJBdxrB3JJQZwWtg==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.5", - "@babel/types": "^7.28.5" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", - "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", + "integrity": "sha512-ejHwrQQYcm9xnTivShn2IDOlIzInN34AXskvq9QicvCtEzq1Vzclu/tKF8Jq1Cg8JG2GL6/EmjgsCT7lXepE3g==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", - "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", + "integrity": "sha512-UPUVSyXbOh627KiCIGQSgwWzGeBKLkaJ9PJEdrngIwMSzxLR4jS4+f1f1jb7VzBbg8nFLaYotvVPFCTqdrmTAg==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.28.6" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -524,35 +539,35 @@ } }, "node_modules/@babel/helper-optimise-call-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz", - "integrity": "sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.29.7.tgz", + "integrity": "sha512-+kmGVjcT9RGYzoDwdwEqEvGgKe3BYq+O1iGzjFubaNgZHwYHP6lsF2Yghf4kEuv9BV7tYDZ913aBW9am6YKong==", "license": "MIT", "dependencies": { - "@babel/types": "^7.27.1" + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", - "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", + "integrity": "sha512-G7sHYigPY17oO5SYWnfD/0MTBwVR781S/JI643e/JhUYgVgWE/61SoW3NH9KWUKyKq5LVh3npif99Wkt6j86Jw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-remap-async-to-generator": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz", - "integrity": "sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.29.7.tgz", + "integrity": "sha512-16AMiW26DbXWBbr3B8wNozKM0ydMLB892vaOaJW/fPJdnT8vJk5sdkQcU/isqUxyCE0cEoa8wZOcbgDuC4b6Og==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-wrap-function": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-wrap-function": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -562,14 +577,14 @@ } }, "node_modules/@babel/helper-replace-supers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.28.6.tgz", - "integrity": "sha512-mq8e+laIk94/yFec3DxSjCRD2Z0TAjhVbEJY3UQrlwVo15Lmt7C2wAUbK4bjnTs4APkwsYLTahXRraQXhb1WCg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.29.7.tgz", + "integrity": "sha512-atfGXWSeCiF4DnKZIfmJfQRkSw9b9gNNXR1kqKjbhG4pGYCOnkp8OcTB8E3NXjBu8NpheSnOeNKz8KT7UNFTmQ==", "license": "MIT", "dependencies": { - "@babel/helper-member-expression-to-functions": "^7.28.5", - "@babel/helper-optimise-call-expression": "^7.27.1", - "@babel/traverse": "^7.28.6" + "@babel/helper-member-expression-to-functions": "^7.29.7", + "@babel/helper-optimise-call-expression": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -579,79 +594,79 @@ } }, "node_modules/@babel/helper-skip-transparent-expression-wrappers": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz", - "integrity": "sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.29.7.tgz", + "integrity": "sha512-brcMGQaVzIeUb+6/bs1Av0f8YuNNjKY2JyvfRCsFuFsdKccEQ5Ges2y74D74NZ1Rz8lKJ9ksJkfqwQFJ/iNEyQ==", "license": "MIT", "dependencies": { - "@babel/traverse": "^7.27.1", - "@babel/types": "^7.27.1" + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", - "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", + "integrity": "sha512-Pb5ijPrZ89GDH8223L4UP8i6QApWxs04RbPQJTeWDV0/keR2E36MeKnyr6LYmUUvqRRI+Iv87SuF1W6ErINzYw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", - "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", + "integrity": "sha512-qehxGkRj55h/ff8EMaJ+cYhyaKlHIxqYDn682wQD7RNp9UujOQsHog2uS0r2vzr4pW+sXf90NeeayjcNaX3fFg==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-validator-option": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", - "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", + "integrity": "sha512-N9ZErrD+yW5geCDtBqnOoxmR8+tNKiGuxKlDpuJxfsqpa2dFcexaziGAE/qoHLiDDreVNMupxGmSoNlyvsA3gw==", "license": "MIT", "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-wrap-function": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.28.6.tgz", - "integrity": "sha512-z+PwLziMNBeSQJonizz2AGnndLsP2DeGHIxDAn+wdHOGuo4Fo1x1HBPPXeE9TAOPHNNWQKCSlA2VZyYyyibDnQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.29.7.tgz", + "integrity": "sha512-iES0Skag9ERIF68aXadpO6dbXa03mNWK3sEqJaMnLNs/eC3l0lkImdfoy6Y09/SfkpawdAB4RjQ7PVA7TcVGdw==", "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/traverse": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/template": "^7.29.7", + "@babel/traverse": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helpers": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", - "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.7.tgz", + "integrity": "sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==", "license": "MIT", "dependencies": { - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0" + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/parser": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", - "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.7.tgz", + "integrity": "sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==", "license": "MIT", "dependencies": { - "@babel/types": "^7.29.0" + "@babel/types": "^7.29.7" }, "bin": { "parser": "bin/babel-parser.js" @@ -661,13 +676,13 @@ } }, "node_modules/@babel/plugin-bugfix-firefox-class-in-computed-class-key": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.28.5.tgz", - "integrity": "sha512-87GDMS3tsmMSi/3bWOte1UblL+YUTFMV8SZPZ2eSEL17s74Cw/l63rR6NmGVKMYW2GYi85nE+/d6Hw5N0bEk2Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.29.7.tgz", + "integrity": "sha512-j8SrR0zLZrRsC09DlszEx8FpMiwukKffYXMK0d5LmOglO7vGG6sz/BR/20yHqWH+Lnn31JTt2PE3hIWNgM2J6w==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -677,12 +692,12 @@ } }, "node_modules/@babel/plugin-bugfix-safari-class-field-initializer-scope": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz", - "integrity": "sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.29.7.tgz", + "integrity": "sha512-r8j8escF+U2FUHo0KOhPUdMzUO+jp9fInva6+ACVAF3Y97Ev+5iNZwiqTghmzNeWwDkOPlYuTcfb1vDaoZKmAQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -692,12 +707,28 @@ } }, "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz", - "integrity": "sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.29.7.tgz", + "integrity": "sha512-GE1TFSiuFeGsCxmYXZl8HwoPrVlwe4rHPFE8weieGKZqnDORK+Ar3vgWMgW+AOxQ6/2TgLSKx9p6W7O4rC6qgQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": { + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-rest-destructuring-rhs-array/-/plugin-bugfix-safari-rest-destructuring-rhs-array-7.29.7.tgz", + "integrity": "sha512-oBNVCvnO5tND+xSopWvV8WNGfpTfgP4Zr/YXXSj8zfmcPktp5Ku/aZlsIowgSD4fjmgHn6sGmB9APVsU5zOdhA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -707,14 +738,14 @@ } }, "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz", - "integrity": "sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.29.7.tgz", + "integrity": "sha512-QQt9qKHZ2sg/kivaLr7lnQr8HVrQDdBNSfCsTjiDxRuX/K5ORyKq+Bu8Xr0cDE3Dfkv0cw28Ve0EKyKMvulkOw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-transform-optional-chaining": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -724,13 +755,13 @@ } }, "node_modules/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.28.6.tgz", - "integrity": "sha512-a0aBScVTlNaiUe35UtfxAN7A/tehvvG4/ByO6+46VPKTRSlfnAFsgKy0FUh+qAkQrDTmhDkT+IBOKlOoMUxQ0g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.29.7.tgz", + "integrity": "sha512-pn6QacGLgvCcwc+syUhKE/qSjV2D1IHDB84RNxWYSt1mW3K/SCtjinZ2p0cETJxAWBjPy3K/1lHwG5BjjPxNlw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/traverse": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -764,12 +795,12 @@ } }, "node_modules/@babel/plugin-syntax-import-assertions": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.28.6.tgz", - "integrity": "sha512-pSJUpFHdx9z5nqTSirOCMtYVP2wFgoWhP0p3g8ONK/4IHhLIBd0B9NYqAvIUAhq+OkhO4VM1tENCt0cjlsNShw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.29.7.tgz", + "integrity": "sha512-/An1OCBN93thpBAGyfsK2pcf0jvju1SAtKkL2Ny++B5Sy6sqgzXDQH1cZxWbF96Wuk+bn41MDA9bLd4VVAw6rw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -779,12 +810,12 @@ } }, "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", - "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", + "integrity": "sha512-zGYcYfq/WmZ4V+kBIXQon9dSSc8ircGZqw9ZaNhhGj9nZkeBu1jHLBDQqYYi5WA9uawvA2sIMbry2nCFhf5Djg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -794,12 +825,12 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.28.6.tgz", - "integrity": "sha512-wgEmr06G6sIpqr8YDwA2dSRTE3bJ+V0IfpzfSY3Lfgd7YWOaAdlykvJi13ZKBt8cZHfgH1IXN+CL656W3uUa4w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", + "integrity": "sha512-TSu8+mHCoEaaCDEZ0I3+6mvTBYR4PCxQwf2z9/r5Tbztv6NaLR3B9thGTTxX2WGuGHJqRiAbKPeGTJ5XWXVg6A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -809,12 +840,12 @@ } }, "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.28.6.tgz", - "integrity": "sha512-+nDNmQye7nlnuuHDboPbGm00Vqg3oO8niRRL27/4LYHUsHYh0zJ1xWOz0uRwNFmM1Avzk8wZbc6rdiYhomzv/A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", + "integrity": "sha512-ngr+82Sh0xMz25TPCZi+nC2iTzjfCdWS2ONXTp/PtSCHCgaCNBpdMqgvJ2ccdLlClVZ7sisIgB914j/JFe+RZA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -840,12 +871,12 @@ } }, "node_modules/@babel/plugin-transform-arrow-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz", - "integrity": "sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.29.7.tgz", + "integrity": "sha512-N7zArUXWzAMzm+/N0uPBeVB3Fam5lMxtUwMmDK5f/IBBS7a7p1qeUoxd/6CckXoxUdgsntq1Dh8xNW06maZbDQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -855,14 +886,14 @@ } }, "node_modules/@babel/plugin-transform-async-generator-functions": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.0.tgz", - "integrity": "sha512-va0VdWro4zlBr2JsXC+ofCPB2iG12wPtVGTWFx2WLDOM3nYQZZIGP82qku2eW/JR83sD+k2k+CsNtyEbUqhU6w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.29.7.tgz", + "integrity": "sha512-d98gXZkgswvkyohMBABkhm3GeXhYj8psWfwQ2C7gtfrKGTykQa/iOIi+JJhwMjPlZ6Vm2XN+DCf3Es1EoG4ZLA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-remap-async-to-generator": "^7.27.1", - "@babel/traverse": "^7.29.0" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -872,14 +903,14 @@ } }, "node_modules/@babel/plugin-transform-async-to-generator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.28.6.tgz", - "integrity": "sha512-ilTRcmbuXjsMmcZ3HASTe4caH5Tpo93PkTxF9oG2VZsSWsahydmcEHhix9Ik122RcTnZnUzPbmux4wh1swfv7g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.29.7.tgz", + "integrity": "sha512-pcUb2SS+RMo9TWVBwKGI5ShtoG7R+zBsFmCKDa6fe8c+hPr3XJlZgoE5j6i8W7gDjhyvy+85vmYexanvXh3d1w==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-remap-async-to-generator": "^7.27.1" + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-remap-async-to-generator": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -889,12 +920,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoped-functions": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz", - "integrity": "sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.29.7.tgz", + "integrity": "sha512-cUSmjh72N+rN4PrkFlN1dJwNCwjVp5d38/CQrEsFggkD10UiFlBFgdH3tv5dNsLuHY+3S8db2xCHjhZcv5WgvA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -904,12 +935,12 @@ } }, "node_modules/@babel/plugin-transform-block-scoping": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.28.6.tgz", - "integrity": "sha512-tt/7wOtBmwHPNMPu7ax4pdPz6shjFrmHDghvNC+FG9Qvj7D6mJcoRQIF5dy4njmxR941l6rgtvfSB2zX3VlUIw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.29.7.tgz", + "integrity": "sha512-ONyr4+AZhKh8yKWInVxU9AXA9EbsyeLcL6V0dJy6M2/62vuvpGm29zzuymbTpdc451GEpDIdAyPLP3r+P61yKQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -919,13 +950,13 @@ } }, "node_modules/@babel/plugin-transform-class-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.28.6.tgz", - "integrity": "sha512-dY2wS3I2G7D697VHndN91TJr8/AAfXQNt5ynCTI/MpxMsSzHp+52uNivYT5wCPax3whc47DR8Ba7cmlQMg24bw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.29.7.tgz", + "integrity": "sha512-GtcpjFvanPfzNQi3eTitsCqtRRmmqzpy/A+yhTR1HaZo1Ly3EA8ZXxlPyHdR8/IuRMYc3E4wdGBewB2QKQjAaA==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -935,13 +966,13 @@ } }, "node_modules/@babel/plugin-transform-class-static-block": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.28.6.tgz", - "integrity": "sha512-rfQ++ghVwTWTqQ7w8qyDxL1XGihjBss4CmTgGRCTAC9RIbhVpyp4fOeZtta0Lbf+dTNIVJer6ych2ibHwkZqsQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.29.7.tgz", + "integrity": "sha512-kibJgmEdX2iMwsHY2tSZNDgj8PwIlCQz7FK9KuGKO8zsuoUwSEhoNnNVp/emKWrbY4HeO6kkXfdMqRKKKXBm2A==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -951,17 +982,17 @@ } }, "node_modules/@babel/plugin-transform-classes": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.28.6.tgz", - "integrity": "sha512-EF5KONAqC5zAqT783iMGuM2ZtmEBy+mJMOKl2BCvPZ2lVrwvXnB6o+OBWCS+CoeCCpVRF2sA2RBKUxvT8tQT5Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.29.7.tgz", + "integrity": "sha512-qV0OGGBVacduzQHE649JyCneOFI/maT+YKsO+K4Yi3xv2wTPNjM/W2o2gdzMwEAZz7fXNTHAe0NcSg30bIN69g==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-globals": "^7.28.0", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-replace-supers": "^7.28.6", - "@babel/traverse": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -971,13 +1002,13 @@ } }, "node_modules/@babel/plugin-transform-computed-properties": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.28.6.tgz", - "integrity": "sha512-bcc3k0ijhHbc2lEfpFHgx7eYw9KNXqOerKWfzbxEHUGKnS3sz9C4CNL9OiFN1297bDNfUiSO7DaLzbvHQQQ1BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.29.7.tgz", + "integrity": "sha512-RK7/IyU5phpuCdBAuig5VkzG/EnbDaui5SQGdU9BFrHdV+mV4cUjLMQ9lJDjLNtWHsqtiefpGZUXQP2BiTYMsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/template": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/template": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -987,13 +1018,13 @@ } }, "node_modules/@babel/plugin-transform-destructuring": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.28.5.tgz", - "integrity": "sha512-Kl9Bc6D0zTUcFUvkNuQh4eGXPKKNDOJQXVyyM4ZAQPMveniJdxi8XMJwLo+xSoW3MIq81bD33lcUe9kZpl0MCw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.29.7.tgz", + "integrity": "sha512-iPX8aD6H9zV5s7ZsqTdNocPN/MGQ5sSMnElKrktxjJRMnB2jN/1p2+R7GkfD6CAYoVFqy5A4XnSIUeGgJzIWpg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.28.5" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1003,13 +1034,13 @@ } }, "node_modules/@babel/plugin-transform-dotall-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.28.6.tgz", - "integrity": "sha512-SljjowuNKB7q5Oayv4FoPzeB74g3QgLt8IVJw9ADvWy3QnUb/01aw8I4AVv8wYnPvQz2GDDZ/g3GhcNyDBI4Bg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.29.7.tgz", + "integrity": "sha512-3qc18hsD2RdZiyJNDNc7HQpv6xbncwh8FYtxNFFzclSyh/trPD9KkVR9BDECUjDLvb7yJVF15GfYUuC+LMkkiQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1019,12 +1050,12 @@ } }, "node_modules/@babel/plugin-transform-duplicate-keys": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz", - "integrity": "sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.29.7.tgz", + "integrity": "sha512-6IvRRriEMqnBwD6chtxdLpMYCHWEzN+oL5cyQtjykya19UgzbmKhxmhZgKC/LHxS2nYr9Q/qYPZ5Lr6jOL9+yQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1034,13 +1065,13 @@ } }, "node_modules/@babel/plugin-transform-duplicate-named-capturing-groups-regex": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.0.tgz", - "integrity": "sha512-zBPcW2lFGxdiD8PUnPwJjag2J9otbcLQzvbiOzDxpYXyCuYX9agOwMPGn1prVH0a4qzhCKu24rlH4c1f7yA8rw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-2wiIyo2BjtgU7HufSeDnL9L2O7zr8jmhFKuSr65VpRkUiRKRNpb0mdlk56+XPPKoIrfHqzbMuglDvZun0RISsA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1050,12 +1081,12 @@ } }, "node_modules/@babel/plugin-transform-dynamic-import": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz", - "integrity": "sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.29.7.tgz", + "integrity": "sha512-giOlEm/EFjfjr+te9NsdjkUo2v4f8rS/SXPumRVHAtbNcyNlvtREkU1dZzaIDclNpnaVhlCqRdFKhJBjBikzLg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1065,13 +1096,13 @@ } }, "node_modules/@babel/plugin-transform-explicit-resource-management": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.28.6.tgz", - "integrity": "sha512-Iao5Konzx2b6g7EPqTy40UZbcdXE126tTxVFr/nAIj+WItNxjKSYTEw3RC+A2/ZetmdJsgueL1KhaMCQHkLPIg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-explicit-resource-management/-/plugin-transform-explicit-resource-management-7.29.7.tgz", + "integrity": "sha512-Rstj7coNz8sE+7Ju7ihpHLI564lsK5pUpNNlvptCIC/16E/S5hbl6n3kESPKdNRmqEWlpn5xpS5Q2dvXBsySLw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1081,12 +1112,12 @@ } }, "node_modules/@babel/plugin-transform-exponentiation-operator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.28.6.tgz", - "integrity": "sha512-WitabqiGjV/vJ0aPOLSFfNY1u9U3R7W36B03r5I2KoNix+a3sOhJ3pKFB3R5It9/UiK78NiO0KE9P21cMhlPkw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.29.7.tgz", + "integrity": "sha512-zFpMOTLZBdW5LfObqcSbL6kefg4R4eLdmvS0wbN9M6D5Mym/sKm9toOoWyVOa+xDjvCnuWcHls2YonXwHvH3CQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1096,12 +1127,12 @@ } }, "node_modules/@babel/plugin-transform-export-namespace-from": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz", - "integrity": "sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.29.7.tgz", + "integrity": "sha512-24B2nOy2TeJSMheqwPD4DDQOV/elLSIlKxjZt4i05H5AgdPdWR3n18HnNrcJ+j76WJd9gbwb9jPjNYUy6RautA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1111,13 +1142,13 @@ } }, "node_modules/@babel/plugin-transform-for-of": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz", - "integrity": "sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.29.7.tgz", + "integrity": "sha512-zeSIHh0+E1Um1WJRXCFlHQYu2ieJNdivLLjlBEp+dIBu3S51n+SZZmIXjxnItw6pz56Cn+KvK68BIBVsxq2JiQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1127,14 +1158,14 @@ } }, "node_modules/@babel/plugin-transform-function-name": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz", - "integrity": "sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.29.7.tgz", + "integrity": "sha512-otRWaHXE6fbAGkePvaj/kvs3HsqXfPhlnzwSOlnFgbqCPMd975dW+4wZ00WFBt+/YlBGcJwNrARQTOJOb4ZrIg==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/traverse": "^7.27.1" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1144,12 +1175,12 @@ } }, "node_modules/@babel/plugin-transform-json-strings": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.28.6.tgz", - "integrity": "sha512-Nr+hEN+0geQkzhbdgQVPoqr47lZbm+5fCUmO70722xJZd0Mvb59+33QLImGj6F+DkK3xgDi1YVysP8whD6FQAw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.29.7.tgz", + "integrity": "sha512-RRnE2+eon1rJAq8MnoF1b5kTpY1vU88twHcvcKMrsqP/jxIRqDVs9iJB5fqPuqyeFAW0wJo4MlUIPpQCq/aRsg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1159,12 +1190,12 @@ } }, "node_modules/@babel/plugin-transform-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz", - "integrity": "sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.29.7.tgz", + "integrity": "sha512-DZ/oLP21ZuWx1vKqnoNv6/tvEK48AQOBRai40CX9dTjGluvT/YZCyY3rryDtyUqCEoyNroy5KKPwX2iQCiRvyw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1174,12 +1205,12 @@ } }, "node_modules/@babel/plugin-transform-logical-assignment-operators": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.28.6.tgz", - "integrity": "sha512-+anKKair6gpi8VsM/95kmomGNMD0eLz1NQ8+Pfw5sAwWH9fGYXT50E55ZpV0pHUHWf6IUTWPM+f/7AAff+wr9A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.29.7.tgz", + "integrity": "sha512-A0H91hh6W8MFRkp5TqJmMr39jzGD1A1E1Ysiv2O06Sfbhkapm+XyIzxWCEh5kqwOZ1/8QZ0dY3SeQ7XBqfJd5Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1189,12 +1220,12 @@ } }, "node_modules/@babel/plugin-transform-member-expression-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz", - "integrity": "sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.29.7.tgz", + "integrity": "sha512-hl1kwFZCCiDyfH25Xmco9jTrkPgnS9pmOzSG7W5I4SaGbLeqKv417hcU2RKmaxoPEgsoJh7ZPOrnPGq99bHoUg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1204,13 +1235,13 @@ } }, "node_modules/@babel/plugin-transform-modules-amd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz", - "integrity": "sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.29.7.tgz", + "integrity": "sha512-fxtQoH3m5ywUSIfaH0FGCzWu4McsYon5bD3K4XnskC7f+OyQMj7rsOMi4NvvmJ83WwBAg4UCe+ov4VZlqEvyew==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1220,13 +1251,13 @@ } }, "node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.28.6.tgz", - "integrity": "sha512-jppVbf8IV9iWWwWTQIxJMAJCWBuuKx71475wHwYytrRGQ2CWiDvYlADQno3tcYpS/T2UUWFQp3nVtYfK/YBQrA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.29.7.tgz", + "integrity": "sha512-j0vCldybPC5b5dwCQOJ21uKtHzt7hxLygJTg9eF1ScfaikEDNfzn94XoW5Fi+seBR0nCyL23xaBFFkq7dTM8XQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1236,15 +1267,15 @@ } }, "node_modules/@babel/plugin-transform-modules-systemjs": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.0.tgz", - "integrity": "sha512-PrujnVFbOdUpw4UHiVwKvKRLMMic8+eC0CuNlxjsyZUiBjhFdPsewdXCkveh2KqBA9/waD0W1b4hXSOBQJezpQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.29.7.tgz", + "integrity": "sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-validator-identifier": "^7.28.5", - "@babel/traverse": "^7.29.0" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1254,13 +1285,13 @@ } }, "node_modules/@babel/plugin-transform-modules-umd": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz", - "integrity": "sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.29.7.tgz", + "integrity": "sha512-B4UkaTK3QpgCwJnrxKfMPKdo92CN7OKXAlpAAnM3UPu0Q0lCCk57ylA9AJbRy2v8dDKOPAAWcoR6CMyeoHwRCA==", "license": "MIT", "dependencies": { - "@babel/helper-module-transforms": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-module-transforms": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1270,13 +1301,13 @@ } }, "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.0.tgz", - "integrity": "sha512-1CZQA5KNAD6ZYQLPw7oi5ewtDNxH/2vuCh+6SmvgDfhumForvs8a1o9n0UrEoBD8HU4djO2yWngTQlXl1NDVEQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.29.7.tgz", + "integrity": "sha512-vuFoLwr4qnv2xbZ16SQd6uPcH5FNrLHhk/Jzo++0XJFcaDsr4gjJVg6j398oMHiC+83k/GiBzviwF5KBJkPUtQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1286,12 +1317,12 @@ } }, "node_modules/@babel/plugin-transform-new-target": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz", - "integrity": "sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.29.7.tgz", + "integrity": "sha512-fEo41GmsOUhOBlw8ioo6zvjX5Xc2Lqkzlyfqbpsk3eB6TReV18uhxZ0esfEokVbY2+PVJAQHNKxER6lGrzNd3A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1301,12 +1332,12 @@ } }, "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.28.6.tgz", - "integrity": "sha512-3wKbRgmzYbw24mDJXT7N+ADXw8BC/imU9yo9c9X9NKaLF1fW+e5H1U5QjMUBe4Qo4Ox/o++IyUkl1sVCLgevKg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.29.7.tgz", + "integrity": "sha512-idmp1dFaekP9GbcMvG24Kvw2BfhFZjHnNJCkV4WuIY4PskJzwI3f1N5OdgYke38T7rftO6ERulFRn2cFeZwRkg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1316,12 +1347,12 @@ } }, "node_modules/@babel/plugin-transform-numeric-separator": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.28.6.tgz", - "integrity": "sha512-SJR8hPynj8outz+SlStQSwvziMN4+Bq99it4tMIf5/Caq+3iOc0JtKyse8puvyXkk3eFRIA5ID/XfunGgO5i6w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.29.7.tgz", + "integrity": "sha512-zR7fv/z14OjgHl4AgRtkDBvBMhIzCxqV/qN/2BCRC7LjFwvuzjYe7gDWxC4Wl/SNsLM6SE1IWvRPYMgSJaUvNw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1331,16 +1362,16 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.28.6.tgz", - "integrity": "sha512-5rh+JR4JBC4pGkXLAcYdLHZjXudVxWMXbB6u6+E9lRL5TrGVbHt1TjxGbZ8CkmYw9zjkB7jutzOROArsqtncEA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.29.7.tgz", + "integrity": "sha512-Ld98jn4c0smUywL57m7SgsHq3OpThOa6LqZJif3G6jYOovPleoFhVrBJ1WegRApSFB2wu4+RelAj9AC9G08Z4A==", "license": "MIT", "dependencies": { - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/traverse": "^7.28.6" + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/traverse": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1350,13 +1381,13 @@ } }, "node_modules/@babel/plugin-transform-object-super": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz", - "integrity": "sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.29.7.tgz", + "integrity": "sha512-Ea/diGcw0twB5IlZPO5sgET6fJsLJqPABqTuFWIR+iMPGPZJkATEIWx0wa+aEQ5UY1CBQyP/gkAiLEqn1vBiQA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-replace-supers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-replace-supers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1366,12 +1397,12 @@ } }, "node_modules/@babel/plugin-transform-optional-catch-binding": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.28.6.tgz", - "integrity": "sha512-R8ja/Pyrv0OGAvAXQhSTmWyPJPml+0TMqXlO5w+AsMEiwb2fg3WkOvob7UxFSL3OIttFSGSRFKQsOhJ/X6HQdQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.29.7.tgz", + "integrity": "sha512-sLsyndxK2VwX6yNUOakMb7Sh553ZTe/vVM1XJ+9Z5aW1ytsc8xOIwmyk05NNjN60vkc5/KqoTH6hB4V41LJhng==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1381,13 +1412,13 @@ } }, "node_modules/@babel/plugin-transform-optional-chaining": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.28.6.tgz", - "integrity": "sha512-A4zobikRGJTsX9uqVFdafzGkqD30t26ck2LmOzAuLL8b2x6k3TIqRiT2xVvA9fNmFeTX484VpsdgmKNA0bS23w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.29.7.tgz", + "integrity": "sha512-6GM1dhvK3gNODkXcEcMCOLEDCLSoZ/sBbro2Ax8HURyasQ4NshagQixkRFdh5niI6E4gmA/jYI/4aT7rRos3ZQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1397,12 +1428,12 @@ } }, "node_modules/@babel/plugin-transform-parameters": { - "version": "7.27.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.7.tgz", - "integrity": "sha512-qBkYTYCb76RRxUM6CcZA5KRu8K4SM8ajzVeUgVdMVO9NN9uI/GaVmBg/WKJJGnNokV9SY8FxNOVWGXzqzUidBg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.29.7.tgz", + "integrity": "sha512-ZDOBqV/qLYJI0YElr8DcENEyARsFQeESqWXH6gZlghYXuPPjvweuDhP4VyEi4BlUBlLRFZVjxoZDMjxhLW766g==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1412,13 +1443,13 @@ } }, "node_modules/@babel/plugin-transform-private-methods": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.28.6.tgz", - "integrity": "sha512-piiuapX9CRv7+0st8lmuUlRSmX6mBcVeNQ1b4AYzJxfCMuBfB0vBXDiGSmm03pKJw1v6cZ8KSeM+oUnM6yAExg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.29.7.tgz", + "integrity": "sha512-/6Rz4DK1ETDEM/bWHsPHcaEe7ZaT1EqSXjtSP/L0DijOYuaUhiRiOKcwpZ8P7zR4xXEHc2ITdiCgBm9Tpyv9ug==", "license": "MIT", "dependencies": { - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1428,14 +1459,14 @@ } }, "node_modules/@babel/plugin-transform-private-property-in-object": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.28.6.tgz", - "integrity": "sha512-b97jvNSOb5+ehyQmBpmhOCiUC5oVK4PMnpRvO7+ymFBoqYjeDHIU9jnrNUuwHOiL9RpGDoKBpSViarV+BU+eVA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.29.7.tgz", + "integrity": "sha512-+BNo06dnrzdNNqCm1X6YUaVv0DKk8Q+JYcoZfOkLhYWNCXzlwTSRq8zGWayT1csjcpNXV9CQTBRRbmTLZac5cA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1445,12 +1476,12 @@ } }, "node_modules/@babel/plugin-transform-property-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz", - "integrity": "sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.29.7.tgz", + "integrity": "sha512-bOMRLQuI0A5ZqHq3OWJ89/rXpJ/NJrbVhXiP4zwPGMs6kpcVsuTUNjwoE30K0Qm3mf48a/TnRYYD6vPNqcg6jA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1460,12 +1491,12 @@ } }, "node_modules/@babel/plugin-transform-react-constant-elements": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.27.1.tgz", - "integrity": "sha512-edoidOjl/ZxvYo4lSBOQGDSyToYVkTAwyVoa2tkuYTSmjrB1+uAedoL5iROVLXkxH+vRgA7uP4tMg2pUJpZ3Ug==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.29.7.tgz", + "integrity": "sha512-J0wGhKan+rIiE2OhfhRptySLrJ6SjQYM6b6N1FMlhyhCcw1Mig8vQjWchyB+bgHGDvaWo6Diu6CLRMra2uMtmg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1475,12 +1506,12 @@ } }, "node_modules/@babel/plugin-transform-react-display-name": { - "version": "7.28.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.28.0.tgz", - "integrity": "sha512-D6Eujc2zMxKjfa4Zxl4GHMsmhKKZ9VpcqIchJLvwTxad9zWIYulwYItBovpDOoNLISpcZSXoDJ5gaGbQUDqViA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.29.7.tgz", + "integrity": "sha512-+1wdDMGNb4UPeY3Q4L5yLiYe6TXPXubs4NjrgRFw13hPRLJfEMw2Q5OXkee6/IfdqePIeW4Jjwe3aBh7SdKz4Q==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1490,16 +1521,16 @@ } }, "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.28.6.tgz", - "integrity": "sha512-61bxqhiRfAACulXSLd/GxqmAedUSrRZIu/cbaT18T1CetkTmtDN15it7i80ru4DVqRK1WMxQhXs+Lf9kajm5Ow==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.29.7.tgz", + "integrity": "sha512-WsZulLVBUHXVj2cUcPVx6UE21TpalB6bHbSFErKT0Ib++ax24jjXe73FqlWvdylFOjiuPHYi6VCcgRad1ItN+A==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/plugin-syntax-jsx": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1509,12 +1540,12 @@ } }, "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.27.1.tgz", - "integrity": "sha512-ykDdF5yI4f1WrAolLqeF3hmYU12j9ntLQl/AOG1HAS21jxyg1Q0/J/tpREuYLfatGdGmXp/3yS0ZA76kOlVq9Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.29.7.tgz", + "integrity": "sha512-Xfy3UVMF04+ypnFbkhvfqtmvwfe92qwQdbGZVonhE+6v35GzlofmOnA1szaZqzb9xYWr0nl1e5EMmzi0DNON1g==", "license": "MIT", "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.27.1" + "@babel/plugin-transform-react-jsx": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1524,13 +1555,13 @@ } }, "node_modules/@babel/plugin-transform-react-pure-annotations": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.27.1.tgz", - "integrity": "sha512-JfuinvDOsD9FVMTHpzA/pBLisxpv1aSf+OIV8lgH3MuWrks19R27e6a6DipIg4aX1Zm9Wpb04p8wljfKrVSnPA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.29.7.tgz", + "integrity": "sha512-H5E+HBgDpr6Q5t+Aj11tL7XkIui1jhbIoArVQnqjgXo5/3YxkN7ZEBcWF4RQlB0T4rrxJQbXS6kiFV6B7XTqUA==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1540,12 +1571,12 @@ } }, "node_modules/@babel/plugin-transform-regenerator": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.0.tgz", - "integrity": "sha512-FijqlqMA7DmRdg/aINBSs04y8XNTYw/lr1gJ2WsmBnnaNw1iS43EPkJW+zK7z65auG3AWRFXWj+NcTQwYptUog==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.29.7.tgz", + "integrity": "sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1555,13 +1586,13 @@ } }, "node_modules/@babel/plugin-transform-regexp-modifiers": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.28.6.tgz", - "integrity": "sha512-QGWAepm9qxpaIs7UM9FvUSnCGlb8Ua1RhyM4/veAxLwt3gMat/LSGrZixyuj4I6+Kn9iwvqCyPTtbdxanYoWYg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.29.7.tgz", + "integrity": "sha512-mB5Fs0VWrJ42ZCmc8114v60qetdaUVNkj9PmSZRmanCZM3S9hm0CFRLjRmYIsuXav14l2jvZ+4T8iiCGnhj3nQ==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1571,12 +1602,12 @@ } }, "node_modules/@babel/plugin-transform-reserved-words": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz", - "integrity": "sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.29.7.tgz", + "integrity": "sha512-5+YhdpVgmfSmwZyLMftfaiffLRMHjzIRHFHHLdibcSyJm2pasMrKHrO3Ptrt2DRshjvpgjEJJ1zVW14WPq/6QA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1586,13 +1617,13 @@ } }, "node_modules/@babel/plugin-transform-runtime": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.0.tgz", - "integrity": "sha512-jlaRT5dJtMaMCV6fAuLbsQMSwz/QkvaHOHOSXRitGGwSpR1blCY4KUKoyP2tYO8vJcqYe8cEj96cqSztv3uF9w==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.29.7.tgz", + "integrity": "sha512-xmAscdE/AsqRW7vutbPNoUmu/nF5SrLKPs7aoJgEjo35lLKA/Bc0i2rMv/hr1+Y0o1bQCiVtith3u2vdgRL39Q==", "license": "MIT", "dependencies": { - "@babel/helper-module-imports": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", + "@babel/helper-module-imports": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", "babel-plugin-polyfill-corejs2": "^0.4.14", "babel-plugin-polyfill-corejs3": "^0.13.0", "babel-plugin-polyfill-regenerator": "^0.6.5", @@ -1615,12 +1646,12 @@ } }, "node_modules/@babel/plugin-transform-shorthand-properties": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz", - "integrity": "sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.29.7.tgz", + "integrity": "sha512-I+WYbGBAiCn7nA6xBrlgPH+MB7HWb4u8pv5S0Pv7OtwNvIFvCCb24YlttKEeUFVurfBCEaOTnuhlqsb7f0Z5Dg==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1630,13 +1661,13 @@ } }, "node_modules/@babel/plugin-transform-spread": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.28.6.tgz", - "integrity": "sha512-9U4QObUC0FtJl05AsUcodau/RWDytrU6uKgkxu09mLR9HLDAtUMoPuuskm5huQsoktmsYpI+bGmq+iapDcriKA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.29.7.tgz", + "integrity": "sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1646,12 +1677,12 @@ } }, "node_modules/@babel/plugin-transform-sticky-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz", - "integrity": "sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.29.7.tgz", + "integrity": "sha512-BCHzNYJGe9l7EpwwDBN/ztlL2NYFFq8hp9ddjtUEM9f2O7S7kKV/lL6Fwo7IF7NSkYhPK2vO+86nIGltA90MsA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1661,12 +1692,12 @@ } }, "node_modules/@babel/plugin-transform-template-literals": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz", - "integrity": "sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.29.7.tgz", + "integrity": "sha512-NCSEJ4sLFU2gqAub45HYh4fus2yQ36rr6ei6vpU7NdoJqCpxvEG8E6eJpscGyXP3VHD2Ny+fSXr04k1hoUrFqA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1676,12 +1707,12 @@ } }, "node_modules/@babel/plugin-transform-typeof-symbol": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz", - "integrity": "sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.29.7.tgz", + "integrity": "sha512-223mNGoTkBiTEWFoK+Q6Go3tueMRclO8vxxxxquNCYuNI4jWOofFKJRRDu6SDrB8Sgo1UEGW9T4GAQ8ZyRso1A==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1691,16 +1722,16 @@ } }, "node_modules/@babel/plugin-transform-typescript": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.28.6.tgz", - "integrity": "sha512-0YWL2RFxOqEm9Efk5PvreamxPME8OyY0wM5wh5lHjF+VtVhdneCWGzZeSqzOfiobVqQaNCd2z0tQvnI9DaPWPw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.29.7.tgz", + "integrity": "sha512-jK52h8LaLc7JarhQV2ofeFMts4H7vnOXnqZNA6fYglBTZewRBE51KWt3BUltW1P+KoPsYkHoJeXePuz4zo2LMw==", "license": "MIT", "dependencies": { - "@babel/helper-annotate-as-pure": "^7.27.3", - "@babel/helper-create-class-features-plugin": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-skip-transparent-expression-wrappers": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.28.6" + "@babel/helper-annotate-as-pure": "^7.29.7", + "@babel/helper-create-class-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7", + "@babel/plugin-syntax-typescript": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1710,12 +1741,12 @@ } }, "node_modules/@babel/plugin-transform-unicode-escapes": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz", - "integrity": "sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.29.7.tgz", + "integrity": "sha512-jCfXxSjf94lf4E0hKE0AByxF6F3/pVFqRdUUNkDJhsY0m1ZKjnN6ZYyMeHNpzflxb/0q5b7t3p+BE+SLF1WOtA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1725,13 +1756,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-property-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.28.6.tgz", - "integrity": "sha512-4Wlbdl/sIZjzi/8St0evF0gEZrgOswVO6aOzqxh1kDZOl9WmLrHq2HtGhnOJZmHZYKP8WZ1MDLCt5DAWwRo57A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.29.7.tgz", + "integrity": "sha512-OgZ+zoAJgZLUCunsTRQ5LAjOywDv5zzZ2/hQ5aMw1pGXyY2rtE8/chXYUmu3AlVHKpm10KEdG9aMwbI/K76ZGw==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1741,13 +1772,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-regex": { - "version": "7.27.1", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz", - "integrity": "sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.29.7.tgz", + "integrity": "sha512-7D/x/23/d/3VqZ0QA+LGbZMlGwZjztBygSWWWsfTPoQ1oQ6Q1P6Mr3d0kk42XabyUVw+fha3LqdRsFqeKqvCyA==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.27.1", - "@babel/helper-plugin-utils": "^7.27.1" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1757,13 +1788,13 @@ } }, "node_modules/@babel/plugin-transform-unicode-sets-regex": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.28.6.tgz", - "integrity": "sha512-/wHc/paTUmsDYN7SZkpWxogTOBNnlx7nBQYfy6JJlCT7G3mVhltk3e++N7zV0XfgGsrqBxd4rJQt9H16I21Y1Q==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.29.7.tgz", + "integrity": "sha512-BLOhLht9DOJwIxlmp91wHvkXv1lguuHS3/FwUO8HL1H0u8s4hR1gASVFyilu9iGtcTRYqjTZmlsFFeQletntEg==", "license": "MIT", "dependencies": { - "@babel/helper-create-regexp-features-plugin": "^7.28.5", - "@babel/helper-plugin-utils": "^7.28.6" + "@babel/helper-create-regexp-features-plugin": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1773,75 +1804,76 @@ } }, "node_modules/@babel/preset-env": { - "version": "7.29.2", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.2.tgz", - "integrity": "sha512-DYD23veRYGvBFhcTY1iUvJnDNpuqNd/BzBwCvzOTKUnJjKg5kpUBh3/u9585Agdkgj+QuygG7jLfOPWMa2KVNw==", - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.0", - "@babel/helper-compilation-targets": "^7.28.6", - "@babel/helper-plugin-utils": "^7.28.6", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.28.5", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.27.1", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.27.1", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.27.1", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.28.6", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.29.7.tgz", + "integrity": "sha512-GYzX36n1nsciIb0uyH0GHwxwtNwPQIcpxSeiVLDtG/B7jB5xXgchnmL1f/jCX5o+pwnaDBtO60ONSJhEBJfxYA==", + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.28.6", - "@babel/plugin-syntax-import-attributes": "^7.28.6", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.27.1", - "@babel/plugin-transform-async-generator-functions": "^7.29.0", - "@babel/plugin-transform-async-to-generator": "^7.28.6", - "@babel/plugin-transform-block-scoped-functions": "^7.27.1", - "@babel/plugin-transform-block-scoping": "^7.28.6", - "@babel/plugin-transform-class-properties": "^7.28.6", - "@babel/plugin-transform-class-static-block": "^7.28.6", - "@babel/plugin-transform-classes": "^7.28.6", - "@babel/plugin-transform-computed-properties": "^7.28.6", - "@babel/plugin-transform-destructuring": "^7.28.5", - "@babel/plugin-transform-dotall-regex": "^7.28.6", - "@babel/plugin-transform-duplicate-keys": "^7.27.1", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.0", - "@babel/plugin-transform-dynamic-import": "^7.27.1", - "@babel/plugin-transform-explicit-resource-management": "^7.28.6", - "@babel/plugin-transform-exponentiation-operator": "^7.28.6", - "@babel/plugin-transform-export-namespace-from": "^7.27.1", - "@babel/plugin-transform-for-of": "^7.27.1", - "@babel/plugin-transform-function-name": "^7.27.1", - "@babel/plugin-transform-json-strings": "^7.28.6", - "@babel/plugin-transform-literals": "^7.27.1", - "@babel/plugin-transform-logical-assignment-operators": "^7.28.6", - "@babel/plugin-transform-member-expression-literals": "^7.27.1", - "@babel/plugin-transform-modules-amd": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.28.6", - "@babel/plugin-transform-modules-systemjs": "^7.29.0", - "@babel/plugin-transform-modules-umd": "^7.27.1", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.0", - "@babel/plugin-transform-new-target": "^7.27.1", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.28.6", - "@babel/plugin-transform-numeric-separator": "^7.28.6", - "@babel/plugin-transform-object-rest-spread": "^7.28.6", - "@babel/plugin-transform-object-super": "^7.27.1", - "@babel/plugin-transform-optional-catch-binding": "^7.28.6", - "@babel/plugin-transform-optional-chaining": "^7.28.6", - "@babel/plugin-transform-parameters": "^7.27.7", - "@babel/plugin-transform-private-methods": "^7.28.6", - "@babel/plugin-transform-private-property-in-object": "^7.28.6", - "@babel/plugin-transform-property-literals": "^7.27.1", - "@babel/plugin-transform-regenerator": "^7.29.0", - "@babel/plugin-transform-regexp-modifiers": "^7.28.6", - "@babel/plugin-transform-reserved-words": "^7.27.1", - "@babel/plugin-transform-shorthand-properties": "^7.27.1", - "@babel/plugin-transform-spread": "^7.28.6", - "@babel/plugin-transform-sticky-regex": "^7.27.1", - "@babel/plugin-transform-template-literals": "^7.27.1", - "@babel/plugin-transform-typeof-symbol": "^7.27.1", - "@babel/plugin-transform-unicode-escapes": "^7.27.1", - "@babel/plugin-transform-unicode-property-regex": "^7.28.6", - "@babel/plugin-transform-unicode-regex": "^7.27.1", - "@babel/plugin-transform-unicode-sets-regex": "^7.28.6", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", "@babel/preset-modules": "0.1.6-no-external-plugins", "babel-plugin-polyfill-corejs2": "^0.4.15", "babel-plugin-polyfill-corejs3": "^0.14.0", @@ -1893,17 +1925,17 @@ } }, "node_modules/@babel/preset-react": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.28.5.tgz", - "integrity": "sha512-Z3J8vhRq7CeLjdC58jLv4lnZ5RKFUJWqH5emvxmv9Hv3BD1T9R/Im713R4MTKwvFaV74ejZ3sM01LyEKk4ugNQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.29.7.tgz", + "integrity": "sha512-C+PV1TFUPTmBQGoPBL8j2QmLpZ117YTCwxIZeJOM96GbYMFSc7/pOXU5lVykwnZxyTqQxRsvoRk6f2FktZgGHA==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-transform-react-display-name": "^7.28.0", - "@babel/plugin-transform-react-jsx": "^7.27.1", - "@babel/plugin-transform-react-jsx-development": "^7.27.1", - "@babel/plugin-transform-react-pure-annotations": "^7.27.1" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-transform-react-display-name": "^7.29.7", + "@babel/plugin-transform-react-jsx": "^7.29.7", + "@babel/plugin-transform-react-jsx-development": "^7.29.7", + "@babel/plugin-transform-react-pure-annotations": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1913,16 +1945,16 @@ } }, "node_modules/@babel/preset-typescript": { - "version": "7.28.5", - "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.28.5.tgz", - "integrity": "sha512-+bQy5WOI2V6LJZpPVxY+yp66XdZ2yifu0Mc1aP5CQKgjn4QM5IN2i5fAZ4xKop47pr8rpVhiAeu+nDQa12C8+g==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/preset-typescript/-/preset-typescript-7.29.7.tgz", + "integrity": "sha512-/Foi8vKY2EVbed/1eZx0gJEEwHAIxogrySI7rULcRIvhZzbvoE/b5qG5Ghc0WKAFKOHA9SD1x7RsFlOYdutIiQ==", "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.27.1", - "@babel/helper-validator-option": "^7.27.1", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-transform-modules-commonjs": "^7.27.1", - "@babel/plugin-transform-typescript": "^7.28.5" + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-syntax-jsx": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-typescript": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -1932,55 +1964,52 @@ } }, "node_modules/@babel/runtime": { - "version": "7.27.0", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", - "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.7.tgz", + "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==", "license": "MIT", - "dependencies": { - "regenerator-runtime": "^0.14.0" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.28.4", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.28.4.tgz", - "integrity": "sha512-h7iEYiW4HebClDEhtvFObtPmIvrd1SSfpI9EhOeKk4CtIK/ngBWFpuhCzhdmRKtg71ylcue+9I6dv54XYO1epQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.29.7.tgz", + "integrity": "sha512-ppj9ouYku+RX0ljtgZd+KMO5mkM2bCqg8H2PYAFWnLsHEIKIdRojqbJ2i3eVHrisuxy7nOFCmngTDdWtUCdXUQ==", "license": "MIT", "dependencies": { - "core-js-pure": "^3.43.0" + "core-js-pure": "^3.48.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/template": { - "version": "7.28.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", - "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.29.7.tgz", + "integrity": "sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.28.6", - "@babel/parser": "^7.28.6", - "@babel/types": "^7.28.6" + "@babel/code-frame": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/types": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", - "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.7.tgz", + "integrity": "sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==", "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.29.0", - "@babel/generator": "^7.29.0", - "@babel/helper-globals": "^7.28.0", - "@babel/parser": "^7.29.0", - "@babel/template": "^7.28.6", - "@babel/types": "^7.29.0", + "@babel/code-frame": "^7.29.7", + "@babel/generator": "^7.29.7", + "@babel/helper-globals": "^7.29.7", + "@babel/parser": "^7.29.7", + "@babel/template": "^7.29.7", + "@babel/types": "^7.29.7", "debug": "^4.3.1" }, "engines": { @@ -1988,67 +2017,138 @@ } }, "node_modules/@babel/types": { - "version": "7.29.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", - "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "version": "7.29.7", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.7.tgz", + "integrity": "sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==", "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.27.1", - "@babel/helper-validator-identifier": "^7.28.5" + "@babel/helper-string-parser": "^7.29.7", + "@babel/helper-validator-identifier": "^7.29.7" }, "engines": { "node": ">=6.9.0" } }, "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==", - "license": "Apache-2.0", + "node_modules/@chevrotain/types": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.1.2.tgz", + "integrity": "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw==", + "license": "Apache-2.0" + }, + "node_modules/@codemirror/autocomplete": { + "version": "6.20.3", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.20.3.tgz", + "integrity": "sha512-tlosUqb+3BbxCxZdu4tKeRghPFC+QM7q4X5YhKV2eCmPG+1r2F3f4AaSz5sCrFqUtX4Jh20VFTKecl16MgiV9g==", + "license": "MIT", "dependencies": { - "@chevrotain/gast": "11.0.3", - "@chevrotain/types": "11.0.3", - "lodash-es": "4.17.21" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.17.0", + "@lezer/common": "^1.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==", - "license": "Apache-2.0", + "node_modules/@codemirror/commands": { + "version": "6.10.4", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.10.4.tgz", + "integrity": "sha512-Ryk9y9T0FFVF0cUGhAknveAyUOl/A1qReTFi+qPKtOh2Z9F4AUBz3XOrYD4ZEgZirdugVzHvd/2/Wcwy5OliTg==", + "license": "MIT", "dependencies": { - "@chevrotain/types": "11.0.3", - "lodash-es": "4.17.21" + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.7.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.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==", - "license": "Apache-2.0" + "node_modules/@codemirror/lang-json": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@codemirror/lang-json/-/lang-json-6.0.2.tgz", + "integrity": "sha512-x2OtO+AvwEHrEwR0FyyPtfDUiloG3rnVTSZV1W8UteaLL8/MajQd8DpvUb2YVzC+/T18aSDv0H9mu+xw0EStoQ==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@lezer/json": "^1.0.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==", - "license": "Apache-2.0" + "node_modules/@codemirror/language": { + "version": "6.12.4", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.12.4.tgz", + "integrity": "sha512-1q4PaT+o6PbgpkJt4Q8Fv5XJxTy4FUZ4MWETtyiDw3J0Pyr9E2vqcKL+k9wcvjNTIsauxvE7OfmWj3FRPHQ76A==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.5.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0", + "style-mod": "^4.0.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==", - "license": "Apache-2.0" + "node_modules/@codemirror/lint": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.9.7.tgz", + "integrity": "sha512-28/+iWLYxKxsvGYhSYL7zaCZqLz5+FFFDq9tVsvGv9kv8RY4fFAchJ5WX9M3YrrRlTIsECjsXPqeNgnSmNP2dg==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.42.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/search": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.7.1.tgz", + "integrity": "sha512-uMe5UO6PamJtSHrXhhHOzSX3ReWtiJrva6GnPMwSOrZtiExb5X5eExhr2OUZQVvdxPsKpY3Ro2mFbQadpPWmHA==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.37.0", + "crelt": "^1.0.5" + } + }, + "node_modules/@codemirror/state": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.7.1.tgz", + "integrity": "sha512-9QzNDgE4EYDnAHfrTlR2lwiPciiOymLtwKK+8yHQzCc7GXhAP9xdEbEJFy2IWB1j9UGUl9BsgMmTo/ImA02T7A==", + "license": "MIT", + "dependencies": { + "@marijn/find-cluster-break": "^1.0.0" + } + }, + "node_modules/@codemirror/theme-one-dark": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/@codemirror/theme-one-dark/-/theme-one-dark-6.1.3.tgz", + "integrity": "sha512-NzBdIvEJmx6fjeremiGp3t/okrLPYT0d9orIc7AFun8oZcRk58aejkqhv6spnz4MLAevrKNPMQYXEWMg4s+sKA==", + "license": "MIT", + "dependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0", + "@lezer/highlight": "^1.0.0" + } + }, + "node_modules/@codemirror/view": { + "version": "6.43.7", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.43.7.tgz", + "integrity": "sha512-FZsExxkoxnAN+d9TgqXLg5g4A1oQwzX9WlkOT5i2PKkcW7xx3Bmu0vs90g6fo9Mpdsb/l96dnAraQ8932aO4/g==", + "license": "MIT", + "dependencies": { + "@codemirror/state": "^6.7.0", + "crelt": "^1.0.6", + "style-mod": "^4.1.0", + "w3c-keyname": "^2.2.4" + } }, "node_modules/@colors/colors": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "license": "MIT", "optional": true, "engines": { "node": ">=0.1.90" @@ -2288,9 +2388,9 @@ } }, "node_modules/@csstools/postcss-cascade-layers/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -2709,9 +2809,9 @@ } }, "node_modules/@csstools/postcss-is-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3156,9 +3256,9 @@ } }, "node_modules/@csstools/postcss-scope-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -3374,14 +3474,15 @@ "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/@docsearch/core": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.6.2.tgz", - "integrity": "sha512-/S0e6Dj7Zcm8m9Rru49YEX49dhU11be68c+S/BCyN8zQsTTgkKzXlhRbVL5mV6lOLC2+ZRRryaTdcm070Ug2oA==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/core/-/core-4.6.3.tgz", + "integrity": "sha512-rUOujwIpxJRgD7+kicVsI3D5sqBvdiRTquzWBpTEXZs8ZXfGbfzpus5HqumaNYTppN2HvH8E2yNuRwYdHJeOlA==", "license": "MIT", "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -3401,20 +3502,20 @@ } }, "node_modules/@docsearch/css": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.2.tgz", - "integrity": "sha512-fH/cn8BjEEdM2nJdjNMHIvOVYupG6AIDtFVDgIZrNzdCSj4KXr9kd+hsehqsNGYjpUjObeKYKvgy/IwCb1jZYQ==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/css/-/css-4.6.3.tgz", + "integrity": "sha512-nlOwcXcsNAptQl4vlL4MA78qNJKO0Qlds5GuBjCoePgkebTXLSf8Qt1oyZ3YBshYupKXG9VRGEsk1zr23d+bzQ==", "license": "MIT" }, "node_modules/@docsearch/react": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.6.2.tgz", - "integrity": "sha512-/BbtGFtqVOGwZx0dw/UfhN/0/DmMQYnulY4iv0tPRhC2JCXv0ka/+izwt3Jzo1ZxXS/2eMvv9zHsBJOK1I9f/w==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/@docsearch/react/-/react-4.6.3.tgz", + "integrity": "sha512-Bg2wdDsoQVlNCcEKuEJAU04tvHCqgx8rIu+uIoM4pRtcx3TBKJuXutJik3LTA8LRc9YEyHkrYUrmcC0D7BYf+g==", "license": "MIT", "dependencies": { "@algolia/autocomplete-core": "1.19.2", - "@docsearch/core": "4.6.2", - "@docsearch/css": "4.6.2" + "@docsearch/core": "4.6.3", + "@docsearch/css": "4.6.3" }, "peerDependencies": { "@types/react": ">= 16.8.0 < 20.0.0", @@ -3437,10 +3538,42 @@ } } }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-core": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.19.2.tgz", + "integrity": "sha512-mKv7RyuAzXvwmq+0XRK8HqZXt9iZ5Kkm2huLjgn5JoCPtDy+oh9yxUMfDDaVCw0oyzZ1isdJBc7l9nuCyyR7Nw==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-plugin-algolia-insights": "1.19.2", + "@algolia/autocomplete-shared": "1.19.2" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-plugin-algolia-insights": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-plugin-algolia-insights/-/autocomplete-plugin-algolia-insights-1.19.2.tgz", + "integrity": "sha512-TjxbcC/r4vwmnZaPwrHtkXNeqvlpdyR+oR9Wi2XyfORkiGkLTVhX2j+O9SaCCINbKoDfc+c2PB8NjfOnz7+oKg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-shared": "1.19.2" + }, + "peerDependencies": { + "search-insights": ">= 1 < 3" + } + }, + "node_modules/@docsearch/react/node_modules/@algolia/autocomplete-shared": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@algolia/autocomplete-shared/-/autocomplete-shared-1.19.2.tgz", + "integrity": "sha512-jEazxZTVD2nLrC+wYlVHQgpBoBB5KPStrJxLzsIFl6Kqd1AlG9sIAGl39V5tECLpIQzB3Qa2T6ZPJ1ChkwMK/w==", + "license": "MIT", + "peerDependencies": { + "@algolia/client-search": ">= 4.9.1 < 6", + "algoliasearch": ">= 4.9.1 < 6" + } + }, "node_modules/@docusaurus/babel": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.9.2.tgz", - "integrity": "sha512-GEANdi/SgER+L7Japs25YiGil/AUDnFFHaCGPBbundxoWtCkA2lmy7/tFmgED4y1htAy6Oi4wkJEQdGssnw9MA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/babel/-/babel-3.10.2.tgz", + "integrity": "sha512-aJ1hpGyvfkte3dDAfNbWM4biW4yWZBVz7TIGLZP+v+tWOBgxX3e0N5ZIXHIvmfNNXTI77pcHUx3KmtOk05Ze3Q==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", @@ -3451,10 +3584,9 @@ "@babel/preset-react": "^7.25.9", "@babel/preset-typescript": "^7.25.9", "@babel/runtime": "^7.25.9", - "@babel/runtime-corejs3": "^7.25.9", "@babel/traverse": "^7.25.9", - "@docusaurus/logger": "3.9.2", - "@docusaurus/utils": "3.9.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", "babel-plugin-dynamic-import-node": "^2.3.3", "fs-extra": "^11.1.1", "tslib": "^2.6.0" @@ -3464,17 +3596,17 @@ } }, "node_modules/@docusaurus/bundler": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.9.2.tgz", - "integrity": "sha512-ZOVi6GYgTcsZcUzjblpzk3wH1Fya2VNpd5jtHoCCFcJlMQ1EYXZetfAnRHLcyiFeBABaI1ltTYbOBtH/gahGVA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/bundler/-/bundler-3.10.2.tgz", + "integrity": "sha512-i0ZNcy0f0WhaOlYVgzLsWhIoEXO9kS3HRoKPtgE6vQtZUq7arKZaYdNBudr3mqCmd+TyOkwtwfHgs1ENj07r5g==", "license": "MIT", "dependencies": { "@babel/core": "^7.25.9", - "@docusaurus/babel": "3.9.2", - "@docusaurus/cssnano-preset": "3.9.2", - "@docusaurus/logger": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", + "@docusaurus/babel": "3.10.2", + "@docusaurus/cssnano-preset": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", "babel-loader": "^9.2.1", "clean-css": "^5.3.3", "copy-webpack-plugin": "^11.0.0", @@ -3492,7 +3624,7 @@ "tslib": "^2.6.0", "url-loader": "^4.1.1", "webpack": "^5.95.0", - "webpackbar": "^6.0.1" + "webpackbar": "^7.0.0" }, "engines": { "node": ">=20.0" @@ -3507,18 +3639,18 @@ } }, "node_modules/@docusaurus/core": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", - "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", - "license": "MIT", - "dependencies": { - "@docusaurus/babel": "3.9.2", - "@docusaurus/bundler": "3.9.2", - "@docusaurus/logger": "3.9.2", - "@docusaurus/mdx-loader": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-common": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.10.2.tgz", + "integrity": "sha512-EYByj6nk+aD9KeVxV6Hmo2/nAAT79P21Y82ycTBOBtrmqilloIbIEhgL2/8Xpt2Jz/pgNqHAwyusOGwmbKeJmA==", + "license": "MIT", + "dependencies": { + "@docusaurus/babel": "3.10.2", + "@docusaurus/bundler": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "boxen": "^6.2.1", "chalk": "^4.1.2", "chokidar": "^3.5.3", @@ -3526,11 +3658,11 @@ "combine-promises": "^1.1.0", "commander": "^5.1.0", "core-js": "^3.31.1", - "detect-port": "^1.5.1", + "detect-port": "^2.1.0", "escape-html": "^1.0.3", "eta": "^2.2.0", "eval": "^0.1.8", - "execa": "5.1.1", + "execa": "^5.1.1", "fs-extra": "^11.1.1", "html-tags": "^3.3.1", "html-webpack-plugin": "^5.6.0", @@ -3541,12 +3673,12 @@ "prompts": "^2.4.2", "react-helmet-async": "npm:@slorber/react-helmet-async@1.3.0", "react-loadable": "npm:@docusaurus/react-loadable@6.0.0", - "react-loadable-ssr-addon-v5-slorber": "^1.0.1", + "react-loadable-ssr-addon-v5-slorber": "^1.0.3", "react-router": "^5.3.4", "react-router-config": "^5.1.1", "react-router-dom": "^5.3.4", "semver": "^7.5.4", - "serve-handler": "^6.1.6", + "serve-handler": "^6.1.7", "tinypool": "^1.0.2", "tslib": "^2.6.0", "update-notifier": "^6.0.2", @@ -3562,15 +3694,21 @@ "node": ">=20.0" }, "peerDependencies": { + "@docusaurus/faster": "*", "@mdx-js/react": "^3.0.0", "react": "^18.0.0 || ^19.0.0", "react-dom": "^18.0.0 || ^19.0.0" + }, + "peerDependenciesMeta": { + "@docusaurus/faster": { + "optional": true + } } }, "node_modules/@docusaurus/cssnano-preset": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.9.2.tgz", - "integrity": "sha512-8gBKup94aGttRduABsj7bpPFTX7kbwu+xh3K9NMCF5K4bWBqTFYW+REKHF6iBVDHRJ4grZdIPbvkiHd/XNKRMQ==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/cssnano-preset/-/cssnano-preset-3.10.2.tgz", + "integrity": "sha512-4gCnHRbJLTloiwfvFAa92tgb2gI4KYhvjfQVYnEaiMO/EgvWfCo1LwytHXen+1oZAN0VAlS0JAPxp3MsvKDa3A==", "license": "MIT", "dependencies": { "cssnano-preset-advanced": "^6.1.2", @@ -3583,9 +3721,9 @@ } }, "node_modules/@docusaurus/logger": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.9.2.tgz", - "integrity": "sha512-/SVCc57ByARzGSU60c50rMyQlBuMIJCjcsJlkphxY6B0GV4UH3tcA1994N8fFfbJ9kX3jIBe/xg3XP5qBtGDbA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/logger/-/logger-3.10.2.tgz", + "integrity": "sha512-gSEwqtPfCAnC3ZSJY6xL7tcIfgg0vFD39jbv93eakuweyvO2864xR0K+kmKwBhkTCtWRNjuGGnb5rdmkD/ndqw==", "license": "MIT", "dependencies": { "chalk": "^4.1.2", @@ -3596,14 +3734,14 @@ } }, "node_modules/@docusaurus/mdx-loader": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.9.2.tgz", - "integrity": "sha512-wiYoGwF9gdd6rev62xDU8AAM8JuLI/hlwOtCzMmYcspEkzecKrP8J8X+KpYnTlACBUUtXNJpSoCwFWJhLRevzQ==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/mdx-loader/-/mdx-loader-3.10.2.tgz", + "integrity": "sha512-9Fd4V/SFjfrVQ0JH5EN0+iPWyFunvTeQE3gfyFeetqPaXMP0OylIjOw16dCuXG4NZJrYdBqwzjh18/h3gRi47w==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@mdx-js/mdx": "^3.0.0", "@slorber/remark-comment": "^1.0.0", "escape-html": "^1.0.3", @@ -3635,12 +3773,12 @@ } }, "node_modules/@docusaurus/module-type-aliases": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.9.2.tgz", - "integrity": "sha512-8qVe2QA9hVLzvnxP46ysuofJUIc/yYQ82tvA/rBTrnpXtCjNSFLxEZfd5U8cYZuJIVlkPxamsIgwd5tGZXfvew==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/module-type-aliases/-/module-type-aliases-3.10.2.tgz", + "integrity": "sha512-h/I5e4jaAhDHW4vaLENi1i2hnOEnXY1t9R+nnRTbgUl7ymVRzN/HF7dDfj8rKYGj8gfIge+Ef+iYRAMtbGvsrQ==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.9.2", + "@docusaurus/types": "3.10.2", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3653,21 +3791,46 @@ "react-dom": "*" } }, + "node_modules/@docusaurus/plugin-client-redirects": { + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-client-redirects/-/plugin-client-redirects-3.10.2.tgz", + "integrity": "sha512-z5I5ttCXw+8y2gHVZvqAMmUw4Rb0ZzKA5eCPk87SfM/jCKOTvE24yDpPAwwipvug96ij7mOwEHXWw8G4LlWdGA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", + "eta": "^2.2.0", + "fs-extra": "^11.1.1", + "lodash": "^4.17.21", + "tslib": "^2.6.0" + }, + "engines": { + "node": ">=20.0" + }, + "peerDependencies": { + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0" + } + }, "node_modules/@docusaurus/plugin-content-blog": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.9.2.tgz", - "integrity": "sha512-3I2HXy3L1QcjLJLGAoTvoBnpOwa6DPUa3Q0dMK19UTY9mhPkKQg/DYhAGTiBUKcTR0f08iw7kLPqOhIgdV3eVQ==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/logger": "3.9.2", - "@docusaurus/mdx-loader": "3.9.2", - "@docusaurus/theme-common": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-common": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-blog/-/plugin-content-blog-3.10.2.tgz", + "integrity": "sha512-0cbEnNKf0InmLkhj/+nVRmqEnWEoOE8Mh+2x1qOXI0qYpCnphq4RXknVJ8BvybKRXqYVvbmdMfiJSup+k4tm5w==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "cheerio": "1.0.0-rc.12", + "combine-promises": "^1.1.0", "feed": "^4.2.2", "fs-extra": "^11.1.1", "lodash": "^4.17.21", @@ -3688,20 +3851,20 @@ } }, "node_modules/@docusaurus/plugin-content-docs": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", - "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/logger": "3.9.2", - "@docusaurus/mdx-loader": "3.9.2", - "@docusaurus/module-type-aliases": "3.9.2", - "@docusaurus/theme-common": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-common": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.10.2.tgz", + "integrity": "sha512-Sqwl4FPoZBDrlY8I2VU2H8O0M91CHp9T8ToMSkTZmjvHCif+1laqfXi6sTk8IfyVS/trN5yNjcWd1bFsGB6W5Q==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/module-type-aliases": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@types/react-router-config": "^5.0.7", "combine-promises": "^1.1.0", "fs-extra": "^11.1.1", @@ -3721,16 +3884,16 @@ } }, "node_modules/@docusaurus/plugin-content-pages": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.9.2.tgz", - "integrity": "sha512-s4849w/p4noXUrGpPUF0BPqIAfdAe76BLaRGAGKZ1gTDNiGxGcpsLcwJ9OTi1/V8A+AzvsmI9pkjie2zjIQZKA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-pages/-/plugin-content-pages-3.10.2.tgz", + "integrity": "sha512-h5R12sZ/vV9EPiVjvIl9YFCOwkpwXes7dQMYt3EvP6Pphu4amHxxTqWxf08Fl5DR8h+oZMbWpFTNw5vKEYfvzQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/mdx-loader": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "fs-extra": "^11.1.1", "tslib": "^2.6.0", "webpack": "^5.88.1" @@ -3744,15 +3907,15 @@ } }, "node_modules/@docusaurus/plugin-css-cascade-layers": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.9.2.tgz", - "integrity": "sha512-w1s3+Ss+eOQbscGM4cfIFBlVg/QKxyYgj26k5AnakuHkKxH6004ZtuLe5awMBotIYF2bbGDoDhpgQ4r/kcj4rQ==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-css-cascade-layers/-/plugin-css-cascade-layers-3.10.2.tgz", + "integrity": "sha512-UkdvQby5OQUKWrw3lLnSTJXQ6VETaUVTuPQX9AABtmFm5h+ifEBx1OQ+LN726Q4byuwBf2ElHkf4qU4hTxdvRg==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { @@ -3760,14 +3923,14 @@ } }, "node_modules/@docusaurus/plugin-debug": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.9.2.tgz", - "integrity": "sha512-j7a5hWuAFxyQAkilZwhsQ/b3T7FfHZ+0dub6j/GxKNFJp2h9qk/P1Bp7vrGASnvA9KNQBBL1ZXTe7jlh4VdPdA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-debug/-/plugin-debug-3.10.2.tgz", + "integrity": "sha512-8vbZNOSCpnsT57EY6CgN7sgRVmx3KTYwO8Uvo2pbxOyb8tbqAwtT9SslqaQ41HbA1v1hpn5RP7u5s2KvRwAFpQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", "fs-extra": "^11.1.1", "react-json-view-lite": "^2.3.0", "tslib": "^2.6.0" @@ -3781,14 +3944,14 @@ } }, "node_modules/@docusaurus/plugin-google-analytics": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.9.2.tgz", - "integrity": "sha512-mAwwQJ1Us9jL/lVjXtErXto4p4/iaLlweC54yDUK1a97WfkC6Z2k5/769JsFgwOwOP+n5mUQGACXOEQ0XDuVUw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-analytics/-/plugin-google-analytics-3.10.2.tgz", + "integrity": "sha512-kMHMBK9j4VAtgd5owwrRLRIi0EjkrpXlX7ePj1+y68XfVZV9I1T4S+koPDm+Hfw2TtnyHvh0uNrDvjz+DjQGVA==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { @@ -3800,15 +3963,14 @@ } }, "node_modules/@docusaurus/plugin-google-gtag": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.9.2.tgz", - "integrity": "sha512-YJ4lDCphabBtw19ooSlc1MnxtYGpjFV9rEdzjLsUnBCeis2djUyCozZaFhCg6NGEwOn7HDDyMh0yzcdRpnuIvA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-gtag/-/plugin-google-gtag-3.10.2.tgz", + "integrity": "sha512-Vt90nNFhtAChRe9+it1hcHFgFvETdSnOkL5Bma+p6E/yU2tAYrvvyk+gv+LJGM2ZUkyKuKXLRsZ2Lb0bO7+Vog==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", - "@types/gtag.js": "^0.0.12", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { @@ -3820,14 +3982,14 @@ } }, "node_modules/@docusaurus/plugin-google-tag-manager": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.9.2.tgz", - "integrity": "sha512-LJtIrkZN/tuHD8NqDAW1Tnw0ekOwRTfobWPsdO15YxcicBo2ykKF0/D6n0vVBfd3srwr9Z6rzrIWYrMzBGrvNw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-google-tag-manager/-/plugin-google-tag-manager-3.10.2.tgz", + "integrity": "sha512-MLCffCldysi/R0nzJQP7ZWd0xAoGNnSTiVOo6TTR6mKVGFhE+/XArGe67ZcaZv1uytgQXoXs92VJrgVDrz80rQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "tslib": "^2.6.0" }, "engines": { @@ -3839,17 +4001,17 @@ } }, "node_modules/@docusaurus/plugin-sitemap": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.9.2.tgz", - "integrity": "sha512-WLh7ymgDXjG8oPoM/T4/zUP7KcSuFYRZAUTl8vR6VzYkfc18GBM4xLhcT+AKOwun6kBivYKUJf+vlqYJkm+RHw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-sitemap/-/plugin-sitemap-3.10.2.tgz", + "integrity": "sha512-PODkwg5XetLML3hU/3xpCKJUZ9cqExLaBnD/Fzzwj2VHogLeqnDisLIujae87zuze7T4mCm2A6KEqZkyiz07EQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/logger": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-common": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "fs-extra": "^11.1.1", "sitemap": "^7.1.1", "tslib": "^2.6.0" @@ -3863,15 +4025,15 @@ } }, "node_modules/@docusaurus/plugin-svgr": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.9.2.tgz", - "integrity": "sha512-n+1DE+5b3Lnf27TgVU5jM1d4x5tUh2oW5LTsBxJX4PsAPV0JGcmI6p3yLYtEY0LRVEIJh+8RsdQmRE66wSV8mw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/plugin-svgr/-/plugin-svgr-3.10.2.tgz", + "integrity": "sha512-JgfT3jWM0TJ8Uw0cEcqxHpybngQY1vlBYpuuNO+gEh5iPh5Ar+vxq/u9CFrYsWeXy48BN7Db76Pzp2edNXUQ8A==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@svgr/core": "8.1.0", "@svgr/webpack": "^8.1.0", "tslib": "^2.6.0", @@ -3886,26 +4048,26 @@ } }, "node_modules/@docusaurus/preset-classic": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.9.2.tgz", - "integrity": "sha512-IgyYO2Gvaigi21LuDIe+nvmN/dfGXAiMcV/murFqcpjnZc7jxFAxW+9LEjdPt61uZLxG4ByW/oUmX/DDK9t/8w==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/plugin-content-blog": "3.9.2", - "@docusaurus/plugin-content-docs": "3.9.2", - "@docusaurus/plugin-content-pages": "3.9.2", - "@docusaurus/plugin-css-cascade-layers": "3.9.2", - "@docusaurus/plugin-debug": "3.9.2", - "@docusaurus/plugin-google-analytics": "3.9.2", - "@docusaurus/plugin-google-gtag": "3.9.2", - "@docusaurus/plugin-google-tag-manager": "3.9.2", - "@docusaurus/plugin-sitemap": "3.9.2", - "@docusaurus/plugin-svgr": "3.9.2", - "@docusaurus/theme-classic": "3.9.2", - "@docusaurus/theme-common": "3.9.2", - "@docusaurus/theme-search-algolia": "3.9.2", - "@docusaurus/types": "3.9.2" + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/preset-classic/-/preset-classic-3.10.2.tgz", + "integrity": "sha512-a4B3VczmDl99zK0EufDQYomdJ186WDingjmDXxhN2PNPS9Ty/Y2M5CLFX1KQMRKqRTLiRDKfutzG5IY1FC/ceg==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/plugin-content-blog": "3.10.2", + "@docusaurus/plugin-content-docs": "3.10.2", + "@docusaurus/plugin-content-pages": "3.10.2", + "@docusaurus/plugin-css-cascade-layers": "3.10.2", + "@docusaurus/plugin-debug": "3.10.2", + "@docusaurus/plugin-google-analytics": "3.10.2", + "@docusaurus/plugin-google-gtag": "3.10.2", + "@docusaurus/plugin-google-tag-manager": "3.10.2", + "@docusaurus/plugin-sitemap": "3.10.2", + "@docusaurus/plugin-svgr": "3.10.2", + "@docusaurus/theme-classic": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/theme-search-algolia": "3.10.2", + "@docusaurus/types": "3.10.2" }, "engines": { "node": ">=20.0" @@ -3916,26 +4078,27 @@ } }, "node_modules/@docusaurus/theme-classic": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.9.2.tgz", - "integrity": "sha512-IGUsArG5hhekXd7RDb11v94ycpJpFdJPkLnt10fFQWOVxAtq5/D7hT6lzc2fhyQKaaCE62qVajOMKL7OiAFAIA==", - "license": "MIT", - "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/logger": "3.9.2", - "@docusaurus/mdx-loader": "3.9.2", - "@docusaurus/module-type-aliases": "3.9.2", - "@docusaurus/plugin-content-blog": "3.9.2", - "@docusaurus/plugin-content-docs": "3.9.2", - "@docusaurus/plugin-content-pages": "3.9.2", - "@docusaurus/theme-common": "3.9.2", - "@docusaurus/theme-translations": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-common": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-classic/-/theme-classic-3.10.2.tgz", + "integrity": "sha512-JqTSLQmqmA9uKWZsD5iwBGJ4JyKB4/yTw6PsSXVPRJG/6GAm/u+add9Iip+hvwP12/AnPNztrdxsI14NJW4KeA==", + "license": "MIT", + "dependencies": { + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/module-type-aliases": "3.10.2", + "@docusaurus/plugin-content-blog": "3.10.2", + "@docusaurus/plugin-content-docs": "3.10.2", + "@docusaurus/plugin-content-pages": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/theme-translations": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "@mdx-js/react": "^3.0.0", "clsx": "^2.0.0", + "copy-text-to-clipboard": "^3.2.0", "infima": "0.2.0-alpha.45", "lodash": "^4.17.21", "nprogress": "^0.2.0", @@ -3956,15 +4119,15 @@ } }, "node_modules/@docusaurus/theme-common": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.9.2.tgz", - "integrity": "sha512-6c4DAbR6n6nPbnZhY2V3tzpnKnGL+6aOsLvFL26VRqhlczli9eWG0VDUNoCQEPnGwDMhPS42UhSAnz5pThm5Ag==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-common/-/theme-common-3.10.2.tgz", + "integrity": "sha512-R9b/vMpK1yye6hNZTA6x/ivRv+at6GhxnXcxkpzCGzO1R1RwiquqiFg2wMFh6aqlJTpWRFKpFD2TzCDQcyOU0A==", "license": "MIT", "dependencies": { - "@docusaurus/mdx-loader": "3.9.2", - "@docusaurus/module-type-aliases": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-common": "3.9.2", + "@docusaurus/mdx-loader": "3.10.2", + "@docusaurus/module-type-aliases": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", "@types/history": "^4.7.11", "@types/react": "*", "@types/react-router-config": "*", @@ -3984,16 +4147,16 @@ } }, "node_modules/@docusaurus/theme-mermaid": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.9.2.tgz", - "integrity": "sha512-5vhShRDq/ntLzdInsQkTdoKWSzw8d1jB17sNPYhA/KvYYFXfuVEGHLM6nrf8MFbV8TruAHDG21Fn3W4lO8GaDw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.10.2.tgz", + "integrity": "sha512-Stssh5MYQJ+EdYugUXf+ZcpeJFQPKXf0KCd/SWp10o3CmXNaOoh5IEgVjVqY1e1XhQf3on4+Y4BnrMiD95E2SQ==", "license": "MIT", "dependencies": { - "@docusaurus/core": "3.9.2", - "@docusaurus/module-type-aliases": "3.9.2", - "@docusaurus/theme-common": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/module-type-aliases": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "mermaid": ">=11.6.0", "tslib": "^2.6.0" }, @@ -4012,19 +4175,20 @@ } }, "node_modules/@docusaurus/theme-search-algolia": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.9.2.tgz", - "integrity": "sha512-GBDSFNwjnh5/LdkxCKQHkgO2pIMX1447BxYUBG2wBiajS21uj64a+gH/qlbQjDLxmGrbrllBrtJkUHxIsiwRnw==", - "license": "MIT", - "dependencies": { - "@docsearch/react": "^3.9.0 || ^4.1.0", - "@docusaurus/core": "3.9.2", - "@docusaurus/logger": "3.9.2", - "@docusaurus/plugin-content-docs": "3.9.2", - "@docusaurus/theme-common": "3.9.2", - "@docusaurus/theme-translations": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-validation": "3.9.2", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.10.2.tgz", + "integrity": "sha512-1msxllyhi/5m77JukXtp5UFnUAriwZIC1oJ7MTnpQpCwLTbclJi5BK5n28CTZuSXpQN2ewbbnqRgAhMM6c6ihg==", + "license": "MIT", + "dependencies": { + "@algolia/autocomplete-core": "^1.19.2", + "@docsearch/react": "^3.9.0 || ^4.3.2", + "@docusaurus/core": "3.10.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/plugin-content-docs": "3.10.2", + "@docusaurus/theme-common": "3.10.2", + "@docusaurus/theme-translations": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-validation": "3.10.2", "algoliasearch": "^5.37.0", "algoliasearch-helper": "^3.26.0", "clsx": "^2.0.0", @@ -4043,9 +4207,9 @@ } }, "node_modules/@docusaurus/theme-translations": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.9.2.tgz", - "integrity": "sha512-vIryvpP18ON9T9rjgMRFLr2xJVDpw1rtagEGf8Ccce4CkTrvM/fRB8N2nyWYOW5u3DdjkwKw5fBa+3tbn9P4PA==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/theme-translations/-/theme-translations-3.10.2.tgz", + "integrity": "sha512-iv20wrxnyXkY89LM3TzRlzGlt5fIGO5UnaR6UL1ZVfB9RRFjxQFQ6awDrwAc6Km8Y5gD8pInuwYPF+6/TiCxXA==", "license": "MIT", "dependencies": { "fs-extra": "^11.1.1", @@ -4056,16 +4220,16 @@ } }, "node_modules/@docusaurus/tsconfig": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.7.0.tgz", - "integrity": "sha512-vRsyj3yUZCjscgfgcFYjIsTcAru/4h4YH2/XAE8Rs7wWdnng98PgWKvP5ovVc4rmRpRg2WChVW0uOy2xHDvDBQ==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/tsconfig/-/tsconfig-3.10.2.tgz", + "integrity": "sha512-5GiB7h/nFsMFPO9mCqcRNE1yA5TSXXNCshNIgHPL6fCPOjcTDixs6qjQBu8ddkgPcicwCvOA7n3jeK2rGdJk6g==", "dev": true, "license": "MIT" }, "node_modules/@docusaurus/types": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.9.2.tgz", - "integrity": "sha512-Ux1JUNswg+EfUEmajJjyhIohKceitY/yzjRUpu04WXgvVz+fbhVC0p+R0JhvEu4ytw8zIAys2hrdpQPBHRIa8Q==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/types/-/types-3.10.2.tgz", + "integrity": "sha512-B6rvfwIFSapUqUJjMriZswX13K8l5Z7AcmVE6uTEJpYddQieSTR12DsGaFtcZAIDsQd4p+0WTl0Vc6jmZK0Trw==", "license": "MIT", "dependencies": { "@mdx-js/mdx": "^3.0.0", @@ -4099,21 +4263,21 @@ } }, "node_modules/@docusaurus/utils": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.9.2.tgz", - "integrity": "sha512-lBSBiRruFurFKXr5Hbsl2thmGweAPmddhF3jb99U4EMDA5L+e5Y1rAkOS07Nvrup7HUMBDrCV45meaxZnt28nQ==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils/-/utils-3.10.2.tgz", + "integrity": "sha512-xx0W3eav2uW1NRIpuHJWNwLTC15xPNjU4Uxi9NSnd3swYC96BE3vFiT93SD8s24kmAAWNwgZwfZ2fghGZ01Lcw==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.9.2", - "@docusaurus/types": "3.9.2", - "@docusaurus/utils-common": "3.9.2", + "@11ty/gray-matter": "^1.0.0", + "@docusaurus/logger": "3.10.2", + "@docusaurus/types": "3.10.2", + "@docusaurus/utils-common": "3.10.2", "escape-string-regexp": "^4.0.0", - "execa": "5.1.1", + "execa": "^5.1.1", "file-loader": "^6.2.0", "fs-extra": "^11.1.1", "github-slugger": "^1.5.0", "globby": "^11.1.0", - "gray-matter": "^4.0.3", "jiti": "^1.20.0", "js-yaml": "^4.1.0", "lodash": "^4.17.21", @@ -4131,12 +4295,12 @@ } }, "node_modules/@docusaurus/utils-common": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.9.2.tgz", - "integrity": "sha512-I53UC1QctruA6SWLvbjbhCpAw7+X7PePoe5pYcwTOEXD/PxeP8LnECAhTHHwWCblyUX5bMi4QLRkxvyZ+IT8Aw==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-common/-/utils-common-3.10.2.tgz", + "integrity": "sha512-x3Dz6jv6iQKBNjBmVTu8p57abMp/VNTUgKBMgRVXJc5444orBTsArv0+cdfrXTiz/VMmHfDRVkPbL7GH2B7T7w==", "license": "MIT", "dependencies": { - "@docusaurus/types": "3.9.2", + "@docusaurus/types": "3.10.2", "tslib": "^2.6.0" }, "engines": { @@ -4144,14 +4308,14 @@ } }, "node_modules/@docusaurus/utils-validation": { - "version": "3.9.2", - "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.9.2.tgz", - "integrity": "sha512-l7yk3X5VnNmATbwijJkexdhulNsQaNDwoagiwujXoxFbWLcxHQqNQ+c/IAlzrfMMOfa/8xSBZ7KEKDesE/2J7A==", + "version": "3.10.2", + "resolved": "https://registry.npmjs.org/@docusaurus/utils-validation/-/utils-validation-3.10.2.tgz", + "integrity": "sha512-sn8unbDfUL585NtR3cwHefPicOyaHvPaX7VD0aOg/siIxUBoKyKKaGEqzJZDS64mM43TnxurkYDtmB1wsJlZsw==", "license": "MIT", "dependencies": { - "@docusaurus/logger": "3.9.2", - "@docusaurus/utils": "3.9.2", - "@docusaurus/utils-common": "3.9.2", + "@docusaurus/logger": "3.10.2", + "@docusaurus/utils": "3.10.2", + "@docusaurus/utils-common": "3.10.2", "fs-extra": "^11.2.0", "joi": "^17.9.2", "js-yaml": "^4.1.0", @@ -4162,6 +4326,167 @@ "node": ">=20.0" } }, + "node_modules/@emotion/babel-plugin": { + "version": "11.13.5", + "resolved": "https://registry.npmjs.org/@emotion/babel-plugin/-/babel-plugin-11.13.5.tgz", + "integrity": "sha512-pxHCpT2ex+0q+HH91/zsdHkw/lXd468DIN2zvfvLtPKLLMo6gQj7oLObq8PhkrxOZb/gGCq03S3Z7PDhS8pduQ==", + "license": "MIT", + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/runtime": "^7.18.3", + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/serialize": "^1.3.3", + "babel-plugin-macros": "^3.1.0", + "convert-source-map": "^1.5.0", + "escape-string-regexp": "^4.0.0", + "find-root": "^1.1.0", + "source-map": "^0.5.7", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/babel-plugin/node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "license": "MIT" + }, + "node_modules/@emotion/babel-plugin/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@emotion/cache": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/cache/-/cache-11.14.0.tgz", + "integrity": "sha512-L/B1lc/TViYk4DcpGxtAVbx0ZyiKM5ktoIyafGkH6zg/tj+mA+NE//aPYKG0k8kCHSHVJrpLpcAlOBEXQ3SavA==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0", + "@emotion/sheet": "^1.4.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "stylis": "4.2.0" + } + }, + "node_modules/@emotion/hash": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/@emotion/hash/-/hash-0.9.2.tgz", + "integrity": "sha512-MyqliTZGuOm3+5ZRSaaBGP3USLw6+EGykkwZns2EPC5g8jJ4z9OrdZY9apkl3+UP9+sdz76YYkwCKP5gh8iY3g==", + "license": "MIT" + }, + "node_modules/@emotion/is-prop-valid": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/is-prop-valid/-/is-prop-valid-1.4.0.tgz", + "integrity": "sha512-QgD4fyscGcbbKwJmqNvUMSE02OsHUa+lAWKdEUIJKgqe5IwRSKd7+KhibEWdaKwgjLj0DRSHA9biAIqGBk05lw==", + "license": "MIT", + "dependencies": { + "@emotion/memoize": "^0.9.0" + } + }, + "node_modules/@emotion/memoize": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@emotion/memoize/-/memoize-0.9.0.tgz", + "integrity": "sha512-30FAj7/EoJ5mwVPOWhAyCX+FPfMDrVecJAM+Iw9NRoSl4BBAQeqj4cApHHUXOVvIPgLVDsCFoz/hGD+5QQD1GQ==", + "license": "MIT" + }, + "node_modules/@emotion/react": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/@emotion/react/-/react-11.14.0.tgz", + "integrity": "sha512-O000MLDBDdk/EohJPFUqvnp4qnHeYkVP5B0xEG0D/L7cOKP9kefu2DXn8dj74cQfsEzUqh+sr1RzFqiL1o+PpA==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/cache": "^11.14.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2", + "@emotion/weak-memoize": "^0.4.0", + "hoist-non-react-statics": "^3.3.1" + }, + "peerDependencies": { + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/serialize": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@emotion/serialize/-/serialize-1.3.3.tgz", + "integrity": "sha512-EISGqt7sSNWHGI76hC7x1CksiXPahbxEOrC5RjmFRJTqLyEK9/9hZvBbiYn70dw4wuwMKiEMCUlR6ZXTSWQqxA==", + "license": "MIT", + "dependencies": { + "@emotion/hash": "^0.9.2", + "@emotion/memoize": "^0.9.0", + "@emotion/unitless": "^0.10.0", + "@emotion/utils": "^1.4.2", + "csstype": "^3.0.2" + } + }, + "node_modules/@emotion/sheet": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emotion/sheet/-/sheet-1.4.0.tgz", + "integrity": "sha512-fTBW9/8r2w3dXWYM4HCB1Rdp8NLibOw2+XELH5m5+AkWiL/KqYX6dc0kKYlaYyKjrQ6ds33MCdMPEwgs2z1rqg==", + "license": "MIT" + }, + "node_modules/@emotion/styled": { + "version": "11.14.1", + "resolved": "https://registry.npmjs.org/@emotion/styled/-/styled-11.14.1.tgz", + "integrity": "sha512-qEEJt42DuToa3gurlH4Qqc1kVpNq8wO8cJtDzU46TjlzWjDlsVyevtYCRijVq3SrHsROS+gVQ8Fnea108GnKzw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.3", + "@emotion/babel-plugin": "^11.13.5", + "@emotion/is-prop-valid": "^1.3.0", + "@emotion/serialize": "^1.3.3", + "@emotion/use-insertion-effect-with-fallbacks": "^1.2.0", + "@emotion/utils": "^1.4.2" + }, + "peerDependencies": { + "@emotion/react": "^11.0.0-rc.0", + "react": ">=16.8.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@emotion/unitless": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/@emotion/unitless/-/unitless-0.10.0.tgz", + "integrity": "sha512-dFoMUuQA20zvtVTuxZww6OHoJYgrzfKM1t52mVySDJnMSEa08ruEvdYQbhvyu6soU+NeLVd3yKfTfT0NeV6qGg==", + "license": "MIT" + }, + "node_modules/@emotion/use-insertion-effect-with-fallbacks": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@emotion/use-insertion-effect-with-fallbacks/-/use-insertion-effect-with-fallbacks-1.2.0.tgz", + "integrity": "sha512-yJMtVdH59sxi/aVJBpk9FQq+OR8ll5GT8oWd57UpeaKEVGab41JWaCFA7FRLoMLloOZF/c/wsPoe+bfGmRKgDg==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/@emotion/utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@emotion/utils/-/utils-1.4.2.tgz", + "integrity": "sha512-3vLclRofFziIa3J2wDh9jjbkUz9qk5Vi3IZ/FSTKViB0k+ef0fPV7dYrUIugbgupYDx7v9ud/SjrtEP8Y4xLoA==", + "license": "MIT" + }, + "node_modules/@emotion/weak-memoize": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@emotion/weak-memoize/-/weak-memoize-0.4.0.tgz", + "integrity": "sha512-snKqtPW01tN0ui7yu9rGv69aJXr/a/Ywvl11sUjNtEcRc+ng/mQriFL0wLXMef74iHa/EkftbDzU9F8iFbH+zg==", + "license": "MIT" + }, "node_modules/@hapi/hoek": { "version": "9.3.0", "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-9.3.0.tgz", @@ -4184,19 +4509,14 @@ "license": "MIT" }, "node_modules/@iconify/utils": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.0.2.tgz", - "integrity": "sha512-EfJS0rLfVuRuJRn4psJHtK2A9TqVnkxPpHY6lYHiB9+8eSuudsxbwMiavocG45ujOo6FJ+CIRlRnlOGinzkaGQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-3.1.4.tgz", + "integrity": "sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw==", "license": "MIT", "dependencies": { "@antfu/install-pkg": "^1.1.0", - "@antfu/utils": "^9.2.0", "@iconify/types": "^2.0.0", - "debug": "^4.4.1", - "globals": "^15.15.0", - "kolorist": "^1.8.0", - "local-pkg": "^1.1.1", - "mlly": "^1.7.4" + "import-meta-resolve": "^4.2.0" } }, "node_modules/@jest/schemas": { @@ -4252,23 +4572,26 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/source-map": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.6.tgz", - "integrity": "sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==", + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", "dependencies": { "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25" } }, "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", - "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.31", @@ -4297,9 +4620,9 @@ } }, "node_modules/@jsonjoy.com/buffers": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.0.0.tgz", - "integrity": "sha512-NDigYR3PHqCnQLXYyoLbnEdzMMvzeiCWo1KOut7Q0CoIqg9tUAPKJ1iq/2nFhc5kZtexzutNY0LFjdwWL3Dw3Q==", + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-17.67.0.tgz", + "integrity": "sha512-tfExRpYxBvi32vPs9ZHaTjSP4fHAfzSmcahOfNxtvGHcyJel+aibkPlGeBB+7AoC6hL7lXIE++8okecBxx7lcw==", "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -4328,18 +4651,14 @@ "tslib": "2" } }, - "node_modules/@jsonjoy.com/json-pack": { - "version": "1.14.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.14.0.tgz", - "integrity": "sha512-LpWbYgVnKzphN5S6uss4M25jJ/9+m6q6UJoeN6zTkK4xAGhKsiBRPVeF7OYMWonn5repMQbE5vieRXcMUrKDKw==", + "node_modules/@jsonjoy.com/fs-core": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-core/-/fs-core-4.64.0.tgz", + "integrity": "sha512-zs2TAq7Six5jgMuoMNjpspAvOP3mhtgq/k1UyQodEzCtQi/N83y2/y+zcvnZSGp/Rxq96DBN+bValOBQAyn/ew==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/base64": "^1.1.2", - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/json-pointer": "^1.0.1", - "@jsonjoy.com/util": "^1.9.0", - "hyperdyperid": "^1.2.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", "thingies": "^2.5.0" }, "engines": { @@ -4353,14 +4672,16 @@ "tslib": "2" } }, - "node_modules/@jsonjoy.com/json-pointer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", - "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "node_modules/@jsonjoy.com/fs-fsa": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-fsa/-/fs-fsa-4.64.0.tgz", + "integrity": "sha512-nMWOVbkLFyEgmXZih3wyvxA9XpgyyqyfrINMHvEFqhi7uqfRl7c9ERJt6yX7vgMPrB9Uo+OJO+Spa0cFzPD01w==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/codegen": "^1.0.0", - "@jsonjoy.com/util": "^1.9.0" + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "thingies": "^2.5.0" }, "engines": { "node": ">=10.0" @@ -4373,14 +4694,19 @@ "tslib": "2" } }, - "node_modules/@jsonjoy.com/util": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", - "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "node_modules/@jsonjoy.com/fs-node": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node/-/fs-node-4.64.0.tgz", + "integrity": "sha512-dO+NNkODbUli4uV42bcNrrLvq5rE7SNpdZ5TNd0dtbLsAaNK3MDiIC9lUi+brboGoIjW6vd2fB1qao60nrk5xA==", "license": "Apache-2.0", "dependencies": { - "@jsonjoy.com/buffers": "^1.0.0", - "@jsonjoy.com/codegen": "^1.0.0" + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-print": "4.64.0", + "@jsonjoy.com/fs-snapshot": "4.64.0", + "glob-to-regex.js": "^1.0.0", + "thingies": "^2.5.0" }, "engines": { "node": ">=10.0" @@ -4393,22 +4719,358 @@ "tslib": "2" } }, + "node_modules/@jsonjoy.com/fs-node-builtins": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-builtins/-/fs-node-builtins-4.64.0.tgz", + "integrity": "sha512-/o7WRFhUWaM/fOrslwLZGnzn4RmRILykn+lAL+mNObqqRNw+CQSiij6hpCeZ+C7buhdoVo7go/OYqzaSUfDYmA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-to-fsa": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-to-fsa/-/fs-node-to-fsa-4.64.0.tgz", + "integrity": "sha512-WDD9WVs0hb7UAEKTgZW2f66WDrbj7gIIWwpP3spbLyXa0rghtUaFTB8L4gdR3ZCWwiKIsj38/CNijpVmpnuPUw==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-fsa": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-node-utils": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-node-utils/-/fs-node-utils-4.64.0.tgz", + "integrity": "sha512-k5Indsx9hWW9xSF7Y6oSKKwtCUNhzZxadub3owhIlitc+iMRVlPPdX2duTKQWBL3qNWpXya8jykgaaWpheeS4w==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "glob-to-regex.js": "^1.0.1" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-print": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-print/-/fs-print-4.64.0.tgz", + "integrity": "sha512-PHZFccchvkhWrwPWHjmVAhbC3vSHCtyZvlZfJJ3ho2bnzl450hXri6/8e6pbkWdH+SkmLXNml0sV8e5HDAfxKw==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/fs-node-utils": "4.64.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot": { + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/fs-snapshot/-/fs-snapshot-4.64.0.tgz", + "integrity": "sha512-oM7UDeL83q6NBzzsfKAsYKXKVXlykKFqqOLh4xZZKAzzROTlInkPbc6LTDGThEOnPiFiUzA7tYziHG9xavd76Q==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^17.65.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/json-pack": "^17.65.0", + "@jsonjoy.com/util": "^17.65.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/base64": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/base64/-/base64-17.67.0.tgz", + "integrity": "sha512-5SEsJGsm15aP8TQGkDfJvz9axgPwAEm98S5DxOuYe8e1EbfajcDmgeXXzccEjh+mLnjqEKrkBdjHWS5vFNwDdw==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/codegen": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/codegen/-/codegen-17.67.0.tgz", + "integrity": "sha512-idnkUplROpdBOV0HMcwhsCUS5TRUi9poagdGs70A6S4ux9+/aPuKbh8+UYRTLYQHtXvAdNfQWXDqZEx5k4Dj2Q==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pack": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-17.67.0.tgz", + "integrity": "sha512-t0ejURcGaZsn1ClbJ/3kFqSOjlryd92eQY465IYrezsXmPcfHPE/av4twRSxf6WE+TkZgLY+71vCZbiIiFKA/w==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "17.67.0", + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0", + "@jsonjoy.com/json-pointer": "17.67.0", + "@jsonjoy.com/util": "17.67.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/json-pointer": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-17.67.0.tgz", + "integrity": "sha512-+iqOFInH+QZGmSuaybBUNdh7yvNrXvqR+h3wjXm0N/3JK1EyyFAeGJvqnmQL61d1ARLlk/wJdFKSL+LHJ1eaUA==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/util": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/fs-snapshot/node_modules/@jsonjoy.com/util": { + "version": "17.67.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-17.67.0.tgz", + "integrity": "sha512-6+8xBaz1rLSohlGh68D1pdw3AwDi9xydm8QNlAFkvnavCJYSze+pxoW2VKP8p308jtlMRLs5NTHfPlZLd4w7ew==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "17.67.0", + "@jsonjoy.com/codegen": "17.67.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pack/-/json-pack-1.21.0.tgz", + "integrity": "sha512-+AKG+R2cfZMShzrF2uQw34v3zbeDYUqnQ+jg7ORic3BGtfw9p/+N6RJbq/kkV8JmYZaINknaEQ2m0/f693ZPpg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/base64": "^1.1.2", + "@jsonjoy.com/buffers": "^1.2.0", + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/json-pointer": "^1.0.2", + "@jsonjoy.com/util": "^1.9.0", + "hyperdyperid": "^1.2.0", + "thingies": "^2.5.0", + "tree-dump": "^1.1.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pack/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/json-pointer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/json-pointer/-/json-pointer-1.0.2.tgz", + "integrity": "sha512-Fsn6wM2zlDzY1U+v4Nc8bo3bVqgfNTGcn6dMgs6FjrEnt4ZCe60o6ByKRjOGlI2gow0aE/Q41QOigdTqkyK5fg==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/codegen": "^1.0.0", + "@jsonjoy.com/util": "^1.9.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/util/-/util-1.9.0.tgz", + "integrity": "sha512-pLuQo+VPRnN8hfPqUTLTHk126wuYdXVxE6aDmjSeV4NCAgyxWbiOIeNJVtID3h1Vzpoi9m4jXezf73I6LgabgQ==", + "license": "Apache-2.0", + "dependencies": { + "@jsonjoy.com/buffers": "^1.0.0", + "@jsonjoy.com/codegen": "^1.0.0" + }, + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, + "node_modules/@jsonjoy.com/util/node_modules/@jsonjoy.com/buffers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jsonjoy.com/buffers/-/buffers-1.2.1.tgz", + "integrity": "sha512-12cdlDwX4RUM3QxmUbVJWqZ/mrK6dFQH4Zxq6+r1YXKXYBNgZXndx2qbCJwh3+WWkCSn67IjnlG3XYTvmvYtgA==", + "license": "Apache-2.0", + "engines": { + "node": ">=10.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" + } + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", "license": "MIT" }, + "node_modules/@lezer/common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.5.2.tgz", + "integrity": "sha512-sxQE460fPZyU3sdc8lafxiPwJHBzZRy/udNFynGQky1SePYBdhkBl1kOagA9uT3pxR8K09bOrmTUqA9wb/PjSQ==", + "license": "MIT" + }, + "node_modules/@lezer/highlight": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.3.tgz", + "integrity": "sha512-qXdH7UqTvGfdVBINrgKhDsVTJTxactNNxLk7+UMwZhU13lMHaOBlJe9Vqp907ya56Y3+ed2tlqzys7jDkTmW0g==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.3.0" + } + }, + "node_modules/@lezer/json": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@lezer/json/-/json-1.0.3.tgz", + "integrity": "sha512-BP9KzdF9Y35PDpv04r0VeSTKDeox5vVr3efE7eBbx3r4s3oNLfunchejZhjArmeieBH+nVOpgIiBJpEAv8ilqQ==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.2.0", + "@lezer/highlight": "^1.0.0", + "@lezer/lr": "^1.0.0" + } + }, + "node_modules/@lezer/lr": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.10.tgz", + "integrity": "sha512-rnCpTIBafOx4mRp43xOxDJbFipJm/c0cia/V5TiGlhmMa+wsSdoGmUN3w5Bqrks/09Q/D4tNAmWaT8p6NRi77A==", + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" + } + }, + "node_modules/@marijn/find-cluster-break": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@marijn/find-cluster-break/-/find-cluster-break-1.0.3.tgz", + "integrity": "sha512-FY+MKLBoTsLNJF/eLWaOsXGdz6uh3Iu1axjPf6TUq92IYumcTcXWHoS747JARLkcdlJ/Waiaxc5wQfFO8jC6NA==", + "license": "MIT" + }, "node_modules/@mdx-js/mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.0.tgz", - "integrity": "sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/mdx/-/mdx-3.1.1.tgz", + "integrity": "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "@types/estree-jsx": "^1.0.0", "@types/hast": "^3.0.0", "@types/mdx": "^2.0.0", + "acorn": "^8.0.0", "collapse-white-space": "^2.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", @@ -4436,9 +5098,10 @@ } }, "node_modules/@mdx-js/react": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.0.1.tgz", - "integrity": "sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", + "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", + "license": "MIT", "dependencies": { "@types/mdx": "^2.0.0" }, @@ -4452,12 +5115,24 @@ } }, "node_modules/@mermaid-js/parser": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.6.2.tgz", - "integrity": "sha512-+PO02uGF6L6Cs0Bw8RpGhikVvMWEysfAyl27qTlroUB8jSWr1lL0Sf6zi78ZxlSnmgSY2AMMKVgghnN9jTtwkQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-1.2.0.tgz", + "integrity": "sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA==", "license": "MIT", "dependencies": { - "langium": "3.3.1" + "@chevrotain/types": "~11.1.2" + } + }, + "node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, "node_modules/@nodelib/fs.scandir": { @@ -4495,10 +5170,225 @@ "node": ">= 8" } }, + "node_modules/@overture-stack/lectern-client": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@overture-stack/lectern-client/-/lectern-client-2.0.0.tgz", + "integrity": "sha512-SwOLofdJt52LGIOQmzO+pJMiVks2NkmakEPvIZCziw0Q9oHXScID1BQptIhV4+eO82iUZtfT0cKbZ/2CiTn9rw==", + "license": "AGPL-3.0", + "dependencies": { + "@overture-stack/lectern-dictionary": "^2.0.0", + "@overture-stack/lectern-validation": "^2.0.0", + "axios": "^1.7.2", + "cd": "^0.3.3", + "lodash": "^4.17.21", + "zod": "^3.23.8" + } + }, + "node_modules/@overture-stack/lectern-dictionary": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@overture-stack/lectern-dictionary/-/lectern-dictionary-2.0.0.tgz", + "integrity": "sha512-XbjWqeTTqwlrmbvxQGlnUcfxd49ErQ9A6gfGy6NpHNpcU0ZNJtBYXxDMakYlkbzVV7raItdGRhw6QsrsTxvv2g==", + "license": "AGPL-3.0", + "dependencies": { + "immer": "^10.1.1", + "lodash": "^4.17.21", + "zod": "^3.23.8" + } + }, + "node_modules/@overture-stack/lectern-ui": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@overture-stack/lectern-ui/-/lectern-ui-1.0.0.tgz", + "integrity": "sha512-jb4iU5t6ABzUKFfBlgp/CEV6NkhppqucIaBWYREACbLOg3sVvRQOqFhvV7LAzPng6c5l2DLtSsqN1B/WVCwf7g==", + "license": "AGPL-3.0", + "dependencies": { + "@emotion/react": "^11.14.0", + "@emotion/styled": "^11.14.0", + "@overture-stack/lectern-client": "2.0.0", + "@overture-stack/lectern-dictionary": "2.0.0", + "@overture-stack/lectern-validation": "2.0.0", + "@tanstack/react-table": "^8.21.3", + "d3-dag": "^1.1.0", + "react": "^19.1.0", + "react-dom": "^19.1.0", + "react-loading-skeleton": "^3.5.0", + "react-modal": "^3.16.3", + "reactflow": "^11.11.4", + "zod": "^3.23.8" + } + }, + "node_modules/@overture-stack/lectern-validation": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@overture-stack/lectern-validation/-/lectern-validation-2.0.0.tgz", + "integrity": "sha512-PohCJIPrVyWqpg9Kpayb2dAZonIkSGP59UzfcB4muiFG10m7AXL9lAgCxAA73lD4382Z098iJ4bqAcPi2CONxQ==", + "license": "AGPL-3.0", + "dependencies": { + "@overture-stack/lectern-dictionary": "^2.0.0", + "lodash": "^4.17.21", + "zod": "^3.23.8" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.8.0.tgz", + "integrity": "sha512-NgekZOrSJFSBFLFoLfwePguAWAx7z1+f2TEsWFUMyiqqfntZ4+S/S5hzqME3q4pCA0iOsFKdwiQ35dwY24eVqA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-x509-attr": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.8.0.tgz", + "integrity": "sha512-akbF8+uvleHs8sejNPQxwmVFuInAg6FMNHOwMILXfP518YfFJwdR3jr6oNUPOaEJfuEhn/vkNOCIT6ASUd4mbg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.8.0.tgz", + "integrity": "sha512-ohwlk+u9Rv2NOAY1c6MfHj45ATVF8R1DUN/WCgABiRtLi2ZftlZWZX7KvpAbU8v9xPcmoILfELeEABj/rn18AQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.8.0.tgz", + "integrity": "sha512-5yof1ytoB++RQtaFbqSUJ8pxDJtZT6vbVqZ8XoJ61ph7UjNVvfFwAilnCodqkNsAodpy13gDhoxZXw00pghnyg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.8.0", + "@peculiar/asn1-pkcs8": "^2.8.0", + "@peculiar/asn1-rsa": "^2.8.0", + "@peculiar/asn1-schema": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.8.0.tgz", + "integrity": "sha512-qAKXtLpBEw9LqhKpjw3ajZSXlBur+ipW+y2ivVBQAG6F6qRx94yO+1ZR4mvw+YaCfKSaOzLeYEzsPaBp4SJELA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.8.0.tgz", + "integrity": "sha512-b5nDWCnkV60+cQ141D6sVVwK9nz64R5n3zSVnklGd+ECdkW2Ol3U1a6yYFlalpSOaD557yuJB64A+q42jG7lUQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.8.0", + "@peculiar/asn1-pfx": "^2.8.0", + "@peculiar/asn1-pkcs8": "^2.8.0", + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "@peculiar/asn1-x509-attr": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.8.0.tgz", + "integrity": "sha512-zHEUlCqB2mk7x2lxDwHHJy7hWZOPdGHVlsmITWKB5/PbQo61atbu9PJ/0r9dQNMwFzbKPXZ8uK8/91eUhRznSg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.8.0.tgz", + "integrity": "sha512-7YT0U/ze0tF2QOBbE15gKZwy5tvgGyLRiRHLzhlbOpf7BT032oBSd0haZqXn5W6l26WLlu3dyxzjM+2638/z2Q==", + "license": "MIT", + "dependencies": { + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.8.0.tgz", + "integrity": "sha512-N0CMuhWUzsWEVq6F1q9X6+VKUnWzSW+cSVg+aPaGGwDdbFoFWTYgin5MHwXgpWd6y9COMBxnfy/Qc+Xc7F0Zwg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/utils": "^2.0.2", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.8.0.tgz", + "integrity": "sha512-tHjkfS/qhMnmrlB2J9NhflQlQ7In3khO3CfmVrriOlpTeErY9ZIKOso1hQ5JQiyrJ7ShvqVPk7E5fQmbclkSKA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.8.0", + "@peculiar/asn1-x509": "^2.8.0", + "asn1js": "^3.0.10", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@peculiar/utils/-/utils-2.0.3.tgz", + "integrity": "sha512-+oL3HPFRIZ1St2K50lWCXiioIgSoxzz7R1J3uF6neO2yl1sgmpgY6XXJH4BdpoDkMWznQTeYF6oWNDZLCdQ4eQ==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, "node_modules/@pnpm/config.env-replace": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@pnpm/config.env-replace/-/config.env-replace-1.1.0.tgz", "integrity": "sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==", + "license": "MIT", "engines": { "node": ">=12.22.0" } @@ -4507,6 +5397,7 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/@pnpm/network.ca-file/-/network.ca-file-1.0.2.tgz", "integrity": "sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==", + "license": "MIT", "dependencies": { "graceful-fs": "4.2.10" }, @@ -4517,12 +5408,14 @@ "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", - "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", + "license": "ISC" }, "node_modules/@pnpm/npm-conf": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-2.3.1.tgz", - "integrity": "sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@pnpm/npm-conf/-/npm-conf-3.0.3.tgz", + "integrity": "sha512-//0sR/cow/s4ICQaYoAobOl4aU8cjU6x/V24V7XkKotb9+O+3zySIYp146vpaobYHnxa4pZX8NkV54Z5AwbDKA==", + "license": "MIT", "dependencies": { "@pnpm/config.env-replace": "^1.1.0", "@pnpm/network.ca-file": "^1.0.1", @@ -4533,9 +5426,123 @@ } }, "node_modules/@polka/url": { - "version": "1.0.0-next.25", - "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.25.tgz", - "integrity": "sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==" + "version": "1.0.0-next.29", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.29.tgz", + "integrity": "sha512-wwQAWhWSuHaag8c4q/KN/vCoeOJYshAIvMQwD4GpSb3OiZklFfvAgmj0VCBBImRpuF/aFgIRzllXlVX93Jevww==", + "license": "MIT" + }, + "node_modules/@reactflow/background": { + "version": "11.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/background/-/background-11.3.14.tgz", + "integrity": "sha512-Gewd7blEVT5Lh6jqrvOgd4G6Qk17eGKQfsDXgyRSqM+CTwDqRldG2LsWN4sNeno6sbqVIC2fZ+rAUBFA9ZEUDA==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/controls": { + "version": "11.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/controls/-/controls-11.2.14.tgz", + "integrity": "sha512-MiJp5VldFD7FrqaBNIrQ85dxChrG6ivuZ+dcFhPQUwOK3HfYgX2RHdBua+gx+40p5Vw5It3dVNp/my4Z3jF0dw==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/core": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/@reactflow/core/-/core-11.11.4.tgz", + "integrity": "sha512-H4vODklsjAq3AMq6Np4LE12i1I4Ta9PrDHuBR9GmL8uzTt2l2jh4CiQbEMpvMDcp7xi4be0hgXj+Ysodde/i7Q==", + "license": "MIT", + "dependencies": { + "@types/d3": "^7.4.0", + "@types/d3-drag": "^3.0.1", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/minimap": { + "version": "11.7.14", + "resolved": "https://registry.npmjs.org/@reactflow/minimap/-/minimap-11.7.14.tgz", + "integrity": "sha512-mpwLKKrEAofgFJdkhwR5UQ1JYWlcAAL/ZU/bctBkuNTT1yqV+y0buoNVImsRehVYhJwffSWeSHaBR5/GJjlCSQ==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "@types/d3-selection": "^3.0.3", + "@types/d3-zoom": "^3.0.1", + "classcat": "^5.0.3", + "d3-selection": "^3.0.0", + "d3-zoom": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-resizer": { + "version": "2.2.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-resizer/-/node-resizer-2.2.14.tgz", + "integrity": "sha512-fwqnks83jUlYr6OHcdFEedumWKChTHRGw/kbCxj0oqBd+ekfs+SIp4ddyNU0pdx96JIm5iNFS0oNrmEiJbbSaA==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.4", + "d3-drag": "^3.0.0", + "d3-selection": "^3.0.0", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@reactflow/node-toolbar": { + "version": "1.3.14", + "resolved": "https://registry.npmjs.org/@reactflow/node-toolbar/-/node-toolbar-1.3.14.tgz", + "integrity": "sha512-rbynXQnH/xFNu4P9H+hVqlEUafDCkEoCy0Dg9mG22Sg+rY/0ck6KkrAQrYrTgXusd+cEJOMK0uOOFCK2/5rSGQ==", + "license": "MIT", + "dependencies": { + "@reactflow/core": "11.11.4", + "classcat": "^5.0.3", + "zustand": "^4.4.1" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, + "node_modules/@replit/codemirror-indentation-markers": { + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/@replit/codemirror-indentation-markers/-/codemirror-indentation-markers-6.5.3.tgz", + "integrity": "sha512-hL5Sfvw3C1vgg7GolLe/uxX5T3tmgOA3ZzqlMv47zjU1ON51pzNWiVbS22oh6crYhtVhv8b3gdXwoYp++2ilHw==", + "license": "MIT", + "peerDependencies": { + "@codemirror/language": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } }, "node_modules/@scarf/scarf": { "version": "1.4.0", @@ -4566,9 +5573,9 @@ "license": "BSD-3-Clause" }, "node_modules/@sinclair/typebox": { - "version": "0.27.10", - "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", - "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "version": "0.27.12", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.12.tgz", + "integrity": "sha512-hhyNJ+nbR6ZR7pToHvllEFun9TL0sbL+tk/ON75lo+Xas054uez98qRbsuNt7MBCyZKK4+8Yli/OAGZhmfBZ/g==", "license": "MIT" }, "node_modules/@sindresorhus/is": { @@ -4852,13 +5859,13 @@ } }, "node_modules/@swagger-api/apidom-ast": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.0.0-beta.50.tgz", - "integrity": "sha512-uUBUm6J6KlyKppyfS7DIW37De6oyMVIpHYmaNV3YAaDMuRMov5KHHWXKbqWlI+l493OljOcXEqDIPeLzm6B5PQ==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ast/-/apidom-ast-1.11.3.tgz", + "integrity": "sha512-Nfi/0vy+cIHClX7raXamtHnCMBbwI1PEg+yroIzyy8LcCH7zcS0Xi4ARG3CkDQswOnWO2gLDAUAFjDvkQWdZ+A==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-error": "^1.0.0-beta.50", + "@swagger-api/apidom-error": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -4866,14 +5873,14 @@ } }, "node_modules/@swagger-api/apidom-core": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.0.0-beta.50.tgz", - "integrity": "sha512-9N7ySdyzx/3kUnprAi63GQNt+Kq8VUvErwDgPcMRAsZX8jUhk9KLJ9N0fup4mWm6+xGs0JH35wxBxnanS6aiqw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-core/-/apidom-core-1.11.3.tgz", + "integrity": "sha512-21/PXEqCzsWkiwKWHt0TPJE7GUtog3BhMlvYLUEPbteXOrk+PNazbjYDPl4zfZGRLaoGhTqpFBY5pXafdzaHWQ==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", + "@swagger-api/apidom-ast": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", "@types/ramda": "~0.30.0", "minim": "~0.23.8", "ramda": "~0.30.0", @@ -4883,37 +5890,37 @@ } }, "node_modules/@swagger-api/apidom-error": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.0.0-beta.50.tgz", - "integrity": "sha512-vdpi2nRVcxXLGc68JPNwTcKrCKl8PnOEPuykZSxeNbDKnZY80APbsoLDX+1gdRgafK/7k5XdsBkpDQscsTkDng==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-error/-/apidom-error-1.11.3.tgz", + "integrity": "sha512-Z4mIDyZUF2kDFHBzKsxkYSaHpGSvGDc7gAkdzLKxcQk4849iCUXxs0PpQLxZxfYcmUSwkw7AZmIP/OKGpsR8JA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.20.7" } }, "node_modules/@swagger-api/apidom-json-pointer": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.0.0-beta.50.tgz", - "integrity": "sha512-2TgFKHlZ/SlnTZzY7EwE8xx5Pr2BYePX52xZJFqWnueSAIcCcsrqZeazWIAaDe/gXd47CDqU95nDChMECERspA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-json-pointer/-/apidom-json-pointer-1.11.3.tgz", + "integrity": "sha512-z6eEvJ5HIb0aFqVldHyU5Guut+bv/opu28i+rrfDb1LEG3IWk5T3DbW9d/nWpAfNze/bjwiZvPphmkuycijb2w==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", "@swaggerexpert/json-pointer": "^2.10.1" } }, "node_modules/@swagger-api/apidom-ns-api-design-systems": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.0.0-beta.50.tgz", - "integrity": "sha512-VsJLgBHYEBx0tyqUVrOhK4YSknn2mSbxigy92hV0Xn0oXuGibY1NW+2yIE9wwgjutCgtmo0Ovl9pe+cagzSh4w==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-api-design-systems/-/apidom-ns-api-design-systems-1.11.3.tgz", + "integrity": "sha512-HTISScqScdnUc2BKqMaWM+ISU79AlHlr+XHUR9g0R8QiO4KzCkWUi6TncP0gvGoEY+BvfR0OkztfxYrelkksmg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -4921,31 +5928,47 @@ } }, "node_modules/@swagger-api/apidom-ns-arazzo-1": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.0.0-beta.50.tgz", - "integrity": "sha512-DsKi4um67e5RMVgEzbiYMa4Z5VcwFncrLF1blxU0Gzc29LB49vc/5NDXgJaJZ7F7rYWNWJ+EqIsbVjEKAiehHg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-arazzo-1/-/apidom-ns-arazzo-1-1.11.3.tgz", + "integrity": "sha512-AHRSbuYy5oA8c/7j7nahxMASjt0cuOWyUk4yu+cKG+KS85ho2f2NiFThqQjtIJLisvrp+qNniJ1EwTfcCTivTQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.26.10", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-2020-12": "^1.11.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-asyncapi-2": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.11.3.tgz", + "integrity": "sha512-bn/Pf52SCsSGcw7qO3gAje+KjhhpWJxWjjWQe5Jv9oPoXCnvGoSspSXMY3zIrhz9XfrP94AdWBUpOlWBoaaDBQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", "ts-mixer": "^6.0.3" } }, - "node_modules/@swagger-api/apidom-ns-asyncapi-2": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-2/-/apidom-ns-asyncapi-2-1.0.0-beta.50.tgz", - "integrity": "sha512-+iIGnyvdsAlqIIuKzWSXsgwva+g7QkxZ2AkB3jBVIMqLp1AANhHaJz2nBTlgg3PYpcMpek3EutcJWiSTdaaQEQ==", + "node_modules/@swagger-api/apidom-ns-asyncapi-3": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-asyncapi-3/-/apidom-ns-asyncapi-3-1.11.3.tgz", + "integrity": "sha512-QhZtf8YeMRVtgVioJj0qKdNG0LEzi9RPSrC9KWfCdwEBlkhNDhHFh6FIJWayYAwR6DPlOXjTYQf97V9QwIuRmQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-asyncapi-2": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -4953,15 +5976,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-2019-09": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.0.0-beta.50.tgz", - "integrity": "sha512-QP6DuthV8ZWQnthYbPEVikK5rTN4T5lhnAnmO1v6zOCS9B1heKCFcIYgBhcqCnuZ0Tt8kGOfLyqGMb57lPkCdw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2019-09/-/apidom-ns-json-schema-2019-09-1.11.3.tgz", + "integrity": "sha512-zHA4/oin6Fg6VN0bWmMRu1nt4Xnd05mF5T+Od6vEmid1bxDXpfSSMaPpdu+WCBJ5dDX19EeBVTJoAI0U4psxBg==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-draft-7": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-draft-7": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -4969,15 +5992,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-2020-12": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.0.0-beta.50.tgz", - "integrity": "sha512-ZaqrtZEXUx35x66ND8sc5vf1sIuWPERA15EdRHeca56E09RnjZMUHkiDvdx78165h31QmM67YLi04zEBYhQS0g==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-2020-12/-/apidom-ns-json-schema-2020-12-1.11.3.tgz", + "integrity": "sha512-zUWRb5DlvlZXtf2JmiNqUwwgGc4eUAsUQPU59kP140vkPT98HDhNJx9UXoHLgP5F/Zk8f2rzeG237u+JnCT9/g==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-2019-09": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-2019-09": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -4985,14 +6008,14 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-4": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.0.0-beta.50.tgz", - "integrity": "sha512-aqCwW+iuN7RokH10vDp/eEwlrT4LAlHGy1pLzAS9aFVJyUutfm0I4fxLfddOKD2yd04z858zhLwOVSo4BjrLHg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-4/-/apidom-ns-json-schema-draft-4-1.11.3.tgz", + "integrity": "sha512-udOM8ZQT7BzsyT9012R7/VjeazjOlyLwKpmpbgHZDG6uGHqsnWn9lN+F8/5Eox9qqBnQNqDNtDhBEMYjE6RYNQ==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0-beta.50", - "@swagger-api/apidom-core": "^1.0.0-beta.50", + "@swagger-api/apidom-ast": "^1.11.3", + "@swagger-api/apidom-core": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -5000,15 +6023,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-6": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.0.0-beta.50.tgz", - "integrity": "sha512-trF1TZZ79WJOjQw3C1Y7wcqNMxxgHMZtJW2/tP5MwII1hqsExGzmGyUuNlVuSC9k9v/9sCj85hQlJ4TW6HFciQ==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-6/-/apidom-ns-json-schema-draft-6-1.11.3.tgz", + "integrity": "sha512-ZOgo5OtpQ6e5XQ5R1H8CYTYXEtnD0l+FyN065A6c2O1NxJXFKS2a5SZTvx+udA4mugtkTSmr7hAQe2ae+KAXQw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -5016,15 +6039,15 @@ } }, "node_modules/@swagger-api/apidom-ns-json-schema-draft-7": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.0.0-beta.50.tgz", - "integrity": "sha512-g9VscnMwjPUYCfR6UxUwsLiIKnyXy2W28J+zN0rbijoSEtUdakcrxwdPhqwgJZHPci8NHNE8574zaocqKBiqSg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-json-schema-draft-7/-/apidom-ns-json-schema-draft-7-1.11.3.tgz", + "integrity": "sha512-L5Sc0qMUrUbgVex3fN+tnNHjed/JCAwpwyzdHY8KgUfXHkfM5aLUyyAGirm+ObwZvGDEejsTT2Otp6B5S29eqw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-draft-6": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-draft-6": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -5032,16 +6055,16 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-2": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.0.0-beta.50.tgz", - "integrity": "sha512-1kp1BlLFcv6If+hLbJ1wbrRQUpiRHEBwrdNjgflSgK8IIFH9/Q3LWMFsms8lmzQtpOUvPuXBlmMAmpQ1cAljZQ==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-2/-/apidom-ns-openapi-2-1.11.3.tgz", + "integrity": "sha512-T241UD+1My1hVJHayTCz9f7rznmeM8rxQW4NtUnD8k677SShpnNkrfeoc1elrpJXdTsnEPIOLCK0EEIyEplHgA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -5049,15 +6072,15 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-0": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.0.0-beta.50.tgz", - "integrity": "sha512-I4GHyNILNxDsYKYeG1+ZA3rnfU1RAYtNp3dA+G8LCX5AB/2N7dT2VPK8HS4cj9m3ZVz7dl1o+X6tpaJIN5kDsA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-0/-/apidom-ns-openapi-3-0-1.11.3.tgz", + "integrity": "sha512-FZvBqWpZFciemMgWBGY89RIH5uLl6ZYtmMAhWzDcmEi1JSjmWKkoqZno//KlqSgbI09gbkzipdMjGK825givPA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-draft-4": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-draft-4": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -5065,17 +6088,36 @@ } }, "node_modules/@swagger-api/apidom-ns-openapi-3-1": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.0.0-beta.50.tgz", - "integrity": "sha512-kxwuaFl1kQddk/RBS5Mz3rE/6v5mXggqhzVwDBObGjgkRmDRVF5nUalziBRNg6A3NcpYbsjNMU/OCA1JihFkrg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-1/-/apidom-ns-openapi-3-1-1.11.3.tgz", + "integrity": "sha512-ObCP+l3/ZhuPaSqXqmSnCpEOIMalQns0c4IZgX6h3o7Jc6K6BcqDMeq4s17dwcQja9fFUtkoIIFuquJBKvK86Q==", + "license": "Apache-2.0", + "dependencies": { + "@babel/runtime-corejs3": "^7.26.10", + "@swagger-api/apidom-ast": "^1.11.3", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-json-pointer": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-2020-12": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.11.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0", + "ts-mixer": "^6.0.3" + } + }, + "node_modules/@swagger-api/apidom-ns-openapi-3-2": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-ns-openapi-3-2/-/apidom-ns-openapi-3-2-1.11.3.tgz", + "integrity": "sha512-Ri7KLrfrpJeteghUdzbozxKve2NG5Z1aPWX91DI14j75+v/xBAu91AIZt7K+LV8JWUNk+VbhUlhgSH1JAIVa0g==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0-beta.50", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-json-pointer": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-json-schema-2020-12": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.50", + "@swagger-api/apidom-ast": "^1.11.3", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-json-pointer": "^1.11.3", + "@swagger-api/apidom-ns-json-schema-2020-12": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -5083,112 +6125,144 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-json": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.0.0-beta.50.tgz", - "integrity": "sha512-CGH2/BXLR8bSXUXUgVt5az9HSQanvU5YpKke2R9laDnO+9b4w02LhkUHiLtPMX6A+mk9Cax+ktTh6mlSKzq7pA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-json/-/apidom-parser-adapter-api-design-systems-json-1.11.3.tgz", + "integrity": "sha512-6LcwiY2Ce1qmsq8CSxCoRMJ3q2quFnEsNgI48LpM9/PYK/idjsB/WrnU9xSl9fXm/aTo/bOO0ckc8KadxVykfA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-api-design-systems": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-api-design-systems-yaml": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.0.0-beta.50.tgz", - "integrity": "sha512-fcw5FLKgvaPNVhkS1H6mg0uqPO8+R8jR+eFBSZRqm8IQAlzyxE/I5tUCNpMwqQQPShV3H014EHPJjfnihfZQKw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-api-design-systems-yaml/-/apidom-parser-adapter-api-design-systems-yaml-1.11.3.tgz", + "integrity": "sha512-zk2NuWAOvjEHYQ3lZ43VhAqJk+9KK452HeFfZFne4a4iALhCQ/wceK7tCG81jBMMoWnR0f1JS/vxz7/Y2CNwLA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-api-design-systems": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-api-design-systems": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-arazzo-json-1": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.0.0-beta.50.tgz", - "integrity": "sha512-cZWT5Ch0aPxc3uneuAc2lmGt29PTD9SYgkSYrL7EY+ooJetwjSqeLIVw6oBJHjUWtJqyKGdryyylpqNFsHV6qw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-json-1/-/apidom-parser-adapter-arazzo-json-1-1.11.3.tgz", + "integrity": "sha512-vXP6lYp6Q5/5nLkMJyBRTWYIZYxL6GnOsJsdnN0KdTHuoPXNZWsv5p2oPYlVE/W7gRAZDylUmYZQ1L9rr7BGRw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-arazzo-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-arazzo-yaml-1": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.0.0-beta.50.tgz", - "integrity": "sha512-wnwuzOzB3z141+6XYFs/1R1BKwEFmQjmITEvXHF3r0QzH3ayS+mOkp2NfYN4skDBLOoBCXw5ezr8v9qthW9Ojg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-arazzo-yaml-1/-/apidom-parser-adapter-arazzo-yaml-1-1.11.3.tgz", + "integrity": "sha512-zI57Q5DIf7TGv1A2gIk3umbPWMEFWYO3tEmfP0xJGDBn6gZRHgJvvVjn0wQrljigEEw1V3hRDUXk6Zzg3oVNvA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-arazzo-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-2": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.0.0-beta.50.tgz", - "integrity": "sha512-mXgT9K+cATsRJulOHveQwZJ3VlqQ11Ashme4Xk1XdUSmavEkKsnmokkz5oo57KwyqaFCQnuI0MtpMkwWZK7zVA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-2/-/apidom-parser-adapter-asyncapi-json-2-1.11.3.tgz", + "integrity": "sha512-VGl15mpHaL+SlsXaRvcVaWXir+pCLrj99QN//Kuir3cpPW6P9IdBztj11bjoIG3aX1bOIrU16/uOhV4G5J4Kag==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.26.10", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-asyncapi-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-json-3": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-json-3/-/apidom-parser-adapter-asyncapi-json-3-1.11.3.tgz", + "integrity": "sha512-37dNwdLAcAd7TZW8YqSbpuBoujfoM2AvXBoT1BUxzbYetwNkxP19Q1VtCEAzMxUEQ/9niBANSzuo0zClUEc2kw==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-asyncapi-3": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.0.0-beta.50.tgz", - "integrity": "sha512-N48sPvIqBqlpgENjCun0/inWhFeRG+zK7JVU3lbVrDmSG1xh8cNk3OjKlSisuSwruWACL0z6cL5zdiBXc3FrNQ==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-2/-/apidom-parser-adapter-asyncapi-yaml-2-1.11.3.tgz", + "integrity": "sha512-MEZHn+qROKehrXLhDhl7kSQADXjwU2NGSeNuBTr1/nINShpu4Tkxrk7xT0LY8GauKrZR9MyAnueATDQgK8NWhQ==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.26.10", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-asyncapi-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-asyncapi-yaml-3/-/apidom-parser-adapter-asyncapi-yaml-3-1.11.3.tgz", + "integrity": "sha512-qHOK0NXnG7t5Gx0xCIbyfrM5FXLgK6krlZRPlrlT6K853MWWWWmjAieuayPtu72Ak1hd/8U2/oWgbONnPqj76w==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-asyncapi-3": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-json": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.0.0-beta.50.tgz", - "integrity": "sha512-0gqtphuHO0tPnj4rV0x8VSyvDiCTkFY0vb5ILhVk9j5EW+31nxYVwDV8TBnEU5nJmnOvgvmdXhyl/2BvTjT87Q==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-json/-/apidom-parser-adapter-json-1.11.3.tgz", + "integrity": "sha512-Wj/DTb6mblsaxKfye9kXLwS+KmWWLAM2M2oSs4muOclhAOtcffr2H+STtiT3Hwrzb+cW8RpX6Htvey4rvbj/Jg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0-beta.50", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", + "@swagger-api/apidom-ast": "^1.11.3", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0", @@ -5198,112 +6272,144 @@ } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-2": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.0.0-beta.50.tgz", - "integrity": "sha512-PF9sHWmfWeLIAX3QXKpEOHfSqzvOHK4uDMqF1BgEldqA20rdDH7p3Yedp8Q2EI9EhHvs6o2XqNtgQYHItTXBZg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-2/-/apidom-parser-adapter-openapi-json-2-1.11.3.tgz", + "integrity": "sha512-aDR5vKSApqQgDkvJNJZqvp8slEWHGByz5bzDbw6ZHRPSIZcA2IEHdJPgWJVS5gNtJ+YAnA7veM39oqeoF2yy8w==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-0": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.0.0-beta.50.tgz", - "integrity": "sha512-3/ORyJvETf4Xp8F7PyoKYa5655ndpZX4jxbodbh9JFN8Ruu6yj1parzmLpaL7VoTKbGlozc2TanpHlScBM4zrg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-0/-/apidom-parser-adapter-openapi-json-3-0-1.11.3.tgz", + "integrity": "sha512-hpSBiaVG7qbyJy25/Pl48NCT9uvvsOPAAj+xCAb9TwmIPBcFkVYvj6ZWJbYZsOmzUzcNLOZEOBjRNPN3G31zmQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-1": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.0.0-beta.50.tgz", - "integrity": "sha512-W3sam19jtnj7A+HS1qbOa23ow/Nb1YwOXhAWUrqt4nGmwdOIfhqRcgKu3jMzGTQWn1dUq7EmmqIsxdI515dHVg==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-1/-/apidom-parser-adapter-openapi-json-3-1-1.11.3.tgz", + "integrity": "sha512-EP7U25s5We8Q/2olymVrJL2nKT+skTea6SnR8F3OETsBoef3i1XgQx7AHqUc9S83hp+bOxZ+oPyI6dNwO+J+MA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.26.10", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-json-3-2": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-json-3-2/-/apidom-parser-adapter-openapi-json-3-2-1.11.3.tgz", + "integrity": "sha512-WLuMb0pwH+5hjosRHGvUFLm9iWP0/XNnEdrwdUio4y0eodjDwrPGb2LSdH3zaR8p7mKrqe007jqpjaLLsStzrQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-2": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.0.0-beta.50.tgz", - "integrity": "sha512-9lWKmFpz/OdQG1PKIwQp+Xr70On45ycu1ioe0Awj9XPhcEGjvFoWysoYMQ9JfSaksj2esdhxpuNe/OUvwGLP9A==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-2/-/apidom-parser-adapter-openapi-yaml-2-1.11.3.tgz", + "integrity": "sha512-PyD0E4fwOhOCcP/Aqa9HlvZYuw825E6N0IRC69dxxt6Fy6w6Fv2KYRnRw8OINoog8I6/8uSZOLdeDla3FCqhFA==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.0.0-beta.50.tgz", - "integrity": "sha512-VsyYjWdv3Gy48OZKmeOkwGVIaeVBj/TT51mrVF75cH0OyJf9j0st5f2vfQbW98zkleX6vV6G8+ypPjV/gbzneQ==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-0/-/apidom-parser-adapter-openapi-yaml-3-0-1.11.3.tgz", + "integrity": "sha512-7ULkLaEAAVKRNWT525PdKOaUjrZ7G2ulH9VBsMJ9niaZN/n6hnSW8IR4Iaf0cLZ1MjsZsdWovq5slPz2hpqR4A==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.0.0-beta.50.tgz", - "integrity": "sha512-Un6K5upQveKG9BTMriRTzDkaE81bfnMOtiXdxrlReOwoVmmXDmpIIqoHRWxGj+Aa0Z700TGk+rlxdAEykdnRTw==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-1/-/apidom-parser-adapter-openapi-yaml-3-1-1.11.3.tgz", + "integrity": "sha512-2VqxGS0PaNrYeLgGyOl9m4m6EbJjrtxOswzWK2Rk3/M3gEDfnFdyOVffKWlcdEv6XFJ+wgLy5MPlODrzyOOKCA==", + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "@babel/runtime-corejs3": "^7.26.10", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", + "@types/ramda": "~0.30.0", + "ramda": "~0.30.0", + "ramda-adjunct": "^5.0.0" + } + }, + "node_modules/@swagger-api/apidom-parser-adapter-openapi-yaml-3-2": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-openapi-yaml-3-2/-/apidom-parser-adapter-openapi-yaml-3-2-1.11.3.tgz", + "integrity": "sha512-fRJYMozAyIJP46kKbUPQX2wIzfX9FSC7ZxUn+VWOa587f3zZC3XmydGO46GA/TGuc8cWs7AFD/EfSKWDbsB3Tg==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.50", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" } }, "node_modules/@swagger-api/apidom-parser-adapter-yaml-1-2": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.0.0-beta.50.tgz", - "integrity": "sha512-EPT4ArNGqRmsiS+dMQY5jTVvBZnBuVv7YvxG6vb3PTuGMG5rkrNIR4MiRQyNVrLdNvn8GxqqW+FJw6vZ/cB/ZA==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-parser-adapter-yaml-1-2/-/apidom-parser-adapter-yaml-1-2-1.11.3.tgz", + "integrity": "sha512-mSPMfVzDkLC+HPDI/6ho8TxI1PEcDJl/Y53gZdmfCU1xYzUdOF4s0iHalHHt0ipxYpt0EQXD+oGBnpp/TTx4IQ==", "license": "Apache-2.0", "optional": true, "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-ast": "^1.0.0-beta.50", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", + "@swagger-api/apidom-ast": "^1.11.3", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", "@tree-sitter-grammars/tree-sitter-yaml": "=0.7.1", "@types/ramda": "~0.30.0", "ramda": "~0.30.0", @@ -5345,63 +6451,79 @@ } }, "node_modules/@swagger-api/apidom-reference": { - "version": "1.0.0-beta.50", - "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.0.0-beta.50.tgz", - "integrity": "sha512-aD7gTWPgkJb9oYaC4jZPvxb7YbQKG9pWDYZigAkVGqOAbeYxUXeI00XyCLj/cH8l7KwyhTZNX70F7VnfxOkq7w==", + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/@swagger-api/apidom-reference/-/apidom-reference-1.11.3.tgz", + "integrity": "sha512-Y0J+pAru/Est0wQJlFeQq2AsWyboOJP456Zv2wV4m0Ib1QY6N2wWiL6clkHpHA0pughemN6gcjBeNlMeRGqXuw==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.26.10", - "@swagger-api/apidom-core": "^1.0.0-beta.50", - "@swagger-api/apidom-error": "^1.0.0-beta.50", + "@swagger-api/apidom-core": "^1.11.3", + "@swagger-api/apidom-error": "^1.11.3", "@types/ramda": "~0.30.0", - "axios": "^1.12.2", - "minimatch": "^7.4.3", - "process": "^0.11.10", + "axios": "^1.16.0", + "minimatch": "^10.2.1", "ramda": "~0.30.0", "ramda-adjunct": "^5.0.0" }, "optionalDependencies": { - "@swagger-api/apidom-json-pointer": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-ns-arazzo-1": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-ns-asyncapi-2": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-ns-openapi-2": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-ns-openapi-3-0": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-ns-openapi-3-1": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-json": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.0.0-beta.40 <1.0.0-rc.0", - "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.0.0-beta.40 <1.0.0-rc.0" + "@swagger-api/apidom-json-pointer": "^1.11.3", + "@swagger-api/apidom-ns-arazzo-1": "^1.11.3", + "@swagger-api/apidom-ns-asyncapi-2": "^1.11.3", + "@swagger-api/apidom-ns-openapi-2": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-0": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-1": "^1.11.3", + "@swagger-api/apidom-ns-openapi-3-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.11.3", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.11.3", + "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-3-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3" + } + }, + "node_modules/@swagger-api/apidom-reference/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/@swagger-api/apidom-reference/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.8", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.8.tgz", + "integrity": "sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==", "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, "node_modules/@swagger-api/apidom-reference/node_modules/minimatch": { - "version": "7.4.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-7.4.6.tgz", - "integrity": "sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw==", - "license": "ISC", + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.6.tgz", + "integrity": "sha512-vpLQEs+VLCr1nU0BXS07maYoFwlDAH0gngQuuttxIwutDFEMHq2blX+8vpgxDdK3J1PwjCJiep77OitTZ4Ll1A==", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.8" }, "engines": { - "node": ">=10" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -5435,6 +6557,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-5.0.1.tgz", "integrity": "sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==", + "license": "MIT", "dependencies": { "defer-to-connect": "^2.0.1" }, @@ -5442,13 +6565,37 @@ "node": ">=14.16" } }, - "node_modules/@types/acorn": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/acorn/-/acorn-4.0.6.tgz", - "integrity": "sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==", + "node_modules/@tanstack/react-table": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/react-table/-/react-table-8.21.3.tgz", + "integrity": "sha512-5nNMTSETP4ykGegmVkhjcS8tTLW6Vl4axfEGQN3v0zdHYbK4UfoqfPChclTrJ4EoK9QynqAu9oUf8VEmrpZ5Ww==", "license": "MIT", "dependencies": { - "@types/estree": "*" + "@tanstack/table-core": "8.21.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": ">=16.8", + "react-dom": ">=16.8" + } + }, + "node_modules/@tanstack/table-core": { + "version": "8.21.3", + "resolved": "https://registry.npmjs.org/@tanstack/table-core/-/table-core-8.21.3.tgz", + "integrity": "sha512-ldZXEhOBb8Is7xLs01fR3YEc3DERiz5silj8tnGkFZytt1abEvl/GhUmCE0PMLaMPTa3Jk4HbKmRlHmu+gCftg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" } }, "node_modules/@types/body-parser": { @@ -5528,9 +6675,9 @@ } }, "node_modules/@types/d3-array": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", - "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.2.tgz", + "integrity": "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw==", "license": "MIT" }, "node_modules/@types/d3-axis": { @@ -5580,9 +6727,9 @@ "license": "MIT" }, "node_modules/@types/d3-dispatch": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", - "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.7.tgz", + "integrity": "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA==", "license": "MIT" }, "node_modules/@types/d3-drag": { @@ -5670,9 +6817,9 @@ "license": "MIT" }, "node_modules/@types/d3-random": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", - "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.4.tgz", + "integrity": "sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA==", "license": "MIT" }, "node_modules/@types/d3-scale": { @@ -5697,9 +6844,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": "*" @@ -5743,37 +6890,18 @@ } }, "node_modules/@types/debug": { - "version": "4.1.12", - "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", - "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", - "dependencies": { - "@types/ms": "*" - } - }, - "node_modules/@types/eslint": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-9.6.1.tgz", - "integrity": "sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==", - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } - }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.7.tgz", - "integrity": "sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", "license": "MIT", "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "@types/ms": "*" } }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.9.tgz", + "integrity": "sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==", "license": "MIT" }, "node_modules/@types/estree-jsx": { @@ -5786,21 +6914,21 @@ } }, "node_modules/@types/express": { - "version": "4.17.23", - "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.23.tgz", - "integrity": "sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==", + "version": "4.17.25", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.25.tgz", + "integrity": "sha512-dVd04UKsfpINUnK0yBoYHDF3xu7xVH4BuDotC/xGuycx4CgbP48X/KF/586bcObxT0HENHXEU8Nqtu6NR+eKhw==", "license": "MIT", "dependencies": { "@types/body-parser": "*", "@types/express-serve-static-core": "^4.17.33", "@types/qs": "*", - "@types/serve-static": "*" + "@types/serve-static": "^1" } }, "node_modules/@types/express-serve-static-core": { - "version": "4.19.6", - "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", - "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "version": "4.19.9", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.9.tgz", + "integrity": "sha512-QP2ESEe/ImWY0HDwNAnK9PvEffUyhLTnWkk7KXzHfyeWAnlrDe1fN77bXl6ia8KT3wPlmA7t9/VPRpnf4Ex9sg==", "license": "MIT", "dependencies": { "@types/node": "*", @@ -5815,16 +6943,10 @@ "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", "license": "MIT" }, - "node_modules/@types/gtag.js": { - "version": "0.0.12", - "resolved": "https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz", - "integrity": "sha512-YQV9bUsemkzG81Ea295/nF/5GijnD2Af7QhEofh7xu+kvCN6RdodgNwwGWXB5GMI3NoyvQo0odNctoH/qLMIpg==", - "license": "MIT" - }, "node_modules/@types/hast": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", - "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.5.tgz", + "integrity": "sha512-rp/ezSWaD1m44dPKICGhiskI13nVr7qTloFwDa/IYkhhf5nzwP+zIQcIJh3WIFSBOy/H1PzB40jPjMDksN4F+g==", "license": "MIT", "dependencies": { "@types/unist": "*" @@ -5833,17 +6955,20 @@ "node_modules/@types/history": { "version": "4.7.11", "resolved": "https://registry.npmjs.org/@types/history/-/history-4.7.11.tgz", - "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==" + "integrity": "sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==", + "license": "MIT" }, "node_modules/@types/html-minifier-terser": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/@types/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", - "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==" + "integrity": "sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==", + "license": "MIT" }, "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", - "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==", + "license": "MIT" }, "node_modules/@types/http-errors": { "version": "2.0.5", @@ -5852,9 +6977,9 @@ "license": "MIT" }, "node_modules/@types/http-proxy": { - "version": "1.17.16", - "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.16.tgz", - "integrity": "sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==", + "version": "1.17.17", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.17.tgz", + "integrity": "sha512-ED6LB+Z1AVylNTu7hdzuBqOgMnvG/ld6wGCG8wFnAzKX5uyW2K3WD52v0gnLCTK/VLpXtKckgWuyScYK6cSPaw==", "license": "MIT", "dependencies": { "@types/node": "*" @@ -5887,7 +7012,8 @@ "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", - "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "license": "MIT" }, "node_modules/@types/mdast": { "version": "4.0.4", @@ -5899,9 +7025,10 @@ } }, "node_modules/@types/mdx": { - "version": "2.0.13", - "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", - "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==" + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.14.tgz", + "integrity": "sha512-T48PeuJtvLosNTPVhfnIp3i/n3a4g4Bad7YCq5k64D4u7NwDrAotikQ+5+sjtUvBmxCMlbo3dVL+C2dP0rWHzg==", + "license": "MIT" }, "node_modules/@types/mime": { "version": "1.3.5", @@ -5910,41 +7037,36 @@ "license": "MIT" }, "node_modules/@types/ms": { - "version": "0.7.34", - "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", - "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-2.1.0.tgz", + "integrity": "sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==", + "license": "MIT" }, "node_modules/@types/node": { - "version": "22.5.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.1.tgz", - "integrity": "sha512-KkHsxej0j9IW1KKOOAA/XBA0z08UFSrRQHErzEfA3Vgq57eXIMYboIlHJuYIfd+lwCQjtKqUu3UnmKbtUc9yRw==", - "dependencies": { - "undici-types": "~6.19.2" - } - }, - "node_modules/@types/node-forge": { - "version": "1.3.14", - "resolved": "https://registry.npmjs.org/@types/node-forge/-/node-forge-1.3.14.tgz", - "integrity": "sha512-mhVF2BnD4BO+jtOp7z1CdzaK4mbuK0LLQYAvdOLqHTavxFNq4zA1EmYkpnFjP8HOUzedfQkRnp0E2ulSAYSzAw==", + "version": "26.1.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-26.1.2.tgz", + "integrity": "sha512-Vu4a5UFA9rIIFJ7rB/Vaafh9lrCQszopTCx6KjFboXTGQbPNasehVR5TEiithSDGyd1DEiUByggTZsg8jukeIg==", "license": "MIT", "dependencies": { - "@types/node": "*" + "undici-types": "~8.3.0" } }, - "node_modules/@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==" + "node_modules/@types/parse-json": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.2.tgz", + "integrity": "sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==", + "license": "MIT" }, - "node_modules/@types/prop-types": { - "version": "15.7.12", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.12.tgz", - "integrity": "sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==" + "node_modules/@types/prismjs": { + "version": "1.26.6", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.6.tgz", + "integrity": "sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==", + "license": "MIT" }, "node_modules/@types/qs": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.14.0.tgz", - "integrity": "sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==", + "version": "6.15.1", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.15.1.tgz", + "integrity": "sha512-GZHUBZR9hckSUhrxmp1nG6NwdpM9fCunJwyThLW1X3AyHgd9IlHb6VANpQQqDr2o/qQp6McZ3y/IA2rVzKzSbw==", "license": "MIT" }, "node_modules/@types/ramda": { @@ -5963,18 +7085,19 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.4", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.4.tgz", - "integrity": "sha512-J7W30FTdfCxDDjmfRM+/JqLHBIyl7xUIp9kwK637FGmY7+mkSFSe6L4jpZzhj5QMfLssSDP4/i75AKkrdC7/Jw==", + "version": "19.2.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.17.tgz", + "integrity": "sha512-MXfmqaVPEVgkBT/aY0aGCkRWWtByiYQXo3xdQ8r5RzuFrPiRn8Gar2tQdXSUQ2GKV3bkXckek89V8wQBY2Q/Aw==", + "license": "MIT", "dependencies": { - "@types/prop-types": "*", - "csstype": "^3.0.2" + "csstype": "^3.2.2" } }, "node_modules/@types/react-router": { "version": "5.1.20", "resolved": "https://registry.npmjs.org/@types/react-router/-/react-router-5.1.20.tgz", "integrity": "sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==", + "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*" @@ -5984,6 +7107,7 @@ "version": "5.0.11", "resolved": "https://registry.npmjs.org/@types/react-router-config/-/react-router-config-5.0.11.tgz", "integrity": "sha512-WmSAg7WgqW7m4x8Mt4N6ZyKz0BubSj/2tVUMsAHp+Yd2AMwcSbeFq9WympT19p5heCFmF97R9eD5uUR/t4HEqw==", + "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -5994,6 +7118,7 @@ "version": "5.3.3", "resolved": "https://registry.npmjs.org/@types/react-router-dom/-/react-router-dom-5.3.3.tgz", "integrity": "sha512-kpqnYK4wcdm5UaWI3fLcELopqLrHgLqNsdpHauzlQktfkHL3npOSwtj1Uz9oKBAzs7lFtVkV8j83voAz2D8fhw==", + "license": "MIT", "dependencies": { "@types/history": "^4.7.11", "@types/react": "*", @@ -6016,12 +7141,11 @@ } }, "node_modules/@types/send": { - "version": "0.17.5", - "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.5.tgz", - "integrity": "sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-1.2.1.tgz", + "integrity": "sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==", "license": "MIT", "dependencies": { - "@types/mime": "^1", "@types/node": "*" } }, @@ -6035,14 +7159,24 @@ } }, "node_modules/@types/serve-static": { - "version": "1.15.8", - "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.8.tgz", - "integrity": "sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg==", + "version": "1.15.10", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.10.tgz", + "integrity": "sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw==", "license": "MIT", "dependencies": { "@types/http-errors": "*", "@types/node": "*", - "@types/send": "*" + "@types/send": "<1" + } + }, + "node_modules/@types/serve-static/node_modules/@types/send": { + "version": "0.17.6", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.6.tgz", + "integrity": "sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==", + "license": "MIT", + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" } }, "node_modules/@types/sockjs": { @@ -6097,12 +7231,75 @@ "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", "license": "MIT" }, + "node_modules/@uiw/codemirror-extensions-basic-setup": { + "version": "4.25.11", + "resolved": "https://registry.npmjs.org/@uiw/codemirror-extensions-basic-setup/-/codemirror-extensions-basic-setup-4.25.11.tgz", + "integrity": "sha512-otyFa+n9IOYtEjaKOxPedHkj15fTPUF21wdR9pv0GpZPfuGl27cvmcv6+tognbRu9VvEcsHKE+ESoszeo3KfTw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@codemirror/autocomplete": ">=6.0.0", + "@codemirror/commands": ">=6.0.0", + "@codemirror/language": ">=6.0.0", + "@codemirror/lint": ">=6.0.0", + "@codemirror/search": ">=6.0.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/view": ">=6.0.0" + } + }, + "node_modules/@uiw/react-codemirror": { + "version": "4.25.11", + "resolved": "https://registry.npmjs.org/@uiw/react-codemirror/-/react-codemirror-4.25.11.tgz", + "integrity": "sha512-DYVFAKLX+F/4JS9N/7xexh+TICrlncwkX9HKKInrP1bwO0tSfc3k0GB6oawTYhelVKh20cX3TuRx+NJSkVXuMw==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.18.6", + "@codemirror/commands": "^6.1.0", + "@codemirror/state": "^6.1.1", + "@codemirror/theme-one-dark": "^6.0.0", + "@uiw/codemirror-extensions-basic-setup": "4.25.11", + "codemirror": "^6.0.0" + }, + "funding": { + "url": "https://jaywcjlove.github.io/#/sponsor" + }, + "peerDependencies": { + "@babel/runtime": ">=7.11.0", + "@codemirror/state": ">=6.0.0", + "@codemirror/theme-one-dark": ">=6.0.0", + "@codemirror/view": ">=6.0.0", + "codemirror": ">=6.0.0", + "react": ">=17.0.0", + "react-dom": ">=17.0.0" + } + }, "node_modules/@ungap/structured-clone": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.0.tgz", - "integrity": "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.3.3.tgz", + "integrity": "sha512-60YRaenCQcVjYEKOcG824+DRGGIQ3VKErcBoAEDJZz5bKIs2ZG+X/H9Nk+Q6EVkwJk5QNApxbrc5QtBSwtrXAg==", "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/@webassemblyjs/ast": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.14.1.tgz", @@ -6274,27 +7471,6 @@ "node": ">= 0.6" } }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/accepts/node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -6305,9 +7481,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.17.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.17.0.tgz", + "integrity": "sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==", "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6326,9 +7502,10 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.3", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.3.tgz", - "integrity": "sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==", + "version": "8.3.5", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.5.tgz", + "integrity": "sha512-HEHNfbars9v4pgpW6SO1KSPkfoS0xVOM/9UzkJltjlsHZmJasxg8aXkuZa7SMf8vKGIBhpUsPluQSqhJFCqebw==", + "license": "MIT", "dependencies": { "acorn": "^8.11.0" }, @@ -6337,11 +7514,24 @@ } }, "node_modules/address": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/address/-/address-1.2.2.tgz", - "integrity": "sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/address/-/address-2.0.3.tgz", + "integrity": "sha512-XNAb/a6TCqou+TufU8/u11HCu9x1gYvOoxLwtlXgIqmkrYQADVv6ljyW2zwiPhHz9R1gItAWpuDrdJMmrOBFEA==", + "license": "MIT", "engines": { - "node": ">= 10.0.0" + "node": ">= 16.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, "node_modules/aggregate-error": { @@ -6358,9 +7548,10 @@ } }, "node_modules/ajv": { - "version": "8.17.1", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", - "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.20.0.tgz", + "integrity": "sha512-Thbli+OlOj+iMPYFBVBfJ3OmCAnaSyNn4M1vz9T6Gka5Jt9ba/HIR56joy65tY6kx/FCF5VXNB819Y7/GUrBGA==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6376,6 +7567,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "license": "MIT", "dependencies": { "ajv": "^8.0.0" }, @@ -6392,6 +7584,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3" }, @@ -6400,34 +7593,34 @@ } }, "node_modules/algoliasearch": { - "version": "5.50.0", - "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.50.0.tgz", - "integrity": "sha512-yE5I83Q2s8euVou8Y3feXK08wyZInJWLYXgWO6Xti9jBUEZAGUahyeQ7wSZWkifLWVnQVKEz5RAmBlXG5nqxog==", - "license": "MIT", - "dependencies": { - "@algolia/abtesting": "1.16.0", - "@algolia/client-abtesting": "5.50.0", - "@algolia/client-analytics": "5.50.0", - "@algolia/client-common": "5.50.0", - "@algolia/client-insights": "5.50.0", - "@algolia/client-personalization": "5.50.0", - "@algolia/client-query-suggestions": "5.50.0", - "@algolia/client-search": "5.50.0", - "@algolia/ingestion": "1.50.0", - "@algolia/monitoring": "1.50.0", - "@algolia/recommend": "5.50.0", - "@algolia/requester-browser-xhr": "5.50.0", - "@algolia/requester-fetch": "5.50.0", - "@algolia/requester-node-http": "5.50.0" + "version": "5.56.0", + "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.56.0.tgz", + "integrity": "sha512-PrqppUmhT4ENdas2pH9caE7efUcxy6EcSFhWzosiVuQBzu2tQ5yLTI6jwomT/1cuBnivzGfxiJCqDNN9FRRh+Q==", + "license": "MIT", + "dependencies": { + "@algolia/abtesting": "1.22.0", + "@algolia/client-abtesting": "5.56.0", + "@algolia/client-analytics": "5.56.0", + "@algolia/client-common": "5.56.0", + "@algolia/client-insights": "5.56.0", + "@algolia/client-personalization": "5.56.0", + "@algolia/client-query-suggestions": "5.56.0", + "@algolia/client-search": "5.56.0", + "@algolia/ingestion": "1.56.0", + "@algolia/monitoring": "1.56.0", + "@algolia/recommend": "5.56.0", + "@algolia/requester-browser-xhr": "5.56.0", + "@algolia/requester-fetch": "5.56.0", + "@algolia/requester-node-http": "5.56.0" }, "engines": { "node": ">= 14.0.0" } }, "node_modules/algoliasearch-helper": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.28.1.tgz", - "integrity": "sha512-6iXpbkkrAI5HFpCWXlNmIDSBuoN/U1XnEvb2yJAoWfqrZ+DrybI7MQ5P5mthFaprmocq+zbi6HxnR28xnZAYBw==", + "version": "3.29.2", + "resolved": "https://registry.npmjs.org/algoliasearch-helper/-/algoliasearch-helper-3.29.2.tgz", + "integrity": "sha512-SaV+rZM3drExb0punEYYjT+sNcH74YFwN8ocjya7IDOyQvKWeQpEaSMVG3+IGTVos+feuatj7ljQ4BXlXdUp3w==", "license": "MIT", "dependencies": { "@algolia/events": "^4.0.1" @@ -6440,6 +7633,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.1.tgz", "integrity": "sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==", + "license": "ISC", "dependencies": { "string-width": "^4.1.0" } @@ -6447,12 +7641,14 @@ "node_modules/ansi-align/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/ansi-align/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", @@ -6462,33 +7658,6 @@ "node": ">=8" } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/ansi-html-community": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", @@ -6505,6 +7674,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -6513,6 +7683,7 @@ "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" }, @@ -6523,6 +7694,15 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/ansis": { + "version": "3.17.0", + "resolved": "https://registry.npmjs.org/ansis/-/ansis-3.17.0.tgz", + "integrity": "sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -6569,6 +7749,20 @@ "node": ">=8" } }, + "node_modules/asn1js": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.10.tgz", + "integrity": "sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.5", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/astring": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/astring/-/astring-1.9.0.tgz", @@ -6588,14 +7782,15 @@ "version": "3.16.2", "resolved": "https://registry.npmjs.org/autolinker/-/autolinker-3.16.2.tgz", "integrity": "sha512-JiYl7j2Z19F9NdTmirENSUUIIL/9MytEWtmzhfmsKPCp9E+G35Y0UNCMoM9tFigxT59qSc8Ml2dlZXOCVTYwuA==", + "license": "MIT", "dependencies": { "tslib": "^2.3.0" } }, "node_modules/autoprefixer": { - "version": "10.4.27", - "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.27.tgz", - "integrity": "sha512-NP9APE+tO+LuJGn7/9+cohklunJsXWiaWEfV3si4Gi/XHDwVNgkwr1J3RQYFIvPy76GmJ9/bW8vyoU1LcxwKHA==", + "version": "10.5.4", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.5.4.tgz", + "integrity": "sha512-MaU0U/za7N3r6brxD4YB/l4NSrFzLPlANv6wEuQVaIPlD3L4W9rFcQPbL/EilY9BHhHvhfcz3gInDLrEtWT4EA==", "funding": [ { "type": "opencollective", @@ -6612,8 +7807,8 @@ ], "license": "MIT", "dependencies": { - "browserslist": "^4.28.1", - "caniuse-lite": "^1.0.30001774", + "browserslist": "^4.28.6", + "caniuse-lite": "^1.0.30001806", "fraction.js": "^5.3.4", "picocolors": "^1.1.1", "postcss-value-parser": "^4.2.0" @@ -6644,14 +7839,15 @@ } }, "node_modules/axios": { - "version": "1.12.2", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.12.2.tgz", - "integrity": "sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.18.1.tgz", + "integrity": "sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==", "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.6", - "form-data": "^4.0.4", - "proxy-from-env": "^1.1.0" + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" } }, "node_modules/babel-loader": { @@ -6680,6 +7876,37 @@ "object.assign": "^4.1.0" } }, + "node_modules/babel-plugin-macros": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz", + "integrity": "sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg==", + "license": "MIT", + "dependencies": { + "@babel/runtime": "^7.12.5", + "cosmiconfig": "^7.0.0", + "resolve": "^1.19.0" + }, + "engines": { + "node": ">=10", + "npm": ">=6" + } + }, + "node_modules/babel-plugin-macros/node_modules/cosmiconfig": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.1.0.tgz", + "integrity": "sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==", + "license": "MIT", + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/babel-plugin-polyfill-corejs2": { "version": "0.4.17", "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.17.tgz", @@ -6741,7 +7968,8 @@ "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==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" }, "node_modules/base64-js": { "version": "1.5.1", @@ -6764,9 +7992,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.10.12", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.12.tgz", - "integrity": "sha512-qyq26DxfY4awP2gIRXhhLWfwzwI+N5Nxk6iQi8EFizIaWIjqicQTE4sLnZZVdeKPRcVNoJOkkpfzoIYuvCKaIQ==", + "version": "2.11.5", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.5.tgz", + "integrity": "sha512-xJo6a6YZnwZfnyGmQKWMbVOcii7XRibjOskRh+WJ9UHQoX16xrQrcIgAMQOzfvs8XiLMx6ih/fsLPF73iY2D1A==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -6803,23 +8031,23 @@ } }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.6", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.6.tgz", + "integrity": "sha512-p5tAzS57i5MV9fZFDj9LeIiTZEufbSe2eDozP+ElheSUq1m74CRq1jI4mYNDdVs9vQztXFLuk/Gd6BWTdwRJ5g==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.15.1", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -6841,7 +8069,19 @@ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "license": "MIT", "dependencies": { - "ms": "2.0.0" + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" } }, "node_modules/body-parser/node_modules/ms": { @@ -6850,25 +8090,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bonjour-service": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.3.0.tgz", - "integrity": "sha512-3YuAUiSkWykd+2Azjgyxei8OWf8thdn8AITIog2M4UICzoqfjlqr64WIjEXZllf/W6vK1goqleSR6brGomxQqA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.4.3.tgz", + "integrity": "sha512-2Kd5UYlFUVgAKMTyuBLl6w49wqfOnbxHqmuH0oCl/n7TfAikR0zoowNOP5BU4dfXmm+Vr9JyEN370auSMx+CNg==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.3", @@ -6878,12 +8103,14 @@ "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "license": "ISC" }, "node_modules/boxen": { "version": "6.2.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-6.2.1.tgz", "integrity": "sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==", + "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^6.2.0", @@ -6902,9 +8129,9 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", - "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.16.tgz", + "integrity": "sha512-IDw48K2/2kRkg9LdJxurvq3lV3aBgq0REY89duEqFRthjlPdXHKMj7EnQOXVckxzgisinf3nHfrcE2FufFLXMw==", "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", @@ -6924,9 +8151,9 @@ } }, "node_modules/browserslist": { - "version": "4.28.1", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", - "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", + "version": "4.28.7", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.7.tgz", + "integrity": "sha512-JxV13hNrFxqjOc8alRbq9dK1MM79NEXYpma2B2J4wAtpWS5zIEIKqWPGCl7N4o7Uc7B7itylh7SuDujATRyyTw==", "funding": [ { "type": "opencollective", @@ -6943,11 +8170,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.9.0", - "caniuse-lite": "^1.0.30001759", - "electron-to-chromium": "^1.5.263", - "node-releases": "^2.0.27", - "update-browserslist-db": "^1.2.0" + "baseline-browser-mapping": "^2.10.44", + "caniuse-lite": "^1.0.30001806", + "electron-to-chromium": "^1.5.393", + "node-releases": "^2.0.51", + "update-browserslist-db": "^1.2.3" }, "bin": { "browserslist": "cli.js" @@ -6983,7 +8210,8 @@ "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", - "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" }, "node_modules/bundle-name": { "version": "4.1.0", @@ -7004,14 +8232,25 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "license": "MIT", "engines": { "node": ">= 0.8" } }, + "node_modules/bytestreamjs": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/bytestreamjs/-/bytestreamjs-2.0.1.tgz", + "integrity": "sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=6.0.0" + } + }, "node_modules/cacheable-lookup": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-7.0.0.tgz", "integrity": "sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==", + "license": "MIT", "engines": { "node": ">=14.16" } @@ -7020,6 +8259,7 @@ "version": "10.2.14", "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-10.2.14.tgz", "integrity": "sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==", + "license": "MIT", "dependencies": { "@types/http-cache-semantics": "^4.0.2", "get-stream": "^6.0.1", @@ -7034,14 +8274,14 @@ } }, "node_modules/call-bind": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", - "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.9.tgz", + "integrity": "sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==", "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", - "es-define-property": "^1.0.0", - "get-intrinsic": "^1.2.4", + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", "set-function-length": "^1.2.2" }, "engines": { @@ -7093,6 +8333,7 @@ "version": "4.1.2", "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "license": "MIT", "dependencies": { "pascal-case": "^3.1.2", "tslib": "^2.0.3" @@ -7102,6 +8343,7 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -7122,9 +8364,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001781", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001781.tgz", - "integrity": "sha512-RdwNCyMsNBftLjW6w01z8bKEvT6e/5tpPVEgtn22TiLGlstHOVecsX2KHFkD5e/vRnIE4EGzpuIODb3mtswtkw==", + "version": "1.0.30001806", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001806.tgz", + "integrity": "sha512-72Cuvd95zbSYPKq6Fhg8eDJRlzgWDf7/mtoZv6Qe/DYNCEBdNxoA3+rZAU2ZhGCpZlns3EssFavaZomckT5Uuw==", "funding": [ { "type": "opencollective", @@ -7151,10 +8393,19 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/cd": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/cd/-/cd-0.3.3.tgz", + "integrity": "sha512-X2y0Ssu48ucdkrNgCdg6k3EZWjWVy/dsEywUUTeZEIW31f3bQfq65Svm+TzU1Hz+qqhdmyCdjGhUvRsSKHl/mw==", + "engines": { + "node": "*" + } + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -7179,6 +8430,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" @@ -7252,32 +8504,6 @@ "url": "https://github.com/sponsors/fb55" } }, - "node_modules/chevrotain": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", - "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", - "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" - } - }, - "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==", - "license": "MIT", - "dependencies": { - "lodash-es": "^4.17.21" - }, - "peerDependencies": { - "chevrotain": "^11.0.0" - } - }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -7306,6 +8532,7 @@ "version": "1.0.4", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.4.tgz", "integrity": "sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==", + "license": "MIT", "engines": { "node": ">=6.0" } @@ -7320,19 +8547,28 @@ "url": "https://github.com/sponsors/sibiraj-s" } ], + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/classcat": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/classcat/-/classcat-5.0.5.tgz", + "integrity": "sha512-JhZUT7JFcQy/EzW605k/ktHtncoo9vnyW/2GspNYwFlN1C/WmjuV/xtS04e9SOkL2sTdw0VAZ2UGCcQ9lR6p6w==", + "license": "MIT" + }, "node_modules/classnames": { "version": "2.5.1", "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.5.1.tgz", - "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==" + "integrity": "sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==", + "license": "MIT" }, "node_modules/clean-css": { "version": "5.3.3", "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "license": "MIT", "dependencies": { "source-map": "~0.6.0" }, @@ -7344,6 +8580,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -7361,6 +8598,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-3.0.0.tgz", "integrity": "sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -7372,6 +8610,7 @@ "version": "0.6.5", "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.5.tgz", "integrity": "sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==", + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -7385,12 +8624,14 @@ "node_modules/cli-table3/node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" }, "node_modules/cli-table3/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", @@ -7418,10 +8659,26 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", "engines": { "node": ">=6" } }, + "node_modules/codemirror": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.2.tgz", + "integrity": "sha512-VhydHotNW5w1UGK0Qj96BwSk/Zqbp9WbnyK2W/eVMv4QyF41INRGpjUhFJY7/uDNuudSc33a/PKr4iDqRduvHw==", + "license": "MIT", + "dependencies": { + "@codemirror/autocomplete": "^6.0.0", + "@codemirror/commands": "^6.0.0", + "@codemirror/language": "^6.0.0", + "@codemirror/lint": "^6.0.0", + "@codemirror/search": "^6.0.0", + "@codemirror/state": "^6.0.0", + "@codemirror/view": "^6.0.0" + } + }, "node_modules/collapse-white-space": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-2.1.0.tgz", @@ -7436,6 +8693,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", "dependencies": { "color-name": "~1.1.4" }, @@ -7446,7 +8704,8 @@ "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" }, "node_modules/colord": { "version": "2.9.3", @@ -7464,6 +8723,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/combine-promises/-/combine-promises-1.2.0.tgz", "integrity": "sha512-VcQB1ziGD0NXrhKxiwyNbCDmRzs/OShMs2GqW2DlU2A/Sd0nQxE1oWDAE5O0ygSx5mgQOn9eIFh7yKPgFRVkPQ==", + "license": "MIT", "engines": { "node": ">=10" } @@ -7494,6 +8754,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/commander/-/commander-5.1.0.tgz", "integrity": "sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==", + "license": "MIT", "engines": { "node": ">= 6" } @@ -7516,15 +8777,6 @@ "node": ">= 0.6" } }, - "node_modules/compressible/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, "node_modules/compression": { "version": "1.8.1", "resolved": "https://registry.npmjs.org/compression/-/compression-1.8.1.tgz", @@ -7570,27 +8822,30 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" - }, - "node_modules/confbox": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz", - "integrity": "sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "license": "MIT" }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "license": "MIT", "dependencies": { "ini": "^1.3.4", "proto-list": "~1.2.1" } }, + "node_modules/config-chain/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, "node_modules/configstore": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/configstore/-/configstore-6.0.0.tgz", "integrity": "sha512-cD31W1v3GqUlQvbBCGcXmd2Nj9SvLDOP1oQ0YFuLETufzSPaKp11rYBsSOm7rCsW3OnIRAFM3OxRhceaXNYHkA==", + "license": "BSD-2-Clause", "dependencies": { "dot-prop": "^6.0.1", "graceful-fs": "^4.2.6", @@ -7641,18 +8896,51 @@ "node": ">= 0.6" } }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/convert-source-map": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "license": "MIT" }, + "node_modules/cookie": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, + "node_modules/copy-text-to-clipboard": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz", + "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/copy-to-clipboard": { "version": "3.3.3", "resolved": "https://registry.npmjs.org/copy-to-clipboard/-/copy-to-clipboard-3.3.3.tgz", @@ -7730,10 +9018,11 @@ } }, "node_modules/core-js": { - "version": "3.38.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.38.1.tgz", - "integrity": "sha512-OP35aUorbU3Zvlx7pjsFdu1rGNnD4pgw/CWoYzRY3t2EzoVT7shKHY1dlAy3f41cGIO7ZDPQimhGFTlEYkG/Hw==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.49.0.tgz", + "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==", "hasInstallScript": true, + "license": "MIT", "funding": { "type": "opencollective", "url": "https://opencollective.com/core-js" @@ -7753,9 +9042,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.45.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.45.1.tgz", - "integrity": "sha512-OHnWFKgTUshEU8MK+lOs1H8kC8GkTi9Z1tvNkxrCcw9wl3MJIO7q2ld77wjWn4/xuGrVu2X+nME1iIIPBSdyEQ==", + "version": "3.49.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.49.0.tgz", + "integrity": "sha512-XM4RFka59xATyJv/cS3O3Kml72hQXUeGRuuTmMYFxwzc9/7C8OYTaIR/Ji+Yt8DXzsFLNhat15cE/JP15HrCgw==", "hasInstallScript": true, "license": "MIT", "funding": { @@ -7773,6 +9062,7 @@ "version": "1.0.3", "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", "dependencies": { "layout-base": "^1.0.0" } @@ -7803,6 +9093,12 @@ } } }, + "node_modules/crelt": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.7.tgz", + "integrity": "sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==", + "license": "MIT" + }, "node_modules/cross-spawn": { "version": "7.0.6", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", @@ -7821,6 +9117,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-4.0.0.tgz", "integrity": "sha512-x8dy3RnvYdlUcPOjkEHqozhiwzKNSq7GcPuXFbnyMOCHxX8V3OgIg/pYuabl2sbUPfIJaeAQB7PMOK8DFIdoRA==", + "license": "MIT", "dependencies": { "type-fest": "^1.0.1" }, @@ -7835,6 +9132,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -7868,9 +9166,9 @@ } }, "node_modules/css-blank-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -7881,9 +9179,9 @@ } }, "node_modules/css-declaration-sorter": { - "version": "7.3.1", - "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.3.1.tgz", - "integrity": "sha512-gz6x+KkgNCjxq3Var03pRYLhyNfwhkKF1g/yoLgDNtFvVu0/fOLV9C8fFEZRjACp/XQLumjAYo7JVjzH3wLbxA==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-7.4.0.tgz", + "integrity": "sha512-LTuzjPoyA2vMGKKcaOqKSp7Ub2eGrNfKiZH4LpezxpNrsICGCSFvsQOI29psISxNZtaXibkC2CXzrQ5enMeGGw==", "license": "ISC", "engines": { "node": "^14 || ^16 || >=18" @@ -7942,9 +9240,9 @@ } }, "node_modules/css-has-pseudo/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -8085,9 +9383,10 @@ } }, "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.2.2.tgz", + "integrity": "sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==", + "license": "BSD-2-Clause", "engines": { "node": ">= 6" }, @@ -8098,12 +9397,13 @@ "node_modules/css.escape": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", - "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "license": "MIT" }, "node_modules/cssdb": { - "version": "8.8.0", - "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.8.0.tgz", - "integrity": "sha512-QbLeyz2Bgso1iRlh7IpWk6OKa3lLNGXsujVjDMPl9rOZpxKeiG69icLpbLCFxeURwmcdIfZqQyhlooKJYM4f8Q==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/cssdb/-/cssdb-8.9.0.tgz", + "integrity": "sha512-J8jOU/hLjaXcO1LldOLraJSQpfLXRKof0I7mtbRyOy2AAXgqst0x9rlgi2qXeD6d0ou3ZLqcPAMqYVbpCbrxEw==", "funding": [ { "type": "opencollective", @@ -8259,14 +9559,16 @@ "license": "CC0-1.0" }, "node_modules/csstype": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", - "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==" + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.2.3.tgz", + "integrity": "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ==", + "license": "MIT" }, "node_modules/cytoscape": { - "version": "3.30.2", - "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.30.2.tgz", - "integrity": "sha512-oICxQsjW8uSaRmn4UK/jkczKOqTrVqt5/1WL0POiJUT2EKNc9STM4hYFHv917yu55aTBMFNRzymlJhVAiWPCxw==", + "version": "3.34.0", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.34.0.tgz", + "integrity": "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg==", + "license": "MIT", "engines": { "node": ">=0.10" } @@ -8275,6 +9577,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", "dependencies": { "cose-base": "^1.0.0" }, @@ -8420,6 +9723,60 @@ "node": ">=12" } }, + "node_modules/d3-dag": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-dag/-/d3-dag-1.2.2.tgz", + "integrity": "sha512-RT4+IEUEthIeIiTb4TUfmrw8o7qINmeRjtvrokmuhfk3KXp8YQX6yZOFUJIq7sHhv5JMpDKR3hHWzYb9q/jUaQ==", + "license": "MIT", + "dependencies": { + "d3-array": "^3.2.4", + "javascript-lp-solver": "^1.0.3", + "quadprog": "^1.6.1", + "stringify-object": "^6.0.0" + } + }, + "node_modules/d3-dag/node_modules/is-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-3.0.0.tgz", + "integrity": "sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/d3-dag/node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/d3-dag/node_modules/stringify-object": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-6.0.0.tgz", + "integrity": "sha512-6f94vIED6vmJJfh3lyVsVWxCYSfI5uM+16ntED/Ql37XIyV6kj0mRAAiTeMMc/QLYIaizC3bUprQ8pQnDDrKfA==", + "license": "BSD-2-Clause", + "dependencies": { + "get-own-enumerable-keys": "^1.0.0", + "is-identifier": "^1.0.1", + "is-obj": "^3.0.0", + "is-regexp": "^3.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/d3-delaunay": { "version": "6.0.4", "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", @@ -8488,18 +9845,6 @@ "node": ">= 10" } }, - "node_modules/d3-dsv/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/d3-ease": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", @@ -8536,9 +9881,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" @@ -8617,6 +9962,7 @@ "version": "0.12.3", "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", "dependencies": { "d3-array": "1 - 2", "d3-shape": "^1.2.0" @@ -8626,6 +9972,7 @@ "version": "2.12.1", "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", "dependencies": { "internmap": "^1.0.0" } @@ -8633,12 +9980,14 @@ "node_modules/d3-sankey/node_modules/d3-path": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", - "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==" + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" }, "node_modules/d3-sankey/node_modules/d3-shape": { "version": "1.3.7", "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", "dependencies": { "d3-path": "1" } @@ -8646,7 +9995,8 @@ "node_modules/d3-sankey/node_modules/internmap": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", - "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==" + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" }, "node_modules/d3-scale": { "version": "4.0.2", @@ -8767,9 +10117,9 @@ } }, "node_modules/dagre-d3-es": { - "version": "7.0.11", - "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz", - "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==", + "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", @@ -8777,15 +10127,16 @@ } }, "node_modules/dayjs": { - "version": "1.11.18", - "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.18.tgz", - "integrity": "sha512-zFBQ7WFRvVRhKcWoUh+ZA1g2HVgUbsZm9sbddh8EC5iv93sui8DVVz1Npvz+r6meo9VKfa8NyLWBsQK1VvIKPA==", + "version": "1.11.21", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.21.tgz", + "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA==", "license": "MIT" }, "node_modules/debounce": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/debounce/-/debounce-1.2.1.tgz", - "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==" + "integrity": "sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==", + "license": "MIT" }, "node_modules/debug": { "version": "4.4.3", @@ -8805,9 +10156,10 @@ } }, "node_modules/decode-named-character-reference": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", - "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.3.0.tgz", + "integrity": "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q==", + "license": "MIT", "dependencies": { "character-entities": "^2.0.0" }, @@ -8820,6 +10172,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", "dependencies": { "mimic-response": "^3.1.0" }, @@ -8834,6 +10187,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -8845,6 +10199,7 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", "engines": { "node": ">=4.0.0" } @@ -8859,9 +10214,9 @@ } }, "node_modules/default-browser": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.2.1.tgz", - "integrity": "sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/default-browser/-/default-browser-5.5.0.tgz", + "integrity": "sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==", "license": "MIT", "dependencies": { "bundle-name": "^4.1.0", @@ -8875,9 +10230,9 @@ } }, "node_modules/default-browser-id": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.0.tgz", - "integrity": "sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/default-browser-id/-/default-browser-id-5.0.1.tgz", + "integrity": "sha512-x1VCxdX4t+8wVfd1so/9w+vQ4vx7lKd2Qp5tDRutErwmR85OgmfX7RlLRMWafRMY7hbEiXIbudNrjOAPa/hL8Q==", "license": "MIT", "engines": { "node": ">=18" @@ -8890,6 +10245,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", "engines": { "node": ">=10" } @@ -8938,9 +10294,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" @@ -8968,6 +10324,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", "engines": { "node": ">=6" } @@ -8989,19 +10346,19 @@ "license": "MIT" }, "node_modules/detect-port": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-1.6.1.tgz", - "integrity": "sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-port/-/detect-port-2.1.0.tgz", + "integrity": "sha512-epZuWb/6Q62L+nDHJc/hQAqf8pylsqgk3BpZXVBx1CDnr3nkrVNn73Uu1rXcFzkNcc+hkP3whuOg7JZYaQB65Q==", + "license": "MIT", "dependencies": { - "address": "^1.0.1", - "debug": "4" + "address": "^2.0.1" }, "bin": { - "detect": "bin/detect-port.js", - "detect-port": "bin/detect-port.js" + "detect": "dist/commonjs/bin/detect-port.js", + "detect-port": "dist/commonjs/bin/detect-port.js" }, "engines": { - "node": ">= 4.0.0" + "node": ">= 16.0.0" } }, "node_modules/devlop": { @@ -9045,6 +10402,7 @@ "version": "0.2.0", "resolved": "https://registry.npmjs.org/dom-converter/-/dom-converter-0.2.0.tgz", "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "license": "MIT", "dependencies": { "utila": "~0.4" } @@ -9072,7 +10430,8 @@ "type": "github", "url": "https://github.com/sponsors/fb55" } - ] + ], + "license": "BSD-2-Clause" }, "node_modules/domhandler": { "version": "5.0.3", @@ -9090,9 +10449,9 @@ } }, "node_modules/dompurify": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz", - "integrity": "sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==", + "version": "3.4.12", + "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.4.12.tgz", + "integrity": "sha512-zQvGet8Z2sWbQhCmfFz/T5QWH2oBmjnqK3qvOjaqaNLrLEF912WamU+ohnTp0TCep/MFVHpdJuCZEdFOdTnEFg==", "license": "(MPL-2.0 OR Apache-2.0)", "optionalDependencies": { "@types/trusted-types": "^2.0.7" @@ -9116,6 +10475,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -9125,6 +10485,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-6.0.1.tgz", "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -9139,6 +10500,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "license": "MIT", "engines": { "node": ">=8" } @@ -9169,12 +10531,14 @@ "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", - "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==" + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "license": "MIT" }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" }, "node_modules/ee-first": { "version": "1.1.1", @@ -9183,15 +10547,16 @@ "license": "MIT" }, "node_modules/electron-to-chromium": { - "version": "1.5.328", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.328.tgz", - "integrity": "sha512-QNQ5l45DzYytThO21403XN3FvK0hOkWDG8viNf6jqS42msJ8I4tGDSpBCgvDRRPnkffafiwAym2X2eHeGD2V0w==", + "version": "1.5.397", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.397.tgz", + "integrity": "sha512-khGTy9U9x02KEtsKM8vx5A62BsRmcOsIgDpWr1ImE32Ax8GxHGPHZf+Eu9H8zOOyHJnB0jTbseyTHbq2XCT8yw==", "license": "ISC" }, "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==" + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" }, "node_modules/emojilib": { "version": "2.4.0", @@ -9228,12 +10593,13 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "version": "5.24.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.24.3.tgz", + "integrity": "sha512-PwKooW9JUzh5chmYfHM3IQl5OkK2u2Nm011MgeZrss3JmFraUx/fqrf78kk8GUMYoibx/14MdwTl/1WKkG7TpQ==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "tapable": "^2.3.3" }, "engines": { "node": ">=10.13.0" @@ -9279,14 +10645,15 @@ } }, "node_modules/es-module-lexer": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", - "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==" + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.3.1.tgz", + "integrity": "sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==", + "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", - "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.2.tgz", + "integrity": "sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0" @@ -9310,6 +10677,17 @@ "node": ">= 0.4" } }, + "node_modules/es-toolkit": { + "version": "1.50.0", + "resolved": "https://registry.npmjs.org/es-toolkit/-/es-toolkit-1.50.0.tgz", + "integrity": "sha512-OyZKhUVvEep9ITEiwHn8GKnMRQIVqoSIX7WnRbkWgJkllCujilqP2rD0u979tkl8wqyc8ICwlc1UBVv/Sl1G6w==", + "license": "MIT", + "workspaces": [ + "docs", + "benchmarks", + "tests/types" + ] + }, "node_modules/esast-util-from-estree": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/esast-util-from-estree/-/esast-util-from-estree-2.0.0.tgz", @@ -9355,6 +10733,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-4.0.0.tgz", "integrity": "sha512-2Sd4ShcWxbx6OY1IHyla/CVNwvg7XwZVoXZHcSu9w9SReNP1EzzD5T8NWKIR38fIqEns9kDWKUQTXXAmlDrdPg==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -9372,6 +10751,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -9383,6 +10763,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -9391,23 +10772,11 @@ "node": ">=8.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -9419,6 +10788,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -9427,6 +10797,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "license": "BSD-2-Clause", "engines": { "node": ">=4.0" } @@ -9547,6 +10918,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/eta/-/eta-2.2.0.tgz", "integrity": "sha512-UVQ72Rqjy/ZKQalzV5dCCJP80GrmPrMxh6NlNf+erV6ObL0ZFkhCstWRawS85z3smdr3d2wXPsZEY7rDPfGd2g==", + "license": "MIT", "engines": { "node": ">=6.0.0" }, @@ -9585,6 +10957,7 @@ "version": "3.3.0", "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", "engines": { "node": ">=0.8.x" } @@ -9612,40 +10985,46 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, + "node_modules/exenv": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/exenv/-/exenv-1.2.2.tgz", + "integrity": "sha512-Z+ktTxTwv9ILfgKCk32OX3n/doe+OcLTRtqK9pcL+JsP3J1/VW8Uvl4ZjLlKqeW4rzK4oesDOGMEMRIZqtP4Iw==", + "license": "BSD-3-Clause" + }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.2.tgz", + "integrity": "sha512-IuL+Elrou2ZvCFHs18/CIzy2Nzvo25nZ1/D2eIZlz7c+QUayAcYoiM2BthCjs+EBHVpjYjcuLDAiCWgeIX3X1Q==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.5", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.15.1", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -9661,20 +11040,11 @@ "node_modules/express/node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", - "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", - "license": "MIT", - "dependencies": { - "safe-buffer": "5.2.1" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "license": "MIT", + "dependencies": { + "safe-buffer": "5.2.1" + }, "engines": { "node": ">= 0.6" } @@ -9695,26 +11065,11 @@ "license": "MIT" }, "node_modules/express/node_modules/path-to-regexp": { - "version": "0.1.12", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.12.tgz", - "integrity": "sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==", + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.13.tgz", + "integrity": "sha512-A/AGNMFN3c8bOlvV9RreMdrv7jsmF9XIfDeCd87+I8RNg6s78BhJxMu69NEMHBSJFxKidViTEdruRwEk/WIKqA==", "license": "MIT" }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/express/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -9724,12 +11079,6 @@ "node": ">= 0.6" } }, - "node_modules/exsolve": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz", - "integrity": "sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==", - "license": "MIT" - }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -9751,7 +11100,8 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "license": "MIT" }, "node_modules/fast-glob": { "version": "3.3.3", @@ -9782,9 +11132,20 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", - "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==" + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" }, "node_modules/fastq": { "version": "1.20.1", @@ -9832,30 +11193,6 @@ "node": ">=0.4.0" } }, - "node_modules/figures": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, "node_modules/file-loader": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-6.2.0.tgz", @@ -9877,9 +11214,9 @@ } }, "node_modules/file-loader/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -9938,17 +11275,17 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -9986,6 +11323,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/find-root": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz", + "integrity": "sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng==", + "license": "MIT" + }, "node_modules/find-up": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-6.3.0.tgz", @@ -10012,9 +11355,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.11", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", - "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "version": "1.16.0", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.16.0.tgz", + "integrity": "sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw==", "funding": [ { "type": "individual", @@ -10047,16 +11390,16 @@ } }, "node_modules/form-data": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.4.tgz", - "integrity": "sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.6.tgz", + "integrity": "sha512-vKatAh4SlVfgbv+YtmhiRjhEMJsYpsG1Y2rMQtR+SVSbytsSD1YGzDIcrAJmdFec88u/+VoGmxnl+80gL1tRCQ==", "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.2", - "mime-types": "^2.1.12" + "hasown": "^2.0.4", + "mime-types": "^2.1.35" }, "engines": { "node": ">= 6" @@ -10066,6 +11409,7 @@ "version": "2.1.4", "resolved": "https://registry.npmjs.org/form-data-encoder/-/form-data-encoder-2.1.4.tgz", "integrity": "sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==", + "license": "MIT", "engines": { "node": ">= 14.17" } @@ -10110,9 +11454,10 @@ } }, "node_modules/fs-extra": { - "version": "11.2.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", - "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "version": "11.4.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.4.0.tgz", + "integrity": "sha512-EQsFzMUJkCKGr1ePqlYADkIUmHW1s3ZXr5Yqy6wbGrfUCphpl2maM/kyOIRA2HpP3AaFQTZXD4ldjek+nccddA==", + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -10145,6 +11490,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/function-timeout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-1.0.2.tgz", + "integrity": "sha512-939eZS4gJ3htTHAldmyyuzlrD58P03fHG49v2JfFXbV6OhvZKRC9j2yAtdHw/zrp2zXHuv05zMIy40F0ge7spA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -10178,6 +11535,18 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-own-enumerable-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-own-enumerable-keys/-/get-own-enumerable-keys-1.0.0.tgz", + "integrity": "sha512-PKsK2FSrQCyxcGHsGrLDcK0lx+0Ke+6e8KFFozA9/fIQLhQzPaRvJFdcz7+Axg3jUH/Mq+NI4xa5u/UT2tQskA==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/get-own-enumerable-property-symbols": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", @@ -10201,6 +11570,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -10227,9 +11597,9 @@ } }, "node_modules/glob-to-regex.js": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.0.1.tgz", - "integrity": "sha512-CG/iEvgQqfzoVsMUbxSJcwbG2JwyZ3naEqPkeltwl0BSS8Bp83k3xlGms+0QdWFUAwV+uvo80wNswKF6FWEkKg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/glob-to-regex.js/-/glob-to-regex.js-1.2.0.tgz", + "integrity": "sha512-QMwlOQKU/IzqMUOAZWubUOT8Qft+Y0KQWnX9nK3ch0CJg0tTp4TvGZsTfudYKv2NzoQSyPcnA6TYeIQ3jGichQ==", "license": "Apache-2.0", "engines": { "node": ">=10.0" @@ -10242,15 +11612,11 @@ "tslib": "2" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", - "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==" - }, "node_modules/global-dirs": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-3.0.1.tgz", "integrity": "sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==", + "license": "MIT", "dependencies": { "ini": "2.0.0" }, @@ -10261,26 +11627,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-dirs/node_modules/ini": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", - "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", - "engines": { - "node": ">=10" - } - }, - "node_modules/globals": { - "version": "15.15.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", - "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globby": { "version": "11.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", @@ -10317,6 +11663,7 @@ "version": "12.6.1", "resolved": "https://registry.npmjs.org/got/-/got-12.6.1.tgz", "integrity": "sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==", + "license": "MIT", "dependencies": { "@sindresorhus/is": "^5.2.0", "@szmarczak/http-timer": "^5.0.1", @@ -10341,6 +11688,7 @@ "version": "5.6.0", "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-5.6.0.tgz", "integrity": "sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -10351,49 +11699,14 @@ "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" - }, - "node_modules/gray-matter": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/gray-matter/-/gray-matter-4.0.3.tgz", - "integrity": "sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==", - "license": "MIT", - "dependencies": { - "js-yaml": "^3.13.1", - "kind-of": "^6.0.2", - "section-matter": "^1.0.0", - "strip-bom-string": "^1.0.0" - }, - "engines": { - "node": ">=6.0" - } - }, - "node_modules/gray-matter/node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/gray-matter/node_modules/js-yaml": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", - "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "license": "MIT", "dependencies": { "duplexer": "^0.1.2" }, @@ -10420,6 +11733,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -10467,6 +11781,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-3.0.0.tgz", "integrity": "sha512-IrsVwUHhEULx3R8f/aA8AHuEzAorplsab/v8HBzEiIukwq5i/EC+xmOW+HfP1OaDP+2JkgT1yILHN2O3UFIbcA==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -10475,9 +11790,9 @@ } }, "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.4.tgz", + "integrity": "sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==", "license": "MIT", "dependencies": { "function-bind": "^1.1.2" @@ -10573,9 +11888,9 @@ } }, "node_modules/hast-util-to-jsx-runtime": { - "version": "2.3.5", - "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.5.tgz", - "integrity": "sha512-gHD+HoFxOMmmXLuq9f2dZDMQHVcplCVpMfBNRpJsF03yyLZvJGzsFORe8orVuYDX9k2w0VH0uF8oryFd1whqKQ==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.6.tgz", + "integrity": "sha512-zl6s8LwNyo1P9uw+XJGvZtdFF1GdAkOg8ujOw+4Pyb76874fLps4ueHXDhXWdk6YHQ6OgUtinliG7RsYvCbbBg==", "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", @@ -10590,7 +11905,7 @@ "mdast-util-mdxjs-esm": "^2.0.0", "property-information": "^7.0.0", "space-separated-tokens": "^2.0.0", - "style-to-object": "^1.0.0", + "style-to-js": "^1.0.0", "unist-util-position": "^5.0.0", "vfile-message": "^4.0.0" }, @@ -10652,6 +11967,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "license": "MIT", "bin": { "he": "bin/he" } @@ -10675,6 +11991,7 @@ "version": "4.10.1", "resolved": "https://registry.npmjs.org/history/-/history-4.10.1.tgz", "integrity": "sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2", "loose-envify": "^1.2.0", @@ -10688,6 +12005,7 @@ "version": "3.3.2", "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", + "license": "BSD-3-Clause", "dependencies": { "react-is": "^16.7.0" } @@ -10743,7 +12061,8 @@ "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==" + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "license": "MIT" }, "node_modules/html-minifier-terser": { "version": "7.2.0", @@ -10779,6 +12098,7 @@ "version": "3.3.1", "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "license": "MIT", "engines": { "node": ">=8" }, @@ -10797,9 +12117,10 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.0.tgz", - "integrity": "sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==", + "version": "5.6.8", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.8.tgz", + "integrity": "sha512-MZmKQcTnhEh1SPSyMiEytIeDZDUoBZVorNHivQGXMASHf/BSGGOrKa2xQ5bGx3TCe1n109ecCt+cpww7wwWhKA==", + "license": "MIT", "dependencies": { "@types/html-minifier-terser": "^6.0.0", "html-minifier-terser": "^6.0.2", @@ -10815,7 +12136,7 @@ "url": "https://opencollective.com/html-webpack-plugin" }, "peerDependencies": { - "@rspack/core": "0.x || 1.x", + "@rspack/core": "0.x || 1.x || 2.x", "webpack": "^5.20.0" }, "peerDependenciesMeta": { @@ -10831,6 +12152,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", + "license": "MIT", "engines": { "node": ">= 12" } @@ -10839,6 +12161,7 @@ "version": "6.1.0", "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-6.1.0.tgz", "integrity": "sha512-YXxSlJBZTP7RS3tWnQw74ooKa6L9b9i9QYXY21eUEvhZ3u9XLfv6OnFsQq6RxkhHygsaUMvYsZRV5rU/OVNZxw==", + "license": "MIT", "dependencies": { "camel-case": "^4.1.2", "clean-css": "^5.2.2", @@ -10875,9 +12198,10 @@ } }, "node_modules/http-cache-semantics": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", - "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" }, "node_modules/http-deceiver": { "version": "1.2.7", @@ -10886,19 +12210,23 @@ "license": "MIT" }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http-parser-js": { @@ -10922,9 +12250,9 @@ } }, "node_modules/http-proxy-middleware": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz", - "integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==", + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.10.tgz", + "integrity": "sha512-RKzRWNPxUZqbuk3BC5mGVJbBnWgr+diEnjJexIOytFbBzDy88Fbh/YvBr3DsNrl1jYAfjWfpATEv0NO35FDuPQ==", "license": "MIT", "dependencies": { "@types/http-proxy": "^1.17.8", @@ -10961,6 +12289,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-2.2.1.tgz", "integrity": "sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==", + "license": "MIT", "dependencies": { "quick-lru": "^5.1.1", "resolve-alpn": "^1.2.0" @@ -10969,6 +12298,19 @@ "node": ">=10.19.0" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -10988,12 +12330,12 @@ } }, "node_modules/iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "license": "MIT", "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { "node": ">=0.10.0" @@ -11011,6 +12353,21 @@ "postcss": "^8.1.0" } }, + "node_modules/identifier-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/identifier-regex/-/identifier-regex-1.1.0.tgz", + "integrity": "sha512-SLX4H/vtcYlYnL7XqnuJKHU7Z8517TgsW9nmQiGOgMCjQ8V/deLYu6bEmbGoXe7WMMhc9+EUGyFFneHja8KabA==", + "license": "MIT", + "dependencies": { + "reserved-identifiers": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", @@ -11052,15 +12409,22 @@ "node": ">=16.x" } }, - "node_modules/immutable": { - "version": "3.8.2", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-3.8.2.tgz", - "integrity": "sha512-15gZoQ38eYjEjxkorfbcgBKBL6R7T459OuK+CpcWt7O3KF4uPCx2tD0uFETlUDIyo+1789crbMhTvQBSR5yBMg==", + "node_modules/immer": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", + "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", "license": "MIT", - "engines": { - "node": ">=0.10.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" } }, + "node_modules/immutable": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.9.tgz", + "integrity": "sha512-ObHy4YN7ycwZOUCLI1/6svfyAFu7vL8RhAvVu/bh/RZW9EPlOyDaQ9jDQWCtdqzaXUjgXZCW1migtHE7YI7UGQ==", + "license": "MIT" + }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -11081,14 +12445,26 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/import-meta-resolve": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz", + "integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", "engines": { "node": ">=0.8.19" } @@ -11114,17 +12490,22 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" }, "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz", + "integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==", + "license": "ISC", + "engines": { + "node": ">=10" + } }, "node_modules/inline-style-parser": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", - "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.7.tgz", + "integrity": "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==", "license": "MIT" }, "node_modules/internmap": { @@ -11140,14 +12521,15 @@ "version": "2.2.4", "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", "dependencies": { "loose-envify": "^1.0.0" } }, "node_modules/ipaddr.js": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.2.0.tgz", - "integrity": "sha512-Ag3wB2o37wslZS19hZqorUnrnzSkpOVy+IiiDEiTqNubEYpYuHWIf6K4psgN2ZWKExS4xhVCrRVfb/wfW8fWJA==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.4.0.tgz", + "integrity": "sha512-9VGk3HGanVE6JoZXHiCpnGy5X0jYDnN4EA4lntFPj+1vIWlFhIylq2CrrCOJH9EAhc5CYhq18F2Av2tgoAPsYQ==", "license": "MIT", "engines": { "node": ">= 10" @@ -11211,6 +12593,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", + "license": "MIT", "dependencies": { "ci-info": "^3.2.0" }, @@ -11219,12 +12602,12 @@ } }, "node_modules/is-core-module": { - "version": "2.16.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", - "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.2.tgz", + "integrity": "sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA==", "license": "MIT", "dependencies": { - "hasown": "^2.0.2" + "hasown": "^2.0.3" }, "engines": { "node": ">= 0.4" @@ -11280,6 +12663,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", "engines": { "node": ">=8" } @@ -11306,6 +12690,22 @@ "url": "https://github.com/sponsors/wooorm" } }, + "node_modules/is-identifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-identifier/-/is-identifier-1.1.0.tgz", + "integrity": "sha512-NhOds0mDx9lJu+1lBRO0xbwFo5nobA7GCk/0e5xjr6+6XugX985+0OyGX35BNrTkPAsdLcIKg02HUQJOK8D8kw==", + "license": "MIT", + "dependencies": { + "identifier-regex": "^1.1.0", + "super-regex": "^1.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-inside-container": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-inside-container/-/is-inside-container-1.0.0.tgz", @@ -11343,6 +12743,7 @@ "version": "0.4.0", "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.4.0.tgz", "integrity": "sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==", + "license": "MIT", "dependencies": { "global-dirs": "^3.0.0", "is-path-inside": "^3.0.2" @@ -11355,9 +12756,9 @@ } }, "node_modules/is-network-error": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.0.tgz", - "integrity": "sha512-6oIwpsgRfnDiyEDLMay/GqCl3HoAtH5+RUKW29gYkL0QA+ipzpDLA16yQs7/RHCSu+BwgbJaOUqa4A99qNVQVw==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.2.tgz", + "integrity": "sha512-PhBY86zaxNZUuWP6h13Vu5oFe0XY6/UlKzQnYFELzGVHygP3MxmvTfYSG7GN3aIab/iWudSMgjSnG9Dq+nHrgA==", "license": "MIT", "engines": { "node": ">=16" @@ -11367,9 +12768,10 @@ } }, "node_modules/is-npm": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.0.0.tgz", - "integrity": "sha512-JEjxbSmtPSt1c8XTkVrlujcXdKV1/tvuQ7GwKcAlyiVLeYFQ2VHat8xfrDJsIkhCdF/tZ7CiIR3sy141c6+gPQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-6.1.0.tgz", + "integrity": "sha512-O2z4/kNgyjhQwVR1Wpkbfc19JIhggF97NZNCpWTnjH7kVcZMUrnut9XSN7txI7VdyIYk5ZatOq3zvSuWpU8hoA==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -11399,6 +12801,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "license": "MIT", "engines": { "node": ">=8" } @@ -11466,7 +12869,8 @@ "node_modules/is-typedarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==" + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "license": "MIT" }, "node_modules/is-wsl": { "version": "2.2.0", @@ -11484,6 +12888,7 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.4.1.tgz", "integrity": "sha512-/kppl+R+LO5VmhYSEWARUFjodS25D68gvj8W7z0I7OWhUla5xWu8KL6CtB2V0R6yqhnRgbcaREMr4EEM6htLPQ==", + "license": "MIT", "engines": { "node": ">=12" } @@ -11491,7 +12896,8 @@ "node_modules/isarray": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", - "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==" + "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", + "license": "MIT" }, "node_modules/isexe": { "version": "2.0.0", @@ -11508,6 +12914,12 @@ "node": ">=0.10.0" } }, + "node_modules/javascript-lp-solver": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/javascript-lp-solver/-/javascript-lp-solver-1.0.3.tgz", + "integrity": "sha512-+qUYrubmn227YTz25uf9wOTlgB3wFKGtutECxL1shjOkgi/Tcn3SpnC7+T9rxhv/JNOxLIfZ3O6wEx0FwLlXbw==", + "license": "Unlicense" + }, "node_modules/jest-util": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", @@ -11565,9 +12977,9 @@ } }, "node_modules/joi": { - "version": "17.13.3", - "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.3.tgz", - "integrity": "sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==", + "version": "17.13.4", + "resolved": "https://registry.npmjs.org/joi/-/joi-17.13.4.tgz", + "integrity": "sha512-1RuuER6kmt8K8I3nIWvPZKi5RQCb568ZPyY4Pwjlua+yo+63ZTmIwxLZH0heBmiKN4uxjvCiarDrjaeH84xicQ==", "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^9.3.0", @@ -11580,17 +12992,29 @@ "node_modules/js-file-download": { "version": "0.4.12", "resolved": "https://registry.npmjs.org/js-file-download/-/js-file-download-0.4.12.tgz", - "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==" + "integrity": "sha512-rML+NkoD08p5Dllpjo0ffy4jRHeY6Zsapvr/W86N7E0yuzAO6qa5X9+xog6zQNlH102J7IXljNY2FtS6Lj3ucg==", + "license": "MIT" }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", - "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.0.tgz", + "integrity": "sha512-1td788aAnnZ5qs7V2QIRl1owjtYpbKt749Y3xauqQgwIIGF/xXWz1wMTEBx5O3LK3lXLVuqXPdPxj2BoFHaW9Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -11614,17 +13038,20 @@ "node_modules/json-buffer": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", - "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "license": "MIT" }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", - "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "license": "MIT" }, "node_modules/json5": { "version": "2.2.3", @@ -11639,9 +13066,10 @@ } }, "node_modules/jsonfile": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.1.tgz", + "integrity": "sha512-zwOTdL3rFQ/lRdBnntKVOX6k5cKJwEc1HdilT71BWEu7J41gXIB2MRp+vxduPSwZJPWBxEzv4yH1wYLJGUHX4Q==", + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -11650,9 +13078,9 @@ } }, "node_modules/katex": { - "version": "0.16.22", - "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz", - "integrity": "sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==", + "version": "0.16.47", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.47.tgz", + "integrity": "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg==", "funding": [ "https://opencollective.com/katex", "https://github.com/sponsors/katex" @@ -11678,6 +13106,7 @@ "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -11691,6 +13120,7 @@ "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11704,32 +13134,11 @@ "node": ">=6" } }, - "node_modules/kolorist": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", - "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", - "license": "MIT" - }, - "node_modules/langium": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz", - "integrity": "sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==", - "license": "MIT", - "dependencies": { - "chevrotain": "~11.0.3", - "chevrotain-allstar": "~0.3.0", - "vscode-languageserver": "~9.0.1", - "vscode-languageserver-textdocument": "~1.0.11", - "vscode-uri": "~3.0.8" - }, - "engines": { - "node": ">=16.0.0" - } - }, "node_modules/latest-version": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz", "integrity": "sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==", + "license": "MIT", "dependencies": { "package-json": "^8.1.0" }, @@ -11741,24 +13150,26 @@ } }, "node_modules/launch-editor": { - "version": "2.11.1", - "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.11.1.tgz", - "integrity": "sha512-SEET7oNfgSaB6Ym0jufAdCeo3meJVeCaaDyzRygy0xsp2BFKCprcfHljTq4QkzTLUxEKkFK6OK4811YM2oSrRg==", + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.14.1.tgz", + "integrity": "sha512-QWBrQsMpH7gPr965dsKD/3cKWiNoTjpATQf++Xq63N6sKRGMwlVXz41O1IZTMfZQgBctD/K5Zt06+/I6pP6+HA==", "license": "MIT", "dependencies": { "picocolors": "^1.1.1", - "shell-quote": "^1.8.3" + "shell-quote": "^1.8.4" } }, "node_modules/layout-base": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", - "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==" + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", "engines": { "node": ">=6" } @@ -11781,14 +13192,6 @@ "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "license": "MIT" }, - "node_modules/loader-runner": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", - "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", - "engines": { - "node": ">=6.11.5" - } - }, "node_modules/loader-utils": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", @@ -11803,23 +13206,6 @@ "node": ">=8.9.0" } }, - "node_modules/local-pkg": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", - "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", - "license": "MIT", - "dependencies": { - "mlly": "^1.7.4", - "pkg-types": "^2.3.0", - "quansync": "^0.2.11" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" - } - }, "node_modules/locate-path": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz", @@ -11836,20 +13222,22 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + "version": "4.18.1", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz", + "integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==", + "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/lodash.debounce": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==" + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "license": "MIT" }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -11877,6 +13265,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -11888,6 +13277,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "license": "MIT", "dependencies": { "tslib": "^2.0.3" } @@ -11896,6 +13286,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", "integrity": "sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -11939,6 +13330,35 @@ "yallist": "^3.0.2" } }, + "node_modules/make-asynchronous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/make-asynchronous/-/make-asynchronous-1.1.0.tgz", + "integrity": "sha512-ayF7iT+44LXdxJLTrTd3TLQpFDDvPCBxXxbv+pMUSuHA5Q8zyAfwkRP6aHHwNVFBUFWtxAHqwNJxF8vMZLAbVg==", + "license": "MIT", + "dependencies": { + "p-event": "^6.0.0", + "type-fest": "^4.6.0", + "web-worker": "^1.5.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-asynchronous/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/markdown-extensions": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/markdown-extensions/-/markdown-extensions-2.0.0.tgz", @@ -11962,9 +13382,9 @@ } }, "node_modules/marked": { - "version": "16.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-16.3.0.tgz", - "integrity": "sha512-K3UxuKu6l6bmA5FUwYho8CfJBlsUWAooKtdGgMcERSpF7gcBUrCGsLH7wDaaNOzwq18JzSUDyoEb/YsrqMac3w==", + "version": "16.4.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-16.4.2.tgz", + "integrity": "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA==", "license": "MIT", "bin": { "marked": "bin/marked.js" @@ -12032,9 +13452,9 @@ } }, "node_modules/mdast-util-from-markdown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", - "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.3.tgz", + "integrity": "sha512-W4mAWTvSlKvf8L6J+VN9yLSqQ9AOAAvHuoDAmPkz4dHf553m5gVj2ejadHJhoJmcmxEnOv6Pa8XJhpxE93kb8Q==", "license": "MIT", "dependencies": { "@types/mdast": "^4.0.0", @@ -12330,9 +13750,9 @@ } }, "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "version": "13.2.1", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.1.tgz", + "integrity": "sha512-cctsq2wp5vTsLIcaymblUriiTcZd0CwWtCbLvrOzYCDZoWyMNV8sZ7krj09FSnsiJi3WVsHLM4k6Dq/yaPyCXA==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -12400,11 +13820,19 @@ } }, "node_modules/memfs": { - "version": "4.48.1", - "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.48.1.tgz", - "integrity": "sha512-vWO+1ROkhOALF1UnT9aNOOflq5oFDlqwTXaPg6duo07fBLxSH0+bcF0TY1lbA1zTNKyGgDxgaDdKx5MaewLX5A==", + "version": "4.64.0", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-4.64.0.tgz", + "integrity": "sha512-Kw72fgY7Wn+sD8KmtNWSafl1dz0UvAsE/PHs3YVfLiaZuA3HxNm9sRLqAu0ATiBGJvME1PxZXbBZPv5GycDeAw==", "license": "Apache-2.0", "dependencies": { + "@jsonjoy.com/fs-core": "4.64.0", + "@jsonjoy.com/fs-fsa": "4.64.0", + "@jsonjoy.com/fs-node": "4.64.0", + "@jsonjoy.com/fs-node-builtins": "4.64.0", + "@jsonjoy.com/fs-node-to-fsa": "4.64.0", + "@jsonjoy.com/fs-node-utils": "4.64.0", + "@jsonjoy.com/fs-print": "4.64.0", + "@jsonjoy.com/fs-snapshot": "4.64.0", "@jsonjoy.com/json-pack": "^1.11.0", "@jsonjoy.com/util": "^1.9.0", "glob-to-regex.js": "^1.0.1", @@ -12415,6 +13843,9 @@ "funding": { "type": "github", "url": "https://github.com/sponsors/streamich" + }, + "peerDependencies": { + "tslib": "2" } }, "node_modules/merge-descriptors": { @@ -12429,7 +13860,8 @@ "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==" + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT" }, "node_modules/merge2": { "version": "1.4.1", @@ -12441,45 +13873,39 @@ } }, "node_modules/mermaid": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.12.0.tgz", - "integrity": "sha512-ZudVx73BwrMJfCFmSSJT84y6u5brEoV8DOItdHomNLz32uBjNrelm7mg95X7g+C6UoQH/W6mBLGDEDv73JdxBg==", + "version": "11.16.0", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.16.0.tgz", + "integrity": "sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA==", "license": "MIT", "dependencies": { - "@braintree/sanitize-url": "^7.1.1", - "@iconify/utils": "^3.0.1", - "@mermaid-js/parser": "^0.6.2", + "@braintree/sanitize-url": "^7.1.2", + "@iconify/utils": "^3.0.2", + "@mermaid-js/parser": "^1.2.0", "@types/d3": "^7.4.3", - "cytoscape": "^3.29.3", + "@upsetjs/venn.js": "^2.0.0", + "cytoscape": "^3.33.3", "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.11", - "dayjs": "^1.11.18", - "dompurify": "^3.2.5", - "katex": "^0.16.22", + "dagre-d3-es": "7.0.14", + "dayjs": "^1.11.20", + "dompurify": "^3.3.3", + "es-toolkit": "^1.45.1", + "katex": "^0.16.45", "khroma": "^2.1.0", - "lodash-es": "^4.17.21", - "marked": "^16.2.1", + "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", - "uuid": "^11.1.0" + "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, - "node_modules/mermaid/node_modules/uuid": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", - "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist/esm/bin/uuid" - } + "node_modules/mermaid/node_modules/stylis": { + "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/methods": { "version": "1.1.2", @@ -13084,9 +14510,9 @@ "license": "MIT" }, "node_modules/micromark-extension-mdx-expression": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.0.tgz", - "integrity": "sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-expression/-/micromark-extension-mdx-expression-3.0.1.tgz", + "integrity": "sha512-dD/ADLJ1AeMvSAKBwO22zG22N4ybhe7kFIZ3LsDI0GlsNr2A3KYxb0LdC1u5rj4Nw+CHKY0RVdnHX8vj8ejm4Q==", "funding": [ { "type": "GitHub Sponsors", @@ -13166,12 +14592,11 @@ "license": "MIT" }, "node_modules/micromark-extension-mdx-jsx": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.1.tgz", - "integrity": "sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/micromark-extension-mdx-jsx/-/micromark-extension-mdx-jsx-3.0.2.tgz", + "integrity": "sha512-e5+q1DjMh62LZAJOnDraSSbDMvGJ8x3cbjygy2qFEi7HCeUT4BDKCvMozPozcD6WmOt6sVvYDNBKhFSz3kjOVQ==", "license": "MIT", "dependencies": { - "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "devlop": "^1.0.0", "estree-util-is-identifier-name": "^3.0.0", @@ -13450,9 +14875,9 @@ "license": "MIT" }, "node_modules/micromark-factory-mdx-expression": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.2.tgz", - "integrity": "sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-factory-mdx-expression/-/micromark-factory-mdx-expression-2.0.3.tgz", + "integrity": "sha512-kQnEtA3vzucU2BkrIa8/VaSAsP+EJ3CKOvhMuJgOEGg9KDC6OAY6nSnNDVRiVNRqj7Y4SlSzcStaH/5jge8JdQ==", "funding": [ { "type": "GitHub Sponsors", @@ -13982,9 +15407,9 @@ "license": "MIT" }, "node_modules/micromark-util-events-to-acorn": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.2.tgz", - "integrity": "sha512-Fk+xmBrOv9QZnEDguL9OI9/NQQp6Hz4FuQ4YmCb/5V7+9eAh1s6AYSvL20kHkD67YIg7EpE54TiSlcsf3vyZgA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-events-to-acorn/-/micromark-util-events-to-acorn-2.0.3.tgz", + "integrity": "sha512-jmsiEIiZ1n7X1Rr5k8wVExBQCg5jy4UXVADItHmNk1zkwEVhBuIUKRu3fqv+hs4nxLISi2DQGlqIOGiFxgbfHg==", "funding": [ { "type": "GitHub Sponsors", @@ -13997,7 +15422,6 @@ ], "license": "MIT", "dependencies": { - "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", @@ -14302,19 +15726,21 @@ } }, "node_modules/mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", "dependencies": { - "mime-db": "~1.33.0" + "mime-db": "1.52.0" }, "engines": { "node": ">= 0.6" @@ -14333,6 +15759,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-4.0.0.tgz", "integrity": "sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==", + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -14379,9 +15806,10 @@ "license": "ISC" }, "node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -14393,43 +15821,105 @@ "version": "1.2.8", "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/mlly": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.0.tgz", - "integrity": "sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==", + "node_modules/minimizer-webpack-plugin": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/minimizer-webpack-plugin/-/minimizer-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==", "license": "MIT", "dependencies": { - "acorn": "^8.15.0", - "pathe": "^2.0.3", - "pkg-types": "^1.3.1", - "ufo": "^1.6.1" + "@jridgewell/trace-mapping": "^0.3.25", + "jest-worker": "^27.4.5", + "schema-utils": "^4.3.0", + "terser": "^5.31.1" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/mlly/node_modules/confbox": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", - "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", - "license": "MIT" + "node_modules/minimizer-webpack-plugin/node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } }, - "node_modules/mlly/node_modules/pkg-types": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", - "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "node_modules/minimizer-webpack-plugin/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "license": "MIT", "dependencies": { - "confbox": "^0.1.8", - "mlly": "^1.7.4", - "pathe": "^2.0.1" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, "node_modules/mrmime": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", - "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz", + "integrity": "sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==", + "license": "MIT", "engines": { "node": ">=10" } @@ -14454,9 +15944,9 @@ } }, "node_modules/nanoid": { - "version": "3.3.11", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", - "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "version": "3.3.16", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.16.tgz", + "integrity": "sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==", "funding": [ { "type": "github", @@ -14483,7 +15973,8 @@ "node_modules/neo-async": { "version": "2.6.2", "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "license": "MIT" }, "node_modules/neotraverse": { "version": "0.6.18", @@ -14498,6 +15989,7 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "license": "MIT", "dependencies": { "lower-case": "^2.0.2", "tslib": "^2.0.3" @@ -14510,35 +16002,15 @@ "license": "MIT" }, "node_modules/node-addon-api": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.5.0.tgz", - "integrity": "sha512-/bRZty2mXUIFY/xU5HLvveNHlswNJej+RnxBjOMkidWfwZzgTbPG1E3K5TOxRLOR+5hX7bSofy8yf1hZevMS8A==", + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-8.9.0.tgz", + "integrity": "sha512-ekZMeaaIzSQTSpr7X2X3iJM7lTzgnx8ahAG9pJfT/7+14mlEM8ZYQ9cgCDvSSRbReFK0oHli3WrZdCiRsgAT9Q==", "license": "MIT", "optional": true, "engines": { "node": "^18 || ^20 || >= 21" } }, - "node_modules/node-domexception": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/node-domexception/-/node-domexception-1.0.0.tgz", - "integrity": "sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==", - "deprecated": "Use your platform's native DOMException instead", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" - } - }, "node_modules/node-emoji": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-2.2.0.tgz", @@ -14554,32 +16026,6 @@ "node": ">=18" } }, - "node_modules/node-fetch-commonjs": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/node-fetch-commonjs/-/node-fetch-commonjs-3.3.2.tgz", - "integrity": "sha512-VBlAiynj3VMLrotgwOS3OyECFxas5y7ltLcK4t41lMUZeaK15Ym4QRkqN0EQKAFL42q9i21EPKjzLUPfltR72A==", - "license": "MIT", - "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" - } - }, - "node_modules/node-forge": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", - "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", - "license": "(BSD-3-Clause OR GPL-2.0)", - "engines": { - "node": ">= 6.13.0" - } - }, "node_modules/node-gyp-build": { "version": "4.8.4", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.4.tgz", @@ -14593,10 +16039,13 @@ } }, "node_modules/node-releases": { - "version": "2.0.36", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", - "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", - "license": "MIT" + "version": "2.0.51", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.51.tgz", + "integrity": "sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/normalize-path": { "version": "3.0.0", @@ -14608,9 +16057,10 @@ } }, "node_modules/normalize-url": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.0.1.tgz", - "integrity": "sha512-IO9QvjUMWxPQQhs60oOu10CRkWCiZzSUkzbXGGV9pviYl1fXYcvkzQ5jV9z8Y6un8ARoVRl4EtC6v6jNqbaJ/w==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-8.1.1.tgz", + "integrity": "sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -14640,6 +16090,7 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0" }, @@ -14668,9 +16119,9 @@ } }, "node_modules/null-loader/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -14720,6 +16171,7 @@ "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -14852,6 +16304,7 @@ "version": "1.5.2", "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "license": "(WTFPL OR MIT)", "bin": { "opener": "bin/opener-bin.js" } @@ -14860,10 +16313,38 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "license": "MIT", "engines": { "node": ">=12.20" } }, + "node_modules/p-event": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-6.0.1.tgz", + "integrity": "sha512-Q6Bekk5wpzW5qIyUP4gdMEujObYstZl6DMMOSenwBvV0BlE5LkDwkjs5yHbZmdCEq2o4RJx4tE1vwxFVf2FG1w==", + "license": "MIT", + "dependencies": { + "p-timeout": "^6.1.2" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-event/node_modules/p-timeout": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.4.tgz", + "integrity": "sha512-MyIV3ZA/PmyBN/ud8vV9XzwTrNtR4jFrObymZYnZqMmW0zA8Z17vnT0rBgFE/TlohB+YCHqXMgZzb3Csp49vqg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", @@ -14967,6 +16448,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/package-json/-/package-json-8.1.1.tgz", "integrity": "sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==", + "license": "MIT", "dependencies": { "got": "^12.1.0", "registry-auth-token": "^5.0.1", @@ -14981,15 +16463,16 @@ } }, "node_modules/package-manager-detector": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz", - "integrity": "sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ==", + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.8.0.tgz", + "integrity": "sha512-yQA4H19AmPEoMUeavPMDIe1higySl/gH/yaQrkT/s07Qp+7pp2hYz30N3z2l5BkjVkF9Ow6o0wjJamm2y7Sn0A==", "license": "MIT" }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "license": "MIT", "dependencies": { "dot-case": "^3.0.4", "tslib": "^2.0.3" @@ -15106,6 +16589,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "license": "MIT", "dependencies": { "no-case": "^3.0.4", "tslib": "^2.0.3" @@ -15151,6 +16635,7 @@ "version": "1.9.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.9.0.tgz", "integrity": "sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==", + "license": "MIT", "dependencies": { "isarray": "0.0.1" } @@ -15164,12 +16649,6 @@ "node": ">=8" } }, - "node_modules/pathe": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", - "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", - "license": "MIT" - }, "node_modules/picocolors": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", @@ -15177,9 +16656,9 @@ "license": "ISC" }, "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", "license": "MIT", "engines": { "node": ">=8.6" @@ -15203,15 +16682,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-types": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", - "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", - "license": "MIT", + "node_modules/pkijs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pkijs/-/pkijs-3.4.0.tgz", + "integrity": "sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==", + "license": "BSD-3-Clause", "dependencies": { - "confbox": "^0.2.2", - "exsolve": "^1.0.7", - "pathe": "^2.0.3" + "@noble/hashes": "1.4.0", + "asn1js": "^3.0.6", + "bytestreamjs": "^2.0.1", + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=16.0.0" } }, "node_modules/points-on-curve": { @@ -15240,9 +16725,9 @@ } }, "node_modules/postcss": { - "version": "8.5.8", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.8.tgz", - "integrity": "sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==", + "version": "8.5.23", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.23.tgz", + "integrity": "sha512-g50586zr4bZmwFiTlflMu8E0bDTb5I5gertgwAKmsdUlTQIhZtunzUlD1WSzwcVWPoAVpsrA6vlfCD7oXvRwgg==", "funding": [ { "type": "opencollective", @@ -15259,7 +16744,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -15293,9 +16778,9 @@ } }, "node_modules/postcss-attribute-case-insensitive/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -15537,9 +17022,9 @@ } }, "node_modules/postcss-custom-selectors/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -15575,9 +17060,9 @@ } }, "node_modules/postcss-dir-pseudo-class/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -15703,9 +17188,9 @@ } }, "node_modules/postcss-focus-visible/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -15741,9 +17226,9 @@ } }, "node_modules/postcss-focus-within/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16030,9 +17515,9 @@ } }, "node_modules/postcss-modules-local-by-default/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16058,9 +17543,9 @@ } }, "node_modules/postcss-modules-scope/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16157,9 +17642,9 @@ } }, "node_modules/postcss-nesting/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16520,9 +18005,9 @@ } }, "node_modules/postcss-pseudo-class-any-link/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16613,9 +18098,9 @@ } }, "node_modules/postcss-selector-not/node_modules/postcss-selector-parser": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", - "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz", + "integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16626,9 +18111,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.1.2", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", - "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.4.tgz", + "integrity": "sha512-bIoJLOmjCO1S9XdY/DcnR5hJxvrDir1PbGChrzXG3vw0/FOliy/fA3dmdhQ441kah4gKv+TwckGzex6wNS5cnQ==", "license": "MIT", "dependencies": { "cssesc": "^3.0.0", @@ -16706,6 +18191,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/pretty-error/-/pretty-error-4.0.0.tgz", "integrity": "sha512-AoJ5YMAcXKYxKhuJGdcvse+Voc6v1RgnsR3nWcYU7q4t6z0Q6T86sv5Zq8VIRbOWWFpvdGE83LtdSMNd+6Y0xw==", + "license": "MIT", "dependencies": { "lodash": "^4.17.20", "renderkid": "^3.0.0" @@ -16721,9 +18207,10 @@ } }, "node_modules/prism-react-renderer": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.3.1.tgz", - "integrity": "sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/prism-react-renderer/-/prism-react-renderer-2.4.1.tgz", + "integrity": "sha512-ey8Ls/+Di31eqzUxC46h8MksNuGx/n0AAC8uKpwFau4RPDYLuE3EXTp8N8G2vX2N7UC/+IXeNUnlWBGGcAG+Ig==", + "license": "MIT", "dependencies": { "@types/prismjs": "^1.26.0", "clsx": "^2.0.0" @@ -16741,15 +18228,6 @@ "node": ">=6" } }, - "node_modules/process": { - "version": "0.11.10", - "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", - "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", @@ -16773,6 +18251,7 @@ "version": "15.8.1", "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "license": "MIT", "dependencies": { "loose-envify": "^1.4.0", "object-assign": "^4.1.1", @@ -16780,9 +18259,9 @@ } }, "node_modules/property-information": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.0.0.tgz", - "integrity": "sha512-7D/qOz/+Y4X/rzSB6jKxKUsQnphO046ei8qxG59mtM3RG3DHgTK81HrxrmoDVINJb8NKT5ZsRbwHvQ6B68Iyhg==", + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-7.2.0.tgz", + "integrity": "sha512-IAtzIB6sUiWaJYrX9smp3V46pBGbBeLFRGdh25kg1334VcBlD8HzhPeNIWQH9zhGmo2itIe25EHt9dQP7G5hmg==", "license": "MIT", "funding": { "type": "github", @@ -16792,7 +18271,8 @@ "node_modules/proto-list": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", - "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==" + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "license": "ISC" }, "node_modules/proxy-addr": { "version": "2.0.7", @@ -16817,10 +18297,13 @@ } }, "node_modules/proxy-from-env": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", - "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", - "license": "MIT" + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-2.1.0.tgz", + "integrity": "sha512-cJ+oHTW1VAEa8cJslgmUZrc+sjRKgAKl3Zyse6+PV38hZe/V6Z14TbCuXcan9F9ghlz4QrFr2c92TNF82UkYHA==", + "license": "MIT", + "engines": { + "node": ">=10" + } }, "node_modules/punycode": { "version": "2.3.1", @@ -16832,9 +18315,10 @@ } }, "node_modules/pupa": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.1.0.tgz", - "integrity": "sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==", + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-3.3.0.tgz", + "integrity": "sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==", + "license": "MIT", "dependencies": { "escape-goat": "^4.0.0" }, @@ -16845,26 +18329,54 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/quansync": { - "version": "0.2.11", - "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", - "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/antfu" - }, - { - "type": "individual", - "url": "https://github.com/sponsors/sxzz" - } - ], - "license": "MIT" + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/qs": { + "version": "6.15.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.15.3.tgz", + "integrity": "sha512-O9gl3zCl5h5blw1KGUzQKhA5oUXSl8rwUIM5o0S3nCXMliSvy5Dzx7/DJcI+SwgICv+IneSZwhBh1oSyEHA71A==", + "license": "BSD-3-Clause", + "dependencies": { + "es-define-property": "^1.0.1", + "side-channel": "^1.1.1" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/quadprog": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/quadprog/-/quadprog-1.6.1.tgz", + "integrity": "sha512-fN5Jkcjlln/b3pJkseDKREf89JkKIyu6cKIVXisgL6ocKPQ0yTp9n6NZUAq3otEPPw78WZMG9K0o9WsfKyMWJw==", + "license": "MIT", + "engines": { + "node": ">=8.x" + } }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "license": "MIT" }, "node_modules/queue-microtask": { "version": "1.2.3", @@ -16890,6 +18402,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", "engines": { "node": ">=10" }, @@ -16940,6 +18453,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", "dependencies": { "safe-buffer": "^5.1.0" } @@ -16954,15 +18468,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -16977,10 +18491,23 @@ "node": ">= 0.8" } }, + "node_modules/raw-body/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/rc": { "version": "1.2.8", "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -16991,10 +18518,17 @@ "rc": "cli.js" } }, + "node_modules/rc/node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17003,6 +18537,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" }, @@ -17011,22 +18546,23 @@ } }, "node_modules/react-copy-to-clipboard": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.0.tgz", - "integrity": "sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/react-copy-to-clipboard/-/react-copy-to-clipboard-5.1.1.tgz", + "integrity": "sha512-s+HrzLyJBxrpGTYXF15dTgMjAJpEPZT/Yp6NytAtZMRngejxt6Pt5WrfFxLAcsqUDU6sY1Jz6tyHwIicE1U2Xg==", "license": "MIT", "dependencies": { - "copy-to-clipboard": "^3.3.1", + "copy-to-clipboard": "^3.3.3", "prop-types": "^15.8.1" }, "peerDependencies": { - "react": "^15.3.0 || 16 || 17 || 18" + "react": ">=15.3.0" } }, "node_modules/react-debounce-input": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/react-debounce-input/-/react-debounce-input-3.3.0.tgz", "integrity": "sha512-VEqkvs8JvY/IIZvh71Z0TC+mdbxERvYF33RcebnodlsUZ8RSgyKe2VWaHXv4+/8aoOgXLxWrdsYs2hDhcwbUgA==", + "license": "MIT", "dependencies": { "lodash.debounce": "^4", "prop-types": "^15.8.1" @@ -17039,6 +18575,7 @@ "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -17050,12 +18587,15 @@ "node_modules/react-fast-compare": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz", - "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" + "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==", + "license": "MIT" }, "node_modules/react-helmet-async": { + "name": "@slorber/react-helmet-async", "version": "1.3.0", - "resolved": "https://registry.npmjs.org/react-helmet-async/-/react-helmet-async-1.3.0.tgz", - "integrity": "sha512-9jZ57/dAn9t3q6hneQS0wukqC2ENOBgMNVEhb/ZG9ZSxUetzVIw4iAmEU38IaVg3QGYauQPhSeUTuIUtFglWpg==", + "resolved": "https://registry.npmjs.org/@slorber/react-helmet-async/-/react-helmet-async-1.3.0.tgz", + "integrity": "sha512-e9/OK8VhwUSc67diWI8Rb3I0YgI9/SBQtnhe9aEuK6MhZm7ntZZimXgwXnd8W96YTmSOb9M4d8LwhRZyhWr/1A==", + "license": "Apache-2.0", "dependencies": { "@babel/runtime": "^7.12.5", "invariant": "^2.2.4", @@ -17064,8 +18604,8 @@ "shallowequal": "^1.1.0" }, "peerDependencies": { - "react": "^16.6.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0" + "react": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0", + "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" } }, "node_modules/react-immutable-proptypes": { @@ -17103,7 +18643,8 @@ "node_modules/react-is": { "version": "16.13.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "license": "MIT" }, "node_modules/react-json-view-lite": { "version": "2.5.0", @@ -17117,11 +18658,18 @@ "react": "^18.0.0 || ^19.0.0" } }, + "node_modules/react-lifecycles-compat": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", + "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==", + "license": "MIT" + }, "node_modules/react-loadable": { "name": "@docusaurus/react-loadable", "version": "6.0.0", "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", + "license": "MIT", "dependencies": { "@types/react": "*" }, @@ -17130,9 +18678,10 @@ } }, "node_modules/react-loadable-ssr-addon-v5-slorber": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.1.tgz", - "integrity": "sha512-lq3Lyw1lGku8zUEJPDxsNm1AfYHBrO9Y1+olAYwpUJ2IGFBskM0DMKok97A6LWUpHm+o7IvQBOWu9MLenp9Z+A==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/react-loadable-ssr-addon-v5-slorber/-/react-loadable-ssr-addon-v5-slorber-1.0.3.tgz", + "integrity": "sha512-GXfh9VLwB5ERaCsU6RULh7tkemeX15aNh6wuMEBtfdyMa7fFG8TXrhXlx1SoEK2Ty/l6XIkzzYIQmyaWW3JgdQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.10.3" }, @@ -17144,10 +18693,35 @@ "webpack": ">=4.41.1 || 5.x" } }, + "node_modules/react-loading-skeleton": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/react-loading-skeleton/-/react-loading-skeleton-3.5.0.tgz", + "integrity": "sha512-gxxSyLbrEAdXTKgfbpBEFZCO/P153DnqSCQau2+o6lNy1jgMRr2MmRmOzMmyrwSaSYLRB8g7b0waYPmUjz7IhQ==", + "license": "MIT", + "peerDependencies": { + "react": ">=16.8.0" + } + }, + "node_modules/react-modal": { + "version": "3.16.3", + "resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.16.3.tgz", + "integrity": "sha512-yCYRJB5YkeQDQlTt17WGAgFJ7jr2QYcWa1SHqZ3PluDmnKJ/7+tVU+E6uKyZ0nODaeEj+xCpK4LcSnKXLMC0Nw==", + "license": "MIT", + "dependencies": { + "exenv": "^1.2.0", + "prop-types": "^15.7.2", + "react-lifecycles-compat": "^3.0.0", + "warning": "^4.0.3" + }, + "peerDependencies": { + "react": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19", + "react-dom": "^0.14.0 || ^15.0.0 || ^16 || ^17 || ^18 || ^19" + } + }, "node_modules/react-redux": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.2.0.tgz", - "integrity": "sha512-ROY9fvHhwOD9ySfrF0wmvu//bKCQ6AeZZq1nJNtbDC+kk5DuSuNX/n6YWYF/SYy7bSba4D4FSz8DJeKY/S/r+g==", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-9.3.0.tgz", + "integrity": "sha512-KQopgqFo/p/fgmAs5qz6p5RWaNAzq40WAu7fJIXnQpYxFPbJYtsJPWvGeF2rOBaY/kEuV77AVsX8TsQzKm+A/g==", "license": "MIT", "dependencies": { "@types/use-sync-external-store": "^0.0.6", @@ -17171,6 +18745,7 @@ "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -17190,6 +18765,7 @@ "version": "5.1.1", "resolved": "https://registry.npmjs.org/react-router-config/-/react-router-config-5.1.1.tgz", "integrity": "sha512-DuanZjaD8mQp1ppHjgnnUnyOlqYXZVjnov/JzFhjLEwd3Z4dYjMSnqrEzzGThH47vpCOqPPwJM2FtthLeJ8Pbg==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.1.2" }, @@ -17202,6 +18778,7 @@ "version": "5.3.4", "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-5.3.4.tgz", "integrity": "sha512-m4EqFMHv/Ih4kpcBCONHbkT68KoAeHN4p3lAGoNryfHi0dMy0kCzEZakiKRsvg5wHZ/JLrLW8o8KomWiz/qbYQ==", + "license": "MIT", "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -17216,22 +18793,43 @@ } }, "node_modules/react-syntax-highlighter": { - "version": "15.6.6", - "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-15.6.6.tgz", - "integrity": "sha512-DgXrc+AZF47+HvAPEmn7Ua/1p10jNoVZVI/LoPiYdtY+OM+/nG5yefLHKJwdKqY1adMuHFbeyBaG9j64ML7vTw==", + "version": "16.1.1", + "resolved": "https://registry.npmjs.org/react-syntax-highlighter/-/react-syntax-highlighter-16.1.1.tgz", + "integrity": "sha512-PjVawBGy80C6YbC5DDZJeUjBmC7skaoEUdvfFQediQHgCL7aKyVHe57SaJGfQsloGDac+gCpTfRdtxzWWKmCXA==", "license": "MIT", "dependencies": { - "@babel/runtime": "^7.3.1", + "@babel/runtime": "^7.28.4", "highlight.js": "^10.4.1", "highlightjs-vue": "^1.0.0", "lowlight": "^1.17.0", "prismjs": "^1.30.0", - "refractor": "^3.6.0" + "refractor": "^5.0.0" + }, + "engines": { + "node": ">= 16.20.2" }, "peerDependencies": { "react": ">= 0.14.0" } }, + "node_modules/reactflow": { + "version": "11.11.4", + "resolved": "https://registry.npmjs.org/reactflow/-/reactflow-11.11.4.tgz", + "integrity": "sha512-70FOtJkUWH3BAOsN+LU9lCrKoKbtOPnz2uq0CV2PLdNSwxTXOhCbsZr50GmZ+Rtw3jx8Uv7/vBFtCGixLfd4Og==", + "license": "MIT", + "dependencies": { + "@reactflow/background": "11.3.14", + "@reactflow/controls": "11.2.14", + "@reactflow/core": "11.11.4", + "@reactflow/minimap": "11.7.14", + "@reactflow/node-resizer": "2.2.14", + "@reactflow/node-toolbar": "1.3.14" + }, + "peerDependencies": { + "react": ">=17", + "react-dom": ">=17" + } + }, "node_modules/readable-stream": { "version": "3.6.2", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", @@ -17274,9 +18872,9 @@ } }, "node_modules/recma-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.0.tgz", - "integrity": "sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/recma-jsx/-/recma-jsx-1.0.1.tgz", + "integrity": "sha512-huSIy7VU2Z5OLv6oFLosQGGDqPqdO1iq6bWNAdhzMxSJP7RAso4fCZ1cKu8j9YHCZf3TPrq4dw3okhrylgcd7w==", "license": "MIT", "dependencies": { "acorn-jsx": "^5.0.0", @@ -17288,6 +18886,9 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/recma-parse": { @@ -17299,235 +18900,66 @@ "@types/estree": "^1.0.0", "esast-util-from-js": "^2.0.0", "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/recma-stringify": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", - "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-util-to-js": "^2.0.0", - "unified": "^11.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/redux": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", - "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", - "license": "MIT" - }, - "node_modules/redux-immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz", - "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==", - "license": "BSD-3-Clause", - "peerDependencies": { - "immutable": "^3.8.1 || ^4.0.0-rc.1" - } - }, - "node_modules/refractor": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/refractor/-/refractor-3.6.0.tgz", - "integrity": "sha512-MY9W41IOWxxk31o+YvFCNyNzdkc9M20NoZK5vq6jkv4I/uh2zkWcfudj0Q1fovjUQJrNewS9NMzeTtqPf+n5EA==", - "license": "MIT", - "dependencies": { - "hastscript": "^6.0.0", - "parse-entities": "^2.0.0", - "prismjs": "~1.27.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/@types/hast": { - "version": "2.3.10", - "resolved": "https://registry.npmjs.org/@types/hast/-/hast-2.3.10.tgz", - "integrity": "sha512-McWspRw8xx8J9HurkVBfYj0xKoE25tOFlHGdx4MJ5xORQrMGZNqJhVQWaIbm6Oyla5kYOXtDiopzKRJzEOkwJw==", - "license": "MIT", - "dependencies": { - "@types/unist": "^2" - } - }, - "node_modules/refractor/node_modules/@types/unist": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", - "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", - "license": "MIT" - }, - "node_modules/refractor/node_modules/character-entities": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", - "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/character-entities-legacy": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", - "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/character-reference-invalid": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", - "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/comma-separated-tokens": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", - "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/hast-util-parse-selector": { - "version": "2.2.5", - "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-2.2.5.tgz", - "integrity": "sha512-7j6mrk/qqkSehsM92wQjdIgWM2/BW61u/53G6xmC8i1OmEdKLHbk419QKQUjz6LglWsfqoiHmyMRkP1BGjecNQ==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/refractor/node_modules/hastscript": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-6.0.0.tgz", - "integrity": "sha512-nDM6bvd7lIqDUiYEiu5Sl/+6ReP0BMk/2f4U/Rooccxkj0P5nm+acM5PrGJ/t5I8qPGiqZSE6hVAwZEdZIvP4w==", - "license": "MIT", - "dependencies": { - "@types/hast": "^2.0.0", - "comma-separated-tokens": "^1.0.0", - "hast-util-parse-selector": "^2.0.0", - "property-information": "^5.0.0", - "space-separated-tokens": "^1.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/refractor/node_modules/is-alphabetical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", - "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/is-alphanumerical": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", - "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", - "license": "MIT", - "dependencies": { - "is-alphabetical": "^1.0.0", - "is-decimal": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/is-decimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", - "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/refractor/node_modules/is-hexadecimal": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", - "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", - "license": "MIT", + "vfile": "^6.0.0" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/refractor/node_modules/parse-entities": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-2.0.0.tgz", - "integrity": "sha512-kkywGpCcRYhqQIchaWqZ875wzpS/bMKhz5HnN3p7wveJTkTtyAB/AlnS0f8DFSqYW1T82t6yEAkEcB+A1I3MbQ==", + "node_modules/recma-stringify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/recma-stringify/-/recma-stringify-1.0.0.tgz", + "integrity": "sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==", "license": "MIT", "dependencies": { - "character-entities": "^1.0.0", - "character-entities-legacy": "^1.0.0", - "character-reference-invalid": "^1.0.0", - "is-alphanumerical": "^1.0.0", - "is-decimal": "^1.0.0", - "is-hexadecimal": "^1.0.0" + "@types/estree": "^1.0.0", + "estree-util-to-js": "^2.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, - "node_modules/refractor/node_modules/prismjs": { - "version": "1.27.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", - "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/redux": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/redux/-/redux-5.0.1.tgz", + "integrity": "sha512-M9/ELqF6fy8FwmkpnF0S3YKOqMyoWJ4+CS5Efg2ct3oY9daQvd/Pc71FpGZsVsbl3Cpb+IIcjBDUnnyBdQbq4w==", + "license": "MIT" + }, + "node_modules/redux-immutable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/redux-immutable/-/redux-immutable-4.0.0.tgz", + "integrity": "sha512-SchSn/DWfGb3oAejd+1hhHx01xUoxY+V7TeK0BKqpkLKiQPVFf7DYzEaKmrEVxsWxielKfSK9/Xq66YyxgR1cg==", + "license": "BSD-3-Clause", + "peerDependencies": { + "immutable": "^3.8.1 || ^4.0.0-rc.1" } }, - "node_modules/refractor/node_modules/property-information": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-5.6.0.tgz", - "integrity": "sha512-YUHSPk+A30YPv+0Qf8i9Mbfe/C0hdPXk1s1jPVToV8pk8BQtpw10ct89Eo7OWkutrwqvT0eicAxlOg3dOAu8JA==", + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/refractor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/refractor/-/refractor-5.0.0.tgz", + "integrity": "sha512-QXOrHQF5jOpjjLfiNk5GFnWhRXvxjUVnlFxkeDmewR5sXkr3iM46Zo+CnRR8B+MDVqkULW4EcLVcRBNOPXHosw==", "license": "MIT", "dependencies": { - "xtend": "^4.0.0" + "@types/hast": "^3.0.0", + "@types/prismjs": "^1.0.0", + "hastscript": "^9.0.0", + "parse-entities": "^4.0.0" }, "funding": { "type": "github", "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/refractor/node_modules/space-separated-tokens": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", - "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", - "license": "MIT", - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/regenerate": { "version": "1.4.2", "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", @@ -17546,11 +18978,6 @@ "node": ">=4" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", - "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" - }, "node_modules/regexpu-core": { "version": "6.4.0", "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-6.4.0.tgz", @@ -17569,11 +18996,12 @@ } }, "node_modules/registry-auth-token": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.0.2.tgz", - "integrity": "sha512-o/3ikDxtXaA59BmZuZrJZDJv8NMDGSj+6j6XaeBmHw8eY1i1qd9+6H+LjVvQXx3HN6aRCGa1cUdJ9RaJZUugnQ==", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-5.1.1.tgz", + "integrity": "sha512-P7B4+jq8DeD2nMsAcdfaqHbssgHtZ7Z5+++a5ask90fvmJ8p5je4mOa+wzu+DB4vQ5tdJV/xywY+UnVFeQLV5Q==", + "license": "MIT", "dependencies": { - "@pnpm/npm-conf": "^2.1.0" + "@pnpm/npm-conf": "^3.0.2" }, "engines": { "node": ">=14" @@ -17583,6 +19011,7 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-6.0.1.tgz", "integrity": "sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==", + "license": "MIT", "dependencies": { "rc": "1.2.8" }, @@ -17600,9 +19029,9 @@ "license": "MIT" }, "node_modules/regjsparser": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.0.tgz", - "integrity": "sha512-NZQZdC5wOE/H3UT28fVGL+ikOZcEzfMGk/c3iN9UGxzWHMa1op7274oyiUVrAG4B2EuFhus8SvkaYnhvW92p9Q==", + "version": "0.13.2", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.13.2.tgz", + "integrity": "sha512-NgRBy2Nx/bE+9F27nVHnqcN5HjyLmecqsqx2PJHu3/IEtADD4WuxuXIVExD5PoSDFVrl78dOonfcOe5O+5nbzQ==", "license": "BSD-2-Clause", "dependencies": { "jsesc": "~3.1.0" @@ -17645,6 +19074,7 @@ "version": "0.2.7", "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "license": "MIT", "engines": { "node": ">= 0.10" } @@ -17716,9 +19146,9 @@ } }, "node_modules/remark-mdx": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.0.tgz", - "integrity": "sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/remark-mdx/-/remark-mdx-3.1.1.tgz", + "integrity": "sha512-Pjj2IYlUY3+D8x00UJsIOg5BEvfMyeI+2uLPn9VO9Wg4MEtN/VTIq2NEJQfde9PnX15KgtHyl9S0BcTnWrIuWg==", "license": "MIT", "dependencies": { "mdast-util-mdx": "^3.0.0", @@ -17746,9 +19176,9 @@ } }, "node_modules/remark-rehype": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", - "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.2.tgz", + "integrity": "sha512-Dh7l57ianaEoIpzbp0PC9UKAdCSVklD8E5Rpw7ETfbTl3FqcOOgq5q2LVDhgGCkaBv7p24JXikPdvhhmHvKMsw==", "license": "MIT", "dependencies": { "@types/hast": "^3.0.0", @@ -17781,6 +19211,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/remarkable/-/remarkable-2.0.1.tgz", "integrity": "sha512-YJyMcOH5lrR+kZdmB0aJJ4+93bEojRZ1HGDn9Eagu6ibg7aVZhc3OWbbShRid+Q5eAfsEqWxpe+g5W5nYNfNiA==", + "license": "MIT", "dependencies": { "argparse": "^1.0.10", "autolinker": "^3.11.0" @@ -17796,6 +19227,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } @@ -17804,6 +19236,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-3.0.0.tgz", "integrity": "sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==", + "license": "MIT", "dependencies": { "css-select": "^4.1.3", "dom-converter": "^0.2.0", @@ -17816,6 +19249,7 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "license": "BSD-2-Clause", "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.0.1", @@ -17831,6 +19265,7 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", @@ -17844,6 +19279,7 @@ "version": "4.3.1", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "license": "BSD-2-Clause", "dependencies": { "domelementtype": "^2.2.0" }, @@ -17858,6 +19294,7 @@ "version": "2.8.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "license": "BSD-2-Clause", "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", @@ -17871,6 +19308,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "license": "BSD-2-Clause", "funding": { "url": "https://github.com/fb55/entities?sponsor=1" } @@ -17886,6 +19324,7 @@ "url": "https://github.com/sponsors/fb55" } ], + "license": "MIT", "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", @@ -17897,6 +19336,7 @@ "version": "1.6.1", "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "license": "MIT", "engines": { "node": ">=0.10" } @@ -17905,6 +19345,7 @@ "version": "2.0.2", "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -17920,20 +19361,34 @@ "node_modules/requires-port": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "license": "MIT" }, "node_modules/reselect": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.1.1.tgz", - "integrity": "sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/reselect/-/reselect-5.2.0.tgz", + "integrity": "sha512-AgZ3UOZm3YndfrJ4OYjgrT7bmCm/1iqkjvEfH/oYjzh6PD2qw4QuT3jjnXIrpdt4MTpMXclMT3lXbmRY+XRakw==", "license": "MIT" }, + "node_modules/reserved-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/reserved-identifiers/-/reserved-identifiers-1.2.0.tgz", + "integrity": "sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/resolve": { - "version": "1.22.11", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.11.tgz", - "integrity": "sha512-RfqAvLnMl313r7c9oclB1HhUEAezcpLjz95wFH4LVuhk9JF/r22qmVP9AMmOU4vMX7Q8pN8jwNg/CSpdFnMjTQ==", + "version": "1.22.12", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.12.tgz", + "integrity": "sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA==", "license": "MIT", "dependencies": { + "es-errors": "^1.3.0", "is-core-module": "^2.16.1", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" @@ -17951,7 +19406,8 @@ "node_modules/resolve-alpn": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", - "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" }, "node_modules/resolve-from": { "version": "4.0.0", @@ -17965,12 +19421,14 @@ "node_modules/resolve-pathname": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/resolve-pathname/-/resolve-pathname-3.0.0.tgz", - "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==" + "integrity": "sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==", + "license": "MIT" }, "node_modules/responselike": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/responselike/-/responselike-3.0.0.tgz", "integrity": "sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==", + "license": "MIT", "dependencies": { "lowercase-keys": "^3.0.0" }, @@ -18010,9 +19468,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": { @@ -18103,17 +19561,19 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" }, "node_modules/sax": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", - "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.1.tgz", + "integrity": "sha512-42tBVwLWnaQvW5zc4HbZrTuWccECCZfBi92FDuwtqxasH+JbPB3/FOKb1m222K42R4WxuxzzMsTswfzgtSu64Q==", "license": "BlueOak-1.0.0", "engines": { "node": ">=11.0.0" @@ -18123,6 +19583,7 @@ "version": "0.23.2", "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", "dependencies": { "loose-envify": "^1.1.0" } @@ -18134,9 +19595,9 @@ "license": "Apache-2.0" }, "node_modules/schema-utils": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.0.tgz", - "integrity": "sha512-Gf9qqc58SpCA/xdziiHz35F4GNIWYWZrEshUc/G/r5BnLph6xpKuLeoJoQuj5WfBIx/eQLf+hmVPYHaxJu7V2g==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "license": "MIT", "dependencies": { "@types/json-schema": "^7.0.9", @@ -18179,22 +19640,23 @@ "license": "MIT" }, "node_modules/selfsigned": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.4.1.tgz", - "integrity": "sha512-th5B4L2U+eGLq1TVh7zNRGBapioSORUeymIydxgFpwww9d2qyKvtuPU2jJuHvYAwwqi2Y596QBL3eEqcPEYL8Q==", + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-5.5.0.tgz", + "integrity": "sha512-ftnu3TW4+3eBfLRFnDEkzGxSF/10BJBkaLJuBHZX0kiPS7bRdlpZGu6YGt4KngMkdTwJE6MbjavFpqHvqVt+Ew==", "license": "MIT", "dependencies": { - "@types/node-forge": "^1.3.0", - "node-forge": "^1" + "@peculiar/x509": "^1.14.2", + "pkijs": "^3.3.3" }, "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.8.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.8.5.tgz", + "integrity": "sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==", + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -18206,6 +19668,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-4.0.0.tgz", "integrity": "sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==", + "license": "MIT", "dependencies": { "semver": "^7.3.5" }, @@ -18217,24 +19680,24 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -18255,15 +19718,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/send/node_modules/range-parser": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", @@ -18304,25 +19758,47 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", + "license": "BSD-3-Clause", "dependencies": { "randombytes": "^2.1.0" } }, "node_modules/serve-handler": { - "version": "6.1.6", - "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.6.tgz", - "integrity": "sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==", + "version": "6.1.7", + "resolved": "https://registry.npmjs.org/serve-handler/-/serve-handler-6.1.7.tgz", + "integrity": "sha512-CinAq1xWb0vR3twAv9evEU8cNWkXCb9kd5ePAHUKJBkOsUpR1wt/CvGdeca7vqumL1U5cSaeVQ6zZMxiJ3yWsg==", "license": "MIT", "dependencies": { "bytes": "3.0.0", "content-disposition": "0.5.2", "mime-types": "2.1.18", - "minimatch": "3.1.2", + "minimatch": "3.1.5", "path-is-inside": "1.0.2", "path-to-regexp": "3.3.0", "range-parser": "1.2.0" } }, + "node_modules/serve-handler/node_modules/mime-db": { + "version": "1.33.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", + "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-handler/node_modules/mime-types": { + "version": "2.1.18", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", + "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", + "license": "MIT", + "dependencies": { + "mime-db": "~1.33.0" + }, + "engines": { + "node": ">= 0.6" + } + }, "node_modules/serve-handler/node_modules/path-to-regexp": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-3.3.0.tgz", @@ -18330,21 +19806,25 @@ "license": "MIT" }, "node_modules/serve-index": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", - "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.2.tgz", + "integrity": "sha512-KDj11HScOaLmrPxl70KYNW1PksP4Nb/CLL2yvC+Qd2kHMPEEpfc4Re2e4FOay+bC/+XQl/7zAcWON3JVo5v3KQ==", "license": "MIT", "dependencies": { - "accepts": "~1.3.4", + "accepts": "~1.3.8", "batch": "0.6.1", "debug": "2.6.9", "escape-html": "~1.0.3", - "http-errors": "~1.6.2", - "mime-types": "~2.1.17", - "parseurl": "~1.3.2" + "http-errors": "~1.8.0", + "mime-types": "~2.1.35", + "parseurl": "~1.3.3" }, "engines": { "node": ">= 0.8.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/serve-index/node_modules/debug": { @@ -18366,38 +19846,27 @@ } }, "node_modules/serve-index/node_modules/http-errors": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", - "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz", + "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==", "license": "MIT", "dependencies": { "depd": "~1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.0", - "statuses": ">= 1.4.0 < 2" + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.1" }, "engines": { "node": ">= 0.6" } }, - "node_modules/serve-index/node_modules/inherits": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/serve-index/node_modules/setprototypeof": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", - "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", - "license": "ISC" - }, "node_modules/serve-index/node_modules/statuses": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", @@ -18408,15 +19877,15 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -18480,7 +19949,8 @@ "node_modules/shallowequal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz", - "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==" + "integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==", + "license": "MIT" }, "node_modules/shebang-command": { "version": "2.0.0", @@ -18504,9 +19974,9 @@ } }, "node_modules/shell-quote": { - "version": "1.8.3", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", - "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.10.0.tgz", + "integrity": "sha512-w1aiOKwKuRgtwAReIIj89puqg+I7GvX4IbLrvmhXbzQsj1+Zwi4VO3+fa6ZF91TWSjIxoEkKnMeHcLEODK5ZXA==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -18526,14 +19996,14 @@ } }, "node_modules/side-channel": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", - "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.1.tgz", + "integrity": "sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3", - "side-channel-list": "^1.0.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", "side-channel-map": "^1.0.1", "side-channel-weakmap": "^1.0.2" }, @@ -18545,13 +20015,13 @@ } }, "node_modules/side-channel-list": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", - "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.1.tgz", + "integrity": "sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==", "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "object-inspect": "^1.13.3" + "object-inspect": "^1.13.4" }, "engines": { "node": ">= 0.4" @@ -18600,12 +20070,14 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" }, "node_modules/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "license": "MIT", "dependencies": { "@polka/url": "^1.0.0-next.24", "mrmime": "^2.0.0", @@ -18688,6 +20160,16 @@ "websocket-driver": "^0.7.4" } }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "deprecated": "uuid@10 and below is no longer supported. For ESM codebases, update to uuid@latest. For CommonJS codebases, use uuid@11 (but be aware this version will likely be deprecated in 2028).", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/sort-css-media-queries": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/sort-css-media-queries/-/sort-css-media-queries-2.2.0.tgz", @@ -18698,12 +20180,12 @@ } }, "node_modules/source-map": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", - "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/source-map-js": { @@ -18719,6 +20201,7 @@ "version": "0.5.21", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -18728,6 +20211,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -18775,7 +20259,8 @@ "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" }, "node_modules/srcset": { "version": "4.0.0", @@ -18790,9 +20275,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -18817,6 +20302,7 @@ "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", @@ -18830,9 +20316,10 @@ } }, "node_modules/string-width/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "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" }, @@ -18841,11 +20328,12 @@ } }, "node_modules/string-width/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "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" @@ -18886,6 +20374,7 @@ "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" }, @@ -18923,22 +20412,28 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/style-mod": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.3.tgz", + "integrity": "sha512-i/n8VsZydrugj3Iuzll8+x/00GH2vnYsk1eomD8QiRrSAeW6ItbCQDtfXCeJHd0iwiNagqjQkvpvREEPtW3IoQ==", + "license": "MIT" + }, "node_modules/style-to-js": { - "version": "1.1.16", - "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.16.tgz", - "integrity": "sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==", + "version": "1.1.21", + "resolved": "https://registry.npmjs.org/style-to-js/-/style-to-js-1.1.21.tgz", + "integrity": "sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==", "license": "MIT", "dependencies": { - "style-to-object": "1.0.8" + "style-to-object": "1.0.14" } }, "node_modules/style-to-object": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", - "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "version": "1.0.14", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.14.tgz", + "integrity": "sha512-LIN7rULI0jBscWQYaSswptyderlarFkjQ+t79nzty8tcIAceVomEVlLzH5VP4Cmsv6MtKhs7qaAiwlcp+Mgaxw==", "license": "MIT", "dependencies": { - "inline-style-parser": "0.2.4" + "inline-style-parser": "0.2.7" } }, "node_modules/stylehacks": { @@ -18958,15 +20453,33 @@ } }, "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.2.0", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.2.0.tgz", + "integrity": "sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw==", "license": "MIT" }, + "node_modules/super-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-1.1.0.tgz", + "integrity": "sha512-WHkws2ZflZe41zj6AolvvmaTrWds/VuyeYr9iPVv/oQeaIoVxMKaushfFWpOGDT+GuBrM/sVqF8KUCYQlSSTdQ==", + "license": "MIT", + "dependencies": { + "function-timeout": "^1.0.1", + "make-asynchronous": "^1.0.1", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -18993,9 +20506,9 @@ "license": "MIT" }, "node_modules/svgo": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.3.tgz", - "integrity": "sha512-+wn7I4p7YgJhHs38k2TNjy1vCfPIfLIJWR5MnCStsN8WuuTcBnRKcMHQLMM2ijxGZmDoZwNv8ipl5aTTen62ng==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.4.tgz", + "integrity": "sha512-GsNRis4e8jxn2Y9ENz/8lbJ93CstG8svtMnuRaHbiF2LTJ5tK0/q3t/URPq9Zc7zVWBJnNnJMIp6bevK7bSmNg==", "license": "MIT", "dependencies": { "commander": "^7.2.0", @@ -19027,35 +20540,61 @@ } }, "node_modules/swagger-client": { - "version": "3.35.7", - "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.35.7.tgz", - "integrity": "sha512-AAVk7lBFIw41wI0tsqyh/l4dwJ0/eslHL2Ex4hmsGtuKcD6/wXunetO8AsmE5MptK4YgRvpmUDvKnF1TaGzdiQ==", + "version": "3.37.7", + "resolved": "https://registry.npmjs.org/swagger-client/-/swagger-client-3.37.7.tgz", + "integrity": "sha512-AzmF/FDSPYBcoxXarHPnqK3lSXoKH9Fh0EjLHAlP0h/D7EG1Fofl/wEuGqhYT+IBpriu3mSgWCh2xAftsYdL8w==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.22.15", "@scarf/scarf": "=1.4.0", - "@swagger-api/apidom-core": ">=1.0.0-beta.50 <1.0.0-rc.0", - "@swagger-api/apidom-error": ">=1.0.0-beta.50 <1.0.0-rc.0", - "@swagger-api/apidom-json-pointer": ">=1.0.0-beta.50 <1.0.0-rc.0", - "@swagger-api/apidom-ns-openapi-3-1": ">=1.0.0-beta.50 <1.0.0-rc.0", - "@swagger-api/apidom-reference": ">=1.0.0-beta.50 <1.0.0-rc.0", + "@swagger-api/apidom-core": "^1.11.0", + "@swagger-api/apidom-error": "^1.11.0", + "@swagger-api/apidom-json-pointer": "^1.11.0", + "@swagger-api/apidom-ns-openapi-3-1": "^1.11.0", + "@swagger-api/apidom-ns-openapi-3-2": "^1.11.0", + "@swagger-api/apidom-reference": "^1.11.0", "@swaggerexpert/cookie": "^2.0.2", "deepmerge": "~4.3.0", "fast-json-patch": "^3.0.0-1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.2.0", "neotraverse": "=0.6.18", "node-abort-controller": "^3.1.1", - "node-fetch-commonjs": "^3.3.2", "openapi-path-templating": "^2.2.1", "openapi-server-url-templating": "^1.3.0", "ramda": "^0.30.1", "ramda-adjunct": "^5.1.0" + }, + "engines": { + "node": ">=22" + }, + "optionalDependencies": { + "@swagger-api/apidom-ns-asyncapi-2": "^1.11.3", + "@swagger-api/apidom-ns-asyncapi-3": "^1.11.3", + "@swagger-api/apidom-ns-openapi-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-api-design-systems-json": "^1.11.3", + "@swagger-api/apidom-parser-adapter-api-design-systems-yaml": "^1.11.3", + "@swagger-api/apidom-parser-adapter-arazzo-json-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-arazzo-yaml-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-json-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-json-3": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-asyncapi-yaml-3": "^1.11.3", + "@swagger-api/apidom-parser-adapter-json": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-3-0": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-3-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-json-3-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-0": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-1": "^1.11.3", + "@swagger-api/apidom-parser-adapter-openapi-yaml-3-2": "^1.11.3", + "@swagger-api/apidom-parser-adapter-yaml-1-2": "^1.11.3" } }, "node_modules/swagger-ui-react": { - "version": "5.29.2", - "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.29.2.tgz", - "integrity": "sha512-Bn7wuGs87PDNxLVUKtKmMuYR3G2hlqLW1fpdl3j5xiePKV8uvuQNzXgacX4+H1rQ8qsWrKap/lk5OC4h62VMBg==", + "version": "5.32.11", + "resolved": "https://registry.npmjs.org/swagger-ui-react/-/swagger-ui-react-5.32.11.tgz", + "integrity": "sha512-84WYsBEs6vIpWXtqxq7kIrJRs2+YeZPQFULPJ/afjuHKw+rKWvwyA1uQsUC2VWq3oA9XIig3pjlMVE5xXaCDyA==", "license": "Apache-2.0", "dependencies": { "@babel/runtime-corejs3": "^7.27.1", @@ -19065,29 +20604,29 @@ "classnames": "^2.5.1", "css.escape": "1.5.1", "deep-extend": "0.6.0", - "dompurify": "=3.2.6", + "dompurify": "^3.4.12", "ieee754": "^1.2.1", - "immutable": "^3.x.x", + "immutable": "^4.3.9", "js-file-download": "^0.4.12", - "js-yaml": "=4.1.0", - "lodash": "^4.17.21", + "js-yaml": "=4.3.0", + "lodash": "^4.18.1", "prop-types": "^15.8.1", "randexp": "^0.5.3", "randombytes": "^2.1.0", - "react-copy-to-clipboard": "5.1.0", + "react-copy-to-clipboard": "5.1.1", "react-debounce-input": "=3.3.0", "react-immutable-proptypes": "2.2.0", "react-immutable-pure-component": "^2.2.0", "react-inspector": "^6.0.1", "react-redux": "^9.2.0", - "react-syntax-highlighter": "^15.6.1", + "react-syntax-highlighter": "^16.0.0", "redux": "^5.0.1", "redux-immutable": "^4.0.0", "remarkable": "^2.0.1", "reselect": "^5.1.1", "serialize-error": "^8.1.0", "sha.js": "^2.4.12", - "swagger-client": "^3.35.7", + "swagger-client": "^3.37.7", "url-parse": "^1.5.10", "xml": "=1.0.1", "xml-but-prettier": "^1.0.1", @@ -19099,20 +20638,26 @@ } }, "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.3.tgz", + "integrity": "sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==", + "license": "MIT", "engines": { "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/terser": { - "version": "5.31.6", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.31.6.tgz", - "integrity": "sha512-PQ4DAriWzKj+qgehQ7LK5bQqCFNMmlhjR2PFFLuqGCpuCAauxemVBWwWOxo3UIwWQx8+Pr61Df++r76wDmkQBg==", + "version": "5.49.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.49.0.tgz", + "integrity": "sha512-SNiDnXyHSrxVcIOtVbULzcTmniUiwcV7Nwdyj1twVubeTmbjoa8p69KKDpfkdoOavuM4/GRm1+ykI8qqnavHoA==", + "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -19124,15 +20669,14 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.12", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.12.tgz", - "integrity": "sha512-jDLYqo7oF8tJIttjXO6jBY5Hk8p3A8W4ttih7cCEq64fQFWmgJ4VqAQjKr7WwIDlmXKEc6QeoRb5ecjZ+2afcg==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.6.1.tgz", + "integrity": "sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==", "license": "MIT", "dependencies": { "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", "schema-utils": "^4.3.0", - "serialize-javascript": "^6.0.2", "terser": "^5.31.1" }, "engines": { @@ -19146,12 +20690,39 @@ "webpack": "^5.1.0" }, "peerDependenciesMeta": { + "@minify-html/node": { + "optional": true + }, "@swc/core": { "optional": true }, + "@swc/css": { + "optional": true + }, + "@swc/html": { + "optional": true + }, + "clean-css": { + "optional": true + }, + "cssnano": { + "optional": true + }, + "csso": { + "optional": true + }, "esbuild": { "optional": true }, + "html-minifier-terser": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "postcss": { + "optional": true + }, "uglify-js": { "optional": true } @@ -19161,6 +20732,7 @@ "version": "27.5.1", "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "license": "MIT", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -19174,6 +20746,7 @@ "version": "8.1.1", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -19187,12 +20760,13 @@ "node_modules/terser/node_modules/commander": { "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" }, "node_modules/thingies": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.5.0.tgz", - "integrity": "sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/thingies/-/thingies-2.6.1.tgz", + "integrity": "sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==", "license": "MIT", "engines": { "node": ">=10.18" @@ -19211,21 +20785,41 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", "license": "MIT" }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "license": "MIT", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", - "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "license": "MIT" }, "node_modules/tiny-warning": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==" + "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", + "license": "MIT" }, "node_modules/tinyexec": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz", - "integrity": "sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw==", - "license": "MIT" + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.2.4.tgz", + "integrity": "sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==", + "license": "MIT", + "engines": { + "node": ">=18" + } }, "node_modules/tinypool": { "version": "1.1.1", @@ -19287,6 +20881,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "license": "MIT", "engines": { "node": ">=6" } @@ -19360,9 +20955,10 @@ } }, "node_modules/ts-dedent": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", - "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.3.0.tgz", + "integrity": "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg==", + "license": "MIT", "engines": { "node": ">=6.10" } @@ -19380,14 +20976,34 @@ "license": "Apache-2.0" }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==" + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" }, "node_modules/type-fest": { "version": "2.19.0", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=12.20" }, @@ -19408,27 +21024,6 @@ "node": ">= 0.6" } }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", @@ -19447,6 +21042,7 @@ "version": "3.1.5", "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "license": "MIT", "dependencies": { "is-typedarray": "^1.0.0" } @@ -19465,6 +21061,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19473,16 +21070,11 @@ "node": ">=14.17" } }, - "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==", - "license": "MIT" - }, "node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==" + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-8.3.0.tgz", + "integrity": "sha512-j375ScV60dom+YkPFIfTLcOiPxkN/buHz5GobjLhixFuANaNs3C9l4GmrWqejgXWJ7BbJcFYpTEUkS1Ge8bpZQ==", + "license": "MIT" }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "2.0.1", @@ -19556,6 +21148,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "license": "MIT", "dependencies": { "crypto-random-string": "^4.0.0" }, @@ -19567,9 +21160,9 @@ } }, "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.1.tgz", + "integrity": "sha512-LsiILbtBETkDz8I9p1dQ0uyRUWuaQzd/cuEeS1hoRSyW5E5XGmTzlwY1OrNzzakGowI9Dr/I8HVaw4hTtnxy8g==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0" @@ -19619,9 +21212,9 @@ } }, "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.1.0.tgz", + "integrity": "sha512-m+vIdyeCOpdr/QeQCu2EzxX/ohgS8KbnPDgFni4dQsfSCtpz8UqDyY5GjRru8PDKuYn7Fq19j1CQ+nJSsGKOzg==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -19634,9 +21227,9 @@ } }, "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.2.tgz", + "integrity": "sha512-goh1s1TBrqSqukSc8wrjwWhL0hiJxgA8m4kFxGlQ+8FYQ3C/m11FcTs4YYem7V664AhHVvgoQLk890Ssdsr2IQ==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -19651,6 +21244,7 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "license": "MIT", "engines": { "node": ">= 10.0.0" } @@ -19704,6 +21298,7 @@ "version": "6.0.2", "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-6.0.2.tgz", "integrity": "sha512-EDxhTEVPZZRLWYcJ4ZXjGFN0oP7qYvbXWzEgRm/Yql4dHX5wDbvh89YHP6PK1lzZJYrMtXUuZZz8XGK+U6U1og==", + "license": "BSD-2-Clause", "dependencies": { "boxen": "^7.0.0", "chalk": "^5.0.1", @@ -19731,6 +21326,7 @@ "version": "7.1.1", "resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz", "integrity": "sha512-2hCgjEmP8YLWQ130n2FerGv7rYpfBmnmp9Uy2Le1vge6X3gZIfSmEzP5QTDElFxcvVcXlEn8Aq6MU/PZygIOog==", + "license": "MIT", "dependencies": { "ansi-align": "^3.0.1", "camelcase": "^7.0.1", @@ -19752,6 +21348,7 @@ "version": "7.0.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-7.0.1.tgz", "integrity": "sha512-xlx1yCK2Oc1APsPXDL2LdlNP6+uu8OCDdhOBSVT279M/S+y75O30C2VuD8T2ogdePBBl7PfPF4504tnLgX3zfw==", + "license": "MIT", "engines": { "node": ">=14.16" }, @@ -19760,9 +21357,10 @@ } }, "node_modules/update-notifier/node_modules/chalk": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", - "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", "engines": { "node": "^12.17.0 || ^14.13 || >=16.0.0" }, @@ -19807,9 +21405,9 @@ } }, "node_modules/url-loader/node_modules/ajv": { - "version": "6.14.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.14.0.tgz", - "integrity": "sha512-IWrosm/yrn43eiKqkfkHis7QioDleaXQHdDVPKg0FSwwd/DuvyX79TZnFOnYpB7dcsFAMmtFztZuXPDvSePkFw==", + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.15.0.tgz", + "integrity": "sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==", "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", @@ -19837,27 +21435,6 @@ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", "license": "MIT" }, - "node_modules/url-loader/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/url-loader/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/url-loader/node_modules/schema-utils": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.3.0.tgz", @@ -19880,6 +21457,7 @@ "version": "1.5.10", "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "license": "MIT", "dependencies": { "querystringify": "^2.1.1", "requires-port": "^1.0.0" @@ -19903,7 +21481,8 @@ "node_modules/utila": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/utila/-/utila-0.4.0.tgz", - "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==" + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "license": "MIT" }, "node_modules/utility-types": { "version": "3.11.0", @@ -19924,18 +21503,23 @@ } }, "node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-14.0.1.tgz", + "integrity": "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", "bin": { - "uuid": "dist/bin/uuid" + "uuid": "dist-node/bin/uuid" } }, "node_modules/value-equal": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/value-equal/-/value-equal-1.0.1.tgz", - "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==" + "integrity": "sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==", + "license": "MIT" }, "node_modules/vary": { "version": "1.1.2", @@ -19975,9 +21559,9 @@ } }, "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.3.tgz", + "integrity": "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw==", "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -19988,61 +21572,27 @@ "url": "https://opencollective.com/unified" } }, - "node_modules/vscode-jsonrpc": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", - "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/vscode-languageserver": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", - "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", - "license": "MIT", - "dependencies": { - "vscode-languageserver-protocol": "3.17.5" - }, - "bin": { - "installServerIntoExtension": "bin/installServerIntoExtension" - } + "node_modules/w3c-keyname": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", + "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", + "license": "MIT" }, - "node_modules/vscode-languageserver-protocol": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", - "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "node_modules/warning": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", + "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", "license": "MIT", "dependencies": { - "vscode-jsonrpc": "8.2.0", - "vscode-languageserver-types": "3.17.5" + "loose-envify": "^1.0.0" } }, - "node_modules/vscode-languageserver-textdocument": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", - "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", - "license": "MIT" - }, - "node_modules/vscode-languageserver-types": { - "version": "3.17.5", - "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", - "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", - "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==", - "license": "MIT" - }, "node_modules/watchpack": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.2.tgz", - "integrity": "sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==", + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.5.2.tgz", + "integrity": "sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==", + "license": "MIT", "dependencies": { - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.1.2" }, "engines": { @@ -20068,15 +21618,6 @@ "url": "https://github.com/sponsors/wooorm" } }, - "node_modules/web-streams-polyfill": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/web-streams-polyfill/-/web-streams-polyfill-3.3.3.tgz", - "integrity": "sha512-d2JWLCivmZYTSIoge9MsgFCZrt571BikcWGYkjC1khllbTeDlGqZ2D8vD8E/lJa8WGWbb7Plm8/XJYV7IJHZZw==", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, "node_modules/web-tree-sitter": { "version": "0.24.5", "resolved": "https://registry.npmjs.org/web-tree-sitter/-/web-tree-sitter-0.24.5.tgz", @@ -20084,35 +21625,38 @@ "license": "MIT", "optional": true }, + "node_modules/web-worker": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/web-worker/-/web-worker-1.5.0.tgz", + "integrity": "sha512-RiMReJrTAiA+mBjGONMnjVDP2u3p9R1vkcGz6gDIrOMT3oGuYwX2WRMYI9ipkphSuE5XKEhydbhNEJh4NY9mlw==", + "license": "Apache-2.0" + }, "node_modules/webpack": { - "version": "5.98.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.98.0.tgz", - "integrity": "sha512-UFynvx+gM44Gv9qFgj0acCQK2VE1CtdfwFdimkapco3hlPCJ/zeq73n2yVKimVbtm+TnApIugGhLJnkU6gjYXA==", + "version": "5.109.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.109.1.tgz", + "integrity": "sha512-Q4XQscWSLNQSaMFsIWUZ+IVpvwLqD+MvjIuSQC1hG8m1ZMK78VAsNMhTjD3icJelypp6aM5Hq8BZNEX3sc1PJw==", "license": "MIT", "dependencies": { - "@types/eslint-scope": "^3.7.7", - "@types/estree": "^1.0.6", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", "@webassemblyjs/ast": "^1.14.1", "@webassemblyjs/wasm-edit": "^1.14.1", "@webassemblyjs/wasm-parser": "^1.14.1", - "acorn": "^8.14.0", - "browserslist": "^4.24.0", + "acorn": "^8.16.0", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.24.2", + "es-module-lexer": "^2.1.0", "eslint-scope": "5.1.1", "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", + "mime-db": "^1.54.0", + "minimizer-webpack-plugin": "^5.6.1", "neo-async": "^2.6.2", - "schema-utils": "^4.3.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.11", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "watchpack": "^2.5.2", + "webpack-sources": "^3.5.1" }, "bin": { "webpack": "bin/webpack.js" @@ -20134,6 +21678,7 @@ "version": "4.10.2", "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-4.10.2.tgz", "integrity": "sha512-vJptkMm9pk5si4Bv922ZbKLV8UTT4zib4FPgXMhgzUny0bfDDkLXAVQs3ly3fS4/TN9ROFtb0NFrm04UXFE/Vw==", + "license": "MIT", "dependencies": { "@discoveryjs/json-ext": "0.5.7", "acorn": "^8.0.4", @@ -20159,6 +21704,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", "engines": { "node": ">= 10" } @@ -20202,35 +21748,43 @@ } }, "node_modules/webpack-dev-middleware/node_modules/mime-types": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.1.tgz", - "integrity": "sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", "license": "MIT", "dependencies": { "mime-db": "^1.54.0" }, "engines": { - "node": ">= 0.6" + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-middleware/node_modules/range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.3.0.tgz", + "integrity": "sha512-hek2mFQpPuI4E1BBKrSto+BU3e3x4xuarsbiwr3+lf7p44juvFMV0XFWQAP3xUyqXA4RrXLIoaSUGbSt056ZMw==", "license": "MIT", "engines": { "node": ">= 0.6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/webpack-dev-server": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.2.tgz", - "integrity": "sha512-QcQ72gh8a+7JO63TAx/6XZf/CWhgMzu5m0QirvPfGvptOusAxG12w2+aua1Jkjr7hzaWDnJ2n6JFeexMHI+Zjg==", + "version": "5.2.6", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-5.2.6.tgz", + "integrity": "sha512-HNLRmamRvVavZQ+avceZifmv8hmdUjg43t6MI4SqJDwFdW7RPQwH5vzGhDRZSX59SgfbeHhLnq3g+uooWo7pVw==", "license": "MIT", "dependencies": { "@types/bonjour": "^3.5.13", "@types/connect-history-api-fallback": "^1.5.4", - "@types/express": "^4.17.21", + "@types/express": "^4.17.25", "@types/express-serve-static-core": "^4.17.21", "@types/serve-index": "^1.9.4", "@types/serve-static": "^1.15.5", @@ -20240,17 +21794,17 @@ "bonjour-service": "^1.2.1", "chokidar": "^3.6.0", "colorette": "^2.0.10", - "compression": "^1.7.4", + "compression": "^1.8.1", "connect-history-api-fallback": "^2.0.0", - "express": "^4.21.2", + "express": "^4.22.1", "graceful-fs": "^4.2.6", "http-proxy-middleware": "^2.0.9", "ipaddr.js": "^2.1.0", - "launch-editor": "^2.6.1", + "launch-editor": "^2.14.1", "open": "^10.0.3", "p-retry": "^6.2.0", "schema-utils": "^4.2.0", - "selfsigned": "^2.4.1", + "selfsigned": "^5.5.0", "serve-index": "^1.9.1", "sockjs": "^0.3.24", "spdy": "^4.0.2", @@ -20310,9 +21864,9 @@ } }, "node_modules/webpack-dev-server/node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", + "version": "8.21.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.21.1.tgz", + "integrity": "sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -20345,108 +21899,54 @@ } }, "node_modules/webpack-sources": { - "version": "3.2.3", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", - "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.5.1.tgz", + "integrity": "sha512-jyuiGJdtvY434z5bUZrjz67v76/ePNvFZTp9Mdz29IlH4+GPsgyGjiv0fKI+M7BdkU6ADjulUcKAd3tUK3WlEw==", + "license": "MIT", "engines": { "node": ">=10.13.0" } }, "node_modules/webpack/node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/webpack/node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", - "dependencies": { - "mime-db": "1.52.0" - }, + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/webpackbar": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-6.0.1.tgz", - "integrity": "sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webpackbar/-/webpackbar-7.0.0.tgz", + "integrity": "sha512-aS9soqSO2iCHgqHoCrj4LbfGQUboDCYJPSFOAchEK+9psIjNrfSWW4Y0YEz67MKURNvMmfo0ycOg9d/+OOf9/Q==", "license": "MIT", "dependencies": { - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", + "ansis": "^3.2.0", "consola": "^3.2.3", - "figures": "^3.2.0", - "markdown-table": "^2.0.0", "pretty-time": "^1.1.0", - "std-env": "^3.7.0", - "wrap-ansi": "^7.0.0" + "std-env": "^3.7.0" }, "engines": { "node": ">=14.21.3" }, "peerDependencies": { + "@rspack/core": "*", "webpack": "3 || 4 || 5" - } - }, - "node_modules/webpackbar/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "license": "MIT" - }, - "node_modules/webpackbar/node_modules/markdown-table": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-2.0.0.tgz", - "integrity": "sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==", - "license": "MIT", - "dependencies": { - "repeat-string": "^1.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/webpackbar/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/webpackbar/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" + "peerDependenciesMeta": { + "@rspack/core": { + "optional": true + }, + "webpack": { + "optional": true + } } }, "node_modules/websocket-driver": { - "version": "0.7.4", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", - "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.5.tgz", + "integrity": "sha512-ZL2+3c7kMBdIRCMz6l8jQMHyGVxj+UL+xVk74Ombiciboca8rHa15L86B19E5oh1pL9Ii/uj54gtsIrZGMo6zA==", "license": "Apache-2.0", "dependencies": { "http-parser-js": ">=0.5.1", @@ -20482,13 +21982,13 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.19", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", - "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "version": "1.1.22", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.22.tgz", + "integrity": "sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==", "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.8", + "call-bind": "^1.0.9", "call-bound": "^1.0.4", "for-each": "^0.3.5", "get-proto": "^1.0.1", @@ -20506,6 +22006,7 @@ "version": "4.0.1", "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-4.0.1.tgz", "integrity": "sha512-o0cyEG0e8GPzT4iGHphIOh0cJOV8fivsXxddQasHPHfoZf1ZexrfeA21w2NaEN1RHE+fXlfISmOE8R9N3u3Qig==", + "license": "MIT", "dependencies": { "string-width": "^5.0.1" }, @@ -20526,6 +22027,7 @@ "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", @@ -20539,9 +22041,10 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", - "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "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" }, @@ -20550,9 +22053,10 @@ } }, "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", - "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "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" }, @@ -20561,11 +22065,12 @@ } }, "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", - "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "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" @@ -20578,6 +22083,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "is-typedarray": "^1.0.0", @@ -20586,9 +22092,10 @@ } }, "node_modules/ws": { - "version": "7.5.10", - "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", - "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "version": "7.5.13", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.13.tgz", + "integrity": "sha512-rsKI6xDBFVf4r/x8XyChGK04QR/XHroxs/jUcoWvtEZM8TPU/X/uIY9B1CsSzYws9ZJb/6bbBu7dPhFW00CAoA==", + "license": "MIT", "engines": { "node": ">=8.3.0" }, @@ -20621,9 +22128,9 @@ } }, "node_modules/wsl-utils/node_modules/is-wsl": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.0.tgz", - "integrity": "sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-3.1.1.tgz", + "integrity": "sha512-e6rvdUCiQCAuumZslxRJWR/Doq4VpPR82kqclvcS0efgt430SlGIk05vdCN58+VrzgtIcfNODjozVielycD4Sw==", "license": "MIT", "dependencies": { "is-inside-container": "^1.0.0" @@ -20639,6 +22146,7 @@ "version": "5.1.0", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-5.1.0.tgz", "integrity": "sha512-GCPAHLvrIH13+c0SuacwvRYj2SxJXQ4kaVTT5xgL3kPrz56XxkF21IGhjSE1+W0aw7gpBWRGXLCPnPby6lSpmQ==", + "license": "MIT", "engines": { "node": ">=12" }, @@ -20656,6 +22164,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/xml-but-prettier/-/xml-but-prettier-1.0.1.tgz", "integrity": "sha512-C2CJaadHrZTqESlH03WOyw0oZTtoy2uEg6dSDF6YRg+9GnYNub53RRemLpnvtbHDFelxMx4LajiFsYeR6XJHgQ==", + "license": "MIT", "dependencies": { "repeat-string": "^1.5.2" } @@ -20672,21 +22181,21 @@ "xml-js": "bin/cli.js" } }, - "node_modules/xtend": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", - "license": "MIT", - "engines": { - "node": ">=0.4" - } - }, "node_modules/yallist": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "license": "ISC" }, + "node_modules/yaml": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.3.tgz", + "integrity": "sha512-vIYeF1u3CjlhAFekPPAk2h/Kv4T3mAkMox5OymRiJQB0spDP10LHvt+K7G9Ny6NuuMAb25/6n1qyUjAcGNf/AA==", + "license": "ISC", + "engines": { + "node": ">= 6" + } + }, "node_modules/yocto-queue": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.2.2.tgz", @@ -20702,7 +22211,45 @@ "node_modules/zenscroll": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/zenscroll/-/zenscroll-4.0.2.tgz", - "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==" + "integrity": "sha512-jEA1znR7b4C/NnaycInCU6h/d15ZzCd1jmsruqOKnZP6WXQSMH3W2GL+OXbkruslU4h+Tzuos0HdswzRUk/Vgg==", + "license": "Unlicense" + }, + "node_modules/zod": { + "version": "3.25.76", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.25.76.tgz", + "integrity": "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zustand": { + "version": "4.5.7", + "resolved": "https://registry.npmjs.org/zustand/-/zustand-4.5.7.tgz", + "integrity": "sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==", + "license": "MIT", + "dependencies": { + "use-sync-external-store": "^1.2.2" + }, + "engines": { + "node": ">=12.7.0" + }, + "peerDependencies": { + "@types/react": ">=16.8", + "immer": ">=9.0.6", + "react": ">=16.8" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "immer": { + "optional": true + }, + "react": { + "optional": true + } + } }, "node_modules/zwitch": { "version": "2.0.4", diff --git a/website/package.json b/website/package.json index d428596a..d5caeae8 100644 --- a/website/package.json +++ b/website/package.json @@ -1,5 +1,5 @@ { - "name": "bridge-poc", + "name": "overture-docs", "version": "0.0.0", "private": true, "scripts": { @@ -15,21 +15,36 @@ "typecheck": "tsc" }, "dependencies": { - "@docusaurus/core": "^3.9.2", - "@docusaurus/preset-classic": "^3.9.2", - "@docusaurus/theme-mermaid": "^3.9.2", - "@docusaurus/theme-search-algolia": "^3.9.2", + "@codemirror/lang-json": "^6.0.2", + "@codemirror/state": "^6.7.1", + "@codemirror/theme-one-dark": "^6.1.3", + "@codemirror/view": "^6.43.7", + "@docusaurus/core": "^3.10.2", + "@docusaurus/plugin-client-redirects": "^3.10.2", + "@docusaurus/preset-classic": "^3.10.2", + "@docusaurus/theme-mermaid": "^3.10.2", + "@docusaurus/theme-search-algolia": "^3.10.2", "@mdx-js/react": "^3.0.0", + "@overture-stack/lectern-dictionary": "^2.0.0", + "@overture-stack/lectern-ui": "^1.0.0", + "@replit/codemirror-indentation-markers": "^6.5.3", + "@uiw/react-codemirror": "^4.25.11", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", "react": "^18.0.0", "react-dom": "^18.0.0", "swagger-ui-react": "^5.29.2" }, + "overrides": { + "@overture-stack/lectern-ui": { + "react": "$react", + "react-dom": "$react-dom" + } + }, "devDependencies": { - "@docusaurus/module-type-aliases": "^3.6.2", - "@docusaurus/tsconfig": "^3.6.2", - "@docusaurus/types": "^3.6.2", + "@docusaurus/module-type-aliases": "^3.10.2", + "@docusaurus/tsconfig": "^3.10.2", + "@docusaurus/types": "^3.10.2", "typescript": "~5.5.2" }, "browserslist": { diff --git a/website/remark/unlink-legacy-paths.js b/website/remark/unlink-legacy-paths.js new file mode 100644 index 00000000..48e32c44 --- /dev/null +++ b/website/remark/unlink-legacy-paths.js @@ -0,0 +1,43 @@ +// Build-time remark transform that "unlinks" internal links pointing at routes +// removed in the Deploy·Build·Use IA migration (the whole /guides tree). +// +// Why this exists: vendored component docs (Song, Maestro, ...) hard-code links +// to the old docs-site paths (e.g. /guides/administration-guides/index-mappings). +// This repo cannot edit that submodule content (it belongs to each component's +// own repo/PR flow), and @docusaurus/plugin-client-redirects routes do NOT +// satisfy `onBrokenLinks: "throw"`. Rather than relax the strict link check +// site-wide, this strips the link wrapper from dead /guides links, keeping the +// visible text. Applied only to instances that carry vendored content. +// +// Durable fix: repoint these links in the owning repos (Song, Maestro, ...) and +// bump the submodule pins, then delete this plugin and its wiring. + +const DEAD_PREFIXES = ["/guides"]; + +function isDeadUrl(url) { + if (typeof url !== "string") return false; + return DEAD_PREFIXES.some( + (p) => url === p || url.startsWith(p + "/") || url.startsWith(p + "#"), + ); +} + +function unlinkDeadLinks(node) { + if (!node || !Array.isArray(node.children)) return; + for (let i = 0; i < node.children.length; i++) { + const child = node.children[i]; + if (child.type === "link" && isDeadUrl(child.url)) { + // Replace the link node with its own children (the visible text), + // then reprocess from the same position. + node.children.splice(i, 1, ...(child.children || [])); + i--; + continue; + } + unlinkDeadLinks(child); + } +} + +module.exports = function unlinkLegacyPaths() { + return (tree) => { + unlinkDeadLinks(tree); + }; +}; diff --git a/website/sidebars.ts b/website/sidebars.ts deleted file mode 100644 index d6155b3f..00000000 --- a/website/sidebars.ts +++ /dev/null @@ -1,33 +0,0 @@ -import type {SidebarsConfig} from '@docusaurus/plugin-content-docs'; - -/** - * Creating a sidebar enables you to: - - create an ordered group of docs - - render a sidebar for each doc of that group - - provide next/previous navigation - - The sidebars can be generated from the filesystem, or explicitly defined here. - - Create as many sidebars as you want. - */ -const sidebars: SidebarsConfig = { - // By default, Docusaurus generates a sidebar from the docs folder structure - docsSidebar: [{type: 'autogenerated', dirName: '.'}], - - // But you can create a sidebar manually - -// docsSidebar: [ -// { -// type: 'category', -// label: 'moduleA', -// items: ['moduleA/nestedFolder/nestedElement'], -// }, -// { -// type: 'category', -// label: 'moduleB', -// items: ['moduleB/littleBlackSubmarines'], -// }, -// ], -}; - -export default sidebars; diff --git a/website/src/components/ConfigGenerator/index.tsx b/website/src/components/ConfigGenerator/index.tsx new file mode 100644 index 00000000..cdc84dff --- /dev/null +++ b/website/src/components/ConfigGenerator/index.tsx @@ -0,0 +1,310 @@ +/* + * Config Generator — embedded, client-side CSV → Overture configs playground. + * + * Ported from the Prelude IBCworkshop stage app. The original posted the CSV to + * a Next.js `/api/generate-configs` route; here the generation logic (lib/) runs + * directly in the browser, so nothing is sent to a server. + * + * Parametrized by `outputs` so each guide embeds its own focused instance: + * - Index Mappings -> outputs={['esMapping']} + * - Customizing the Portal -> outputs={['arrangerBase','arrangerExtended','arrangerTable','arrangerFacets']} + * Omitting `outputs` shows all generated configs. + * + * No browser-only modules are imported at load time (FileReader / clipboard / + * Blob are used inside handlers only), so this renders fine under SSR without a + * wrapper. + */ + +import React, { ChangeEvent, ReactElement, useRef, useState } from 'react'; + +import { generateConfigs, GeneratedConfigs } from './lib/generateConfigs'; +import styles from './styles.module.css'; + +type OutputKey = keyof GeneratedConfigs; + +interface OutputMeta { + label: string; + filename: string; + kind: 'json' | 'sql'; +} + +// Canonical order + display metadata for every generated config. +const OUTPUT_META: Record = { + esMapping: { label: 'elasticsearch-mapping.json', filename: 'elasticsearch-mapping.json', kind: 'json' }, + arrangerBase: { label: 'arranger/base.json', filename: 'base.json', kind: 'json' }, + arrangerExtended: { label: 'arranger/extended.json', filename: 'extended.json', kind: 'json' }, + arrangerTable: { label: 'arranger/table.json', filename: 'table.json', kind: 'json' }, + arrangerFacets: { label: 'arranger/facets.json', filename: 'facets.json', kind: 'json' }, + lecternDictionary: { label: 'lectern/dictionary.json', filename: 'dictionary.json', kind: 'json' }, + postgresSql: { label: 'postgres-table.sql', filename: 'postgres-table.sql', kind: 'sql' }, +}; + +const CANONICAL_ORDER: OutputKey[] = [ + 'esMapping', + 'arrangerBase', + 'arrangerExtended', + 'arrangerTable', + 'arrangerFacets', + 'lecternDictionary', + 'postgresSql', +]; + +const SAMPLE_CSV = [ + 'donor_id,gender,vital_status,primary_site,age_at_diagnosis,tumour_stage,survival_days', + 'DO001,Female,Alive,Breast,45,II,1200', + 'DO002,Male,Deceased,Lung,67,IV,340', + 'DO003,Female,Alive,Colorectal,52,III,890', + 'DO004,Male,Alive,Skin,38,I,1500', +].join('\n'); + +interface ConfigGeneratorProps { + /** Which configs to surface; defaults to all, in canonical order. */ + outputs?: OutputKey[]; + title?: string; + subtitle?: string; +} + +function formatOutput(key: OutputKey, configs: GeneratedConfigs): string { + const value = configs[key]; + return typeof value === 'string' ? value : JSON.stringify(value, null, 2); +} + +function deriveName(csvText: string, filename: string): string { + const base = filename.replace(/\.csv$/i, '') || csvText.split(',')[0] || 'data'; + return ( + base + .toLowerCase() + .replace(/[^a-z0-9]+/g, '_') + .replace(/^_+|_+$/g, '') + .slice(0, 40) || 'data' + ); +} + +function previewRows(csvText: string): string[][] { + return csvText + .split(/\r?\n/) + .filter((l) => l.trim()) + .slice(0, 6) + .map((line) => line.split(',').map((f) => f.replace(/^"|"$/g, '').trim())); +} + +const ConfigGenerator = ({ outputs, title, subtitle }: ConfigGeneratorProps): ReactElement => { + const requested = (outputs && outputs.length > 0 ? outputs : CANONICAL_ORDER).filter( + (k): k is OutputKey => k in OUTPUT_META, + ); + const orderedOutputs = CANONICAL_ORDER.filter((k) => requested.includes(k)); + const needsTableName = orderedOutputs.some((k) => k === 'postgresSql' || k === 'lecternDictionary'); + + const fileInputRef = useRef(null); + const [csvText, setCsvText] = useState(''); + const [filename, setFilename] = useState(''); + const [indexName, setIndexName] = useState(''); + const [tableName, setTableName] = useState(''); + const [configs, setConfigs] = useState(null); + const [activeTab, setActiveTab] = useState(orderedOutputs[0]); + const [copiedTab, setCopiedTab] = useState(null); + const [error, setError] = useState(null); + + const loadCsv = (text: string, name: string) => { + setCsvText(text); + setFilename(name); + setConfigs(null); + setError(null); + const derived = deriveName(text, name); + setIndexName((prev) => prev || derived); + setTableName((prev) => prev || derived); + }; + + const onFileChange = (e: ChangeEvent) => { + const file = e.target.files?.[0]; + if (!file) return; + const reader = new FileReader(); + reader.onload = (ev) => loadCsv(ev.target?.result as string, file.name); + reader.readAsText(file); + }; + + const runGenerate = (text: string, idx: string, tbl: string) => { + setError(null); + try { + const result = generateConfigs(text, idx, tbl); + setConfigs(result); + setActiveTab(orderedOutputs[0]); + } catch (err) { + setConfigs(null); + setError(err instanceof Error ? err.message : 'Generation failed'); + } + }; + + const loadExample = () => { + const name = 'clinical_data'; + setCsvText(SAMPLE_CSV); + setFilename('clinical_data.csv'); + setIndexName(name); + setTableName(name); + runGenerate(SAMPLE_CSV, name, name); + }; + + const copyTab = async (key: OutputKey) => { + if (!configs) return; + try { + await navigator.clipboard.writeText(formatOutput(key, configs)); + setCopiedTab(key); + setTimeout(() => setCopiedTab(null), 1500); + } catch { + // clipboard unavailable — no-op + } + }; + + const downloadTab = (key: OutputKey) => { + if (!configs) return; + const blob = new Blob([formatOutput(key, configs)], { + type: OUTPUT_META[key].kind === 'json' ? 'application/json' : 'text/plain', + }); + const url = URL.createObjectURL(blob); + const a = document.createElement('a'); + a.href = url; + a.download = OUTPUT_META[key].filename; + document.body.appendChild(a); + a.click(); + document.body.removeChild(a); + URL.revokeObjectURL(url); + }; + + const rows = csvText ? previewRows(csvText) : []; + const canGenerate = Boolean(csvText.trim() && indexName.trim()); + + return ( +
+
+

{title ?? 'Config Generator'}

+

+ {subtitle ?? + 'Upload or paste CSV data and generate base configuration files in your browser. Nothing is sent to a server.'} +

+
+ +
+ {/* Step 1 — CSV input */} +
+

1. Provide CSV data

+ +
+ + + {filename && {filename}} + +
+ + +