From 36802c9883afe07fb12bb37600ec2af979012932 Mon Sep 17 00:00:00 2001 From: Mahdi Falek Date: Wed, 4 Feb 2026 17:22:13 +0100 Subject: [PATCH 1/3] add docs folder --- .../copilot-instructions.md | 2 +- docs/architecture/V5/API v5.md | 9 - .../00 1 Platform Portal Requirements.md | 11 - docs/functional/00 3 Admin Portal Overview.md | 50 - .../Mock-ups/Mock-up figma_export_1.png | Bin 89468 -> 0 bytes .../Mock-ups/Mock-up figma_export_2.png | Bin 140446 -> 0 bytes docs/plan/00-login-plan.md | 58 ++ .../01-Platform Portal Requirements.md | 115 +++ .../00 core requirements/02-User Personas.md} | 0 .../03-admin-portal-main.md | 32 + .../00 core requirements/03-overview.md | 115 +++ docs/requirements/00-login.md | 3 + docs/requirements/01-organization-list.md | 0 docs/requirements/04-organization-view.md | 49 + docs/requirements/04-solutions-view.md | 23 + docs/requirements/05-workspaces-view.md | 31 + .../Project_Architecture_Blueprint.md | 0 .../00-architecture/V5/5-onprem-endpoints.md | 174 ++++ .../V5/openapi-5.0.0-rc5.json | 0 .../00-architecture/api-bridge-strategy.md | 0 .../00-architecture/auth-flow-keycloak.md | 0 docs/technical-design/00-login-design.md | 2 + src/themes/index.js | 2 +- yarn.lock | 916 +++++++++++++++++- 24 files changed, 1517 insertions(+), 75 deletions(-) rename .github/{instructions => }/copilot-instructions.md (97%) delete mode 100644 docs/architecture/V5/API v5.md delete mode 100644 docs/functional/00 1 Platform Portal Requirements.md delete mode 100644 docs/functional/00 3 Admin Portal Overview.md delete mode 100644 docs/functional/Mock-ups/Mock-up figma_export_1.png delete mode 100644 docs/functional/Mock-ups/Mock-up figma_export_2.png create mode 100644 docs/plan/00-login-plan.md create mode 100644 docs/requirements/00 core requirements/01-Platform Portal Requirements.md rename docs/{functional/00 2 User Personas.md => requirements/00 core requirements/02-User Personas.md} (100%) create mode 100644 docs/requirements/00 core requirements/03-admin-portal-main.md create mode 100644 docs/requirements/00 core requirements/03-overview.md create mode 100644 docs/requirements/00-login.md create mode 100644 docs/requirements/01-organization-list.md create mode 100644 docs/requirements/04-organization-view.md create mode 100644 docs/requirements/04-solutions-view.md create mode 100644 docs/requirements/05-workspaces-view.md rename docs/{architecture => technical-design/00-architecture}/Project_Architecture_Blueprint.md (100%) create mode 100644 docs/technical-design/00-architecture/V5/5-onprem-endpoints.md rename docs/{architecture => technical-design/00-architecture}/V5/openapi-5.0.0-rc5.json (100%) create mode 100644 docs/technical-design/00-architecture/api-bridge-strategy.md create mode 100644 docs/technical-design/00-architecture/auth-flow-keycloak.md create mode 100644 docs/technical-design/00-login-design.md diff --git a/.github/instructions/copilot-instructions.md b/.github/copilot-instructions.md similarity index 97% rename from .github/instructions/copilot-instructions.md rename to .github/copilot-instructions.md index 9300ecc..b085feb 100644 --- a/.github/instructions/copilot-instructions.md +++ b/.github/copilot-instructions.md @@ -100,4 +100,4 @@ import { UserStatusGate } from 'src/components'; ## References - [Architecture Blueprint](../../docs/architecture/Project_Architecture_Blueprint.md) - [Conventional Commits](../../docs/coding-rules/conventional-commits.md) -- [Admin Portal Overview](../../docs/functional/00%203%20Admin%20Portal%20Overview.md) +- [Admin Portal Overview](../../docs/functional/00 3 Admin Portal Overview.md) diff --git a/docs/architecture/V5/API v5.md b/docs/architecture/V5/API v5.md deleted file mode 100644 index bd4f14e..0000000 --- a/docs/architecture/V5/API v5.md +++ /dev/null @@ -1,9 +0,0 @@ - - - -The data (organizations, solutions, workspaces) is provided by the Cosmo Tech API. We will use the v5 of the API. - -The portal admin uses the official TypeScript client library: [@cosmotech/api-ts] -https://www.npmjs.com/package/@cosmotech/api-ts/v/5.0.0-rc5 . - -The diff --git a/docs/functional/00 1 Platform Portal Requirements.md b/docs/functional/00 1 Platform Portal Requirements.md deleted file mode 100644 index 07107d2..0000000 --- a/docs/functional/00 1 Platform Portal Requirements.md +++ /dev/null @@ -1,11 +0,0 @@ - - - -The Cosmo Tech "Platform Portal" is a set of tools and services that allow platform administrators to manage and configure the Cosmo Tech platform. The Platform Portal provides capabilities for overseeing multiple organizations, managing global settings, and ensuring compliance across the platform. - -The first module is the "Admin Portal", which is a web-based interface designed for administrators to manage and oversee various aspects of the Cosmo Tech platform. It provides an intuitive and user-friendly environment for configuring the objects used by the Cosmo Tech platform: - -- organizations -- solutions -- workspaces -- runners diff --git a/docs/functional/00 3 Admin Portal Overview.md b/docs/functional/00 3 Admin Portal Overview.md deleted file mode 100644 index 00ad12a..0000000 --- a/docs/functional/00 3 Admin Portal Overview.md +++ /dev/null @@ -1,50 +0,0 @@ - - - -# Admin Portal Overview - -The "Admin Portal" is a web-based interface designed for administrators to manage and oversee various aspects of the Cosmo Tech platform. It provides an intuitive and user-friendly environment for configuring the objects used by the Cosmo Tech platform: - -- organizations -- solutions -- workspaces -- runners -- runs - -Mock-ups -You can find the mock-ups for the Admin Portal [here](https://www.figma.com/proto/Wna4gI78OCyHc0rO2V1qNq/Admin-Portal) -They are downloaded locally in the repository under docs/mock-ups/ - -# Multi API and Multi Auth - -The Admin Portal supports 2 major API versions : API v3 and API v5. - -Authentication Provider -The Admin Portal supports 2 authentication providers : Azure for API v3 and Keycloak for API v5. - -# Core Concepts in API v5 - -## Organizations - -Simulation Digital Twin Organizations are logical groups of platform resources securely isolated from one another within the same cloud tenant and subscription. An Organization defines a company or legal entity and can contain resources for multiple Solutions. It serves as the core of multi-tenant security and manages the hierarchy of workspaces and solutions. User permissions are managed at this level using access-control lists (ACL) with roles such as Viewer, User, Editor, and Admin. - -## Solutions - -A Simulation Digital Twin Solution is software supporting decision-making that provides projections of strategy outcomes using a digital representation of the system and its dynamics. From a developer's perspective, a solution combines the source code of a simulator with at least one run template. It defines the parameters available for a scenario, how to validate a model, and how to execute the engine. Solutions are configured using JSON or YAML files to declare elements such as run templates and parameter groups. - -## Workspaces - -A Workspace defines an analysis or project space that is bound to a Solution. It contextualises business use cases with a web application, dashboard definitions, and available run templates. Workspaces contain Scenarios and require dedicated Azure resources, such as Azure Digital Twins, Event Hubs, or Azure Data Explorer, to function properly. Access permissions are enforced at the workspace level, requiring users to be added to the security list to read workspace resources. - -## Runners - -A Runner is a component hierarchically situated under a workspace that allows the execution of run templates, such as ETL scripts. To create a valid runner, one must reference a valid dataset, a run template defined in the Solution object, and define security access. Access to runners requires specific permissions, needing at least viewer rights on the organization and user rights on the workspace containing the runner. - -## Runs - -A Run (or Scenario Run) is the execution of a scenario. It combines a Dataset with a Run type within the context of a Simulator to perform the necessary computations. The run produces simulation results, which are projections of the system's state over a defined period used to compute KPIs. A run can have a status of Successful, Running, Pending (scheduled but blocked by resource unavailability), or Failed. - -# Core Concepts in API v3 - -Starting with version v3.3, the concepts are similar to API v5. -TODO : mark any notable differences here diff --git a/docs/functional/Mock-ups/Mock-up figma_export_1.png b/docs/functional/Mock-ups/Mock-up figma_export_1.png deleted file mode 100644 index 95f17e056a4971582c187bf136b2ad0f8074a1a6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 89468 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 diff --git a/docs/functional/Mock-ups/Mock-up figma_export_2.png b/docs/functional/Mock-ups/Mock-up figma_export_2.png deleted file mode 100644 index 1bf546aa3fb21794cadf3dabdc7dd9fb0e2f809f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 140446 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�C7Ng^P@T|2w?${~?sw!3tEcIm_<2@&}B) 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 diff --git a/docs/plan/00-login-plan.md b/docs/plan/00-login-plan.md new file mode 100644 index 0000000..71d6b36 --- /dev/null +++ b/docs/plan/00-login-plan.md @@ -0,0 +1,58 @@ + + +# Login Flow Technical Design + +## Overview + +Design the login flow with tenant selection, dynamic TypeScript client instantiation (v3 or v5), tenant persistence in localStorage, and automatic redirect to the first organization's detail view. + +## Steps + +### 1. Add API Version Detection + +**File:** `src/services/api/apiUtils.js` + +Enhance `detectApiAuthProviderType` to also return API version by parsing the `COSMOTECH_API_PATH` URL (e.g., `/v3` → `'v3'`, `/v5` → `'v5'`). Add new function `detectApiVersion(api)`. + +### 2. Refactor API Client for Dynamic Version + +**File:** `src/services/api/apiClient.js` + +Refactor `getApiClient` to accept a version parameter and dynamically import from either `@cosmotech/api-ts-v3` or `@cosmotech/api-ts-v5` based on detected version. + +### 3. Persist Selected Tenant + +**File:** `src/services/api/apiManager.js` + +Update `apiManager` to persist selected tenant via `localStorage.setItem('selectedApi', apiName)` on selection, and restore it on app initialization in the constructor. + +### 4. Extend Login Thunk + +**File:** `src/state/auth/thunks/login.js` + +After successful auth: +- Dispatch `getAllOrganizations()` +- Store `apiVersion` and first `organizationId` in Redux state +- Navigate to `/organization/{firstOrgId}` using React Router + +### 5. Update Login View + +**File:** `src/views/Login.jsx` + +Show loading state during org fetch and handle the redirect after organizations are loaded. + +### 6. Add Redux State Fields + +**File:** `src/state/auth/reducers.js` + +Add to auth slice: +- `selectedApiVersion: 'v3' | 'v5' | null` +- `selectedOrganizationId: string | null` + +## Considerations + +1. **Dynamic import strategy:** Use `await import('@cosmotech/api-ts-v5')` for lazy loading, or pre-import both and switch at runtime? Recommend dynamic import to reduce bundle size. + +2. **Error case:** If organization list is empty after login, redirect to an error/empty state page rather than crashing. + +3. **Session restore:** On page refresh, restore both tenant AND navigate back to last organization if `selectedOrganizationId` is persisted. diff --git a/docs/requirements/00 core requirements/01-Platform Portal Requirements.md b/docs/requirements/00 core requirements/01-Platform Portal Requirements.md new file mode 100644 index 0000000..a3b96f5 --- /dev/null +++ b/docs/requirements/00 core requirements/01-Platform Portal Requirements.md @@ -0,0 +1,115 @@ + + +# **Cosmo Tech Platform Portal: Requirements** + +## **1. Introduction** + +The Cosmo Tech **Platform Portal** is a centralized suite of services for platform administrators. It is designed to oversee multiple organizations, manage global configurations, and ensure compliance. + +The primary module is the **Admin Portal**, a web-based interface that provides an intuitive environment for managing the lifecycle of Cosmo Tech platform objects. + +## **2. Platform Architecture & Multi-API Support** + +The Admin Portal must act as a bridge between two distinct generations of the Cosmo Tech API, handling the transition between cloud-native and on-premise environments. + +### **2.1 API Versions** + +| **Feature** | **API v3** | **API v5** | +| :---: | :---: | :---: | +| **Deployment** | Azure (Cloud) | On-Premise / Self-Hosted | +| **Auth Provider** | Azure Active Directory (Microsoft Entra ID) | **Keycloak** | +| **Primary Objects** | Organizations, Solutions, Workspaces, Scenarios… | Organizations, Solutions, Workspaces, Runners, Runs | + +### **2.2 Unified Authentication Flow** + +The Admin Portal serves as a unified entry point. It must detect the target API version and route authentication requests to the appropriate provider (Azure AD for v3 or Keycloak for v5). + +**3. Keycloak User & Group Management** + +The Admin Portal integrates directly with **Keycloak** to manage access control. + +* **User Management:** Administrators must be able to list, view, and manage users stored in Keycloak. +* **Group Mapping:** The portal will manage Keycloak Groups, which correspond to platform roles (Admin, Editor, Viewer). +* **Organization Isolation:** Users and groups must be filtered based on the selected Organization to ensure strict multi-tenant security. + +## **4. Admin Portal: First Page Requirements** + +The landing page of the Admin Portal provides a "high-level" overview of the platform's health and hierarchy. + +### **4.1 Organizations Dashboard** + +The entry point displays all accessible **Organizations**. + +* **Search/Filter:** Ability to filter organizations by API version (v3 vs v5). +* **Organization Details:** Quick view of the number of active Workspaces and Solutions within each organization. + +### **4.2 Keycloak User Integration** + +A dedicated section for **Identity Management**: + +* Display a list of users fetched from the Keycloak Realm. +* Ability to assign/remove users from platform-specific groups. + +### **4.3 Platform Flowchart (Hierarchy View)** + +The portal features a dynamic flowchart that visualizes the platform's object hierarchy. This chart **automatically adapts its structure** depending on whether the user is viewing an **API v3** or **API v5** environment. #**TO CONTINUE** + + +# 5. Organization Drill-Down (API v5 Focus) + +This section details the navigation flow once a specific organization is selected. These functionalities and object structures are specifically designed for the **API v5** architecture. + +## 5.1 Organization Dashboard +Upon selecting an organization from the main page, the administrator is redirected to the Organization management view. + +* **Navigation Bar:** A dedicated sidebar appears, providing direct access to **Solutions** and **Workspaces** belonging to the selected organization. +* **Contextual Filtering:** All data displayed in the following modules is strictly filtered by the active Organization ID to ensure multi-tenant isolation and security. + +--- + +## 5.2 Module "Solutions" +Management of simulation definitions and logic attached to the organization. + +### 5.2.1 Solutions Table View +A comprehensive list of available solutions within the organization. +* **Columns:** * **Name:** Name of the solution. **#TODO** + * **ID:** Unique technical identifier. + * **Version:** Version number of the solution. + * **Type:** Simulator engine type. + * **Creation Date:** Timestamp of when the solution was added. +* **Actions:** Add (Upload JSON/YAML), Update, and Delete.**#TODO** + +### 5.2.2 Solution Detail View +Triggered by clicking on a specific solution row. +* **#TODO: Overview:** (Reserved section for technical metadata and general description). +* **Run Templates:** A list of execution templates declared within the solution file, defining how simulations can be run. + +--- + +## 5.3 Module "Workspaces" +The Workspace is the contextual analysis space linked to a specific solution. It is the primary area for operational tasks. + +### 5.3.1 Workspaces Table View +A central hub for managing all workspaces within the organization. +* **Columns:** **#TODO** + * **Name:** Display name of the workspace. + * **ID:** Unique technical identifier. + * **Solution:** Associated solution name (clickable link for quick navigation). + * **Description:** Brief summary of the business use case. + * **Access Control:** Summary of assigned roles and permissions (ACL). +* **CRUD Management:** Dedicated interface buttons to **Add** a new workspace, **Update** existing configurations, or **Archive/Delete**. + +### 5.3.2 Workspace Detail View +Opening a workspace provides access to its specific operational components: + +#### **A. Runners** +* **Runners Table:** Displays all runners created within this workspace. +* **Management:** Capability to create new runners, configure security access per runner, and monitor execution statuses. + +#### **B. Datasets** +* **Datasets Table:** Lists all data sources linked to the workspace. + * **Supported Types:** Local files, Databases, Azure Digital Twins (ADT) links, etc. +* **Data Management:** * **Association:** Ability to link/associate a specific dataset to a Runner for execution. + * **Updates:** Modify the data source parameters (e.g., changing a connection string or uploading a new file version). + + diff --git a/docs/functional/00 2 User Personas.md b/docs/requirements/00 core requirements/02-User Personas.md similarity index 100% rename from docs/functional/00 2 User Personas.md rename to docs/requirements/00 core requirements/02-User Personas.md diff --git a/docs/requirements/00 core requirements/03-admin-portal-main.md b/docs/requirements/00 core requirements/03-admin-portal-main.md new file mode 100644 index 0000000..8f046e0 --- /dev/null +++ b/docs/requirements/00 core requirements/03-admin-portal-main.md @@ -0,0 +1,32 @@ + + + +# Admin Portal Main View Requirements + +The Admin Portal provides a centralized interface for platform management. + +## 1. Global Navigation Bar + +The main navigation bar provides direct access to the following core modules: +* **Organizations** (Default View) +* **Flowchart** +* **Users** + +## 2. Organizations Dashboard + +The entry point (and default view) displays all accessible **Organizations**. + +* **Search/Filter:** Ability to filter organizations by API version (v3 vs v5). +* **Organization Details:** Quick view of the number of active Workspaces and Solutions within each organization. +* **Navigation:** Clicking on an organization card/row navigates to the [Organization View](./03-organization-view.md). + +## 3. Users Management + +A dedicated section for **Identity Management**, accessible via the "Users" navigation item: + +* Display a list of users fetched from the Keycloak Realm. +* Ability to assign/remove users from platform-specific groups. + +## 4. Platform Flowchart (Hierarchy View) + +Accessible via the "Flowchart" navigation item, this dynamic chart visualizes the platform's object hierarchy. This chart **automatically adapts its structure** depending on whether the user is viewing an **API v3** or **API v5** environment. \ No newline at end of file diff --git a/docs/requirements/00 core requirements/03-overview.md b/docs/requirements/00 core requirements/03-overview.md new file mode 100644 index 0000000..a3b96f5 --- /dev/null +++ b/docs/requirements/00 core requirements/03-overview.md @@ -0,0 +1,115 @@ + + +# **Cosmo Tech Platform Portal: Requirements** + +## **1. Introduction** + +The Cosmo Tech **Platform Portal** is a centralized suite of services for platform administrators. It is designed to oversee multiple organizations, manage global configurations, and ensure compliance. + +The primary module is the **Admin Portal**, a web-based interface that provides an intuitive environment for managing the lifecycle of Cosmo Tech platform objects. + +## **2. Platform Architecture & Multi-API Support** + +The Admin Portal must act as a bridge between two distinct generations of the Cosmo Tech API, handling the transition between cloud-native and on-premise environments. + +### **2.1 API Versions** + +| **Feature** | **API v3** | **API v5** | +| :---: | :---: | :---: | +| **Deployment** | Azure (Cloud) | On-Premise / Self-Hosted | +| **Auth Provider** | Azure Active Directory (Microsoft Entra ID) | **Keycloak** | +| **Primary Objects** | Organizations, Solutions, Workspaces, Scenarios… | Organizations, Solutions, Workspaces, Runners, Runs | + +### **2.2 Unified Authentication Flow** + +The Admin Portal serves as a unified entry point. It must detect the target API version and route authentication requests to the appropriate provider (Azure AD for v3 or Keycloak for v5). + +**3. Keycloak User & Group Management** + +The Admin Portal integrates directly with **Keycloak** to manage access control. + +* **User Management:** Administrators must be able to list, view, and manage users stored in Keycloak. +* **Group Mapping:** The portal will manage Keycloak Groups, which correspond to platform roles (Admin, Editor, Viewer). +* **Organization Isolation:** Users and groups must be filtered based on the selected Organization to ensure strict multi-tenant security. + +## **4. Admin Portal: First Page Requirements** + +The landing page of the Admin Portal provides a "high-level" overview of the platform's health and hierarchy. + +### **4.1 Organizations Dashboard** + +The entry point displays all accessible **Organizations**. + +* **Search/Filter:** Ability to filter organizations by API version (v3 vs v5). +* **Organization Details:** Quick view of the number of active Workspaces and Solutions within each organization. + +### **4.2 Keycloak User Integration** + +A dedicated section for **Identity Management**: + +* Display a list of users fetched from the Keycloak Realm. +* Ability to assign/remove users from platform-specific groups. + +### **4.3 Platform Flowchart (Hierarchy View)** + +The portal features a dynamic flowchart that visualizes the platform's object hierarchy. This chart **automatically adapts its structure** depending on whether the user is viewing an **API v3** or **API v5** environment. #**TO CONTINUE** + + +# 5. Organization Drill-Down (API v5 Focus) + +This section details the navigation flow once a specific organization is selected. These functionalities and object structures are specifically designed for the **API v5** architecture. + +## 5.1 Organization Dashboard +Upon selecting an organization from the main page, the administrator is redirected to the Organization management view. + +* **Navigation Bar:** A dedicated sidebar appears, providing direct access to **Solutions** and **Workspaces** belonging to the selected organization. +* **Contextual Filtering:** All data displayed in the following modules is strictly filtered by the active Organization ID to ensure multi-tenant isolation and security. + +--- + +## 5.2 Module "Solutions" +Management of simulation definitions and logic attached to the organization. + +### 5.2.1 Solutions Table View +A comprehensive list of available solutions within the organization. +* **Columns:** * **Name:** Name of the solution. **#TODO** + * **ID:** Unique technical identifier. + * **Version:** Version number of the solution. + * **Type:** Simulator engine type. + * **Creation Date:** Timestamp of when the solution was added. +* **Actions:** Add (Upload JSON/YAML), Update, and Delete.**#TODO** + +### 5.2.2 Solution Detail View +Triggered by clicking on a specific solution row. +* **#TODO: Overview:** (Reserved section for technical metadata and general description). +* **Run Templates:** A list of execution templates declared within the solution file, defining how simulations can be run. + +--- + +## 5.3 Module "Workspaces" +The Workspace is the contextual analysis space linked to a specific solution. It is the primary area for operational tasks. + +### 5.3.1 Workspaces Table View +A central hub for managing all workspaces within the organization. +* **Columns:** **#TODO** + * **Name:** Display name of the workspace. + * **ID:** Unique technical identifier. + * **Solution:** Associated solution name (clickable link for quick navigation). + * **Description:** Brief summary of the business use case. + * **Access Control:** Summary of assigned roles and permissions (ACL). +* **CRUD Management:** Dedicated interface buttons to **Add** a new workspace, **Update** existing configurations, or **Archive/Delete**. + +### 5.3.2 Workspace Detail View +Opening a workspace provides access to its specific operational components: + +#### **A. Runners** +* **Runners Table:** Displays all runners created within this workspace. +* **Management:** Capability to create new runners, configure security access per runner, and monitor execution statuses. + +#### **B. Datasets** +* **Datasets Table:** Lists all data sources linked to the workspace. + * **Supported Types:** Local files, Databases, Azure Digital Twins (ADT) links, etc. +* **Data Management:** * **Association:** Ability to link/associate a specific dataset to a Runner for execution. + * **Updates:** Modify the data source parameters (e.g., changing a connection string or uploading a new file version). + + diff --git a/docs/requirements/00-login.md b/docs/requirements/00-login.md new file mode 100644 index 0000000..1f2f30d --- /dev/null +++ b/docs/requirements/00-login.md @@ -0,0 +1,3 @@ + + +The login page page presents. A drop down list. With all the different tenants that the user has access to. After selecting a value from the list. The user is redirected to the home page of this tenant. Technical details. When recovering the tenant, we determine the type of the API if its API V 3 or API V5. And we also. Make a request to the API to get the list of organizations in the tenant. Most of the time there will be only one organization. Then the user is redirected to the detailed view of the first organization in this tenant. \ No newline at end of file diff --git a/docs/requirements/01-organization-list.md b/docs/requirements/01-organization-list.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/requirements/04-organization-view.md b/docs/requirements/04-organization-view.md new file mode 100644 index 0000000..bf7477c --- /dev/null +++ b/docs/requirements/04-organization-view.md @@ -0,0 +1,49 @@ + + +# Organization View Requirements (API v5 Focus) + +This document details the navigation flow and requirements once a specific organization is selected. These functionalities and object structures are specifically designed for the **API v5** architecture. + +## 1. Organization Dashboard +Upon selecting an organization from the main page, the administrator is redirected to the Organization management view. + +* **Navigation Bar:** A dedicated sidebar appears, providing direct access to **Solutions** and **Workspaces** belonging to the selected organization. +* **Contextual Filtering:** All data displayed in the following modules is strictly filtered by the active Organization ID to ensure multi-tenant isolation and security. + +--- + +## 2. Solutions Management + +This section describes the "Solutions" tab or module within the Organization View. + +### 2.1 Solutions Table +The view presents a list of all solutions available in the organization. + +**Columns:** +* **Name:** Name of the solution. +* **ID:** Unique technical identifier. +* **Version:** Version number of the solution. +* **Type:** Simulator engine type. +* **Creation Date:** Timestamp of when the solution was added. + +### 2.2 Navigation +* **Interaction:** Clicking on a row in the Solutions table will navigate the user to the **[Solution View](./04-solutions-view.md)**, where they can manage run templates and other details. + +--- + +## 3. Workspaces Management + +This section describes the "Workspaces" tab or module within the Organization View. + +### 3.1 Workspaces Table +The view presents a list of all operational workspaces within the organization. + +**Columns:** +* **Name:** Display name of the workspace. +* **ID:** Unique technical identifier. +* **Solution:** Associated solution name. +* **Description:** Brief summary of the business use case. +* **Access Control:** Summary of assigned roles and permissions (ACL). + +### 3.2 Navigation +* **Interaction:** Clicking on a row in the Workspaces table will navigate the user to the **[Workspace View](./05-workspaces-view.md)**, where they can manage runners and datasets. diff --git a/docs/requirements/04-solutions-view.md b/docs/requirements/04-solutions-view.md new file mode 100644 index 0000000..6ce7ba0 --- /dev/null +++ b/docs/requirements/04-solutions-view.md @@ -0,0 +1,23 @@ + + +# Solutions View Requirements + +## 1. Module "Solutions" +Management of simulation definitions and logic attached to the organization. + +### 1.1 Solutions Table View +A comprehensive list of available solutions within the organization. + +* **Columns:** + * **Name:** Name of the solution. **#TODO: Verify complete list of columns** + * **ID:** Unique technical identifier. + * **Version:** Version number of the solution. + * **Type:** Simulator engine type. + * **Creation Date:** Timestamp of when the solution was added. +* **Actions:** Add (Upload JSON/YAML), Update, and Delete.**#TODO: Detail specific actions behavior** + +### 1.2 Solution Detail View +Triggered by clicking on a specific solution row. + +* **Overview:** (Reserved section for technical metadata and general description). **#TODO: Define specific metadata fields** +* **Run Templates:** A list of execution templates declared within the solution file, defining how simulations can be run. diff --git a/docs/requirements/05-workspaces-view.md b/docs/requirements/05-workspaces-view.md new file mode 100644 index 0000000..9091924 --- /dev/null +++ b/docs/requirements/05-workspaces-view.md @@ -0,0 +1,31 @@ + + +# Workspaces View Requirements + +## 1. Module "Workspaces" +The Workspace is the contextual analysis space linked to a specific solution. It is the primary area for operational tasks. + +### 1.1 Workspaces Table View +A central hub for managing all workspaces within the organization. + +* **Columns:** **#TODO: Verify column list** + * **Name:** Display name of the workspace. + * **ID:** Unique technical identifier. + * **Solution:** Associated solution name (clickable link for quick navigation). + * **Description:** Brief summary of the business use case. + * **Access Control:** Summary of assigned roles and permissions (ACL). +* **CRUD Management:** Dedicated interface buttons to **Add** a new workspace, **Update** existing configurations, or **Archive/Delete**. + +### 1.2 Workspace Detail View +Opening a workspace provides access to its specific operational components: + +#### A. Runners +* **Runners Table:** Displays all runners created within this workspace. +* **Management:** Capability to create new runners, configure security access per runner, and monitor execution statuses. + +#### B. Datasets +* **Datasets Table:** Lists all data sources linked to the workspace. + * **Supported Types:** Local files, Databases, Azure Digital Twins (ADT) links, etc. +* **Data Management:** + * **Association:** Ability to link/associate a specific dataset to a Runner for execution. + * **Updates:** Modify the data source parameters (e.g., changing a connection string or uploading a new file version). diff --git a/docs/architecture/Project_Architecture_Blueprint.md b/docs/technical-design/00-architecture/Project_Architecture_Blueprint.md similarity index 100% rename from docs/architecture/Project_Architecture_Blueprint.md rename to docs/technical-design/00-architecture/Project_Architecture_Blueprint.md diff --git a/docs/technical-design/00-architecture/V5/5-onprem-endpoints.md b/docs/technical-design/00-architecture/V5/5-onprem-endpoints.md new file mode 100644 index 0000000..8a452fe --- /dev/null +++ b/docs/technical-design/00-architecture/V5/5-onprem-endpoints.md @@ -0,0 +1,174 @@ + + + +# API v5 Technical Specifications (On-Prem / Keycloak) + +This document defines the models and endpoints used by the Admin Portal to manage the platform. It is based on the `@cosmotech/api-ts@5.0.0-rc5` library. + +**CRITICAL REFERENCE:** This document provides a high-level mapping for development. For exhaustive technical details, including full schemas, field constraints, and example payloads, refer to the source OpenAPI file: + +📄 `docs_orgn/api-specs/V5/openapi-5.0.0-rc5.json` + +## 1. Base API Information + +- **Version:** 5.0.1-SNAPSHOT +- **Auth Provider:** Keycloak (Bearer Token via OAuth2) +- **Client Library:** `@cosmotech/api-ts` + +## 2. Core Data Models (Schemas) + +### 2.1 Organization + +The root object for multi-tenancy. + +```typescript +interface Organization { + id: string; // Pattern: ^o-\w{10,20} + name: string; + security: { + default: string; // e.g., 'none', 'viewer', 'user', 'editor', 'admin' + accessControlList: Array<{ id: string; role: string }>; + }; +} +``` + +### 2.2 Solution + +The simulation engine definition. + +```typescript +export interface Solution { + id: string; // Pattern: ^sol-\w{10,20} + key: string; + name: string; + description?: string; + version: string; + repository: string; + runTemplates: Array<{ + id: string; + name: string; + description?: string; + // Other properties like tags, computeSize, parameterGroups + }>; +} +``` + +### 2.3 Workspace + +The business context linking a Solution to specific datasets. + +```typescript +export interface Workspace { + id: string; // Pattern: ^w-\w{10,20} + key: string; + name: string; + description?: string; + organizationId: string; + solution: { + solutionId: string; // Linked Solution ID + datasetId?: string; // Optional linked Dataset ID + defaultParameterValues?: Record; + }; +} +``` + +### 2.4 Runner (v5 Specific) + +An execution entity for running simulations or ETLs. + +```typescript +export interface Runner { + id: string; // Pattern: ^(r|s)-\w{10,20} + name: string; + description?: string; + organizationId: string; + workspaceId: string; + solutionId: string; + runTemplateId: string; + validationStatus: 'Draft' | 'Rejected' | 'Unknown' | 'Validated'; +} +``` + +## 3. Key API Endpoints Mapping + +The Admin Portal uses the following routes from the OrganizationApi, WorkspaceApi, and RunnerApi classes. + +**Note:** Path parameters follow the `snake_case` naming convention from the OpenAPI spec. + +### 3.1. Organizations (Multi-tenancy) + +| Méthode | Endpoint | Description | +|:--------|:---------|:------------| +| `GET` | `/organizations` | Lister toutes les organisations (pagination via page, size) | +| `GET` | `/organizations/{organization_id}` | Récupérer les détails d'une organisation | +| `POST` | `/organizations` | Créer une nouvelle organisation | +| `PATCH` | `/organizations/{organization_id}` | Modifier une organisation (nom) | +| `DELETE` | `/organizations/{organization_id}` | Supprimer une organisation | +| `GET` | `/organizations/{organization_id}/security` | Lister la sécurité (ACL) de l'organisation | +| `POST` | `/organizations/{organization_id}/security/access` | Ajouter un contrôle d'accès à l'organisation | + +### 3.2. Solutions (Logic & Simulation) + +| Méthode | Endpoint | Description | +|:--------|:---------|:------------| +| `GET` | `/organizations/{organization_id}/solutions` | Lister toutes les solutions | +| `GET` | `/organizations/{organization_id}/solutions/{solution_id}` | Détails d'une solution spécifique | +| `POST` | `/organizations/{organization_id}/solutions` | Créer une solution | +| `PATCH` | `/organizations/{organization_id}/solutions/{solution_id}` | Mettre à jour une solution | +| `DELETE` | `/organizations/{organization_id}/solutions/{solution_id}` | Supprimer une solution | + +### 3.3. Workspaces (Operational Context) + +| Méthode | Endpoint | Description | +|:--------|:---------|:------------| +| `GET` | `/organizations/{organization_id}/workspaces` | Lister les workspaces d'une organisation | +| `GET` | `/organizations/{organization_id}/workspaces/{workspace_id}` | Détails d'un workspace | +| `POST` | `/organizations/{organization_id}/workspaces` | Créer un workspace | +| `PATCH` | `/organizations/{organization_id}/workspaces/{workspace_id}` | Modifier un workspace | +| `DELETE` | `/organizations/{organization_id}/workspaces/{workspace_id}` | Supprimer un workspace | +| `GET` | `/organizations/{organization_id}/workspaces/{workspace_id}/security` | Consulter la sécurité du workspace | + +### 3.4. Runners (v5 Execution Engine) + +| Méthode | Endpoint | Description | +|:--------|:---------|:------------| +| `GET` | `/organizations/{organization_id}/workspaces/{workspace_id}/runners` | Lister les runners d'un workspace | +| `GET` | `/organizations/{organization_id}/workspaces/{workspace_id}/runners/{runner_id}` | Détails d'un runner | +| `POST` | `/organizations/{organization_id}/workspaces/{workspace_id}/runners` | Créer un nouveau runner | +| `PATCH` | `/organizations/{organization_id}/workspaces/{workspace_id}/runners/{runner_id}` | Modifier un runner | +| `DELETE` | `/organizations/{organization_id}/workspaces/{workspace_id}/runners/{runner_id}` | Supprimer un runner | +| `POST` | `/organizations/{organization_id}/workspaces/{workspace_id}/runners/{runner_id}/start` | Lancer une exécution (Run) | +| `POST` | `/organizations/{organization_id}/workspaces/{workspace_id}/runners/{runner_id}/stop` | Arrêter la dernière exécution | + +### 3.5. Datasets & Connectors + +| Méthode | Endpoint | Description | +|:--------|:---------|:------------| +| `GET` | `/organizations/{organization_id}/workspaces/{workspace_id}/datasets` | Lister les datasets liés au workspace | +| `POST` | `/organizations/{organization_id}/workspaces/{workspace_id}/datasets` | Créer un nouveau dataset | +| `DELETE` | `/organizations/{organization_id}/workspaces/{workspace_id}/datasets/{dataset_id}` | Supprimer un dataset | +| `GET` | `/organizations/{organization_id}/connectors` | Lister les connecteurs disponibles | + +--- + +## 4. Integration Guidelines for Copilot + +- **Hierarchy Awareness:** Every API call for Workspaces, Solutions, or Runners must include the `organization_id` in the path as defined in the spec. +- **Keycloak Integration:** + - Tokens are passed in the `Authorization: Bearer ` header. + - User identities in the `security.accessControlList` refer to Keycloak `id` (often an email or sub). +- **Pagination:** For lists (Organizations, Workspaces, Runners), use the `page` and `size` query parameters. +- **State Management:** When a Runner's last run is `Running`, the portal should poll the `/status` endpoint of the Run to update the UI. + + + +## old file + + + +The data (organizations, solutions, workspaces) is provided by the Cosmo Tech API. We will use the v5 of the API. + +The portal admin uses the official TypeScript client library: [@cosmotech/api-ts] +https://www.npmjs.com/package/@cosmotech/api-ts/v/5.0.0-rc5 . + +The diff --git a/docs/architecture/V5/openapi-5.0.0-rc5.json b/docs/technical-design/00-architecture/V5/openapi-5.0.0-rc5.json similarity index 100% rename from docs/architecture/V5/openapi-5.0.0-rc5.json rename to docs/technical-design/00-architecture/V5/openapi-5.0.0-rc5.json diff --git a/docs/technical-design/00-architecture/api-bridge-strategy.md b/docs/technical-design/00-architecture/api-bridge-strategy.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/technical-design/00-architecture/auth-flow-keycloak.md b/docs/technical-design/00-architecture/auth-flow-keycloak.md new file mode 100644 index 0000000..e69de29 diff --git a/docs/technical-design/00-login-design.md b/docs/technical-design/00-login-design.md new file mode 100644 index 0000000..11713c8 --- /dev/null +++ b/docs/technical-design/00-login-design.md @@ -0,0 +1,2 @@ + + \ No newline at end of file diff --git a/src/themes/index.js b/src/themes/index.js index a6ba9c6..8cec7e8 100644 --- a/src/themes/index.js +++ b/src/themes/index.js @@ -49,7 +49,7 @@ const getThemeConfig = (mode = 'light') => ({ styleOverrides: { root: { '&:hover': { - backgroundColor: mode === 'light' ? '#f8f9fa' : '#252525 !important', + backgroundColor: mode === 'light' ? '#f8f9fa' : '#252525', }, }, }, diff --git a/yarn.lock b/yarn.lock index b0bf3b5..6682736 100644 --- a/yarn.lock +++ b/yarn.lock @@ -268,6 +268,7 @@ __metadata: "@types/react": "npm:^19.0.8" "@types/react-dom": "npm:^19.0.3" "@vitejs/plugin-react": "npm:^4.3.4" + "@vitest/ui": "npm:^4.0.18" axios: "npm:^1.7.9" eslint: "npm:^9.20.0" eslint-config-prettier: "npm:^10.0.1" @@ -291,6 +292,7 @@ __metadata: react-router: "npm:^7.1.5" vite: "npm:^6.1.0" vite-plugin-node-polyfills: "npm:^0.23.0" + vitest: "npm:^4.0.18" languageName: unknown linkType: soft @@ -517,6 +519,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/aix-ppc64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/aix-ppc64@npm:0.27.2" + conditions: os=aix & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/android-arm64@npm:0.25.12" @@ -524,6 +533,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-arm64@npm:0.27.2" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/android-arm@npm:0.25.12" @@ -531,6 +547,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-arm@npm:0.27.2" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/android-x64@npm:0.25.12" @@ -538,6 +561,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/android-x64@npm:0.27.2" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/darwin-arm64@npm:0.25.12" @@ -545,6 +575,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/darwin-arm64@npm:0.27.2" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/darwin-x64@npm:0.25.12" @@ -552,6 +589,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/darwin-x64@npm:0.27.2" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/freebsd-arm64@npm:0.25.12" @@ -559,6 +603,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/freebsd-arm64@npm:0.27.2" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/freebsd-x64@npm:0.25.12" @@ -566,6 +617,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/freebsd-x64@npm:0.27.2" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-arm64@npm:0.25.12" @@ -573,6 +631,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-arm64@npm:0.27.2" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-arm@npm:0.25.12" @@ -580,6 +645,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-arm@npm:0.27.2" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-ia32@npm:0.25.12" @@ -587,6 +659,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-ia32@npm:0.27.2" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-loong64@npm:0.25.12" @@ -594,6 +673,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-loong64@npm:0.27.2" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-mips64el@npm:0.25.12" @@ -601,6 +687,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-mips64el@npm:0.27.2" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-ppc64@npm:0.25.12" @@ -608,6 +701,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-ppc64@npm:0.27.2" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-riscv64@npm:0.25.12" @@ -615,6 +715,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-riscv64@npm:0.27.2" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-s390x@npm:0.25.12" @@ -622,6 +729,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-s390x@npm:0.27.2" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-x64@npm:0.25.12" @@ -629,6 +743,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/linux-x64@npm:0.27.2" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/netbsd-arm64@npm:0.25.12" @@ -636,6 +757,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/netbsd-arm64@npm:0.27.2" + conditions: os=netbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/netbsd-x64@npm:0.25.12" @@ -643,6 +771,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/netbsd-x64@npm:0.27.2" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/openbsd-arm64@npm:0.25.12" @@ -650,6 +785,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openbsd-arm64@npm:0.27.2" + conditions: os=openbsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/openbsd-x64@npm:0.25.12" @@ -657,6 +799,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openbsd-x64@npm:0.27.2" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openharmony-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/openharmony-arm64@npm:0.25.12" @@ -664,6 +813,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openharmony-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/openharmony-arm64@npm:0.27.2" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/sunos-x64@npm:0.25.12" @@ -671,6 +827,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/sunos-x64@npm:0.27.2" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/win32-arm64@npm:0.25.12" @@ -678,6 +841,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-arm64@npm:0.27.2" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/win32-ia32@npm:0.25.12" @@ -685,6 +855,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-ia32@npm:0.27.2" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/win32-x64@npm:0.25.12" @@ -692,6 +869,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.27.2": + version: 0.27.2 + resolution: "@esbuild/win32-x64@npm:0.27.2" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.5.0, @eslint-community/eslint-utils@npm:^4.8.0, @eslint-community/eslint-utils@npm:^4.9.1": version: 4.9.1 resolution: "@eslint-community/eslint-utils@npm:4.9.1" @@ -1095,6 +1279,13 @@ __metadata: languageName: node linkType: hard +"@polka/url@npm:^1.0.0-next.24": + version: 1.0.0-next.29 + resolution: "@polka/url@npm:1.0.0-next.29" + checksum: 10c0/0d58e081844095cb029d3c19a659bfefd09d5d51a2f791bc61eba7ea826f13d6ee204a8a448c2f5a855c17df07b37517373ff916dd05801063c0568ae9937684 + languageName: node + linkType: hard + "@popperjs/core@npm:^2.11.8": version: 2.11.8 resolution: "@popperjs/core@npm:2.11.8" @@ -1170,6 +1361,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm-eabi@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-android-arm-eabi@npm:4.57.1" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@rollup/rollup-android-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-android-arm64@npm:4.55.2" @@ -1177,6 +1375,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-android-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-android-arm64@npm:4.57.1" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-darwin-arm64@npm:4.55.2" @@ -1184,6 +1389,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-darwin-arm64@npm:4.57.1" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-darwin-x64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-darwin-x64@npm:4.55.2" @@ -1191,6 +1403,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-darwin-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-darwin-x64@npm:4.57.1" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-freebsd-arm64@npm:4.55.2" @@ -1198,6 +1417,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-freebsd-arm64@npm:4.57.1" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-freebsd-x64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-freebsd-x64@npm:4.55.2" @@ -1205,6 +1431,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-freebsd-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-freebsd-x64@npm:4.57.1" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-gnueabihf@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.55.2" @@ -1212,6 +1445,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1" + conditions: os=linux & cpu=arm & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm-musleabihf@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.55.2" @@ -1219,6 +1459,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm-musleabihf@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.57.1" + conditions: os=linux & cpu=arm & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.55.2" @@ -1226,6 +1473,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.57.1" + conditions: os=linux & cpu=arm64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-arm64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.55.2" @@ -1233,6 +1487,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-arm64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-arm64-musl@npm:4.57.1" + conditions: os=linux & cpu=arm64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-loong64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.55.2" @@ -1240,6 +1501,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-loong64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.57.1" + conditions: os=linux & cpu=loong64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-loong64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-loong64-musl@npm:4.55.2" @@ -1247,6 +1515,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-loong64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-loong64-musl@npm:4.57.1" + conditions: os=linux & cpu=loong64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-ppc64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.55.2" @@ -1254,6 +1529,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-ppc64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.57.1" + conditions: os=linux & cpu=ppc64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-ppc64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.55.2" @@ -1261,6 +1543,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-ppc64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.57.1" + conditions: os=linux & cpu=ppc64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.55.2" @@ -1268,6 +1557,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.57.1" + conditions: os=linux & cpu=riscv64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-riscv64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.55.2" @@ -1275,6 +1571,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-riscv64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.57.1" + conditions: os=linux & cpu=riscv64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-linux-s390x-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.55.2" @@ -1282,6 +1585,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-s390x-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.57.1" + conditions: os=linux & cpu=s390x & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.55.2" @@ -1289,6 +1599,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-x64-gnu@npm:4.57.1" + conditions: os=linux & cpu=x64 & libc=glibc + languageName: node + linkType: hard + "@rollup/rollup-linux-x64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-x64-musl@npm:4.55.2" @@ -1296,6 +1613,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-linux-x64-musl@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-linux-x64-musl@npm:4.57.1" + conditions: os=linux & cpu=x64 & libc=musl + languageName: node + linkType: hard + "@rollup/rollup-openbsd-x64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-openbsd-x64@npm:4.55.2" @@ -1303,6 +1627,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-openbsd-x64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-openbsd-x64@npm:4.57.1" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-openharmony-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-openharmony-arm64@npm:4.55.2" @@ -1310,6 +1641,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-openharmony-arm64@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-openharmony-arm64@npm:4.57.1" + conditions: os=openharmony & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-arm64-msvc@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.55.2" @@ -1317,6 +1655,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-arm64-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.57.1" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@rollup/rollup-win32-ia32-msvc@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.55.2" @@ -1324,6 +1669,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-ia32-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.57.1" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-x64-gnu@npm:4.55.2" @@ -1331,6 +1683,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-gnu@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-x64-gnu@npm:4.57.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@rollup/rollup-win32-x64-msvc@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.55.2" @@ -1338,6 +1697,13 @@ __metadata: languageName: node linkType: hard +"@rollup/rollup-win32-x64-msvc@npm:4.57.1": + version: 4.57.1 + resolution: "@rollup/rollup-win32-x64-msvc@npm:4.57.1" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@standard-schema/spec@npm:^1.0.0": version: 1.1.0 resolution: "@standard-schema/spec@npm:1.1.0" @@ -1443,6 +1809,23 @@ __metadata: languageName: node linkType: hard +"@types/chai@npm:^5.2.2": + version: 5.2.3 + resolution: "@types/chai@npm:5.2.3" + dependencies: + "@types/deep-eql": "npm:*" + assertion-error: "npm:^2.0.1" + checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f + languageName: node + linkType: hard + +"@types/deep-eql@npm:*": + version: 4.0.2 + resolution: "@types/deep-eql@npm:4.0.2" + checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 + languageName: node + linkType: hard + "@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -1791,6 +2174,103 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/expect@npm:4.0.18" + dependencies: + "@standard-schema/spec": "npm:^1.0.0" + "@types/chai": "npm:^5.2.2" + "@vitest/spy": "npm:4.0.18" + "@vitest/utils": "npm:4.0.18" + chai: "npm:^6.2.1" + tinyrainbow: "npm:^3.0.3" + checksum: 10c0/123b0aa111682e82ec5289186df18037b1a1768700e468ee0f9879709aaa320cf790463c15c0d8ee10df92b402f4394baf5d27797e604d78e674766d87bcaadc + languageName: node + linkType: hard + +"@vitest/mocker@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/mocker@npm:4.0.18" + dependencies: + "@vitest/spy": "npm:4.0.18" + estree-walker: "npm:^3.0.3" + magic-string: "npm:^0.30.21" + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0-0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + checksum: 10c0/fb0a257e7e167759d4ad228d53fa7bad2267586459c4a62188f2043dd7163b4b02e1e496dc3c227837f776e7d73d6c4343613e89e7da379d9d30de8260f1ee4b + languageName: node + linkType: hard + +"@vitest/pretty-format@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/pretty-format@npm:4.0.18" + dependencies: + tinyrainbow: "npm:^3.0.3" + checksum: 10c0/0086b8c88eeca896d8e4b98fcdef452c8041a1b63eb9e85d3e0bcc96c8aa76d8e9e0b6990ebb0bb0a697c4ebab347e7735888b24f507dbff2742ddce7723fd94 + languageName: node + linkType: hard + +"@vitest/runner@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/runner@npm:4.0.18" + dependencies: + "@vitest/utils": "npm:4.0.18" + pathe: "npm:^2.0.3" + checksum: 10c0/fdb4afa411475133c05ba266c8092eaf1e56cbd5fb601f92ec6ccb9bab7ca52e06733ee8626599355cba4ee71cb3a8f28c84d3b69dc972e41047edc50229bc01 + languageName: node + linkType: hard + +"@vitest/snapshot@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/snapshot@npm:4.0.18" + dependencies: + "@vitest/pretty-format": "npm:4.0.18" + magic-string: "npm:^0.30.21" + pathe: "npm:^2.0.3" + checksum: 10c0/d3bfefa558db9a69a66886ace6575eb96903a5ba59f4d9a5d0fecb4acc2bb8dbb443ef409f5ac1475f2e1add30bd1d71280f98912da35e89c75829df9e84ea43 + languageName: node + linkType: hard + +"@vitest/spy@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/spy@npm:4.0.18" + checksum: 10c0/6de537890b3994fcadb8e8d8ac05942320ae184f071ec395d978a5fba7fa928cbb0c5de85af86a1c165706c466e840de8779eaff8c93450c511c7abaeb9b8a4e + languageName: node + linkType: hard + +"@vitest/ui@npm:^4.0.18": + version: 4.0.18 + resolution: "@vitest/ui@npm:4.0.18" + dependencies: + "@vitest/utils": "npm:4.0.18" + fflate: "npm:^0.8.2" + flatted: "npm:^3.3.3" + pathe: "npm:^2.0.3" + sirv: "npm:^3.0.2" + tinyglobby: "npm:^0.2.15" + tinyrainbow: "npm:^3.0.3" + peerDependencies: + vitest: 4.0.18 + checksum: 10c0/25ed45b52948101ba5c641aeb84126ce695d067984b8430f797498f7e3aeee53c5392e9e14290744a68b5114cfe933e84675b85340204cdbd118079217985157 + languageName: node + linkType: hard + +"@vitest/utils@npm:4.0.18": + version: 4.0.18 + resolution: "@vitest/utils@npm:4.0.18" + dependencies: + "@vitest/pretty-format": "npm:4.0.18" + tinyrainbow: "npm:^3.0.3" + checksum: 10c0/4a3c43c1421eb90f38576926496f6c80056167ba111e63f77cf118983902673737a1a38880b890d7c06ec0a12475024587344ee502b3c43093781533022f2aeb + languageName: node + linkType: hard + "abbrev@npm:^4.0.0": version: 4.0.0 resolution: "abbrev@npm:4.0.0" @@ -1967,6 +2447,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^2.0.1": + version: 2.0.1 + resolution: "assertion-error@npm:2.0.1" + checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 + languageName: node + linkType: hard + "async-function@npm:^1.0.0": version: 1.0.0 resolution: "async-function@npm:1.0.0" @@ -2262,6 +2749,13 @@ __metadata: languageName: node linkType: hard +"chai@npm:^6.2.1": + version: 6.2.2 + resolution: "chai@npm:6.2.2" + checksum: 10c0/e6c69e5f0c11dffe6ea13d0290936ebb68fcc1ad688b8e952e131df6a6d5797d5e860bc55cef1aca2e950c3e1f96daf79e9d5a70fb7dbaab4e46355e2635ed53 + languageName: node + linkType: hard + "chalk@npm:^4.0.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -2790,6 +3284,13 @@ __metadata: languageName: node linkType: hard +"es-module-lexer@npm:^1.7.0": + version: 1.7.0 + resolution: "es-module-lexer@npm:1.7.0" + checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b + languageName: node + linkType: hard + "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -2920,6 +3421,95 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.27.0": + version: 0.27.2 + resolution: "esbuild@npm:0.27.2" + dependencies: + "@esbuild/aix-ppc64": "npm:0.27.2" + "@esbuild/android-arm": "npm:0.27.2" + "@esbuild/android-arm64": "npm:0.27.2" + "@esbuild/android-x64": "npm:0.27.2" + "@esbuild/darwin-arm64": "npm:0.27.2" + "@esbuild/darwin-x64": "npm:0.27.2" + "@esbuild/freebsd-arm64": "npm:0.27.2" + "@esbuild/freebsd-x64": "npm:0.27.2" + "@esbuild/linux-arm": "npm:0.27.2" + "@esbuild/linux-arm64": "npm:0.27.2" + "@esbuild/linux-ia32": "npm:0.27.2" + "@esbuild/linux-loong64": "npm:0.27.2" + "@esbuild/linux-mips64el": "npm:0.27.2" + "@esbuild/linux-ppc64": "npm:0.27.2" + "@esbuild/linux-riscv64": "npm:0.27.2" + "@esbuild/linux-s390x": "npm:0.27.2" + "@esbuild/linux-x64": "npm:0.27.2" + "@esbuild/netbsd-arm64": "npm:0.27.2" + "@esbuild/netbsd-x64": "npm:0.27.2" + "@esbuild/openbsd-arm64": "npm:0.27.2" + "@esbuild/openbsd-x64": "npm:0.27.2" + "@esbuild/openharmony-arm64": "npm:0.27.2" + "@esbuild/sunos-x64": "npm:0.27.2" + "@esbuild/win32-arm64": "npm:0.27.2" + "@esbuild/win32-ia32": "npm:0.27.2" + "@esbuild/win32-x64": "npm:0.27.2" + dependenciesMeta: + "@esbuild/aix-ppc64": + optional: true + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-arm64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-arm64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/openharmony-arm64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 10c0/cf83f626f55500f521d5fe7f4bc5871bec240d3deb2a01fbd379edc43b3664d1167428738a5aad8794b35d1cca985c44c375b1cd38a2ca613c77ced2c83aafcd + languageName: node + linkType: hard + "escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -3257,6 +3847,15 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.3": + version: 3.0.3 + resolution: "estree-walker@npm:3.0.3" + dependencies: + "@types/estree": "npm:^1.0.0" + checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -3282,6 +3881,13 @@ __metadata: languageName: node linkType: hard +"expect-type@npm:^1.2.2": + version: 1.3.0 + resolution: "expect-type@npm:1.3.0" + checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd + languageName: node + linkType: hard + "exponential-backoff@npm:^3.1.1": version: 3.1.3 resolution: "exponential-backoff@npm:3.1.3" @@ -3329,6 +3935,13 @@ __metadata: languageName: node linkType: hard +"fflate@npm:^0.8.2": + version: 0.8.2 + resolution: "fflate@npm:0.8.2" + checksum: 10c0/03448d630c0a583abea594835a9fdb2aaf7d67787055a761515bf4ed862913cfd693b4c4ffd5c3f3b355a70cf1e19033e9ae5aedcca103188aaff91b8bd6e293 + languageName: node + linkType: hard + "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -3365,7 +3978,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9": +"flatted@npm:^3.2.9, flatted@npm:^3.3.3": version: 3.3.3 resolution: "flatted@npm:3.3.3" checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 @@ -4325,7 +4938,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.3": +"magic-string@npm:^0.30.21, magic-string@npm:^0.30.3": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -4516,6 +5129,13 @@ __metadata: languageName: node linkType: hard +"mrmime@npm:^2.0.0": + version: 2.0.1 + resolution: "mrmime@npm:2.0.1" + checksum: 10c0/af05afd95af202fdd620422f976ad67dc18e6ee29beb03dd1ce950ea6ef664de378e44197246df4c7cdd73d47f2e7143a6e26e473084b9e4aa2095c0ad1e1761 + languageName: node + linkType: hard + "ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -4732,6 +5352,13 @@ __metadata: languageName: node linkType: hard +"obug@npm:^2.1.1": + version: 2.1.1 + resolution: "obug@npm:2.1.1" + checksum: 10c0/59dccd7de72a047e08f8649e94c1015ec72f94eefb6ddb57fb4812c4b425a813bc7e7cd30c9aca20db3c59abc3c85cc7a62bb656a968741d770f4e8e02bc2e78 + languageName: node + linkType: hard + "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -4875,6 +5502,13 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^2.0.3": + version: 2.0.3 + resolution: "pathe@npm:2.0.3" + checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 + languageName: node + linkType: hard + "pbkdf2@npm:^3.1.2, pbkdf2@npm:^3.1.5": version: 3.1.5 resolution: "pbkdf2@npm:3.1.5" @@ -4926,7 +5560,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.5.3": +"postcss@npm:^8.5.3, postcss@npm:^8.5.6": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -5453,6 +6087,96 @@ __metadata: languageName: node linkType: hard +"rollup@npm:^4.43.0": + version: 4.57.1 + resolution: "rollup@npm:4.57.1" + dependencies: + "@rollup/rollup-android-arm-eabi": "npm:4.57.1" + "@rollup/rollup-android-arm64": "npm:4.57.1" + "@rollup/rollup-darwin-arm64": "npm:4.57.1" + "@rollup/rollup-darwin-x64": "npm:4.57.1" + "@rollup/rollup-freebsd-arm64": "npm:4.57.1" + "@rollup/rollup-freebsd-x64": "npm:4.57.1" + "@rollup/rollup-linux-arm-gnueabihf": "npm:4.57.1" + "@rollup/rollup-linux-arm-musleabihf": "npm:4.57.1" + "@rollup/rollup-linux-arm64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-arm64-musl": "npm:4.57.1" + "@rollup/rollup-linux-loong64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-loong64-musl": "npm:4.57.1" + "@rollup/rollup-linux-ppc64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-ppc64-musl": "npm:4.57.1" + "@rollup/rollup-linux-riscv64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-riscv64-musl": "npm:4.57.1" + "@rollup/rollup-linux-s390x-gnu": "npm:4.57.1" + "@rollup/rollup-linux-x64-gnu": "npm:4.57.1" + "@rollup/rollup-linux-x64-musl": "npm:4.57.1" + "@rollup/rollup-openbsd-x64": "npm:4.57.1" + "@rollup/rollup-openharmony-arm64": "npm:4.57.1" + "@rollup/rollup-win32-arm64-msvc": "npm:4.57.1" + "@rollup/rollup-win32-ia32-msvc": "npm:4.57.1" + "@rollup/rollup-win32-x64-gnu": "npm:4.57.1" + "@rollup/rollup-win32-x64-msvc": "npm:4.57.1" + "@types/estree": "npm:1.0.8" + fsevents: "npm:~2.3.2" + dependenciesMeta: + "@rollup/rollup-android-arm-eabi": + optional: true + "@rollup/rollup-android-arm64": + optional: true + "@rollup/rollup-darwin-arm64": + optional: true + "@rollup/rollup-darwin-x64": + optional: true + "@rollup/rollup-freebsd-arm64": + optional: true + "@rollup/rollup-freebsd-x64": + optional: true + "@rollup/rollup-linux-arm-gnueabihf": + optional: true + "@rollup/rollup-linux-arm-musleabihf": + optional: true + "@rollup/rollup-linux-arm64-gnu": + optional: true + "@rollup/rollup-linux-arm64-musl": + optional: true + "@rollup/rollup-linux-loong64-gnu": + optional: true + "@rollup/rollup-linux-loong64-musl": + optional: true + "@rollup/rollup-linux-ppc64-gnu": + optional: true + "@rollup/rollup-linux-ppc64-musl": + optional: true + "@rollup/rollup-linux-riscv64-gnu": + optional: true + "@rollup/rollup-linux-riscv64-musl": + optional: true + "@rollup/rollup-linux-s390x-gnu": + optional: true + "@rollup/rollup-linux-x64-gnu": + optional: true + "@rollup/rollup-linux-x64-musl": + optional: true + "@rollup/rollup-openbsd-x64": + optional: true + "@rollup/rollup-openharmony-arm64": + optional: true + "@rollup/rollup-win32-arm64-msvc": + optional: true + "@rollup/rollup-win32-ia32-msvc": + optional: true + "@rollup/rollup-win32-x64-gnu": + optional: true + "@rollup/rollup-win32-x64-msvc": + optional: true + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/a90aaf1166fc495920e44e52dced0b12283aaceb0924abd6f863102128dd428bbcbf85970f792c06bc63d2a2168e7f073b73e05f6f8d76fdae17b7ac6cacba06 + languageName: node + linkType: hard + "safe-array-concat@npm:^1.1.3": version: 1.1.3 resolution: "safe-array-concat@npm:1.1.3" @@ -5661,6 +6385,24 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 + languageName: node + linkType: hard + +"sirv@npm:^3.0.2": + version: 3.0.2 + resolution: "sirv@npm:3.0.2" + dependencies: + "@polka/url": "npm:^1.0.0-next.24" + mrmime: "npm:^2.0.0" + totalist: "npm:^3.0.0" + checksum: 10c0/5930e4397afdb14fbae13751c3be983af4bda5c9aadec832607dc2af15a7162f7d518c71b30e83ae3644b9a24cea041543cc969e5fe2b80af6ce8ea3174b2d04 + languageName: node + linkType: hard + "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -5726,6 +6468,20 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 + languageName: node + linkType: hard + +"std-env@npm:^3.10.0": + version: 3.10.0 + resolution: "std-env@npm:3.10.0" + checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f + languageName: node + linkType: hard + "stop-iteration-iterator@npm:^1.1.0": version: 1.1.0 resolution: "stop-iteration-iterator@npm:1.1.0" @@ -5913,6 +6669,20 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.9.0": + version: 2.9.0 + resolution: "tinybench@npm:2.9.0" + checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c + languageName: node + linkType: hard + +"tinyexec@npm:^1.0.2": + version: 1.0.2 + resolution: "tinyexec@npm:1.0.2" + checksum: 10c0/1261a8e34c9b539a9aae3b7f0bb5372045ff28ee1eba035a2a059e532198fe1a182ec61ac60fa0b4a4129f0c4c4b1d2d57355b5cb9aa2d17ac9454ecace502ee + languageName: node + linkType: hard + "tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13, tinyglobby@npm:^0.2.15": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" @@ -5923,6 +6693,13 @@ __metadata: languageName: node linkType: hard +"tinyrainbow@npm:^3.0.3": + version: 3.0.3 + resolution: "tinyrainbow@npm:3.0.3" + checksum: 10c0/1e799d35cd23cabe02e22550985a3051dc88814a979be02dc632a159c393a998628eacfc558e4c746b3006606d54b00bcdea0c39301133956d10a27aa27e988c + languageName: node + linkType: hard + "to-buffer@npm:^1.2.0, to-buffer@npm:^1.2.1, to-buffer@npm:^1.2.2": version: 1.2.2 resolution: "to-buffer@npm:1.2.2" @@ -5934,6 +6711,13 @@ __metadata: languageName: node linkType: hard +"totalist@npm:^3.0.0": + version: 3.0.1 + resolution: "totalist@npm:3.0.1" + checksum: 10c0/4bb1fadb69c3edbef91c73ebef9d25b33bbf69afe1e37ce544d5f7d13854cda15e47132f3e0dc4cafe300ddb8578c77c50a65004d8b6e97e77934a69aa924863 + languageName: node + linkType: hard + "ts-api-utils@npm:^2.4.0": version: 2.4.0 resolution: "ts-api-utils@npm:2.4.0" @@ -6223,6 +7007,61 @@ __metadata: languageName: node linkType: hard +"vite@npm:^6.0.0 || ^7.0.0": + version: 7.3.1 + resolution: "vite@npm:7.3.1" + dependencies: + esbuild: "npm:^0.27.0" + fdir: "npm:^6.5.0" + fsevents: "npm:~2.3.3" + picomatch: "npm:^4.0.3" + postcss: "npm:^8.5.6" + rollup: "npm:^4.43.0" + tinyglobby: "npm:^0.2.15" + peerDependencies: + "@types/node": ^20.19.0 || >=22.12.0 + jiti: ">=1.21.0" + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: ">=0.54.8" + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + bin: + vite: bin/vite.js + checksum: 10c0/5c7548f5f43a23533e53324304db4ad85f1896b1bfd3ee32ae9b866bac2933782c77b350eb2b52a02c625c8ad1ddd4c000df077419410650c982cd97fde8d014 + languageName: node + linkType: hard + "vite@npm:^6.1.0": version: 6.4.1 resolution: "vite@npm:6.4.1" @@ -6278,6 +7117,65 @@ __metadata: languageName: node linkType: hard +"vitest@npm:^4.0.18": + version: 4.0.18 + resolution: "vitest@npm:4.0.18" + dependencies: + "@vitest/expect": "npm:4.0.18" + "@vitest/mocker": "npm:4.0.18" + "@vitest/pretty-format": "npm:4.0.18" + "@vitest/runner": "npm:4.0.18" + "@vitest/snapshot": "npm:4.0.18" + "@vitest/spy": "npm:4.0.18" + "@vitest/utils": "npm:4.0.18" + es-module-lexer: "npm:^1.7.0" + expect-type: "npm:^1.2.2" + magic-string: "npm:^0.30.21" + obug: "npm:^2.1.1" + pathe: "npm:^2.0.3" + picomatch: "npm:^4.0.3" + std-env: "npm:^3.10.0" + tinybench: "npm:^2.9.0" + tinyexec: "npm:^1.0.2" + tinyglobby: "npm:^0.2.15" + tinyrainbow: "npm:^3.0.3" + vite: "npm:^6.0.0 || ^7.0.0" + why-is-node-running: "npm:^2.3.0" + peerDependencies: + "@edge-runtime/vm": "*" + "@opentelemetry/api": ^1.9.0 + "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 + "@vitest/browser-playwright": 4.0.18 + "@vitest/browser-preview": 4.0.18 + "@vitest/browser-webdriverio": 4.0.18 + "@vitest/ui": 4.0.18 + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@opentelemetry/api": + optional: true + "@types/node": + optional: true + "@vitest/browser-playwright": + optional: true + "@vitest/browser-preview": + optional: true + "@vitest/browser-webdriverio": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 10c0/b913cd32032c95f29ff08c931f4b4c6fd6d2da498908d6770952c561a1b8d75c62499a1f04cadf82fb89cc0f9a33f29fb5dfdb899f6dbb27686a9d91571be5fa + languageName: node + linkType: hard + "vm-browserify@npm:^1.0.1": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" @@ -6375,6 +7273,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.3.0": + version: 2.3.0 + resolution: "why-is-node-running@npm:2.3.0" + dependencies: + siginfo: "npm:^2.0.0" + stackback: "npm:0.0.2" + bin: + why-is-node-running: cli.js + checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 + languageName: node + linkType: hard + "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5" From 3c03a9603ca768f8e77bf0982a1e6c969d2128c2 Mon Sep 17 00:00:00 2001 From: Mahdi Falek Date: Thu, 5 Feb 2026 15:57:18 +0100 Subject: [PATCH 2/3] feat: implement initial data loading and organization/workspace views --- docs/requirements/01-homepage.md | 20 ++++++++ docs/requirements/01-organization-list.md | 0 docs/requirements/02-workspacesview.md | 22 +++++++++ src/AppWrapper.jsx | 2 + src/components/DataLoader/DataLoader.jsx | 25 ++++++++++ src/state/app/constants.js | 10 ++++ src/state/app/hooks.js | 16 +++++++ src/state/app/index.js | 6 +++ src/state/app/reducers.js | 30 ++++++++++++ src/state/app/thunks/fetchInitialData.js | 57 +++++++++++++++++++++++ src/state/app/thunks/index.js | 3 ++ src/state/rootReducer.js | 2 + 12 files changed, 193 insertions(+) create mode 100644 docs/requirements/01-homepage.md delete mode 100644 docs/requirements/01-organization-list.md create mode 100644 docs/requirements/02-workspacesview.md create mode 100644 src/components/DataLoader/DataLoader.jsx create mode 100644 src/state/app/constants.js create mode 100644 src/state/app/hooks.js create mode 100644 src/state/app/index.js create mode 100644 src/state/app/reducers.js create mode 100644 src/state/app/thunks/fetchInitialData.js create mode 100644 src/state/app/thunks/index.js diff --git a/docs/requirements/01-homepage.md b/docs/requirements/01-homepage.md new file mode 100644 index 0000000..116aacb --- /dev/null +++ b/docs/requirements/01-homepage.md @@ -0,0 +1,20 @@ + + + +The home page of the portal admin is the organization view page of the main organization of the current tenant. + +Most of the cases there is only one organization, so the user will land on the default organization after login. + +This page has the standard navigation format (menus on the left, main body in the middle) + +Menus: + +Solutions => a click on this menu displays the Solutions List View showing the solutions of this organization + +Workspaces => a click on this menu displays the Workspaces List View showing the workspaces of this organization + +Users & Roles + +Flowchart + +main content : diff --git a/docs/requirements/01-organization-list.md b/docs/requirements/01-organization-list.md deleted file mode 100644 index e69de29..0000000 diff --git a/docs/requirements/02-workspacesview.md b/docs/requirements/02-workspacesview.md new file mode 100644 index 0000000..0c677f8 --- /dev/null +++ b/docs/requirements/02-workspacesview.md @@ -0,0 +1,22 @@ + + + +# Workspaces View Requirements + +## 1. Module "Workspaces" +After choosing an organization, the user sees a list of its workspaces. + +### 1.1 Page Header +* **Top Left**: An **Organization Selector** to view or switch the current organization. +* **Top Right**: An **"Add Workspace"** button to initiate creation. + +### 1.2 Workspaces List Table +* **ID**: Unique technical ID. +* **Name**: Display name. +* **Actions**: Buttons for **Manage** and **Delete**. + +### 1.3 Key Features +* **Add Workspace**: Clicking the button opens a **pop-up (Add Workspace modal)**. +* **Manage Action**: Clicking "Manage" opens a **pop-up (Manage modal)** to edit settings (detailed in Manage View). +* **Row Navigation**: Clicking a row takes the user to a new page: the **Workspace Detail View**. +* **Access Control**: Buttons are only visible if the user has the required permissions. \ No newline at end of file diff --git a/src/AppWrapper.jsx b/src/AppWrapper.jsx index a92b04f..dc73a05 100644 --- a/src/AppWrapper.jsx +++ b/src/AppWrapper.jsx @@ -5,6 +5,7 @@ import { useSelector } from 'react-redux'; import { CssBaseline } from '@mui/material'; import { ThemeProvider } from '@mui/material/styles'; import App from './App.jsx'; +import DataLoader from './components/DataLoader/DataLoader.jsx'; import { createAppTheme } from './themes'; export const AppWrapper = () => { @@ -14,6 +15,7 @@ export const AppWrapper = () => { return ( + ); diff --git a/src/components/DataLoader/DataLoader.jsx b/src/components/DataLoader/DataLoader.jsx new file mode 100644 index 0000000..284701d --- /dev/null +++ b/src/components/DataLoader/DataLoader.jsx @@ -0,0 +1,25 @@ +// SPDX-FileCopyrightText: Copyright (C) 2024-2025 Cosmo Tech +// SPDX-License-Identifier: LicenseRef-CosmoTech +import { useEffect } from 'react'; +import { useFetchInitialData } from '../../state/app/hooks.js'; +import { AUTH_STATUS } from '../../state/auth/constants.js'; +import { useAuth } from '../../state/auth/hooks.js'; + +/** + * DataLoader component watches for authentication status changes + * and triggers initial data fetching when user becomes authenticated. + */ +export default function DataLoader() { + const { status } = useAuth(); + const fetchInitialData = useFetchInitialData(); + + useEffect(() => { + if (status === AUTH_STATUS.AUTHENTICATED) { + console.log('[DataLoader] Auth status changed to AUTHENTICATED, fetching initial data...'); + fetchInitialData(); + } + }, [status, fetchInitialData]); + + // This component doesn't render anything + return null; +} diff --git a/src/state/app/constants.js b/src/state/app/constants.js new file mode 100644 index 0000000..3c2ed25 --- /dev/null +++ b/src/state/app/constants.js @@ -0,0 +1,10 @@ +// SPDX-FileCopyrightText: Copyright (C) 2024-2025 Cosmo Tech +// SPDX-License-Identifier: LicenseRef-CosmoTech + +// Application loading statuses +export const APP_STATUS = { + IDLE: 'IDLE', + LOADING: 'LOADING', + SUCCESS: 'SUCCESS', + ERROR: 'ERROR', +}; diff --git a/src/state/app/hooks.js b/src/state/app/hooks.js new file mode 100644 index 0000000..285f70e --- /dev/null +++ b/src/state/app/hooks.js @@ -0,0 +1,16 @@ +// SPDX-FileCopyrightText: Copyright (C) 2024-2025 Cosmo Tech +// SPDX-License-Identifier: LicenseRef-CosmoTech +import { useCallback } from 'react'; +import { useDispatch, useSelector } from 'react-redux'; +import fetchInitialData from './thunks/fetchInitialData.js'; + +// Selectors +export const useAppStatus = () => useSelector((state) => state.app.status); +export const useAppError = () => useSelector((state) => state.app.error); +export const useApiVersion = () => useSelector((state) => state.app.apiVersion); + +// Action dispatchers +export const useFetchInitialData = () => { + const dispatch = useDispatch(); + return useCallback(() => dispatch(fetchInitialData()), [dispatch]); +}; diff --git a/src/state/app/index.js b/src/state/app/index.js new file mode 100644 index 0000000..1c6bd2c --- /dev/null +++ b/src/state/app/index.js @@ -0,0 +1,6 @@ +// SPDX-FileCopyrightText: Copyright (C) 2024-2025 Cosmo Tech +// SPDX-License-Identifier: LicenseRef-CosmoTech +export { default as appReducer } from './reducers.js'; +export * from './constants.js'; +export * from './hooks.js'; +export * from './thunks/index.js'; diff --git a/src/state/app/reducers.js b/src/state/app/reducers.js new file mode 100644 index 0000000..552468f --- /dev/null +++ b/src/state/app/reducers.js @@ -0,0 +1,30 @@ +// SPDX-FileCopyrightText: Copyright (C) 2024-2025 Cosmo Tech +// SPDX-License-Identifier: LicenseRef-CosmoTech +import { createSlice } from '@reduxjs/toolkit'; +import { APP_STATUS } from './constants.js'; + +const initialState = { + status: APP_STATUS.IDLE, + error: null, + apiVersion: null, +}; + +const appSlice = createSlice({ + name: 'app', + initialState, + reducers: { + setAppStatus: (state, action) => { + state.status = action.payload.status; + if (action.payload.error !== undefined) { + state.error = action.payload.error; + } + }, + setApiVersion: (state, action) => { + state.apiVersion = action.payload.apiVersion; + }, + resetAppState: () => initialState, + }, +}); + +export const { setAppStatus, setApiVersion, resetAppState } = appSlice.actions; +export default appSlice.reducer; diff --git a/src/state/app/thunks/fetchInitialData.js b/src/state/app/thunks/fetchInitialData.js new file mode 100644 index 0000000..87c4b7c --- /dev/null +++ b/src/state/app/thunks/fetchInitialData.js @@ -0,0 +1,57 @@ +// SPDX-FileCopyrightText: Copyright (C) 2024-2025 Cosmo Tech +// SPDX-License-Identifier: LicenseRef-CosmoTech +import { APP_STATUS } from '../constants.js'; +import { setAppStatus } from '../reducers.js'; + +/** + * Thunk to fetch all initial data after authentication. + * Fetches organizations, workspaces, permissions and logs the results. + */ +function fetchInitialData() { + return async (dispatch, getState, extraArgument) => { + const { api } = extraArgument; + + dispatch(setAppStatus({ status: APP_STATUS.LOADING })); + + try { + // Fetch organizations + console.log('[FetchInitialData] Fetching organizations...'); + const { data: organizations } = await api.Organizations.findAllOrganizations(); + console.log('[FetchInitialData] Organizations fetched:', organizations); + + // Fetch workspaces for each organization + console.log('[FetchInitialData] Fetching workspaces...'); + const workspacesResults = []; + for (const org of organizations) { + try { + const { data: workspaces } = await api.Workspaces.findAllWorkspaces(org.id); + workspacesResults.push({ organizationId: org.id, workspaces }); + } catch (error) { + console.warn(`[FetchInitialData] Could not fetch workspaces for org ${org.id}:`, error.message); + } + } + console.log('[FetchInitialData] Workspaces fetched:', workspacesResults); + + // Log summary + console.log('[FetchInitialData] ===== INITIAL DATA SUMMARY ====='); + console.log('[FetchInitialData] Total organizations:', organizations.length); + console.log( + '[FetchInitialData] Total workspaces:', + workspacesResults.reduce((acc, r) => acc + r.workspaces.length, 0) + ); + console.log('[FetchInitialData] ================================'); + + dispatch(setAppStatus({ status: APP_STATUS.SUCCESS })); + } catch (error) { + console.error('[FetchInitialData] Error fetching initial data:', error); + dispatch( + setAppStatus({ + status: APP_STATUS.ERROR, + error: error.message || 'Failed to fetch initial data', + }) + ); + } + }; +} + +export default fetchInitialData; diff --git a/src/state/app/thunks/index.js b/src/state/app/thunks/index.js new file mode 100644 index 0000000..d38be84 --- /dev/null +++ b/src/state/app/thunks/index.js @@ -0,0 +1,3 @@ +// SPDX-FileCopyrightText: Copyright (C) 2024-2025 Cosmo Tech +// SPDX-License-Identifier: LicenseRef-CosmoTech +export { default as fetchInitialData } from './fetchInitialData.js'; diff --git a/src/state/rootReducer.js b/src/state/rootReducer.js index d769c83..6203f44 100644 --- a/src/state/rootReducer.js +++ b/src/state/rootReducer.js @@ -2,12 +2,14 @@ // SPDX-License-Identifier: LicenseRef-CosmoTech import { combineReducers } from '@reduxjs/toolkit'; import { cosmoApi } from './api/apiSlice.js'; +import appReducer from './app/reducers.js'; import authReducer from './auth/reducers.js'; import organizationsReducer from './organizations/reducers.js'; import themeReducer from './theme/reducers.js'; import workspacesReducer from './workspaces/reducers.js'; const rootReducer = combineReducers({ + app: appReducer, auth: authReducer, theme: themeReducer, organizations: organizationsReducer, From 3b82354899ad8ce984a99f158f019e3d12768258 Mon Sep 17 00:00:00 2001 From: Mahdi Falek Date: Thu, 5 Feb 2026 16:03:15 +0100 Subject: [PATCH 3/3] add missing depand --- package.json | 1 + yarn.lock | 937 ++------------------------------------------------- 2 files changed, 25 insertions(+), 913 deletions(-) diff --git a/package.json b/package.json index 3e4b4b4..c95639c 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,7 @@ "globals": "^15.14.0", "neostandard": "^0.12.1", "prettier": "3.5.0", + "typescript": "^5.9.3", "vite": "^6.1.0", "vite-plugin-node-polyfills": "^0.23.0" }, diff --git a/yarn.lock b/yarn.lock index 6682736..308388a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -268,7 +268,6 @@ __metadata: "@types/react": "npm:^19.0.8" "@types/react-dom": "npm:^19.0.3" "@vitejs/plugin-react": "npm:^4.3.4" - "@vitest/ui": "npm:^4.0.18" axios: "npm:^1.7.9" eslint: "npm:^9.20.0" eslint-config-prettier: "npm:^10.0.1" @@ -290,9 +289,9 @@ __metadata: react-i18next: "npm:^16.5.4" react-redux: "npm:^9.2.0" react-router: "npm:^7.1.5" + typescript: "npm:^5.9.3" vite: "npm:^6.1.0" vite-plugin-node-polyfills: "npm:^0.23.0" - vitest: "npm:^4.0.18" languageName: unknown linkType: soft @@ -519,13 +518,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/aix-ppc64@npm:0.27.2" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/android-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/android-arm64@npm:0.25.12" @@ -533,13 +525,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/android-arm64@npm:0.27.2" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/android-arm@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/android-arm@npm:0.25.12" @@ -547,13 +532,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/android-arm@npm:0.27.2" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@esbuild/android-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/android-x64@npm:0.25.12" @@ -561,13 +539,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/android-x64@npm:0.27.2" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - "@esbuild/darwin-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/darwin-arm64@npm:0.25.12" @@ -575,13 +546,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/darwin-arm64@npm:0.27.2" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/darwin-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/darwin-x64@npm:0.25.12" @@ -589,13 +553,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/darwin-x64@npm:0.27.2" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@esbuild/freebsd-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/freebsd-arm64@npm:0.25.12" @@ -603,13 +560,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/freebsd-arm64@npm:0.27.2" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/freebsd-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/freebsd-x64@npm:0.25.12" @@ -617,13 +567,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/freebsd-x64@npm:0.27.2" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/linux-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-arm64@npm:0.25.12" @@ -631,13 +574,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-arm64@npm:0.27.2" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/linux-arm@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-arm@npm:0.25.12" @@ -645,13 +581,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-arm@npm:0.27.2" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - "@esbuild/linux-ia32@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-ia32@npm:0.25.12" @@ -659,13 +588,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-ia32@npm:0.27.2" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/linux-loong64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-loong64@npm:0.25.12" @@ -673,13 +595,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-loong64@npm:0.27.2" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - "@esbuild/linux-mips64el@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-mips64el@npm:0.25.12" @@ -687,13 +602,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-mips64el@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-mips64el@npm:0.27.2" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - "@esbuild/linux-ppc64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-ppc64@npm:0.25.12" @@ -701,13 +609,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-ppc64@npm:0.27.2" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - "@esbuild/linux-riscv64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-riscv64@npm:0.25.12" @@ -715,13 +616,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-riscv64@npm:0.27.2" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - "@esbuild/linux-s390x@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-s390x@npm:0.25.12" @@ -729,13 +623,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-s390x@npm:0.27.2" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - "@esbuild/linux-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/linux-x64@npm:0.25.12" @@ -743,13 +630,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/linux-x64@npm:0.27.2" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - "@esbuild/netbsd-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/netbsd-arm64@npm:0.25.12" @@ -757,13 +637,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/netbsd-arm64@npm:0.27.2" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/netbsd-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/netbsd-x64@npm:0.25.12" @@ -771,13 +644,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/netbsd-x64@npm:0.27.2" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openbsd-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/openbsd-arm64@npm:0.25.12" @@ -785,13 +651,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/openbsd-arm64@npm:0.27.2" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/openbsd-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/openbsd-x64@npm:0.25.12" @@ -799,13 +658,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/openbsd-x64@npm:0.27.2" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@esbuild/openharmony-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/openharmony-arm64@npm:0.25.12" @@ -813,13 +665,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/openharmony-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/openharmony-arm64@npm:0.27.2" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/sunos-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/sunos-x64@npm:0.25.12" @@ -827,13 +672,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/sunos-x64@npm:0.27.2" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - "@esbuild/win32-arm64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/win32-arm64@npm:0.25.12" @@ -841,13 +679,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/win32-arm64@npm:0.27.2" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@esbuild/win32-ia32@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/win32-ia32@npm:0.25.12" @@ -855,13 +686,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/win32-ia32@npm:0.27.2" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@esbuild/win32-x64@npm:0.25.12": version: 0.25.12 resolution: "@esbuild/win32-x64@npm:0.25.12" @@ -869,13 +693,6 @@ __metadata: languageName: node linkType: hard -"@esbuild/win32-x64@npm:0.27.2": - version: 0.27.2 - resolution: "@esbuild/win32-x64@npm:0.27.2" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@eslint-community/eslint-utils@npm:^4.1.2, @eslint-community/eslint-utils@npm:^4.4.0, @eslint-community/eslint-utils@npm:^4.5.0, @eslint-community/eslint-utils@npm:^4.8.0, @eslint-community/eslint-utils@npm:^4.9.1": version: 4.9.1 resolution: "@eslint-community/eslint-utils@npm:4.9.1" @@ -1279,13 +1096,6 @@ __metadata: languageName: node linkType: hard -"@polka/url@npm:^1.0.0-next.24": - version: 1.0.0-next.29 - resolution: "@polka/url@npm:1.0.0-next.29" - checksum: 10c0/0d58e081844095cb029d3c19a659bfefd09d5d51a2f791bc61eba7ea826f13d6ee204a8a448c2f5a855c17df07b37517373ff916dd05801063c0568ae9937684 - languageName: node - linkType: hard - "@popperjs/core@npm:^2.11.8": version: 2.11.8 resolution: "@popperjs/core@npm:2.11.8" @@ -1361,13 +1171,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.57.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - "@rollup/rollup-android-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-android-arm64@npm:4.55.2" @@ -1375,13 +1178,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-android-arm64@npm:4.57.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-darwin-arm64@npm:4.55.2" @@ -1389,13 +1185,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-darwin-arm64@npm:4.57.1" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-darwin-x64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-darwin-x64@npm:4.55.2" @@ -1403,13 +1192,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-darwin-x64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-darwin-x64@npm:4.57.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-freebsd-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-freebsd-arm64@npm:4.55.2" @@ -1417,13 +1199,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.57.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-freebsd-x64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-freebsd-x64@npm:4.55.2" @@ -1431,13 +1206,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-freebsd-x64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-freebsd-x64@npm:4.57.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-gnueabihf@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.55.2" @@ -1445,13 +1213,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.57.1" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm-musleabihf@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.55.2" @@ -1459,13 +1220,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm-musleabihf@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.57.1" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.55.2" @@ -1473,13 +1227,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.57.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-arm64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-arm64-musl@npm:4.55.2" @@ -1487,13 +1234,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-arm64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.57.1" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-loong64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.55.2" @@ -1501,13 +1241,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-loong64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.57.1" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-loong64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-loong64-musl@npm:4.55.2" @@ -1515,13 +1248,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-loong64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.57.1" - conditions: os=linux & cpu=loong64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-ppc64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.55.2" @@ -1529,13 +1255,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-ppc64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.57.1" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-ppc64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.55.2" @@ -1543,13 +1262,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-ppc64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.57.1" - conditions: os=linux & cpu=ppc64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.55.2" @@ -1557,13 +1269,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.57.1" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-riscv64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.55.2" @@ -1571,13 +1276,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-riscv64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.57.1" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-linux-s390x-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.55.2" @@ -1585,13 +1283,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-s390x-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.57.1" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-x64-gnu@npm:4.55.2" @@ -1599,13 +1290,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.57.1" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - "@rollup/rollup-linux-x64-musl@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-linux-x64-musl@npm:4.55.2" @@ -1613,13 +1297,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-linux-x64-musl@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.57.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - "@rollup/rollup-openbsd-x64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-openbsd-x64@npm:4.55.2" @@ -1627,13 +1304,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-openbsd-x64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-openbsd-x64@npm:4.57.1" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-openharmony-arm64@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-openharmony-arm64@npm:4.55.2" @@ -1641,13 +1311,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-openharmony-arm64@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.57.1" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-win32-arm64-msvc@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.55.2" @@ -1655,13 +1318,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-arm64-msvc@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.57.1" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - "@rollup/rollup-win32-ia32-msvc@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.55.2" @@ -1669,13 +1325,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-ia32-msvc@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.57.1" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - "@rollup/rollup-win32-x64-gnu@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-x64-gnu@npm:4.55.2" @@ -1683,13 +1332,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-gnu@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.57.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@rollup/rollup-win32-x64-msvc@npm:4.55.2": version: 4.55.2 resolution: "@rollup/rollup-win32-x64-msvc@npm:4.55.2" @@ -1697,13 +1339,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-win32-x64-msvc@npm:4.57.1": - version: 4.57.1 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.57.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@standard-schema/spec@npm:^1.0.0": version: 1.1.0 resolution: "@standard-schema/spec@npm:1.1.0" @@ -1809,23 +1444,6 @@ __metadata: languageName: node linkType: hard -"@types/chai@npm:^5.2.2": - version: 5.2.3 - resolution: "@types/chai@npm:5.2.3" - dependencies: - "@types/deep-eql": "npm:*" - assertion-error: "npm:^2.0.1" - checksum: 10c0/e0ef1de3b6f8045a5e473e867c8565788c444271409d155588504840ad1a53611011f85072188c2833941189400228c1745d78323dac13fcede9c2b28bacfb2f - languageName: node - linkType: hard - -"@types/deep-eql@npm:*": - version: 4.0.2 - resolution: "@types/deep-eql@npm:4.0.2" - checksum: 10c0/bf3f811843117900d7084b9d0c852da9a044d12eb40e6de73b552598a6843c21291a8a381b0532644574beecd5e3491c5ff3a0365ab86b15d59862c025384844 - languageName: node - linkType: hard - "@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" @@ -2174,103 +1792,6 @@ __metadata: languageName: node linkType: hard -"@vitest/expect@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/expect@npm:4.0.18" - dependencies: - "@standard-schema/spec": "npm:^1.0.0" - "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:4.0.18" - "@vitest/utils": "npm:4.0.18" - chai: "npm:^6.2.1" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/123b0aa111682e82ec5289186df18037b1a1768700e468ee0f9879709aaa320cf790463c15c0d8ee10df92b402f4394baf5d27797e604d78e674766d87bcaadc - languageName: node - linkType: hard - -"@vitest/mocker@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/mocker@npm:4.0.18" - dependencies: - "@vitest/spy": "npm:4.0.18" - estree-walker: "npm:^3.0.3" - magic-string: "npm:^0.30.21" - peerDependencies: - msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 - peerDependenciesMeta: - msw: - optional: true - vite: - optional: true - checksum: 10c0/fb0a257e7e167759d4ad228d53fa7bad2267586459c4a62188f2043dd7163b4b02e1e496dc3c227837f776e7d73d6c4343613e89e7da379d9d30de8260f1ee4b - languageName: node - linkType: hard - -"@vitest/pretty-format@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/pretty-format@npm:4.0.18" - dependencies: - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/0086b8c88eeca896d8e4b98fcdef452c8041a1b63eb9e85d3e0bcc96c8aa76d8e9e0b6990ebb0bb0a697c4ebab347e7735888b24f507dbff2742ddce7723fd94 - languageName: node - linkType: hard - -"@vitest/runner@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/runner@npm:4.0.18" - dependencies: - "@vitest/utils": "npm:4.0.18" - pathe: "npm:^2.0.3" - checksum: 10c0/fdb4afa411475133c05ba266c8092eaf1e56cbd5fb601f92ec6ccb9bab7ca52e06733ee8626599355cba4ee71cb3a8f28c84d3b69dc972e41047edc50229bc01 - languageName: node - linkType: hard - -"@vitest/snapshot@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/snapshot@npm:4.0.18" - dependencies: - "@vitest/pretty-format": "npm:4.0.18" - magic-string: "npm:^0.30.21" - pathe: "npm:^2.0.3" - checksum: 10c0/d3bfefa558db9a69a66886ace6575eb96903a5ba59f4d9a5d0fecb4acc2bb8dbb443ef409f5ac1475f2e1add30bd1d71280f98912da35e89c75829df9e84ea43 - languageName: node - linkType: hard - -"@vitest/spy@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/spy@npm:4.0.18" - checksum: 10c0/6de537890b3994fcadb8e8d8ac05942320ae184f071ec395d978a5fba7fa928cbb0c5de85af86a1c165706c466e840de8779eaff8c93450c511c7abaeb9b8a4e - languageName: node - linkType: hard - -"@vitest/ui@npm:^4.0.18": - version: 4.0.18 - resolution: "@vitest/ui@npm:4.0.18" - dependencies: - "@vitest/utils": "npm:4.0.18" - fflate: "npm:^0.8.2" - flatted: "npm:^3.3.3" - pathe: "npm:^2.0.3" - sirv: "npm:^3.0.2" - tinyglobby: "npm:^0.2.15" - tinyrainbow: "npm:^3.0.3" - peerDependencies: - vitest: 4.0.18 - checksum: 10c0/25ed45b52948101ba5c641aeb84126ce695d067984b8430f797498f7e3aeee53c5392e9e14290744a68b5114cfe933e84675b85340204cdbd118079217985157 - languageName: node - linkType: hard - -"@vitest/utils@npm:4.0.18": - version: 4.0.18 - resolution: "@vitest/utils@npm:4.0.18" - dependencies: - "@vitest/pretty-format": "npm:4.0.18" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/4a3c43c1421eb90f38576926496f6c80056167ba111e63f77cf118983902673737a1a38880b890d7c06ec0a12475024587344ee502b3c43093781533022f2aeb - languageName: node - linkType: hard - "abbrev@npm:^4.0.0": version: 4.0.0 resolution: "abbrev@npm:4.0.0" @@ -2447,13 +1968,6 @@ __metadata: languageName: node linkType: hard -"assertion-error@npm:^2.0.1": - version: 2.0.1 - resolution: "assertion-error@npm:2.0.1" - checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 - languageName: node - linkType: hard - "async-function@npm:^1.0.0": version: 1.0.0 resolution: "async-function@npm:1.0.0" @@ -2749,13 +2263,6 @@ __metadata: languageName: node linkType: hard -"chai@npm:^6.2.1": - version: 6.2.2 - resolution: "chai@npm:6.2.2" - checksum: 10c0/e6c69e5f0c11dffe6ea13d0290936ebb68fcc1ad688b8e952e131df6a6d5797d5e860bc55cef1aca2e950c3e1f96daf79e9d5a70fb7dbaab4e46355e2635ed53 - languageName: node - linkType: hard - "chalk@npm:^4.0.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" @@ -3284,13 +2791,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.7.0": - version: 1.7.0 - resolution: "es-module-lexer@npm:1.7.0" - checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b - languageName: node - linkType: hard - "es-object-atoms@npm:^1.0.0, es-object-atoms@npm:^1.1.1": version: 1.1.1 resolution: "es-object-atoms@npm:1.1.1" @@ -3421,95 +2921,6 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.27.0": - version: 0.27.2 - resolution: "esbuild@npm:0.27.2" - dependencies: - "@esbuild/aix-ppc64": "npm:0.27.2" - "@esbuild/android-arm": "npm:0.27.2" - "@esbuild/android-arm64": "npm:0.27.2" - "@esbuild/android-x64": "npm:0.27.2" - "@esbuild/darwin-arm64": "npm:0.27.2" - "@esbuild/darwin-x64": "npm:0.27.2" - "@esbuild/freebsd-arm64": "npm:0.27.2" - "@esbuild/freebsd-x64": "npm:0.27.2" - "@esbuild/linux-arm": "npm:0.27.2" - "@esbuild/linux-arm64": "npm:0.27.2" - "@esbuild/linux-ia32": "npm:0.27.2" - "@esbuild/linux-loong64": "npm:0.27.2" - "@esbuild/linux-mips64el": "npm:0.27.2" - "@esbuild/linux-ppc64": "npm:0.27.2" - "@esbuild/linux-riscv64": "npm:0.27.2" - "@esbuild/linux-s390x": "npm:0.27.2" - "@esbuild/linux-x64": "npm:0.27.2" - "@esbuild/netbsd-arm64": "npm:0.27.2" - "@esbuild/netbsd-x64": "npm:0.27.2" - "@esbuild/openbsd-arm64": "npm:0.27.2" - "@esbuild/openbsd-x64": "npm:0.27.2" - "@esbuild/openharmony-arm64": "npm:0.27.2" - "@esbuild/sunos-x64": "npm:0.27.2" - "@esbuild/win32-arm64": "npm:0.27.2" - "@esbuild/win32-ia32": "npm:0.27.2" - "@esbuild/win32-x64": "npm:0.27.2" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/cf83f626f55500f521d5fe7f4bc5871bec240d3deb2a01fbd379edc43b3664d1167428738a5aad8794b35d1cca985c44c375b1cd38a2ca613c77ced2c83aafcd - languageName: node - linkType: hard - "escalade@npm:^3.2.0": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -3847,15 +3258,6 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^3.0.3": - version: 3.0.3 - resolution: "estree-walker@npm:3.0.3" - dependencies: - "@types/estree": "npm:^1.0.0" - checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d - languageName: node - linkType: hard - "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -3881,13 +3283,6 @@ __metadata: languageName: node linkType: hard -"expect-type@npm:^1.2.2": - version: 1.3.0 - resolution: "expect-type@npm:1.3.0" - checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd - languageName: node - linkType: hard - "exponential-backoff@npm:^3.1.1": version: 3.1.3 resolution: "exponential-backoff@npm:3.1.3" @@ -3935,13 +3330,6 @@ __metadata: languageName: node linkType: hard -"fflate@npm:^0.8.2": - version: 0.8.2 - resolution: "fflate@npm:0.8.2" - checksum: 10c0/03448d630c0a583abea594835a9fdb2aaf7d67787055a761515bf4ed862913cfd693b4c4ffd5c3f3b355a70cf1e19033e9ae5aedcca103188aaff91b8bd6e293 - languageName: node - linkType: hard - "file-entry-cache@npm:^8.0.0": version: 8.0.0 resolution: "file-entry-cache@npm:8.0.0" @@ -3978,7 +3366,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9, flatted@npm:^3.3.3": +"flatted@npm:^3.2.9": version: 3.3.3 resolution: "flatted@npm:3.3.3" checksum: 10c0/e957a1c6b0254aa15b8cce8533e24165abd98fadc98575db082b786b5da1b7d72062b81bfdcd1da2f4d46b6ed93bec2434e62333e9b4261d79ef2e75a10dd538 @@ -4938,7 +4326,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.21, magic-string@npm:^0.30.3": +"magic-string@npm:^0.30.3": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -5129,13 +4517,6 @@ __metadata: languageName: node linkType: hard -"mrmime@npm:^2.0.0": - version: 2.0.1 - resolution: "mrmime@npm:2.0.1" - checksum: 10c0/af05afd95af202fdd620422f976ad67dc18e6ee29beb03dd1ce950ea6ef664de378e44197246df4c7cdd73d47f2e7143a6e26e473084b9e4aa2095c0ad1e1761 - languageName: node - linkType: hard - "ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" @@ -5352,13 +4733,6 @@ __metadata: languageName: node linkType: hard -"obug@npm:^2.1.1": - version: 2.1.1 - resolution: "obug@npm:2.1.1" - checksum: 10c0/59dccd7de72a047e08f8649e94c1015ec72f94eefb6ddb57fb4812c4b425a813bc7e7cd30c9aca20db3c59abc3c85cc7a62bb656a968741d770f4e8e02bc2e78 - languageName: node - linkType: hard - "optionator@npm:^0.9.3": version: 0.9.4 resolution: "optionator@npm:0.9.4" @@ -5502,13 +4876,6 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^2.0.3": - version: 2.0.3 - resolution: "pathe@npm:2.0.3" - checksum: 10c0/c118dc5a8b5c4166011b2b70608762e260085180bb9e33e80a50dcdb1e78c010b1624f4280c492c92b05fc276715a4c357d1f9edc570f8f1b3d90b6839ebaca1 - languageName: node - linkType: hard - "pbkdf2@npm:^3.1.2, pbkdf2@npm:^3.1.5": version: 3.1.5 resolution: "pbkdf2@npm:3.1.5" @@ -5560,7 +4927,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.5.3, postcss@npm:^8.5.6": +"postcss@npm:^8.5.3": version: 8.5.6 resolution: "postcss@npm:8.5.6" dependencies: @@ -6087,96 +5454,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.43.0": - version: 4.57.1 - resolution: "rollup@npm:4.57.1" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.57.1" - "@rollup/rollup-android-arm64": "npm:4.57.1" - "@rollup/rollup-darwin-arm64": "npm:4.57.1" - "@rollup/rollup-darwin-x64": "npm:4.57.1" - "@rollup/rollup-freebsd-arm64": "npm:4.57.1" - "@rollup/rollup-freebsd-x64": "npm:4.57.1" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.57.1" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.57.1" - "@rollup/rollup-linux-arm64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-arm64-musl": "npm:4.57.1" - "@rollup/rollup-linux-loong64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-loong64-musl": "npm:4.57.1" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-ppc64-musl": "npm:4.57.1" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-riscv64-musl": "npm:4.57.1" - "@rollup/rollup-linux-s390x-gnu": "npm:4.57.1" - "@rollup/rollup-linux-x64-gnu": "npm:4.57.1" - "@rollup/rollup-linux-x64-musl": "npm:4.57.1" - "@rollup/rollup-openbsd-x64": "npm:4.57.1" - "@rollup/rollup-openharmony-arm64": "npm:4.57.1" - "@rollup/rollup-win32-arm64-msvc": "npm:4.57.1" - "@rollup/rollup-win32-ia32-msvc": "npm:4.57.1" - "@rollup/rollup-win32-x64-gnu": "npm:4.57.1" - "@rollup/rollup-win32-x64-msvc": "npm:4.57.1" - "@types/estree": "npm:1.0.8" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loong64-gnu": - optional: true - "@rollup/rollup-linux-loong64-musl": - optional: true - "@rollup/rollup-linux-ppc64-gnu": - optional: true - "@rollup/rollup-linux-ppc64-musl": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-openbsd-x64": - optional: true - "@rollup/rollup-openharmony-arm64": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-gnu": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/a90aaf1166fc495920e44e52dced0b12283aaceb0924abd6f863102128dd428bbcbf85970f792c06bc63d2a2168e7f073b73e05f6f8d76fdae17b7ac6cacba06 - languageName: node - linkType: hard - "safe-array-concat@npm:^1.1.3": version: 1.1.3 resolution: "safe-array-concat@npm:1.1.3" @@ -6385,24 +5662,6 @@ __metadata: languageName: node linkType: hard -"siginfo@npm:^2.0.0": - version: 2.0.0 - resolution: "siginfo@npm:2.0.0" - checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 - languageName: node - linkType: hard - -"sirv@npm:^3.0.2": - version: 3.0.2 - resolution: "sirv@npm:3.0.2" - dependencies: - "@polka/url": "npm:^1.0.0-next.24" - mrmime: "npm:^2.0.0" - totalist: "npm:^3.0.0" - checksum: 10c0/5930e4397afdb14fbae13751c3be983af4bda5c9aadec832607dc2af15a7162f7d518c71b30e83ae3644b9a24cea041543cc969e5fe2b80af6ce8ea3174b2d04 - languageName: node - linkType: hard - "smart-buffer@npm:^4.2.0": version: 4.2.0 resolution: "smart-buffer@npm:4.2.0" @@ -6468,20 +5727,6 @@ __metadata: languageName: node linkType: hard -"stackback@npm:0.0.2": - version: 0.0.2 - resolution: "stackback@npm:0.0.2" - checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 - languageName: node - linkType: hard - -"std-env@npm:^3.10.0": - version: 3.10.0 - resolution: "std-env@npm:3.10.0" - checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f - languageName: node - linkType: hard - "stop-iteration-iterator@npm:^1.1.0": version: 1.1.0 resolution: "stop-iteration-iterator@npm:1.1.0" @@ -6669,20 +5914,6 @@ __metadata: languageName: node linkType: hard -"tinybench@npm:^2.9.0": - version: 2.9.0 - resolution: "tinybench@npm:2.9.0" - checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c - languageName: node - linkType: hard - -"tinyexec@npm:^1.0.2": - version: 1.0.2 - resolution: "tinyexec@npm:1.0.2" - checksum: 10c0/1261a8e34c9b539a9aae3b7f0bb5372045ff28ee1eba035a2a059e532198fe1a182ec61ac60fa0b4a4129f0c4c4b1d2d57355b5cb9aa2d17ac9454ecace502ee - languageName: node - linkType: hard - "tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.13, tinyglobby@npm:^0.2.15": version: 0.2.15 resolution: "tinyglobby@npm:0.2.15" @@ -6693,13 +5924,6 @@ __metadata: languageName: node linkType: hard -"tinyrainbow@npm:^3.0.3": - version: 3.0.3 - resolution: "tinyrainbow@npm:3.0.3" - checksum: 10c0/1e799d35cd23cabe02e22550985a3051dc88814a979be02dc632a159c393a998628eacfc558e4c746b3006606d54b00bcdea0c39301133956d10a27aa27e988c - languageName: node - linkType: hard - "to-buffer@npm:^1.2.0, to-buffer@npm:^1.2.1, to-buffer@npm:^1.2.2": version: 1.2.2 resolution: "to-buffer@npm:1.2.2" @@ -6711,13 +5935,6 @@ __metadata: languageName: node linkType: hard -"totalist@npm:^3.0.0": - version: 3.0.1 - resolution: "totalist@npm:3.0.1" - checksum: 10c0/4bb1fadb69c3edbef91c73ebef9d25b33bbf69afe1e37ce544d5f7d13854cda15e47132f3e0dc4cafe300ddb8578c77c50a65004d8b6e97e77934a69aa924863 - languageName: node - linkType: hard - "ts-api-utils@npm:^2.4.0": version: 2.4.0 resolution: "ts-api-utils@npm:2.4.0" @@ -6829,6 +6046,26 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^5.9.3": + version: 5.9.3 + resolution: "typescript@npm:5.9.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/6bd7552ce39f97e711db5aa048f6f9995b53f1c52f7d8667c1abdc1700c68a76a308f579cd309ce6b53646deb4e9a1be7c813a93baaf0a28ccd536a30270e1c5 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A^5.9.3#optional!builtin": + version: 5.9.3 + resolution: "typescript@patch:typescript@npm%3A5.9.3#optional!builtin::version=5.9.3&hash=5786d5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/ad09fdf7a756814dce65bc60c1657b40d44451346858eea230e10f2e95a289d9183b6e32e5c11e95acc0ccc214b4f36289dcad4bf1886b0adb84d711d336a430 + languageName: node + linkType: hard + "unbox-primitive@npm:^1.1.0": version: 1.1.0 resolution: "unbox-primitive@npm:1.1.0" @@ -7007,61 +6244,6 @@ __metadata: languageName: node linkType: hard -"vite@npm:^6.0.0 || ^7.0.0": - version: 7.3.1 - resolution: "vite@npm:7.3.1" - dependencies: - esbuild: "npm:^0.27.0" - fdir: "npm:^6.5.0" - fsevents: "npm:~2.3.3" - picomatch: "npm:^4.0.3" - postcss: "npm:^8.5.6" - rollup: "npm:^4.43.0" - tinyglobby: "npm:^0.2.15" - peerDependencies: - "@types/node": ^20.19.0 || >=22.12.0 - jiti: ">=1.21.0" - less: ^4.0.0 - lightningcss: ^1.21.0 - sass: ^1.70.0 - sass-embedded: ^1.70.0 - stylus: ">=0.54.8" - sugarss: ^5.0.0 - terser: ^5.16.0 - tsx: ^4.8.1 - yaml: ^2.4.2 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - jiti: - optional: true - less: - optional: true - lightningcss: - optional: true - sass: - optional: true - sass-embedded: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - tsx: - optional: true - yaml: - optional: true - bin: - vite: bin/vite.js - checksum: 10c0/5c7548f5f43a23533e53324304db4ad85f1896b1bfd3ee32ae9b866bac2933782c77b350eb2b52a02c625c8ad1ddd4c000df077419410650c982cd97fde8d014 - languageName: node - linkType: hard - "vite@npm:^6.1.0": version: 6.4.1 resolution: "vite@npm:6.4.1" @@ -7117,65 +6299,6 @@ __metadata: languageName: node linkType: hard -"vitest@npm:^4.0.18": - version: 4.0.18 - resolution: "vitest@npm:4.0.18" - dependencies: - "@vitest/expect": "npm:4.0.18" - "@vitest/mocker": "npm:4.0.18" - "@vitest/pretty-format": "npm:4.0.18" - "@vitest/runner": "npm:4.0.18" - "@vitest/snapshot": "npm:4.0.18" - "@vitest/spy": "npm:4.0.18" - "@vitest/utils": "npm:4.0.18" - es-module-lexer: "npm:^1.7.0" - expect-type: "npm:^1.2.2" - magic-string: "npm:^0.30.21" - obug: "npm:^2.1.1" - pathe: "npm:^2.0.3" - picomatch: "npm:^4.0.3" - std-env: "npm:^3.10.0" - tinybench: "npm:^2.9.0" - tinyexec: "npm:^1.0.2" - tinyglobby: "npm:^0.2.15" - tinyrainbow: "npm:^3.0.3" - vite: "npm:^6.0.0 || ^7.0.0" - why-is-node-running: "npm:^2.3.0" - peerDependencies: - "@edge-runtime/vm": "*" - "@opentelemetry/api": ^1.9.0 - "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 - "@vitest/browser-playwright": 4.0.18 - "@vitest/browser-preview": 4.0.18 - "@vitest/browser-webdriverio": 4.0.18 - "@vitest/ui": 4.0.18 - happy-dom: "*" - jsdom: "*" - peerDependenciesMeta: - "@edge-runtime/vm": - optional: true - "@opentelemetry/api": - optional: true - "@types/node": - optional: true - "@vitest/browser-playwright": - optional: true - "@vitest/browser-preview": - optional: true - "@vitest/browser-webdriverio": - optional: true - "@vitest/ui": - optional: true - happy-dom: - optional: true - jsdom: - optional: true - bin: - vitest: vitest.mjs - checksum: 10c0/b913cd32032c95f29ff08c931f4b4c6fd6d2da498908d6770952c561a1b8d75c62499a1f04cadf82fb89cc0f9a33f29fb5dfdb899f6dbb27686a9d91571be5fa - languageName: node - linkType: hard - "vm-browserify@npm:^1.0.1": version: 1.1.2 resolution: "vm-browserify@npm:1.1.2" @@ -7273,18 +6396,6 @@ __metadata: languageName: node linkType: hard -"why-is-node-running@npm:^2.3.0": - version: 2.3.0 - resolution: "why-is-node-running@npm:2.3.0" - dependencies: - siginfo: "npm:^2.0.0" - stackback: "npm:0.0.2" - bin: - why-is-node-running: cli.js - checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 - languageName: node - linkType: hard - "word-wrap@npm:^1.2.5": version: 1.2.5 resolution: "word-wrap@npm:1.2.5"