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/arranger b/submodules/arranger index 834ad943..bc15e4c8 160000 --- a/submodules/arranger +++ b/submodules/arranger @@ -1 +1 @@ -Subproject commit 834ad943ef0c9c467ae4e53dc4660bcc0099420e +Subproject commit bc15e4c8c262858bc0fc0504eba6817a67244939 diff --git a/submodules/lectern b/submodules/lectern index b41a4d6c..2931e38d 160000 --- a/submodules/lectern +++ b/submodules/lectern @@ -1 +1 @@ -Subproject commit b41a4d6c28ad669c9ebf8bf5d68187f38a126a64 +Subproject commit 2931e38df0ecebc7e5fe3df27b4e677ba282427a diff --git a/submodules/lyric b/submodules/lyric index b1d289fe..4cce803f 160000 --- a/submodules/lyric +++ b/submodules/lyric @@ -1 +1 @@ -Subproject commit b1d289fec5c0f68f023e35fe1141677614c6242f +Subproject commit 4cce803ffca3d90ba957daf7cf200a80f2aeb740 diff --git a/submodules/maestro b/submodules/maestro index e8beeb1b..bc10c2d1 160000 --- a/submodules/maestro +++ b/submodules/maestro @@ -1 +1 @@ -Subproject commit e8beeb1b6913a986b59390d50aa4cb0a87818eb4 +Subproject commit bc10c2d1c21a19e6966b225748ae22fcd37a46c7 diff --git a/submodules/song b/submodules/song index 5ebe11fa..788d333a 160000 --- a/submodules/song +++ b/submodules/song @@ -1 +1 @@ -Subproject commit 5ebe11fae66679d6634ecdd3f7cbbd1e85b4defe +Subproject commit 788d333abcefb7729819efcdd935a0c890f8c864 diff --git a/submodules/stage b/submodules/stage index fa63b860..1de5ab8f 160000 --- a/submodules/stage +++ b/submodules/stage @@ -1 +1 @@ -Subproject commit fa63b86054c853374ae982c85fffc9f5c72f6924 +Subproject commit 1de5ab8f3bbc7ba9150a00727e567cc0b9590d0b 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..de88ab85 --- /dev/null +++ b/website/deploySidebars.ts @@ -0,0 +1,18 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +const sidebars: SidebarsConfig = { + // Prelude and Quickstart are marked `unlisted` (hidden for now, still + // reachable by direct link) so they're left out here rather than + // autogenerated. The 3 deployment guide pages are hoisted to the sidebar + // root instead of nested under a "Deployment Guide" category/dropdown; + // their own overview page (deployment/index) is unlisted too, so it's + // left out here as well. + deploySidebar: [ + "index", + "deployment/authorization", + "deployment/data-management-storage", + "deployment/search-portal", + ], +}; + +export default sidebars; diff --git a/website/developSidebars.ts b/website/developSidebars.ts new file mode 100644 index 00000000..194cb829 --- /dev/null +++ b/website/developSidebars.ts @@ -0,0 +1,39 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +// Each component's docs are vendored from its own submodule (symlinked), so we +// can't drop a _category_.json inside them to set the sidebar label. Instead +// each is wired up explicitly here, paired as "Overture name (functional +// name)" per the site map convention. +const components: Array<{ dirName: string; id: string; label: string }> = [ + { + dirName: "01-Lectern", + id: "Lectern", + label: "Lectern (Dictionary Management)", + }, + { dirName: "02-Lyric", id: "Lyric", label: "Lyric (Data Management)" }, + { dirName: "03-Song", id: "Song", label: "Song (File Management)" }, + { dirName: "04-Score", id: "Score", label: "Score (File Transfer)" }, + { dirName: "05-Maestro", id: "Maestro", label: "Maestro (Indexing)" }, + { dirName: "06-Arranger", id: "Arranger", label: "Arranger (Search)" }, + { dirName: "07-Stage", id: "Stage", label: "Stage (Portal UI)" }, +]; + +const sidebars: SidebarsConfig = { + developSidebar: [ + "index", + ...components.map(({ dirName, id, label }) => ({ + type: "category" as const, + // Scoped by className so the "Overture name (functional name)" pairing + // (long enough to wrap on some of these) can get its own sidebar + // styling in custom.css without affecting other sidebars. + className: "sidebar-component-item", + label, + link: { type: "doc" as const, id: `${id}/overview` }, + items: [{ type: "autogenerated" as const, dirName }], + })), + "api-reference", + "contributing", + ], +}; + +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/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/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 96% rename from website/docs/02-platform-tools/01-prelude.md rename to website/docs/deploy-docs/01-prelude.md index b93bf4c2..b864750a 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,6 +10,8 @@ - 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. ::: diff --git a/website/docs/02-platform-tools/02-quickstart.mdx b/website/docs/deploy-docs/02-quickstart.mdx similarity index 97% rename from website/docs/02-platform-tools/02-quickstart.mdx rename to website/docs/deploy-docs/02-quickstart.mdx index 675c60d0..acac1026 100644 --- a/website/docs/02-platform-tools/02-quickstart.mdx +++ b/website/docs/deploy-docs/02-quickstart.mdx @@ -1,3 +1,7 @@ +--- +unlisted: true +--- + # 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. @@ -8,7 +12,7 @@ The following diagrams illustrate the system architecture for each deployment: - ![Platform](./images/platform.svg 'Overture Platform') + ![Platform](./images/platform-devenv.svg 'Overture Platform') ![Song Dev](./images/songDev.svg 'Song Dev Environment') diff --git a/website/guides/01-deployment-guide/01-authorization.md b/website/docs/deploy-docs/03-deployment/01-authorization.md similarity index 95% rename from website/guides/01-deployment-guide/01-authorization.md rename to website/docs/deploy-docs/03-deployment/01-authorization.md index 9d29fcf8..23179908 100644 --- a/website/guides/01-deployment-guide/01-authorization.md +++ b/website/docs/deploy-docs/03-deployment/01-authorization.md @@ -72,5 +72,5 @@ Keycloak will be set up first to broker authorization tokens, enabling secure co :::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. + 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-data-management-storage.md similarity index 100% rename from website/guides/01-deployment-guide/02-data-management-&-storage.md rename to website/docs/deploy-docs/03-deployment/02-data-management-storage.md diff --git a/website/guides/01-deployment-guide/03-search-portal.md b/website/docs/deploy-docs/03-deployment/03-search-portal.md similarity index 98% rename from website/guides/01-deployment-guide/03-search-portal.md rename to website/docs/deploy-docs/03-deployment/03-search-portal.md index da13080b..d7c06704 100644 --- a/website/guides/01-deployment-guide/03-search-portal.md +++ b/website/docs/deploy-docs/03-deployment/03-search-portal.md @@ -53,7 +53,7 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil 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 @@ -255,7 +255,7 @@ Would you like me to explain any specific Elasticsearch 7 features or compatibil :::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 @@ -369,5 +369,5 @@ API Keys are brokered by Keycloak and accessible when logged in to the Stage UI ``` :::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). ::: diff --git a/website/guides/01-deployment-guide/01-deployment-guide.md b/website/docs/deploy-docs/03-deployment/index.md similarity index 99% rename from website/guides/01-deployment-guide/01-deployment-guide.md rename to website/docs/deploy-docs/03-deployment/index.md index 06f60ccd..178eb261 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 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/docs/02-platform-tools/images/arrangerDev.svg b/website/docs/deploy-docs/images/arrangerDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/arrangerDev.svg rename to website/docs/deploy-docs/images/arrangerDev.svg diff --git a/website/docs/02-platform-tools/images/maestroDev.svg b/website/docs/deploy-docs/images/maestroDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/maestroDev.svg rename to website/docs/deploy-docs/images/maestroDev.svg diff --git a/website/docs/02-platform-tools/images/platform.svg b/website/docs/deploy-docs/images/platform-devenv.svg similarity index 100% rename from website/docs/02-platform-tools/images/platform.svg rename to website/docs/deploy-docs/images/platform-devenv.svg 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/02-platform-tools/images/scoreDev.svg b/website/docs/deploy-docs/images/scoreDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/scoreDev.svg rename to website/docs/deploy-docs/images/scoreDev.svg diff --git a/website/docs/02-platform-tools/images/songDev.svg b/website/docs/deploy-docs/images/songDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/songDev.svg rename to website/docs/deploy-docs/images/songDev.svg diff --git a/website/docs/02-platform-tools/images/stageDev.svg b/website/docs/deploy-docs/images/stageDev.svg similarity index 100% rename from website/docs/02-platform-tools/images/stageDev.svg rename to website/docs/deploy-docs/images/stageDev.svg diff --git a/website/docs/deploy-docs/index.md b/website/docs/deploy-docs/index.md new file mode 100644 index 00000000..85965f91 --- /dev/null +++ b/website/docs/deploy-docs/index.md @@ -0,0 +1,15 @@ +--- +title: Deploy +slug: / +sidebar_label: Deploy Overture +sidebar_position: 0 +--- + +# Deploy Overture + +**For platform, DevOps, and operations teams standing up and operating an Overture instance.** + +This journey covers deploying the Overture stack and trying it locally with +**Prelude** before committing to a full deployment — start locally, then scale +out. Once your instance is running, see the [Use](/use) journey's +**Administrators** section for configuring the data model, index, and portal UI. 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.mdx b/website/docs/develop-docs/08-api-reference.mdx new file mode 100644 index 00000000..a92c450d --- /dev/null +++ b/website/docs/develop-docs/08-api-reference.mdx @@ -0,0 +1,108 @@ +# 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 six APIs: + +1. [**Song:**](/develop/api-reference#song-api) a RESTful (Swagger) API for file metadata stored in Song. +2. [**Score:**](/develop/api-reference#score-api) a RESTful (Swagger) API for communicating with the Score Server. +3. [**Maestro:**](/develop/api-reference#maestro-api) a RESTful (Swagger) API for managing Song data indexing operations. +4. [**Lyric:**](/develop/api-reference#lyric-api) a RESTful (Swagger) API for tabular data submission, validation, and querying. +5. [**Lectern:**](/develop/api-reference#lectern-api) a RESTful (Swagger) API for managing data dictionary schemas. +6. [**Arranger:**](#arranger-graphql-api) a GraphQL search API, with a set of read-only introspection REST endpoints. + +Song, Score, Maestro, Lyric, and Lectern are documented with Swagger below. Arranger's API is GraphQL rather than REST, so it is documented in the [Arranger component reference](#arranger-graphql-api). + +## 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, 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 + + + +### 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 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 + + + +### 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 + + + +### 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 + + + +

+ +## Arranger GraphQL 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/usage/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/usage/query-processing) — how a search request flows from SQON through GraphQL to Elasticsearch. +- [**Building SQON queries**](/develop/Arranger/usage/building-sqon-queries) and [**SQON in detail**](/develop/Arranger/usage/sqon-in-detail) — the filter language. +- [**Introspection API**](/develop/Arranger/usage/introspection) — read-only REST endpoints describing a server's catalogues, fields, types, and operators. +- [**AI & automation**](/develop/Arranger/usage/ai-and-automation) — 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 relevant [**community support channels**](https://docs.overture.bio/community/support). +::: \ No newline at end of file diff --git a/website/docs/contribution.md b/website/docs/develop-docs/09-contributing.md similarity index 100% rename from website/docs/contribution.md rename to website/docs/develop-docs/09-contributing.md diff --git a/website/docs/develop-docs/images/arrangerDev.svg b/website/docs/develop-docs/images/arrangerDev.svg new file mode 100644 index 00000000..ee8e8e9e --- /dev/null +++ b/website/docs/develop-docs/images/arrangerDev.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/docs/01-core-software/images/core-software.webp b/website/docs/develop-docs/images/core-software.webp similarity index 100% rename from website/docs/01-core-software/images/core-software.webp rename to website/docs/develop-docs/images/core-software.webp diff --git a/website/docs/develop-docs/images/maestroDev.svg b/website/docs/develop-docs/images/maestroDev.svg new file mode 100644 index 00000000..e0cdc548 --- /dev/null +++ b/website/docs/develop-docs/images/maestroDev.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/docs/develop-docs/images/platform.svg b/website/docs/develop-docs/images/platform.svg new file mode 100644 index 00000000..87ccf64c --- /dev/null +++ b/website/docs/develop-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/docs/develop-docs/images/scoreDev.svg b/website/docs/develop-docs/images/scoreDev.svg new file mode 100644 index 00000000..be9221f6 --- /dev/null +++ b/website/docs/develop-docs/images/scoreDev.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/docs/develop-docs/images/songDev.svg b/website/docs/develop-docs/images/songDev.svg new file mode 100644 index 00000000..ced565dc --- /dev/null +++ b/website/docs/develop-docs/images/songDev.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/docs/develop-docs/images/stageDev.svg b/website/docs/develop-docs/images/stageDev.svg new file mode 100644 index 00000000..79a1e8fa --- /dev/null +++ b/website/docs/develop-docs/images/stageDev.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...

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

Overture API Key Provider...
Authorization & Authentication
Authorization & Authentication
Text is not SVG - cannot display
\ No newline at end of file diff --git a/website/docs/01-core-software/01-core-software.mdx b/website/docs/develop-docs/index.md similarity index 66% rename from website/docs/01-core-software/01-core-software.mdx rename to website/docs/develop-docs/index.md index 3901907e..b6df57a5 100644 --- a/website/docs/01-core-software/01-core-software.mdx +++ b/website/docs/develop-docs/index.md @@ -1,4 +1,21 @@ -# Core Software +--- +title: Build +slug: / +sidebar_label: Develop Overture +sidebar_position: 0 +--- + +# Building on Overture + +**For developers working with or extending Overture components and the MCP +infrastructure.** + +This journey is the developer home for Overture: the per-component **reference +library** (Lectern, Song, Score, Maestro, Arranger, Stage), the API reference, +the Arranger MCP developer documentation, components under active development, +and the standards for contributing to Overture and its documentation. + +## Core Software ![Core Software](./images/core-software.webp "Core Software") @@ -6,7 +23,7 @@ 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 +### Documentation Structure Our core software documentation is organized as follows: @@ -18,44 +35,44 @@ Our core software documentation is organized as follows: └── /Usage ``` -### Overview +#### 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 +#### 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') + ![Platform](./images/platform.svg 'Overture Platform') - ![Song Dev](../02-platform-tools/images/songDev.svg 'Song Dev Environment') + ![Song Dev](./images/songDev.svg 'Song Dev Environment') - ![Score Dev](../02-platform-tools/images/scoreDev.svg 'Score Dev + ![Score Dev](./images/scoreDev.svg 'Score Dev Environment') - ![Maestro Dev](../02-platform-tools/images/maestroDev.svg 'Maestro Dev + ![Maestro Dev](./images/maestroDev.svg 'Maestro Dev Environment') - ![Arranger Dev](../02-platform-tools/images/arrangerDev.svg 'Arranger Dev + ![Arranger Dev](./images/arrangerDev.svg 'Arranger Dev Environment') - ![Stage Dev](../02-platform-tools/images/stageDev.svg 'Stage Dev + ![Stage Dev](./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). +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 the Deploy journey](/deploy). ::: -### Usage +#### Usage The Usage section provides detailed information on how to effectively use each service, including: @@ -64,7 +81,3 @@ The Usage section provides detailed information on how to effectively use each s - Troubleshooting and FAQs - Integration tips with other Overture services - Performance optimization suggestions - -### Contents - - diff --git a/website/docs/use-docs/01-conversational-data-discovery.md b/website/docs/use-docs/01-conversational-data-discovery.md new file mode 100644 index 00000000..31ecca48 --- /dev/null +++ b/website/docs/use-docs/01-conversational-data-discovery.md @@ -0,0 +1,99 @@ +--- +sidebar_position: 0.5 +--- + +# Conversational Data Discovery + +Conversational data discovery lets a researcher ask a deployed Overture portal questions in **plain language** and get back the exact records that answer them — without knowing field names, filter syntax, or query structure. + +> _"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, and points to how to connect a client today. + +:::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 [Connecting a client](#connecting-a-client)). +::: + +## 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/usage/building-sqon-queries) is Overture's JSON filter language; the [GraphQL API](/develop/Arranger/usage/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/usage/introspection) rather than guessing. + +## Governing principles + +The workflow is built around four principles, driven by the reality that this runs over sensitive biomedical data. + +1. **Data sovereignty and minimization.** Sensitive records and the researcher's questions must not leave local infrastructure. The workflow is designed for **open-weights models run locally**, so nothing is sent to an external model provider. Only what a step needs is exposed: the model reads the catalogue *schema* (via introspection) to build a query, and a query returns only the fields it selects. +2. **Explicit consent before execution.** The system builds a query from the question and **presents it to the researcher for approval before any data is fetched**. Nothing runs against the catalogue until the researcher confirms. +3. **Sandboxed execution.** Approved queries run through Arranger's search API against a configured catalogue — a bounded, read-only surface — not as free-form code against production systems. +4. **Reproducible sessions.** Runs use deterministic model settings (temperature 0) and a schema pinned to a specific introspection snapshot, so the same question yields the same query and the same results. + +## The researcher workflow + +1. **Ask** a question in plain language against a chosen catalogue. +2. The model **discovers the schema** for that catalogue through the [Introspection API](/develop/Arranger/usage/introspection) — the fields, their types, and the operators each accepts. +3. The model **builds the query** — a SQON filter plus a GraphQL field selection, and an aggregation if the question implies a summary. +4. The researcher **reviews and approves** the generated query (principle 2). +5. Arranger **executes** the approved query and returns the matching records (or aggregation buckets). + +## Connecting a client + +Arranger ships an **MCP server** that exposes its discovery and query tools over the [Model Context Protocol](https://modelcontextprotocol.io/) — so any MCP-compatible client can drive the workflow above without Arranger-specific integration code. It provides tools to list catalogues, fetch the SQON schema, and retrieve a catalogue's fields, plus the same data as readable MCP resources. + +To connect a client today: + +- **MCP Inspector** — a browser-based UI for browsing the server's resources and calling its tools; useful while setting things up. +- **LM Studio** — a desktop app that bundles a local model runtime with a chat UI; add the Arranger MCP server as an MCP entry. + +Any client that speaks MCP over Streamable HTTP works the same way. For the concrete server setup, the tools and resources it exposes, and per-client connection steps, see Arranger's [AI and automation](/develop/Arranger/usage/ai-and-automation) reference. + +## Try it locally + +The quickest way to see this end to end is the Conversational Data Discovery demo — a self-contained [Prelude](/deploy/prelude) environment that starts Arranger, the MCP server, and a portal preloaded with a representative sample of the OICR Drug Discovery data (gene correlation, mutation, expression, and protein catalogues). + +1. Clone and start the demo: + + ```bash + git clone -b overtureMCP --recurse-submodules https://github.com/overture-stack/prelude.git + cd prelude + make demo + ``` + + This runs system checks, starts the stack via Docker Compose, and loads the sample catalogues. The MCP server comes up at `http://localhost:3100/mcp`. + +2. Connect an MCP host — LM Studio, for example — by adding the server to its MCP config: + + ```json + { + "mcpServers": { + "arranger": { "url": "http://localhost:3100/mcp" } + } + } + ``` + +3. Load a tool-capable model and ask a question in plain language, for example: + + > _Show me BRCA genes with an overall mutation frequency above 10%_ + + The model discovers the catalogue's schema, constructs a query, and returns the matching records as a table. Follow-up questions refine the result set conversationally. + +See the [prelude repository](https://github.com/overture-stack/prelude) for the full walkthrough, the sample catalogues, and setup details. + +## What's coming + +The discovery workflow is being extended (tracked in the Arranger docs' [AI and automation](/develop/Arranger/usage/ai-and-automation#whats-coming) reference): + +- a dedicated researcher-facing **conversational host** (a chat front-end for non-technical users), +- **query-execution** tools that run an approved SQON against a catalogue and return results, and +- **authentication** on the MCP server. + +:::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/guides/03-user-guides/02-cli-downloads.md b/website/docs/use-docs/02-cli-downloads.md similarity index 97% rename from website/guides/03-user-guides/02-cli-downloads.md rename to website/docs/use-docs/02-cli-downloads.md index d5891d0a..596b5978 100644 --- a/website/guides/03-user-guides/02-cli-downloads.md +++ b/website/docs/use-docs/02-cli-downloads.md @@ -1,4 +1,4 @@ -# CLI Downloads +# File Download (Score CLI) **This guide is for** anyone seeking guidance on how to download data from an Overture platform. @@ -6,7 +6,7 @@ #### Visual Summary: -![Retrieval Overview](../images/dataRetrieval.webp "End Goal") +![Retrieval Overview](./images/dataRetrieval.webp "End Goal") ## Getting Started @@ -32,7 +32,7 @@ docker compose up --attach conductor 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") +![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 @@ -50,7 +50,7 @@ API Keys are brokered by Keycloak and accessible when logged in to the Stage UI. **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") +![Accessing an API Key](./images/apikeys.png "Accessing an API Key") ### Run the Score Client diff --git a/website/guides/03-user-guides/01-cli-submissions.md b/website/docs/use-docs/03-cli-submissions.md similarity index 99% rename from website/guides/03-user-guides/01-cli-submissions.md rename to website/docs/use-docs/03-cli-submissions.md index 51b86a87..4e0e224d 100644 --- a/website/guides/03-user-guides/01-cli-submissions.md +++ b/website/docs/use-docs/03-cli-submissions.md @@ -1,4 +1,4 @@ -# CLI Submission +# File Submission (Song & Score CLI) **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. @@ -8,7 +8,7 @@ #### Visual Summary: -![Submission Overview](../images/dataSubmission.webp "End Goal") +![Submission Overview](./images/dataSubmission.webp "End Goal") ### Getting Started @@ -28,7 +28,7 @@ **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 +## CLI Submission ### Generate an API Key @@ -38,7 +38,7 @@ API Keys are brokered by Keycloak and accessible when logged in to the Stage UI. 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") +![Accessing an API Key](./images/apikeys.png "Accessing an API Key") ### Run the Song & Score Clients @@ -996,7 +996,7 @@ To address our second error we will have to take a look at the resources data mo 2. Select **Schema** and the **GET /schemas** endpoint 3. Click try it out and execute - ![Song Swagger](../images/song-swagger.png 'Song Swagger') + ![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. @@ -1106,7 +1106,7 @@ The final step in data submission is to set the state of the analysis to `PUBLIS 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") +![Success](./images/success.png "Success") :::tip **Help us make our guides better** diff --git a/website/docs/use-docs/03-workshop/00-Intro.md b/website/docs/use-docs/03-workshop/00-Intro.md new file mode 100644 index 00000000..5c397364 --- /dev/null +++ b/website/docs/use-docs/03-workshop/00-Intro.md @@ -0,0 +1,149 @@ +--- +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. +--- + +:::caution Complete the prerequisites before you start +Most importantly, download the Docker images in advance — depending on your connection, this can take a while. +::: + +# Prerequisites + +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 + +The following software should be installed and verified before you start: + +
+1. Git `git --version` returns a version number + +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 + +
+ +
+3. Docker images pre-downloaded Most time-consuming step, run these before you start + +Pull the required Docker images now to avoid slow downloads while working through this tutorial: + +```bash +docker pull alpine/curl:8.8.0 +docker pull postgres:15-alpine +docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.27 +docker pull ghcr.io/overture-stack/arranger-server:4919f736 +docker pull ghcr.io/overture-stack/conductor:171d9ce +docker pull node:18-alpine +``` + +Verify all six downloaded: + +```bash +docker images | grep -E "alpine/curl|postgres|elasticsearch|arranger-server|conductor|node" +``` + +You should see all six images listed. + +
+ +
+4. Repository cloned: `git clone -b quickstart https://github.com/overture-stack/prelude.git` + +The `prelude` repository contains everything needed for this tutorial: Docker Compose configuration, the Conductor wrapper script, and sample data. Clone it once before you start and you won't need internet access for the hands-on portion. + +```bash +git clone -b quickstart https://github.com/overture-stack/prelude.git +``` + +
+ +
+5. _(Windows only)_ WSL2 configured with Docker Desktop integration enabled + +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. + +
+ +#### Optional Prerequisites + +These are not required but will make this tutorial easier to follow: + +
+6. (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. + +
+ +
+7. (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/) | + +
+ +
+8. (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. + +
+ +## Support + +| | | +| ------------------- | ---------------------------------------------------------------------------------------------------------------------- | +| **Community support** | [community support channels](https://docs.overture.bio/community/support) or [contact@overture.bio](mailto:contact@overture.bio) | +| **Bug reports** | [GitHub Issues](https://github.com/overture-stack/prelude/issues) | + +## Verification Checklist + +Before starting, confirm: + +1. `git --version` returns a version number +2. `docker --version` returns 28.0.0 or later +3. `docker compose version` returns a version number +4. Docker Desktop is running with 4+ CPUs and 8 GB+ memory allocated +5. **All six Docker images are downloaded** (`docker images`) — _this is the most time-consuming step_ +6. The repository is cloned and you can `cd` into it +7. _(Windows only)_ WSL2 is configured and Docker integration is enabled + +> **Troubleshooting:** If you run into issues, reach out via the [community support channels](https://docs.overture.bio/community/support). diff --git a/website/workshop/01-Running-the-Demo.md b/website/docs/use-docs/03-workshop/01-Running-the-Demo.md similarity index 98% rename from website/workshop/01-Running-the-Demo.md rename to website/docs/use-docs/03-workshop/01-Running-the-Demo.md index 9c21bcca..f95bca6f 100644 --- a/website/workshop/01-Running-the-Demo.md +++ b/website/docs/use-docs/03-workshop/01-Running-the-Demo.md @@ -19,7 +19,7 @@ Before building anything from scratch, let's deploy the pre-configured demo port If you have not done so yet, clone the following repository. ``` -git clone -b IBCworkshop https://github.com/overture-stack/prelude.git +git clone -b quickstart https://github.com/overture-stack/prelude.git cd prelude ``` diff --git a/website/workshop/02-Architecture.md b/website/docs/use-docs/03-workshop/02-Architecture.md similarity index 89% rename from website/workshop/02-Architecture.md rename to website/docs/use-docs/03-workshop/02-Architecture.md index 81131343..79502c09 100644 --- a/website/workshop/02-Architecture.md +++ b/website/docs/use-docs/03-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,18 +95,20 @@ 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)_ +#### Conversational 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. 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. +See the [Conversational Data Discovery guide](/use/conversational-data-discovery) for the workflow, the governing principles, and how to connect a client today. + ![CDD 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**. CDD 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. diff --git a/website/workshop/03-Data-Preparation.md b/website/docs/use-docs/03-workshop/03-Data-Preparation.md similarity index 96% rename from website/workshop/03-Data-Preparation.md rename to website/docs/use-docs/03-workshop/03-Data-Preparation.md index 0eec6e54..7c2fb803 100644 --- a/website/workshop/03-Data-Preparation.md +++ b/website/docs/use-docs/03-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/03-workshop/04-Generating-Configurations.md similarity index 98% rename from website/workshop/04-Generating-Configurations.md rename to website/docs/use-docs/03-workshop/04-Generating-Configurations.md index fff6e861..061d5143 100644 --- a/website/workshop/04-Generating-Configurations.md +++ b/website/docs/use-docs/03-workshop/04-Generating-Configurations.md @@ -261,7 +261,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](https://docs.overture.bio/develop/arranger/usage/arranger-components). ::: #### arranger/table.json @@ -310,7 +310,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](https://docs.overture.bio/develop/Arranger/usage/arranger-components#table-configuration-tablejson). ::: #### arranger/facets.json @@ -353,7 +353,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](https://docs.overture.bio/develop/Arranger/usage/arranger-components#facet-configuration-facetsjson). ::: ### Checkpoint diff --git a/website/workshop/05-Docker-Configuration.md b/website/docs/use-docs/03-workshop/05-Docker-Configuration.md similarity index 87% rename from website/workshop/05-Docker-Configuration.md rename to website/docs/use-docs/03-workshop/05-Docker-Configuration.md index b2ed067e..1193eb46 100644 --- a/website/workshop/05-Docker-Configuration.md +++ b/website/docs/use-docs/03-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 @@ -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,10 +170,10 @@ 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 @@ -205,7 +205,7 @@ arranger-datatable1: | `ES_ARRANGER_SET_INDEX` | Internal Arranger bookmarks index, must be unique per Arranger instance | :::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 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 tutorial, but reach out via [contact@overture.bio](mailto:contact@overture.bio) if you'd like guidance afterwards. ::: ### Stage @@ -224,7 +224,7 @@ stage: # highlight-start NEXT_PUBLIC_ARRANGER_DATATABLE_1_API: http://arranger-datatable1: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 +240,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/03-workshop/06-Loading-Data.md similarity index 96% rename from website/workshop/06-Loading-Data.md rename to website/docs/use-docs/03-workshop/06-Loading-Data.md index a54819ba..83880c97 100644 --- a/website/workshop/06-Loading-Data.md +++ b/website/docs/use-docs/03-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/03-workshop/07-Troubleshooting.md similarity index 97% rename from website/workshop/07-Troubleshooting.md rename to website/docs/use-docs/03-workshop/07-Troubleshooting.md index ba348811..0cb4d78a 100644 --- a/website/workshop/07-Troubleshooting.md +++ b/website/docs/use-docs/03-workshop/07-Troubleshooting.md @@ -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](https://docs.overture.bio/develop/arranger/usage/arranger-components#table-configuration-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/03-workshop/08-Portal-Customization.md similarity index 96% rename from website/workshop/08-Portal-Customization.md rename to website/docs/use-docs/03-workshop/08-Portal-Customization.md index 13cd5f7f..b0373e2b 100644 --- a/website/workshop/08-Portal-Customization.md +++ b/website/docs/use-docs/03-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/03-workshop/09-Next-Steps.md similarity index 81% rename from website/workshop/09-Next-Steps.md rename to website/docs/use-docs/03-workshop/09-Next-Steps.md index 66fd93c6..d376eb2f 100644 --- a/website/workshop/09-Next-Steps.md +++ b/website/docs/use-docs/03-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) @@ -54,7 +54,7 @@ These services compose together, letting you build from a simple search portal t 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 [Conversational Data Discovery guide](/use/conversational-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: @@ -70,19 +70,13 @@ In addition to this our team is building a **Conversational Data Discovery (CDD) ### 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/03-workshop/10-Extension-Task.md similarity index 85% rename from website/workshop/10-Extension-Task.md rename to website/docs/use-docs/03-workshop/10-Extension-Task.md index 2515c200..d037d255 100644 --- a/website/workshop/10-Extension-Task.md +++ b/website/docs/use-docs/03-workshop/10-Extension-Task.md @@ -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. ::: ## Core Concepts @@ -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/03-workshop/images/basicPortal.webp similarity index 100% rename from website/workshop/images/basicPortal.webp rename to website/docs/use-docs/03-workshop/images/basicPortal.webp diff --git a/website/workshop/images/config-generator-page.webp b/website/docs/use-docs/03-workshop/images/config-generator-page.webp similarity index 100% rename from website/workshop/images/config-generator-page.webp rename to website/docs/use-docs/03-workshop/images/config-generator-page.webp diff --git a/website/workshop/images/conversational-data-discovery-mockup.webp b/website/docs/use-docs/03-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/03-workshop/images/conversational-data-discovery-mockup.webp diff --git a/website/workshop/images/csv-upload-area.webp b/website/docs/use-docs/03-workshop/images/csv-upload-area.webp similarity index 100% rename from website/workshop/images/csv-upload-area.webp rename to website/docs/use-docs/03-workshop/images/csv-upload-area.webp diff --git a/website/workshop/images/demo-portal-cross-table.webp b/website/docs/use-docs/03-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/03-workshop/images/demo-portal-cross-table.webp diff --git a/website/workshop/images/demo-search-and-aggregation.webm b/website/docs/use-docs/03-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/03-workshop/images/demo-search-and-aggregation.webm diff --git a/website/workshop/images/documentation.webp b/website/docs/use-docs/03-workshop/images/documentation.webp similarity index 100% rename from website/workshop/images/documentation.webp rename to website/docs/use-docs/03-workshop/images/documentation.webp diff --git a/website/workshop/images/generated-output-panel.webp b/website/docs/use-docs/03-workshop/images/generated-output-panel.webp similarity index 100% rename from website/workshop/images/generated-output-panel.webp rename to website/docs/use-docs/03-workshop/images/generated-output-panel.webp diff --git a/website/workshop/images/homepage.webp b/website/docs/use-docs/03-workshop/images/homepage.webp similarity index 100% rename from website/workshop/images/homepage.webp rename to website/docs/use-docs/03-workshop/images/homepage.webp diff --git a/website/workshop/images/overture-platform-overview.webp b/website/docs/use-docs/03-workshop/images/overture-platform-overview.webp similarity index 100% rename from website/workshop/images/overture-platform-overview.webp rename to website/docs/use-docs/03-workshop/images/overture-platform-overview.webp diff --git a/website/workshop/images/workshop-architecture-diagram.webp b/website/docs/use-docs/03-workshop/images/workshop-architecture-diagram.webp similarity index 100% rename from website/workshop/images/workshop-architecture-diagram.webp rename to website/docs/use-docs/03-workshop/images/workshop-architecture-diagram.webp diff --git a/website/workshop/images/workshop-portal-preview.webp b/website/docs/use-docs/03-workshop/images/workshop-portal-preview.webp similarity index 100% rename from website/workshop/images/workshop-portal-preview.webp rename to website/docs/use-docs/03-workshop/images/workshop-portal-preview.webp diff --git a/website/docs/use-docs/administration/00-building-dictionaries.md b/website/docs/use-docs/administration/00-building-dictionaries.md new file mode 100644 index 00000000..89c1c167 --- /dev/null +++ b/website/docs/use-docs/administration/00-building-dictionaries.md @@ -0,0 +1,52 @@ +# 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. + +## 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 more) 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 + +If you have a running instance, its portal includes a **Dictionary Playground** at `/dictionary/playground` — a live editor where you can write a schema and see it rendered as an interactive table in real time, no server required. + +:::tip +For the full schema reference — every restriction type, schema-level `uniqueKey`/`foreignKey` relationships, and versioning — see the [Lectern dictionary reference](/develop/Lectern/dictionaryReference). +::: diff --git a/website/guides/02-administration-guides/01-updating-the-data-model.md b/website/docs/use-docs/administration/01-building-song-schemas.md similarity index 99% rename from website/guides/02-administration-guides/01-updating-the-data-model.md rename to website/docs/use-docs/administration/01-building-song-schemas.md index 9249a03b..ddd01fe0 100644 --- a/website/guides/02-administration-guides/01-updating-the-data-model.md +++ b/website/docs/use-docs/administration/01-building-song-schemas.md @@ -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/) +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 [**Lyric, our tabular data submission service**](/develop/Lyric/overview) ::: ## Building Schemas diff --git a/website/guides/02-administration-guides/02-index-mappings.md b/website/docs/use-docs/administration/02-index-mappings.md similarity index 100% rename from website/guides/02-administration-guides/02-index-mappings.md rename to website/docs/use-docs/administration/02-index-mappings.md 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.md similarity index 98% 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.md index 48a6d1ef..10d2eaaa 100644 --- a/website/guides/02-administration-guides/03-customizing-the-data-portal.md +++ b/website/docs/use-docs/administration/03-customizing-the-data-portal.md @@ -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 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/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/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/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/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.md b/website/docs/use-docs/index.md new file mode 100644 index 00000000..d80469b1 --- /dev/null +++ b/website/docs/use-docs/index.md @@ -0,0 +1,40 @@ +--- +title: Use +slug: / +sidebar_label: Use Overture +sidebar_position: 0 +--- + +# Use Overture + +**For everyone working with an already-deployed Overture instance:** researchers +consuming and submitting data, and the administrators configuring it for them. + +## Data Consumers + +**These guides are for** researchers and analysts retrieving and exploring data from a deployed Overture portal. + +- **[File Download (Score CLI)](/use/cli-downloads):** retrieving data via the command line +- **[Conversational Data Discovery](/use/conversational-data-discovery):** asking a deployed portal questions in plain language + +## Data Submitters + +**These guides are for** anyone submitting data to an Overture platform. + +- **[File Submission (Song & Score CLI)](/use/cli-submissions):** submitting data via Song & Score's command line clients + +## Platform Administrators + +**These guides are for** informaticians and platform administrators configuring an already-running Overture instance to fit their data. + +**You will need** a running Overture instance — see the [Deploy](/deploy) journey if you haven't stood one up yet. + +- **[Building Dictionaries](/use/administration/building-dictionaries):** define the data dictionary that validates submissions and drives indexing +- **[Building Song Schemas](/use/administration/building-song-schemas):** define custom Song metadata schemas to validate submissions against your data requirements +- **[Index Mappings](/use/administration/index-mappings):** understand what index mappings are and how to configure them +- **[Customizing the Data Portal](/use/administration/customizing-the-data-portal):** customize how data is displayed in your front-end facets and table components +- **[Build a Search Portal](/use/workshop/prerequisites):** a hands-on, end-to-end tutorial covering all of the above + +:::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/docusaurus.config.ts b/website/docusaurus.config.ts index 477533e3..edce5453 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,232 @@ 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/authorization", + from: "/guides/deployment-guide/authorization", + }, + { + to: "/deploy/deployment/data-management-storage", + from: "/guides/deployment-guide/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" }, + { to: "/deploy/quickstart", 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"], + }, + ], + // 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 +294,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 +327,19 @@ const config: Config = { src: "img/Overture-logo.png", }, items: [ - { to: "/guides/getting-started", label: "Guides", position: "left" }, - { - type: "docSidebar", - sidebarId: "docsSidebar", - position: "left", - label: "Documentation", - }, + { to: "/develop", label: "Develop", position: "left" }, + { to: "/deploy", label: "Deploy", position: "left" }, + { to: "/use", label: "Use", position: "left" }, { - 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 +355,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", }, ], }, 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/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/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..5ee01ab0 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -1,17 +1,18 @@ { - "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", + "@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", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", @@ -20,56 +21,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 +93,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 +198,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" @@ -285,12 +301,12 @@ } }, "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 +315,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 +363,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 +379,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 +416,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 +446,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 +488,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 +540,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 +578,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 +595,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 +677,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 +693,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 +708,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.27.1" + "@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.29.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.29.7" }, "engines": { "node": ">=6.9.0" @@ -707,14 +739,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 +756,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 +796,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 +811,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 +826,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 +841,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 +872,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 +887,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 +904,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 +921,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 +936,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 +951,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 +967,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 +983,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 +1003,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 +1019,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 +1035,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 +1051,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 +1066,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 +1082,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 +1097,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 +1113,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 +1128,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 +1143,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 +1159,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 +1176,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 +1191,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 +1206,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 +1221,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 +1236,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 +1252,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 +1268,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 +1286,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 +1302,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 +1318,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 +1333,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 +1348,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 +1363,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 +1382,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 +1398,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 +1413,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 +1429,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 +1444,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 +1460,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 +1477,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 +1492,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 +1507,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 +1522,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 +1541,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 +1556,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 +1572,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 +1587,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 +1603,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 +1618,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 +1647,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 +1662,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 +1678,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 +1693,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 +1708,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 +1723,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 +1742,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 +1757,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 +1773,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 +1789,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 +1805,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 +1926,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 +1946,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" @@ -1956,31 +1989,31 @@ } }, "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,13 +2021,13 @@ } }, "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" @@ -2288,9 +2321,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 +2742,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 +3189,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", @@ -3379,9 +3412,9 @@ } }, "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 +3434,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 +3470,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 +3516,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 +3528,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 +3556,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 +3571,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 +3590,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 +3605,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 +3626,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 +3653,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 +3666,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 +3705,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 +3723,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 +3783,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 +3816,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 +3839,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 +3855,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 +3876,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 +3895,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 +3914,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 +3933,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 +3957,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 +3980,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 +4010,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 +4051,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 +4079,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 +4107,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 +4139,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 +4152,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 +4195,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 +4227,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 +4240,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", @@ -4400,15 +4496,16 @@ "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", @@ -4566,9 +4663,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": { @@ -5442,15 +5539,6 @@ "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==", - "license": "MIT", - "dependencies": { - "@types/estree": "*" - } - }, "node_modules/@types/body-parser": { "version": "1.19.6", "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.6.tgz", @@ -5743,9 +5831,10 @@ } }, "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==", + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.13.tgz", + "integrity": "sha512-KSVgmQmzMwPlmtljOomayoR89W4FynCAi3E8PPs7vmDVPe84hT+vGPKkJfThkmXs0x0jAaa9U8uW8bbfyS2fWw==", + "license": "MIT", "dependencies": { "@types/ms": "*" } @@ -5815,16 +5904,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": "*" @@ -5910,9 +5993,10 @@ "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", @@ -6098,9 +6182,9 @@ "license": "MIT" }, "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/@webassemblyjs/ast": { @@ -6337,11 +6421,12 @@ } }, "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/aggregate-error": { @@ -6400,34 +6485,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" @@ -6462,33 +6547,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", @@ -6523,6 +6581,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", @@ -6593,9 +6660,9 @@ } }, "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 +6679,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" @@ -6764,9 +6831,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.0", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.11.0.tgz", + "integrity": "sha512-oCu2wfipvX3AePSgmOuKkIywOu+8n9psz7hXYmk56ghpu3+7KzNIBopaOs4c9BrtdnTtW30unG9GTfHo7EwERQ==", "license": "Apache-2.0", "bin": { "baseline-browser-mapping": "dist/cli.cjs" @@ -6902,9 +6969,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 +6991,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 +7010,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" @@ -7004,6 +7071,7 @@ "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" } @@ -7122,9 +7190,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", @@ -7179,6 +7247,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" @@ -7570,7 +7639,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT" }, "node_modules/confbox": { "version": "0.2.2", @@ -7653,6 +7723,18 @@ "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", "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", @@ -7868,9 +7950,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 +7963,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 +8024,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", @@ -8101,9 +8183,9 @@ "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==" }, "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", @@ -8805,9 +8887,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" }, @@ -8968,6 +9051,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 +9073,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": { @@ -9183,9 +9267,9 @@ "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.395", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.395.tgz", + "integrity": "sha512-7zt9Aw+SrmxLWLN0zhaTWZQiCdryLVrYTq5R7iZakLvi2UQPYMMsROYV/2qVCzMeCiSXHwKOU+sZ4zOVVlrtKA==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -9391,19 +9475,6 @@ "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", @@ -9832,30 +9903,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 +9924,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", @@ -10353,43 +10400,6 @@ "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" - } - }, "node_modules/gzip-size": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", @@ -10475,9 +10485,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 +10583,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 +10600,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" }, @@ -11122,9 +11132,9 @@ "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==" }, "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": { @@ -11219,12 +11229,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" @@ -11565,9 +11575,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", @@ -12032,9 +12042,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 +12340,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", @@ -13084,9 +13094,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 +13176,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 +13459,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 +13991,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 +14006,6 @@ ], "license": "MIT", "dependencies": { - "@types/acorn": "^4.0.0", "@types/estree": "^1.0.0", "@types/unist": "^3.0.0", "devlop": "^1.0.0", @@ -14379,9 +14387,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" }, @@ -14454,9 +14463,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", @@ -14593,10 +14602,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", @@ -14668,9 +14680,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", @@ -15240,9 +15252,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.22", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.22.tgz", + "integrity": "sha512-KBDEIpLrvpv16pp3K0Fw+UCoZfopFjjgeB+0tA/aaThfEE74kKDLrgg603YvOWJyg3+WYtyq3xYsQWsIyZlPqQ==", "funding": [ { "type": "opencollective", @@ -15259,7 +15271,7 @@ ], "license": "MIT", "dependencies": { - "nanoid": "^3.3.11", + "nanoid": "^3.3.16", "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, @@ -15293,9 +15305,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 +15549,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 +15587,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 +15715,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 +15753,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 +16042,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 +16070,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 +16169,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 +16532,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 +16625,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 +16638,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", @@ -16780,9 +16792,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", @@ -17130,9 +17142,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" }, @@ -17274,9 +17287,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 +17301,9 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, "node_modules/recma-parse": { @@ -17600,9 +17616,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" @@ -17716,9 +17732,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 +17762,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", @@ -17929,11 +17945,12 @@ "license": "MIT" }, "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" @@ -18309,15 +18326,15 @@ } }, "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" @@ -18698,12 +18715,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": { @@ -18924,21 +18941,21 @@ } }, "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": { @@ -18993,9 +19010,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", @@ -19567,9 +19584,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 +19636,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 +19651,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", @@ -19807,9 +19824,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", @@ -19975,9 +19992,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", @@ -20372,75 +20389,30 @@ } }, "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": { diff --git a/website/package.json b/website/package.json index d428596a..2eb74198 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,10 +15,11 @@ "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", + "@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", "clsx": "^2.0.0", "prism-react-renderer": "^2.3.0", @@ -27,9 +28,9 @@ "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" }, "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/FundingStatment/index.tsx b/website/src/components/FundingStatment/index.tsx index e8d38297..b79ad029 100644 --- a/website/src/components/FundingStatment/index.tsx +++ b/website/src/components/FundingStatment/index.tsx @@ -6,7 +6,7 @@ const FundingStatement: React.FC = () => (

Supported by

- Grant #U24CA253529 from the National Cancer Institute at the US National Institutes of Health + Grant #U24CA253529 from the National Cancer Institute at the US National Institutes of Health, and by the Digital Research Alliance of Canada

diff --git a/website/src/components/SiteMap/index.tsx b/website/src/components/SiteMap/index.tsx index cb89d888..30c4131b 100644 --- a/website/src/components/SiteMap/index.tsx +++ b/website/src/components/SiteMap/index.tsx @@ -1,194 +1,57 @@ import React from "react"; +import clsx from "clsx"; import Heading from "@theme/Heading"; import styles from "./styles.module.css"; -import iconSong from "./icons/icon-song.png"; -import iconScore from "./icons/icon-score.png"; -import iconMaestro from "./icons/icon-maestro.png"; -import iconArranger from "./icons/icon-arranger.png"; -import iconStage from "./icons/icon-stage.png"; -import iconLyric from "./icons/icon-lyric.png"; -import iconLectern from "./icons/icon-lectern.png"; +type JourneyKey = "develop" | "deploy" | "use"; -interface Product { - title: string; - link: string; - image?: string; - description: string; - category: string; -} - -interface Category { +interface Journey { title: string; description: string; + link: string; } -const categories: Record = { - platform: { - title: "Platform Tools", - description: "Bringing it all together", - }, - guides: { - title: "Platform Documentation", - description: "Platform focused guides", - }, - core: { - title: "Developer Documentation", - description: "Using our software in a development context", - }, - development: { - title: "Under Development", - description: "New components not quite ready for production", +const journeys: Record = { + develop: { + title: "Develop", + description: "For developers building on, and extending Overture services.", + link: "/develop", + }, + deploy: { + title: "Deploy", + description: + "For platform teams standing up and operating Overture platforms.", + link: "/deploy", }, - standards: { - title: "Documentation Standards", + use: { + title: "Use", description: - "Forming the foundation of documentation and development practice", + "For data consumers, submitters and administrators interacting with Overture platforms & services.", + link: "/use", }, }; -const products: Product[] = [ - { - title: "Platform Development Toolkit", - link: "/docs/platform-tools/Prelude", - description: "Prelude", - category: "platform", - }, - { - title: "Local Demo Portal", - link: "/docs/platform-tools/Quickstart", - description: "Quickstart", - category: "platform", - }, - { - title: "Deployment Docs", - link: "/guides/deployment-guide/", - description: "Deploying to Production", - category: "guides", - }, - { - title: "Administration Guides", - link: "/guides/administration-guides/", - description: "Management & Customization", - category: "guides", - }, - { - title: "User Guides", - link: "/guides/user-guides/", - description: "Interacting with the platform", - category: "guides", - }, - { - title: "API Reference", - link: "/guides/api-reference", - description: "Interacting with the platform's APIs", - category: "guides", - }, - { - title: "Dictionary Management", - link: "/docs/core-software/lectern/overview", - image: iconLectern, - description: "Lectern", - category: "core", - }, - { - title: "File Management", - link: "docs/core-software/song/overview", - image: iconSong, - description: "Song", - category: "core", - }, - { - title: "File Transfer", - link: "/docs/core-software/score/overview", - image: iconScore, - description: "Score", - category: "core", - }, - { - title: "Indexing Service", - link: "/docs/core-software/maestro/overview", - image: iconMaestro, - description: "Maestro", - category: "core", - }, - { - title: "Search API", - link: "/docs/core-software/arranger/overview", - image: iconArranger, - description: "Arranger", - category: "core", - }, - { - title: "Web Portal", - link: "/docs/core-software/stage/overview", - image: iconStage, - description: "Stage", - category: "core", - }, - { - title: "Dictionary Viewers", - link: "/docs/under-development/lecternViewer/", - description: "Lectern Viewer", - category: "development", - }, - // { - // title: "Arranger Charts", - // link: "/docs/development/arrangercharts/", - // description: "Visualized Cohort Browsing", - // category: "development", - // }, - { - title: "Tabular Data Submission", - link: "/docs/development/lyric/", - description: "Lyric", - category: "development", - }, - { - title: "Docs Site", - link: "/docs/documentation-standards/docsSite", - description: "Documentation website info", - category: "standards", - }, - { - title: "Documenting Projects", - link: "/docs/documentation-standards/github", - description: "Organization Standards", - category: "standards", - }, - { - title: "Documenting Software", - link: "/docs/documentation-standards/Software/", - description: "Software Standards", - category: "standards", - }, -]; - -const Card = ({ title, description, link, image }) => ( - - {image && ( - {`${title} - )} - - {title} - -

{description}

-
-); +const PickerTile = ({ journeyKey }: { journeyKey: JourneyKey }) => { + const journey = journeys[journeyKey]; + return ( + + + {journey.title} + +

{journey.description}

+ Browse {journey.title} → +
+ ); +}; -const CategorySection = ({ category, items }) => ( -
- - {categories[category].title} - -

- {categories[category].description} -

-
- {items.map((props, idx) => ( - - ))} -
+const PickerRow = () => ( +
+ + +
); @@ -201,9 +64,9 @@ const FundingBadge = () => (

Overture is supported by grant #U24CA253529 from the National Cancer Institute at the US National Institutes of Health, and additional - funding from Genome Canada, the Canada Foundation for Innovation, the - Canadian Institutes of Health Research, Canarie, and the Ontario - Institute for Cancer Research. + funding from the Digital Research Alliance of Canada, Genome Canada, the + Canada Foundation for Innovation, the Canadian Institutes of Health + Research, Canarie, and the Ontario Institute for Cancer Research.

Learn More @@ -212,42 +75,13 @@ const FundingBadge = () => (
); -const SiteMap = () => { - const categorizedProducts = products.reduce((acc, product) => { - (acc[product.category] = acc[product.category] || []).push(product); - return acc; - }, {}); - - const rightColumnCategories = ["platform", "guides"]; - const leftColumnCategories = ["core", "development"]; - - return ( -
-
-
-
- {leftColumnCategories.map((category) => ( - - ))} -
-
- {rightColumnCategories.map((category) => ( - - ))} -
-
- -
-
- ); -}; +const SiteMap = () => ( +
+
+ + +
+
+); export default SiteMap; diff --git a/website/src/components/SiteMap/styles.module.css b/website/src/components/SiteMap/styles.module.css index 4a22fa70..731b4a6f 100644 --- a/website/src/components/SiteMap/styles.module.css +++ b/website/src/components/SiteMap/styles.module.css @@ -11,107 +11,64 @@ padding: 0 1rem; } -/* Category sections */ -.categorySection { - background-color: var(--category-category-color); - border-radius: 15px; - padding: 2rem; - box-shadow: var(--category-block-shadow); -} - -.categoryHeader, -.categorySubheader { - color: var(--category-title-color); -} - -.categoryHeader { - margin-bottom: 0.5rem; - font-size: 1.5rem; - font-weight: 700; -} - -.categorySubheader { - font-size: 1rem; - opacity: 0.8; -} - -/* Card grid */ -.cardGrid { +/* ---- Journey picker row: three equal, identically-shaped tiles ---- */ +.pickerRow { display: flex; - flex-wrap: wrap; - gap: 1rem; + gap: 1.5rem; } -/* Card styles */ -.card { +.pickerTile { --card-shadow: 0 1px 2px rgba(0, 0, 0, 0.1); - --card-shadow-hover: 0 1px 2px rgba(0, 0, 0, 0.15); + --card-shadow-hover: 0 4px 10px rgba(0, 0, 0, 0.15); - flex: 1 1 calc(50% - 0.5rem); - min-width: 100px; + flex: 1; display: flex; flex-direction: column; - align-items: center; - padding: 1rem; - border-radius: 10px; - background-color: var(--category-card-color); + gap: 0.6rem; + background-color: var(--category-category-color); + border-radius: 15px; + padding: 1.75rem; box-shadow: var(--card-shadow); - transition: transform 0.3s ease, box-shadow 0.3s ease; + transition: transform 0.2s ease, box-shadow 0.2s ease; } -.card:hover, -.card:focus { +.pickerTile:hover, +.pickerTile:focus { transform: translateY(-2px); box-shadow: var(--card-shadow-hover); text-decoration: none; outline: none; } -.cardImage { - width: 46px; - height: 46px; - margin-bottom: 0.5rem; - object-fit: contain; -} - -.cardTitle { - font-size: 1rem; - font-weight: 600; - text-align: center; +.pickerTitle { + margin: 0; + font-size: 1.3rem; + font-weight: 700; color: var(--category-title-color); - margin-bottom: 0.5rem; -} - -.cardDescription { - font-size: 0.8rem; - text-align: center; - color: var(--ifm-color-emphasis-800); - margin-bottom: 0; } -/* Mosaic grid layout */ -.mosaicLayout { - display: flex; - gap: 2rem; -} - -.mosaicLayout .leftColumn, -.mosaicLayout .rightColumn { - flex: 1; - display: flex; - flex-direction: column; +.pickerDescription { + font-size: 0.95rem; + line-height: 1.5; + color: var(--category-title-color); + opacity: 0.8; + margin: 0; } -.mosaicLayout .leftColumn { - gap: 2rem; +.pickerGo { + margin-top: auto; + padding-top: 0.5rem; + font-size: 0.85rem; + font-weight: 700; + color: var(--journey-develop-color); } -.mosaicLayout .rightColumn { - gap: 2rem; +.pickerTile.deploy .pickerGo { + color: var(--journey-deploy-color); } -.mosaicLayout .rightColumn .cardTitle { - padding-top: 0.5rem; +.pickerTile.use .pickerGo { + color: var(--journey-use-color); } /* Funding section */ @@ -131,15 +88,18 @@ } .fundingTitle { - font-size: 1.8rem; + font-size: 1.3rem; + font-weight: 700; margin-bottom: 1rem; color: var(--category-title-color); } .fundingDescription { - font-size: 1.1rem; + font-size: 0.95rem; + line-height: 1.5; margin-bottom: 1.5rem; - color: var(--ifm-color-emphasis-800); + color: var(--category-title-color); + opacity: 0.8; } .fundingLink { @@ -161,43 +121,14 @@ } /* Responsive styles */ -@media (max-width: 1200px) { - .mosaicLayout { +@media (max-width: 900px) { + .pickerRow { flex-direction: column; } } @media (max-width: 768px) { - .card { - flex: 1 1 100%; - } - - .cardImage { - width: 50px; - height: 50px; - } - - .cardTitle, - .cardDescription { - width: 100%; - text-align: center; - } - .fundingBadge { padding: 1.5rem; } - - .fundingTitle { - font-size: 1.5rem; - } - - .fundingDescription { - font-size: 1rem; - } - - .mosaicLayout .rightColumn .card { - flex-direction: column; - text-align: left; - align-items: flex-start; - } } diff --git a/website/src/components/SwaggerAPIDoc/index.tsx b/website/src/components/SwaggerAPIDoc/index.tsx index 7c3a11fb..ff7dd8e6 100644 --- a/website/src/components/SwaggerAPIDoc/index.tsx +++ b/website/src/components/SwaggerAPIDoc/index.tsx @@ -1,28 +1,35 @@ import React from 'react'; import SwaggerUI from 'swagger-ui-react'; import 'swagger-ui-react/swagger-ui.css'; +import styles from './swagger-overrides.module.css'; import songAPISpec from './songAPI.json'; import scoreAPISpec from './scoreAPI.json'; import maestroAPISpec from './maestroAPI.json'; +import lyricAPISpec from './lyricAPI.json'; +import lecternAPISpec from './lecternAPI.json'; const specs = { song: songAPISpec, score: scoreAPISpec, - maestro: maestroAPISpec + maestro: maestroAPISpec, + lyric: lyricAPISpec, + lectern: lecternAPISpec }; const SwaggerAPIDoc = ({ specName = 'song' }) => { const spec = specs[specName] || songAPISpec; return ( - +
+ +
); }; diff --git a/website/src/components/SwaggerAPIDoc/lecternAPI.json b/website/src/components/SwaggerAPIDoc/lecternAPI.json new file mode 100644 index 00000000..17e314cd --- /dev/null +++ b/website/src/components/SwaggerAPIDoc/lecternAPI.json @@ -0,0 +1,1208 @@ +{ + "openapi": "3.0.0", + "info": { + "title": "Lectern", + "version": "0.0.0" + }, + "paths": { + "/dictionaries": { + "get": { + "summary": "Get dictionaries stored in lectern", + "description": "Returns list of dictionaries", + "parameters": [ + { + "name": "name", + "description": "name of dictionary", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "description": "version of dictionary", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/ShowReferences" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DictionaryListResponse" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "500": { + "description": "Internal server error" + } + }, + "tags": [ + "Dictionaries" + ] + }, + "post": { + "summary": "Create a new dictionary in lectern", + "description": "Saves the provided dictionary in lectern. Must not conflict with a previous dictionary name and version business key", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDictionary" + } + } + }, + "description": "The dictionary to be saved", + "required": true + }, + "security": [ + { + "Bearer": [] + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}": { + "get": { + "summary": "Get a single dictionary", + "description": "Get single dictionary stored in lectern by mongo id", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/ShowReferences" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}/schemas": { + "post": { + "summary": "Add a schema to an existing dictionary", + "description": "Update a dictionary by adding a new schema. The dictionary will be updated to the next major version number. ", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/FileSchema" + }, + "security": [ + { + "Bearer": [] + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + }, + "put": { + "summary": "Update an existing schema in a dictionary", + "description": "Updates an existing file schema in a dictionary and updates the version to the next minor version.", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "major", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/FileSchema" + }, + "security": [ + { + "Bearer": [] + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}/schemas/{schemaName}": { + "get": { + "summary": "Get a single schema", + "description": "Get all details of a schema from a specific dictionary. Results will have references replaced.", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "schemaName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Schema" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}/schemas/{schemaName}/fields/{fieldName}": { + "get": { + "summary": "Get a single field", + "description": "Get all details of a field, found in a named schema from a specific dictionary. Results will have references replaced.", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "schemaName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fieldName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Field" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/diff": { + "get": { + "summary": "Compare differences between dictionaries", + "description": "Computes the difference between dictionaries at the field level", + "parameters": [ + { + "name": "name", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "left", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "right", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/ShowReferences" + } + ], + "responses": { + "200": { + "description": "The computed diff", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DiffResponse" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/template/download": { + "get": { + "summary": "Download dictionary templates", + "description": "Downloads a ZIP file containing TSV template files for each schema in a dictionary, given its name and version.", + "tags": [ + "Dictionaries" + ], + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of the dictionary to download", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the dictionary to download", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fileType", + "in": "query", + "description": "Select the format of the file to download - either `tsv` or `csv`. Defaults to `tsv` if not provided.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "tsv", + "csv" + ] + } + }, + { + "name": "schemaName", + "in": "query", + "description": "Name of the schema to download", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ZIP file containing dictionary templates", + "content": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Missing dictionary name or version" + }, + "404": { + "description": "Dictionary not found" + }, + "500": { + "description": "Failed to generate template zip" + } + }, + "security": [ + { + "Bearer": [] + } + ] + } + } + }, + "servers": [ + { + "url": "/" + } + ], + "components": { + "parameters": { + "ShowReferences": { + "name": "references", + "summary": "show references in schema response", + "description": "If true, the schema references will be left in the response. By default, all references are replaced with their referenced values.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + }, + "requestBodies": { + "FileSchema": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "file schema", + "required": true + } + }, + "securitySchemes": { + "Bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + }, + "schemas": { + "Dictionary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the dictionary" + }, + "description": { + "type": "string", + "required": false, + "description": "Description of the schema" + }, + "version": { + "type": "string", + "description": "Version of the dictionary" + }, + "schemas": { + "type": "array", + "description": "Set of file dictionaries describing the schemas for this dictionary version", + "items": { + "$ref": "#/components/schemas/Schema" + } + } + } + }, + "Schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the Schema" + }, + "description": { + "type": "string", + "description": "Description of the schema" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + } + } + } + }, + "Field": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the Field" + }, + "description": { + "type": "string", + "description": "Description of the field" + }, + "meta": { + "type": "object", + "description": "Custom properties describing context specific details for the field" + }, + "restrictions": { + "type": "object", + "description": "Rules enforced by lectern validation clients" + } + } + }, + "CreateDictionary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the parameter" + }, + "version": { + "type": "string", + "description": "Version of the dictionary" + }, + "schemas": { + "type": "array", + "description": "Set of file dictionaries describing the schemas for this dictionary version", + "items": { + "type": "object" + } + } + } + }, + "DictionaryListEntry": { + "type": "object", + "properties": { + "_id": { + "type": "string", + "description": "Internal database ID." + }, + "name": { + "type": "string", + "description": "The name of the Dictionary." + }, + "description": { + "type": "string", + "description": "Description of the Dictionary.", + "required": false + }, + "version": { + "type": "string", + "description": "Version of the Dictionary." + }, + "createdAt": { + "type": "string", + "description": "ISO formatted date that the Dictionary was created." + } + } + }, + "DictionaryListResponse": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DictionaryListEntry" + } + }, + "DiffItem": { + "type": "object", + "properties": { + "left": { + "type": "object" + }, + "right": { + "type": "object" + }, + "diff": { + "type": "object" + } + } + }, + "DiffResponse": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DiffItem" + } + } + } + }, + "default": { + "openapi": "3.0.0", + "info": { + "title": "Lectern", + "version": "0.0.0" + }, + "paths": { + "/dictionaries": { + "get": { + "summary": "Get dictionaries stored in lectern", + "description": "Returns list of dictionaries", + "parameters": [ + { + "name": "name", + "description": "name of dictionary", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "description": "version of dictionary", + "in": "query", + "required": false, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/ShowReferences" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DictionaryListResponse" + } + } + } + }, + "400": { + "description": "Bad Request" + }, + "500": { + "description": "Internal server error" + } + }, + "tags": [ + "Dictionaries" + ] + }, + "post": { + "summary": "Create a new dictionary in lectern", + "description": "Saves the provided dictionary in lectern. Must not conflict with a previous dictionary name and version business key", + "requestBody": { + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/CreateDictionary" + } + } + }, + "description": "The dictionary to be saved", + "required": true + }, + "security": [ + { + "Bearer": [] + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}": { + "get": { + "summary": "Get a single dictionary", + "description": "Get single dictionary stored in lectern by mongo id", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/ShowReferences" + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}/schemas": { + "post": { + "summary": "Add a schema to an existing dictionary", + "description": "Update a dictionary by adding a new schema. The dictionary will be updated to the next major version number. ", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/FileSchema" + }, + "security": [ + { + "Bearer": [] + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + }, + "put": { + "summary": "Update an existing schema in a dictionary", + "description": "Updates an existing file schema in a dictionary and updates the version to the next minor version.", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "major", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + ], + "requestBody": { + "$ref": "#/components/requestBodies/FileSchema" + }, + "security": [ + { + "Bearer": [] + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Dictionary" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}/schemas/{schemaName}": { + "get": { + "summary": "Get a single schema", + "description": "Get all details of a schema from a specific dictionary. Results will have references replaced.", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "schemaName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Schema" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/{dictionaryId}/schemas/{schemaName}/fields/{fieldName}": { + "get": { + "summary": "Get a single field", + "description": "Get all details of a field, found in a named schema from a specific dictionary. Results will have references replaced.", + "parameters": [ + { + "name": "dictionaryId", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "schemaName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fieldName", + "in": "path", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/Field" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/diff": { + "get": { + "summary": "Compare differences between dictionaries", + "description": "Computes the difference between dictionaries at the field level", + "parameters": [ + { + "name": "name", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "left", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "right", + "in": "query", + "required": true, + "schema": { + "type": "string" + } + }, + { + "$ref": "#/components/parameters/ShowReferences" + } + ], + "responses": { + "200": { + "description": "The computed diff", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/DiffResponse" + } + } + } + } + }, + "tags": [ + "Dictionaries" + ] + } + }, + "/dictionaries/template/download": { + "get": { + "summary": "Download dictionary templates", + "description": "Downloads a ZIP file containing TSV template files for each schema in a dictionary, given its name and version.", + "tags": [ + "Dictionaries" + ], + "parameters": [ + { + "name": "name", + "in": "query", + "description": "Name of the dictionary to download", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "version", + "in": "query", + "description": "Version of the dictionary to download", + "required": true, + "schema": { + "type": "string" + } + }, + { + "name": "fileType", + "in": "query", + "description": "Select the format of the file to download - either `tsv` or `csv`. Defaults to `tsv` if not provided.", + "required": false, + "schema": { + "type": "string", + "enum": [ + "tsv", + "csv" + ] + } + }, + { + "name": "schemaName", + "in": "query", + "description": "Name of the schema to download", + "required": false, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "ZIP file containing dictionary templates", + "content": { + "application/zip": { + "schema": { + "type": "string", + "format": "binary" + } + } + } + }, + "400": { + "description": "Missing dictionary name or version" + }, + "404": { + "description": "Dictionary not found" + }, + "500": { + "description": "Failed to generate template zip" + } + }, + "security": [ + { + "Bearer": [] + } + ] + } + } + }, + "servers": [ + { + "url": "/" + } + ], + "components": { + "parameters": { + "ShowReferences": { + "name": "references", + "summary": "show references in schema response", + "description": "If true, the schema references will be left in the response. By default, all references are replaced with their referenced values.", + "in": "query", + "required": false, + "schema": { + "type": "boolean" + } + } + }, + "requestBodies": { + "FileSchema": { + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + }, + "description": "file schema", + "required": true + } + }, + "securitySchemes": { + "Bearer": { + "type": "apiKey", + "name": "Authorization", + "in": "header" + } + }, + "schemas": { + "Dictionary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the dictionary" + }, + "description": { + "type": "string", + "required": false, + "description": "Description of the schema" + }, + "version": { + "type": "string", + "description": "Version of the dictionary" + }, + "schemas": { + "type": "array", + "description": "Set of file dictionaries describing the schemas for this dictionary version", + "items": { + "$ref": "#/components/schemas/Schema" + } + } + } + }, + "Schema": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the Schema" + }, + "description": { + "type": "string", + "description": "Description of the schema" + }, + "fields": { + "type": "array", + "items": { + "$ref": "#/components/schemas/Field" + } + } + } + }, + "Field": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "Name of the Field" + }, + "description": { + "type": "string", + "description": "Description of the field" + }, + "meta": { + "type": "object", + "description": "Custom properties describing context specific details for the field" + }, + "restrictions": { + "type": "object", + "description": "Rules enforced by lectern validation clients" + } + } + }, + "CreateDictionary": { + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "The name of the parameter" + }, + "version": { + "type": "string", + "description": "Version of the dictionary" + }, + "schemas": { + "type": "array", + "description": "Set of file dictionaries describing the schemas for this dictionary version", + "items": { + "type": "object" + } + } + } + }, + "DictionaryListEntry": { + "type": "object", + "properties": { + "_id": { + "type": "string", + "description": "Internal database ID." + }, + "name": { + "type": "string", + "description": "The name of the Dictionary." + }, + "description": { + "type": "string", + "description": "Description of the Dictionary.", + "required": false + }, + "version": { + "type": "string", + "description": "Version of the Dictionary." + }, + "createdAt": { + "type": "string", + "description": "ISO formatted date that the Dictionary was created." + } + } + }, + "DictionaryListResponse": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DictionaryListEntry" + } + }, + "DiffItem": { + "type": "object", + "properties": { + "left": { + "type": "object" + }, + "right": { + "type": "object" + }, + "diff": { + "type": "object" + } + } + }, + "DiffResponse": { + "type": "array", + "items": { + "$ref": "#/components/schemas/DiffItem" + } + } + } + } + } +} \ No newline at end of file diff --git a/website/src/components/SwaggerAPIDoc/lyricAPI.json b/website/src/components/SwaggerAPIDoc/lyricAPI.json new file mode 100644 index 00000000..334c32a6 --- /dev/null +++ b/website/src/components/SwaggerAPIDoc/lyricAPI.json @@ -0,0 +1 @@ +{"failOnErrors":true,"openapi":"3.0.1","info":{"title":"Lyric","version":"0.0.0-dev"},"externalDocs":{"url":"/api-docs/openapi.json","description":"OpenAPI Spec (JSON)"},"paths":{"/audit/category/{categoryId}/organization/{organization}":{"get":{"summary":"Retrieve change history of stored data","tags":["Audit"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/path/Organization"},{"name":"entityName","description":"Filter events based on entity name","in":"query","required":false},{"name":"eventType","description":"Filter events based on their type. Supported values inlude 'update' and 'delete'. If not provided all events will be returned","in":"query","required":false,"schema":{"type":"string","enum":["update","delete","migration"]}},{"name":"systemId","description":"Filter events by System ID","in":"query","required":false},{"name":"startDate","description":"Filter events to include only those that occur on or after the specified date. Date specified in ISO format (YYYY-MM-DD)","in":"query","required":false},{"name":"endDate","description":"Filter events to include only those that occur on or before the specified date. Date specified in ISO format (YYYY-MM-DD)","in":"query","required":false},{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"Optional query parameter to specify the page number of the results. Default value is 1"},{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer"},"description":"Optional query parameter to specify the number of results per page. Default value is 20"}],"responses":{"200":{"description":"Change history","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ChangeHistorySummaryResult"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/category":{"get":{"summary":"List all categories","tags":["Category"],"responses":{"200":{"description":"List all categories","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListAllCategories"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/category/{categoryId}":{"get":{"summary":"Retrieve details of a specific category","description":"Accepts either the category's numeric id or its alias. Aliases are rejected outright if they're purely numeric, so this collision shouldn't arise through normal API usage; as a defense in depth, if a value could still match both a category's numeric id and a different category's alias, the numeric id wins, so a category can never become unreachable by its own id.","tags":["Category"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"}],"responses":{"200":{"description":"Category Details","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDetails"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/category/{categoryId}/alias":{"put":{"summary":"Assign an alias to a category","description":"Sets a category's alias. Succeeds when the category has no alias yet, or when the requested alias matches its existing one (idempotent retry). Changing an already-set alias to a different value isn't supported yet, use DELETE then PUT instead.","tags":["Category"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"alias":{"type":"string","description":"A human-readable identifier for the category, usable anywhere a categoryId is accepted. It isn't permanent: it can be cleared or reassigned to a different category later. Letters, numbers, hyphens, underscores, and periods only. A purely numeric value (e.g. `5`) is rejected, since it could collide with a category's numeric id; a value containing a decimal point (e.g. `2.5`) is allowed, including as a data version label."}},"required":["alias"]}}}},"responses":{"200":{"description":"The category, with its alias set","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategorySummary"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/StatusConflict"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}},"delete":{"summary":"Clear a category's alias","description":"Removes a category's alias, freeing it for reuse. Idempotent: a category with no alias returns 200 rather than an error.","tags":["Category"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"}],"responses":{"200":{"description":"The category, with its alias cleared","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategorySummary"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/data/category/{categoryId}":{"get":{"summary":"Retrieve Submitted Data for a specific Category","tags":["Data"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"name":"entityName","description":"Array of strings to filter by entity names. Incompatible with `compound` view","in":"query","required":false,"schema":{"collectionFormat":"multi","type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/query/Page"},{"$ref":"#/components/parameters/query/PageSize"},{"$ref":"#/components/parameters/query/View"}],"responses":{"200":{"description":"Submitted Data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSubmittedDataResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/data/category/{categoryId}/id/{systemId}":{"get":{"summary":"Retrieve Submitted Data Record for a System ID","tags":["Data"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"name":"systemId","in":"path","required":true,"schema":{"type":"string"},"description":"ID of the record"},{"$ref":"#/components/parameters/query/View"}],"responses":{"200":{"description":"Submitted Data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmittedDataRecord"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/data/category/{categoryId}/organization/{organization}":{"get":{"summary":"Retrieve Submitted Data for a specific Category and Organization","tags":["Data"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/path/Organization"},{"name":"entityName","description":"Array of strings to filter by entity names. Incompatible with `compound` view","in":"query","required":false,"schema":{"collectionFormat":"multi","type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/query/Page"},{"$ref":"#/components/parameters/query/PageSize"},{"$ref":"#/components/parameters/query/View"}],"responses":{"200":{"description":"Submitted Data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSubmittedDataResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/data/category/{categoryId}/organization/{organization}/query":{"post":{"summary":"Retrieve Submitted Data filtered by search parameters provided in the request body","tags":["Data"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/path/Organization"},{"name":"entityName","description":"Array of strings to filter by entity names","in":"query","required":false,"schema":{"collectionFormat":"multi","type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/query/Page"},{"$ref":"#/components/parameters/query/PageSize"}],"requestBody":{"description":"Custom filter SQON Notation to provide a flexible system for combining filters in a JSON object format. Find more documentation on https://github.com/overture-stack/sqon-builder","required":true,"content":{"application/json":{"schema":{"type":"object","description":"A SQON object"},"examples":{"in":{"summary":"In - Field must match the provided value or be included in the array of values.","value":{"op":"and","content":[{"op":"in","content":{"fieldName":"name","value":["Bob"]}}]}},"not":{"summary":"Not in - Field must not match the provided value or not to be included in the array of values.","value":{"op":"not","content":[{"op":"in","content":{"fieldName":"name","value":["Tom"]}}]}},"gt":{"summary":"Greater Than - field value must be greater than the given number","value":{"op":"and","content":[{"op":"gt","content":{"fieldName":"years","value":21}}]}},"lt":{"summary":"Lesser Than - field value must be lesser than the given number","value":{"op":"and","content":[{"op":"lt","content":{"fieldName":"years","value":100}}]}},"combination":{"summary":"Every SQON can be combined with other SQONs through the boolean combinations 'and', 'or', and 'not'","value":{"op":"or","content":[{"op":"in","content":{"fieldName":"name","value":["Bob"]}},{"op":"gt","content":{"fieldName":"score","value":100}}]}}}}}},"responses":{"200":{"description":"Submitted Data","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetSubmittedDataResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/data/category/{categoryId}/stream":{"get":{"summary":"Stream Submitted Data for a specific Category","tags":["Data"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/query/View"},{"name":"entityName","description":"Array of strings to filter by entity names. Incompatible with `compound` view","in":"query","required":false,"schema":{"collectionFormat":"multi","type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"Submitted Data","content":{"application/x-ndjson":{"schema":{"$ref":"#/components/schemas/SubmittedDataRecord"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/dictionary/register":{"post":{"summary":"Register a dictionary to a category. Creates the category if it does not exist, or updates its active dictionary and triggers a data migration to validate and update existing data against the new dictionary.","tags":["Dictionary"],"parameters":[{"name":"force","description":"Retries migration for this category only when the same dictionary is already registered and the most recent migration previously failed. If there is no previous failed migration, this flag is ignored.","in":"query","required":false,"schema":{"type":"boolean","default":false}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"alias":{"type":"string","description":"An optional, human-readable identifier for the category, usable anywhere a categoryId is accepted, in place of the numeric id. Doesn't change on its own the way an auto-generated token might, though it can be cleared or reassigned via PUT/DELETE /category/{categoryId}/alias, it isn't permanent the way the numeric id is. Letters, numbers, hyphens, underscores, and periods only; an empty string is treated as not provided. A purely numeric value (e.g. `5`) is rejected, since it could collide with a category's numeric id; a value containing a decimal point (e.g. `2.5`) is allowed, including as a data version label. Can only be set here at category creation; supplying it while registering onto an existing category returns 400. Use PUT/DELETE /category/{categoryId}/alias to add or remove one afterward; changing an already-set alias isn't supported yet."},"categoryName":{"type":"string","description":"A user-defined classification to group and organize data based on shared characteristics or criteria"},"defaultCentricEntity":{"type":"string","description":"The default centric entity name"},"dictionaryName":{"type":"string","description":"A matching Dictionary Name defined on Dictionary Manager (Lectern)"},"dictionaryVersion":{"type":"string","description":"A matching Dictionary Version defined on Dictionary Manager (Lectern)"}},"required":["categoryName","dictionaryName","dictionaryVersion"]}}}},"responses":{"200":{"description":"Dictionary info","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterDictionaryResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"409":{"$ref":"#/components/responses/StatusConflict"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/dictionary/category/{categoryId}":{"get":{"summary":"Get schema JSON for a specific dictionary by ID and schema name","tags":["Dictionary"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"}],"responses":{"200":{"description":"Dictionary schema JSON","content":{"application/json":{"schema":{"type":"object","description":"The schema definition JSON"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/dictionary/category/{categoryId}/templates":{"get":{"summary":"Download data file templates for a dictionary","tags":["Dictionary"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"name":"fileType","in":"query","required":false,"schema":{"type":"string","enum":["csv","tsv"]},"description":"File type for the templates"}],"responses":{"200":{"description":"A ZIP file containing all the templates","content":{"application/zip":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"}}}},"/health":{"get":{"summary":"Check readiness of the service","tags":["Health"],"responses":{"200":{"description":"Returns a 200 OK status code if the application is considered healthy and ready to receive traffic","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Health"}}}}}}},"/migration/category/{categoryId}":{"get":{"summary":"Retrieve the Migrations for a category","tags":["Migration"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/query/Page"},{"$ref":"#/components/parameters/query/PageSize"}],"responses":{"200":{"description":"List of Migrations","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMigrationsResult"}}}},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/migration/{migrationId}":{"get":{"summary":"Get Migration general information by ID","tags":["Migration"],"parameters":[{"$ref":"#/components/parameters/path/MigrationId"}],"responses":{"200":{"description":"Migration general information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MigrationResult"}}}},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/migration/{migrationId}/records":{"get":{"summary":"Retrieve the records for a migration","tags":["Migration"],"parameters":[{"$ref":"#/components/parameters/path/MigrationId"},{"isInvalid":null,"description":"Optional query parameter to filter results to include only invalid records. Default is to include all records.","name":"isInvalid","in":"query","schema":{"type":"boolean"},"required":false},{"$ref":"#/components/parameters/query/Page"},{"$ref":"#/components/parameters/query/PageSize"}],"responses":{"200":{"description":"List of Migration records","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListMigrationRecordsResult"}}}},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/ping":{"get":{"summary":"Status of the service","tags":["Ping"],"responses":{"200":{"description":"Status"}}}},"/submission/{submissionId}":{"get":{"summary":"Get submission information by ID","tags":["Submission"],"parameters":[{"name":"submissionId","in":"path","type":"string","required":true}],"responses":{"200":{"description":"Submission information","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionResult"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}},"delete":{"summary":"Close an Active Submission by ID","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/SubmissionId"},{"$ref":"#/components/parameters/query/ForceDeleteSubmission"}],"responses":{"200":{"description":"Submission closed successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSubmissionResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/StatusConflict"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/submission/{submissionId}/details":{"get":{"summary":"Fetch Submission Data records. Sorted in their original file order and grouped by `inserts`, `updates`, and `deletes`.","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/SubmissionId"},{"name":"actionTypes","in":"query","schema":{"type":"array","items":{"type":"string","enum":["inserts","updates","deletes"]}},"uniqueItems":true,"description":"Filters the Submission Data records by action type. Valid values are `inserts`, `updates`, and `deletes` (case insensitive). If not provided, all action types are returned."},{"name":"entityNames","in":"query","schema":{"type":"array","items":{"type":"string"}},"uniqueItems":true,"description":"Filters the Submission Data records by entity name. Must match names listed in the Submission Summary endpoint. If not provided, all entity names are returned."},{"$ref":"#/components/parameters/query/Page"},{"$ref":"#/components/parameters/query/PageSize"}],"responses":{"200":{"description":"Full submission payload","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SubmissionDetailsResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/submission/{submissionId}/{actionType}":{"delete":{"summary":"Clear Active Submission by entity name","tags":["Submission"],"parameters":[{"name":"submissionId","in":"path","type":"string","required":true,"description":"The ID of the Submission"},{"name":"actionType","in":"path","required":true,"schema":{"type":"string","enum":["inserts","updates","deletes"]},"description":"Parameter to specify the type of record to remove from the Submission. Must be one of `inserts`, `updates`, or `deletes` (case insensitive)"},{"name":"entityName","in":"query","type":"string","required":true,"description":"The name of the entity"},{"name":"index","in":"query","required":false,"schema":{"type":"integer"},"description":"An optional query parameter used to specify the index of the item within the submission type to be deleted.
If not provided all the items within the submission type will be deleted."}],"responses":{"200":{"description":"Submission cleared successfully. Returns the current Active Submission","content":{"application/json":{"schema":{"$ref":"#/components/schemas/DeleteSubmissionEntityResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/StatusConflict"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/submission/category/{categoryId}":{"get":{"summary":"Retrieve the Submissions for a category in this user session","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/query/Page"},{"$ref":"#/components/parameters/query/PageSize"},{"$ref":"#/components/parameters/query/OnlyActive"},{"$ref":"#/components/parameters/query/OrganizationFilter"},{"$ref":"#/components/parameters/query/Username"}],"responses":{"200":{"description":"List of Submissions","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ListSubmissionsResult"}}}},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/submission/category/{categoryId}/commit/{submissionId}":{"post":{"summary":"Commit Active Submission","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"name":"submissionId","in":"path","type":"string","required":true}],"responses":{"200":{"description":"Commit Submission Result","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommitSubmissionResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"409":{"$ref":"#/components/responses/StatusConflict"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/submission/category/{categoryId}/data":{"post":{"summary":"Add new data to a submission for the specified category. Data is provided as JSON in the request body.","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/query/EntityName"},{"$ref":"#/components/parameters/query/Organization"}],"requestBody":{"description":"The JSON payload containing the data to be added to the submission","required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"responses":{"200":{"description":"Submission accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubmissionResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}},"put":{"summary":"Modifies existing data for a submission. Data is provided as JSON in the request body.","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/query/EntityName"},{"$ref":"#/components/parameters/query/Organization"}],"requestBody":{"description":"The JSON payload containing the data to be added to the submission","required":true,"content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}},"responses":{"200":{"description":"Edit Data request accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubmissionResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/submission/category/{categoryId}/files":{"post":{"summary":"Add new data to a submission for the specified category. An optional filename-to-entity map can be provided to control which entity each file is submitted for, enabling multiple files for the same entity and files whose names do not match the entity name.","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/query/Organization"},{"name":"sync","in":"query","required":false,"schema":{"type":"string","enum":[true,false],"default":"false"},"description":"Controls whether file parsing is synchronous. When `false` (default), parsing runs in the background and `fileResults` will be empty in the response. When `true`, the response waits for all files to be parsed and returns per-file results in `fileResults`.\n**Warning:** Using `sync=true` on very large batches may cause the request to time out before the response is returned. Monitor server logs for parse errors when using the default async mode.\n"}],"requestBody":{"description":"File(s) to be added to the submission, with an optional mapping of filenames to entity names.","required":true,"content":{"multipart/form-data":{"schema":{"type":"object","required":["files"],"properties":{"files":{"type":"array","items":{"type":"string","format":"binary"}},"fileEntityMap":{"type":"array","description":"Optional mapping of uploaded filenames to entity names. When provided, each file is matched to its entity using this map. When omitted, each file's name (without extension) must match an entity name in the dictionary.","items":{"$ref":"#/components/schemas/FilenameEntityPair"}}}},"encoding":{"fileEntityMap":{"contentType":"application/json"}}}}},"responses":{"200":{"description":"Submission accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubmissionResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/submission/category/{categoryId}/data/{systemId}":{"delete":{"summary":"Removes data from a submission using the System ID. Returns an Active Submission containing the records that will be deleted","tags":["Submission"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"name":"systemId","in":"path","required":true,"schema":{"type":"string"},"description":"The unique system ID of the data to be deleted"}],"responses":{"200":{"description":"Delete Data request accepted","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CreateSubmissionResult"}}}},"400":{"$ref":"#/components/responses/BadRequest"},"401":{"$ref":"#/components/responses/UnauthorizedError"},"404":{"$ref":"#/components/responses/NotFound"},"409":{"$ref":"#/components/responses/StatusConflict"},"500":{"$ref":"#/components/responses/ServerError"},"503":{"$ref":"#/components/responses/ServiceUnavailableError"}}}},"/validator/category/{categoryId}/entity/{entityName}/exists":{"get":{"summary":"Check if a record exists based on category, organization, entity, and value","tags":["Validator"],"parameters":[{"$ref":"#/components/parameters/path/CategoryId"},{"$ref":"#/components/parameters/path/EntityName"},{"$ref":"#/components/parameters/query/Organization"},{"$ref":"#/components/parameters/query/Value"}],"responses":{"200":{"description":"Record exists","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"type":"string","example":"Record found"}}}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"500":{"$ref":"#/components/responses/ServerError"}}}}},"components":{"parameters":{"path":{"CategoryId":{"name":"categoryId","in":"path","required":true,"schema":{"type":"string"},"description":"Numeric ID or alias of the category to which the data belongs. Not yet accepted on submission endpoints (create/commit/delete), which still require the numeric id."},"EntityName":{"description":"The name of the Entity","name":"entityName","in":"path","schema":{"type":"string"},"required":true},"MigrationId":{"name":"migrationId","in":"path","required":true,"schema":{"type":"string"},"description":"The ID of the Migration"},"Organization":{"name":"organization","in":"path","required":true,"schema":{"type":"string"}},"SubmissionId":{"name":"submissionId","in":"path","required":true,"schema":{"type":"string"},"description":"The ID of the Submission"}},"query":{"EntityName":{"description":"The name of the Entity","name":"entityName","in":"query","schema":{"type":"string"},"required":true},"ForceDeleteSubmission":{"description":"Optional query parameter to force the deletion of a submission. Default value is false","name":"force","in":"query","schema":{"type":"boolean"},"required":false},"OnlyActive":{"description":"Optional query parameter to filter results to include only active submissions. Default value is false","name":"onlyActive","in":"query","schema":{"type":"boolean"},"required":false},"Organization":{"description":"The name of the Organization","name":"organization","in":"query","schema":{"type":"string"},"required":true},"OrganizationFilter":{"description":"Optional query parameter to filter results to include only submissions associated to an specific organization. By default, returns submissions from all organizations","name":"organization","in":"query","schema":{"type":"string"},"required":false},"Page":{"name":"page","in":"query","required":false,"schema":{"type":"integer"},"description":"Optional query parameter to specify the page number of the results. Default value is 1"},"PageSize":{"name":"pageSize","in":"query","required":false,"schema":{"type":"integer"},"description":"Optional query parameter to specify the number of results per page. Default value is 20"},"Username":{"name":"username","in":"query","required":false,"schema":{"type":"string"},"description":"Optional query parameter to filter results to include only submissions associated to a specific user. By default, returns submissions from all users"},"Value":{"name":"value","in":"query","required":true,"schema":{"type":"string"},"description":"The value to search for in the specified field"},"View":{"name":"view","in":"query","required":false,"schema":{"type":"string","enum":["flat","compound"]},"description":"Optional query parameter to define the data format. Choose 'flat' for a simple, single-level collection of records, or 'compound' for a nested, schema-centric structure. The default value is 'flat'"}}},"responses":{"BadRequest":{"description":"Error response indicating that the client's request is malformed or invalid","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"Error":{"type":"object","properties":{"error":{"type":"string","description":"Error type"},"message":{"type":"string","decription":"Description of the error"}}},"Forbidden":{"description":"Error response indicating invalid access due to inadequate permissions","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"NotFound":{"description":"Requested resource could not be found","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"ServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"ServiceUnavailableError":{"description":"Error message indicating the server is currently unable to handle the request, often due to maintenance, overload, or temporary issues","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"StatusConflict":{"description":"Error response indicating the requested action could not be performed on the entity in its current state.","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}},"UnauthorizedError":{"description":"Access token is missing or invalid","content":{"application/json":{"schema":{"$ref":"#/components/responses/Error"}}}}},"schemas":{"Pagination":{"type":"object","properties":{"currentPage":{"type":"number"},"pageSize":{"type":"number"},"totalPages":{"type":"number"},"totalRecords":{"type":"number"}}},"ListSubmissionsResult":{"type":"object","properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"records":{"type":"array","items":{"$ref":"#/components/schemas/SubmissionResult"}}}},"SubmissionDetailsResult":{"type":"object","properties":{"data":{"type":"array","items":{"type":"object","properties":{"type":{"type":"string","description":"Type of action","enum":["INSERTS","UPDATES","DELETES"]},"entity":{"type":"string","description":"Name of the entity"},"value":{"type":"object","description":"Content of the record in JSON format"},"index":{"type":"number","description":"Index of the record in the submission"}}}},"errors":{"type":"array","items":{"$ref":"#/components/schemas/ValidationError"}}}},"SubmissionResult":{"type":"object","properties":{"id":{"type":"number","description":"ID of the Submission"},"data":{"type":"object","properties":{"inserts":{"type":"object","additionalProperties":{"type":"object","properties":{"batchName":{"type":"string","description":"Original filename of the submission"},"recordsCount":{"type":"number","description":"Number Of Records"}}}},"updates":{"type":"object","additionalProperties":{"type":"object","properties":{"recordsCount":{"type":"number"}}}},"deletes":{"type":"object","additionalProperties":{"type":"object","properties":{"recordsCount":{"type":"number"}}}},"total":{"type":"number","description":"Total number of records in the submission"}}},"dictionary":{"type":"object","description":"Dictionary used to validate the submission","properties":{"name":{"type":"string"},"version":{"type":"string"}}},"dictionaryCategory":{"type":"object","description":"Category this dictionary belongs in","properties":{"id":{"type":"number"},"name":{"type":"string"}}},"errors":{"type":"object","properties":{"inserts":{"type":"object","additionalProperties":{"type":"object","properties":{"recordsCount":{"type":"number"}}}},"updates":{"type":"object","additionalProperties":{"type":"object","properties":{"recordsCount":{"type":"number"}}}},"deletes":{"type":"object","additionalProperties":{"type":"object","properties":{"recordsCount":{"type":"number"}}}},"total":{"type":"number","description":"Total number of error records in the submission"}}},"organization":{"type":"string","description":"Organization the Submission belongs to"},"status":{"type":"string","description":"Status of the Submission","enum":["OPEN","VALID","INVALID","CLOSED","COMMITTED"]},"createdAt":{"type":"string","description":"Date and time of creation"},"createdBy":{"type":"string","description":"Name of user who created the submission"},"updatedAt":{"type":"string","description":"Date and time of latest update"},"updatedBy":{"type":"string","description":"Name of user who last updated the submission"}}},"FilenameEntityPair":{"type":"object","required":["filename","entity"],"properties":{"filename":{"type":"string","description":"The original filename of the uploaded file.","example":"donor123_specimens.tsv"},"entity":{"type":"string","description":"The entity name this file contains data for.","example":"specimen"}}},"BatchError":{"type":"object","properties":{"message":{"type":"string","description":"A message describing the error"},"type":{"type":"string","description":"The type of error","enum":["INCORRECT_SECTION","INVALID_FILE_EXTENSION","INVALID_FILE_NAME","MISSING_REQUIRED_HEADER","MULTIPLE_TYPED_FILES","TSV_PARSING_FAILED","UNRECOGNIZED_HEADER"]},"batchName":{"type":"array","description":"List of batch names causing error","items":{"type":"string"}}}},"CategoryDetails":{"type":"object","properties":{"alias":{"type":"string","description":"Optional alias for the category, usable in place of the numeric id anywhere a categoryId is accepted. Not set if none was assigned at creation."},"id":{"type":"number","description":"ID of the Category"},"dictionary":{"type":"object","description":"Dictionary used to validate the submission","properties":{"name":{"type":"string"},"version":{"type":"string"}}},"name":{"type":"string","description":"Name of the Category"},"organizations":{"type":"array","items":{"type":"string","description":"List of organizations on this category"}},"createdAt":{"type":"string","description":"Date and time of creation"},"createdBy":{"type":"string","description":"User name who created the submission"},"updatedAt":{"type":"string","description":"Date and time of latest update"},"updatedBy":{"type":"string","description":"User name who last updated the submission"}}},"CategorySummary":{"type":"object","properties":{"alias":{"type":"string","description":"Optional alias for the category. Not set if none is assigned."},"id":{"type":"number","description":"ID of the Category"},"name":{"type":"string","description":"Name of the Category"}}},"ChangeHistorySummaryResult":{"type":"object","properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"records":{"type":"array","items":{"$ref":"#/components/schemas/ChangeHistoryRecord"}}}},"ChangeHistoryRecord":{"type":"object","properties":{"entityName":{"type":"string","description":"Name of the Entity"},"event":{"type":"string","description":"Type of event","enum":["UPDATE","DELETE","MIGRATION"]},"errors":{"type":"array","description":"List of validation errors related to the change if applicable","items":{"$ref":"#/components/schemas/ValidationError"}},"dataDiff":{"type":"object","description":"Captures the state of the data before the change as `old` and after the change as `new`"},"newIsValid":{"type":"boolean","description":"New data isValid value"},"oldIsValid":{"type":"boolean","description":"Old data isValid value"},"organization":{"type":"string","description":"Name of the Organization"},"submissionId":{"type":"string","description":"Submission ID the change belongs to"},"systemId":{"type":"string","description":"The unique identifier of the record changed"},"createdAt":{"type":"string","description":"Date and time of creation"},"createdBy":{"type":"string","description":"User name who updated the submission"}}},"CommitSubmissionResult":{"required":["status","dictionary"],"type":"object","properties":{"status":{"type":"string","description":"Result of Commiting Submission","enum":["PROCESSING"]},"dictionary":{"type":"object","description":"The dictionary used to validate the submission","properties":{"name":{"type":"string"},"version":{"type":"string"}}},"processedEntities":{"type":"array","description":"Names of the entities that will be processed","items":{"type":"string"}}}},"CreateSubmissionResult":{"required":["status","description"],"type":"object","properties":{"description":{"type":"string","description":"Description of uploading Submission files"},"status":{"type":"string","description":"Result of uploading Submission files","enum":["PROCESSING","INVALID_SUBMISSION"]},"submissionId":{"type":"string","description":"ID of the Submission"}}},"DeleteSubmissionResult":{"required":["status","description"],"type":"object","properties":{"description":{"type":"string","description":"Description of closing the Submission"},"status":{"type":"string","description":"Result of closing the Submission","enum":["CLOSED"]},"submissionId":{"type":"string","description":"ID of the Submission"}}},"DeleteSubmissionEntityResult":{"required":["status","description"],"type":"object","properties":{"description":{"type":"string","description":"Description of deleting partially Submission data"},"status":{"type":"string","description":"Result of deleting Submission data","enum":["PROCESSING"]},"submissionId":{"type":"string","description":"ID of the Submission"}}},"GetSubmittedDataResult":{"type":"object","properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"records":{"type":"array","items":{"$ref":"#/components/schemas/SubmittedDataRecord"}}}},"Health":{"type":"object","properties":{"uptime":{"type":"string","description":"Number of seconds the current Node.js process has been running"},"message":{"type":"string","description":"Status of the service"},"timestamp":{"type":"string","description":"Current system's time in milliseconds since the Unix epoch"}}},"ListAllCategories":{"type":"array","items":{"$ref":"#/components/schemas/CategorySummary"}},"ListMigrationRecordsResult":{"type":"object","properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"records":{"type":"array","items":{"$ref":"#/components/schemas/MigrationChangeHistoryRecord"}}}},"ListMigrationsResult":{"type":"object","properties":{"pagination":{"$ref":"#/components/schemas/Pagination"},"records":{"type":"array","items":{"$ref":"#/components/schemas/MigrationResult"}}}},"MigrationChangeHistoryRecord":{"type":"object","properties":{"entityName":{"type":"string","description":"Name of the Entity"},"errors":{"type":"array","description":"List of validation errors related to the change if applicable","items":{"$ref":"#/components/schemas/ValidationError"}},"dataDiff":{"type":"object","description":"Captures the state of the data before the change as `old` and after the change as `new`"},"newIsValid":{"type":"boolean","description":"New data isValid value"},"oldIsValid":{"type":"boolean","description":"Old data isValid value"},"organization":{"type":"string","description":"Name of the Organization"},"systemId":{"type":"string","description":"The unique identifier of the record changed"},"createdAt":{"type":"string","description":"Date and time of creation"},"createdBy":{"type":"string","description":"User name who updated the submission"}}},"MigrationResult":{"type":"object","properties":{"id":{"type":"number","description":"ID of the Migration"},"category":{"type":"object","description":"Category this dictionary belongs in","properties":{"id":{"type":"number"},"name":{"type":"string"}}},"fromDictionary":{"type":"object","description":"Previous Dictionary used in this category","properties":{"name":{"type":"string"},"version":{"type":"string"}}},"toDictionary":{"type":"object","description":"New Dictionary used in this category","properties":{"name":{"type":"string"},"version":{"type":"string"}}},"submissionId":{"type":"number","description":"ID of the Submission used for the migration"},"invalidRecords":{"type":"number","description":"Number of invalid records during the migration"},"status":{"type":"string","description":"Status of the Migration","enum":["IN-PROGRESS","COMPLETED","FAILED"]},"retries":{"type":"number","description":"Number of times the migration has run. When a migration fails, it can be retried by registering again the same dictionary."},"createdAt":{"type":"string","description":"Date and time of creation"},"createdBy":{"type":"string","description":"User name who created the migration"},"updatedAt":{"type":"string","description":"Date and time of latest update"},"updatedBy":{"type":"string","description":"User name who last updated the migration"}}},"RegisterDictionaryResult":{"type":"object","properties":{"alias":{"type":"string","description":"Optional alias for the category. Not present if none was assigned."},"categoryId":{"type":"number","description":"ID of the Category"},"categoryName":{"type":"string","description":"Name of the Category"},"dictionary":{"type":"object","description":"Schema of the Dictionary"},"name":{"type":"string","description":"Name of the Dictionary"},"version":{"type":"string","description":"Version of the Dictionary"},"migrationId":{"type":"string","description":"ID of the Migration if applicable","allowEmptyValue":true}}},"SubmittedDataRecord":{"type":"object","properties":{"data":{"type":"object","description":"Content of the record in JSON format"},"entityName":{"type":"string"},"isValid":{"type":"boolean"},"organization":{"type":"string"},"systemId":{"type":"string"}}},"ValidationError":{"type":"object","required":["index","errorType","fieldName"],"properties":{"fieldName":{"type":"string","description":"The field name that the error is related to"},"info":{"type":"object","description":"Contains context information related to the error","properties":{"value":{"type":"array","description":"The faulty value","items":{"type":"string"}}}},"index":{"type":"number","format":"integer","description":"Index of the row for this error (starting from 0)"},"errorType":{"type":"string","description":"The type of error","enum":["INVALID_BY_RANGE","INVALID_BY_REGEX","INVALID_BY_SCRIPT","INVALID_ENUM_VALUE","INVALID_FIELD_VALUE_TYPE","MISSING_REQUIRED_FIELD","UNRECOGNIZED_FIELD"]},"message":{"type":"string","description":"Details of the error"}}}}},"tags":[{"name":"Audit","description":"Retrieves a list of changes made to Submitted Data records"},{"name":"Category","description":"Operations related to Categories management. Categories are used to organize and clasify Dictionaries"},{"name":"Data","description":"Retrieve Submitted Data using filters and pagination"},{"name":"Dictionary","description":"Dictionary registration. Uses Lectern as a Data Dictionary Schema Manager"},{"name":"Health","description":"Service status monitoring"},{"name":"Ping","description":"Test reachability"},{"name":"Submission","description":"Create, View, Edit and Commit a Submission. A Submission represents a collection of data that is staged for validation before finalization"},{"name":"Validator","description":"Operations related to validating records against existing data. This includes checking if a record exists based on category, organization, entity, and value"}]} \ No newline at end of file diff --git a/website/src/components/SwaggerAPIDoc/maestroAPI.json b/website/src/components/SwaggerAPIDoc/maestroAPI.json index f6a40df2..93647ab4 100644 --- a/website/src/components/SwaggerAPIDoc/maestroAPI.json +++ b/website/src/components/SwaggerAPIDoc/maestroAPI.json @@ -1,269 +1,120 @@ { - "openapi": "3.0.1", + "openapi": "3.0.0", + "info": { + "title": "@overture-stack/maestro-server", + "version": "5.0.0-alpha.1" + }, "paths": { - "/index/repository/{repositoryCode}/study/{studyId}/analysis/{analysisId}": { + "/index/repository/{repositoryCode}": { "post": { + "summary": "Indexes data for a specified repository.", + "description": "This operation initializes or updates the index with the provided data. The `repositoryCode` path parameter identifies the repository to be indexed.", "tags": [ "Indexing" ], - "summary": "Index Single Analysis", - "description": "Indexes single analysis on demand ", - "operationId": "indexAnalysis", "parameters": [ - { - "name": "analysisId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "studyId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - }, { "name": "repositoryCode", "in": "path", "required": true, "schema": { "type": "string" - } + }, + "description": "A unique code that identifies the repository where data will be indexed" } ], "responses": { - "404": { - "description": "Not Found", + "202": { + "description": "Accepted response indicating that the indexing operation has been queued for processing", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorDetails" + "$ref": "#/components/schemas/AcceptedResponse" } } } }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ErrorDetails" - } - } - } - }, - "201": { - "description": "Created", - "content": { - "*/*": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IndexResult" - } - } - } - } - } - } - }, - "delete": { - "tags": [ - "management-controller" - ], - "operationId": "removeAnalysis", - "parameters": [ - { - "name": "analysisId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } + "400": { + "$ref": "#/components/responses/BadRequest" }, - { - "name": "studyId", - "in": "path", - "required": true, - "schema": { - "type": "string" - } + "401": { + "$ref": "#/components/responses/UnauthorizedError" }, - { - "name": "repositoryCode", - "in": "path", - "required": true, - "schema": { - "type": "string" - } - } - ], - "responses": { "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ErrorDetails" - } - } - } + "$ref": "#/components/responses/NotFound" }, "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ErrorDetails" - } - } - } + "$ref": "#/components/responses/ServerError" }, - "200": { - "description": "OK", - "content": { - "*/*": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IndexResult" - } - } - } - } + "503": { + "$ref": "#/components/responses/ServiceUnavailableError" } } } }, - "/index/repository/{repositoryCode}/study/{studyId}": { + "/index/repository/{repositoryCode}/organization/{organization}": { "post": { + "summary": "Indexes data for a specific organization within the given repository.", + "description": "This operation targets organizational data within the repository for indexing. The `repositoryCode` identifies the repository, and the `organization` path parameter specifies the organization whose data will be indexed.", "tags": [ - "management-controller" + "Indexing" ], - "operationId": "indexStudy", "parameters": [ { - "name": "studyId", + "name": "repositoryCode", "in": "path", "required": true, "schema": { "type": "string" - } + }, + "description": "A unique code that identifies the repository where data will be indexed" }, { - "name": "repositoryCode", + "name": "organization", "in": "path", "required": true, "schema": { "type": "string" - } + }, + "description": "The name of the organization within the repository for which data will be indexed" } ], "responses": { - "404": { - "description": "Not Found", + "202": { + "description": "Accepted response indicating that the indexing operation has been queued for processing", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorDetails" + "$ref": "#/components/schemas/AcceptedResponse" } } } }, - "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ErrorDetails" - } - } - } + "400": { + "$ref": "#/components/responses/BadRequest" }, - "201": { - "description": "Created", - "content": { - "*/*": { - "schema": { - "type": "array", - "items": { - "$ref": "#/components/schemas/IndexResult" - } - } - } - } - } - } - } - }, - "/convert": { - "post": { - "tags": [ - "Conversion" - ], - "summary": "Convert Analyses to file centric documents", - "description": "Converts the passed array of analyses to a map of analysis Id -\u003E Array of files of that analysis", - "operationId": "convertAnalyses", - "requestBody": { - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ConvertAnalysisCommand" - } - } + "401": { + "$ref": "#/components/responses/UnauthorizedError" }, - "required": true - }, - "responses": { "404": { - "description": "Not Found", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ErrorDetails" - } - } - } + "$ref": "#/components/responses/NotFound" }, "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ErrorDetails" - } - } - } + "$ref": "#/components/responses/ServerError" }, - "201": { - "description": "Created", - "content": { - "*/*": { - "schema": { - "type": "object", - "additionalProperties": { - "type": "array", - "items": { - "$ref": "#/components/schemas/FileCentricDocument" - } - } - } - } - } + "503": { + "$ref": "#/components/responses/ServiceUnavailableError" } } } }, - "/index/repository/{repositoryCode}": { + "/index/repository/{repositoryCode}/organization/{organization}/id/{id}": { "post": { + "summary": "Indexes data for a specific record identified by its ID within an organization in the given repository.", + "description": "This operation allows fine-grained indexing at the record level. The `repositoryCode` identifies the repository, `organization` specifies the organization, and `id` refers to the unique identifier of the record to be indexed.", "tags": [ - "management-controller" + "Indexing" ], - "operationId": "indexRepository", "parameters": [ { "name": "repositoryCode", @@ -271,389 +122,145 @@ "required": true, "schema": { "type": "string" - } + }, + "description": "A unique code that identifies the repository where data will be indexed" + }, + { + "name": "organization", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The name of the organization within the repository for which data will be indexed" + }, + { + "name": "id", + "in": "path", + "required": true, + "schema": { + "type": "string" + }, + "description": "The unique identifier of the record to be indexed within the specified organization." } ], "responses": { - "404": { - "description": "Not Found", + "202": { + "description": "Accepted response indicating that the indexing operation has been queued for processing", "content": { - "*/*": { + "application/json": { "schema": { - "$ref": "#/components/schemas/ErrorDetails" + "$ref": "#/components/schemas/AcceptedResponse" } } } }, + "400": { + "$ref": "#/components/responses/BadRequest" + }, + "401": { + "$ref": "#/components/responses/UnauthorizedError" + }, + "404": { + "$ref": "#/components/responses/NotFound" + }, "500": { - "description": "Internal Server Error", - "content": { - "*/*": { - "schema": { - "$ref": "#/components/schemas/ErrorDetails" - } - } - } + "$ref": "#/components/responses/ServerError" }, - "201": { - "description": "Created", - "content": { - "*/*": { - "schema": { - "type": "object", - "additionalProperties": { - "$ref": "#/components/schemas/IndexResult" - } - } - } - } + "503": { + "$ref": "#/components/responses/ServiceUnavailableError" } } } } }, "components": { - "schemas": { - "ErrorDetails": { - "type": "object", - "properties": { - "timestamp": { - "type": "string", - "format": "date-time" - }, - "message": { - "type": "string" - }, - "details": { - "type": "string" - } - } - }, - "FailureData": { - "type": "object", - "properties": { - "failingIds": { - "type": "object", - "additionalProperties": { - "uniqueItems": true, - "type": "array", - "items": { - "type": "string" - } - } - } - } - }, - "IndexResult": { - "type": "object", - "properties": { - "indexName": { - "type": "string" - }, - "failureData": { - "$ref": "#/components/schemas/FailureData" - }, - "successful": { - "type": "boolean" - } - } - }, - "Analysis": { - "type": "object", - "properties": { - "analysisId": { - "type": "string" - }, - "analysisType": { - "$ref": "#/components/schemas/AnalysisTypeId" - }, - "analysisState": { - "type": "string" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "songServerId": { - "type": "string" - }, - "publishedAt": { - "type": "string", - "format": "date-time" - }, - "firstPublishedAt": { - "type": "string", - "format": "date-time" - }, - "studyId": { - "type": "string" - }, - "files": { - "type": "array", - "items": { - "$ref": "#/components/schemas/File" - } - }, - "samples": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Sample" - } - }, - "experiment": { - "type": "object", - "additionalProperties": { - "type": "object" + "responses": { + "BadRequest": { + "description": "Error response indicating that the client's request is malformed or invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "AnalysisTypeId": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" - } - } - }, - "ConvertAnalysisCommand": { - "type": "object", - "properties": { - "analyses": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Analysis" + "NotFound": { + "description": "Requested resource could not be found", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } - }, - "repoCode": { - "type": "string" } } }, - "Donor": { - "type": "object", - "properties": { - "donorId": { - "type": "string" - }, - "submitterDonorId": { - "type": "string" - }, - "studyId": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "info": { - "type": "object", - "additionalProperties": { - "type": "object" + "UnauthorizedError": { + "description": "Access token is missing or invalid", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "File": { - "type": "object", - "properties": { - "objectId": { - "type": "string" - }, - "studyId": { - "type": "string" - }, - "analysisId": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "fileType": { - "type": "string" - }, - "fileMd5sum": { - "type": "string" - }, - "fileAccess": { - "type": "string" - }, - "dataType": { - "type": "string" - }, - "fileSize": { - "type": "integer", - "format": "int64" - }, - "info": { - "type": "object", - "additionalProperties": { - "type": "object" + "ServerError": { + "description": "Internal Server Error", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } }, - "Sample": { - "type": "object", - "properties": { - "sampleId": { - "type": "string" - }, - "specimenId": { - "type": "string" - }, - "submitterSampleId": { - "type": "string" - }, - "matchedNormalSubmitterSampleId": { - "type": "string" - }, - "sampleType": { - "type": "string" - }, - "donor": { - "$ref": "#/components/schemas/Donor" - }, - "specimen": { - "$ref": "#/components/schemas/Specimen" - }, - "info": { - "type": "object", - "additionalProperties": { - "type": "object" + "ServiceUnavailableError": { + "description": "Unable to complete the request due to an issue with an external service.", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/ErrorResponse" } } } - }, - "Specimen": { + } + }, + "schemas": { + "AcceptedResponse": { "type": "object", "properties": { - "specimenId": { - "type": "string" - }, - "donorId": { - "type": "string" - }, - "submitterSpecimenId": { - "type": "string" - }, - "tumourNormalDesignation": { - "type": "string" - }, - "specimenTissueSource": { - "type": "string" - }, - "specimenType": { - "type": "string" + "successful": { + "type": "boolean", + "default": true, + "description": "Indicates whether the indexing operation was successful or not" }, - "info": { - "type": "object", - "additionalProperties": { - "type": "object" - } + "indexName": { + "type": "string", + "description": "The name of the index where the data is stored." } } }, - "FileCentricAnalysis": { + "ErrorResponse": { "type": "object", "properties": { - "analysisId": { - "type": "string" - }, - "analysisType": { - "type": "string" - }, - "analysisVersion": { - "type": "integer", - "format": "int32" - }, - "analysisState": { - "type": "string" - }, - "updatedAt": { - "type": "string", - "format": "date-time" + "successful": { + "type": "boolean", + "default": false, + "description": "Indicates whether the indexing operation was successful or not" }, - "firstPublishedAt": { + "message": { "type": "string", - "format": "date-time" + "description": "A brief description of the error encountered" }, - "publishedAt": { + "details": { "type": "string", - "format": "date-time" - }, - "experiment": { - "type": "object", - "additionalProperties": { - "type": "object" - } - } - } - }, - "FileCentricDocument": { - "type": "object", - "properties": { - "objectId": { - "type": "string" - }, - "studyId": { - "type": "string" - }, - "dataType": { - "type": "string" - }, - "fileType": { - "type": "string" - }, - "fileAccess": { - "type": "string" - }, - "analysis": { - "$ref": "#/components/schemas/FileCentricAnalysis" - }, - "file": { - "$ref": "#/components/schemas/File" - }, - "repositories": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Repository" - } - }, - "donors": { - "type": "array", - "items": { - "$ref": "#/components/schemas/Donor" - } - } - } - }, - "Repository": { - "type": "object", - "properties": { - "code": { - "type": "string" - }, - "organization": { - "type": "string" - }, - "name": { - "type": "string" - }, - "type": { - "type": "string" - }, - "country": { - "type": "string" - }, - "url": { - "type": "string" + "description": "Additional details about the error" } } } } - } + }, + "tags": [] } \ No newline at end of file diff --git a/website/src/components/SwaggerAPIDoc/scoreAPI.json b/website/src/components/SwaggerAPIDoc/scoreAPI.json index fd666ed6..a31d2ed1 100644 --- a/website/src/components/SwaggerAPIDoc/scoreAPI.json +++ b/website/src/components/SwaggerAPIDoc/scoreAPI.json @@ -1,868 +1 @@ -{ - "swagger": "2.0", - "basePath": "/", - "tags": [ - { - "name": "base-controller", - "description": "Base Controller" - }, - { - "name": "download-controller", - "description": "Download Controller" - }, - { - "name": "listing-controller", - "description": "Listing Controller" - }, - { - "name": "upload-controller", - "description": "Upload Controller" - } - ], - "paths": { - "/download/ping": { - "get": { - "tags": [ - "download-controller" - ], - "summary": "ping", - "operationId": "pingUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "User-Agent", - "in": "header", - "description": "User-Agent", - "required": true, - "type": "string", - "default": "unknown" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/download/{object-id}": { - "get": { - "tags": [ - "download-controller" - ], - "summary": "downloadPartialObject", - "operationId": "downloadPartialObjectUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "User-Agent", - "in": "header", - "description": "User-Agent", - "required": true, - "type": "string", - "default": "unknown" - }, - { - "name": "exclude-urls", - "in": "query", - "description": "exclude-urls", - "required": false, - "type": "boolean", - "default": false - }, - { - "name": "external", - "in": "query", - "description": "external", - "required": false, - "type": "boolean", - "default": false - }, - { - "name": "length", - "in": "query", - "description": "length", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - }, - { - "name": "offset", - "in": "query", - "description": "offset", - "required": true, - "type": "integer", - "format": "int64" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/ObjectSpecification" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/listing": { - "get": { - "tags": [ - "listing-controller" - ], - "summary": "list", - "operationId": "listUsingGET", - "produces": [ - "*/*" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ObjectInfo" - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/profile": { - "get": { - "tags": [ - "base-controller" - ], - "summary": "getProfile", - "operationId": "getProfileUsingGET", - "produces": [ - "*/*" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/upload/cancel": { - "post": { - "tags": [ - "upload-controller" - ], - "summary": "cancelAll", - "operationId": "cancelAllUsingPOST", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "responses": { - "200": { - "description": "OK" - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/upload/test/{object-id}": { - "get": { - "tags": [ - "upload-controller" - ], - "summary": "test", - "operationId": "testUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/upload/{object-id}": { - "get": { - "tags": [ - "upload-controller" - ], - "summary": "isObjectExist", - "operationId": "isObjectExistUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "boolean" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - }, - "post": { - "tags": [ - "upload-controller" - ], - "summary": "finalizeUpload", - "operationId": "finalizeUploadUsingPOST", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - }, - { - "name": "uploadId", - "in": "query", - "description": "uploadId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - }, - "delete": { - "tags": [ - "upload-controller" - ], - "summary": "cancelUpload", - "operationId": "cancelUploadUsingDELETE", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "deprecated": false - } - }, - "/upload/{object-id}/parts": { - "post": { - "tags": [ - "upload-controller" - ], - "summary": "finalizePartUpload", - "operationId": "finalizePartUploadUsingPOST", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "etag", - "in": "query", - "description": "etag", - "required": true, - "type": "string" - }, - { - "name": "md5", - "in": "query", - "description": "md5", - "required": true, - "type": "string" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - }, - { - "name": "partNumber", - "in": "query", - "description": "partNumber", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "uploadId", - "in": "query", - "description": "uploadId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - }, - "delete": { - "tags": [ - "upload-controller" - ], - "summary": "deletePart", - "operationId": "deletePartUsingDELETE", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "User-Agent", - "in": "header", - "description": "User-Agent", - "required": true, - "type": "string", - "default": "unknown" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - }, - { - "name": "partNumber", - "in": "query", - "description": "partNumber", - "required": true, - "type": "integer", - "format": "int32" - }, - { - "name": "uploadId", - "in": "query", - "description": "uploadId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "deprecated": false - } - }, - "/upload/{object-id}/recovery": { - "post": { - "tags": [ - "upload-controller" - ], - "summary": "tryRecover", - "operationId": "tryRecoverUsingPOST", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "fileSize", - "in": "query", - "description": "fileSize", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/upload/{object-id}/status": { - "get": { - "tags": [ - "upload-controller" - ], - "summary": "getUploadProgress", - "operationId": "getUploadProgressUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "fileSize", - "in": "query", - "description": "fileSize", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/UploadProgress" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/upload/{object-id}/uploads": { - "post": { - "tags": [ - "upload-controller" - ], - "summary": "initializeMultipartUpload", - "operationId": "initializeMultipartUploadUsingPOST", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": true, - "type": "string" - }, - { - "name": "User-Agent", - "in": "header", - "description": "User-Agent", - "required": true, - "type": "string", - "default": "unknown" - }, - { - "name": "fileSize", - "in": "query", - "description": "fileSize", - "required": true, - "type": "integer", - "format": "int64" - }, - { - "name": "md5", - "in": "query", - "description": "md5", - "required": false, - "type": "string" - }, - { - "name": "object-id", - "in": "path", - "description": "object-id", - "required": true, - "type": "string" - }, - { - "name": "overwrite", - "in": "query", - "description": "overwrite", - "required": false, - "type": "boolean", - "default": false - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/ObjectSpecification" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - } - }, - "definitions": { - "ObjectInfo": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "lastModified": { - "type": "integer", - "format": "int64" - }, - "size": { - "type": "integer", - "format": "int64" - } - }, - "title": "ObjectInfo" - }, - "ObjectSpecification": { - "type": "object", - "properties": { - "objectId": { - "type": "string" - }, - "objectKey": { - "type": "string" - }, - "objectMd5": { - "type": "string" - }, - "objectSize": { - "type": "integer", - "format": "int64" - }, - "parts": { - "type": "array", - "items": { - "$ref": "#/definitions/Part" - } - }, - "uploadId": { - "type": "string" - } - }, - "title": "ObjectSpecification" - }, - "Part": { - "type": "object", - "properties": { - "md5": { - "type": "string" - }, - "offset": { - "type": "integer", - "format": "int64" - }, - "partNumber": { - "type": "integer", - "format": "int32" - }, - "partSize": { - "type": "integer", - "format": "int64" - }, - "sourceMd5": { - "type": "string" - }, - "url": { - "type": "string" - } - }, - "title": "Part" - }, - "UploadProgress": { - "type": "object", - "properties": { - "objectId": { - "type": "string" - }, - "parts": { - "type": "array", - "items": { - "$ref": "#/definitions/Part" - } - }, - "uploadId": { - "type": "string" - } - }, - "title": "UploadProgress" - } - } -} \ No newline at end of file +{"swagger":"2.0","info":{"description":"Score API reference for developers.","version":"1.0","title":"Score API"},"host":"localhost:8087","basePath":"/","tags":[{"name":"base-controller","description":"Base Controller"},{"name":"download-controller","description":"Download Controller"},{"name":"listing-controller","description":"Listing Controller"},{"name":"upload-controller","description":"Upload Controller"}],"paths":{"/download/ping":{"get":{"tags":["download-controller"],"summary":"ping","operationId":"pingUsingGET","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"User-Agent","in":"header","description":"User-Agent","required":true,"type":"string","default":"unknown"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/download/{object-id}":{"get":{"tags":["download-controller"],"summary":"downloadPartialObject","operationId":"downloadPartialObjectUsingGET","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"User-Agent","in":"header","description":"User-Agent","required":true,"type":"string","default":"unknown"},{"name":"exclude-urls","in":"query","description":"exclude-urls","required":false,"type":"boolean","default":false},{"name":"external","in":"query","description":"external","required":false,"type":"boolean","default":false},{"name":"length","in":"query","description":"length","required":true,"type":"integer","format":"int64"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"},{"name":"offset","in":"query","description":"offset","required":true,"type":"integer","format":"int64"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ObjectSpecification"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/listing":{"get":{"tags":["listing-controller"],"summary":"list","operationId":"listUsingGET","produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ObjectInfo"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/profile":{"get":{"tags":["base-controller"],"summary":"getProfile","operationId":"getProfileUsingGET","produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/upload/cancel":{"post":{"tags":["upload-controller"],"summary":"cancelAll","operationId":"cancelAllUsingPOST","consumes":["application/json"],"produces":["*/*"],"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/upload/test/{object-id}":{"get":{"tags":["upload-controller"],"summary":"test","operationId":"testUsingGET","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/upload/{object-id}":{"get":{"tags":["upload-controller"],"summary":"isObjectExist","operationId":"isObjectExistUsingGET","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"boolean"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false},"post":{"tags":["upload-controller"],"summary":"finalizeUpload","operationId":"finalizeUploadUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"},{"name":"uploadId","in":"query","description":"uploadId","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false},"delete":{"tags":["upload-controller"],"summary":"cancelUpload","operationId":"cancelUploadUsingDELETE","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"204":{"description":"No Content"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"deprecated":false}},"/upload/{object-id}/parts":{"post":{"tags":["upload-controller"],"summary":"finalizePartUpload","operationId":"finalizePartUploadUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"etag","in":"query","description":"etag","required":true,"type":"string"},{"name":"md5","in":"query","description":"md5","required":true,"type":"string"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"},{"name":"partNumber","in":"query","description":"partNumber","required":true,"type":"integer","format":"int32"},{"name":"uploadId","in":"query","description":"uploadId","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false},"delete":{"tags":["upload-controller"],"summary":"deletePart","operationId":"deletePartUsingDELETE","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"User-Agent","in":"header","description":"User-Agent","required":true,"type":"string","default":"unknown"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"},{"name":"partNumber","in":"query","description":"partNumber","required":true,"type":"integer","format":"int32"},{"name":"uploadId","in":"query","description":"uploadId","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"204":{"description":"No Content"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"deprecated":false}},"/upload/{object-id}/recovery":{"post":{"tags":["upload-controller"],"summary":"tryRecover","operationId":"tryRecoverUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"fileSize","in":"query","description":"fileSize","required":true,"type":"integer","format":"int64"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/upload/{object-id}/status":{"get":{"tags":["upload-controller"],"summary":"getUploadProgress","operationId":"getUploadProgressUsingGET","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"fileSize","in":"query","description":"fileSize","required":true,"type":"integer","format":"int64"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/UploadProgress"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/upload/{object-id}/uploads":{"post":{"tags":["upload-controller"],"summary":"initializeMultipartUpload","operationId":"initializeMultipartUploadUsingPOST","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":true,"type":"string"},{"name":"User-Agent","in":"header","description":"User-Agent","required":true,"type":"string","default":"unknown"},{"name":"fileSize","in":"query","description":"fileSize","required":true,"type":"integer","format":"int64"},{"name":"md5","in":"query","description":"md5","required":false,"type":"string"},{"name":"object-id","in":"path","description":"object-id","required":true,"type":"string"},{"name":"overwrite","in":"query","description":"overwrite","required":false,"type":"boolean","default":false}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/ObjectSpecification"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}}},"definitions":{"ObjectInfo":{"type":"object","properties":{"id":{"type":"string"},"lastModified":{"type":"integer","format":"int64"},"size":{"type":"integer","format":"int64"}},"title":"ObjectInfo"},"ObjectSpecification":{"type":"object","properties":{"objectId":{"type":"string"},"objectKey":{"type":"string"},"objectMd5":{"type":"string"},"objectSize":{"type":"integer","format":"int64"},"parts":{"type":"array","items":{"$ref":"#/definitions/Part"}},"uploadId":{"type":"string"}},"title":"ObjectSpecification"},"Part":{"type":"object","properties":{"md5":{"type":"string"},"offset":{"type":"integer","format":"int64"},"partNumber":{"type":"integer","format":"int32"},"partSize":{"type":"integer","format":"int64"},"sourceMd5":{"type":"string"},"url":{"type":"string"}},"title":"Part"},"UploadProgress":{"type":"object","properties":{"objectId":{"type":"string"},"parts":{"type":"array","items":{"$ref":"#/definitions/Part"}},"uploadId":{"type":"string"}},"title":"UploadProgress"}}} \ No newline at end of file diff --git a/website/src/components/SwaggerAPIDoc/songAPI.json b/website/src/components/SwaggerAPIDoc/songAPI.json index 92c92e6d..0fe422df 100644 --- a/website/src/components/SwaggerAPIDoc/songAPI.json +++ b/website/src/components/SwaggerAPIDoc/songAPI.json @@ -1,2630 +1 @@ -{ - "swagger": "2.0", - "basePath": "/", - "tags": [ - { - "name": "Analysis", - "description": "Create, Read, Update, publish, unpublish, suppress and search analyses" - }, - { - "name": "Donor", - "description": "Read and delete donors" - }, - { - "name": "Export", - "description": "Export payloads" - }, - { - "name": "File", - "description": "Read, Update and delete files" - }, - { - "name": "Health", - "description": "Check server health" - }, - { - "name": "Legacy Entity", - "description": "Legacy support for dcc-metadata" - }, - { - "name": "Sample", - "description": "Read and delete samples" - }, - { - "name": "Schema", - "description": "Get schemas used for uploads" - }, - { - "name": "Specimen", - "description": "Read and delete specimens" - }, - { - "name": "Study", - "description": "Create and read studies" - }, - { - "name": "Submit", - "description": "Submit and validate json metadata" - } - ], - "paths": { - "/entities": { - "get": { - "tags": [ - "Legacy Entity" - ], - "summary": "FindLegacyEntities", - "description": "Page through LegacyEntity data", - "operationId": "findUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "access", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "fields", - "in": "query", - "description": "fields", - "required": false, - "items": { - "type": "object", - "additionalProperties": { - "type": "string" - } - } - }, - { - "name": "fileName", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "gnosId", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "offset", - "in": "query", - "required": false, - "type": "integer", - "format": "int64" - }, - { - "name": "page", - "in": "query", - "description": "Results page you want to retrieve (0..N)", - "required": false, - "type": "ref" - }, - { - "name": "pageNumber", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "paged", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "projectCode", - "in": "query", - "required": false, - "type": "string" - }, - { - "name": "size", - "in": "query", - "description": "Number of records per page.", - "required": false, - "type": "ref" - }, - { - "name": "sort.sorted", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "sort.unsorted", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "unpaged", - "in": "query", - "required": false, - "type": "boolean" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/JsonNode" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/entities/{id}": { - "get": { - "tags": [ - "Legacy Entity" - ], - "summary": "ReadLegacyEntity", - "description": "Read entity data for a legacy entity id", - "operationId": "readUsingGET_3", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Legacy" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/export/analysis/{analysisIds}": { - "get": { - "tags": [ - "Export" - ], - "summary": "ExportAnalysis", - "description": "Exports the payload for a list of analysisIds", - "operationId": "exportAnalysisUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "analysisIds", - "in": "path", - "description": "Comma separated list of analysisIds", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ExportedPayload" - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/export/studies/{studyId}": { - "get": { - "tags": [ - "Export" - ], - "summary": "ExportStudy", - "description": "Exports all the payloads for a study", - "operationId": "exportStudyUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/ExportedPayload" - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/isAlive": { - "get": { - "tags": [ - "Health" - ], - "summary": "IsAlive", - "description": "Checks if the server is running", - "operationId": "isAliveUsingGET", - "produces": [ - "*/*" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "boolean" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/schemas": { - "get": { - "tags": [ - "Schema" - ], - "summary": "ListAnalysisTypes", - "description": "Retrieves a list of registered analysisTypes", - "operationId": "listAnalysisTypesUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "hideSchema", - "in": "query", - "description": "Hide the schema field from the response", - "required": false, - "type": "boolean", - "default": false, - "allowEmptyValue": false, - "x-example": false - }, - { - "name": "limit", - "in": "query", - "description": "Number of results to retrieve", - "required": false, - "type": "ref", - "default": "20" - }, - { - "name": "names", - "in": "query", - "description": "Comma separated list of names", - "required": false, - "type": "array", - "items": { - "type": "string" - }, - "collectionFormat": "multi", - "allowEmptyValue": false - }, - { - "name": "offset", - "in": "query", - "description": "Index of first result to retrieve", - "required": false, - "type": "ref", - "default": "0" - }, - { - "name": "pageNumber", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "pageSize", - "in": "query", - "required": false, - "type": "integer", - "format": "int32" - }, - { - "name": "paged", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "sort", - "in": "query", - "description": "Comma separated fields to sort on", - "required": false, - "type": "string" - }, - { - "name": "sort.sorted", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "sort.unsorted", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "sortOrder", - "in": "query", - "description": "Sorting order: ASC|DESC. Default order: DESC", - "required": false, - "type": "string" - }, - { - "name": "unpaged", - "in": "query", - "required": false, - "type": "boolean" - }, - { - "name": "unrenderedOnly", - "in": "query", - "description": "Only retrieve the unrendered schema that was initially registered", - "required": false, - "type": "boolean", - "default": false, - "allowEmptyValue": false, - "x-example": false - }, - { - "name": "versions", - "in": "query", - "description": "Comma separated list of versions", - "required": false, - "type": "array", - "items": { - "type": "integer", - "format": "int32" - }, - "collectionFormat": "multi", - "allowEmptyValue": false - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/PageDTO«AnalysisType»" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - }, - "post": { - "tags": [ - "Schema" - ], - "summary": "RegisterAnalysisType", - "description": "Registers an analysisType schema", - "operationId": "registerUsingPOST", - "consumes": [ - "application/json", - "application/json;charset=UTF-8" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "in": "body", - "name": "request", - "description": "request", - "required": true, - "schema": { - "$ref": "#/definitions/RegisterAnalysisTypeRequest" - } - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/AnalysisType" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/schemas/registration": { - "get": { - "tags": [ - "Schema" - ], - "summary": "GetRegistrationSchema", - "description": "Retrieves the meta-schema used to validate AnalysisType schemas during registration", - "operationId": "getAnalysisTypeRegistrationSchemaUsingGET", - "produces": [ - "*/*" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/schemas/{name}": { - "get": { - "tags": [ - "Schema" - ], - "summary": "GetAnalysisTypeVersion", - "description": "Retrieves the latest version of a schema for an analysisType", - "operationId": "getAnalysisTypeVersionUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "name", - "in": "path", - "description": "The name of an analysisType", - "required": true, - "type": "string" - }, - { - "name": "unrenderedOnly", - "in": "query", - "description": "Only retrieve the unrendered schema that was initially registered", - "required": false, - "type": "boolean", - "default": false, - "allowEmptyValue": false, - "x-example": false - }, - { - "name": "version", - "in": "query", - "description": "Optionally, retrieve a specific version of the analysisType", - "required": false, - "type": "integer", - "format": "int32", - "allowEmptyValue": false - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/AnalysisType" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/all": { - "get": { - "tags": [ - "Study" - ], - "summary": "GetAllStudyIds", - "description": "Retrieves all studyIds", - "operationId": "findAllStudiesUsingGET", - "produces": [ - "*/*" - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}": { - "get": { - "tags": [ - "Study" - ], - "summary": "GetStudy", - "description": "Retrieves information for a study", - "operationId": "getStudyUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Study" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/": { - "post": { - "tags": [ - "Study" - ], - "summary": "CreateStudy", - "description": "Creates a new study", - "operationId": "saveStudyUsingPOST", - "consumes": [ - "application/json", - "application/json;charset=UTF-8" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "in": "body", - "name": "study", - "description": "study", - "required": true, - "schema": { - "$ref": "#/definitions/Study" - } - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/GenericMessage" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/all": { - "get": { - "tags": [ - "Study" - ], - "summary": "GetEntireStudy", - "description": "Retrieves all donor, specimen and sample data for a study", - "operationId": "getEntireStudyUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/StudyWithDonors" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis": { - "get": { - "tags": [ - "Analysis" - ], - "summary": "GetAnalysesForStudy", - "description": "Retrieve all analysis objects for a studyId", - "operationId": "getAnalysisUsingGET_1", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "analysisStates", - "in": "query", - "description": "Non-empty comma separated list of analysis states to filter by", - "required": false, - "type": "string", - "default": "PUBLISHED", - "allowEmptyValue": false - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Analysis" - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/paginated": { - "get": { - "tags": [ - "Analysis" - ], - "summary": "GetAnalysesForStudy", - "description": "Retrieve paginated analysis objects for a studyId. analysisState is optional, default to PUBLISHED, offset is required, default to 0, limit is required, default to 100. Results are sorted by analysis id in ASC order.", - "operationId": "getAnalysisUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "analysisStates", - "in": "query", - "description": "Non-empty comma separated list of analysis states to filter by", - "required": false, - "type": "string", - "default": "PUBLISHED", - "allowEmptyValue": false - }, - { - "name": "limit", - "in": "query", - "description": "limit", - "required": false, - "type": "integer", - "default": 100, - "format": "int32" - }, - { - "name": "offset", - "in": "query", - "description": "offset", - "required": false, - "type": "integer", - "default": 0, - "format": "int32" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/GetAnalysisResponse" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/publish/{id}": { - "put": { - "tags": [ - "Analysis" - ], - "summary": "PublishAnalysis", - "description": "Publish an analysis. This checks to see if the files associated with the input analysisId exist in the storage server", - "operationId": "publishAnalysisUsingPUT", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "ignoreUndefinedMd5", - "in": "query", - "description": "Ignores files that have an undefined MD5 checksum when publishing", - "required": false, - "type": "boolean", - "default": false, - "allowEmptyValue": false, - "x-example": false - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/GenericMessage" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/search/id": { - "get": { - "tags": [ - "Analysis" - ], - "summary": "IdSearch", - "description": "Search for analysis objects by specifying regex patterns for the donorIds, sampleIds, specimenIds, or fileIds request parameters", - "operationId": "idSearchUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "donorId", - "in": "query", - "description": "donorId", - "required": false, - "type": "string" - }, - { - "name": "fileId", - "in": "query", - "description": "fileId", - "required": false, - "type": "string" - }, - { - "name": "sampleId", - "in": "query", - "description": "sampleId", - "required": false, - "type": "string" - }, - { - "name": "specimenId", - "in": "query", - "description": "specimenId", - "required": false, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - }, - { - "name": "submitterDonorId", - "in": "query", - "description": "submitterDonorId", - "required": false, - "type": "string" - }, - { - "name": "submitterSampleId", - "in": "query", - "description": "submitterSampleId", - "required": false, - "type": "string" - }, - { - "name": "submitterSpecimenId", - "in": "query", - "description": "submitterSpecimenId", - "required": false, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Analysis" - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - }, - "post": { - "tags": [ - "Analysis" - ], - "summary": "IdSearch", - "description": "Search for analysis objects by specifying an IdSearchRequest", - "operationId": "idSearchUsingPOST", - "consumes": [ - "application/json", - "application/json;charset=UTF-8" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "in": "body", - "name": "request", - "description": "request", - "required": true, - "schema": { - "$ref": "#/definitions/IdSearchRequest" - } - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/Analysis" - } - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/suppress/{id}": { - "put": { - "tags": [ - "Analysis" - ], - "summary": "SuppressAnalysis", - "description": "Suppress an analysis. Used if a previously published analysis is no longer needed. Instead of removing the analysis, it is marked as \"suppressed\"", - "operationId": "suppressAnalysisUsingPUT", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/GenericMessage" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/unpublish/{id}": { - "put": { - "tags": [ - "Analysis" - ], - "summary": "UnpublishAnalysis", - "description": "Unpublish an analysis. Set the analysis status to unpublished", - "operationId": "unpublishAnalysisUsingPUT", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/GenericMessage" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/{analysisId}": { - "put": { - "tags": [ - "Analysis" - ], - "summary": "UpdateAnalysis", - "description": "Update dynamic-data for for an analysis", - "operationId": "updateAnalysisUsingPUT", - "consumes": [ - "application/json", - "application/json;charset=UTF-8" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "analysisId", - "in": "path", - "description": "analysisId", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - }, - { - "in": "body", - "name": "updateAnalysisRequest", - "description": "updateAnalysisRequest", - "required": true, - "schema": { - "$ref": "#/definitions/JsonNode" - } - } - ], - "responses": { - "200": { - "description": "OK" - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - }, - "patch": { - "tags": [ - "Analysis" - ], - "summary": "PatchUpdateAnalysis", - "description": "Partial Update dynamic-data for for an analysis", - "operationId": "patchUpdateAnalysisUsingPATCH", - "consumes": [ - "application/json", - "application/json;charset=UTF-8" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "analysisId", - "in": "path", - "description": "analysisId", - "required": true, - "type": "string" - }, - { - "in": "body", - "name": "patchUpdateAnalysisRequest", - "description": "patchUpdateAnalysisRequest", - "required": true, - "schema": { - "$ref": "#/definitions/JsonNode" - } - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK" - }, - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/{id}": { - "get": { - "tags": [ - "Analysis" - ], - "summary": "ReadAnalysis", - "description": "Retrieve the analysis object for an analysisId", - "operationId": "readUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Analysis" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/analysis/{id}/files": { - "get": { - "tags": [ - "Analysis" - ], - "summary": "ReadAnalysisFiles", - "description": "Retrieve the file objects for an analysisId", - "operationId": "getFilesByIdUsingGET", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "array", - "items": { - "$ref": "#/definitions/FileEntity" - } - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/donors/{ids}": { - "delete": { - "tags": [ - "Donor" - ], - "summary": "DeleteDonors", - "description": "Deletes donor data and all dependent specimens and samples for donorIds", - "operationId": "deleteUsingDELETE", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "ids", - "in": "path", - "description": "Comma separated list of donorIds", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/donors/{id}": { - "get": { - "tags": [ - "Donor" - ], - "summary": "ReadDonor", - "description": "Retrieves donor data for a donorId", - "operationId": "readUsingGET_1", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Donor" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/files/{ids}": { - "delete": { - "tags": [ - "File" - ], - "summary": "DeleteFiles", - "description": "Deletes file data for fileIds", - "operationId": "deleteUsingDELETE_1", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "ids", - "in": "path", - "description": "Comma separated list of fileIds", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/files/{id}": { - "get": { - "tags": [ - "File" - ], - "summary": "ReadFile", - "description": "Retrieves file data for a fileId", - "operationId": "readUsingGET_2", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/FileEntity" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - }, - "put": { - "tags": [ - "File" - ], - "summary": "UpdateFile", - "description": "Updates file data for a fileId", - "operationId": "updateUsingPUT", - "consumes": [ - "application/json" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "in": "body", - "name": "fileUpdateRequest", - "description": "File data to update", - "required": true, - "schema": { - "$ref": "#/definitions/FileUpdateRequest" - } - }, - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/FileUpdateResponse" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/samples/{ids}": { - "delete": { - "tags": [ - "Sample" - ], - "summary": "DeleteSamples", - "description": "Deletes sample data for sampleIds", - "operationId": "deleteUsingDELETE_2", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "ids", - "in": "path", - "description": "Comma separated list of sampleIds", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/samples/{id}": { - "get": { - "tags": [ - "Sample" - ], - "summary": "ReadSample", - "description": "Retrieves sample data for a sampleId", - "operationId": "readUsingGET_4", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Sample" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/specimens/{ids}": { - "delete": { - "tags": [ - "Specimen" - ], - "summary": "DeleteSpecimens", - "description": "Deletes specimen data and all dependent samples for specimenIds", - "operationId": "deleteUsingDELETE_3", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "ids", - "in": "path", - "description": "Comma separated list of specimenIds", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "type": "string" - } - }, - "204": { - "description": "No Content" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - } - }, - "deprecated": false - } - }, - "/studies/{studyId}/specimens/{id}": { - "get": { - "tags": [ - "Specimen" - ], - "summary": "ReadSpecimen", - "description": "Retrieves specimen data for a specimenId", - "operationId": "readUsingGET_5", - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "id", - "in": "path", - "description": "id", - "required": true, - "type": "string" - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/Specimen" - } - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - }, - "/submit/{studyId}": { - "post": { - "tags": [ - "Submit" - ], - "summary": "Submit", - "description": "Synchronously submit a json payload", - "operationId": "submitUsingPOST", - "consumes": [ - "application/json", - "application/json;charset=UTF-8" - ], - "produces": [ - "*/*" - ], - "parameters": [ - { - "name": "Authorization", - "in": "header", - "description": "Authorization", - "required": false, - "type": "string" - }, - { - "name": "allowDuplicates", - "in": "query", - "description": "allowDuplicates", - "required": false, - "type": "boolean", - "default": false - }, - { - "in": "body", - "name": "json_payload", - "description": "json_payload", - "required": true, - "schema": { - "type": "string" - } - }, - { - "name": "studyId", - "in": "path", - "description": "studyId", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "OK", - "schema": { - "$ref": "#/definitions/SubmitResponse" - } - }, - "201": { - "description": "Created" - }, - "401": { - "description": "Unauthorized" - }, - "403": { - "description": "Forbidden" - }, - "404": { - "description": "Not Found" - } - }, - "deprecated": false - } - } - }, - "definitions": { - "Analysis": { - "type": "object", - "properties": { - "analysisId": { - "type": "string" - }, - "analysisState": { - "type": "string" - }, - "analysisStateHistory": { - "type": "array", - "items": { - "$ref": "#/definitions/AnalysisStateChange" - } - }, - "analysisType": { - "$ref": "#/definitions/AnalysisTypeId" - }, - "createdAt": { - "type": "string", - "format": "date-time" - }, - "files": { - "type": "array", - "items": { - "$ref": "#/definitions/FileEntity" - } - }, - "firstPublishedAt": { - "type": "string", - "format": "date-time" - }, - "publishedAt": { - "type": "string", - "format": "date-time" - }, - "samples": { - "type": "array", - "items": { - "$ref": "#/definitions/CompositeEntity" - } - }, - "studyId": { - "type": "string" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - } - }, - "title": "Analysis" - }, - "AnalysisStateChange": { - "type": "object", - "properties": { - "initialState": { - "type": "string" - }, - "updatedAt": { - "type": "string", - "format": "date-time" - }, - "updatedState": { - "type": "string" - } - }, - "title": "AnalysisStateChange" - }, - "AnalysisType": { - "type": "object", - "properties": { - "createdAt": { - "type": "string", - "format": "date-time" - }, - "name": { - "type": "string" - }, - "schema": { - "$ref": "#/definitions/JsonNode" - }, - "version": { - "type": "integer", - "format": "int32" - } - }, - "title": "AnalysisType" - }, - "AnalysisTypeId": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "version": { - "type": "integer", - "format": "int32" - } - }, - "title": "AnalysisTypeId" - }, - "CompositeEntity": { - "type": "object", - "properties": { - "donor": { - "$ref": "#/definitions/Donor" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "matchedNormalSubmitterSampleId": { - "type": "string" - }, - "sampleId": { - "type": "string" - }, - "sampleType": { - "type": "string" - }, - "specimen": { - "$ref": "#/definitions/Specimen" - }, - "specimenId": { - "type": "string" - }, - "submitterSampleId": { - "type": "string" - } - }, - "title": "CompositeEntity" - }, - "Donor": { - "type": "object", - "properties": { - "donorId": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "studyId": { - "type": "string" - }, - "submitterDonorId": { - "type": "string" - } - }, - "title": "Donor" - }, - "DonorWithSpecimens": { - "type": "object", - "properties": { - "donorId": { - "type": "string" - }, - "gender": { - "type": "string" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "specimens": { - "type": "array", - "items": { - "$ref": "#/definitions/SpecimenWithSamples" - } - }, - "studyId": { - "type": "string" - }, - "submitterDonorId": { - "type": "string" - } - }, - "title": "DonorWithSpecimens" - }, - "ExportedPayload": { - "type": "object", - "properties": { - "payloads": { - "type": "array", - "items": { - "$ref": "#/definitions/JsonNode" - } - }, - "studyId": { - "type": "string" - } - }, - "title": "ExportedPayload" - }, - "FileDTO": { - "type": "object", - "properties": { - "analysisId": { - "type": "string" - }, - "dataType": { - "type": "string" - }, - "fileAccess": { - "type": "string" - }, - "fileMd5sum": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "fileSize": { - "type": "integer", - "format": "int64" - }, - "fileType": { - "type": "string" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "objectId": { - "type": "string" - }, - "studyId": { - "type": "string" - } - }, - "title": "FileDTO" - }, - "FileEntity": { - "type": "object", - "properties": { - "analysisId": { - "type": "string" - }, - "dataType": { - "type": "string" - }, - "fileAccess": { - "type": "string" - }, - "fileMd5sum": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "fileSize": { - "type": "integer", - "format": "int64" - }, - "fileType": { - "type": "string" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "objectId": { - "type": "string" - }, - "studyId": { - "type": "string" - } - }, - "title": "FileEntity" - }, - "FileUpdateRequest": { - "type": "object", - "properties": { - "dataType": { - "type": "string" - }, - "fileAccess": { - "type": "string" - }, - "fileMd5sum": { - "type": "string" - }, - "fileSize": { - "type": "integer", - "format": "int64" - }, - "info": { - "$ref": "#/definitions/JsonNode" - } - }, - "title": "FileUpdateRequest" - }, - "FileUpdateResponse": { - "type": "object", - "properties": { - "fileUpdateType": { - "type": "string", - "enum": [ - "NO_UPDATE", - "CONTENT_UPDATE", - "METADATA_UPDATE" - ] - }, - "message": { - "type": "string" - }, - "originalAnalysisState": { - "type": "string", - "enum": [ - "PUBLISHED", - "UNPUBLISHED", - "SUPPRESSED" - ] - }, - "originalFile": { - "$ref": "#/definitions/FileDTO" - }, - "unpublishedAnalysis": { - "type": "boolean" - } - }, - "title": "FileUpdateResponse" - }, - "GenericMessage": { - "type": "object", - "properties": { - "message": { - "type": "string" - } - }, - "title": "GenericMessage" - }, - "GetAnalysisResponse": { - "type": "object", - "properties": { - "analyses": { - "type": "array", - "items": { - "$ref": "#/definitions/Analysis" - } - }, - "currentTotalAnalyses": { - "type": "integer", - "format": "int32" - }, - "totalAnalyses": { - "type": "integer", - "format": "int32" - } - }, - "title": "GetAnalysisResponse" - }, - "IdSearchRequest": { - "type": "object", - "properties": { - "donorId": { - "type": "string", - "description": "regex pattern. Default is wildcard" - }, - "objectId": { - "type": "string", - "description": "regex pattern. Default is wildcard" - }, - "sampleId": { - "type": "string", - "description": "regex pattern. Default is wildcard" - }, - "specimenId": { - "type": "string", - "description": "regex pattern. Default is wildcard" - }, - "submitterDonorIds": { - "type": "string", - "description": "regex pattern. Default is wildcard" - }, - "submitterSampleId": { - "type": "string", - "description": "regex pattern. Default is wildcard" - }, - "submitterSpecimenIds": { - "type": "string", - "description": "regex pattern. Default is wildcard" - } - }, - "title": "IdSearchRequest" - }, - "JsonNode": { - "type": "object", - "title": "JsonNode" - }, - "Legacy": { - "type": "object", - "properties": { - "access": { - "type": "string" - }, - "fileName": { - "type": "string" - }, - "gnosId": { - "type": "string" - }, - "id": { - "type": "string" - }, - "projectCode": { - "type": "string" - } - }, - "title": "Legacy" - }, - "PageDTO«AnalysisType»": { - "type": "object", - "properties": { - "count": { - "type": "integer", - "format": "int64" - }, - "limit": { - "type": "integer", - "format": "int32" - }, - "offset": { - "type": "integer", - "format": "int32" - }, - "resultSet": { - "type": "array", - "items": { - "$ref": "#/definitions/AnalysisType" - } - } - }, - "title": "PageDTO«AnalysisType»" - }, - "RegisterAnalysisTypeRequest": { - "type": "object", - "properties": { - "name": { - "type": "string" - }, - "schema": { - "$ref": "#/definitions/JsonNode" - } - }, - "title": "RegisterAnalysisTypeRequest" - }, - "Sample": { - "type": "object", - "properties": { - "info": { - "$ref": "#/definitions/JsonNode" - }, - "matchedNormalSubmitterSampleId": { - "type": "string" - }, - "sampleId": { - "type": "string" - }, - "sampleType": { - "type": "string" - }, - "specimenId": { - "type": "string" - }, - "submitterSampleId": { - "type": "string" - } - }, - "title": "Sample" - }, - "Specimen": { - "type": "object", - "properties": { - "donorId": { - "type": "string" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "specimenId": { - "type": "string" - }, - "specimenTissueSource": { - "type": "string" - }, - "specimenType": { - "type": "string" - }, - "submitterSpecimenId": { - "type": "string" - }, - "tumourNormalDesignation": { - "type": "string" - } - }, - "title": "Specimen" - }, - "SpecimenWithSamples": { - "type": "object", - "properties": { - "donorId": { - "type": "string" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "samples": { - "type": "array", - "items": { - "$ref": "#/definitions/Sample" - } - }, - "specimen": { - "$ref": "#/definitions/Specimen" - }, - "specimenId": { - "type": "string" - }, - "specimenTissueSource": { - "type": "string" - }, - "specimenType": { - "type": "string" - }, - "submitterSpecimenId": { - "type": "string" - }, - "tumourNormalDesignation": { - "type": "string" - } - }, - "title": "SpecimenWithSamples" - }, - "Study": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "name": { - "type": "string" - }, - "organization": { - "type": "string" - }, - "studyId": { - "type": "string" - } - }, - "title": "Study" - }, - "StudyWithDonors": { - "type": "object", - "properties": { - "description": { - "type": "string" - }, - "donors": { - "type": "array", - "items": { - "$ref": "#/definitions/DonorWithSpecimens" - } - }, - "info": { - "$ref": "#/definitions/JsonNode" - }, - "name": { - "type": "string" - }, - "organization": { - "type": "string" - }, - "studyId": { - "type": "string" - } - }, - "title": "StudyWithDonors" - }, - "SubmitResponse": { - "type": "object", - "properties": { - "analysisId": { - "type": "string" - }, - "status": { - "type": "string" - } - }, - "title": "SubmitResponse" - } - } - } \ No newline at end of file +{"swagger":"2.0","info":{"description":"Song API reference for developers. SONG is an open source system for validating and tracking metadata about raw data submissions, assigning identifiers to entities of interest, and managing the state of the raw data with regards to publication and access","version":"1.0","title":"Song API"},"host":"localhost:8080","basePath":"/","tags":[{"name":"Analysis","description":"Create, Read, Update, publish, unpublish, suppress and search analyses"},{"name":"Export","description":"Export payloads"},{"name":"File","description":"Read, Update and delete files"},{"name":"Health","description":"Check server health"},{"name":"Legacy Entity","description":"Legacy support for dcc-metadata"},{"name":"Schema","description":"Get schemas used for uploads"},{"name":"Study","description":"Create and read studies"},{"name":"Submit","description":"Submit and validate json metadata"}],"paths":{"/entities":{"get":{"tags":["Legacy Entity"],"summary":"FindLegacyEntities","description":"Page through LegacyEntity data","operationId":"findUsingGET","produces":["*/*"],"parameters":[{"name":"access","in":"query","required":false,"type":"string"},{"name":"fields","in":"query","description":"fields","required":false,"items":{"type":"object","additionalProperties":{"type":"string"}}},{"name":"fileName","in":"query","required":false,"type":"string"},{"name":"gnosId","in":"query","required":false,"type":"string"},{"name":"id","in":"query","required":false,"type":"string"},{"name":"offset","in":"query","required":false,"type":"integer","format":"int64"},{"name":"page","in":"query","description":"Results page you want to retrieve (0..N)","required":false,"type":"ref"},{"name":"pageNumber","in":"query","required":false,"type":"integer","format":"int32"},{"name":"pageSize","in":"query","required":false,"type":"integer","format":"int32"},{"name":"paged","in":"query","required":false,"type":"boolean"},{"name":"projectCode","in":"query","required":false,"type":"string"},{"name":"size","in":"query","description":"Number of records per page.","required":false,"type":"ref"},{"name":"sort.sorted","in":"query","required":false,"type":"boolean"},{"name":"sort.unsorted","in":"query","required":false,"type":"boolean"},{"name":"unpaged","in":"query","required":false,"type":"boolean"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/JsonNode"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/entities/{id}":{"get":{"tags":["Legacy Entity"],"summary":"ReadLegacyEntity","description":"Read entity data for a legacy entity id","operationId":"readUsingGET_2","produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Legacy"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/export/analysis/{analysisIds}":{"get":{"tags":["Export"],"summary":"ExportAnalysis","description":"Exports the payload for a list of analysisIds","operationId":"exportAnalysisUsingGET","produces":["*/*"],"parameters":[{"name":"analysisIds","in":"path","description":"Comma separated list of analysisIds","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ExportedPayload"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/export/studies/{studyId}":{"get":{"tags":["Export"],"summary":"ExportStudy","description":"Exports all the payloads for a study","operationId":"exportStudyUsingGET","produces":["*/*"],"parameters":[{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/ExportedPayload"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/isAlive":{"get":{"tags":["Health"],"summary":"IsAlive","description":"Checks if the server is running","operationId":"isAliveUsingGET","produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"boolean"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/schemas":{"get":{"tags":["Schema"],"summary":"ListAnalysisTypes","description":"Retrieves a list of registered analysisTypes","operationId":"listAnalysisTypesUsingGET","produces":["*/*"],"parameters":[{"name":"hideSchema","in":"query","description":"Hide the schema field from the response","required":false,"type":"boolean","default":false,"allowEmptyValue":false,"x-example":false},{"name":"limit","in":"query","description":"Number of results to retrieve","required":false,"type":"ref","default":"20"},{"name":"names","in":"query","description":"Comma separated list of names","required":false,"type":"array","items":{"type":"string"},"collectionFormat":"multi","allowEmptyValue":false},{"name":"offset","in":"query","description":"Index of first result to retrieve","required":false,"type":"ref","default":"0"},{"name":"pageNumber","in":"query","required":false,"type":"integer","format":"int32"},{"name":"pageSize","in":"query","required":false,"type":"integer","format":"int32"},{"name":"paged","in":"query","required":false,"type":"boolean"},{"name":"sort","in":"query","description":"Comma separated fields to sort on","required":false,"type":"string"},{"name":"sort.sorted","in":"query","required":false,"type":"boolean"},{"name":"sort.unsorted","in":"query","required":false,"type":"boolean"},{"name":"sortOrder","in":"query","description":"Sorting order: ASC|DESC. Default order: DESC","required":false,"type":"string"},{"name":"unpaged","in":"query","required":false,"type":"boolean"},{"name":"unrenderedOnly","in":"query","description":"Only retrieve the unrendered schema that was initially registered","required":false,"type":"boolean","default":false,"allowEmptyValue":false,"x-example":false},{"name":"versions","in":"query","description":"Comma separated list of versions","required":false,"type":"array","items":{"type":"integer","format":"int32"},"collectionFormat":"multi","allowEmptyValue":false}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/PageDTO«AnalysisType»"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false},"post":{"tags":["Schema"],"summary":"RegisterAnalysisType","description":"Registers an analysisType schema","operationId":"registerUsingPOST","consumes":["application/json","application/json;charset=UTF-8"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"in":"body","name":"request","description":"request","required":true,"schema":{"$ref":"#/definitions/RegisterAnalysisTypeRequest"}}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/AnalysisType"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/schemas/registration":{"get":{"tags":["Schema"],"summary":"GetRegistrationSchema","description":"Retrieves the meta-schema used to validate AnalysisType schemas during registration","operationId":"getAnalysisTypeRegistrationSchemaUsingGET","produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/schemas/{name}":{"get":{"tags":["Schema"],"summary":"GetAnalysisTypeVersion","description":"Retrieves the latest version of a schema for an analysisType","operationId":"getAnalysisTypeVersionUsingGET","produces":["*/*"],"parameters":[{"name":"name","in":"path","description":"The name of an analysisType","required":true,"type":"string"},{"name":"unrenderedOnly","in":"query","description":"Only retrieve the unrendered schema that was initially registered","required":false,"type":"boolean","default":false,"allowEmptyValue":false,"x-example":false},{"name":"version","in":"query","description":"Optionally, retrieve a specific version of the analysisType","required":false,"type":"integer","format":"int32","allowEmptyValue":false}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/AnalysisType"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/all":{"get":{"tags":["Study"],"summary":"GetAllStudyIds","description":"Retrieves all studyIds","operationId":"findAllStudiesUsingGET","produces":["*/*"],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"type":"string"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}":{"get":{"tags":["Study"],"summary":"GetStudy","description":"Retrieves information for a study","operationId":"getStudyUsingGET","produces":["*/*"],"parameters":[{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Study"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/":{"post":{"tags":["Study"],"summary":"CreateStudy","description":"Creates a new study","operationId":"saveStudyUsingPOST","consumes":["application/json","application/json;charset=UTF-8"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"in":"body","name":"study","description":"study","required":true,"schema":{"$ref":"#/definitions/Study"}},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/GenericMessage"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis":{"get":{"tags":["Analysis"],"summary":"GetAnalysesForStudy","description":"Retrieve all analysis objects for a studyId","operationId":"getAnalysisUsingGET_1","produces":["*/*"],"parameters":[{"name":"analysisStates","in":"query","description":"Non-empty comma separated list of analysis states to filter by","required":false,"type":"string","default":"PUBLISHED","allowEmptyValue":false},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Analysis"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis/paginated":{"get":{"tags":["Analysis"],"summary":"GetAnalysesForStudy","description":"Retrieve paginated analysis objects for a studyId. analysisState is optional, default to PUBLISHED, offset is required, default to 0, limit is required, default to 100. Results are sorted by analysis id in ASC order.","operationId":"getAnalysisUsingGET","produces":["*/*"],"parameters":[{"name":"analysisStates","in":"query","description":"Non-empty comma separated list of analysis states to filter by","required":false,"type":"string","default":"PUBLISHED","allowEmptyValue":false},{"name":"limit","in":"query","description":"limit","required":false,"type":"integer","default":100,"format":"int32"},{"name":"offset","in":"query","description":"offset","required":false,"type":"integer","default":0,"format":"int32"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/GetAnalysisResponse"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis/publish/{id}":{"put":{"tags":["Analysis"],"summary":"PublishAnalysis","description":"Publish an analysis. This checks to see if the files associated with the input analysisId exist in the storage server","operationId":"publishAnalysisUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"id","in":"path","description":"id","required":true,"type":"string"},{"name":"ignoreUndefinedMd5","in":"query","description":"Ignores files that have an undefined MD5 checksum when publishing","required":false,"type":"boolean","default":false,"allowEmptyValue":false,"x-example":false},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/GenericMessage"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis/search/id":{"get":{"tags":["Analysis"],"summary":"IdSearch","description":"Search for analysis objects by specifying regex patterns for the fileIds request parameters","operationId":"idSearchUsingGET","produces":["*/*"],"parameters":[{"name":"fileId","in":"query","description":"fileId","required":false,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Analysis"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false},"post":{"tags":["Analysis"],"summary":"IdSearch","description":"Search for analysis objects by specifying an IdSearchRequest","operationId":"idSearchUsingPOST","consumes":["application/json","application/json;charset=UTF-8"],"produces":["*/*"],"parameters":[{"in":"body","name":"request","description":"request","required":true,"schema":{"$ref":"#/definitions/IdSearchRequest"}},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/Analysis"}}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis/suppress/{id}":{"put":{"tags":["Analysis"],"summary":"SuppressAnalysis","description":"Suppress an analysis. Used if a previously published analysis is no longer needed. Instead of removing the analysis, it is marked as \"suppressed\"","operationId":"suppressAnalysisUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"id","in":"path","description":"id","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/GenericMessage"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis/unpublish/{id}":{"put":{"tags":["Analysis"],"summary":"UnpublishAnalysis","description":"Unpublish an analysis. Set the analysis status to unpublished","operationId":"unpublishAnalysisUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"id","in":"path","description":"id","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/GenericMessage"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis/{analysisId}":{"put":{"tags":["Analysis"],"summary":"UpdateAnalysis","description":"Update dynamic-data for for an analysis","operationId":"updateAnalysisUsingPUT","consumes":["application/json","application/json;charset=UTF-8"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"analysisId","in":"path","description":"analysisId","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"},{"in":"body","name":"updateAnalysisRequest","description":"updateAnalysisRequest","required":true,"schema":{"$ref":"#/definitions/JsonNode"}}],"responses":{"200":{"description":"OK"},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false},"patch":{"tags":["Analysis"],"summary":"PatchUpdateAnalysis","description":"Partial Update dynamic-data for for an analysis","operationId":"patchUpdateAnalysisUsingPATCH","consumes":["application/json","application/json;charset=UTF-8"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"analysisId","in":"path","description":"analysisId","required":true,"type":"string"},{"in":"body","name":"patchUpdateAnalysisRequest","description":"patchUpdateAnalysisRequest","required":true,"schema":{"$ref":"#/definitions/JsonNode"}},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK"},"204":{"description":"No Content"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"deprecated":false}},"/studies/{studyId}/analysis/{id}":{"get":{"tags":["Analysis"],"summary":"ReadAnalysis","description":"Retrieve the analysis object for an analysisId","operationId":"readUsingGET","produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/Analysis"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/analysis/{id}/files":{"get":{"tags":["Analysis"],"summary":"ReadAnalysisFiles","description":"Retrieve the file objects for an analysisId","operationId":"getFilesByIdUsingGET","produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"array","items":{"$ref":"#/definitions/FileEntity"}}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/studies/{studyId}/files/{ids}":{"delete":{"tags":["File"],"summary":"DeleteFiles","description":"Deletes file data for fileIds","operationId":"deleteUsingDELETE","produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"ids","in":"path","description":"Comma separated list of fileIds","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"type":"string"}},"204":{"description":"No Content"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"}},"deprecated":false}},"/studies/{studyId}/files/{id}":{"get":{"tags":["File"],"summary":"ReadFile","description":"Retrieves file data for a fileId","operationId":"readUsingGET_1","produces":["*/*"],"parameters":[{"name":"id","in":"path","description":"id","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/FileEntity"}},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false},"put":{"tags":["File"],"summary":"UpdateFile","description":"Updates file data for a fileId","operationId":"updateUsingPUT","consumes":["application/json"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"in":"body","name":"fileUpdateRequest","description":"File data to update","required":true,"schema":{"$ref":"#/definitions/FileUpdateRequest"}},{"name":"id","in":"path","description":"id","required":true,"type":"string"},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/FileUpdateResponse"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}},"/submit/{studyId}":{"post":{"tags":["Submit"],"summary":"Submit","description":"Synchronously submit a json payload","operationId":"submitUsingPOST","consumes":["application/json","application/json;charset=UTF-8"],"produces":["*/*"],"parameters":[{"name":"Authorization","in":"header","description":"Authorization","required":false,"type":"string"},{"name":"allowDuplicates","in":"query","description":"allowDuplicates","required":false,"type":"boolean","default":false},{"in":"body","name":"json_payload","description":"json_payload","required":true,"schema":{"type":"string"}},{"name":"studyId","in":"path","description":"studyId","required":true,"type":"string"}],"responses":{"200":{"description":"OK","schema":{"$ref":"#/definitions/SubmitResponse"}},"201":{"description":"Created"},"401":{"description":"Unauthorized"},"403":{"description":"Forbidden"},"404":{"description":"Not Found"}},"deprecated":false}}},"definitions":{"Analysis":{"type":"object","properties":{"analysisId":{"type":"string"},"analysisState":{"type":"string"},"analysisStateHistory":{"type":"array","items":{"$ref":"#/definitions/AnalysisStateChange"}},"analysisType":{"$ref":"#/definitions/AnalysisTypeId"},"createdAt":{"type":"string","format":"date-time"},"files":{"type":"array","items":{"$ref":"#/definitions/FileEntity"}},"firstPublishedAt":{"type":"string","format":"date-time"},"publishedAt":{"type":"string","format":"date-time"},"studyId":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}},"title":"Analysis"},"AnalysisStateChange":{"type":"object","properties":{"initialState":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"updatedState":{"type":"string"}},"title":"AnalysisStateChange"},"AnalysisType":{"type":"object","properties":{"createdAt":{"type":"string","format":"date-time"},"externalValidations":{"type":"array","items":{"$ref":"#/definitions/ExternalValidation"}},"fileTypes":{"type":"array","items":{"type":"string"}},"name":{"type":"string"},"options":{"$ref":"#/definitions/AnalysisTypeOptions"},"schema":{"$ref":"#/definitions/JsonNode"},"version":{"type":"integer","format":"int32"}},"title":"AnalysisType"},"AnalysisTypeId":{"type":"object","properties":{"name":{"type":"string"},"version":{"type":"integer","format":"int32"}},"title":"AnalysisTypeId"},"AnalysisTypeOptions":{"type":"object","properties":{"externalValidations":{"type":"array","items":{"$ref":"#/definitions/ExternalValidation"}},"fileTypes":{"type":"array","items":{"type":"string"}}},"title":"AnalysisTypeOptions"},"ExportedPayload":{"type":"object","properties":{"payloads":{"type":"array","items":{"$ref":"#/definitions/JsonNode"}},"studyId":{"type":"string"}},"title":"ExportedPayload"},"ExternalValidation":{"type":"object","properties":{"jsonPath":{"type":"string"},"url":{"type":"string"}},"title":"ExternalValidation"},"FileDTO":{"type":"object","properties":{"analysisId":{"type":"string"},"dataType":{"type":"string"},"fileAccess":{"type":"string"},"fileMd5sum":{"type":"string"},"fileName":{"type":"string"},"fileSize":{"type":"integer","format":"int64"},"fileType":{"type":"string"},"info":{"$ref":"#/definitions/JsonNode"},"objectId":{"type":"string"},"studyId":{"type":"string"}},"title":"FileDTO"},"FileEntity":{"type":"object","properties":{"analysisId":{"type":"string"},"dataType":{"type":"string"},"fileAccess":{"type":"string"},"fileMd5sum":{"type":"string"},"fileName":{"type":"string"},"fileSize":{"type":"integer","format":"int64"},"fileType":{"type":"string"},"info":{"$ref":"#/definitions/JsonNode"},"objectId":{"type":"string"},"studyId":{"type":"string"}},"title":"FileEntity"},"FileUpdateRequest":{"type":"object","properties":{"dataType":{"type":"string"},"fileAccess":{"type":"string"},"fileMd5sum":{"type":"string"},"fileSize":{"type":"integer","format":"int64"},"info":{"$ref":"#/definitions/JsonNode"}},"title":"FileUpdateRequest"},"FileUpdateResponse":{"type":"object","properties":{"fileUpdateType":{"type":"string","enum":["NO_UPDATE","CONTENT_UPDATE","METADATA_UPDATE"]},"message":{"type":"string"},"originalAnalysisState":{"type":"string","enum":["PUBLISHED","UNPUBLISHED","SUPPRESSED"]},"originalFile":{"$ref":"#/definitions/FileDTO"},"unpublishedAnalysis":{"type":"boolean"}},"title":"FileUpdateResponse"},"GenericMessage":{"type":"object","properties":{"message":{"type":"string"}},"title":"GenericMessage"},"GetAnalysisResponse":{"type":"object","properties":{"analyses":{"type":"array","items":{"$ref":"#/definitions/Analysis"}},"currentTotalAnalyses":{"type":"integer","format":"int32"},"totalAnalyses":{"type":"integer","format":"int32"}},"title":"GetAnalysisResponse"},"IdSearchRequest":{"type":"object","properties":{"objectId":{"type":"string","description":"regex pattern. Default is wildcard"}},"title":"IdSearchRequest"},"JsonNode":{"type":"object","title":"JsonNode"},"Legacy":{"type":"object","properties":{"access":{"type":"string"},"fileName":{"type":"string"},"gnosId":{"type":"string"},"id":{"type":"string"},"projectCode":{"type":"string"}},"title":"Legacy"},"PageDTO«AnalysisType»":{"type":"object","properties":{"count":{"type":"integer","format":"int64"},"limit":{"type":"integer","format":"int32"},"offset":{"type":"integer","format":"int32"},"resultSet":{"type":"array","items":{"$ref":"#/definitions/AnalysisType"}}},"title":"PageDTO«AnalysisType»"},"RegisterAnalysisTypeRequest":{"type":"object","properties":{"name":{"type":"string"},"options":{"$ref":"#/definitions/AnalysisTypeOptions"},"schema":{"$ref":"#/definitions/JsonNode"}},"title":"RegisterAnalysisTypeRequest"},"Study":{"type":"object","properties":{"description":{"type":"string"},"info":{"$ref":"#/definitions/JsonNode"},"name":{"type":"string"},"organization":{"type":"string"},"studyId":{"type":"string"}},"title":"Study"},"SubmitResponse":{"type":"object","properties":{"analysisId":{"type":"string"},"status":{"type":"string"}},"title":"SubmitResponse"}}} \ No newline at end of file diff --git a/website/src/components/SwaggerAPIDoc/swagger-overrides.module.css b/website/src/components/SwaggerAPIDoc/swagger-overrides.module.css new file mode 100644 index 00000000..4da73a65 --- /dev/null +++ b/website/src/components/SwaggerAPIDoc/swagger-overrides.module.css @@ -0,0 +1,92 @@ +/* + * swagger-ui-react ships its own fully self-contained stylesheet (every rule + * prefixed with `.swagger-ui`), but it hardcodes a light-mode palette and + * assumes it owns bare element selectors (h1-h5, pre, table, a, ...). Docusaurus's + * Infima also styles those same bare elements, and switches their colors for + * dark mode via CSS variables. Depending on stylesheet load order the two + * fight over identical specificity, which is what breaks contrast here (e.g. + * white-on-white version badges even in light mode, gray-on-navy body text in + * dark mode). Rather than override every one of swagger-ui's ~200 selectors, + * pin the embed to its own light card that doesn't participate in the site's + * dark mode, and re-assert the handful of properties Infima actually clobbers. + */ + +.swaggerCard { + color-scheme: light; + background: #ffffff; + border: 1px solid var(--ifm-toc-border-color); + border-radius: var(--ifm-global-radius); + padding: 1.5rem 1.5rem 0.5rem; + margin: 1.5rem 0 2rem; +} + +.swaggerCard :global(.swagger-ui) { + color: #3b4151; +} + +.swaggerCard :global(.swagger-ui h1), +.swaggerCard :global(.swagger-ui h2), +.swaggerCard :global(.swagger-ui h3), +.swaggerCard :global(.swagger-ui h4), +.swaggerCard :global(.swagger-ui h5), +.swaggerCard :global(.swagger-ui label), +.swaggerCard :global(.swagger-ui p), +.swaggerCard :global(.swagger-ui table), +.swaggerCard :global(.swagger-ui .opblock-tag), +.swaggerCard :global(.swagger-ui .opblock-tag-section h3), +.swaggerCard :global(.swagger-ui .opblock .opblock-summary-description), +.swaggerCard :global(.swagger-ui .opblock-description-wrapper), +.swaggerCard :global(.swagger-ui .opblock-external-docs-wrapper), +.swaggerCard :global(.swagger-ui .opblock-title_normal), +.swaggerCard :global(.swagger-ui .parameter__name), +.swaggerCard :global(.swagger-ui .parameter__type), +.swaggerCard :global(.swagger-ui .parameter__in), +.swaggerCard :global(.swagger-ui .response-col_status), +.swaggerCard :global(.swagger-ui .response-col_description), +.swaggerCard :global(.swagger-ui .renderedMarkdown p), +.swaggerCard :global(.swagger-ui .model-title), +.swaggerCard :global(.swagger-ui .model), +.swaggerCard :global(.swagger-ui .prop-name), +.swaggerCard :global(.swagger-ui .prop-type) { + color: #3b4151 !important; +} + +.swaggerCard :global(.swagger-ui .opblock-tag small) { + color: #6b6b6b !important; +} + +.swaggerCard :global(.swagger-ui pre), +.swaggerCard :global(.swagger-ui code) { + background: #f6f7f8 !important; + color: #3b4151 !important; +} + +/* The little version / OAS pills sit on a dark pill background (set on the + * parent .title small), not the code-block background applied above. */ +.swaggerCard :global(.swagger-ui .info .title small pre.version) { + background: transparent !important; + color: #ffffff !important; +} + +/* swagger-ui's own title + description duplicate the heading and prose we + * already author directly above every embed in the MDX + * (and for specs whose info.title is a raw package name, it reads worse than + * just omitting it). Keep the base URL line, drop the rest. */ +.swaggerCard :global(.swagger-ui .info hgroup.main .title), +.swaggerCard :global(.swagger-ui .info .description) { + display: none; +} + +.swaggerCard :global(.swagger-ui .info) { + margin: 0 0 1rem; +} + +.swaggerCard :global(.swagger-ui .scheme-container) { + background: transparent; + box-shadow: none; + padding: 0; +} + +.swaggerCard :global(.swagger-ui .wrapper) { + padding: 0; +} diff --git a/website/src/css/custom.css b/website/src/css/custom.css index 508a6b88..01ecfcc4 100644 --- a/website/src/css/custom.css +++ b/website/src/css/custom.css @@ -6,123 +6,201 @@ /* You can override the default Infima variables here. */ :root { - --ifm-color-primary: #9E005D; - --ifm-color-primary-hero: #71bde8; - --ifm-color-primary-dark: #03497e; - --ifm-color-primary-darker: #034577; - --ifm-color-primary-darkest: #023962; - --ifm-color-primary-light: #05599a; - --ifm-color-primary-lighter: #055da1; - --ifm-color-primary-lightest: #0669b6; - --ifm-code-font-size: 95%; - --ifm-font-color: #003055; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); - --ifm-color-primary-search: #fefefe; - --doc-sidebar-background: #f5f6f7; - --ifm-color-footer: #f0f1f3; - - - /* Top NavBar */ - --ifm-navbar-height: 64px; - --ifm-navbar-shadow: 0 1px 6px 0 rgba(0, 0, 0, 0.1), 0 1px 5px 0 rgba(0, 0, 0, 0.08); - --navbar-item-hover-light: rgba(0, 0, 0, 0.05); - --navbar-item-hover-dark: rgba(255, 255, 255, 0.1); - - /* Front Page category blocks */ - --category-title-color: #282A35; - --category-category-color: #f7f7f7; - --category-card-color: #fefefe; - --category-block-shadow: 2px 2px 6px #282a3525; - --category-block-funding: none; - --funding-block-color: #edf9fd; + --ifm-color-primary: #9e005d; + --ifm-color-primary-hero: #71bde8; + --ifm-color-primary-dark: #03497e; + --ifm-color-primary-darker: #034577; + --ifm-color-primary-darkest: #023962; + --ifm-color-primary-light: #05599a; + --ifm-color-primary-lighter: #055da1; + --ifm-color-primary-lightest: #0669b6; + --ifm-code-font-size: 95%; + --ifm-font-family-base: + "Lato", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, + Helvetica, Arial, sans-serif; + --ifm-font-color: #003055; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.1); + --ifm-color-primary-search: #fefefe; + --doc-sidebar-background: #f5f6f7; + --ifm-color-footer: #f0f1f3; + + /* Top NavBar */ + --ifm-navbar-height: 64px; + --ifm-navbar-shadow: + 0 1px 6px 0 rgba(0, 0, 0, 0.1), 0 1px 5px 0 rgba(0, 0, 0, 0.08); + --navbar-item-hover-light: rgba(0, 0, 0, 0.05); + --navbar-item-hover-dark: rgba(255, 255, 255, 0.1); + + /* Front Page category blocks */ + --category-title-color: #282a35; + --category-category-color: #f7f7f7; + --category-card-color: #fefefe; + --category-block-shadow: 2px 2px 6px #282a3525; + --category-block-funding: none; + --funding-block-color: #edf9fd; + + /* Front page journey tags (Develop/Deploy/Use) — Develop reuses the brand + primary; Deploy and Use get their own hue so the shared guide index can + be scanned by journey at a glance. */ + --journey-develop-color: var(--ifm-color-primary); + --journey-deploy-color: #0b7285; + --journey-use-color: #a86b00; } /* For readability concerns, you should choose a lighter palette in dark mode. */ -[data-theme='dark'] { - --ifm-color-primary: #4BC6F0; - --ifm-color-primary-hero: #0767b1; - --ifm-color-primary-dark: #2a2d2f; - --ifm-color-primary-darker: #034577; - --ifm-color-primary-darkest: #023962; - --ifm-color-primary-light: #05599a; - --ifm-color-primary-lighter: #055da1; - --ifm-color-primary-lightest: #0669b6; - --ifm-background-color: #585858; - --ifm-font-color: #ffffff; - --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); - --ifm-color-primary-search: #2a2d2f; - --doc-sidebar-background: #0d0d0d; - --ifm-color-footer: #0d0d0d; - - /* Front Page category blocks */ - --category-title-color: #F2F5F8; - --category-category-color: #1B1B1D; - --category-card-color: #4e5055; - --category-block-shadow: 0px 0px 0px 2px #323845; - --category-block-shadow-funding: 0px 0px 0px 2px #323845; - --funding-block-color: #232324; +[data-theme="dark"] { + --ifm-color-primary: #4bc6f0; + --ifm-color-primary-hero: #0767b1; + --ifm-color-primary-dark: #2a2d2f; + --ifm-color-primary-darker: #034577; + --ifm-color-primary-darkest: #023962; + --ifm-color-primary-light: #05599a; + --ifm-color-primary-lighter: #055da1; + --ifm-color-primary-lightest: #0669b6; + --ifm-background-color: #585858; + --ifm-font-color: #ffffff; + --docusaurus-highlighted-code-line-bg: rgba(0, 0, 0, 0.3); + --ifm-color-primary-search: #2a2d2f; + --doc-sidebar-background: #0d0d0d; + --ifm-color-footer: #0d0d0d; + + /* Front Page category blocks */ + --category-title-color: #f2f5f8; + --category-category-color: #1b1b1d; + --category-card-color: #4e5055; + --category-block-shadow: 0px 0px 0px 2px #323845; + --category-block-shadow-funding: 0px 0px 0px 2px #323845; + --funding-block-color: #232324; + + /* Front page journey tags (Develop/Deploy/Use) */ + --journey-develop-color: var(--ifm-color-primary); + --journey-deploy-color: #a78bfa; + --journey-use-color: #e2a03f; } /* Custom styles for Docusaurus sidebar */ :root { - --sidebar-item-height: 1.5rem; - --sidebar-border-width: 3px; + --sidebar-item-height: 1.5rem; + --sidebar-border-width: 3px; } .theme-doc-sidebar-menu { - padding: 0.5rem; + padding: 0.5rem; } /* Links styling */ .menu__link { - line-height: var(--sidebar-item-height); - border-radius: 0; - transition: background-color 200ms ease; - border-left: var(--sidebar-border-width) solid transparent; + font-size: 0.85rem; + line-height: var(--sidebar-item-height); + border-radius: 0; + transition: background-color 200ms ease; + border-left: var(--sidebar-border-width) solid transparent; } .menu__link--active { - border-left: var(--sidebar-border-width) solid; - border-left-color: var(--ifm-color-primary); + border-left: var(--sidebar-border-width) solid; + border-left-color: var(--ifm-color-primary); } /* Nested levels */ .menu__list .menu__list { - border-left: 1px solid var(--ifm-color-emphasis-200); + border-left: 1px solid var(--ifm-color-emphasis-200); } .navbar__items .navbar__item:hover { - background-color: var(--navbar-item-hover-light); - border-radius: 4px; + background-color: var(--navbar-item-hover-light); + border-radius: 4px; } -[data-theme='dark'] .navbar__items .navbar__item:hover { - background-color: var(--navbar-item-hover-dark); +[data-theme="dark"] .navbar__items .navbar__item:hover { + background-color: var(--navbar-item-hover-dark); } .tableOfContents_bqdL { - border-left: 1px solid var(--ifm-color-primary); - + border-left: 1px solid var(--ifm-color-primary); } .footer { - background-color: var(--ifm-color-footer); - border-top: 1px solid #d5d8dc; - color: var(--ifm-color-primary); - } + background-color: var(--ifm-color-footer); + border-top: 1px solid #d5d8dc; + color: var(--ifm-color-primary); +} -[data-theme='dark'] .footer { - background-color: var(--ifm-color-footer); - border-top: 1px solid #44484f; - color: var(--ifm-color-primary); - } +[data-theme="dark"] .footer { + background-color: var(--ifm-color-footer); + border-top: 1px solid #44484f; + color: var(--ifm-color-primary); +} .footer__title { - color: var(--ifm-color-primary); + color: var(--ifm-color-primary); } .footer__link-item { - color: var(--ifm-font-color); + color: var(--ifm-font-color); +} + +/* Build sidebar: components paired as "Overture name (functional name)" + (e.g. "Lectern (Dictionary Management)") can still wrap on narrow + viewports even at the site-wide sidebar font-size. Keep the expand caret + aligned to the top in that case instead of floating mid-block. */ +.sidebar-component-item > .menu__list-item-collapsible { + align-items: flex-start; +} + +.sidebar-component-item > .menu__list-item-collapsible .menu__caret { + margin-top: 0.15rem; +} + +/* Use sidebar: audience groups (Data Consumers, Data Submitters, Platform + Administrators) are non-collapsible categories with no link — used purely + as static section headings, not clickable nav items: no left border (the + active-page indicator reserved on regular links), no hover/focus state, + small/bold/primary-colored text so they read as section dividers. */ +.sidebar-section-heading { + margin-top: 1rem; +} + +.sidebar-section-heading:first-child { + margin-top: 0; +} + +/* Infima highlights the whole row div on hover (independent of the link's + own background) — neutralize that too so the heading is fully static. */ +.sidebar-section-heading > .menu__list-item-collapsible, +.sidebar-section-heading > .menu__list-item-collapsible:hover { + background: transparent; + cursor: default; +} + +/* Child items nest one level deeper by default (the standard indent, plus a + vertical rule, used to show hierarchy under a collapsible category). Since + the heading isn't a real category, cancel both so items align flush with + the label with no nesting line. */ +.sidebar-section-heading > .menu__list { + padding-left: 0; + border-left: none; +} + +.sidebar-section-heading > .menu__list-item-collapsible > .menu__link { + cursor: default; + border-left: none; + border-bottom: 1px solid var(--ifm-color-emphasis-200); + padding-bottom: 0.25rem; + font-size: 0.7rem; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.06em; + color: var(--ifm-color-primary); + transition: none; +} + +.sidebar-section-heading > .menu__list-item-collapsible > .menu__link:hover, +.sidebar-section-heading > .menu__list-item-collapsible > .menu__link:focus, +.sidebar-section-heading > .menu__list-item-collapsible > .menu__link:active { + background: transparent; + color: var(--ifm-color-primary); + border-left: none; } .sidebar-coming-soon { @@ -148,7 +226,13 @@ opacity: 1; } -[data-theme='dark'] .sidebar-draft-badge { +[data-theme="dark"] .sidebar-draft-badge { background-color: #3d2e1a; color: #c9924a; } + +/* Team page avatar cards: tighten the gap the default h3 margin leaves + between the name and the subtitle underneath it. */ +.avatar__name { + margin-bottom: 0.25rem; +} diff --git a/website/src/pages/index.tsx b/website/src/pages/index.tsx index 3345764e..ad45c368 100644 --- a/website/src/pages/index.tsx +++ b/website/src/pages/index.tsx @@ -3,11 +3,10 @@ import clsx from 'clsx'; import useDocusaurusContext from '@docusaurus/useDocusaurusContext'; import Layout from '@theme/Layout'; import Heading from '@theme/Heading'; -import SearchBar from '@theme/SearchBar'; // Import the SearchBar component +import SearchBar from '@theme/SearchBar'; import styles from './index.module.css'; import SiteMap from '../components/SiteMap'; -import Button from '../components/OvertureButton'; function HomepageHeader() { const {siteConfig} = useDocusaurusContext(); @@ -18,22 +17,8 @@ function HomepageHeader() { {siteConfig.title}

{siteConfig.tagline}

- {/* - */}
- +
@@ -45,11 +30,11 @@ export default function Home(): JSX.Element { return ( + description="Documentation for the Overture platform — deploy, build with, and use Overture's open-source data-management software.">
); -} \ No newline at end of file +} diff --git a/website/tsconfig.json b/website/tsconfig.json index 314eab8a..71e30f1a 100644 --- a/website/tsconfig.json +++ b/website/tsconfig.json @@ -2,6 +2,6 @@ // This file is not used in compilation. It is here just for a nice editor experience. "extends": "@docusaurus/tsconfig", "compilerOptions": { - "baseUrl": "." + "ignoreDeprecations": "6.0" } } diff --git a/website/useSidebars.ts b/website/useSidebars.ts new file mode 100644 index 00000000..65638e73 --- /dev/null +++ b/website/useSidebars.ts @@ -0,0 +1,49 @@ +import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; + +// The Use journey serves three distinct audiences. Each group below is a +// non-collapsible "section heading" (collapsible: false, no link, styled as +// a plain label in custom.css via the sidebar-section-heading className) +// rather than a dropdown category, so the audience split is visible at a +// glance instead of hidden behind a toggle. +const sidebars: SidebarsConfig = { + useSidebar: [ + "index", + { + type: "category", + label: "Data Consumers", + collapsible: false, + className: "sidebar-section-heading", + items: ["conversational-data-discovery", "cli-downloads"], + }, + { + type: "category", + label: "Data Submitters", + collapsible: false, + className: "sidebar-section-heading", + items: ["cli-submissions"], + }, + { + type: "category", + label: "Platform Administrators", + collapsible: false, + className: "sidebar-section-heading", + items: [ + "administration/building-dictionaries", + "administration/building-song-schemas", + "administration/index-mappings", + "administration/customizing-the-data-portal", + // A tutorial with its own multi-step sequence stays a normal + // collapsible category, nested under Platform Administrators since + // it's an end-to-end walkthrough of the tasks above. + { + type: "category", + label: "Build a Search Portal", + link: { type: "doc", id: "workshop/prerequisites" }, + items: [{ type: "autogenerated", dirName: "03-workshop" }], + }, + ], + }, + ], +}; + +export default sidebars; diff --git a/website/workshop/00-Intro.md b/website/workshop/00-Intro.md deleted file mode 100644 index 135375bf..00000000 --- a/website/workshop/00-Intro.md +++ /dev/null @@ -1,167 +0,0 @@ ---- -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. ---- - -:::caution Please complete the prerequisites before arriving -Most importantly, download the Docker images in advance, the conference venue's Wi-Fi may be slow and unreliable. Looking forward to meeting you — **Mitchell Shiell, Ontario Institute for Cancer Research, [mshiell@oicr.on.ca](mailto:mshiell@oicr.on.ca)** -::: - -# IBC Workshop Prerequisites - -This workshop has been developed as part of the 19th Annual International Biocuration Conference, it 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) - -:::info 👋 Say hello -If you're attending, feel free to [**drop a quick introduction**](https://github.com/overture-stack/docs/discussions/new?category=new-deployments&title=%5BIBC+Workshop%5D+Hello+from+%5BName%2C+Institution%5D&body=%2A%2AName+%26+affiliation%3A%2A%2A+%0A%0A%2A%2AType+of+data+I+work+with%3A%2A%2A+%0A%0A%2A%2AWhat+I%27m+hoping+to+get+out+of+the+session%3A%2A%2A+%0A%0A%2A%2AData+management+challenges+%28optional%29%3A%2A%2A+) before the day, this helps tailor the session to the room. Entirely optional. -::: - -**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 - -The following software should be installed and verified before the workshop: - -
-1. Git `git --version` returns a version number - -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 - -
- -
-3. Docker images pre-downloaded Most time-consuming step, run these before the workshop - -Pull the required Docker images now to avoid slow downloads during the workshop: - -```bash -docker pull alpine/curl:8.8.0 -docker pull postgres:15-alpine -docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.27 -docker pull ghcr.io/overture-stack/arranger-server:4919f736 -docker pull ghcr.io/overture-stack/conductor:171d9ce -docker pull node:18-alpine -``` - -Verify all six downloaded: - -```bash -docker images | grep -E "alpine/curl|postgres|elasticsearch|arranger-server|conductor|node" -``` - -You should see all six images listed. - -
- -
-4. Repository cloned: `git clone -b IBCworkshop https://github.com/overture-stack/prelude.git` - -The `prelude` repository contains everything needed for this workshop: Docker Compose configuration, the Conductor wrapper script, and sample data. Clone it once before the workshop and you won't need internet access for the hands-on portion. - -```bash -git clone -b IBCworkshop https://github.com/overture-stack/prelude.git -``` - -
- -
-5. _(Windows only)_ WSL2 configured with Docker Desktop integration enabled - -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 workshop 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. - -
- -#### Optional Prerequisites - -These are not required but will make the workshop easier to follow: - -
-6. (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 during the workshop. - -Install it as a browser extension or standalone app. - -
- -
-7. (Optional) PostgreSQL GUI client - -A PostgreSQL GUI client is useful for browsing the database during the workshop. 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/) | - -
- -
-8. (Optional) Bring your own data: CSV file - -If you have a tabular dataset you'd like to use during or after the workshop, bring it as a CSV file. During the workshop we will use demo data, but the final section covers adapting the portal to your own dataset. - -
- -## Schedule - -**Venue:** Pacific 2 - -| Time | Section | Description | -| --------- | ----------------------- | ------------------------------------------------------------------------- | -| 2:00–2:20 | Introduction & Overview | Workshop objectives, run the pre-built demo, and architecture walkthrough | -| 2:20–3:30 | Building Your Portal | Prepare data, generate configurations, wire up Docker, Launch & Load data | -| 3:30–3:40 | Break | Stretch break | -| 3:40–4:00 | Wrap-Up | Customize the portal, discuss next steps, and Q&A | - -## Support - -| | | -| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------- | -| **During the workshop** | [You can use this slack link for additional support](https://join.slack.com/t/overture-bio/shared_invite/zt-21tdumtdh-9fP1TFeLepK4~Lc377rOYw) | -| **Before or after** | [community support channels](https://docs.overture.bio/community/support) or [contact@overture.bio](mailto:contact@overture.bio) | -| **Bug reports** | [GitHub Issues](https://github.com/overture-stack/prelude/issues) | - -**Facilitator:** Mitchell Shiell, Ontario Institute for Cancer Research, [mshiell@oicr.on.ca](mailto:mshiell@oicr.on.ca) - -## Verification Checklist - -Before the workshop, confirm: - -1. `git --version` returns a version number -2. `docker --version` returns 28.0.0 or later -3. `docker compose version` returns a version number -4. Docker Desktop is running with 4+ CPUs and 8 GB+ memory allocated -5. **All six Docker images are downloaded** (`docker images`) — _this is the most time-consuming step, do it before the day_ -6. The repository is cloned and you can `cd` into it -7. _(Windows only)_ WSL2 is configured and Docker integration is enabled - -> **Troubleshooting:** If you run into issues before the workshop, reach out via the [community support channels](https://docs.overture.bio/community/support) or email [mshiell@oicr.on.ca](mailto:mshiell@oicr.on.ca). diff --git a/website/workshopSidebars.ts b/website/workshopSidebars.ts deleted file mode 100644 index d0f8a429..00000000 --- a/website/workshopSidebars.ts +++ /dev/null @@ -1,19 +0,0 @@ -import type { SidebarsConfig } from "@docusaurus/plugin-content-docs"; - -const sidebars: SidebarsConfig = { - workshopSidebar: [ - "prerequisites", - "running-the-demo", - "architecture", - "data-preparation", - "generating-configurations", - "docker-configuration", - "loading-data", - "troubleshooting", - "portal-customization", - "next-steps", - "extension-task", - ], -}; - -export default sidebars;