diff --git a/apps/server-nestjs/.env-example b/apps/server-nestjs/.env-example
new file mode 100644
index 000000000..84236efbe
--- /dev/null
+++ b/apps/server-nestjs/.env-example
@@ -0,0 +1,18 @@
+DEV_SETUP="true"
+NODE_ENV=development
+# HOME=/home/node
+SESSION_SECRET=a-very-strong-secret-with-more-than-32-char
+KEYCLOAK_DOMAIN=localhost:8090
+KEYCLOAK_REALM=cloud-pi-native
+KEYCLOAK_PROTOCOL=http
+KEYCLOAK_CLIENT_ID=dso-console-backend
+KEYCLOAK_CLIENT_SECRET=client-secret-backend
+KEYCLOAK_REDIRECT_URI=http://localhost:8080
+SERVER_PORT=4000
+DB_URL=postgresql://admin:admin@localhost:5432/dso-console-db?schema=public
+CONTACT_EMAIL=cloudpinative-relations@interieur.gouv.fr
+
+# Configuration OpenCDS
+OPENCDS_URL=
+OPENCDS_API_TOKEN=token
+OPENCDS_API_TLS_REJECT_UNAUTHORIZED=true
diff --git a/apps/server-nestjs/.env.docker-example b/apps/server-nestjs/.env.docker-example
new file mode 100644
index 000000000..0da54a8e4
--- /dev/null
+++ b/apps/server-nestjs/.env.docker-example
@@ -0,0 +1,13 @@
+DOCKER=true
+DEV_SETUP="true"
+NODE_ENV=development
+SESSION_SECRET=a-very-strong-secret-with-more-than-32-char
+KEYCLOAK_DOMAIN=keycloak:8080
+KEYCLOAK_REALM=cloud-pi-native
+KEYCLOAK_PROTOCOL=http
+KEYCLOAK_CLIENT_ID=dso-console-backend
+KEYCLOAK_CLIENT_SECRET=client-secret-backend
+KEYCLOAK_REDIRECT_URI=http://localhost:8080
+SERVER_PORT=8080
+DB_URL=postgresql://admin:admin@postgres:5432/dso-console-db?schema=public
+CONTACT_EMAIL=cloudpinative-relations@interieur.gouv.fr
diff --git a/apps/server-nestjs/.env.integ-example b/apps/server-nestjs/.env.integ-example
new file mode 100644
index 000000000..33e23e778
--- /dev/null
+++ b/apps/server-nestjs/.env.integ-example
@@ -0,0 +1,43 @@
+DEV_SETUP="false"
+INTEGRATION=true
+KEYCLOAK_PROTOCOL=https
+KEYCLOAK_CLIENT_ID=
+KEYCLOAK_CLIENT_SECRET=
+KEYCLOAK_DOMAIN=
+KEYCLOAK_REALM=
+ARGO_NAMESPACE=
+ARGOCD_URL=
+GITLAB_TOKEN=
+GITLAB_URL=
+HARBOR_ADMIN=
+HARBOR_ADMIN_PASSWORD=
+HARBOR_URL=
+KEYCLOAK_ADMIN=
+KEYCLOAK_ADMIN_PASSWORD=
+KEYCLOAK_URL=
+NEXUS_ADMIN=
+NEXUS_ADMIN_PASSWORD=
+NEXUS_URL=
+PROJECTS_ROOT_DIR=
+SONAR_API_TOKEN=
+SONARQUBE_URL=
+VAULT_TOKEN=
+VAULT_URL=
+
+KUBECONFIG_HOST_PATH=
+KUBECONFIG_PATH=$HOME/.kube/config
+KUBECONFIG_CTX=
+
+EXTERNAL_PLUGINS_DIR_HOST_PATH=/path/to/plugins
+
+# Variables de plugins externes
+
+# GRAVITEE_APIM_API_ID=
+# GRAVITEE_APIM_PLAN_ID=
+# GRAVITEE_APIM_TOKEN=
+# GRAVITEE_APIM_URL=
+# GRAVITEE_GATEWAY_URL=
+
+# HTTP_PROXY=
+# HTTPS_PROXY=
+# NO_PROXY=
diff --git a/apps/server-nestjs/.gitignore b/apps/server-nestjs/.gitignore
new file mode 100644
index 000000000..4b56acfbe
--- /dev/null
+++ b/apps/server-nestjs/.gitignore
@@ -0,0 +1,56 @@
+# compiled output
+/dist
+/node_modules
+/build
+
+# Logs
+logs
+*.log
+npm-debug.log*
+pnpm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+lerna-debug.log*
+
+# OS
+.DS_Store
+
+# Tests
+/coverage
+/.nyc_output
+
+# IDEs and editors
+/.idea
+.project
+.classpath
+.c9/
+*.launch
+.settings/
+*.sublime-workspace
+
+# IDE - VSCode
+.vscode/*
+!.vscode/settings.json
+!.vscode/tasks.json
+!.vscode/launch.json
+!.vscode/extensions.json
+
+# dotenv environment variable files
+.env
+.env.development.local
+.env.test.local
+.env.production.local
+.env.local
+
+# temp directory
+.temp
+.tmp
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Diagnostic reports (https://nodejs.org/api/report.html)
+report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
diff --git a/apps/server-nestjs/.prettierrc b/apps/server-nestjs/.prettierrc
new file mode 100644
index 000000000..8deec5d94
--- /dev/null
+++ b/apps/server-nestjs/.prettierrc
@@ -0,0 +1,12 @@
+{
+ "plugins": ["@trivago/prettier-plugin-sort-imports"],
+ "importOrderParserPlugins": ["typescript", "decorators"],
+ "importOrder": ["^@core/(.*)$", "^@server/(.*)$", "^@ui/(.*)$", "^[./]"],
+ "importOrderSeparation": true,
+ "importOrderSortSpecifiers": true,
+ "printWidth": 80,
+ "semi": true,
+ "singleQuote": true,
+ "tabWidth": 4,
+ "trailingComma": "all"
+}
diff --git a/apps/server-nestjs/README.md b/apps/server-nestjs/README.md
new file mode 100644
index 000000000..5fbfdeaf8
--- /dev/null
+++ b/apps/server-nestjs/README.md
@@ -0,0 +1,444 @@
+# À propos
+
+Ce dossier contient une nouvelle version de `server`, basée sur NestJS.
+
+## Objectifs
+
+Rappel : L'objectif principal de cette démarche est de préparer l'extraction de
+chaque "plugin" en tant que module NestJS incluant à la fois la partie Front et
+la partie Backend pour une meilleure composition de la Console.
+
+On va profiter de cette vision pour passer, côté `server` d'un "Back For
+Front", à un backend qui va gérer à la fois le Front et le Back de différentes
+fonctionnalités (appelée "Plugins"), et ce parfois de manière dynamique (mais
+déjà en statique, ce sera pas mal 😅).
+
+
+## Conséquences pour apps/server
+
+On va donc passer de ça :
+
+```mermaid
+flowchart TD
+
+ %% --- Top-level ---
+ NestJS["Nest.js"]
+ FutursModules["Futurs modules
Nest.js correctement
découpés..."]
+ MainModule["MainModule"]
+
+ NestJS --> MainModule
+ MainModule --> CPinModule
+ MainModule -.-> FutursModules
+
+ CPinModule["CPinModule
(Contient TOUT le code actuel de 'server')"]
+
+ %% --- Core services ---
+ ConnectionService["ConnectionService"]
+ LoggerService["LoggerService"]
+ FastifyService["FastifyService"]
+ ServerService["ServerService"]
+ AppService["AppService"]
+ ResourceService["ResourceService"]
+ PrepareAppService["PrepareAppService"]
+ InitDbService["InitDbService"]
+ PluginService["PluginService"]
+
+ %% --- Router services ---
+ AdminRoleRouterService["AdminRoleRouterService"]
+ AdminTokenRouterService["AdminTokenRouterService"]
+ ClusterRouterService["ClusterRouterService"]
+ OtherRouterService["...RouterService"]
+
+ %% --- External services ---
+ Gitlab["Gitlab"]
+ ArgoCD["ArgoCD"]
+ Dots["..."]
+
+ %% --- CPinModule connections ---
+ CPinModule --> ConnectionService
+ CPinModule --> AppService
+ CPinModule --> LoggerService
+ CPinModule --> FastifyService
+ CPinModule --> ServerService
+ CPinModule --> ResourceService
+ CPinModule --> PrepareAppService
+
+ %% --- AppService central connections ---
+ ConnectionService --> AppService
+ LoggerService --> AppService
+ FastifyService --> AppService
+ ServerService --> AppService
+
+ AppService --> ResourceService
+ AppService --> PrepareAppService
+ AppService --> ServerService
+ AppService --> FastifyService
+ AppService --> LoggerService
+ AppService --> ConnectionService
+
+ %% --- ResourceService to routers ---
+ ResourceService --> AdminRoleRouterService
+ ResourceService --> AdminTokenRouterService
+ ResourceService --> ClusterRouterService
+ ResourceService --> OtherRouterService
+
+ %% --- PrepareAppService ---
+ PrepareAppService --> InitDbService
+ PrepareAppService --> PluginService
+ PrepareAppService --> ServerService
+
+ %% --- PluginService external interactions ---
+ PluginService --> Gitlab
+ PluginService --> ArgoCD
+ PluginService --> Dots
+
+ %% --- Bounding box (visual grouping only) ---
+ subgraph CPinBlock[" "]
+ CPinModule
+ ConnectionService
+ LoggerService
+ FastifyService
+ ServerService
+ AppService
+ ResourceService
+ PrepareAppService
+ InitDbService
+ PluginService
+ AdminRoleRouterService
+ AdminTokenRouterService
+ ClusterRouterService
+ OtherRouterService
+ end
+```
+
+à ça :
+
+```mermaid
+flowchart TD
+
+ %% --- Top-level Nest module ---
+ NestJS["Point d'entrée de NestJS"]
+ MainModule["MainModule"]
+ CPinModule["CPinModule"]
+ FutursModules["Futurs modules
NestJS correctement
découpés..."]
+
+ NestJS --> MainModule
+ MainModule --> CPinModule
+ MainModule -.-> FutursModules
+
+ %% --- Layering for clarity ---
+ subgraph LayerInit["Initialisation de l'application"]
+ ApplicationInitializationService["ApplicationInitializationService"]
+ DatabaseInitializationService["DatabaseInitializationService"]
+ PluginManagementService["PluginManagementService"]
+ end
+
+ subgraph LayerCore["Coeur de l'application"]
+ AppService["AppService"]
+ RouterService["RouterService"]
+ ServerService["ServerService"]
+ end
+
+ subgraph LayerInfra["Couche Infrastructure"]
+ LoggerService["LoggerService"]
+ ConfigurationService["ConfigurationService"]
+ DatabaseService["DatabaseService"]
+ FastifyService["FastifyService"]
+ HTTPClientService["HTTPClientService"]
+ end
+
+ OtherAPIService["APIs externes(par ex. OpenCDS)"]
+ HTTPClientService --> OtherAPIService
+
+ subgraph LayerBusiness["Modules métiers"]
+ subgraph AdminRole["Admin Roles"]
+ AdminRoleRouterService["AdminRoleRouterService"]
+ AdminRoleBusinessService["AdminRoleBusinessService"]
+ AdminRoleDTOService["AdminRoleDTOService"]
+ AdminRoleRouterService --> AdminRoleBusinessService
+ AdminRoleRouterService --> LoggerService
+ AdminRoleBusinessService --> AdminRoleDTOService
+ AdminRoleBusinessService --> LoggerService
+ AdminRoleDTOService --> LoggerService
+ AdminRoleDTOService --> DatabaseService
+ end
+ subgraph AdminToken["Admin Tokens"]
+ AdminTokenRouterService["AdminTokenRouterService"]
+ AdminTokenBusinessService["AdminTokenBusinessService"]
+ AdminTokenDTOService["AdminTokenDTOService"]
+ AdminTokenRouterService --> AdminTokenBusinessService
+ AdminTokenRouterService --> LoggerService
+ AdminTokenBusinessService --> AdminTokenDTOService
+ AdminTokenBusinessService --> LoggerService
+ AdminTokenDTOService --> DatabaseService
+ AdminTokenDTOService --> LoggerService
+ end
+ subgraph ServiceChain["Service chains"]
+ ServiceChainRouterService["ServiceChainRouterService"]
+ ServiceChainBusinessService["ServiceChainBusinessService"]
+ ServiceChainRouterService --> ServiceChainBusinessService
+ ServiceChainRouterService --> LoggerService
+ ServiceChainBusinessService --> HTTPClientService
+ ServiceChainBusinessService --> LoggerService
+
+ end
+ subgraph Cluster["Clusters"]
+ ClusterRouterService["ClusterRouterService"]
+ ClusterBusinessService["ClusterBusinessService"]
+ ClusterDTOService["ClusterDTOService"]
+ ClusterRouterService --> ClusterBusinessService
+ ClusterRouterService --> LoggerService
+ ClusterBusinessService --> ClusterDTOService
+ ClusterBusinessService --> LoggerService
+ ClusterDTOService --> DatabaseService
+ ClusterDTOService --> LoggerService
+ end
+ OtherBusinessModules["...Other Business Modules"]
+ end
+
+ RouterService --> AdminRoleRouterService
+ RouterService --> AdminTokenRouterService
+ RouterService --> ClusterRouterService
+ RouterService --> ServiceChainRouterService
+ RouterService --> OtherBusinessModules
+ RouterService --> LoggerService
+
+ subgraph LayerPlugins["Plugins compatibles CPiN"]
+ Gitlab["Gitlab"]
+ ArgoCD["ArgoCD"]
+ Kubernetes["Kubernetes"]
+ Dots["..."]
+ end
+
+ %% --- Module wiring ---
+ CPinModule --> ApplicationInitializationService
+
+ %% Application initialization
+ ApplicationInitializationService --> LoggerService
+ ApplicationInitializationService --> ConfigurationService
+ ApplicationInitializationService --> FastifyService
+ ApplicationInitializationService --> AppService
+ ApplicationInitializationService --> DatabaseInitializationService
+ DatabaseInitializationService --> DatabaseService
+ DatabaseInitializationService --> LoggerService
+ ApplicationInitializationService --> PluginManagementService
+ ApplicationInitializationService --> LoggerService
+
+ %% App Core internal flow
+ AppService --> RouterService
+ AppService --> ServerService
+ AppService --> LoggerService
+ ServerService --> LoggerService
+
+ %% Plugin Management
+ PluginManagementService --> Gitlab
+ PluginManagementService --> ArgoCD
+ PluginManagementService --> Kubernetes
+ PluginManagementService --> Dots
+ PluginManagementService --> LoggerService
+ Gitlab --> LoggerService
+ ArgoCD --> LoggerService
+ Kubernetes --> LoggerService
+ Dots --> LoggerService
+```
+
+et enfin à ça :
+
+```mermaid
+flowchart TD
+
+ %% --- Top-level Nest module ---
+ NestJS["Point d'entrée de NestJS"]
+ MainModule["MainModule"]
+
+ NestJS --> MainModule
+
+ subgraph CoreModule["CoreModule"]
+ ApplicationInitializationService["ApplicationInitializationService"]
+ end
+
+ subgraph InfrastructureModule["InfrastructureModule"]
+ LoggerService["LoggerService"]
+ ConfigurationService["ConfigurationService"]
+ DatabaseService["DatabaseService"]
+ HTTPClientService["HTTPClientService"]
+ end
+
+ OtherAPIService["APIs externes(par ex. OpenCDS)"]
+ HTTPClientService --> OtherAPIService
+
+ subgraph MandatoryModules["Modules obligatoires CPiN"]
+ subgraph GitlabModule["GitlabModule"]
+ GitlabController["GitlabController"]
+ GitlabBusinessService["GitlabBusinessService"]
+ GitlabDTOService["GitlabDTOService"]
+ GitlabController --> GitlabBusinessService
+ GitlabController --> LoggerService
+ GitlabBusinessService --> GitlabDTOService
+ GitlabBusinessService --> LoggerService
+ GitlabDTOService --> DatabaseService
+ GitlabDTOService --> LoggerService
+ end
+
+ subgraph ArgoCDModule["ArgoCDModule"]
+ ArgoCDController["ArgoCDController"]
+ ArgoCDBusinessService["ArgoCDBusinessService"]
+ ArgoCDDTOService["ArgoCDDTOService"]
+ ArgoCDController --> ArgoCDBusinessService
+ ArgoCDController --> LoggerService
+ ArgoCDBusinessService --> ArgoCDDTOService
+ ArgoCDBusinessService --> LoggerService
+ ArgoCDDTOService --> DatabaseService
+ ArgoCDDTOService --> LoggerService
+ end
+
+ subgraph KubernetesModule["KubernetesModule"]
+ KubernetesController["KubernetesController"]
+ KubernetesBusinessService["KubernetesBusinessService"]
+ KubernetesDTOService["KubernetesDTOService"]
+ KubernetesController --> KubernetesBusinessService
+ KubernetesController --> LoggerService
+ KubernetesBusinessService --> KubernetesDTOService
+ KubernetesBusinessService --> LoggerService
+ KubernetesDTOService --> DatabaseService
+ KubernetesDTOService --> LoggerService
+ end
+
+ subgraph AdminRoleModule["AdminRoleModule"]
+ AdminRoleController["AdminRoleController"]
+ AdminRoleBusinessService["AdminRoleBusinessService"]
+ AdminRoleDTOService["AdminRoleDTOService"]
+ AdminRoleController --> AdminRoleBusinessService
+ AdminRoleController --> LoggerService
+ AdminRoleBusinessService --> AdminRoleDTOService
+ AdminRoleBusinessService --> LoggerService
+ AdminRoleDTOService --> LoggerService
+ AdminRoleDTOService --> DatabaseService
+ end
+
+ subgraph AdminTokenModule["AdminTokenModule"]
+ AdminTokenController["AdminTokenController"]
+ AdminTokenBusinessService["AdminTokenBusinessService"]
+ AdminTokenDTOService["AdminTokenDTOService"]
+ AdminTokenController --> AdminTokenBusinessService
+ AdminTokenController --> LoggerService
+ AdminTokenBusinessService --> AdminTokenDTOService
+ AdminTokenBusinessService --> LoggerService
+ AdminTokenDTOService --> DatabaseService
+ AdminTokenDTOService --> LoggerService
+ end
+
+ subgraph ClusterModule["ClusterModule"]
+ ClusterController["ClusterController"]
+ ClusterBusinessService["ClusterBusinessService"]
+ ClusterDTOService["ClusterDTOService"]
+ ClusterController --> ClusterBusinessService
+ ClusterController --> LoggerService
+ ClusterBusinessService --> ClusterDTOService
+ ClusterBusinessService --> LoggerService
+ ClusterDTOService --> DatabaseService
+ ClusterDTOService --> LoggerService
+ end
+ OtherBusinessModules["...Other Business Modules"]
+ end
+
+ CoreModule --> GitlabModule
+ CoreModule --> ArgoCDModule
+ CoreModule --> KubernetesModule
+ CoreModule --> AdminRoleModule
+ CoreModule --> AdminTokenModule
+ CoreModule --> ClusterModule
+
+ subgraph ThirdPartyModules["Modules optionnels de CPin"]
+ subgraph ServiceChainModule["ServiceChainModule"]
+ ServiceChainController["ServiceChainController"]
+ ServiceChainBusinessService["ServiceChainBusinessService"]
+ ServiceChainController --> ServiceChainBusinessService
+ ServiceChainController --> LoggerService
+ ServiceChainBusinessService --> HTTPClientService
+ ServiceChainBusinessService --> LoggerService
+ end
+ end
+
+ CoreModule --> ServiceChainModule
+
+ %% --- Module wiring ---
+ MainModule --> ApplicationInitializationService
+
+ %% Application initialization
+ ApplicationInitializationService --> LoggerService
+ ApplicationInitializationService --> ConfigurationService
+ ApplicationInitializationService --> LoggerService
+```
+
+Pour mettre à jour `old-server` (après avoir rebasé sur `origin/master`, par exemple) :
+
+```bash
+server-nestjs/$ rm -rf src/cpin-module/old-server
+server-nestjs/$ cp -r ../server src/cpin-module/old-server
+server-nestjs/$ find src/cpin-module/old-server -type f -iname "*.ts" -exec sed -i -e "s#@/#@old-server/#g" {} \;
+server-nestjs/$ find src/cpin-module/old-server -type f -iname "*.ts" -exec sed -i -e "s#\.[jt]s'#'#g" {} \;
+```
+
+## Fichiers à supprimer dans le futur
+
+Certains fichiers de `old-server` servait de "framework" pour le backend, et
+vont donc être réécrits en tant que modules/services NestJS. On va garder la
+liste ici, ce qui permettra de ne pas être constamment en conflit sur le code
+de `server`. En attendant de pouvoir s'en débarrasser, et afin de s'assurer que
+leur code n'est pas utilisé dans d'autres parties du backend, on va commenter
+l'intégralité de ces fichiers (comme ça pas d'erreur d'import quand on les
+supprimera).
+
+
+Voilà donc la liste des fichiers "dépréciés" :
+
+```
+old-server/src/app.ts -> Réécrit en AppService
+old-server/src/connect.ts -> Réécrit en DatabaseService
+old-server/src/init/db/* (à part dump.ts) -> Réécrit en DatabaseInitializationService
+old-server/src/resources/**/router.ts -> Réécrit en **RouterService
+old-server/src/resources/index.ts -> Réécrit en RouterService
+old-server/src/server.ts -> Intégré à ApplicationInitializationService
+old-server/src/utils/env.ts -> Réécrit en ConfigurationModule
+old-server/src/utils/fastify.ts -> Réécrit en FastifyService
+old-server/src/utils/keycloak-utils.ts -> Intégré dans AppService
+old-server/src/utils/keycloak.ts -> Intégré dans AppService
+old-server/src/utils/logger.ts -> Réécrit en LoggerModule
+old-server/src/utils/plugin.ts -> Réécrit en PluginManagementService
+```
+
+## Prochaines itérations sur le sujet
+
+Tâches à réaliser par la suite dans d'autres itérations/tickets/etc. :
+
+- Migrer une fonctionnalité "verticale" complète (Route, Contract, Controller,
+ Business, Queries, Prisma schema) dans son propre module NestJS qui sera
+ importé dans `MainModule` (et pas dans `CpinModule` qui devra disparaître
+ à terme).
+- Définir la liste de ces fonctionnalités verticales, et planifier l'extraction
+ de certaines d'entre elles (OpenCDS, typiquement, qui n'a rien à faire dans
+ le code de base de la Console)
+- Migrer la base actuelle de NestJS de Jest vers Vitest et s'assurer que les
+ tests unitaires passent à nouveaux (attention, certains d'entre eux devront
+ être adaptés vu qu'on a commencé à réécrire du code au standard NestJS)
+- Intérgrer `server-nestjs` dans tous les `docker compose` et les différents
+ scripts PNPM/Bash qui font tout le sel de nos process de dev
+- Revoir les imports de données (le fameux `dump.ts`). C'était déjà une
+ mauvaise idée à l'époque, ça l'est encore plus aujourd'hui. On ferait mieux
+ d'utiliser un side-container pour ça
+- Être capable de déployer `server-nestjs` en parallèle de `server`, avec
+ probablement un reverse proxy dédié à la migration des routes de l'ancien
+ vers le nouveau (à rediscuter plus concrètement)
+
+Les étapes d'après-après (quand on sera sereins sur la migration de `server`
+vers `server-nestjs`) :
+
+- Tester les capacités de NestJS SSR (Server Side Rendering), notamment
+ vis-à-vis de nos composants VueJS. Il y aura probablement des sujets autour
+ de l'isolation du code VueJS des différentes fonctionnalités afin de
+ faciliter leur extraction de `client` vers `server`
+- Implémenter une fonctionnalité du Front en tant que module NestJS SSR
+ (OpenCDS est un très bon cas d'étude grâce à son côté très isolé dans le
+ code). Idéalement ce code "Front" ajouté "côté Backend" devra être colocalisé
+ avec le code "Backend" correspondant.
diff --git a/apps/server-nestjs/eslint.config.mjs b/apps/server-nestjs/eslint.config.mjs
new file mode 100644
index 000000000..5a664d2b5
--- /dev/null
+++ b/apps/server-nestjs/eslint.config.mjs
@@ -0,0 +1,3 @@
+import eslintConfigBase from '@cpn-console/eslint-config'
+
+export default eslintConfigBase
diff --git a/apps/server-nestjs/nest-cli.json b/apps/server-nestjs/nest-cli.json
new file mode 100644
index 000000000..f9aa683b1
--- /dev/null
+++ b/apps/server-nestjs/nest-cli.json
@@ -0,0 +1,8 @@
+{
+ "$schema": "https://json.schemastore.org/nest-cli",
+ "collection": "@nestjs/schematics",
+ "sourceRoot": "src",
+ "compilerOptions": {
+ "deleteOutDir": true
+ }
+}
diff --git a/apps/server-nestjs/package.json b/apps/server-nestjs/package.json
new file mode 100644
index 000000000..bd0ae1726
--- /dev/null
+++ b/apps/server-nestjs/package.json
@@ -0,0 +1,117 @@
+{
+ "name": "server-nestjs",
+ "version": "0.0.1",
+ "description": "",
+ "author": "",
+ "private": true,
+ "license": "UNLICENSED",
+ "scripts": {
+ "build": "nest build",
+ "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
+ "start": "nest start",
+ "start:dev": "nest start --watch",
+ "start:debug": "nest start --debug --watch",
+ "start:prod": "node dist/main",
+ "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix"
+ },
+ "dependencies": {
+ "@cpn-console/argocd-plugin": "workspace:^",
+ "@cpn-console/gitlab-plugin": "workspace:^",
+ "@cpn-console/harbor-plugin": "workspace:^",
+ "@cpn-console/hooks": "workspace:^",
+ "@cpn-console/keycloak-plugin": "workspace:^",
+ "@cpn-console/kubernetes-plugin": "workspace:^",
+ "@cpn-console/nexus-plugin": "workspace:^",
+ "@cpn-console/shared": "workspace:^",
+ "@cpn-console/sonarqube-plugin": "workspace:^",
+ "@cpn-console/vault-plugin": "workspace:^",
+ "@fastify/cookie": "^9.4.0",
+ "@fastify/helmet": "^11.1.1",
+ "@fastify/session": "^10.9.0",
+ "@fastify/swagger": "^8.15.0",
+ "@fastify/swagger-ui": "^4.2.0",
+ "@gitbeaker/core": "^40.6.0",
+ "@gitbeaker/rest": "^40.6.0",
+ "@kubernetes-models/argo-cd": "^2.6.2",
+ "@kubernetes/client-node": "^0.22.3",
+ "@nestjs/common": "^11.0.1",
+ "@nestjs/config": "^4.0.2",
+ "@nestjs/core": "^11.0.1",
+ "@nestjs/platform-express": "^11.0.1",
+ "@prisma/client": "^6.0.1",
+ "@ts-rest/core": "^3.52.1",
+ "@ts-rest/fastify": "^3.52.1",
+ "@ts-rest/open-api": "^3.52.1",
+ "axios": "1.12.2",
+ "date-fns": "^4.1.0",
+ "dotenv": "^16.4.7",
+ "fastify": "^4.29.1",
+ "fastify-keycloak-adapter": "2.3.2",
+ "json-2-csv": "^5.5.7",
+ "mustache": "^4.2.0",
+ "nestjs-pino": "^4.5.0",
+ "pino-http": "^11.0.0",
+ "prisma": "^6.0.1",
+ "reflect-metadata": "^0.2.2",
+ "rxjs": "^7.8.1",
+ "undici": "^7.1.0",
+ "vitest-mock-extended": "^2.0.2"
+ },
+ "devDependencies": {
+ "@cpn-console/eslint-config": "workspace:^",
+ "@cpn-console/test-utils": "workspace:^",
+ "@cpn-console/ts-config": "workspace:^",
+ "@eslint/eslintrc": "^3.2.0",
+ "@eslint/js": "^9.18.0",
+ "@faker-js/faker": "^9.3.0",
+ "@nestjs/cli": "^11.0.0",
+ "@nestjs/schematics": "^11.0.0",
+ "@nestjs/testing": "^11.0.1",
+ "@trivago/prettier-plugin-sort-imports": "^6.0.0",
+ "@types/express": "^5.0.0",
+ "@types/jest": "^30.0.0",
+ "@types/node": "^22.10.7",
+ "@types/supertest": "^6.0.2",
+ "@vitest/coverage-v8": "^2.1.8",
+ "eslint": "^9.18.0",
+ "eslint-config-prettier": "^10.0.1",
+ "eslint-plugin-prettier": "^5.2.2",
+ "fastify-plugin": "^5.0.1",
+ "globals": "^16.0.0",
+ "jest": "^30.0.0",
+ "nodemon": "^3.1.7",
+ "pino-pretty": "^13.0.0",
+ "prettier": "^3.4.2",
+ "rimraf": "^6.0.1",
+ "source-map-support": "^0.5.21",
+ "supertest": "^7.0.0",
+ "ts-jest": "^29.2.5",
+ "ts-loader": "^9.5.2",
+ "ts-node": "^10.9.2",
+ "ts-patch": "^3.3.0",
+ "tsconfig-paths": "^4.2.0",
+ "typescript": "^5.7.3",
+ "typescript-eslint": "^8.20.0",
+ "typescript-transform-paths": "^3.5.2",
+ "vite": "^7.2.1",
+ "vite-node": "^2.1.8",
+ "vitest": "^2.1.8"
+ },
+ "jest": {
+ "moduleFileExtensions": [
+ "js",
+ "json",
+ "ts"
+ ],
+ "rootDir": "src",
+ "testRegex": ".*\\.spec\\.ts$",
+ "transform": {
+ "^.+\\.(t|j)s$": "ts-jest"
+ },
+ "collectCoverageFrom": [
+ "**/*.(t|j)s"
+ ],
+ "coverageDirectory": "../coverage",
+ "testEnvironment": "node"
+ }
+}
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization-service/application-initialization.service.spec.ts b/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization-service/application-initialization.service.spec.ts
new file mode 100644
index 000000000..3ef55fb0c
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization-service/application-initialization.service.spec.ts
@@ -0,0 +1,22 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { ApplicationInitializationService } from './application-initialization.service';
+
+describe('applicationInitializationServiceService', () => {
+ let service: ApplicationInitializationService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [ApplicationInitializationService],
+ }).compile();
+
+ service = module.get(
+ ApplicationInitializationService,
+ );
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization-service/application-initialization.service.ts b/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization-service/application-initialization.service.ts
new file mode 100644
index 000000000..15f3d99b2
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization-service/application-initialization.service.ts
@@ -0,0 +1,120 @@
+import { ConfigurationService } from '@/cpin-module/infrastructure/configuration/configuration.service';
+import { DatabaseService } from '@/cpin-module/infrastructure/database/database.service';
+import { Injectable, Logger } from '@nestjs/common';
+import { rm } from 'node:fs/promises';
+import { resolve } from 'node:path';
+
+import { DatabaseInitializationService } from '../database-initialization/database-initialization.service';
+import { PluginManagementService } from '../plugin-management/plugin-management.service';
+
+@Injectable()
+export class ApplicationInitializationService {
+ private readonly logger = new Logger(ApplicationInitializationService.name);
+ constructor(
+ private readonly configurationService: ConfigurationService,
+ private readonly pluginManagementService: PluginManagementService,
+ private readonly databaseInitializationService: DatabaseInitializationService,
+ private readonly databaseService: DatabaseService,
+ ) {
+ this.handleExit();
+ }
+
+ async setUpHTTPProxy() {
+ // Workaround because fetch isn't using http_proxy variables
+ // See. https://github.com/gajus/global-agent/issues/52#issuecomment-1134525621
+ if (process.env.HTTP_PROXY) {
+ const Undici = await import('undici');
+ const ProxyAgent = Undici.ProxyAgent;
+ const setGlobalDispatcher = Undici.setGlobalDispatcher;
+ setGlobalDispatcher(new ProxyAgent(process.env.HTTP_PROXY));
+ }
+ }
+
+ async injectDataInDatabase(path: string) {
+ this.logger.log('Starting init DB...');
+ const { data } = await import(path);
+ await this.databaseInitializationService.initDb(data);
+ this.logger.log('initDb invoked successfully');
+ }
+
+ async initApp() {
+ try {
+ await this.databaseService.getConnection();
+ } catch (error) {
+ this.logger.error(error.message);
+ throw error;
+ }
+
+ this.pluginManagementService.initPm();
+
+ this.logger.log('Reading init database file');
+
+ try {
+ const dataPath =
+ this.configurationService.isProd ||
+ this.configurationService.isInt
+ ? './init/db/imports/data'
+ : '@cpn-console/test-utils/src/imports/data';
+ await this.injectDataInDatabase(dataPath);
+ if (
+ this.configurationService.isProd &&
+ !this.configurationService.isDevSetup
+ ) {
+ this.logger.log('Cleaning up imported data file...');
+ await rm(resolve(__dirname, dataPath));
+ this.logger.log(`Successfully deleted '${dataPath}'`);
+ }
+ } catch (error) {
+ if (
+ error.code === 'ERR_MODULE_NOT_FOUND' ||
+ error.message.includes('Failed to load') ||
+ error.message.includes('Cannot find module')
+ ) {
+ this.logger.log('No initDb file, skipping');
+ } else {
+ this.logger.warn(error.message);
+ throw error;
+ }
+ }
+
+ this.logger.debug({
+ isDev: this.configurationService.isDev,
+ isTest: this.configurationService.isTest,
+ isCI: this.configurationService.isCI,
+ isDevSetup: this.configurationService.isDevSetup,
+ isProd: this.configurationService.isProd,
+ });
+ }
+
+ async exitGracefully(error?: Error) {
+ if (error instanceof Error) {
+ this.logger.fatal(error);
+ }
+ // @TODO Determine if it is necessary, or if we would rather plug ourselves
+ // onto NestJS lifecycle, or even if all this is actually necessary
+ // at all anymore
+ //
+ // await app.close();
+
+ this.logger.log('Closing connections...');
+ await this.databaseService.closeConnections();
+ this.logger.log('Exiting...');
+ process.exit(error instanceof Error ? 1 : 0);
+ }
+
+ logExitCode(code: number) {
+ this.logger.warn(`received signal: ${code}`);
+ }
+
+ logUnhandledRejection(reason: unknown, promise: Promise) {
+ this.logger.error({ message: 'Unhandled Rejection', promise, reason });
+ }
+
+ handleExit() {
+ process.on('exit', this.logExitCode);
+ process.on('SIGINT', this.exitGracefully);
+ process.on('SIGTERM', this.exitGracefully);
+ process.on('uncaughtException', this.exitGracefully);
+ process.on('unhandledRejection', this.logUnhandledRejection);
+ }
+}
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization.module.ts b/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization.module.ts
new file mode 100644
index 000000000..f8405b2c2
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/application-initialization.module.ts
@@ -0,0 +1,18 @@
+import { Module } from '@nestjs/common';
+
+import { ConfigurationModule } from '../infrastructure/configuration/configuration.module';
+import { InfrastructureModule } from '../infrastructure/infrastructure.module';
+import { ApplicationInitializationService } from './application-initialization-service/application-initialization.service';
+import { DatabaseInitializationService } from './database-initialization/database-initialization.service';
+import { PluginManagementService } from './plugin-management/plugin-management.service';
+
+@Module({
+ imports: [ConfigurationModule, InfrastructureModule],
+ providers: [
+ ApplicationInitializationService,
+ DatabaseInitializationService,
+ PluginManagementService,
+ ],
+ exports: [ApplicationInitializationService],
+})
+export class ApplicationInitializationModule {}
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/database-initialization.service.spec.ts b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/database-initialization.service.spec.ts
new file mode 100644
index 000000000..b736d5163
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/database-initialization.service.spec.ts
@@ -0,0 +1,22 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { DatabaseInitializationService } from './database-initialization.service';
+
+describe('databaseInitializationService', () => {
+ let service: DatabaseInitializationService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [DatabaseInitializationService],
+ }).compile();
+
+ service = module.get(
+ DatabaseInitializationService,
+ );
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/database-initialization.service.ts b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/database-initialization.service.ts
new file mode 100644
index 000000000..14d3152d6
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/database-initialization.service.ts
@@ -0,0 +1,67 @@
+import prisma from '@/prisma';
+import { Injectable, Logger } from '@nestjs/common';
+
+import { modelKeys } from './utils';
+
+type ExtractKeysWithFields = {
+ [K in keyof T]: T[K] extends { fields: any } ? K : never;
+}[keyof T];
+
+type Models = ExtractKeysWithFields;
+
+type Imports = Partial> & {
+ associations: [Models, any[]];
+};
+
+@Injectable()
+export class DatabaseInitializationService {
+ private readonly loggerService = new Logger(
+ DatabaseInitializationService.name,
+ );
+
+ async initDb(data: Imports) {
+ const dataStringified = JSON.stringify(data);
+ const dataParsed = JSON.parse(dataStringified, (key, value) => {
+ try {
+ if (['permissions', 'everyonePerms'].includes(key)) {
+ return BigInt(value.slice(0, value.length - 1));
+ }
+ } catch (_error) {
+ return value;
+ }
+ return value;
+ });
+ this.loggerService.log('Drop tables');
+ for (const modelKey of modelKeys.toReversed()) {
+ // @ts-ignore
+ await prisma[modelKey].deleteMany();
+ }
+ this.loggerService.log('Import models');
+ for (const modelKey of modelKeys) {
+ // @ts-ignore
+ await prisma[modelKey].createMany({ data: dataParsed[modelKey] });
+ }
+ this.loggerService.log('Import associations');
+ for (const [modelKey, rows] of dataParsed.associations) {
+ for (const row of rows) {
+ const idKey = 'id';
+ const connectKeys = Object.keys(row).filter(
+ (key) => key !== idKey,
+ );
+ const dataConnects = connectKeys.reduce(
+ (acc, curr) => {
+ acc[curr] = { connect: row[curr] };
+ return acc;
+ },
+ {} as Record,
+ );
+ // @ts-ignore
+ await prisma[modelKey].update({
+ where: { id: row.id },
+ data: dataConnects,
+ });
+ }
+ }
+ this.loggerService.log('End import');
+ }
+}
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/utils.spec.ts b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/utils.spec.ts
new file mode 100644
index 000000000..50cce2c10
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/utils.spec.ts
@@ -0,0 +1,53 @@
+import { describe, expect, it, vi } from 'vitest';
+
+import prisma from '../../__mocks__/prisma';
+import { modelKeys, moveBefore, resourceListToDict } from './utils';
+
+vi.mock('fs', () => ({ writeFileSync: vi.fn() }));
+for (const modelKey of modelKeys) {
+ prisma[modelKey].findMany.mockResolvedValue([]);
+}
+
+describe('test moveBefore', () => {
+ it('should be moved', () => {
+ const arr = ['a', 'b', 'c'];
+ const arrSorted = moveBefore(arr, 'c', 'b');
+ expect(arrSorted).toEqual(['a', 'c', 'b']);
+
+ const arrSorted2 = moveBefore(arr, 'c', 'a');
+ expect(arrSorted2).toEqual(['c', 'a', 'b']);
+ });
+ it('should not be moved', () => {
+ const arr = ['a', 'b', 'c'];
+ const arrSorted = moveBefore(arr, 'b', 'c');
+ expect(arrSorted).toEqual(false);
+
+ const arrSorted2 = moveBefore(arr, 'a', 'c');
+ expect(arrSorted2).toEqual(false);
+
+ const arrSorted3 = moveBefore(arr, 'c', 'c');
+ expect(arrSorted3).toEqual(false);
+ });
+});
+
+it('test resourceListToDict (by name)', () => {
+ const list = [
+ { name: 'a', value: 1 },
+ { name: 'b', value: 2 },
+ { name: 'c', value: 3 },
+ ];
+ const dict = resourceListToDict(list);
+ expect(dict).toEqual({
+ a: { name: 'a', value: 1 },
+ b: { name: 'b', value: 2 },
+ c: { name: 'c', value: 3 },
+ });
+});
+
+it('stringify bigint', () => {
+ const list = { name: 'a', value: 1n };
+
+ const dict = JSON.stringify(list);
+
+ expect(dict).toEqual('{"name":"a","value":"1n"}');
+});
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/utils.ts b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/utils.ts
new file mode 100644
index 000000000..941a10fa3
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/database-initialization/utils.ts
@@ -0,0 +1,107 @@
+// @ts-nocheck
+import { Prisma } from '@prisma/client';
+
+// eslint-disable-next-line no-extend-native
+BigInt.prototype.toJSON = function () {
+ return `${this.toString()}n`;
+};
+
+export type ResourceByName<
+ T extends {
+ name: string;
+ },
+> = Record;
+export function resourceListToDict(
+ resList: Array,
+): ResourceByName {
+ return resList.reduce(
+ (acc, curr) => {
+ return {
+ ...acc,
+ [curr.name]: curr,
+ };
+ },
+ {} as ResourceByName,
+ );
+}
+
+// @ts-ignore
+const Models = resourceListToDict(Prisma.dmmf.datamodel.models);
+let ModelsNames = Object.keys(Models);
+let ModelsOrder = [...ModelsNames];
+
+export function moveBefore(
+ arr: T,
+ toMove: T[number],
+ ref: T[number],
+): T | false {
+ const iref = arr.indexOf(ref);
+ const moveref = arr.indexOf(toMove);
+ if (moveref <= iref) return false;
+ return [
+ ...arr.slice(0, iref),
+ arr[moveref],
+ ...arr.slice(iref, moveref),
+ ...arr.slice(moveref + 1),
+ ] as T;
+}
+
+export const manyToManyRelation: [string, string, string][] = [];
+function sort() {
+ let hasChanged = false;
+ for (const model of ModelsNames) {
+ for (const field of Models[model].fields) {
+ if (field.isId) Models[model].id = field.name;
+ if (field.type in Models) {
+ const relationField = Models[field.type].fields.find(
+ ({ type }) => type === model,
+ );
+ if (!relationField)
+ throw new Error('unable to find matching model');
+ if (
+ (relationField.isRequired &&
+ field.isRequired &&
+ !relationField.isList) ||
+ (relationField.isRequired && !field.isRequired)
+ ) {
+ const moveRes = moveBefore(ModelsOrder, model, field.type);
+ if (moveRes) {
+ hasChanged = true;
+ ModelsOrder = moveRes;
+ }
+ }
+ if (
+ field.isList &&
+ relationField.isList &&
+ !manyToManyRelation.find(
+ (test) =>
+ (test[0] === model && test[1] === field.type) ||
+ (test[0] === field.type && test[1] === model),
+ )
+ ) {
+ manyToManyRelation.push([model, field.type, field.name]);
+ }
+ }
+ }
+ }
+ ModelsNames = ModelsOrder;
+ if (hasChanged) sort();
+}
+
+sort();
+
+// special case to study
+const logUserCase = moveBefore(ModelsOrder, 'User', 'Log');
+if (logUserCase) {
+ ModelsOrder = logUserCase;
+}
+const logProjectCase = moveBefore(ModelsOrder, 'Project', 'Log');
+if (logProjectCase) {
+ ModelsOrder = logProjectCase;
+}
+
+export const models: Record = {};
+export const associations: Record = [];
+export const modelKeys = ModelsOrder.map(
+ (model) => model.slice(0, 1).toLocaleLowerCase() + model.slice(1),
+);
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/plugin-management/plugin-management.service.spec.ts b/apps/server-nestjs/src/cpin-module/application-initialization/plugin-management/plugin-management.service.spec.ts
new file mode 100644
index 000000000..f299b1df6
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/plugin-management/plugin-management.service.spec.ts
@@ -0,0 +1,20 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { PluginManagementService } from './plugin-management.service';
+
+describe('pluginManagementService', () => {
+ let service: PluginManagementService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [PluginManagementService],
+ }).compile();
+
+ service = module.get(PluginManagementService);
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/application-initialization/plugin-management/plugin-management.service.ts b/apps/server-nestjs/src/cpin-module/application-initialization/plugin-management/plugin-management.service.ts
new file mode 100644
index 000000000..600b14e8f
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/application-initialization/plugin-management/plugin-management.service.ts
@@ -0,0 +1,8 @@
+import { Injectable } from '@nestjs/common';
+
+@Injectable()
+export class PluginManagementService {
+ constructor() {}
+
+ async initPm() {}
+}
diff --git a/apps/server-nestjs/src/cpin-module/core/app/app.service.spec.ts b/apps/server-nestjs/src/cpin-module/core/app/app.service.spec.ts
new file mode 100644
index 000000000..0106edf11
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/core/app/app.service.spec.ts
@@ -0,0 +1,20 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { AppService } from './app.service';
+
+describe('appService', () => {
+ let service: AppService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [AppService],
+ }).compile();
+
+ service = module.get(AppService);
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/core/app/app.service.ts b/apps/server-nestjs/src/cpin-module/core/app/app.service.ts
new file mode 100644
index 000000000..7f5fa6b61
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/core/app/app.service.ts
@@ -0,0 +1,175 @@
+import { ConfigurationService } from '@/cpin-module/infrastructure/configuration/configuration.service';
+import {
+ apiPrefix,
+ getContract,
+ serviceContract,
+ swaggerUiPath,
+ systemContract,
+ tokenHeaderName,
+} from '@cpn-console/shared';
+import fastifyCookie from '@fastify/cookie';
+import helmet from '@fastify/helmet';
+import type {
+ FastifySessionObject,
+ FastifySessionOptions,
+} from '@fastify/session';
+import fastifySession from '@fastify/session';
+import fastifySwagger from '@fastify/swagger';
+import fastifySwaggerUi from '@fastify/swagger-ui';
+import { Injectable, Logger } from '@nestjs/common';
+import { generateOpenApi } from '@ts-rest/open-api';
+import fastify from 'fastify';
+import type { FastifyRequest } from 'fastify';
+import type { KeycloakOptions } from 'fastify-keycloak-adapter';
+import keycloak from 'fastify-keycloak-adapter';
+
+import { FastifyService } from '../fastify/fastify.service';
+
+interface KeycloakPayload {
+ sub: string;
+ email: string;
+ given_name: string;
+ family_name: string;
+ groups: string[];
+}
+
+interface FastifySessionObjectWithUser extends FastifySessionObject {
+ user: { id: string };
+}
+
+function userPayloadMapper(userPayload: KeycloakPayload) {
+ return {
+ id: userPayload.sub,
+ email: userPayload.email,
+ firstName: userPayload.given_name,
+ lastName: userPayload.family_name,
+ groups: userPayload.groups || [],
+ };
+}
+
+function bypassFn(request: FastifyRequest) {
+ try {
+ return !!request.headers[tokenHeaderName];
+ } catch (_e) {}
+ return false;
+}
+
+@Injectable()
+export class AppService {
+ private readonly loggerService = new Logger(AppService.name);
+
+ constructor(
+ private readonly configurationService: ConfigurationService,
+ private readonly fastifyService: FastifyService,
+ ) {
+ this.keycloakConf = {
+ appOrigin:
+ this.configurationService.keycloakRedirectUri ??
+ 'http://localhost:8080',
+ keycloakSubdomain: `${this.configurationService.keycloakDomain}/realms/${this.configurationService.keycloakRealm}`,
+ clientId: this.configurationService.keycloakClientId ?? '',
+ clientSecret: this.configurationService.keycloakClientSecret ?? '',
+ useHttps: this.configurationService.keycloakProtocol === 'https',
+ disableCookiePlugin: true,
+ disableSessionPlugin: true,
+ // @ts-ignore
+ userPayloadMapper,
+ retries: 5,
+ excludedPatterns: [
+ systemContract.getVersion.path,
+ systemContract.getHealth.path,
+ serviceContract.getServiceHealth.path,
+ `${swaggerUiPath}/**`,
+ ],
+ bypassFn,
+ };
+
+ this.sessionConf = {
+ cookieName: 'sessionId',
+ secret:
+ this.configurationService.sessionSecret ||
+ 'a-very-strong-secret-with-more-than-32-char',
+ cookie: {
+ httpOnly: true,
+ secure: true,
+ maxAge: 1_800_000,
+ },
+ };
+ }
+
+ keycloakConf!: KeycloakOptions;
+ sessionConf!: FastifySessionOptions;
+
+ async startApp() {
+ const openApiDocument = generateOpenApi(
+ await getContract(),
+ this.fastifyService.swaggerConf,
+ { setOperationId: true },
+ );
+
+ const app = fastify(this.fastifyService.fastifyConf)
+ .register(helmet, () => ({
+ contentSecurityPolicy: !(
+ this.configurationService.isInt ||
+ this.configurationService.isDev ||
+ this.configurationService.isTest
+ ),
+ }))
+ .register(fastifyCookie)
+ .register(fastifySession, this.sessionConf)
+ // @ts-ignore
+ .register(keycloak, this.keycloakConf)
+ .register(fastifySwagger, {
+ transformObject: () => openApiDocument,
+ })
+ .register(fastifySwaggerUi, this.fastifyService.swaggerUiConf)
+ .addHook('onRoute', (opts) => {
+ if (opts.path === `${apiPrefix}/healthz`) {
+ opts.logLevel = 'silent';
+ }
+ })
+ .setErrorHandler((error: Error, req: { id: string }, reply) => {
+ const statusCode = 500;
+ // @ts-ignore vérifier l'objet
+ const message = error.description || error.message;
+ reply.status(statusCode).send({
+ status: statusCode,
+ error: message,
+ stack: error.stack,
+ });
+ this.loggerService.log('info', { reqId: req.id, error });
+ })
+ .addHook('onResponse', (req, res) => {
+ if (res.statusCode < 400) {
+ req.log.info({
+ status: res.statusCode,
+ userId: (
+ req.session as
+ | FastifySessionObjectWithUser
+ | undefined
+ )?.user?.id,
+ });
+ } else if (res.statusCode < 500) {
+ req.log.warn({
+ status: res.statusCode,
+ userId: (
+ req.session as
+ | FastifySessionObjectWithUser
+ | undefined
+ )?.user?.id,
+ });
+ } else {
+ req.log.error({
+ status: res.statusCode,
+ userId: (
+ req.session as
+ | FastifySessionObjectWithUser
+ | undefined
+ )?.user?.id,
+ });
+ }
+ });
+
+ await app.ready();
+ }
+}
diff --git a/apps/server-nestjs/src/cpin-module/core/core.module.ts b/apps/server-nestjs/src/cpin-module/core/core.module.ts
new file mode 100644
index 000000000..a5e6617b0
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/core/core.module.ts
@@ -0,0 +1,12 @@
+import { Module } from '@nestjs/common';
+
+import { ConfigurationModule } from '../infrastructure/configuration/configuration.module';
+import { InfrastructureModule } from '../infrastructure/infrastructure.module';
+import { AppService } from './app/app.service';
+import { FastifyService } from './fastify/fastify.service';
+
+@Module({
+ imports: [ConfigurationModule, InfrastructureModule],
+ providers: [AppService, FastifyService],
+})
+export class CoreModule {}
diff --git a/apps/server-nestjs/src/cpin-module/core/fastify/fastify.service.spec.ts b/apps/server-nestjs/src/cpin-module/core/fastify/fastify.service.spec.ts
new file mode 100644
index 000000000..cd9cab9bf
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/core/fastify/fastify.service.spec.ts
@@ -0,0 +1,20 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { FastifyService } from './fastify.service';
+
+describe('fastifyService', () => {
+ let service: FastifyService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [FastifyService],
+ }).compile();
+
+ service = module.get(FastifyService);
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/core/fastify/fastify.service.ts b/apps/server-nestjs/src/cpin-module/core/fastify/fastify.service.ts
new file mode 100644
index 000000000..4e98dc38b
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/core/fastify/fastify.service.ts
@@ -0,0 +1,62 @@
+import { ConfigurationService } from '@/cpin-module/infrastructure/configuration/configuration.service';
+import { loggerConfiguration } from '@/cpin-module/infrastructure/logger/logger.module';
+import { swaggerUiPath } from '@cpn-console/shared';
+import type { FastifySwaggerUiOptions } from '@fastify/swagger-ui';
+import { Injectable } from '@nestjs/common';
+import type { generateOpenApi } from '@ts-rest/open-api';
+import type { FastifyServerOptions } from 'fastify';
+import { randomUUID } from 'node:crypto';
+
+@Injectable()
+export class FastifyService {
+ constructor(private readonly configurationService: ConfigurationService) {
+ this.fastifyConf = {
+ maxParamLength: 5000,
+ logger:
+ loggerConfiguration[this.configurationService.NODE_ENV] ??
+ loggerConfiguration.production,
+ genReqId: () => randomUUID(),
+ };
+
+ this.swaggerConf = {
+ info: {
+ title: 'Console Cloud Pi Native',
+ description: 'API de gestion des ressources Cloud Pi Native.',
+ version: this.configurationService.appVersion,
+ },
+
+ externalDocs: this.externalDocs,
+ servers: [
+ {
+ url: this.configurationService.keycloakRedirectUri,
+ },
+ ],
+ };
+
+ this.swaggerUiConf = {
+ routePrefix: swaggerUiPath,
+ uiConfig: {
+ docExpansion: 'list',
+ deepLinking: false,
+ },
+ initOAuth: {
+ clientId: this.configurationService.keycloakClientId,
+ clientSecret: this.configurationService.keycloakClientSecret,
+ realm: this.configurationService.keycloakRealm,
+ appName: 'Cloud Pi Native',
+ scopes: 'openid generic',
+ },
+ };
+ }
+
+ fastifyConf!: FastifyServerOptions;
+
+ externalDocs = {
+ description: 'External documentation.',
+ url: 'https://cloud-pi-native.fr',
+ };
+
+ swaggerConf: Parameters[1];
+
+ swaggerUiConf: FastifySwaggerUiOptions;
+}
diff --git a/apps/server-nestjs/src/cpin-module/cpin.module.ts b/apps/server-nestjs/src/cpin-module/cpin.module.ts
new file mode 100644
index 000000000..2daee31d0
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/cpin.module.ts
@@ -0,0 +1,17 @@
+import { Module } from '@nestjs/common';
+
+import { ApplicationInitializationModule } from './application-initialization/application-initialization.module';
+import { CoreModule } from './core/core.module';
+import { InfrastructureModule } from './infrastructure/infrastructure.module';
+
+// This module host the old "server code" of our backend.
+// It it means to be empty in the future, by extracting from it
+// as many modules as possible !
+@Module({
+ imports: [
+ ApplicationInitializationModule,
+ CoreModule,
+ InfrastructureModule,
+ ],
+})
+export class CpinModule {}
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.module.ts b/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.module.ts
new file mode 100644
index 000000000..b2156ef75
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.module.ts
@@ -0,0 +1,25 @@
+import { Module } from '@nestjs/common';
+import { ConfigModule } from '@nestjs/config';
+
+import { ConfigurationService } from './configuration.service';
+
+const pathList: string[] = [];
+
+if (process.env.DOCKER !== 'true') {
+ pathList.push('.env');
+}
+
+if (process.env.INTEGRATION === 'true') {
+ pathList.push('.env.integ');
+}
+
+@Module({
+ imports: [
+ ConfigModule.forRoot({
+ envFilePath: pathList,
+ }),
+ ],
+ providers: [ConfigurationService],
+ exports: [ConfigurationService],
+})
+export class ConfigurationModule {}
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.service.spec.ts b/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.service.spec.ts
new file mode 100644
index 000000000..163446550
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.service.spec.ts
@@ -0,0 +1,20 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { ConfigurationService } from './configuration.service';
+
+describe('configurationService', () => {
+ let service: ConfigurationService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [ConfigurationService],
+ }).compile();
+
+ service = module.get(ConfigurationService);
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.service.ts b/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.service.ts
new file mode 100644
index 000000000..0e9bf9363
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/configuration/configuration.service.ts
@@ -0,0 +1,46 @@
+import { Injectable } from '@nestjs/common';
+
+@Injectable()
+export class ConfigurationService {
+ // application mode
+ isDev = process.env.NODE_ENV === 'development';
+ isTest = process.env.NODE_ENV === 'test';
+ isProd = process.env.NODE_ENV === 'production';
+ isInt = process.env.INTEGRATION === 'true';
+ isCI = process.env.CI === 'true';
+ isDevSetup = process.env.DEV_SETUP === 'true';
+
+ // app
+ port = process.env.SERVER_PORT;
+ appVersion = this.isProd ? (process.env.APP_VERSION ?? 'unknown') : 'dev';
+
+ // db
+ dbUrl = process.env.DB_URL;
+
+ // keycloak
+ sessionSecret = process.env.SESSION_SECRET;
+ keycloakProtocol = process.env.KEYCLOAK_PROTOCOL;
+ keycloakDomain = process.env.KEYCLOAK_DOMAIN;
+ keycloakRealm = process.env.KEYCLOAK_REALM;
+ keycloakClientId = process.env.KEYCLOAK_CLIENT_ID;
+ keycloakClientSecret = process.env.KEYCLOAK_CLIENT_SECRET;
+ keycloakRedirectUri = process.env.KEYCLOAK_REDIRECT_URI;
+ adminsUserId = process.env.ADMIN_KC_USER_ID
+ ? process.env.ADMIN_KC_USER_ID.split(',')
+ : [];
+
+ contactEmail =
+ process.env.CONTACT_EMAIL ??
+ 'cloudpinative-relations@interieur.gouv.fr';
+
+ // plugins
+ mockPlugins = process.env.MOCK_PLUGINS === 'true';
+ projectRootDir = process.env.PROJECTS_ROOT_DIR;
+ pluginsDir = process.env.PLUGINS_DIR ?? '/plugins';
+ NODE_ENV =
+ process.env.NODE_ENV === 'test'
+ ? 'test'
+ : process.env.NODE_ENV === 'development'
+ ? 'development'
+ : 'production';
+}
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/database/database.service.spec.ts b/apps/server-nestjs/src/cpin-module/infrastructure/database/database.service.spec.ts
new file mode 100644
index 000000000..49cbd3698
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/database/database.service.spec.ts
@@ -0,0 +1,20 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { DatabaseService } from './database.service';
+
+describe('databaseService', () => {
+ let service: DatabaseService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [DatabaseService],
+ }).compile();
+
+ service = module.get(DatabaseService);
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/database/database.service.ts b/apps/server-nestjs/src/cpin-module/infrastructure/database/database.service.ts
new file mode 100644
index 000000000..29e981c30
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/database/database.service.ts
@@ -0,0 +1,70 @@
+import prisma from '@/prisma';
+import { Injectable, Logger } from '@nestjs/common';
+import { setTimeout } from 'node:timers/promises';
+
+import { ConfigurationService } from '../configuration/configuration.service';
+
+@Injectable()
+export class DatabaseService {
+ private readonly loggerService = new Logger(DatabaseService.name);
+
+ constructor(private readonly configurationService: ConfigurationService) {
+ this.DELAY_BEFORE_RETRY =
+ this.configurationService.isTest || this.configurationService.isCI
+ ? 1000
+ : 10000;
+ }
+
+ DELAY_BEFORE_RETRY!: number;
+ closingConnections = false;
+
+ async getConnection(triesLeft = 5): Promise {
+ if (this.closingConnections || triesLeft <= 0) {
+ throw new Error('Unable to connect to Postgres server');
+ }
+ triesLeft--;
+
+ try {
+ if (
+ this.configurationService.isDev ||
+ this.configurationService.isTest ||
+ this.configurationService.isCI
+ ) {
+ this.loggerService.log(
+ `Trying to connect to Postgres with: ${this.configurationService.dbUrl}`,
+ );
+ }
+ await prisma.$connect();
+
+ this.loggerService.log('Connected to Postgres!');
+ } catch (error) {
+ if (triesLeft > 0) {
+ this.loggerService.error(error);
+ this.loggerService.log(
+ `Could not connect to Postgres: ${error.message}`,
+ );
+ this.loggerService.log(`Retrying (${triesLeft} tries left)`);
+ await setTimeout(this.DELAY_BEFORE_RETRY);
+ return this.getConnection(triesLeft);
+ }
+
+ this.loggerService.log(
+ `Could not connect to Postgres: ${error.message}`,
+ );
+ this.loggerService.log('Out of retries');
+ error.message = `Out of retries, last error: ${error.message}`;
+ throw error;
+ }
+ }
+
+ async closeConnections() {
+ this.closingConnections = true;
+ try {
+ await prisma.$disconnect();
+ } catch (error) {
+ this.loggerService.error(error);
+ } finally {
+ this.closingConnections = false;
+ }
+ }
+}
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/http-client/http-client.service.spec.ts b/apps/server-nestjs/src/cpin-module/infrastructure/http-client/http-client.service.spec.ts
new file mode 100644
index 000000000..0c8a7cd5e
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/http-client/http-client.service.spec.ts
@@ -0,0 +1,20 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { HttpClientService } from './http-client.service';
+
+describe('httpClientService', () => {
+ let service: HttpClientService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [HttpClientService],
+ }).compile();
+
+ service = module.get(HttpClientService);
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/http-client/http-client.service.ts b/apps/server-nestjs/src/cpin-module/infrastructure/http-client/http-client.service.ts
new file mode 100644
index 000000000..78dfa1769
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/http-client/http-client.service.ts
@@ -0,0 +1,4 @@
+import { Injectable } from '@nestjs/common';
+
+@Injectable()
+export class HttpClientService {}
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/infrastructure.module.ts b/apps/server-nestjs/src/cpin-module/infrastructure/infrastructure.module.ts
new file mode 100644
index 000000000..00348b26b
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/infrastructure.module.ts
@@ -0,0 +1,14 @@
+import { Module } from '@nestjs/common';
+
+import { ConfigurationModule } from './configuration/configuration.module';
+import { DatabaseService } from './database/database.service';
+import { HttpClientService } from './http-client/http-client.service';
+import { LoggerModule } from './logger/logger.module';
+import { ServerService } from './server/server.service';
+
+@Module({
+ providers: [DatabaseService, HttpClientService, ServerService],
+ imports: [LoggerModule, ConfigurationModule],
+ exports: [DatabaseService, HttpClientService, ServerService],
+})
+export class InfrastructureModule {}
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/logger/logger.module.ts b/apps/server-nestjs/src/cpin-module/infrastructure/logger/logger.module.ts
new file mode 100644
index 000000000..fb8ab018f
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/logger/logger.module.ts
@@ -0,0 +1,57 @@
+import { Module } from '@nestjs/common';
+import type { PinoLoggerOptions } from 'fastify/types/logger';
+import { LoggerModule as PinoLoggerModule } from 'nestjs-pino';
+
+import { ConfigurationModule } from '../configuration/configuration.module';
+import { ConfigurationService } from '../configuration/configuration.service';
+
+export const customLevels = {
+ audit: 25,
+};
+
+export const loggerConfiguration: Record = {
+ development: {
+ transport: {
+ target: 'pino-pretty',
+ options: {
+ translateTime: 'dd/mm/yyyy - HH:MM:ss Z',
+ ignore: 'pid,hostname',
+ colorize: true,
+ singleLine: true,
+ },
+ },
+ customLevels,
+ level: process.env.LOG_LEVEL ?? 'debug',
+ },
+ production: {
+ customLevels,
+ level: process.env.LOG_LEVEL ?? 'audit',
+ },
+ test: {
+ level: 'silent',
+ },
+};
+
+@Module({
+ imports: [
+ PinoLoggerModule.forRootAsync({
+ imports: [ConfigurationModule],
+ inject: [ConfigurationService],
+ useFactory: async (configService: ConfigurationService) => {
+ return {
+ pinoHttp:
+ loggerConfiguration[
+ configService.isProd
+ ? 'production'
+ : configService.isTest
+ ? 'test'
+ : 'development'
+ ],
+ };
+ },
+ }),
+ ],
+ controllers: [],
+ providers: [],
+})
+export class LoggerModule {}
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/server/server.service.spec.ts b/apps/server-nestjs/src/cpin-module/infrastructure/server/server.service.spec.ts
new file mode 100644
index 000000000..ef7ab7463
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/server/server.service.spec.ts
@@ -0,0 +1,20 @@
+import type { TestingModule } from '@nestjs/testing';
+import { Test } from '@nestjs/testing';
+
+import { ServerService } from './server.service';
+
+describe('serverService', () => {
+ let service: ServerService;
+
+ beforeEach(async () => {
+ const module: TestingModule = await Test.createTestingModule({
+ providers: [ServerService],
+ }).compile();
+
+ service = module.get(ServerService);
+ });
+
+ it('should be defined', () => {
+ expect(service).toBeDefined();
+ });
+});
diff --git a/apps/server-nestjs/src/cpin-module/infrastructure/server/server.service.ts b/apps/server-nestjs/src/cpin-module/infrastructure/server/server.service.ts
new file mode 100644
index 000000000..7566c78d3
--- /dev/null
+++ b/apps/server-nestjs/src/cpin-module/infrastructure/server/server.service.ts
@@ -0,0 +1,12 @@
+import { Injectable } from '@nestjs/common';
+import { initServer } from '@ts-rest/fastify';
+
+@Injectable()
+// @TODO is this still necessary ?
+export class ServerService {
+ serverInstance!: any;
+
+ constructor() {
+ this.serverInstance = initServer();
+ }
+}
diff --git a/apps/server-nestjs/src/main.module.ts b/apps/server-nestjs/src/main.module.ts
new file mode 100644
index 000000000..9f6f3ad8f
--- /dev/null
+++ b/apps/server-nestjs/src/main.module.ts
@@ -0,0 +1,12 @@
+import { Module } from '@nestjs/common';
+
+import { CpinModule } from './cpin-module/cpin.module';
+
+// This module only exists to import other module.
+// « One module to rule them all, and in NestJs bind them »
+@Module({
+ imports: [CpinModule],
+ controllers: [],
+ providers: [],
+})
+export class MainModule {}
diff --git a/apps/server-nestjs/src/main.ts b/apps/server-nestjs/src/main.ts
new file mode 100644
index 000000000..d455db402
--- /dev/null
+++ b/apps/server-nestjs/src/main.ts
@@ -0,0 +1,11 @@
+import { NestFactory } from '@nestjs/core';
+import { Logger } from 'nestjs-pino';
+
+import { MainModule } from './main.module';
+
+async function bootstrap() {
+ const app = await NestFactory.create(MainModule, { bufferLogs: true });
+ app.useLogger(app.get(Logger));
+ await app.listen(process.env.PORT ?? 0);
+}
+bootstrap();
diff --git a/apps/server-nestjs/src/prisma.ts b/apps/server-nestjs/src/prisma.ts
new file mode 100644
index 000000000..4e54f7a77
--- /dev/null
+++ b/apps/server-nestjs/src/prisma.ts
@@ -0,0 +1,5 @@
+import { PrismaClient } from '@prisma/client';
+
+const prisma = new PrismaClient();
+
+export default prisma;
diff --git a/apps/server-nestjs/src/prisma/migrations/20230706084346_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20230706084346_dso/migration.sql
new file mode 100644
index 000000000..f2f4e7b0b
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20230706084346_dso/migration.sql
@@ -0,0 +1,151 @@
+-- CreateTable
+CREATE TABLE "Environment" (
+ "id" UUID NOT NULL,
+ "name" TEXT NOT NULL,
+ "projectId" UUID NOT NULL,
+ "status" TEXT NOT NULL DEFAULT 'initializing',
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Environment_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Log" (
+ "id" UUID NOT NULL,
+ "data" JSONB NOT NULL,
+ "action" TEXT NOT NULL DEFAULT '',
+ "userId" UUID NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Log_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Organization" (
+ "id" UUID NOT NULL,
+ "source" TEXT NOT NULL,
+ "name" TEXT NOT NULL,
+ "label" TEXT NOT NULL,
+ "active" BOOLEAN NOT NULL DEFAULT true,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Organization_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Permission" (
+ "id" UUID NOT NULL,
+ "userId" UUID NOT NULL,
+ "environmentId" UUID NOT NULL,
+ "level" INTEGER NOT NULL DEFAULT 0,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Permission_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Project" (
+ "id" UUID NOT NULL,
+ "name" TEXT NOT NULL,
+ "organizationId" UUID NOT NULL,
+ "description" TEXT,
+ "status" TEXT NOT NULL,
+ "locked" BOOLEAN NOT NULL DEFAULT false,
+ "services" JSONB NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Project_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Repository" (
+ "id" UUID NOT NULL,
+ "projectId" UUID NOT NULL,
+ "internalRepoName" TEXT NOT NULL,
+ "externalRepoUrl" TEXT NOT NULL,
+ "externalUserName" TEXT,
+ "externalToken" TEXT,
+ "isInfra" BOOLEAN NOT NULL DEFAULT false,
+ "isPrivate" BOOLEAN NOT NULL DEFAULT false,
+ "status" TEXT NOT NULL DEFAULT 'initializing',
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Repository_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "User" (
+ "id" UUID NOT NULL,
+ "firstName" TEXT NOT NULL,
+ "lastName" TEXT NOT NULL,
+ "email" TEXT NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "User_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Role" (
+ "userId" UUID NOT NULL,
+ "projectId" UUID NOT NULL,
+ "role" TEXT NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Role_pkey" PRIMARY KEY ("userId","projectId")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Organization_id_key" ON "Organization"("id");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Organization_name_key" ON "Organization"("name");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Organization_label_key" ON "Organization"("label");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Permission_id_key" ON "Permission"("id");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Permission_userId_environmentId_key" ON "Permission"("userId", "environmentId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Project_id_key" ON "Project"("id");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Role_userId_projectId_key" ON "Role"("userId", "projectId");
+
+-- AddForeignKey
+ALTER TABLE "Environment" ADD CONSTRAINT "Environment_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Log" ADD CONSTRAINT "Log_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Permission" ADD CONSTRAINT "Permission_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Permission" ADD CONSTRAINT "Permission_environmentId_fkey" FOREIGN KEY ("environmentId") REFERENCES "Environment"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Project" ADD CONSTRAINT "Project_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Repository" ADD CONSTRAINT "Repository_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Role" ADD CONSTRAINT "Role_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Role" ADD CONSTRAINT "Role_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/apps/server-nestjs/src/prisma/migrations/20230710181052_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20230710181052_dso/migration.sql
new file mode 100644
index 000000000..26e1ade3f
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20230710181052_dso/migration.sql
@@ -0,0 +1,85 @@
+-- CreateEnum
+CREATE TYPE "ClusterPrivacy" AS ENUM ('public', 'dedicated');
+
+-- CreateTable
+CREATE TABLE "Cluster" (
+ "id" UUID NOT NULL,
+ "label" VARCHAR(50) NOT NULL,
+ "privacy" "ClusterPrivacy" NOT NULL DEFAULT 'dedicated',
+ "secretName" VARCHAR(50) NOT NULL,
+ "clusterResources" BOOLEAN NOT NULL DEFAULT false,
+ "kubeConfigId" UUID NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+
+ CONSTRAINT "Cluster_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Kubeconfig" (
+ "id" UUID NOT NULL,
+ "user" JSONB NOT NULL,
+ "cluster" JSONB NOT NULL,
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP(3) NOT NULL,
+ "parentClusterId" UUID,
+
+ CONSTRAINT "Kubeconfig_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "_ClusterToEnvironment" (
+ "A" UUID NOT NULL,
+ "B" UUID NOT NULL
+);
+
+-- CreateTable
+CREATE TABLE "_ClusterToProject" (
+ "A" UUID NOT NULL,
+ "B" UUID NOT NULL
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Cluster_id_key" ON "Cluster"("id");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Cluster_label_key" ON "Cluster"("label");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Cluster_secretName_key" ON "Cluster"("secretName");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Cluster_kubeConfigId_key" ON "Cluster"("kubeConfigId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Kubeconfig_id_key" ON "Kubeconfig"("id");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Kubeconfig_parentClusterId_key" ON "Kubeconfig"("parentClusterId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "_ClusterToEnvironment_AB_unique" ON "_ClusterToEnvironment"("A", "B");
+
+-- CreateIndex
+CREATE INDEX "_ClusterToEnvironment_B_index" ON "_ClusterToEnvironment"("B");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "_ClusterToProject_AB_unique" ON "_ClusterToProject"("A", "B");
+
+-- CreateIndex
+CREATE INDEX "_ClusterToProject_B_index" ON "_ClusterToProject"("B");
+
+-- AddForeignKey
+ALTER TABLE "Cluster" ADD CONSTRAINT "Cluster_kubeConfigId_fkey" FOREIGN KEY ("kubeConfigId") REFERENCES "Kubeconfig"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_ClusterToEnvironment" ADD CONSTRAINT "_ClusterToEnvironment_A_fkey" FOREIGN KEY ("A") REFERENCES "Cluster"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_ClusterToEnvironment" ADD CONSTRAINT "_ClusterToEnvironment_B_fkey" FOREIGN KEY ("B") REFERENCES "Environment"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_ClusterToProject" ADD CONSTRAINT "_ClusterToProject_A_fkey" FOREIGN KEY ("A") REFERENCES "Cluster"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_ClusterToProject" ADD CONSTRAINT "_ClusterToProject_B_fkey" FOREIGN KEY ("B") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/apps/server-nestjs/src/prisma/migrations/20230711132934_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20230711132934_dso/migration.sql
new file mode 100644
index 000000000..8f3fb5ff9
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20230711132934_dso/migration.sql
@@ -0,0 +1,11 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `parentClusterId` on the `Kubeconfig` table. All the data in the column will be lost.
+
+*/
+-- DropIndex
+DROP INDEX "Kubeconfig_parentClusterId_key";
+
+-- AlterTable
+ALTER TABLE "Kubeconfig" DROP COLUMN "parentClusterId";
diff --git a/apps/server-nestjs/src/prisma/migrations/20230802143822_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20230802143822_dso/migration.sql
new file mode 100644
index 000000000..4eb37edc5
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20230802143822_dso/migration.sql
@@ -0,0 +1,10 @@
+CREATE TYPE "ProjectStatus" AS ENUM ('initializing', 'created', 'failed', 'archived');
+
+ALTER TABLE public."Project" ALTER COLUMN status TYPE "ProjectStatus" USING
+ case
+ when status = 'created' then 'created'::"ProjectStatus"
+ when status = 'failed' then 'failed'::"ProjectStatus"
+ when status = 'archived' then 'archived'::"ProjectStatus"
+ else 'initializing'::"ProjectStatus"
+ end;
+ALTER TABLE public."Project" ALTER COLUMN status SET DEFAULT 'initializing';
diff --git a/apps/server-nestjs/src/prisma/migrations/20230912084459_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20230912084459_dso/migration.sql
new file mode 100644
index 000000000..f402a0e3d
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20230912084459_dso/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Cluster" ADD COLUMN "infos" VARCHAR(200);
diff --git a/apps/server-nestjs/src/prisma/migrations/20231010111515_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20231010111515_dso/migration.sql
new file mode 100644
index 000000000..f553e7880
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20231010111515_dso/migration.sql
@@ -0,0 +1,8 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `externalToken` on the `Repository` table. All the data in the column will be lost.
+
+*/
+-- AlterTable
+ALTER TABLE "Repository" DROP COLUMN "externalToken";
diff --git a/apps/server-nestjs/src/prisma/migrations/20231011125838_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20231011125838_dso/migration.sql
new file mode 100644
index 000000000..394b650a5
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20231011125838_dso/migration.sql
@@ -0,0 +1,81 @@
+-- CreateEnum
+CREATE TYPE "QuotaStageStatus" AS ENUM
+('active', 'pendingDelete');
+
+-- Create new tables
+-- CreateTable
+CREATE TABLE "Quota"
+(
+ "id" UUID NOT NULL,
+ "memory" VARCHAR NOT NULL,
+ "cpu" REAL NOT NULL,
+ "name" VARCHAR NOT NULL,
+ "isPrivate" BOOLEAN NOT NULL DEFAULT false,
+
+ CONSTRAINT "Quota_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "Stage"
+(
+ "id" UUID NOT NULL,
+ "name" VARCHAR NOT NULL,
+
+ CONSTRAINT "Stage_pkey" PRIMARY KEY ("id")
+);
+
+-- Associate Quotas and Stages
+-- CreateTable
+CREATE TABLE "QuotaStage"
+(
+ "id" UUID NOT NULL,
+ "quotaId" UUID NOT NULL,
+ "stageId" UUID NOT NULL,
+ "status" "QuotaStageStatus" NOT NULL DEFAULT 'active',
+
+ CONSTRAINT "QuotaStage_pkey" PRIMARY KEY ("id")
+);
+CREATE UNIQUE INDEX "Quota_id_key" ON "Quota"("id");
+CREATE UNIQUE INDEX "Quota_name_key" ON "Quota"("name");
+CREATE UNIQUE INDEX "Stage_id_key" ON "Stage"("id");
+CREATE UNIQUE INDEX "Stage_name_key" ON "Stage"("name");
+CREATE UNIQUE INDEX "QuotaStage_id_key" ON "QuotaStage"("id");
+CREATE UNIQUE INDEX "QuotaStage_quotaId_stageId_key" ON "QuotaStage"("quotaId", "stageId");
+ALTER TABLE "QuotaStage" ADD CONSTRAINT "QuotaStage_quotaId_fkey" FOREIGN KEY ("quotaId") REFERENCES "Quota"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ALTER TABLE "QuotaStage" ADD CONSTRAINT "QuotaStage_stageId_fkey" FOREIGN KEY ("stageId") REFERENCES "Stage"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- Create default values for Quotas and Stages
+-- Quota
+INSERT INTO "Quota"
+ (id, cpu, memory, "name", "isPrivate")
+VALUES
+ ('5a57b62f-2465-4fb6-a853-5a751d099199', 2, '4Gi', 'small', false),
+ ('08770663-3b76-4af6-8978-9f75eda4faa7', 4, '8Gi', 'medium', false),
+ ('b7b4d9bd-7a8f-4287-bb12-5ce2dadb4ff2', 6, '12Gi', 'large', false),
+ ('97b851e8-9067-4a3d-a0e8-c3a6820c49be', 8, '16Gi', 'xlarge', false);
+
+-- Stage
+INSERT INTO "Stage"
+ (id, "name")
+VALUES
+ ('4a9ad694-4c54-4a3c-9579-548bf4b7b1b9', 'dev'),
+ ('38fa869d-6267-441d-af7f-e0548fd06b7e', 'staging'),
+ ('d434310e-7850-4d59-b47f-0772edf50582', 'integration'),
+ ('9b3e9991-896d-4d90-bdc5-a34be8c06b8f', 'prod');
+
+-- QuotaStage
+INSERT INTO "QuotaStage"
+ (id, "quotaId", "stageId")
+VALUES
+ ('0cb0c549-560e-4f26-8f4e-832dd722f68a', '5a57b62f-2465-4fb6-a853-5a751d099199', '4a9ad694-4c54-4a3c-9579-548bf4b7b1b9'),
+ ('0530e9c9-b37d-4dec-93e6-1895f700e61c', '5a57b62f-2465-4fb6-a853-5a751d099199', '38fa869d-6267-441d-af7f-e0548fd06b7e'),
+ ('8a99db49-b7b1-44bf-865d-5e709e8aa0fc', '5a57b62f-2465-4fb6-a853-5a751d099199', 'd434310e-7850-4d59-b47f-0772edf50582'),
+ ('67561f00-d219-4ca6-b94a-3ee83f09d2d6', '5a57b62f-2465-4fb6-a853-5a751d099199', '9b3e9991-896d-4d90-bdc5-a34be8c06b8f'),
+ ('8b3c201e-7518-4254-a94a-16c404e46936', '08770663-3b76-4af6-8978-9f75eda4faa7', '4a9ad694-4c54-4a3c-9579-548bf4b7b1b9'),
+ ('9157ae12-3e39-43f8-a24f-ae5d9c6b69b7', '08770663-3b76-4af6-8978-9f75eda4faa7', '38fa869d-6267-441d-af7f-e0548fd06b7e'),
+ ('c733a1dd-c9fd-4def-b29e-df49ef7b6698', '08770663-3b76-4af6-8978-9f75eda4faa7', 'd434310e-7850-4d59-b47f-0772edf50582'),
+ ('15a51f47-0ab2-4a94-a808-722639d8c092', '08770663-3b76-4af6-8978-9f75eda4faa7', '9b3e9991-896d-4d90-bdc5-a34be8c06b8f'),
+ ('cb66e80c-2304-472d-bc19-a411011674ca', 'b7b4d9bd-7a8f-4287-bb12-5ce2dadb4ff2', 'd434310e-7850-4d59-b47f-0772edf50582'),
+ ('59fb0e79-3a76-4b96-81d4-63f4caa98cfa', 'b7b4d9bd-7a8f-4287-bb12-5ce2dadb4ff2', '9b3e9991-896d-4d90-bdc5-a34be8c06b8f'),
+ ('4174b22c-2bee-4f4a-9d85-da7b5463f214', '97b851e8-9067-4a3d-a0e8-c3a6820c49be', 'd434310e-7850-4d59-b47f-0772edf50582'),
+ ('de0589b6-7cf5-4f1e-ab44-53e71a6cdb7a', '97b851e8-9067-4a3d-a0e8-c3a6820c49be', '9b3e9991-896d-4d90-bdc5-a34be8c06b8f');
diff --git a/apps/server-nestjs/src/prisma/migrations/20231011125839_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20231011125839_dso/migration.sql
new file mode 100644
index 000000000..8c98a7f74
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20231011125839_dso/migration.sql
@@ -0,0 +1,35 @@
+-- Multiplication des environnements par clusteurs
+ALTER TABLE "Environment" ADD COLUMN "clusterId" UUID;
+
+DO
+$$
+DECLARE
+ perm record;
+ cte record;
+ env_uuid UUID;
+BEGIN
+ FOR cte IN SELECT "B" AS environmentId, "A" AS "clusterId", "name", "projectId", status, "updatedAt", "createdAt"
+ FROM public."_ClusterToEnvironment", public."Environment"
+ WHERE public."Environment".id = "B"
+ LOOP
+ env_uuid := gen_random_uuid();
+ INSERT INTO public."Environment" (id, "name", "projectId", "clusterId", status, "createdAt", "updatedAt") VALUES
+ (env_uuid, cte."name", cte."projectId", cte."clusterId", cte.status, cte."createdAt", cte."updatedAt");
+
+ FOR perm in SELECT * FROM public."Permission" WHERE "environmentId" = cte.environmentId
+ LOOP
+ INSERT INTO public."Permission" (id, "level", "createdAt", "updatedAt", "environmentId", "userId") VALUES
+ (gen_random_uuid(), perm."level", perm."createdAt", perm."updatedAt", env_uuid, perm."userId");
+ END LOOP;
+ END LOOP;
+END;
+$$
+;
+DELETE FROM public."Environment" WHERE "clusterId" is null;
+ALTER TABLE public."Environment" ALTER COLUMN "clusterId" SET NOT NULL;
+ALTER TABLE "Environment" ADD CONSTRAINT "Environment_clusterId_fkey" FOREIGN KEY ("clusterId") REFERENCES "Cluster"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- Delete old _ClusterToEnvironment
+ALTER TABLE "_ClusterToEnvironment" DROP CONSTRAINT "_ClusterToEnvironment_A_fkey";
+ALTER TABLE "_ClusterToEnvironment" DROP CONSTRAINT "_ClusterToEnvironment_B_fkey";
+DROP TABLE "_ClusterToEnvironment";
diff --git a/apps/server-nestjs/src/prisma/migrations/20231011125841_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20231011125841_dso/migration.sql
new file mode 100644
index 000000000..035cd1c85
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20231011125841_dso/migration.sql
@@ -0,0 +1,36 @@
+-- Associate cluster to Stages
+-- CreateTable
+CREATE TABLE "_ClusterToStage" (
+ "A" UUID NOT NULL,
+ "B" UUID NOT NULL
+);
+-- AddForeignKey
+ALTER TABLE "_ClusterToStage" ADD CONSTRAINT "_ClusterToStage_A_fkey" FOREIGN KEY ("A") REFERENCES "Cluster"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_ClusterToStage" ADD CONSTRAINT "_ClusterToStage_B_fkey" FOREIGN KEY ("B") REFERENCES "Stage"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- CreateIndex
+CREATE UNIQUE INDEX "_ClusterToStage_AB_unique" ON "_ClusterToStage"("A", "B");
+
+-- CreateIndex
+CREATE INDEX "_ClusterToStage_B_index" ON "_ClusterToStage"("B");
+
+DO
+$$
+DECLARE
+ cluster record;
+ cte record;
+ env_uuid UUID;
+BEGIN
+ FOR cluster IN SELECT id
+ FROM public."Cluster"
+ LOOP
+ INSERT INTO public."_ClusterToStage" ("A", "B") VALUES
+ (cluster.id, '4a9ad694-4c54-4a3c-9579-548bf4b7b1b9'),
+ (cluster.id, '38fa869d-6267-441d-af7f-e0548fd06b7e'),
+ (cluster.id, 'd434310e-7850-4d59-b47f-0772edf50582'),
+ (cluster.id, '9b3e9991-896d-4d90-bdc5-a34be8c06b8f');
+ END LOOP;
+END;
+$$
diff --git a/apps/server-nestjs/src/prisma/migrations/20231012105520_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20231012105520_dso/migration.sql
new file mode 100644
index 000000000..43793bdb4
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20231012105520_dso/migration.sql
@@ -0,0 +1,11 @@
+-- AlterTable
+ALTER TABLE "Environment" ADD COLUMN "quotaStageId" UUID;
+UPDATE "Environment" SET "quotaStageId" = '8b3c201e-7518-4254-a94a-16c404e46936' WHERE "name" = 'dev';
+UPDATE "Environment" SET "quotaStageId" = '9157ae12-3e39-43f8-a24f-ae5d9c6b69b7' WHERE "name" = 'staging';
+UPDATE "Environment" SET "quotaStageId" = '4174b22c-2bee-4f4a-9d85-da7b5463f214' WHERE "name" = 'integration';
+UPDATE "Environment" SET "quotaStageId" = 'de0589b6-7cf5-4f1e-ab44-53e71a6cdb7a' WHERE "name" = 'prod';
+ALTER TABLE "Environment" ALTER COLUMN "name" SET DATA TYPE VARCHAR(11);
+ALTER TABLE "Environment" ALTER COLUMN "quotaStageId" SET NOT NULL;
+
+-- AddForeignKey
+ALTER TABLE "Environment" ADD CONSTRAINT "Environment_quotaStageId_fkey" FOREIGN KEY ("quotaStageId") REFERENCES "QuotaStage"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/apps/server-nestjs/src/prisma/migrations/20231024155020_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20231024155020_dso/migration.sql
new file mode 100644
index 000000000..9af004b6a
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20231024155020_dso/migration.sql
@@ -0,0 +1,3 @@
+-- Please read 6.0.0 Release notes !
+-- lock all projects
+UPDATE public."Project" SET "locked"=true
\ No newline at end of file
diff --git a/apps/server-nestjs/src/prisma/migrations/20231026150220_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20231026150220_dso/migration.sql
new file mode 100644
index 000000000..d970d3965
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20231026150220_dso/migration.sql
@@ -0,0 +1,3 @@
+-- Please read 6.0.0 Release notes !
+-- set all projects to failed to avoid unlock them
+UPDATE public."Project" SET "status" = 'failed' WHERE "status" != 'archived'
\ No newline at end of file
diff --git a/apps/server-nestjs/src/prisma/migrations/20240112135751_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240112135751_dso/migration.sql
new file mode 100644
index 000000000..c387d9885
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240112135751_dso/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Log" ADD COLUMN "requestId" VARCHAR(21);
diff --git a/apps/server-nestjs/src/prisma/migrations/20240321123436_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240321123436_dso/migration.sql
new file mode 100644
index 000000000..18e20262c
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240321123436_dso/migration.sql
@@ -0,0 +1,12 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `status` on the `Environment` table. All the data in the column will be lost.
+ - You are about to drop the column `status` on the `Repository` table. All the data in the column will be lost.
+
+*/
+-- AlterTable
+ALTER TABLE "Environment" DROP COLUMN "status";
+
+-- AlterTable
+ALTER TABLE "Repository" DROP COLUMN "status";
diff --git a/apps/server-nestjs/src/prisma/migrations/20240329172938_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240329172938_dso/migration.sql
new file mode 100644
index 000000000..f784b2156
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240329172938_dso/migration.sql
@@ -0,0 +1,46 @@
+-- AlterTable
+ALTER TABLE "Cluster" ADD COLUMN "zoneId" UUID;
+
+-- CreateTable
+CREATE TABLE "Zone"
+(
+ "id" UUID NOT NULL,
+ "slug" VARCHAR(10) NOT NULL,
+ "label" VARCHAR(50) NOT NULL,
+ "description" VARCHAR(200),
+ "createdAt" TIMESTAMP
+(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "updatedAt" TIMESTAMP
+(3) NOT NULL,
+
+ CONSTRAINT "Zone_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Zone_id_key" ON "Zone"("id");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Zone_slug_key" ON "Zone"("slug");
+
+-- Create default zone
+INSERT INTO "Zone"
+ (id, "slug", "label", "description", "updatedAt")
+VALUES
+ ('a66c4230-eba6-41f1-aae5-bb1e4f90cce0', 'default', 'Zone Défaut', 'Zone par défaut, à changer', CURRENT_TIMESTAMP);
+
+-- Set default zoneId for current clusters
+UPDATE "Cluster"
+SET "zoneId"
+= 'a66c4230-eba6-41f1-aae5-bb1e4f90cce0'
+WHERE "zoneId"
+IS NULL;
+
+-- AlterTable
+ALTER TABLE "Cluster" ALTER COLUMN "zoneId"
+SET
+NOT NULL;
+
+-- AddForeignKey
+ALTER TABLE "Cluster" ADD CONSTRAINT "Cluster_zoneId_fkey" FOREIGN KEY ("zoneId") REFERENCES "Zone"("id")
+ON DELETE RESTRICT ON
+UPDATE CASCADE;
diff --git a/apps/server-nestjs/src/prisma/migrations/20240424093852_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240424093852_dso/migration.sql
new file mode 100644
index 000000000..cb4f7ad96
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240424093852_dso/migration.sql
@@ -0,0 +1,23 @@
+-- CreateTable
+CREATE TABLE "ProjectPlugin" (
+ "pluginName" TEXT NOT NULL,
+ "projectId" UUID NOT NULL,
+ "key" TEXT NOT NULL,
+ "value" TEXT NOT NULL
+);
+
+-- CreateTable
+CREATE TABLE "AdminPlugin" (
+ "pluginName" TEXT NOT NULL,
+ "key" TEXT NOT NULL,
+ "value" TEXT NOT NULL
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "ProjectPlugin_projectId_pluginName_key_key" ON "ProjectPlugin"("projectId", "pluginName", "key");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "AdminPlugin_pluginName_key_key" ON "AdminPlugin"("pluginName", "key");
+
+-- AddForeignKey
+ALTER TABLE "ProjectPlugin" ADD CONSTRAINT "ProjectPlugin_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE;
diff --git a/apps/server-nestjs/src/prisma/migrations/20240427181037_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240427181037_dso/migration.sql
new file mode 100644
index 000000000..11672324f
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240427181037_dso/migration.sql
@@ -0,0 +1,19 @@
+DO $$
+DECLARE
+ project_row RECORD;
+ registry_id INT;
+BEGIN
+ -- Début de la boucle sur chaque ligne de la table 'Project'
+ FOR project_row IN SELECT id, services FROM public."Project" LOOP
+ -- Extrait 'registry.id' de la colonne JSON 'services'
+ registry_id := (SELECT (project_row.services -> 'registry' ->> 'id')::TEXT);
+ -- Si 'registry.id' existe, insérer dans la table 'config'
+ IF registry_id IS NOT NULL THEN
+ INSERT INTO public."ProjectPlugin" ("projectId", "pluginName", "key", "value")
+ VALUES (project_row.id, 'registry', 'projectId', registry_id::TEXT);
+ END IF;
+ END LOOP;
+END $$;
+
+-- AlterTable
+ALTER TABLE "Project" DROP COLUMN "services";
diff --git a/apps/server-nestjs/src/prisma/migrations/20240605135052_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240605135052_dso/migration.sql
new file mode 100644
index 000000000..9c7d5a8f8
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240605135052_dso/migration.sql
@@ -0,0 +1,9 @@
+-- CreateEnum
+CREATE TYPE "RoleList" AS ENUM ('owner', 'user');
+
+-- AlterTable
+ALTER TABLE public."Role" ALTER COLUMN "role" TYPE "RoleList" USING
+ case
+ when role = 'owner' then 'owner'::"RoleList"
+ else 'user'::"RoleList"
+ end;
\ No newline at end of file
diff --git a/apps/server-nestjs/src/prisma/migrations/20240612123132_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240612123132_dso/migration.sql
new file mode 100644
index 000000000..45a4a5d1e
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240612123132_dso/migration.sql
@@ -0,0 +1,8 @@
+-- CreateTable
+CREATE TABLE "ProjectClusterHistory" (
+ "projectId" UUID NOT NULL,
+ "clusterId" UUID NOT NULL
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "ProjectClusterHistory_projectId_clusterId_key" ON "ProjectClusterHistory"("projectId", "clusterId");
diff --git a/apps/server-nestjs/src/prisma/migrations/20240614222908_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240614222908_dso/migration.sql
new file mode 100644
index 000000000..2b1641a65
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240614222908_dso/migration.sql
@@ -0,0 +1,11 @@
+DO $$
+DECLARE
+ env_row RECORD;
+BEGIN
+ -- Début de la boucle sur chaque ligne de la table 'Project'
+ FOR env_row IN SELECT "projectId", "clusterId" FROM public."Environment" LOOP
+ INSERT INTO public."ProjectClusterHistory" ("projectId", "clusterId")
+ VALUES (env_row."projectId", env_row."clusterId")
+ ON CONFLICT DO NOTHING;
+ END LOOP;
+END $$;
\ No newline at end of file
diff --git a/apps/server-nestjs/src/prisma/migrations/20240618112205_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240618112205_dso/migration.sql
new file mode 100644
index 000000000..5e7ff03d4
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240618112205_dso/migration.sql
@@ -0,0 +1,58 @@
+-- AlterTable
+ALTER TABLE "Environment" ADD COLUMN "quotaId" UUID,
+ADD COLUMN "stageId" UUID;
+
+-- AddForeignKey
+ALTER TABLE "Environment" ADD CONSTRAINT "Environment_quotaId_fkey" FOREIGN KEY ("quotaId") REFERENCES "Quota"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "Environment" ADD CONSTRAINT "Environment_stageId_fkey" FOREIGN KEY ("stageId") REFERENCES "Stage"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- CreateTable
+CREATE TABLE "_QuotaToStage" (
+ "A" UUID NOT NULL,
+ "B" UUID NOT NULL
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "_QuotaToStage_AB_unique" ON "_QuotaToStage"("A", "B");
+
+-- CreateIndex
+CREATE INDEX "_QuotaToStage_B_index" ON "_QuotaToStage"("B");
+
+-- AddForeignKey
+ALTER TABLE "_QuotaToStage" ADD CONSTRAINT "_QuotaToStage_A_fkey" FOREIGN KEY ("A") REFERENCES "Quota"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "_QuotaToStage" ADD CONSTRAINT "_QuotaToStage_B_fkey" FOREIGN KEY ("B") REFERENCES "Stage"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+
+DO $$
+DECLARE
+ quota_stage_row RECORD;
+BEGIN
+ FOR quota_stage_row IN SELECT * FROM public."QuotaStage" loop
+ UPDATE public."Environment" SET "stageId" = quota_stage_row."stageId" WHERE "Environment"."quotaStageId" = quota_stage_row.id;
+ UPDATE public."Environment" SET "quotaId" = quota_stage_row."quotaId" WHERE "Environment"."quotaStageId" = quota_stage_row.id;
+ insert into public."_QuotaToStage" values (quota_stage_row."quotaId", quota_stage_row."stageId");
+ END LOOP;
+END $$;
+
+-- DropForeignKey
+ALTER TABLE "Environment" DROP CONSTRAINT "Environment_quotaStageId_fkey";
+
+-- AlterTable
+ALTER TABLE "Environment" ALTER COLUMN "quotaId" SET NOT NULL,
+ALTER COLUMN "stageId" SET NOT NULL,
+DROP COLUMN "quotaStageId";
+
+-- DropForeignKey
+ALTER TABLE "QuotaStage" DROP CONSTRAINT "QuotaStage_quotaId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "QuotaStage" DROP CONSTRAINT "QuotaStage_stageId_fkey";
+
+-- DropTable
+DROP TABLE "QuotaStage";
+
+-- DropEnum
+DROP TYPE "QuotaStageStatus";
diff --git a/apps/server-nestjs/src/prisma/migrations/20240717084709_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240717084709_dso/migration.sql
new file mode 100644
index 000000000..0036da8a1
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240717084709_dso/migration.sql
@@ -0,0 +1,9 @@
+/*
+ Warnings:
+
+ - Made the column `description` on table `Project` required. This step will fail if there are existing NULL values in that column.
+
+*/
+-- AlterTable
+ALTER TABLE "Project" ALTER COLUMN "description" SET NOT NULL,
+ALTER COLUMN "description" SET DEFAULT '';
diff --git a/apps/server-nestjs/src/prisma/migrations/20240723135420_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240723135420_dso/migration.sql
new file mode 100644
index 000000000..ed6ae9b84
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240723135420_dso/migration.sql
@@ -0,0 +1,198 @@
+-- DropForeignKey if exists
+DO $$ BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'Permission_environmentId_fkey') THEN
+ ALTER TABLE "Permission" DROP CONSTRAINT "Permission_environmentId_fkey";
+ END IF;
+END $$;
+
+-- DropForeignKey if exists
+DO $$ BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'Permission_userId_fkey') THEN
+ ALTER TABLE "Permission" DROP CONSTRAINT "Permission_userId_fkey";
+ END IF;
+END $$;
+
+-- DropForeignKey if exists
+DO $$ BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'Role_projectId_fkey') THEN
+ ALTER TABLE "Role" DROP CONSTRAINT "Role_projectId_fkey";
+ END IF;
+END $$;
+
+-- DropForeignKey if exists
+DO $$ BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'Role_userId_fkey') THEN
+ ALTER TABLE "Role" DROP CONSTRAINT "Role_userId_fkey";
+ END IF;
+END $$;
+
+-- CreateTable if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ProjectMembers') THEN
+ CREATE TABLE "ProjectMembers" (
+ "projectId" UUID NOT NULL,
+ "userId" UUID NOT NULL,
+ "roleIds" TEXT[]
+ );
+ END IF;
+END $$;
+
+-- AlterTable
+ALTER TABLE "Log" ADD COLUMN IF NOT EXISTS "projectId" UUID;
+
+INSERT INTO public."User" (id, "firstName", "lastName", email, "createdAt", "updatedAt")
+VALUES('04ac168a-2c4f-4816-9cce-af6c612e5912'::uuid, 'Anonymous', 'User', 'anon@user', '2023-07-03 14:46:56.770', '2023-07-03 14:46:56.770')
+ON CONFLICT (id) DO NOTHING;
+
+-- AlterTable
+ALTER TABLE "Project" ADD COLUMN IF NOT EXISTS "everyonePerms" BIGINT NOT NULL DEFAULT 896,
+ADD COLUMN IF NOT EXISTS "ownerId" UUID;
+
+DO $$
+DECLARE
+ role_row RECORD;
+BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'Role') THEN
+ -- Début de la boucle sur chaque ligne de la table 'Project'
+ FOR role_row IN SELECT "userId", "projectId", "role" FROM public."Role" LOOP
+ INSERT INTO public."ProjectMembers" ("userId", "projectId", "roleIds") VALUES (role_row."userId", role_row."projectId", '{}');
+ IF role_row."role" = 'owner'::public."RoleList" THEN
+ UPDATE public."Project"
+ SET "ownerId"=role_row."userId"
+ WHERE id=role_row."projectId"::uuid;
+ END IF;
+ END LOOP;
+ END IF;
+END $$;
+
+UPDATE public."Project"
+SET "ownerId"='04ac168a-2c4f-4816-9cce-af6c612e5912'
+WHERE "ownerId" IS NULL;
+
+ALTER TABLE public."Project" ALTER COLUMN "ownerId" SET NOT NULL;
+
+DELETE FROM public."ProjectMembers" pm
+USING public."Project" p
+WHERE pm."userId" = p."ownerId"
+AND pm."projectId" = p."id";
+
+-- DropTable if exists
+DO $$ BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'Permission') THEN
+ DROP TABLE "Permission";
+ END IF;
+END $$;
+
+-- DropTable if exists
+DO $$ BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'Role') THEN
+ DROP TABLE "Role";
+ END IF;
+END $$;
+
+-- DropEnum if exists
+DO $$ BEGIN
+ IF EXISTS (SELECT 1 FROM pg_type WHERE typname = 'RoleList') THEN
+ DROP TYPE "RoleList";
+ END IF;
+END $$;
+
+-- CreateTable if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'AdminRole') THEN
+ CREATE TABLE "AdminRole" (
+ "id" UUID NOT NULL,
+ "name" TEXT NOT NULL,
+ "permissions" BIGINT NOT NULL,
+ "position" SMALLINT NOT NULL,
+ CONSTRAINT "AdminRole_pkey" PRIMARY KEY ("id")
+ );
+ END IF;
+END $$;
+
+-- CreateTable if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'ProjectRole') THEN
+ CREATE TABLE "ProjectRole" (
+ "id" UUID NOT NULL,
+ "name" TEXT NOT NULL,
+ "permissions" BIGINT NOT NULL,
+ "projectId" UUID NOT NULL,
+ "position" SMALLINT NOT NULL,
+ CONSTRAINT "ProjectRole_pkey" PRIMARY KEY ("id")
+ );
+ END IF;
+END $$;
+
+-- CreateIndex if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'AdminRole_id_key') THEN
+ CREATE UNIQUE INDEX "AdminRole_id_key" ON "AdminRole"("id");
+ END IF;
+END $$;
+
+-- CreateIndex if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'AdminRole_name_key') THEN
+ CREATE UNIQUE INDEX "AdminRole_name_key" ON "AdminRole"("name");
+ END IF;
+END $$;
+
+-- CreateIndex if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'ProjectMembers_projectId_userId_key') THEN
+ CREATE UNIQUE INDEX "ProjectMembers_projectId_userId_key" ON "ProjectMembers"("projectId", "userId");
+ END IF;
+END $$;
+
+-- CreateIndex if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'ProjectRole_id_key') THEN
+ CREATE UNIQUE INDEX "ProjectRole_id_key" ON "ProjectRole"("id");
+ END IF;
+END $$;
+
+-- CreateIndex if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'Environment_projectId_name_key') THEN
+ CREATE UNIQUE INDEX "Environment_projectId_name_key" ON "Environment"("projectId", "name");
+ END IF;
+END $$;
+
+-- AddForeignKey if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'Log_projectId_fkey') THEN
+ ALTER TABLE "Log" ADD CONSTRAINT "Log_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE SET NULL ON UPDATE CASCADE;
+ END IF;
+END $$;
+
+-- AddForeignKey if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'Project_ownerId_fkey') THEN
+ ALTER TABLE "Project" ADD CONSTRAINT "Project_ownerId_fkey" FOREIGN KEY ("ownerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+ END IF;
+END $$;
+
+-- AddForeignKey if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'ProjectMembers_projectId_fkey') THEN
+ ALTER TABLE "ProjectMembers" ADD CONSTRAINT "ProjectMembers_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+ END IF;
+END $$;
+
+-- AddForeignKey if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'ProjectMembers_userId_fkey') THEN
+ ALTER TABLE "ProjectMembers" ADD CONSTRAINT "ProjectMembers_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+ END IF;
+END $$;
+
+-- AddForeignKey if not exists
+DO $$ BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'ProjectRole_projectId_fkey') THEN
+ ALTER TABLE "ProjectRole" ADD CONSTRAINT "ProjectRole_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+ END IF;
+END $$;
+
+-- AlterTable
+ALTER TABLE "User" ADD COLUMN IF NOT EXISTS "adminRoleIds" TEXT[];
diff --git a/apps/server-nestjs/src/prisma/migrations/20240725162050_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240725162050_dso/migration.sql
new file mode 100644
index 000000000..c9b41827b
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240725162050_dso/migration.sql
@@ -0,0 +1,5 @@
+-- DropIndex
+DROP INDEX "AdminRole_name_key";
+
+-- AlterTable
+ALTER TABLE "AdminRole" ADD COLUMN "oidcGroup" TEXT;
diff --git a/apps/server-nestjs/src/prisma/migrations/20240726210139_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240726210139_dso/migration.sql
new file mode 100644
index 000000000..265f262ab
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240726210139_dso/migration.sql
@@ -0,0 +1,14 @@
+/*
+ Warnings:
+
+ - Made the column `oidcGroup` on table `AdminRole` required. This step will fail if there are existing NULL values in that column.
+
+*/
+-- AlterTable
+
+UPDATE public."AdminRole"
+SET "oidcGroup"=''
+WHERE "oidcGroup" IS NULL;
+
+ALTER TABLE "AdminRole" ALTER COLUMN "oidcGroup" SET NOT NULL,
+ALTER COLUMN "oidcGroup" SET DEFAULT '';
diff --git a/apps/server-nestjs/src/prisma/migrations/20240808082632_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240808082632_dso/migration.sql
new file mode 100644
index 000000000..4fc276860
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240808082632_dso/migration.sql
@@ -0,0 +1,17 @@
+-- CreateTable
+CREATE TABLE "SystemSetting"
+(
+ "key" TEXT NOT NULL,
+ "value" TEXT NOT NULL,
+
+ CONSTRAINT "SystemSetting_pkey" PRIMARY KEY ("key")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "SystemSetting_key_key" ON "SystemSetting"("key");
+
+-- Create maintenance setting
+INSERT INTO "SystemSetting"
+ ("key", "value")
+VALUES
+ ('maintenance', 'off');
diff --git a/apps/server-nestjs/src/prisma/migrations/20240826143230_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240826143230_dso/migration.sql
new file mode 100644
index 000000000..95ab54869
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240826143230_dso/migration.sql
@@ -0,0 +1,3 @@
+INSERT INTO public."AdminRole"
+(id, "name", permissions, "position", "oidcGroup")
+VALUES('76229c96-4716-45bc-99da-00498ec9018c'::uuid, 'Admin', 2, 0, '/admin');
\ No newline at end of file
diff --git a/apps/server-nestjs/src/prisma/migrations/20240829085548_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240829085548_dso/migration.sql
new file mode 100644
index 000000000..c11648218
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240829085548_dso/migration.sql
@@ -0,0 +1,12 @@
+/*
+ Warnings:
+
+ - Made the column `externalUserName` on table `Repository` required. This step will fail if there are existing NULL values in that column.
+
+*/
+-- AlterTable
+UPDATE "Repository" SET "externalUserName" = '' WHERE "externalUserName" IS NULL;
+
+ALTER TABLE "Repository" ALTER COLUMN "externalUserName" SET NOT NULL,
+ALTER COLUMN "externalUserName" SET DEFAULT '',
+ALTER COLUMN "externalRepoUrl" SET DEFAULT '';
diff --git a/apps/server-nestjs/src/prisma/migrations/20240916141253_token/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240916141253_token/migration.sql
new file mode 100644
index 000000000..b0472cd80
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240916141253_token/migration.sql
@@ -0,0 +1,23 @@
+-- CreateEnum
+CREATE TYPE "TokenStatus" AS ENUM ('active', 'revoked');
+
+-- CreateTable
+CREATE TABLE "AdminToken" (
+ "id" UUID NOT NULL,
+ "name" TEXT NOT NULL,
+ "permissions" BIGINT NOT NULL,
+ "userId" UUID,
+ "expirationDate" TIMESTAMP(3),
+ "lastUse" TIMESTAMP(3),
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "status" "TokenStatus" NOT NULL DEFAULT 'active',
+ "hash" TEXT NOT NULL,
+
+ CONSTRAINT "AdminToken_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "AdminToken_id_key" ON "AdminToken"("id");
+
+-- AddForeignKey
+ALTER TABLE "AdminToken" ADD CONSTRAINT "AdminToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/apps/server-nestjs/src/prisma/migrations/20240919122331_optional_user_id/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240919122331_optional_user_id/migration.sql
new file mode 100644
index 000000000..47488b00c
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240919122331_optional_user_id/migration.sql
@@ -0,0 +1,8 @@
+-- DropForeignKey
+ALTER TABLE "Log" DROP CONSTRAINT "Log_userId_fkey";
+
+-- AlterTable
+ALTER TABLE "Log" ALTER COLUMN "userId" DROP NOT NULL;
+
+-- AddForeignKey
+ALTER TABLE "Log" ADD CONSTRAINT "Log_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
diff --git a/apps/server-nestjs/src/prisma/migrations/20240923142722_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240923142722_dso/migration.sql
new file mode 100644
index 000000000..18eca3ead
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240923142722_dso/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Log" ALTER COLUMN "requestId" SET DATA TYPE VARCHAR(36);
diff --git a/apps/server-nestjs/src/prisma/migrations/20240923155416_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240923155416_dso/migration.sql
new file mode 100644
index 000000000..74e0946f0
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240923155416_dso/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Zone" ADD COLUMN "argocdUrl" TEXT NOT NULL DEFAULT 'https://example.com';
diff --git a/apps/server-nestjs/src/prisma/migrations/20240928002900_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20240928002900_dso/migration.sql
new file mode 100644
index 000000000..41dac7535
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20240928002900_dso/migration.sql
@@ -0,0 +1,2 @@
+-- AlterEnum
+ALTER TYPE "ProjectStatus" ADD VALUE 'warning';
diff --git a/apps/server-nestjs/src/prisma/migrations/20241008125724_enabling_maven/migration.sql b/apps/server-nestjs/src/prisma/migrations/20241008125724_enabling_maven/migration.sql
new file mode 100644
index 000000000..ef888d5e5
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20241008125724_enabling_maven/migration.sql
@@ -0,0 +1,12 @@
+DO $$
+DECLARE
+ project_row RECORD;
+ registry_id INT;
+BEGIN
+ -- Début de la boucle sur chaque ligne de la table 'Project'
+ FOR project_row IN SELECT id FROM public."Project" WHERE status <> 'archived'::public."ProjectStatus" LOOP
+ INSERT INTO public."ProjectPlugin" ("projectId", "pluginName", "key", "value")
+ VALUES (project_row.id, 'nexus', 'activateMavenRepo', 'enabled')
+ ON CONFLICT DO NOTHING;
+ END LOOP;
+END $$;
\ No newline at end of file
diff --git a/apps/server-nestjs/src/prisma/migrations/20241104232540_add_usertype/migration.sql b/apps/server-nestjs/src/prisma/migrations/20241104232540_add_usertype/migration.sql
new file mode 100644
index 000000000..a57e5956c
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20241104232540_add_usertype/migration.sql
@@ -0,0 +1,12 @@
+-- CreateEnum
+CREATE TYPE "UserType" AS ENUM ('human', 'bot', 'ghost');
+
+-- AlterEnum
+ALTER TYPE "TokenStatus" ADD VALUE 'inactive';
+
+-- AlterTable
+ALTER TABLE "User" ADD COLUMN "type" "UserType" NOT NULL DEFAULT 'human';
+UPDATE "User" SET type = 'ghost' WHERE id = '04ac168a-2c4f-4816-9cce-af6c612e5912';
+
+-- AlterTable
+ALTER TABLE "User" ALTER COLUMN "type" DROP DEFAULT;
diff --git a/apps/server-nestjs/src/prisma/migrations/20241104232541_add_pat/migration.sql b/apps/server-nestjs/src/prisma/migrations/20241104232541_add_pat/migration.sql
new file mode 100644
index 000000000..71e15a312
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20241104232541_add_pat/migration.sql
@@ -0,0 +1,84 @@
+-- CreateTable (idempotent)
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.tables WHERE table_name = 'PersonalAccessToken') THEN
+ CREATE TABLE "PersonalAccessToken" (
+ "id" UUID NOT NULL,
+ "name" TEXT NOT NULL,
+ "userId" UUID NOT NULL,
+ "expirationDate" TIMESTAMP(3) NOT NULL,
+ "lastUse" TIMESTAMP(3),
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
+ "status" "TokenStatus" NOT NULL DEFAULT 'active',
+ "hash" TEXT NOT NULL,
+
+ CONSTRAINT "PersonalAccessToken_pkey" PRIMARY KEY ("id")
+ );
+ END IF;
+END $$;
+
+-- CreateIndex (idempotent)
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM pg_indexes WHERE indexname = 'PersonalAccessToken_id_key') THEN
+ CREATE UNIQUE INDEX "PersonalAccessToken_id_key" ON "PersonalAccessToken"("id");
+ END IF;
+END $$;
+
+-- AddForeignKey (idempotent)
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'PersonalAccessToken_userId_fkey') THEN
+ ALTER TABLE "PersonalAccessToken" ADD CONSTRAINT "PersonalAccessToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ END IF;
+END $$;
+
+-- Process AdminToken (idempotent)
+DO $$
+DECLARE
+ admin_token record;
+ user_uuid UUID;
+BEGIN
+ FOR admin_token IN SELECT "name", "id"
+ FROM public."AdminToken"
+ LOOP
+ -- Generate new UUID if user does not exist
+ user_uuid := COALESCE(
+ (SELECT id FROM public."User" WHERE email = concat(admin_token.name, '@bot.id')),
+ gen_random_uuid()
+ );
+
+ -- Insert user if not already exists
+ INSERT INTO public."User" (id, "firstName", "lastName", email, "createdAt", "updatedAt", "type")
+ VALUES(user_uuid, 'Bot Admin', admin_token.name, concat(admin_token.name, '@bot.id'), CURRENT_TIMESTAMP, CURRENT_TIMESTAMP, 'bot')
+ ON CONFLICT (id) DO NOTHING;
+
+ -- Update AdminToken with the new user ID
+ UPDATE public."AdminToken" SET "userId" = user_uuid WHERE id = admin_token.id;
+ END LOOP;
+END $$;
+
+-- Alter AdminToken userId column to NOT NULL (idempotent)
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.columns
+ WHERE table_name = 'AdminToken' AND column_name = 'userId' AND is_nullable = 'NO') THEN
+ ALTER TABLE public."AdminToken" ALTER COLUMN "userId" SET NOT NULL;
+ END IF;
+END $$;
+
+-- DropForeignKey if exists (idempotent)
+DO $$
+BEGIN
+ IF EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'AdminToken_userId_fkey') THEN
+ ALTER TABLE "AdminToken" DROP CONSTRAINT "AdminToken_userId_fkey";
+ END IF;
+END $$;
+
+-- AddForeignKey (idempotent)
+DO $$
+BEGIN
+ IF NOT EXISTS (SELECT 1 FROM information_schema.table_constraints WHERE constraint_name = 'AdminToken_userId_fkey') THEN
+ ALTER TABLE "AdminToken" ADD CONSTRAINT "AdminToken_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
+ END IF;
+END $$;
diff --git a/apps/server-nestjs/src/prisma/migrations/20241107142721_user_last_login/migration.sql b/apps/server-nestjs/src/prisma/migrations/20241107142721_user_last_login/migration.sql
new file mode 100644
index 000000000..521b2b10a
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20241107142721_user_last_login/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "User" ADD COLUMN "lastLogin" TIMESTAMP(3);
diff --git a/apps/server-nestjs/src/prisma/migrations/20241112101945_add_slug/migration.sql b/apps/server-nestjs/src/prisma/migrations/20241112101945_add_slug/migration.sql
new file mode 100644
index 000000000..a7500833b
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20241112101945_add_slug/migration.sql
@@ -0,0 +1,14 @@
+-- AlterTable
+ALTER TABLE "Project" ADD COLUMN "slug" TEXT;
+
+UPDATE public."Project" p
+SET slug = (
+ SELECT concat(org.name, '-', subp.name) FROM public."Project" subp
+ LEFT JOIN public."Organization" org on org."id" = subp."organizationId"
+ WHERE subp.id = p.id
+);
+
+ALTER TABLE public."Project" ALTER COLUMN "slug" SET NOT NULL;
+
+-- CreateIndex
+CREATE UNIQUE INDEX "Project_slug_key" ON "Project"("slug");
diff --git a/apps/server-nestjs/src/prisma/migrations/20241112102015_add_provisionning_version/migration.sql b/apps/server-nestjs/src/prisma/migrations/20241112102015_add_provisionning_version/migration.sql
new file mode 100644
index 000000000..b143cbeb9
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20241112102015_add_provisionning_version/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Project" ADD COLUMN "lastSuccessProvisionningVersion" TEXT;
diff --git a/apps/server-nestjs/src/prisma/migrations/20241216131342_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20241216131342_dso/migration.sql
new file mode 100644
index 000000000..7a8868190
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20241216131342_dso/migration.sql
@@ -0,0 +1,17 @@
+-- AlterTable
+ALTER TABLE "_ClusterToProject" ADD CONSTRAINT "_ClusterToProject_AB_pkey" PRIMARY KEY ("A", "B");
+
+-- DropIndex
+DROP INDEX "_ClusterToProject_AB_unique";
+
+-- AlterTable
+ALTER TABLE "_ClusterToStage" ADD CONSTRAINT "_ClusterToStage_AB_pkey" PRIMARY KEY ("A", "B");
+
+-- DropIndex
+DROP INDEX "_ClusterToStage_AB_unique";
+
+-- AlterTable
+ALTER TABLE "_QuotaToStage" ADD CONSTRAINT "_QuotaToStage_AB_pkey" PRIMARY KEY ("A", "B");
+
+-- DropIndex
+DROP INDEX "_QuotaToStage_AB_unique";
diff --git a/apps/server-nestjs/src/prisma/migrations/20250107104749_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20250107104749_dso/migration.sql
new file mode 100644
index 000000000..21ce77b8d
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20250107104749_dso/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Cluster" ADD COLUMN "external" BOOLEAN NOT NULL DEFAULT false;
diff --git a/apps/server-nestjs/src/prisma/migrations/20250121222953_prevent_upgrade/migration.sql b/apps/server-nestjs/src/prisma/migrations/20250121222953_prevent_upgrade/migration.sql
new file mode 100644
index 000000000..ac63cd639
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20250121222953_prevent_upgrade/migration.sql
@@ -0,0 +1,25 @@
+-- Vérifie les versions dans la table Project
+DO $$
+DECLARE
+ project_id TEXT;
+ project_name TEXT;
+ last_version TEXT;
+BEGIN
+ -- Boucle sur les projets non archivés
+ FOR project_id, project_name, last_version IN (
+ SELECT id, name, "lastSuccessProvisionningVersion"
+ FROM "Project"
+ WHERE "status" != 'archived'
+ )
+ LOOP
+ -- Vérifie si la version est NULL
+ IF last_version IS NULL THEN
+ RAISE EXCEPTION 'Le projet % (ID: %) a une version NULL.', project_name, project_id;
+ END IF;
+
+ -- Vérifie si la version est inférieure à 8.23.0 selon SemVer
+ IF (string_to_array(last_version, '.')::int[] < ARRAY[8,23,0]) THEN
+ RAISE EXCEPTION 'Le projet % (ID: %) a une version (%), inférieure à 8.23.0.', project_name, project_id, last_version;
+ END IF;
+ END LOOP;
+END $$;
diff --git a/apps/server-nestjs/src/prisma/migrations/20250121222954_drop_organization/migration.sql b/apps/server-nestjs/src/prisma/migrations/20250121222954_drop_organization/migration.sql
new file mode 100644
index 000000000..54871c901
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20250121222954_drop_organization/migration.sql
@@ -0,0 +1,15 @@
+/*
+ Warnings:
+
+ - You are about to drop the column `organizationId` on the `Project` table. All the data in the column will be lost.
+ - You are about to drop the `Organization` table. If the table is not empty, all the data it contains will be lost.
+
+*/
+-- DropForeignKey
+ALTER TABLE "Project" DROP CONSTRAINT "Project_organizationId_fkey";
+
+-- AlterTable
+ALTER TABLE "Project" DROP COLUMN "organizationId";
+
+-- DropTable
+DROP TABLE "Organization";
diff --git a/apps/server-nestjs/src/prisma/migrations/20250723141246_dso/migration.sql b/apps/server-nestjs/src/prisma/migrations/20250723141246_dso/migration.sql
new file mode 100644
index 000000000..68ca0df2f
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20250723141246_dso/migration.sql
@@ -0,0 +1,2 @@
+-- AlterTable
+ALTER TABLE "Cluster" ALTER COLUMN "infos" SET DATA TYPE VARCHAR(1000);
diff --git a/apps/server-nestjs/src/prisma/migrations/20250818095032_remove_quota/migration.sql b/apps/server-nestjs/src/prisma/migrations/20250818095032_remove_quota/migration.sql
new file mode 100644
index 000000000..8364090d8
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20250818095032_remove_quota/migration.sql
@@ -0,0 +1,44 @@
+-- AlterTable
+ALTER TABLE "Environment"
+ADD COLUMN "cpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "gpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "memory" REAL NOT NULL DEFAULT 0;
+
+COMMENT ON COLUMN "Environment".cpu IS 'CPU share as float (1 and 0.01 are valid values)';
+COMMENT ON COLUMN "Environment".gpu IS 'GPU share as float (1 and 0.01 are valid values)';
+COMMENT ON COLUMN "Environment".memory IS 'Memory value as GigaBytes (1 and 0.01 are valid values)';
+
+-- Use values from Quota. Memory is an extract of q.memory numeric value as it contains a unit (e.g. '2Gi').
+UPDATE "Environment"
+SET cpu = q.cpu, memory = COALESCE(NULLIF(regexp_replace(q.memory, '\D', '','g'), ''), '0')::numeric
+FROM "Quota" q
+WHERE "quotaId" = q."id";
+
+/*
+ Warnings:
+
+ - You are about to drop the column `quotaId` on the `Environment` table. All the data in the column will be lost.
+ - You are about to drop the `Quota` table. If the table is not empty, all the data it contains will be lost.
+ - You are about to drop the `_QuotaToStage` table. If the table is not empty, all the data it contains will be lost.
+
+*/
+-- DropForeignKey
+ALTER TABLE "Environment" DROP CONSTRAINT "Environment_quotaId_fkey";
+
+-- DropForeignKey
+ALTER TABLE "_QuotaToStage" DROP CONSTRAINT "_QuotaToStage_A_fkey";
+
+-- DropForeignKey
+ALTER TABLE "_QuotaToStage" DROP CONSTRAINT "_QuotaToStage_B_fkey";
+
+-- AlterTable
+ALTER TABLE "Environment" DROP COLUMN "quotaId",
+ALTER COLUMN "cpu" DROP DEFAULT,
+ALTER COLUMN "gpu" DROP DEFAULT,
+ALTER COLUMN "memory" DROP DEFAULT;
+
+-- DropTable
+DROP TABLE "Quota";
+
+-- DropTable
+DROP TABLE "_QuotaToStage";
diff --git a/apps/server-nestjs/src/prisma/migrations/20250825150622_add_cluster_resources/migration.sql b/apps/server-nestjs/src/prisma/migrations/20250825150622_add_cluster_resources/migration.sql
new file mode 100644
index 000000000..77f32b5ab
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20250825150622_add_cluster_resources/migration.sql
@@ -0,0 +1,5 @@
+-- AlterTable
+ALTER TABLE "Cluster"
+ADD COLUMN "cpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "gpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "memory" REAL NOT NULL DEFAULT 0;
diff --git a/apps/server-nestjs/src/prisma/migrations/20250916134454_add_project_resources/migration.sql b/apps/server-nestjs/src/prisma/migrations/20250916134454_add_project_resources/migration.sql
new file mode 100644
index 000000000..decca804a
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20250916134454_add_project_resources/migration.sql
@@ -0,0 +1,9 @@
+-- AlterTable
+ALTER TABLE "Project"
+ADD COLUMN "limitless" BOOLEAN NOT NULL DEFAULT true,
+ADD COLUMN "hprodCpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "hprodGpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "hprodMemory" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "prodCpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "prodGpu" REAL NOT NULL DEFAULT 0,
+ADD COLUMN "prodMemory" REAL NOT NULL DEFAULT 0;
diff --git a/apps/server-nestjs/src/prisma/migrations/20251028150522_rename_default_zone/migration.sql b/apps/server-nestjs/src/prisma/migrations/20251028150522_rename_default_zone/migration.sql
new file mode 100644
index 000000000..95f3a689d
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20251028150522_rename_default_zone/migration.sql
@@ -0,0 +1,4 @@
+-- Rename default zone
+UPDATE "Zone"
+SET ("label", "description") = ('DSO', 'Zone par défaut')
+WHERE slug = 'default';
diff --git a/apps/server-nestjs/src/prisma/migrations/20251208140951_add_argocd_inputs/migration.sql b/apps/server-nestjs/src/prisma/migrations/20251208140951_add_argocd_inputs/migration.sql
new file mode 100644
index 000000000..aadb6cdba
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/20251208140951_add_argocd_inputs/migration.sql
@@ -0,0 +1,4 @@
+-- AlterTable
+ALTER TABLE "Repository" ADD COLUMN "deployRevision" TEXT,
+ADD COLUMN "deployPath" TEXT,
+ADD COLUMN "helmValuesFiles" TEXT;
diff --git a/apps/server-nestjs/src/prisma/migrations/migration_lock.toml b/apps/server-nestjs/src/prisma/migrations/migration_lock.toml
new file mode 100644
index 000000000..648c57fd5
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (e.g., Git)
+provider = "postgresql"
\ No newline at end of file
diff --git a/apps/server-nestjs/src/prisma/schema/admin.prisma b/apps/server-nestjs/src/prisma/schema/admin.prisma
new file mode 100644
index 000000000..71cfb1754
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/schema/admin.prisma
@@ -0,0 +1,20 @@
+model AdminPlugin {
+ pluginName String
+ key String
+ value String
+
+ @@unique([pluginName, key])
+}
+
+model AdminRole {
+ id String @id @unique @default(uuid()) @db.Uuid
+ name String
+ permissions BigInt
+ position Int @db.SmallInt
+ oidcGroup String @default("")
+}
+
+model SystemSetting {
+ key String @id @unique
+ value String
+}
diff --git a/apps/server-nestjs/src/prisma/schema/project.prisma b/apps/server-nestjs/src/prisma/schema/project.prisma
new file mode 100644
index 000000000..e76048675
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/schema/project.prisma
@@ -0,0 +1,106 @@
+model Environment {
+ id String @id @default(uuid()) @db.Uuid
+ name String @db.VarChar(11)
+ projectId String @db.Uuid
+ memory Float @db.Real
+ cpu Float @db.Real
+ gpu Float @db.Real
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ clusterId String @db.Uuid
+ stageId String @db.Uuid
+ cluster Cluster @relation(fields: [clusterId], references: [id])
+ project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
+ stage Stage @relation(fields: [stageId], references: [id])
+
+ @@unique([projectId, name])
+}
+
+model Repository {
+ id String @id @default(uuid()) @db.Uuid
+ projectId String @db.Uuid
+ internalRepoName String
+ externalRepoUrl String @default("")
+ externalUserName String @default("")
+ isInfra Boolean @default(false)
+ isPrivate Boolean @default(false)
+ deployRevision String @default("")
+ deployPath String @default("")
+ helmValuesFiles String @default("")
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
+}
+
+model ProjectClusterHistory {
+ projectId String @db.Uuid
+ clusterId String @db.Uuid
+
+ @@unique([projectId, clusterId])
+}
+
+model ProjectMembers {
+ projectId String @db.Uuid
+ userId String @db.Uuid
+ roleIds String[]
+ project Project @relation(fields: [projectId], references: [id])
+ user User @relation(fields: [userId], references: [id])
+
+ @@unique([projectId, userId])
+}
+
+model ProjectPlugin {
+ pluginName String
+ projectId String @db.Uuid
+ key String
+ value String
+ project Project @relation(fields: [projectId], references: [id], onDelete: Cascade)
+
+ @@unique([projectId, pluginName, key])
+}
+
+model ProjectRole {
+ id String @id @unique @default(uuid()) @db.Uuid
+ name String
+ permissions BigInt
+ projectId String @db.Uuid
+ position Int @db.SmallInt
+ project Project @relation(fields: [projectId], references: [id])
+}
+
+model Project {
+ id String @id @unique @default(uuid()) @db.Uuid
+ name String
+ description String @default("")
+ status ProjectStatus @default(initializing)
+ locked Boolean @default(false)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ everyonePerms BigInt @default(896)
+ ownerId String @db.Uuid
+ environments Environment[]
+ logs Log[]
+ owner User @relation(fields: [ownerId], references: [id])
+ members ProjectMembers[]
+ plugins ProjectPlugin[]
+ roles ProjectRole[]
+ repositories Repository[]
+ clusters Cluster[] @relation("ClusterToProject")
+ slug String @unique
+ limitless Boolean @default(true)
+ hprodCpu Float @db.Real
+ hprodGpu Float @db.Real
+ hprodMemory Float @db.Real
+ prodCpu Float @db.Real
+ prodGpu Float @db.Real
+ prodMemory Float @db.Real
+ lastSuccessProvisionningVersion String?
+}
+
+enum ProjectStatus {
+ initializing
+ created
+ failed
+ archived
+ warning
+}
diff --git a/apps/server-nestjs/src/prisma/schema/schema.prisma b/apps/server-nestjs/src/prisma/schema/schema.prisma
new file mode 100644
index 000000000..aadf7fea1
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/schema/schema.prisma
@@ -0,0 +1,21 @@
+generator client {
+ provider = "prisma-client-js"
+}
+
+datasource db {
+ provider = "postgresql"
+ url = env("DB_URL")
+}
+
+model Log {
+ id String @id @default(uuid()) @db.Uuid
+ data Json
+ action String @default("")
+ userId String? @db.Uuid
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ requestId String? @db.VarChar(36)
+ projectId String? @db.Uuid
+ project Project? @relation(fields: [projectId], references: [id])
+ user User? @relation(fields: [userId], references: [id])
+}
diff --git a/apps/server-nestjs/src/prisma/schema/token.prisma b/apps/server-nestjs/src/prisma/schema/token.prisma
new file mode 100644
index 000000000..c0c55751c
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/schema/token.prisma
@@ -0,0 +1,30 @@
+model AdminToken {
+ id String @id @unique @default(uuid()) @db.Uuid
+ name String
+ permissions BigInt
+ userId String @db.Uuid
+ expirationDate DateTime?
+ lastUse DateTime?
+ createdAt DateTime @default(now())
+ status TokenStatus @default(active)
+ hash String
+ owner User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade)
+}
+
+model PersonalAccessToken {
+ id String @id @unique @default(uuid()) @db.Uuid
+ name String
+ userId String @db.Uuid
+ expirationDate DateTime
+ lastUse DateTime?
+ createdAt DateTime @default(now())
+ status TokenStatus @default(active)
+ hash String
+ owner User @relation(fields: [userId], references: [id], onDelete: Cascade, onUpdate: Cascade)
+}
+
+enum TokenStatus {
+ active
+ revoked
+ inactive
+}
diff --git a/apps/server-nestjs/src/prisma/schema/topography.prisma b/apps/server-nestjs/src/prisma/schema/topography.prisma
new file mode 100644
index 000000000..ad8e3be22
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/schema/topography.prisma
@@ -0,0 +1,53 @@
+model Cluster {
+ id String @id @unique @default(uuid()) @db.Uuid
+ label String @unique @db.VarChar(50)
+ privacy ClusterPrivacy @default(dedicated)
+ secretName String @unique @default(uuid()) @db.VarChar(50)
+ clusterResources Boolean @default(false)
+ kubeConfigId String @unique @db.Uuid
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ infos String? @db.VarChar(1000)
+ external Boolean @default(false)
+ memory Float @db.Real
+ cpu Float @db.Real
+ gpu Float @db.Real
+ zoneId String @db.Uuid
+ kubeconfig Kubeconfig @relation(fields: [kubeConfigId], references: [id], onDelete: Cascade)
+ zone Zone @relation(fields: [zoneId], references: [id])
+ environments Environment[]
+ projects Project[] @relation("ClusterToProject")
+ stages Stage[] @relation("ClusterToStage")
+}
+
+model Kubeconfig {
+ id String @id @unique @default(uuid()) @db.Uuid
+ user Json
+ cluster Json
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ parentCluster Cluster?
+}
+
+model Stage {
+ id String @id @unique @default(uuid()) @db.Uuid
+ name String @unique @db.VarChar
+ environments Environment[]
+ clusters Cluster[] @relation("ClusterToStage")
+}
+
+model Zone {
+ id String @id @unique @default(uuid()) @db.Uuid
+ slug String @unique @db.VarChar(10)
+ label String @db.VarChar(50)
+ description String? @db.VarChar(200)
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ argocdUrl String @default("https://example.com")
+ clusters Cluster[]
+}
+
+enum ClusterPrivacy {
+ public
+ dedicated
+}
diff --git a/apps/server-nestjs/src/prisma/schema/user.prisma b/apps/server-nestjs/src/prisma/schema/user.prisma
new file mode 100644
index 000000000..e90fb69f8
--- /dev/null
+++ b/apps/server-nestjs/src/prisma/schema/user.prisma
@@ -0,0 +1,23 @@
+model User {
+ id String @id @db.Uuid
+ firstName String
+ lastName String
+ email String @unique
+ createdAt DateTime @default(now())
+ updatedAt DateTime @updatedAt
+ lastLogin DateTime?
+ adminRoleIds String[]
+ type UserType
+
+ logs Log[]
+ projectsOwned Project[]
+ adminTokens AdminToken[]
+ projectMembers ProjectMembers[]
+ personalAccessTokens PersonalAccessToken[]
+}
+
+enum UserType {
+ human
+ bot
+ ghost
+}
diff --git a/apps/server-nestjs/test.backup/app.e2e-spec.ts b/apps/server-nestjs/test.backup/app.e2e-spec.ts
new file mode 100644
index 000000000..4ec856c86
--- /dev/null
+++ b/apps/server-nestjs/test.backup/app.e2e-spec.ts
@@ -0,0 +1,26 @@
+import { INestApplication } from '@nestjs/common';
+import { Test, TestingModule } from '@nestjs/testing';
+import request from 'supertest';
+import { App } from 'supertest/types';
+
+import { MainModule } from './../src/app.module';
+
+describe('AppController (e2e)', () => {
+ let app: INestApplication;
+
+ beforeEach(async () => {
+ const moduleFixture: TestingModule = await Test.createTestingModule({
+ imports: [MainModule],
+ }).compile();
+
+ app = moduleFixture.createNestApplication();
+ await app.init();
+ });
+
+ it('/ (GET)', () => {
+ return request(app.getHttpServer())
+ .get('/')
+ .expect(200)
+ .expect('Hello World!');
+ });
+});
diff --git a/apps/server-nestjs/test.backup/jest-e2e.json b/apps/server-nestjs/test.backup/jest-e2e.json
new file mode 100644
index 000000000..e9d912f3e
--- /dev/null
+++ b/apps/server-nestjs/test.backup/jest-e2e.json
@@ -0,0 +1,9 @@
+{
+ "moduleFileExtensions": ["js", "json", "ts"],
+ "rootDir": ".",
+ "testEnvironment": "node",
+ "testRegex": ".e2e-spec.ts$",
+ "transform": {
+ "^.+\\.(t|j)s$": "ts-jest"
+ }
+}
diff --git a/apps/server-nestjs/tsconfig.build.json b/apps/server-nestjs/tsconfig.build.json
new file mode 100644
index 000000000..64f86c6bd
--- /dev/null
+++ b/apps/server-nestjs/tsconfig.build.json
@@ -0,0 +1,4 @@
+{
+ "extends": "./tsconfig.json",
+ "exclude": ["node_modules", "test", "dist", "**/*spec.ts"]
+}
diff --git a/apps/server-nestjs/tsconfig.json b/apps/server-nestjs/tsconfig.json
new file mode 100644
index 000000000..ac93f0c95
--- /dev/null
+++ b/apps/server-nestjs/tsconfig.json
@@ -0,0 +1,28 @@
+{
+ "compilerOptions": {
+ "allowSyntheticDefaultImports": true,
+ "baseUrl": "./",
+ "declaration": true,
+ "emitDecoratorMetadata": true,
+ "esModuleInterop": true,
+ "experimentalDecorators": true,
+ "forceConsistentCasingInFileNames": true,
+ "incremental": true,
+ "isolatedModules": true,
+ "module": "nodenext",
+ "moduleResolution": "nodenext",
+ "noFallthroughCasesInSwitch": false,
+ "noImplicitAny": false,
+ "outDir": "./dist",
+ "paths": {
+ "@/*": ["src/*"]
+ },
+ "removeComments": true,
+ "resolvePackageJsonExports": true,
+ "skipLibCheck": true,
+ "sourceMap": true,
+ "strictBindCallApply": false,
+ "strictNullChecks": true,
+ "target": "ES2023"
+ }
+}
diff --git a/plugins/gitlab/src/project.ts b/plugins/gitlab/src/project.ts
index de0eb45c2..df3dc8e67 100644
--- a/plugins/gitlab/src/project.ts
+++ b/plugins/gitlab/src/project.ts
@@ -1,30 +1,37 @@
import * as fs from 'node:fs/promises'
import path from 'node:path'
-import { getApi } from './utils.js'
-const baseDir = path.resolve(import.meta.url, '../../files/').split(':')[1]
+import { getApi } from './utils.js'
-const gitlabCiYml = (await fs.readFile(`${baseDir}/.gitlab-ci.yml`)).toString()
-const mirrorSh = (await fs.readFile(`${baseDir}/mirror.sh`)).toString()
+export async function provisionMirror(repoId: number) {
+ const baseDir = path.resolve(import.meta.url, '../../files/').split(':')[1]
-const mirrorFirstActions: CommitAction[] = [
- {
- action: 'create',
- filePath: '.gitlab-ci.yml',
- content: gitlabCiYml,
- execute_filemode: false,
- },
- {
- action: 'create',
- filePath: 'mirror.sh',
- content: mirrorSh,
- execute_filemode: true,
- },
-]
+ const gitlabCiYml = (
+ await fs.readFile(`${baseDir}/.gitlab-ci.yml`)
+ ).toString()
+ const mirrorSh = (await fs.readFile(`${baseDir}/mirror.sh`)).toString()
-export async function provisionMirror(repoId: number) {
+ const mirrorFirstActions: CommitAction[] = [
+ {
+ action: 'create',
+ filePath: '.gitlab-ci.yml',
+ content: gitlabCiYml,
+ execute_filemode: false,
+ },
+ {
+ action: 'create',
+ filePath: 'mirror.sh',
+ content: mirrorSh,
+ execute_filemode: true,
+ },
+ ]
const api = getApi()
- await api.Commits.create(repoId, 'main', 'ci: :construction_worker: first mirror', mirrorFirstActions)
+ await api.Commits.create(
+ repoId,
+ 'main',
+ 'ci: :construction_worker: first mirror',
+ mirrorFirstActions,
+ )
}
interface CommitAction {
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index af807b2a1..0617cc818 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -191,7 +191,7 @@ importers:
version: 2.1.9(@types/node@24.10.0)(terser@5.44.1)
vite-plugin-pwa:
specifier: ^1.1.0
- version: 1.1.0(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0)
+ version: 1.1.0(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0)
vitest:
specifier: ^2.1.8
version: 2.1.9(@types/node@24.10.0)(jsdom@25.0.1)(terser@5.44.1)
@@ -366,6 +366,247 @@ importers:
specifier: ^2.1.8
version: 2.1.9(@types/node@24.10.0)(jsdom@25.0.1)(terser@5.44.1)
+ apps/server-nestjs:
+ dependencies:
+ '@cpn-console/argocd-plugin':
+ specifier: workspace:^
+ version: file:plugins/argocd(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/gitlab-plugin':
+ specifier: workspace:^
+ version: file:plugins/gitlab(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/harbor-plugin':
+ specifier: workspace:^
+ version: file:plugins/harbor(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/hooks':
+ specifier: workspace:^
+ version: file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/keycloak-plugin':
+ specifier: workspace:^
+ version: file:plugins/keycloak(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/kubernetes-plugin':
+ specifier: workspace:^
+ version: file:plugins/kubernetes(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/nexus-plugin':
+ specifier: workspace:^
+ version: file:plugins/nexus(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared':
+ specifier: workspace:^
+ version: file:packages/shared(@types/node@22.19.3)
+ '@cpn-console/sonarqube-plugin':
+ specifier: workspace:^
+ version: file:plugins/sonarqube(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/vault-plugin':
+ specifier: workspace:^
+ version: file:plugins/vault(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@fastify/cookie':
+ specifier: ^9.4.0
+ version: 9.4.0
+ '@fastify/helmet':
+ specifier: ^11.1.1
+ version: 11.1.1
+ '@fastify/session':
+ specifier: ^10.9.0
+ version: 10.9.0
+ '@fastify/swagger':
+ specifier: ^8.15.0
+ version: 8.15.0
+ '@fastify/swagger-ui':
+ specifier: ^4.2.0
+ version: 4.2.0
+ '@gitbeaker/core':
+ specifier: ^40.6.0
+ version: 40.6.0
+ '@gitbeaker/rest':
+ specifier: ^40.6.0
+ version: 40.6.0
+ '@kubernetes-models/argo-cd':
+ specifier: ^2.6.2
+ version: 2.7.2
+ '@kubernetes/client-node':
+ specifier: ^0.22.3
+ version: 0.22.3
+ '@nestjs/common':
+ specifier: ^11.0.1
+ version: 11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/config':
+ specifier: ^4.0.2
+ version: 4.0.2(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)
+ '@nestjs/core':
+ specifier: ^11.0.1
+ version: 11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/platform-express':
+ specifier: ^11.0.1
+ version: 11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+ '@prisma/client':
+ specifier: ^6.0.1
+ version: 6.19.0(prisma@6.19.0(magicast@0.3.5)(typescript@5.9.3))(typescript@5.9.3)
+ '@ts-rest/core':
+ specifier: ^3.52.1
+ version: 3.52.1(@types/node@22.19.3)(zod@3.25.76)
+ '@ts-rest/fastify':
+ specifier: ^3.52.1
+ version: 3.52.1(@ts-rest/core@3.52.1(@types/node@22.19.3)(zod@3.25.76))(fastify@4.29.1)(zod@3.25.76)
+ '@ts-rest/open-api':
+ specifier: ^3.52.1
+ version: 3.52.1(@ts-rest/core@3.52.1(@types/node@22.19.3)(zod@3.25.76))(zod@3.25.76)
+ axios:
+ specifier: 1.12.2
+ version: 1.12.2
+ date-fns:
+ specifier: ^4.1.0
+ version: 4.1.0
+ dotenv:
+ specifier: ^16.4.7
+ version: 16.6.1
+ fastify:
+ specifier: ^4.29.1
+ version: 4.29.1
+ fastify-keycloak-adapter:
+ specifier: 2.3.2
+ version: 2.3.2(patch_hash=6846b953fc520dd1ca6cb2e790cf190cbc3ed9fa9ff69739100458c520293447)
+ json-2-csv:
+ specifier: ^5.5.7
+ version: 5.5.10
+ mustache:
+ specifier: ^4.2.0
+ version: 4.2.0
+ nestjs-pino:
+ specifier: ^4.5.0
+ version: 4.5.0(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(pino-http@11.0.0)(pino@10.1.0)(rxjs@7.8.2)
+ pino-http:
+ specifier: ^11.0.0
+ version: 11.0.0
+ prisma:
+ specifier: ^6.0.1
+ version: 6.19.0(magicast@0.3.5)(typescript@5.9.3)
+ reflect-metadata:
+ specifier: ^0.2.2
+ version: 0.2.2
+ rxjs:
+ specifier: ^7.8.1
+ version: 7.8.2
+ undici:
+ specifier: ^7.1.0
+ version: 7.16.0
+ vitest-mock-extended:
+ specifier: ^2.0.2
+ version: 2.0.2(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ devDependencies:
+ '@cpn-console/eslint-config':
+ specifier: workspace:^
+ version: link:../../packages/eslintconfig
+ '@cpn-console/test-utils':
+ specifier: workspace:^
+ version: file:packages/test-utils(@types/node@22.19.3)
+ '@cpn-console/ts-config':
+ specifier: workspace:^
+ version: link:../../packages/tsconfig
+ '@eslint/eslintrc':
+ specifier: ^3.2.0
+ version: 3.3.1
+ '@eslint/js':
+ specifier: ^9.18.0
+ version: 9.39.1
+ '@faker-js/faker':
+ specifier: ^9.3.0
+ version: 9.9.0
+ '@nestjs/cli':
+ specifier: ^11.0.0
+ version: 11.0.14(@types/node@22.19.3)
+ '@nestjs/schematics':
+ specifier: ^11.0.0
+ version: 11.0.9(chokidar@4.0.3)(typescript@5.9.3)
+ '@nestjs/testing':
+ specifier: ^11.0.1
+ version: 11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(@nestjs/platform-express@11.1.11)
+ '@trivago/prettier-plugin-sort-imports':
+ specifier: ^6.0.0
+ version: 6.0.1(@vue/compiler-sfc@3.5.23)(prettier@3.7.4)
+ '@types/express':
+ specifier: ^5.0.0
+ version: 5.0.6
+ '@types/jest':
+ specifier: ^30.0.0
+ version: 30.0.0
+ '@types/node':
+ specifier: ^22.10.7
+ version: 22.19.3
+ '@types/supertest':
+ specifier: ^6.0.2
+ version: 6.0.3
+ '@vitest/coverage-v8':
+ specifier: ^2.1.8
+ version: 2.1.9(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ eslint:
+ specifier: ^9.18.0
+ version: 9.39.1(jiti@2.6.1)
+ eslint-config-prettier:
+ specifier: ^10.0.1
+ version: 10.1.8(eslint@9.39.1(jiti@2.6.1))
+ eslint-plugin-prettier:
+ specifier: ^5.2.2
+ version: 5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.7.4)
+ fastify-plugin:
+ specifier: ^5.0.1
+ version: 5.1.0
+ globals:
+ specifier: ^16.0.0
+ version: 16.5.0
+ jest:
+ specifier: ^30.0.0
+ version: 30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))
+ nodemon:
+ specifier: ^3.1.7
+ version: 3.1.10
+ pino-pretty:
+ specifier: ^13.0.0
+ version: 13.1.2
+ prettier:
+ specifier: ^3.4.2
+ version: 3.7.4
+ rimraf:
+ specifier: ^6.0.1
+ version: 6.1.0
+ source-map-support:
+ specifier: ^0.5.21
+ version: 0.5.21
+ supertest:
+ specifier: ^7.0.0
+ version: 7.2.1
+ ts-jest:
+ specifier: ^29.2.5
+ version: 29.4.6(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3)
+ ts-loader:
+ specifier: ^9.5.2
+ version: 9.5.4(typescript@5.9.3)(webpack@5.103.0)
+ ts-node:
+ specifier: ^10.9.2
+ version: 10.9.2(@types/node@22.19.3)(typescript@5.9.3)
+ ts-patch:
+ specifier: ^3.3.0
+ version: 3.3.0
+ tsconfig-paths:
+ specifier: ^4.2.0
+ version: 4.2.0
+ typescript:
+ specifier: ^5.7.3
+ version: 5.9.3
+ typescript-eslint:
+ specifier: ^8.20.0
+ version: 8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
+ typescript-transform-paths:
+ specifier: ^3.5.2
+ version: 3.5.5(typescript@5.9.3)
+ vite:
+ specifier: ^7.2.1
+ version: 7.2.1(@types/node@22.19.3)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1)
+ vite-node:
+ specifier: ^2.1.8
+ version: 2.1.9(@types/node@22.19.3)(terser@5.44.1)
+ vitest:
+ specifier: ^2.1.8
+ version: 2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1)
+
packages/eslintconfig:
devDependencies:
'@antfu/eslint-config':
@@ -964,6 +1205,37 @@ packages:
openapi3-ts: ^2.0.0 || ^3.0.0
zod: ^3.20.0
+ '@angular-devkit/core@19.2.17':
+ resolution: {integrity: sha512-Ah008x2RJkd0F+NLKqIpA34/vUGwjlprRCkvddjDopAWRzYn6xCkz1Tqwuhn0nR1Dy47wTLKYD999TYl5ONOAQ==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ chokidar: ^4.0.0
+ peerDependenciesMeta:
+ chokidar:
+ optional: true
+
+ '@angular-devkit/core@19.2.19':
+ resolution: {integrity: sha512-JbLL+4IMLMBgjLZlnPG4lYDfz4zGrJ/s6Aoon321NJKuw1Kb1k5KpFu9dUY0BqLIe8xPQ2UJBpI+xXdK5MXMHQ==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ peerDependencies:
+ chokidar: ^4.0.0
+ peerDependenciesMeta:
+ chokidar:
+ optional: true
+
+ '@angular-devkit/schematics-cli@19.2.19':
+ resolution: {integrity: sha512-7q9UY6HK6sccL9F3cqGRUwKhM7b/XfD2YcVaZ2WD7VMaRlRm85v6mRjSrfKIAwxcQU0UK27kMc79NIIqaHjzxA==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+ hasBin: true
+
+ '@angular-devkit/schematics@19.2.17':
+ resolution: {integrity: sha512-ADfbaBsrG8mBF6Mfs+crKA/2ykB8AJI50Cv9tKmZfwcUcyAdmTr+vVvhsBCfvUAEokigSsgqgpYxfkJVxhJYeg==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+
+ '@angular-devkit/schematics@19.2.19':
+ resolution: {integrity: sha512-J4Jarr0SohdrHcb40gTL4wGPCQ952IMWF1G/MSAQfBAPvA9ZKApYhpxcY7PmehVePve+ujpus1dGsJ7dPxz8Kg==}
+ engines: {node: ^18.19.1 || ^20.11.1 || >=22.0.0, npm: ^6.11.0 || ^7.5.6 || >=8.0.0, yarn: '>= 1.13.0'}
+
'@antfu/eslint-config@3.16.0':
resolution: {integrity: sha512-g6RAXUMeow9vexoOMYwCpByY2xSDpAD78q+rvQLvVpY6MFcxFD/zmdrZGYa/yt7LizK86m17kIYKOGLJ3L8P0w==}
hasBin: true
@@ -1177,6 +1449,27 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-async-generators@7.8.4':
+ resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-bigint@7.8.3':
+ resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-properties@7.12.13':
+ resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-class-static-block@7.14.5':
+ resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-import-assertions@7.27.1':
resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==}
engines: {node: '>=6.9.0'}
@@ -1189,6 +1482,70 @@ packages:
peerDependencies:
'@babel/core': ^7.0.0-0
+ '@babel/plugin-syntax-import-meta@7.10.4':
+ resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-json-strings@7.8.3':
+ resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-jsx@7.27.1':
+ resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4':
+ resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3':
+ resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4':
+ resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3':
+ resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3':
+ resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3':
+ resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5':
+ resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-top-level-await@7.14.5':
+ resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
+ '@babel/plugin-syntax-typescript@7.27.1':
+ resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==}
+ engines: {node: '>=6.9.0'}
+ peerDependencies:
+ '@babel/core': ^7.0.0-0
+
'@babel/plugin-syntax-unicode-sets-regex@7.18.6':
resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
engines: {node: '>=6.9.0'}
@@ -1552,6 +1909,9 @@ packages:
'@biomejs/wasm-nodejs@2.2.6':
resolution: {integrity: sha512-lUEcvW+2eyMTgCofknBT04AvY7KkQSqKe3Nv40+ZxWVlStsPB0v2RWLu7xks69Yxcb3TfNGsfq21OWkdrmO2NQ==}
+ '@borewit/text-codec@0.2.1':
+ resolution: {integrity: sha512-k7vvKPbf7J2fZ5klGRD9AeKfUvojuZIQ3BT5u7Jfv+puwXkUBUT5PVyMDfJZpy30CBDXGMgw7fguK/lpOMBvgw==}
+
'@cacheable/memoize@2.0.3':
resolution: {integrity: sha512-hl9wfQgpiydhQEIv7fkjEzTGE+tcosCXLKFDO707wYJ/78FVOlowb36djex5GdbSyeHnG62pomYLMuV/OT8Pbw==}
@@ -1567,6 +1927,10 @@ packages:
'@clack/prompts@0.9.1':
resolution: {integrity: sha512-JIpyaboYZeWYlyP0H+OoPPxd6nqueG/CmN6ixBiNFsIDHREevjIf0n0Ohh5gr5C8pEDknzgvz+pIJ8dMhzWIeg==}
+ '@colors/colors@1.5.0':
+ resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==}
+ engines: {node: '>=0.1.90'}
+
'@commitlint/cli@19.8.1':
resolution: {integrity: sha512-LXUdNIkspyxrlV6VDHWBmCZRtkEVRpBKxi2Gtw3J54cGWhLCTouVD/Q6ZSaSvd2YaDObWK8mDjrz3TIKtaQMAA==}
engines: {node: '>=v18'}
@@ -1636,6 +2000,43 @@ packages:
resolution: {integrity: sha512-/yCrWGCoA1SVKOks25EGadP9Pnj0oAIHGpl2wH2M2Y46dPM2ueb8wyCVOD7O3WCTkaJ0IkKvzhl1JY7+uCT2Dw==}
engines: {node: '>=v18'}
+ '@cpn-console/argocd-plugin@file:plugins/argocd':
+ resolution: {directory: plugins/argocd, type: directory}
+
+ '@cpn-console/gitlab-plugin@file:plugins/gitlab':
+ resolution: {directory: plugins/gitlab, type: directory}
+
+ '@cpn-console/harbor-plugin@file:plugins/harbor':
+ resolution: {directory: plugins/harbor, type: directory}
+
+ '@cpn-console/hooks@file:packages/hooks':
+ resolution: {directory: packages/hooks, type: directory}
+
+ '@cpn-console/keycloak-plugin@file:plugins/keycloak':
+ resolution: {directory: plugins/keycloak, type: directory}
+
+ '@cpn-console/kubernetes-plugin@file:plugins/kubernetes':
+ resolution: {directory: plugins/kubernetes, type: directory}
+
+ '@cpn-console/nexus-plugin@file:plugins/nexus':
+ resolution: {directory: plugins/nexus, type: directory}
+
+ '@cpn-console/shared@file:packages/shared':
+ resolution: {directory: packages/shared, type: directory}
+
+ '@cpn-console/sonarqube-plugin@file:plugins/sonarqube':
+ resolution: {directory: plugins/sonarqube, type: directory}
+
+ '@cpn-console/test-utils@file:packages/test-utils':
+ resolution: {directory: packages/test-utils, type: directory}
+
+ '@cpn-console/vault-plugin@file:plugins/vault':
+ resolution: {directory: plugins/vault, type: directory}
+
+ '@cspotcode/source-map-support@0.8.1':
+ resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
+ engines: {node: '>=12'}
+
'@csstools/color-helpers@5.1.0':
resolution: {integrity: sha512-S11EXWJyy0Mz5SYvRmY8nJYTFFd1LCNV+7cXyAgQtOOuzb4EsgfqDufL+9esx72/eLhsRdGZwaldu/h+E4t4BA==}
engines: {node: '>=18'}
@@ -2189,31 +2590,260 @@ packages:
peerDependencies:
vue: '>=3'
- '@isaacs/balanced-match@4.0.1':
- resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
- engines: {node: 20 || >=22}
-
- '@isaacs/brace-expansion@5.0.0':
- resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
- engines: {node: 20 || >=22}
-
- '@isaacs/cliui@8.0.2':
- resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
- engines: {node: '>=12'}
+ '@inquirer/ansi@1.0.2':
+ resolution: {integrity: sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==}
+ engines: {node: '>=18'}
- '@isaacs/fs-minipass@4.0.1':
- resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
- engines: {node: '>=18.0.0'}
+ '@inquirer/checkbox@4.3.2':
+ resolution: {integrity: sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@istanbuljs/schema@0.1.3':
- resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
- engines: {node: '>=8'}
+ '@inquirer/confirm@5.1.21':
+ resolution: {integrity: sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@jridgewell/gen-mapping@0.3.13':
- resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+ '@inquirer/core@10.3.2':
+ resolution: {integrity: sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
- '@jridgewell/remapping@2.3.5':
- resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+ '@inquirer/editor@4.2.23':
+ resolution: {integrity: sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/expand@4.0.23':
+ resolution: {integrity: sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/external-editor@1.0.3':
+ resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/figures@1.0.15':
+ resolution: {integrity: sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==}
+ engines: {node: '>=18'}
+
+ '@inquirer/input@4.3.1':
+ resolution: {integrity: sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/number@3.0.23':
+ resolution: {integrity: sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/password@4.0.23':
+ resolution: {integrity: sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/prompts@7.10.1':
+ resolution: {integrity: sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/prompts@7.3.2':
+ resolution: {integrity: sha512-G1ytyOoHh5BphmEBxSwALin3n1KGNYB6yImbICcRQdzXfOGbuJ9Jske/Of5Sebk339NSGGNfUshnzK8YWkTPsQ==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/rawlist@4.1.11':
+ resolution: {integrity: sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/search@3.2.2':
+ resolution: {integrity: sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/select@4.4.2':
+ resolution: {integrity: sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@inquirer/type@3.0.10':
+ resolution: {integrity: sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==}
+ engines: {node: '>=18'}
+ peerDependencies:
+ '@types/node': '>=18'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+
+ '@isaacs/balanced-match@4.0.1':
+ resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/brace-expansion@5.0.0':
+ resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==}
+ engines: {node: 20 || >=22}
+
+ '@isaacs/cliui@8.0.2':
+ resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
+ engines: {node: '>=12'}
+
+ '@isaacs/fs-minipass@4.0.1':
+ resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==}
+ engines: {node: '>=18.0.0'}
+
+ '@istanbuljs/load-nyc-config@1.1.0':
+ resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==}
+ engines: {node: '>=8'}
+
+ '@istanbuljs/schema@0.1.3':
+ resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==}
+ engines: {node: '>=8'}
+
+ '@jest/console@30.2.0':
+ resolution: {integrity: sha512-+O1ifRjkvYIkBqASKWgLxrpEhQAAE7hY77ALLUufSk5717KfOShg6IbqLmdsLMPdUiFvA2kTs0R7YZy+l0IzZQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/core@30.2.0':
+ resolution: {integrity: sha512-03W6IhuhjqTlpzh/ojut/pDB2LPRygyWX8ExpgHtQA8H/3K7+1vKmcINx5UzeOX1se6YEsBsOHQ1CRzf3fOwTQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/diff-sequences@30.0.1':
+ resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/environment@30.2.0':
+ resolution: {integrity: sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/expect-utils@30.2.0':
+ resolution: {integrity: sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/expect@30.2.0':
+ resolution: {integrity: sha512-V9yxQK5erfzx99Sf+7LbhBwNWEZ9eZay8qQ9+JSC0TrMR1pMDHLMY+BnVPacWU6Jamrh252/IKo4F1Xn/zfiqA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/fake-timers@30.2.0':
+ resolution: {integrity: sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/get-type@30.1.0':
+ resolution: {integrity: sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/globals@30.2.0':
+ resolution: {integrity: sha512-b63wmnKPaK+6ZZfpYhz9K61oybvbI1aMcIs80++JI1O1rR1vaxHUCNqo3ITu6NU0d4V34yZFoHMn/uoKr/Rwfw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/pattern@30.0.1':
+ resolution: {integrity: sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/reporters@30.2.0':
+ resolution: {integrity: sha512-DRyW6baWPqKMa9CzeiBjHwjd8XeAyco2Vt8XbcLFjiwCOEKOvy82GJ8QQnJE9ofsxCMPjH4MfH8fCWIHHDKpAQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ '@jest/schemas@30.0.5':
+ resolution: {integrity: sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/snapshot-utils@30.2.0':
+ resolution: {integrity: sha512-0aVxM3RH6DaiLcjj/b0KrIBZhSX1373Xci4l3cW5xiUWPctZ59zQ7jj4rqcJQ/Z8JuN/4wX3FpJSa3RssVvCug==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/source-map@30.0.1':
+ resolution: {integrity: sha512-MIRWMUUR3sdbP36oyNyhbThLHyJ2eEDClPCiHVbrYAe5g3CHRArIVpBw7cdSB5fr+ofSfIb2Tnsw8iEHL0PYQg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/test-result@30.2.0':
+ resolution: {integrity: sha512-RF+Z+0CCHkARz5HT9mcQCBulb1wgCP3FBvl9VFokMX27acKphwyQsNuWH3c+ojd1LeWBLoTYoxF0zm6S/66mjg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/test-sequencer@30.2.0':
+ resolution: {integrity: sha512-wXKgU/lk8fKXMu/l5Hog1R61bL4q5GCdT6OJvdAFz1P+QrpoFuLU68eoKuVc4RbrTtNnTL5FByhWdLgOPSph+Q==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/transform@30.2.0':
+ resolution: {integrity: sha512-XsauDV82o5qXbhalKxD7p4TZYYdwcaEXC77PPD2HixEFF+6YGppjrAAQurTl2ECWcEomHBMMNS9AH3kcCFx8jA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jest/types@30.2.0':
+ resolution: {integrity: sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
'@jridgewell/resolve-uri@3.1.2':
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
@@ -2228,6 +2858,9 @@ packages:
'@jridgewell/trace-mapping@0.3.31':
resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@jsep-plugin/assignment@1.3.0':
resolution: {integrity: sha512-VVgV+CXrhbMI3aSusQyclHkenWSAm95WaiKrMxRFam3JSUiIaQjoMIw2sEs/OX4XifnqeQUN4DYbJjlA8EfktQ==}
engines: {node: '>= 10.16.0'}
@@ -2272,6 +2905,10 @@ packages:
'@kubernetes/client-node@0.22.3':
resolution: {integrity: sha512-dG8uah3+HDJLpJEESshLRZlAZ4PgDeV9mZXT0u1g7oy4KMRzdZ7n5g0JEIlL6QhK51/2ztcIqURAnjfjJt6Z+g==}
+ '@lukeed/csprng@1.1.0':
+ resolution: {integrity: sha512-Z7C/xXCiGWsg0KuKsHTKJxbWhpI3Vs5GwLfOean7MGyVFGqdRgBbAjOCh6u4bbjPc/8MJ2pZmK/0DLdCbivLDA==}
+ engines: {node: '>=8'}
+
'@lukeed/ms@2.0.2':
resolution: {integrity: sha512-9I2Zn6+NJLfaGoz9jN3lpwDgAYvfGeNYdbAIjJOqzs4Tpc+VU3Jqq4IofSUBKajiDS8k9fZIg18/z13mpk1bsA==}
engines: {node: '>=8'}
@@ -2279,6 +2916,84 @@ packages:
'@napi-rs/wasm-runtime@0.2.12':
resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==}
+ '@nestjs/cli@11.0.14':
+ resolution: {integrity: sha512-YwP03zb5VETTwelXU+AIzMVbEZKk/uxJL+z9pw0mdG9ogAtqZ6/mpmIM4nEq/NU8D0a7CBRLcMYUmWW/55pfqw==}
+ engines: {node: '>= 20.11'}
+ hasBin: true
+ peerDependencies:
+ '@swc/cli': ^0.1.62 || ^0.3.0 || ^0.4.0 || ^0.5.0 || ^0.6.0 || ^0.7.0
+ '@swc/core': ^1.3.62
+ peerDependenciesMeta:
+ '@swc/cli':
+ optional: true
+ '@swc/core':
+ optional: true
+
+ '@nestjs/common@11.1.11':
+ resolution: {integrity: sha512-R/+A8XFqLgN8zNs2twhrOaE7dJbRQhdPX3g46am4RT/x8xGLqDphrXkUIno4cGUZHxbczChBAaAPTdPv73wDZA==}
+ peerDependencies:
+ class-transformer: '>=0.4.1'
+ class-validator: '>=0.13.2'
+ reflect-metadata: ^0.1.12 || ^0.2.0
+ rxjs: ^7.1.0
+ peerDependenciesMeta:
+ class-transformer:
+ optional: true
+ class-validator:
+ optional: true
+
+ '@nestjs/config@4.0.2':
+ resolution: {integrity: sha512-McMW6EXtpc8+CwTUwFdg6h7dYcBUpH5iUILCclAsa+MbCEvC9ZKu4dCHRlJqALuhjLw97pbQu62l4+wRwGeZqA==}
+ peerDependencies:
+ '@nestjs/common': ^10.0.0 || ^11.0.0
+ rxjs: ^7.1.0
+
+ '@nestjs/core@11.1.11':
+ resolution: {integrity: sha512-H9i+zT3RvHi7tDc+lCmWHJ3ustXveABCr+Vcpl96dNOxgmrx4elQSTC4W93Mlav2opfLV+p0UTHY6L+bpUA4zA==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@nestjs/common': ^11.0.0
+ '@nestjs/microservices': ^11.0.0
+ '@nestjs/platform-express': ^11.0.0
+ '@nestjs/websockets': ^11.0.0
+ reflect-metadata: ^0.1.12 || ^0.2.0
+ rxjs: ^7.1.0
+ peerDependenciesMeta:
+ '@nestjs/microservices':
+ optional: true
+ '@nestjs/platform-express':
+ optional: true
+ '@nestjs/websockets':
+ optional: true
+
+ '@nestjs/platform-express@11.1.11':
+ resolution: {integrity: sha512-kyABSskdMRIAMWL0SlbwtDy4yn59RL4HDdwHDz/fxWuv7/53YP8Y2DtV3/sHqY5Er0msMVTZrM38MjqXhYL7gw==}
+ peerDependencies:
+ '@nestjs/common': ^11.0.0
+ '@nestjs/core': ^11.0.0
+
+ '@nestjs/schematics@11.0.9':
+ resolution: {integrity: sha512-0NfPbPlEaGwIT8/TCThxLzrlz3yzDNkfRNpbL7FiplKq3w4qXpJg0JYwqgMEJnLQZm3L/L/5XjoyfJHUO3qX9g==}
+ peerDependencies:
+ typescript: '>=4.8.2'
+
+ '@nestjs/testing@11.1.11':
+ resolution: {integrity: sha512-Po2aZKXlxuySDEh3Gi05LJ7/BtfTAPRZ3KPTrbpNrTmgGr3rFgEGYpQwN50wXYw0pywoICiFLZSZ/qXsplf6NA==}
+ peerDependencies:
+ '@nestjs/common': ^11.0.0
+ '@nestjs/core': ^11.0.0
+ '@nestjs/microservices': ^11.0.0
+ '@nestjs/platform-express': ^11.0.0
+ peerDependenciesMeta:
+ '@nestjs/microservices':
+ optional: true
+ '@nestjs/platform-express':
+ optional: true
+
+ '@noble/hashes@1.8.0':
+ resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==}
+ engines: {node: ^14.21.3 || >=16}
+
'@nodelib/fs.scandir@2.1.5':
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
engines: {node: '>= 8'}
@@ -2291,6 +3006,14 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
+ '@nuxt/opencollective@0.4.1':
+ resolution: {integrity: sha512-GXD3wy50qYbxCJ652bDrDzgMr3NFEkIS374+IgFQKkCvk9yiYcLvX2XDYr7UyQxf4wK0e+yqDYRubZ0DtOxnmQ==}
+ engines: {node: ^14.18.0 || >=16.10.0, npm: '>=5.10.0'}
+ hasBin: true
+
+ '@paralleldrive/cuid2@2.3.1':
+ resolution: {integrity: sha512-XO7cAxhnTZl0Yggq6jOgjiOHhbgcO4NqFqwSmQpjK3b6TEE6Uj/jfSk6wzYyemh3+I0sHirKSetjQwn5cZktFw==}
+
'@pinojs/redact@0.4.0':
resolution: {integrity: sha512-k2ENnmBugE/rzQfEcdWHcCY+/FM3VLzH9cYEsbdsoqrvzAKRhUZeRNhAZvB8OitQJ1TBed3yqWtdjzS6wJKBwg==}
@@ -2505,6 +3228,15 @@ packages:
cpu: [x64]
os: [win32]
+ '@sinclair/typebox@0.34.46':
+ resolution: {integrity: sha512-kiW7CtS/NkdvTUjkjUJo7d5JsFfbJ14YjdhDk9KoEgK6nFjKNXZPrX0jfLA8ZlET4cFLHxOZ/0vFKOP+bOxIOQ==}
+
+ '@sinonjs/commons@3.0.1':
+ resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==}
+
+ '@sinonjs/fake-timers@13.0.5':
+ resolution: {integrity: sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==}
+
'@standard-schema/spec@1.0.0':
resolution: {integrity: sha512-m2bOd0f2RT9k8QJx1JN85cZYyH1RqFBdlwtkSlf4tBDYLCiiZnv1fIIwacK6cqwXavOydf0NPToMQgpKq+dVlA==}
@@ -2520,6 +3252,32 @@ packages:
'@swc/helpers@0.5.17':
resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==}
+ '@tokenizer/inflate@0.4.1':
+ resolution: {integrity: sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==}
+ engines: {node: '>=18'}
+
+ '@tokenizer/token@0.3.0':
+ resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==}
+
+ '@trivago/prettier-plugin-sort-imports@6.0.1':
+ resolution: {integrity: sha512-6B13DCWDfAfh4AEJ43gRgeCSAQmlKG5LHqHzHc0lbUwgBy0rX7o41US+46Fd4XiXBx+JDGEz3NBadCbUls0dUQ==}
+ engines: {node: '>= 20'}
+ peerDependencies:
+ '@vue/compiler-sfc': 3.x
+ prettier: 2.x - 3.x
+ prettier-plugin-ember-template-tag: '>= 2.0.0'
+ prettier-plugin-svelte: 3.x
+ svelte: 4.x || 5.x
+ peerDependenciesMeta:
+ '@vue/compiler-sfc':
+ optional: true
+ prettier-plugin-ember-template-tag:
+ optional: true
+ prettier-plugin-svelte:
+ optional: true
+ svelte:
+ optional: true
+
'@ts-rest/core@3.52.1':
resolution: {integrity: sha512-tAjz7Kxq/grJodcTA1Anop4AVRDlD40fkksEV5Mmal88VoZeRKAG8oMHsDwdwPZz+B/zgnz0q2sF+cm5M7Bc7g==}
peerDependencies:
@@ -2547,21 +3305,81 @@ packages:
'@ts-rest/core': ~3.52.0
zod: ^3.22.3
+ '@tsconfig/node10@1.0.12':
+ resolution: {integrity: sha512-UCYBaeFvM11aU2y3YPZ//O5Rhj+xKyzy7mvcIoAjASbigy8mHMryP5cK7dgjlz2hWxh1g5pLw084E0a/wlUSFQ==}
+
+ '@tsconfig/node12@1.0.11':
+ resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==}
+
+ '@tsconfig/node14@1.0.3':
+ resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==}
+
+ '@tsconfig/node16@1.0.4':
+ resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==}
+
'@tybys/wasm-util@0.10.1':
resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==}
+ '@types/babel__core@7.20.5':
+ resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==}
+
+ '@types/babel__generator@7.27.0':
+ resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==}
+
+ '@types/babel__template@7.4.4':
+ resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==}
+
+ '@types/babel__traverse@7.28.0':
+ resolution: {integrity: sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==}
+
+ '@types/body-parser@1.19.6':
+ resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==}
+
+ '@types/connect@3.4.38':
+ resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
+
'@types/conventional-commits-parser@5.0.2':
resolution: {integrity: sha512-BgT2szDXnVypgpNxOK8aL5SGjUdaQbC++WZNjF1Qge3Og2+zhHj+RWhmehLhYyvQwqAmvezruVfOf8+3m74W+g==}
+ '@types/cookiejar@2.1.5':
+ resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==}
+
'@types/debug@4.1.12':
resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==}
+ '@types/eslint-scope@3.7.7':
+ resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==}
+
+ '@types/eslint@9.6.1':
+ resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==}
+
'@types/estree@0.0.39':
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
'@types/estree@1.0.8':
resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==}
+ '@types/express-serve-static-core@5.1.0':
+ resolution: {integrity: sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA==}
+
+ '@types/express@5.0.6':
+ resolution: {integrity: sha512-sKYVuV7Sv9fbPIt/442koC7+IIwK5olP1KWeD88e/idgoJqDm3JV/YUiPwkoKK92ylff2MGxSz1CSjsXelx0YA==}
+
+ '@types/http-errors@2.0.5':
+ resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==}
+
+ '@types/istanbul-lib-coverage@2.0.6':
+ resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==}
+
+ '@types/istanbul-lib-report@3.0.3':
+ resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==}
+
+ '@types/istanbul-reports@3.0.4':
+ resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==}
+
+ '@types/jest@30.0.0':
+ resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==}
+
'@types/js-yaml@4.0.9':
resolution: {integrity: sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==}
@@ -2577,24 +3395,51 @@ packages:
'@types/mdast@4.0.4':
resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==}
+ '@types/methods@1.1.4':
+ resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==}
+
'@types/ms@2.1.0':
resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==}
+ '@types/node@22.19.3':
+ resolution: {integrity: sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==}
+
'@types/node@24.10.0':
resolution: {integrity: sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==}
'@types/normalize-package-data@2.4.4':
resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==}
+ '@types/qs@6.14.0':
+ resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==}
+
+ '@types/range-parser@1.2.7':
+ resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==}
+
'@types/resolve@1.20.2':
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
+ '@types/send@1.2.1':
+ resolution: {integrity: sha512-arsCikDvlU99zl1g69TcAB3mzZPpxgw0UQnaHeC1Nwb015xp8bknZv5rIfri9xTOcMuaVgvabfIRA7PSZVuZIQ==}
+
+ '@types/serve-static@2.2.0':
+ resolution: {integrity: sha512-8mam4H1NHLtu7nmtalF7eyBH14QyOASmcxHhSfEoRyr0nP/YdoesEtU+uSRvMe96TW/HPTtkoKqQLl53N7UXMQ==}
+
'@types/sinonjs__fake-timers@8.1.1':
resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
'@types/sizzle@2.3.10':
resolution: {integrity: sha512-TC0dmN0K8YcWEAEfiPi5gJP14eJe30TTGjkvek3iM/1NdHHsdCA/Td6GvNndMOo/iSnIsZ4HuuhrYPDAmbxzww==}
+ '@types/stack-utils@2.0.3':
+ resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==}
+
+ '@types/superagent@8.1.9':
+ resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==}
+
+ '@types/supertest@6.0.3':
+ resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==}
+
'@types/swagger-schema-official@2.0.25':
resolution: {integrity: sha512-T92Xav+Gf/Ik1uPW581nA+JftmjWPgskw/WBf4TJzxRG/SJ+DfNnNE+WuZ4mrXuzflQMqMkm1LSYjzYW7MB1Cg==}
@@ -2610,6 +3455,12 @@ packages:
'@types/unist@3.0.3':
resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==}
+ '@types/yargs-parser@21.0.3':
+ resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
+
+ '@types/yargs@17.0.35':
+ resolution: {integrity: sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==}
+
'@types/yauzl@2.10.3':
resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==}
@@ -2672,6 +3523,9 @@ packages:
resolution: {integrity: sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ '@ungap/structured-clone@1.3.0':
+ resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==}
+
'@unocss/astro@66.5.4':
resolution: {integrity: sha512-6KsilC1SiTBmEJRMuPl+Mg8KDWB1+DaVoirGZR7BAEtMf2NzrfQcR4+O/3DHtzb38pfb0K1aHCfWwCozHxLlfA==}
peerDependencies:
@@ -2995,6 +3849,57 @@ packages:
vue:
optional: true
+ '@webassemblyjs/ast@1.14.1':
+ resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==}
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2':
+ resolution: {integrity: sha512-6oXyTOzbKxGH4steLbLNOu71Oj+C8Lg34n6CqRvqfS2O71BxY6ByfMDRhBytzknj9yGUPVJ1qIKhRlAwO1AovA==}
+
+ '@webassemblyjs/helper-api-error@1.13.2':
+ resolution: {integrity: sha512-U56GMYxy4ZQCbDZd6JuvvNV/WFildOjsaWD3Tzzvmw/mas3cXzRJPMjP83JqEsgSbyrmaGjBfDtV7KDXV9UzFQ==}
+
+ '@webassemblyjs/helper-buffer@1.14.1':
+ resolution: {integrity: sha512-jyH7wtcHiKssDtFPRB+iQdxlDf96m0E39yb0k5uJVhFGleZFoNw1c4aeIcVUPPbXUVJ94wwnMOAqUHyzoEPVMA==}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ resolution: {integrity: sha512-FE8aCmS5Q6eQYcV3gI35O4J789wlQA+7JrqTTpJqn5emA4U2hvwJmvFRC0HODS+3Ye6WioDklgd6scJ3+PLnEA==}
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2':
+ resolution: {integrity: sha512-3QbLKy93F0EAIXLh0ogEVR6rOubA9AoZ+WRYhNbFyuB70j3dRdwH9g+qXhLAO0kiYGlg3TxDV+I4rQTr/YNXkA==}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ resolution: {integrity: sha512-ds5mXEqTJ6oxRoqjhWDU83OgzAYjwsCV8Lo/N+oRsNDmx/ZDpqalmrtgOMkHwxsG0iI//3BwWAErYRHtgn0dZw==}
+
+ '@webassemblyjs/ieee754@1.13.2':
+ resolution: {integrity: sha512-4LtOzh58S/5lX4ITKxnAK2USuNEvpdVV9AlgGQb8rJDHaLeHciwG4zlGr0j/SNWlr7x3vO1lDEsuePvtcDNCkw==}
+
+ '@webassemblyjs/leb128@1.13.2':
+ resolution: {integrity: sha512-Lde1oNoIdzVzdkNEAWZ1dZ5orIbff80YPdHx20mrHwHrVNNTjNr8E3xz9BdpcGqRQbAEa+fkrCb+fRFTl/6sQw==}
+
+ '@webassemblyjs/utf8@1.13.2':
+ resolution: {integrity: sha512-3NQWGjKTASY1xV5m7Hr0iPeXD9+RDobLll3T9d2AO+g3my8xy5peVyjSag4I50mR1bBSN/Ct12lo+R9tJk0NZQ==}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ resolution: {integrity: sha512-RNJUIQH/J8iA/1NzlE4N7KtyZNHi3w7at7hDjvRNm5rcUXa00z1vRz3glZoULfJ5mpvYhLybmVcwcjGrC1pRrQ==}
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ resolution: {integrity: sha512-AmomSIjP8ZbfGQhumkNvgC33AY7qtMCXnN6bL2u2Js4gVCg8fp735aEiMSBbDR7UQIj90n4wKAFUSEd0QN2Ukg==}
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ resolution: {integrity: sha512-PTcKLUNvBqnY2U6E5bdOQcSM+oVP/PmrDY9NzowJjislEjwP/C4an2303MCVS2Mg9d3AJpIGdUFIQQWbPds0Sw==}
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ resolution: {integrity: sha512-JLBl+KZ0R5qB7mCnud/yyX08jWFw5MsoalJ1pQ4EdFlgj9VdXKGuENGsiCIjegI1W7p91rUlcB/LB5yRJKNTcQ==}
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ resolution: {integrity: sha512-kPSSXE6De1XOR820C90RIo2ogvZG+c3KiHzqUoO/F34Y2shGzesfqv7o57xrxovZJH/MetF5UjroJ/R/3isoiw==}
+
+ '@xtuc/ieee754@1.2.0':
+ resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
+
+ '@xtuc/long@4.2.2':
+ resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
+
JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
hasBin: true
@@ -3002,11 +3907,25 @@ packages:
abstract-logging@2.0.1:
resolution: {integrity: sha512-2BjRTZxTPvheOvGbBslFSYOUkr+SjPtOnrLP33f+VIWLzezQpZcqVg7ja3L4dBXmzzgwT+a029jRx5PCi3JuiA==}
+ accepts@2.0.0:
+ resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==}
+ engines: {node: '>= 0.6'}
+
+ acorn-import-phases@1.0.4:
+ resolution: {integrity: sha512-wKmbr/DDiIXzEOiWrTTUcDm24kQ2vGfZQvM2fwg2vXqR5uW6aapr7ObPtj1th32b9u90/Pf4AItvdTh42fBmVQ==}
+ engines: {node: '>=10.13.0'}
+ peerDependencies:
+ acorn: ^8.14.0
+
acorn-jsx@5.3.2:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+ acorn-walk@8.3.4:
+ resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==}
+ engines: {node: '>=0.4.0'}
+
acorn@8.15.0:
resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==}
engines: {node: '>=0.4.0'}
@@ -3046,6 +3965,16 @@ packages:
peerDependencies:
ajv: ^8.0.0-beta.0
+ ajv-keywords@3.5.2:
+ resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
+ peerDependencies:
+ ajv: ^6.9.1
+
+ ajv-keywords@5.1.0:
+ resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
+ peerDependencies:
+ ajv: ^8.8.2
+
ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -3083,10 +4012,18 @@ packages:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
engines: {node: '>=8'}
+ ansi-styles@5.2.0:
+ resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
+ engines: {node: '>=10'}
+
ansi-styles@6.2.3:
resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==}
engines: {node: '>=12'}
+ ansis@4.2.0:
+ resolution: {integrity: sha512-HqZ5rWlFjGiV0tDm3UxxgNRqsOTniqoKZu0pIAfh7TZQMGuZK+hH0drySty0si0QXj1ieop4+SkSfPZBPPkHig==}
+ engines: {node: '>=14'}
+
any-base@1.1.0:
resolution: {integrity: sha512-uMgjozySS8adZZYePpaWs8cxB9/kdzmpX6SgJZ+wbz1K5eYk5QMYDVJaZKhxyIHUdnnJkfR7SVgStgH7LkGUyg==}
@@ -3094,6 +4031,9 @@ packages:
resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==}
engines: {node: '>= 8'}
+ append-field@1.0.0:
+ resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==}
+
arch@2.2.0:
resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==}
@@ -3101,6 +4041,12 @@ packages:
resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
engines: {node: '>=14'}
+ arg@4.1.3:
+ resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
+
+ argparse@1.0.10:
+ resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
+
argparse@2.0.1:
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
@@ -3111,6 +4057,9 @@ packages:
array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
+ array-timsort@1.0.3:
+ resolution: {integrity: sha512-/+3GRL7dDAGEfM6TseQk/U+mi18TU2Ms9I3UlLdUMhz2hbvGNTKdj9xniwXfUqgYhHxRx0+8UnKkvlNwVU+cWQ==}
+
array-union@2.1.0:
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
engines: {node: '>=8'}
@@ -3119,6 +4068,9 @@ packages:
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
engines: {node: '>= 0.4'}
+ asap@2.0.6:
+ resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==}
+
asn1.js@5.4.1:
resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==}
@@ -3176,6 +4128,20 @@ packages:
axios@1.12.2:
resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==}
+ babel-jest@30.2.0:
+ resolution: {integrity: sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0 || ^8.0.0-0
+
+ babel-plugin-istanbul@7.0.1:
+ resolution: {integrity: sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA==}
+ engines: {node: '>=12'}
+
+ babel-plugin-jest-hoist@30.2.0:
+ resolution: {integrity: sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
babel-plugin-polyfill-corejs2@0.4.14:
resolution: {integrity: sha512-Co2Y9wX854ts6U8gAAPXfn0GmAyctHuK8n0Yhfjd6t30g7yvKjspvvOo9yG+z52PZRgFErt7Ka2pYnXCjLKEpg==}
peerDependencies:
@@ -3191,6 +4157,17 @@ packages:
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
+ babel-preset-current-node-syntax@1.2.0:
+ resolution: {integrity: sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==}
+ peerDependencies:
+ '@babel/core': ^7.0.0 || ^8.0.0-0
+
+ babel-preset-jest@30.2.0:
+ resolution: {integrity: sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@babel/core': ^7.11.0 || ^8.0.0-beta.1
+
balanced-match@1.0.2:
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
@@ -3200,10 +4177,6 @@ packages:
base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- baseline-browser-mapping@2.8.25:
- resolution: {integrity: sha512-2NovHVesVF5TXefsGX1yzx1xgr7+m9JQenvz6FQY3qd+YXkKkYiv+vTCc7OriP9mcDZpTC5mAOYN4ocd29+erA==}
- hasBin: true
-
baseline-browser-mapping@2.9.11:
resolution: {integrity: sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==}
hasBin: true
@@ -3215,6 +4188,9 @@ packages:
resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==}
engines: {node: '>=8'}
+ bl@4.1.0:
+ resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
+
blob-util@2.0.2:
resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==}
@@ -3224,6 +4200,10 @@ packages:
bn.js@4.12.1:
resolution: {integrity: sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg==}
+ body-parser@2.2.1:
+ resolution: {integrity: sha512-nfDwkulwiZYQIGwxdy0RUmowMhKcFVcYXUU7m4QlKYim1rUtg83xm2yjZ40QjDuc291AJjjeSc9b++AWHSgSHw==}
+ engines: {node: '>=18'}
+
boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -3240,18 +4220,20 @@ packages:
brorand@1.1.0:
resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==}
- browserslist@4.27.0:
- resolution: {integrity: sha512-AXVQwdhot1eqLihwasPElhX2tAZiBjWdJ9i/Zcj2S6QYIjkx62OKSfnobkriB81C3l4w0rVy3Nt4jaTBltYEpw==}
- engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
- hasBin: true
-
browserslist@4.28.1:
resolution: {integrity: sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
- buffer-crc32@0.2.13:
- resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
+ bs-logger@0.2.6:
+ resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==}
+ engines: {node: '>= 6'}
+
+ bser@2.1.1:
+ resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
+
+ buffer-crc32@0.2.13:
+ resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
buffer-equal-constant-time@1.0.1:
resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==}
@@ -3266,6 +4248,10 @@ packages:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
+ busboy@1.6.0:
+ resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==}
+ engines: {node: '>=10.16.0'}
+
byline@5.0.0:
resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==}
engines: {node: '>=0.10.0'}
@@ -3320,6 +4306,14 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
+ camelcase@5.3.1:
+ resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==}
+ engines: {node: '>=6'}
+
+ camelcase@6.3.0:
+ resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==}
+ engines: {node: '>=10'}
+
camelize-ts@3.0.0:
resolution: {integrity: sha512-cgRwKKavoDKLTjO4FQTs3dRBePZp/2Y9Xpud0FhuCOTE86M2cniKN4CCXgRnsyXNMmQMifVHcv6SPaMtTx6ofQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -3349,9 +4343,16 @@ packages:
resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
+ char-regex@1.0.2:
+ resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==}
+ engines: {node: '>=10'}
+
character-entities@2.0.2:
resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==}
+ chardet@2.1.1:
+ resolution: {integrity: sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==}
+
check-error@2.1.1:
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
engines: {node: '>= 16'}
@@ -3368,6 +4369,10 @@ packages:
resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==}
engines: {node: '>=18'}
+ chrome-trace-event@1.0.4:
+ resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==}
+ engines: {node: '>=6.0'}
+
ci-info@4.3.1:
resolution: {integrity: sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==}
engines: {node: '>=8'}
@@ -3379,6 +4384,9 @@ packages:
citty@0.1.6:
resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==}
+ cjs-module-lexer@2.2.0:
+ resolution: {integrity: sha512-4bHTS2YuzUvtoLjdy+98ykbNB5jS0+07EvFNXerqZQJ89F7DI6ET7OQo/HJuW6K0aVsKA9hj9/RVb2kQVOrPDQ==}
+
clean-regexp@1.0.0:
resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
engines: {node: '>=4'}
@@ -3395,10 +4403,18 @@ packages:
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
engines: {node: '>=18'}
+ cli-spinners@2.9.2:
+ resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
+ engines: {node: '>=6'}
+
cli-table3@0.6.1:
resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==}
engines: {node: 10.* || >= 12.*}
+ cli-table3@0.6.5:
+ resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==}
+ engines: {node: 10.* || >= 12.*}
+
cli-truncate@2.1.0:
resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==}
engines: {node: '>=8'}
@@ -3407,6 +4423,10 @@ packages:
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
engines: {node: '>=18'}
+ cli-width@4.1.0:
+ resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
+ engines: {node: '>= 12'}
+
clipboard@2.0.11:
resolution: {integrity: sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==}
@@ -3414,6 +4434,17 @@ packages:
resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==}
engines: {node: '>=12'}
+ clone@1.0.4:
+ resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
+ engines: {node: '>=0.8'}
+
+ co@4.6.0:
+ resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==}
+ engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'}
+
+ collect-v8-coverage@1.0.3:
+ resolution: {integrity: sha512-1L5aqIkwPfiodaMgQunkF1zRhNqifHBmtbbbxcr6yVxxBnliw4TDOW6NxpO8DJLgJ16OT+Y4ztZqP6p/FtXnAw==}
+
color-convert@1.9.3:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
@@ -3448,10 +4479,18 @@ packages:
commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
+ commander@4.1.1:
+ resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
+ engines: {node: '>= 6'}
+
commander@6.2.1:
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
engines: {node: '>= 6'}
+ comment-json@4.4.1:
+ resolution: {integrity: sha512-r1To31BQD5060QdkC+Iheai7gHwoSZobzunqkf2/kQ6xIAfJyrKNAFUwdKvkK7Qgu7pVTKQEa7ok7Ed3ycAJgg==}
+ engines: {node: '>= 6'}
+
comment-parser@1.4.1:
resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==}
engines: {node: '>= 12.0.0'}
@@ -3463,9 +4502,16 @@ packages:
compare-func@2.0.0:
resolution: {integrity: sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==}
+ component-emitter@1.3.1:
+ resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==}
+
concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+ concat-stream@2.0.0:
+ resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==}
+ engines: {'0': node >= 6.0}
+
confbox@0.1.8:
resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==}
@@ -3480,6 +4526,14 @@ packages:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
+ content-disposition@1.0.1:
+ resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==}
+ engines: {node: '>=18'}
+
+ content-type@1.0.5:
+ resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
+ engines: {node: '>= 0.6'}
+
conventional-changelog-angular@7.0.0:
resolution: {integrity: sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==}
engines: {node: '>=16'}
@@ -3504,6 +4558,9 @@ packages:
resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==}
engines: {node: '>= 0.6'}
+ cookiejar@2.1.4:
+ resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==}
+
core-js-compat@3.46.0:
resolution: {integrity: sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==}
@@ -3516,6 +4573,10 @@ packages:
core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
+ cors@2.8.5:
+ resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==}
+ engines: {node: '>= 0.10'}
+
cosmiconfig-typescript-loader@6.2.0:
resolution: {integrity: sha512-GEN39v7TgdxgIoNcdkRE3uiAzQt3UXLyHbRHD6YoL048XAeOomyxaP+Hh/+2C6C2wYjxJ2onhJcsQp+L4YEkVQ==}
engines: {node: '>=v18'}
@@ -3524,6 +4585,15 @@ packages:
cosmiconfig: '>=9'
typescript: '>=5'
+ cosmiconfig@8.3.6:
+ resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==}
+ engines: {node: '>=14'}
+ peerDependencies:
+ typescript: '>=4.9.5'
+ peerDependenciesMeta:
+ typescript:
+ optional: true
+
cosmiconfig@9.0.0:
resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==}
engines: {node: '>=14'}
@@ -3533,6 +4603,9 @@ packages:
typescript:
optional: true
+ create-require@1.1.1:
+ resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==}
+
cron-validator@1.4.0:
resolution: {integrity: sha512-wGcJ9FCy65iaU6egSH8b5dZYJF7GU/3Jh06wzaT9lsa5dbqExjljmu+0cJ8cpKn+vUyZa/EM4WAxeLR6SypJXw==}
@@ -3637,6 +4710,14 @@ packages:
decode-named-character-reference@1.2.0:
resolution: {integrity: sha512-c6fcElNV6ShtZXmsgNgFFV5tVX2PaV4g+MOAkb8eXHvn6sryJBrZa9r0zV6+dtTyoCKxtDy5tyQ5ZwQuidtd+Q==}
+ dedent@1.7.1:
+ resolution: {integrity: sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==}
+ peerDependencies:
+ babel-plugin-macros: ^3.1.0
+ peerDependenciesMeta:
+ babel-plugin-macros:
+ optional: true
+
deeks@3.1.0:
resolution: {integrity: sha512-e7oWH1LzIdv/prMQ7pmlDlaVoL64glqzvNgkgQNgyec9ORPHrT2jaOqMtRyqJuwWjtfb6v+2rk9pmaHj+F137A==}
engines: {node: '>= 16'}
@@ -3656,6 +4737,9 @@ packages:
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
engines: {node: '>=0.10.0'}
+ defaults@1.0.4:
+ resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
+
define-data-property@1.1.4:
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
engines: {node: '>= 0.4'}
@@ -3685,13 +4769,24 @@ packages:
destr@2.0.5:
resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==}
+ detect-newline@3.1.0:
+ resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==}
+ engines: {node: '>=8'}
+
devlop@1.1.0:
resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ dezalgo@1.0.4:
+ resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==}
+
diff-sequences@27.5.1:
resolution: {integrity: sha512-k1gCAXAsNgLwEL+Y8Wvl+M6oEFj5bgazfZULpS5CneoPPXRaCCW7dm+q21Ky2VEE5X+VeRDBVg1Pcvvsr4TtNQ==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
+ diff@4.0.2:
+ resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
+ engines: {node: '>=0.3.1'}
+
dir-glob@3.0.1:
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
engines: {node: '>=8'}
@@ -3720,6 +4815,10 @@ packages:
resolution: {integrity: sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==}
engines: {node: '>=8'}
+ dotenv-expand@12.0.1:
+ resolution: {integrity: sha512-LaKRbou8gt0RNID/9RoI+J2rvXsBRPMV7p+ElHlPhcSARbCPDYcYG2s1TIzAfWv4YSgyY5taidWzzs31lNV3yQ==}
+ engines: {node: '>=12'}
+
dotenv@16.4.7:
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
engines: {node: '>=12'}
@@ -3748,6 +4847,9 @@ packages:
ecdsa-sig-formatter@1.0.11:
resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==}
+ ee-first@1.1.1:
+ resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
+
effect@3.18.4:
resolution: {integrity: sha512-b1LXQJLe9D11wfnOKAk3PKxuqYshQ0Heez+y5pnkd3jLj1yx9QhM72zZ9uUrOQyNvrs2GZZd/3maL0ZV18YuDA==}
@@ -3756,15 +4858,16 @@ packages:
engines: {node: '>=0.10.0'}
hasBin: true
- electron-to-chromium@1.5.245:
- resolution: {integrity: sha512-rdmGfW47ZhL/oWEJAY4qxRtdly2B98ooTJ0pdEI4jhVLZ6tNf8fPtov2wS1IRKwFJT92le3x4Knxiwzl7cPPpQ==}
-
electron-to-chromium@1.5.267:
resolution: {integrity: sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==}
elliptic@6.6.1:
resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==}
+ emittery@0.13.1:
+ resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==}
+ engines: {node: '>=12'}
+
emoji-regex@10.6.0:
resolution: {integrity: sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==}
@@ -3778,6 +4881,10 @@ packages:
resolution: {integrity: sha512-i6UzDscO/XfAcNYD75CfICkmfLedpyPDdozrLMmQc5ORaQcdMoc21OnlEylMIqI7U8eniKrPMxxtj8k0vhmJhA==}
engines: {node: '>=14'}
+ encodeurl@2.0.0:
+ resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==}
+ engines: {node: '>= 0.8'}
+
end-of-stream@1.4.5:
resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==}
@@ -3863,6 +4970,10 @@ packages:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
+ escape-string-regexp@2.0.0:
+ resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
+ engines: {node: '>=8'}
+
escape-string-regexp@4.0.0:
resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
engines: {node: '>=10'}
@@ -3888,6 +4999,12 @@ packages:
peerDependencies:
eslint: ^9.5.0
+ eslint-config-prettier@10.1.8:
+ resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==}
+ hasBin: true
+ peerDependencies:
+ eslint: '>=7.0.0'
+
eslint-flat-config-utils@1.1.0:
resolution: {integrity: sha512-W49wz7yQJGRfg4QSV3nwdO/fYcWetiSKhLV5YykfQMcqnIATNpoS7EPdINhLB9P3fmdjNmFtOgZjiKnCndWAnw==}
@@ -3981,6 +5098,20 @@ packages:
peerDependencies:
eslint: '>=8.45.0'
+ eslint-plugin-prettier@5.5.4:
+ resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+ peerDependencies:
+ '@types/eslint': '>=8.0.0'
+ eslint: '>=8.0.0'
+ eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0'
+ prettier: '>=3.0.0'
+ peerDependenciesMeta:
+ '@types/eslint':
+ optional: true
+ eslint-config-prettier:
+ optional: true
+
eslint-plugin-regexp@2.10.0:
resolution: {integrity: sha512-ovzQT8ESVn5oOe5a7gIDPD5v9bCSjIFJu57sVPDqgPRXicQzOnYfFN21WoQBQF18vrhT5o7UMKFwJQVVjyJ0ng==}
engines: {node: ^18 || >=20}
@@ -4026,6 +5157,10 @@ packages:
'@vue/compiler-sfc': ^3.3.0
eslint: ^8.50.0 || ^9.0.0
+ eslint-scope@5.1.1:
+ resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==}
+ engines: {node: '>=8.0.0'}
+
eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -4060,6 +5195,11 @@ packages:
resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ esprima@4.0.1:
+ resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
+ engines: {node: '>=4'}
+ hasBin: true
+
esquery@1.6.0:
resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==}
engines: {node: '>=0.10'}
@@ -4068,6 +5208,10 @@ packages:
resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
engines: {node: '>=4.0'}
+ estraverse@4.3.0:
+ resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
+ engines: {node: '>=4.0'}
+
estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
engines: {node: '>=4.0'}
@@ -4089,16 +5233,28 @@ packages:
resolution: {integrity: sha512-e3x3FBvGzeCIHhF+zhK8FZA2vC5uFn6b4HJjegUbIWrDb4mJ7JjTGMJY9VGIbRVpmSwHopNiaJibhjIr+HfLug==}
engines: {node: '>=6.0.0'}
+ etag@1.8.1:
+ resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
+ engines: {node: '>= 0.6'}
+
eventemitter2@6.4.7:
resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==}
eventemitter3@5.0.1:
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ events@3.3.0:
+ resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
+ engines: {node: '>=0.8.x'}
+
execa@4.1.0:
resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==}
engines: {node: '>=10'}
+ execa@5.1.1:
+ resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
+ engines: {node: '>=10'}
+
execa@8.0.1:
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
engines: {node: '>=16.17'}
@@ -4107,10 +5263,22 @@ packages:
resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==}
engines: {node: '>=4'}
+ exit-x@0.2.2:
+ resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==}
+ engines: {node: '>= 0.8.0'}
+
expect-type@1.2.2:
resolution: {integrity: sha512-JhFGDVJ7tmDJItKhYgJCGLOWjuK9vPxiXoUFLwLDc99NlmklilbiQJwoctZtt13+xMw91MCk/REan6MWHqDjyA==}
engines: {node: '>=12.0.0'}
+ expect@30.2.0:
+ resolution: {integrity: sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ express@5.2.1:
+ resolution: {integrity: sha512-hIS4idWWai69NezIdRt2xFVofaF4j+6INOpJlVOLDO8zXGpUVEVzIYk12UUi2JzjEzWL3IOAxcTubgz9Po0yXw==}
+ engines: {node: '>= 18'}
+
exsolve@1.0.7:
resolution: {integrity: sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw==}
@@ -4142,6 +5310,9 @@ packages:
fast-deep-equal@3.1.3:
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+ fast-diff@1.3.0:
+ resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==}
+
fast-glob@3.3.3:
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
engines: {node: '>=8.6.0'}
@@ -4203,6 +5374,9 @@ packages:
fault@2.0.1:
resolution: {integrity: sha512-WtySTkS4OKev5JtpHXnib4Gxiurzh5NCGvWrFaZ34m6JehfTUhKZvn9njTfw48t6JumVQOmrKqpmGcdwxnhqBQ==}
+ fb-watchman@2.0.2:
+ resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
+
fd-slicer@1.1.0:
resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==}
@@ -4226,6 +5400,10 @@ packages:
resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
engines: {node: '>=16.0.0'}
+ file-type@21.2.0:
+ resolution: {integrity: sha512-vCYBgFOrJQLoTzDyAXAL/RFfKnXXpUYt4+tipVy26nJJhT7ftgGETf2tAQF59EEL61i3MrorV/PG6tf7LJK7eg==}
+ engines: {node: '>=20'}
+
filelist@1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
@@ -4233,6 +5411,10 @@ packages:
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
engines: {node: '>=8'}
+ finalhandler@2.1.1:
+ resolution: {integrity: sha512-S8KoZgRZN+a5rNwqTxlZZePjT/4cnm0ROV70LedRHZ0p8u9fRID0hJUZQpkKLzro8LfmC8sx23bY6tVNxv8pQA==}
+ engines: {node: '>= 18.0.0'}
+
find-my-way@8.2.2:
resolution: {integrity: sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA==}
engines: {node: '>=14'}
@@ -4288,6 +5470,13 @@ packages:
forever-agent@0.6.1:
resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
+ fork-ts-checker-webpack-plugin@9.1.0:
+ resolution: {integrity: sha512-mpafl89VFPJmhnJ1ssH+8wmM2b50n+Rew5x42NeI2U78aRWgtkEtGmctp7iT16UjquJTjorEmIfESj3DxdW84Q==}
+ engines: {node: '>=14.21.3'}
+ peerDependencies:
+ typescript: '>3.6.0'
+ webpack: ^5.11.0
+
form-data@2.3.3:
resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==}
engines: {node: '>= 0.12'}
@@ -4296,10 +5485,18 @@ packages:
resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==}
engines: {node: '>= 6'}
+ form-data@4.0.5:
+ resolution: {integrity: sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==}
+ engines: {node: '>= 6'}
+
format@0.2.2:
resolution: {integrity: sha512-wzsgA6WOq+09wrU1tsJ09udeR/YZRaeArL9e1wPbFg3GG2yDnC2ldKpxs4xunpFF9DgqCqOIra3bc1HWrJ37Ww==}
engines: {node: '>=0.4.x'}
+ formidable@3.5.4:
+ resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==}
+ engines: {node: '>=14.0.0'}
+
forwarded@0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
@@ -4307,10 +5504,21 @@ packages:
fp-ts@2.16.9:
resolution: {integrity: sha512-+I2+FnVB+tVaxcYyQkHUq7ZdKScaBlX53A41mxQtpIccsfyv8PzdzP7fzp2AY832T4aoK6UZ5WRX/ebGd8uZuQ==}
+ fresh@2.0.0:
+ resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==}
+ engines: {node: '>= 0.8'}
+
+ fs-extra@10.1.0:
+ resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
+ engines: {node: '>=12'}
+
fs-extra@9.1.0:
resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==}
engines: {node: '>=10'}
+ fs-monkey@1.1.0:
+ resolution: {integrity: sha512-QMUezzXWII9EV5aTFXW1UBVUO77wYPpjqIF8/AviUCThNeSYZykpoTixUeaNNBwmCev0AMDWMAni+f8Hxb1IFw==}
+
fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -4357,6 +5565,10 @@ packages:
get-own-enumerable-property-symbols@3.0.2:
resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==}
+ get-package-type@0.1.0:
+ resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==}
+ engines: {node: '>=8.0.0'}
+
get-proto@1.0.1:
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
engines: {node: '>= 0.4'}
@@ -4365,6 +5577,10 @@ packages:
resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==}
engines: {node: '>=8'}
+ get-stream@6.0.1:
+ resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
+ engines: {node: '>=10'}
+
get-stream@8.0.1:
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
engines: {node: '>=16'}
@@ -4399,6 +5615,9 @@ packages:
resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
engines: {node: '>=10.13.0'}
+ glob-to-regexp@0.4.1:
+ resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==}
+
glob@10.4.5:
resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==}
hasBin: true
@@ -4408,6 +5627,10 @@ packages:
engines: {node: 20 || >=22}
hasBin: true
+ glob@13.0.0:
+ resolution: {integrity: sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA==}
+ engines: {node: 20 || >=22}
+
glob@7.2.3:
resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
deprecated: Glob versions prior to v9 are no longer supported
@@ -4448,6 +5671,10 @@ packages:
resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==}
engines: {node: '>=18'}
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
+ engines: {node: '>=18'}
+
globalthis@1.0.4:
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
engines: {node: '>= 0.4'}
@@ -4483,6 +5710,11 @@ packages:
resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==}
engines: {node: '>=10'}
+ handlebars@4.7.8:
+ resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
+ engines: {node: '>=0.4.7'}
+ hasBin: true
+
har-schema@2.0.0:
resolution: {integrity: sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==}
engines: {node: '>=4'}
@@ -4568,6 +5800,10 @@ packages:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
engines: {node: '>= 0.8'}
+ http-errors@2.0.1:
+ resolution: {integrity: sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==}
+ engines: {node: '>= 0.8'}
+
http-proxy-agent@7.0.2:
resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==}
engines: {node: '>= 14'}
@@ -4591,6 +5827,10 @@ packages:
resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==}
engines: {node: '>=8.12.0'}
+ human-signals@2.1.0:
+ resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
+ engines: {node: '>=10.17.0'}
+
human-signals@5.0.0:
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
engines: {node: '>=16.17.0'}
@@ -4604,6 +5844,10 @@ packages:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
engines: {node: '>=0.10.0'}
+ iconv-lite@0.7.1:
+ resolution: {integrity: sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==}
+ engines: {node: '>=0.10.0'}
+
idb@7.1.1:
resolution: {integrity: sha512-gchesWBzyvGHRO9W8tzUWFDycow5gwjvFKfyV9FF32Y7F50yZMp7mP+T2mJIWFx49zicqyC4uefHM17o6xKIVQ==}
@@ -4628,6 +5872,11 @@ packages:
resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
engines: {node: '>=6'}
+ import-local@3.2.0:
+ resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==}
+ engines: {node: '>=8'}
+ hasBin: true
+
import-meta-resolve@4.2.0:
resolution: {integrity: sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==}
@@ -4745,6 +5994,10 @@ packages:
resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==}
engines: {node: '>=18'}
+ is-generator-fn@2.1.0:
+ resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==}
+ engines: {node: '>=6'}
+
is-generator-function@1.1.2:
resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
engines: {node: '>= 0.4'}
@@ -4757,6 +6010,10 @@ packages:
resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==}
engines: {node: '>=10'}
+ is-interactive@1.0.0:
+ resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==}
+ engines: {node: '>=8'}
+
is-map@2.0.3:
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
engines: {node: '>= 0.4'}
@@ -4795,6 +6052,9 @@ packages:
is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
+ is-promise@4.0.0:
+ resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==}
+
is-regex@1.2.1:
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
engines: {node: '>= 0.4'}
@@ -4883,6 +6143,10 @@ packages:
resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==}
engines: {node: '>=8'}
+ istanbul-lib-instrument@6.0.3:
+ resolution: {integrity: sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q==}
+ engines: {node: '>=10'}
+
istanbul-lib-report@3.0.1:
resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==}
engines: {node: '>=10'}
@@ -4895,6 +6159,10 @@ packages:
resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==}
engines: {node: '>=8'}
+ iterare@1.2.1:
+ resolution: {integrity: sha512-RKYVTCjAnRthyJes037NX/IiqeidgN1xc3j1RjFfECFp28A1GVwK9nA+i0rJPaHqSZwygLzRnFlzUuHFoWWy+Q==}
+ engines: {node: '>=6'}
+
jackspeak@3.4.3:
resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==}
@@ -4907,9 +6175,144 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ javascript-natural-sort@0.7.1:
+ resolution: {integrity: sha512-nO6jcEfZWQXDhOiBtG2KvKyEptz7RVbpGP4vTD2hLBdmNQSsCiicO2Ioinv6UI4y9ukqnBpy+XZ9H6uLNgJTlw==}
+
javascript-time-ago@2.5.12:
resolution: {integrity: sha512-s8PPq2HQ3HIbSU0SjhNvTitf5VoXbQWof9q6k3gIX7F2il0ptjD5lONTDccpuKt/2U7RjbCp/TCHPK7eDwO7zQ==}
+ jest-changed-files@30.2.0:
+ resolution: {integrity: sha512-L8lR1ChrRnSdfeOvTrwZMlnWV8G/LLjQ0nG9MBclwWZidA2N5FviRki0Bvh20WRMOX31/JYvzdqTJrk5oBdydQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-circus@30.2.0:
+ resolution: {integrity: sha512-Fh0096NC3ZkFx05EP2OXCxJAREVxj1BcW/i6EWqqymcgYKWjyyDpral3fMxVcHXg6oZM7iULer9wGRFvfpl+Tg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-cli@30.2.0:
+ resolution: {integrity: sha512-Os9ukIvADX/A9sLt6Zse3+nmHtHaE6hqOsjQtNiugFTbKRHYIYtZXNGNK9NChseXy7djFPjndX1tL0sCTlfpAA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
+ jest-config@30.2.0:
+ resolution: {integrity: sha512-g4WkyzFQVWHtu6uqGmQR4CQxz/CH3yDSlhzXMWzNjDx843gYjReZnMRanjRCq5XZFuQrGDxgUaiYWE8BRfVckA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ peerDependencies:
+ '@types/node': '*'
+ esbuild-register: '>=3.4.0'
+ ts-node: '>=9.0.0'
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ esbuild-register:
+ optional: true
+ ts-node:
+ optional: true
+
+ jest-diff@30.2.0:
+ resolution: {integrity: sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-docblock@30.2.0:
+ resolution: {integrity: sha512-tR/FFgZKS1CXluOQzZvNH3+0z9jXr3ldGSD8bhyuxvlVUwbeLOGynkunvlTMxchC5urrKndYiwCFC0DLVjpOCA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-each@30.2.0:
+ resolution: {integrity: sha512-lpWlJlM7bCUf1mfmuqTA8+j2lNURW9eNafOy99knBM01i5CQeY5UH1vZjgT9071nDJac1M4XsbyI44oNOdhlDQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-environment-node@30.2.0:
+ resolution: {integrity: sha512-ElU8v92QJ9UrYsKrxDIKCxu6PfNj4Hdcktcn0JX12zqNdqWHB0N+hwOnnBBXvjLd2vApZtuLUGs1QSY+MsXoNA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-haste-map@30.2.0:
+ resolution: {integrity: sha512-sQA/jCb9kNt+neM0anSj6eZhLZUIhQgwDt7cPGjumgLM4rXsfb9kpnlacmvZz3Q5tb80nS+oG/if+NBKrHC+Xw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-leak-detector@30.2.0:
+ resolution: {integrity: sha512-M6jKAjyzjHG0SrQgwhgZGy9hFazcudwCNovY/9HPIicmNSBuockPSedAP9vlPK6ONFJ1zfyH/M2/YYJxOz5cdQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-matcher-utils@30.2.0:
+ resolution: {integrity: sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-message-util@30.2.0:
+ resolution: {integrity: sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-mock@30.2.0:
+ resolution: {integrity: sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-pnp-resolver@1.2.3:
+ resolution: {integrity: sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w==}
+ engines: {node: '>=6'}
+ peerDependencies:
+ jest-resolve: '*'
+ peerDependenciesMeta:
+ jest-resolve:
+ optional: true
+
+ jest-regex-util@30.0.1:
+ resolution: {integrity: sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-resolve-dependencies@30.2.0:
+ resolution: {integrity: sha512-xTOIGug/0RmIe3mmCqCT95yO0vj6JURrn1TKWlNbhiAefJRWINNPgwVkrVgt/YaerPzY3iItufd80v3lOrFJ2w==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-resolve@30.2.0:
+ resolution: {integrity: sha512-TCrHSxPlx3tBY3hWNtRQKbtgLhsXa1WmbJEqBlTBrGafd5fiQFByy2GNCEoGR+Tns8d15GaL9cxEzKOO3GEb2A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-runner@30.2.0:
+ resolution: {integrity: sha512-PqvZ2B2XEyPEbclp+gV6KO/F1FIFSbIwewRgmROCMBo/aZ6J1w8Qypoj2pEOcg3G2HzLlaP6VUtvwCI8dM3oqQ==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-runtime@30.2.0:
+ resolution: {integrity: sha512-p1+GVX/PJqTucvsmERPMgCPvQJpFt4hFbM+VN3n8TMo47decMUcJbt+rgzwrEme0MQUA/R+1de2axftTHkKckg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-snapshot@30.2.0:
+ resolution: {integrity: sha512-5WEtTy2jXPFypadKNpbNkZ72puZCa6UjSr/7djeecHWOu7iYhSXSnHScT8wBz3Rn8Ena5d5RYRcsyKIeqG1IyA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-util@30.2.0:
+ resolution: {integrity: sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-validate@30.2.0:
+ resolution: {integrity: sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-watcher@30.2.0:
+ resolution: {integrity: sha512-PYxa28dxJ9g777pGm/7PrbnMeA0Jr7osHP9bS7eJy9DuAjMgdGtxgf0uKMyoIsTWAkIbUW5hSDdJ3urmgXBqxg==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest-worker@27.5.1:
+ resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
+ engines: {node: '>= 10.13.0'}
+
+ jest-worker@30.2.0:
+ resolution: {integrity: sha512-0Q4Uk8WF7BUwqXHuAjc23vmopWJw5WH7w2tqBoUOZpOjW/ZnR44GXXd1r82RvnmI2GZge3ivrYXk/BE2+VtW2g==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
+ jest@30.2.0:
+ resolution: {integrity: sha512-F26gjC0yWN8uAA5m5Ss8ZQf5nDHWGlN/xWZIh8S5SRbsEKBovwZhxGd6LJlbZYxBgCYOtreSUyb8hpXyGC5O4A==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0
+ peerDependenciesMeta:
+ node-notifier:
+ optional: true
+
jiti@2.6.1:
resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==}
hasBin: true
@@ -4927,6 +6330,10 @@ packages:
js-tokens@9.0.1:
resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==}
+ js-yaml@3.14.2:
+ resolution: {integrity: sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==}
+ hasBin: true
+
js-yaml@4.1.0:
resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
hasBin: true
@@ -5008,6 +6415,9 @@ packages:
resolution: {integrity: sha512-uuPNLJkKN8NXAlZlQ6kmUF9qO+T6Kyd7oV4+/7yy8Jz6+MZNyhPq8EdLpdfnPVzUC8qSf1b4j1azKaGnFsjmsw==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ jsonc-parser@3.3.1:
+ resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
+
jsonfile@6.2.0:
resolution: {integrity: sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==}
@@ -5106,10 +6516,18 @@ packages:
resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==}
engines: {node: '>=18.0.0'}
+ load-esm@1.0.3:
+ resolution: {integrity: sha512-v5xlu8eHD1+6r8EHTg6hfmO97LN8ugKtiXcy5e6oN72iD2r6u0RPfLl6fxM+7Wnh2ZRq15o0russMst44WauPA==}
+ engines: {node: '>=13.2.0'}
+
load-json-file@4.0.0:
resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
engines: {node: '>=4'}
+ loader-runner@4.3.1:
+ resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==}
+ engines: {node: '>=6.11.5'}
+
local-pkg@0.5.1:
resolution: {integrity: sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==}
engines: {node: '>=14'}
@@ -5130,6 +6548,9 @@ packages:
resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ lodash-es@4.17.22:
+ resolution: {integrity: sha512-XEawp1t0gxSi9x01glktRZ5HDy0HXqrM0x5pXQM98EaI0NxO6jVM7omDOxsuEo5UIASAnm2bRp1Jt/e0a2XU8Q==}
+
lodash.camelcase@4.3.0:
resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==}
@@ -5142,6 +6563,9 @@ packages:
lodash.kebabcase@4.1.1:
resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==}
+ lodash.memoize@4.1.2:
+ resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==}
+
lodash.merge@4.6.2:
resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
@@ -5203,6 +6627,9 @@ packages:
magic-string@0.25.9:
resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==}
+ magic-string@0.30.17:
+ resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
+
magic-string@0.30.21:
resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
@@ -5213,6 +6640,12 @@ packages:
resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==}
engines: {node: '>=10'}
+ make-error@1.3.6:
+ resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==}
+
+ makeerror@1.0.12:
+ resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==}
+
markdown-table@3.0.4:
resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==}
@@ -5262,6 +6695,18 @@ packages:
mdn-data@2.12.2:
resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==}
+ media-typer@0.3.0:
+ resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
+ engines: {node: '>= 0.6'}
+
+ media-typer@1.1.0:
+ resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==}
+ engines: {node: '>= 0.8'}
+
+ memfs@3.5.3:
+ resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
+ engines: {node: '>= 4.0.0'}
+
memorystream@0.3.1:
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
engines: {node: '>= 0.10.0'}
@@ -5274,6 +6719,10 @@ packages:
resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==}
engines: {node: '>=18'}
+ merge-descriptors@2.0.0:
+ resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==}
+ engines: {node: '>=18'}
+
merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
@@ -5281,6 +6730,10 @@ packages:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
engines: {node: '>= 8'}
+ methods@1.1.2:
+ resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
+ engines: {node: '>= 0.6'}
+
micromark-core-commonmark@2.0.3:
resolution: {integrity: sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg==}
@@ -5376,10 +6829,23 @@ packages:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
+ mime-db@1.54.0:
+ resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==}
+ engines: {node: '>= 0.6'}
+
mime-types@2.1.35:
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
engines: {node: '>= 0.6'}
+ mime-types@3.0.2:
+ resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==}
+ engines: {node: '>=18'}
+
+ mime@2.6.0:
+ resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==}
+ engines: {node: '>=4.0.0'}
+ hasBin: true
+
mime@3.0.0:
resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==}
engines: {node: '>=10.0.0'}
@@ -5433,6 +6899,10 @@ packages:
resolution: {integrity: sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==}
engines: {node: '>= 18'}
+ mkdirp@0.5.6:
+ resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
+ hasBin: true
+
mlly@1.8.0:
resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==}
@@ -5452,10 +6922,18 @@ packages:
muggle-string@0.4.1:
resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==}
+ multer@2.0.2:
+ resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==}
+ engines: {node: '>= 10.16.0'}
+
mustache@4.2.0:
resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==}
hasBin: true
+ mute-stream@2.0.0:
+ resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
+ engines: {node: ^18.17.0 || >=20.5.0}
+
nanoid@3.3.11:
resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -5487,9 +6965,31 @@ packages:
resolution: {integrity: sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==}
hasBin: true
+ negotiator@1.0.0:
+ resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==}
+ engines: {node: '>= 0.6'}
+
+ neo-async@2.6.2:
+ resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
+
+ nestjs-pino@4.5.0:
+ resolution: {integrity: sha512-e54ChJMACSGF8gPYaHsuD07RW7l/OVoV6aI8Hqhpp0ZQ4WA8QY3eewL42JX7Z1U6rV7byNU7bGBV9l6d9V6PDQ==}
+ engines: {node: '>= 14'}
+ peerDependencies:
+ '@nestjs/common': ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0
+ pino: ^7.5.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
+ pino-http: ^6.4.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0 || ^11.0.0
+ rxjs: ^7.1.0
+
nice-try@1.0.5:
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
+ node-abort-controller@3.1.1:
+ resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==}
+
+ node-emoji@1.11.0:
+ resolution: {integrity: sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==}
+
node-fetch-h2@2.3.0:
resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==}
engines: {node: 4.x || >=6.0.0}
@@ -5506,6 +7006,9 @@ packages:
encoding:
optional: true
+ node-int64@0.4.0:
+ resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
+
node-readfiles@0.2.0:
resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==}
@@ -5570,6 +7073,10 @@ packages:
oauth4webapi@3.8.2:
resolution: {integrity: sha512-FzZZ+bht5X0FKe7Mwz3DAVAmlH1BV5blSak/lHMBKz0/EBMhX6B10GlQYI51+oRp8ObJaX0g6pXrAxZh5s8rjw==}
+ object-assign@4.1.1:
+ resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
+ engines: {node: '>=0.10.0'}
+
object-inspect@1.13.4:
resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
engines: {node: '>= 0.4'}
@@ -5595,6 +7102,10 @@ packages:
resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==}
engines: {node: '>=14.0.0'}
+ on-finished@2.4.1:
+ resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
+ engines: {node: '>= 0.8'}
+
once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -5623,6 +7134,10 @@ packages:
resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
engines: {node: '>= 0.8.0'}
+ ora@5.4.1:
+ resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==}
+ engines: {node: '>=10'}
+
ospath@1.2.2:
resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==}
@@ -5700,6 +7215,10 @@ packages:
parse5@7.3.0:
resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==}
+ parseurl@1.3.3:
+ resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
+ engines: {node: '>= 0.8'}
+
path-browserify@1.0.1:
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
@@ -5738,6 +7257,9 @@ packages:
resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
engines: {node: 20 || >=22}
+ path-to-regexp@8.3.0:
+ resolution: {integrity: sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==}
+
path-type@3.0.0:
resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
engines: {node: '>=4'}
@@ -5779,6 +7301,10 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ picomatch@4.0.2:
+ resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
+ engines: {node: '>=12'}
+
picomatch@4.0.3:
resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==}
engines: {node: '>=12'}
@@ -5813,6 +7339,9 @@ packages:
pino-abstract-transport@2.0.0:
resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==}
+ pino-http@11.0.0:
+ resolution: {integrity: sha512-wqg5XIAGRRIWtTk8qPGxkbrfiwEWz1lgedVLvhLALudKXvg1/L2lTFgTGPJ4Z2e3qcRmxoFxDuSdMdMGNM6I1g==}
+
pino-pretty@13.1.2:
resolution: {integrity: sha512-3cN0tCakkT4f3zo9RXDIhy6GTvtYD6bK4CRBLN9j3E/ePqN1tugAXD5rGVfoChW6s0hiek+eyYlLNqc/BG7vBQ==}
hasBin: true
@@ -5820,10 +7349,22 @@ packages:
pino-std-serializers@7.0.0:
resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==}
+ pino@10.1.0:
+ resolution: {integrity: sha512-0zZC2ygfdqvqK8zJIr1e+wT1T/L+LF6qvqvbzEQ6tiMAoTqEVK9a1K3YRu8HEUvGEvNqZyPJTtb2sNIoTkB83w==}
+ hasBin: true
+
pino@9.14.0:
resolution: {integrity: sha512-8OEwKp5juEvb/MjpIc4hjqfgCNysrS94RIOMXYvpYCdm/jglrKEiAYmiumbmGhCvs+IcInsphYDFwqrjr7398w==}
hasBin: true
+ pirates@4.0.7:
+ resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==}
+ engines: {node: '>= 6'}
+
+ pkg-dir@4.2.0:
+ resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==}
+ engines: {node: '>=8'}
+
pkg-types@1.3.1:
resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==}
@@ -5886,6 +7427,15 @@ packages:
resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
engines: {node: '>= 0.8.0'}
+ prettier-linter-helpers@1.0.1:
+ resolution: {integrity: sha512-SxToR7P8Y2lWmv/kTzVLC1t/GDI2WGjMwNhLLE9qtH8Q13C+aEmuRlzDst4Up4s0Wc8sF2M+J57iB3cMLqftfg==}
+ engines: {node: '>=6.0.0'}
+
+ prettier@3.7.4:
+ resolution: {integrity: sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==}
+ engines: {node: '>=14'}
+ hasBin: true
+
pretty-bytes@5.6.0:
resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==}
engines: {node: '>=6'}
@@ -5894,6 +7444,10 @@ packages:
resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==}
engines: {node: ^14.13.1 || >=16.0.0}
+ pretty-format@30.2.0:
+ resolution: {integrity: sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==}
+ engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0}
+
prisma@6.19.0:
resolution: {integrity: sha512-F3eX7K+tWpkbhl3l4+VkFtrwJlLXbAM+f9jolgoUZbFcm1DgHZ4cq9AgVEgUym2au5Ad/TDLN8lg83D+M10ycw==}
engines: {node: '>=18.18'}
@@ -5943,6 +7497,9 @@ packages:
pure-rand@6.1.0:
resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==}
+ pure-rand@7.0.1:
+ resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==}
+
qified@0.5.1:
resolution: {integrity: sha512-+BtFN3dCP+IaFA6IYNOu/f/uK1B8xD2QWyOeCse0rjtAebBmkzgd2d1OAXi3ikAzJMIBSdzZDNZ3wZKEUDQs5w==}
engines: {node: '>=20'}
@@ -5951,6 +7508,10 @@ packages:
resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==}
engines: {node: '>=0.6'}
+ qs@6.14.1:
+ resolution: {integrity: sha512-4EK3+xJl8Ts67nLYNwqw/dsFVnCf+qR7RgXSK9jEEm9unao3njwMDdmsdvoKBKHzxd7tCYz5e5M+SnMjdtXGQQ==}
+ engines: {node: '>=0.6'}
+
qs@6.5.3:
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
engines: {node: '>=0.6'}
@@ -5974,9 +7535,17 @@ packages:
randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
+ range-parser@1.2.1:
+ resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
+ engines: {node: '>= 0.6'}
+
rate-limiter-flexible@4.0.1:
resolution: {integrity: sha512-2/dGHpDFpeA0+755oUkW+EKyklqLS9lu0go9pDsbhqQjZcxfRyJ6LA4JI0+HAdZ2bemD/oOjUeZQB2lCZqXQfQ==}
+ raw-body@3.0.2:
+ resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==}
+ engines: {node: '>= 0.10'}
+
rc9@2.1.2:
resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==}
@@ -5984,6 +7553,9 @@ packages:
resolution: {integrity: sha512-VXUdgSiUrE/WZXn6gUIVVIsg0+Hp6VPZPOaHCay+OuFKy6u/8ktmeNEf+U5qSA8jzGGFsg8jrDNu1BeHpz2pJA==}
engines: {node: '>=10'}
+ react-is@18.3.1:
+ resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==}
+
read-pkg-up@7.0.1:
resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
engines: {node: '>=8'}
@@ -5999,6 +7571,10 @@ packages:
readable-stream@2.3.8:
resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==}
+ readable-stream@3.6.2:
+ resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
+ engines: {node: '>= 6'}
+
readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
@@ -6015,6 +7591,9 @@ packages:
resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+ reflect-metadata@0.2.2:
+ resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==}
+
reflect.getprototypeof@1.0.10:
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
engines: {node: '>= 0.4'}
@@ -6083,6 +7662,10 @@ packages:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
+ resolve-cwd@3.0.0:
+ resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
+ engines: {node: '>=8'}
+
resolve-from@4.0.0:
resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
engines: {node: '>=4'}
@@ -6140,6 +7723,10 @@ packages:
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
+ router@2.2.0:
+ resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==}
+ engines: {node: '>= 18'}
+
rrweb-cssom@0.7.1:
resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==}
@@ -6149,6 +7736,9 @@ packages:
run-parallel@1.2.0:
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+ rxjs@7.8.1:
+ resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==}
+
rxjs@7.8.2:
resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==}
@@ -6184,6 +7774,14 @@ packages:
resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==}
engines: {node: '>=v12.22.7'}
+ schema-utils@3.3.0:
+ resolution: {integrity: sha512-pN/yOAvcC+5rQ5nERGuwrjLlYvLTbCibnZ1I7B1LaiAz9BRBlE9GMgE/eqV30P7aJQUf7Ddimy/RsbYO/GrVGg==}
+ engines: {node: '>= 10.13.0'}
+
+ schema-utils@4.3.3:
+ resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==}
+ engines: {node: '>= 10.13.0'}
+
schemes@1.4.0:
resolution: {integrity: sha512-ImFy9FbCsQlVgnE3TCWmLPCFnVzx0lHL/l+umHplDqAKd0dzFpnS6lFZIpagBlYhKwzVmlV36ec0Y1XTu8JBAQ==}
@@ -6216,9 +7814,17 @@ packages:
engines: {node: '>=10'}
hasBin: true
+ send@1.2.1:
+ resolution: {integrity: sha512-1gnZf7DFcoIcajTjTwjwuDjzuz4PPcY2StKPlsGAQ1+YH20IRVrBaXSWmdjowTJ6u8Rc01PoYOGHXfP1mYcZNQ==}
+ engines: {node: '>= 18'}
+
serialize-javascript@6.0.2:
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
+ serve-static@2.2.1:
+ resolution: {integrity: sha512-xRXBn0pPqQTVQiC8wyQrKs2MOlX24zQ0POGaj0kultvoOCstBQM5yvOhAVSUwOMjQtTvsPWoNCHfPGwaaQJhTw==}
+ engines: {node: '>= 18'}
+
set-cookie-parser@2.7.2:
resolution: {integrity: sha512-oeM1lpU/UvhTxw+g3cIfxXHyJRc/uidd3yK1P242gzHds0udQBYzs3y8j4gCCW+ZJ7ad0yctld8RYO+bdurlvw==}
@@ -6353,6 +7959,9 @@ packages:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
+ source-map-support@0.5.13:
+ resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==}
+
source-map-support@0.5.21:
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
@@ -6360,6 +7969,14 @@ packages:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
+ source-map@0.7.4:
+ resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
+ engines: {node: '>= 8'}
+
+ source-map@0.7.6:
+ resolution: {integrity: sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==}
+ engines: {node: '>= 12'}
+
source-map@0.8.0-beta.0:
resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==}
engines: {node: '>= 8'}
@@ -6388,6 +8005,9 @@ packages:
resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==}
engines: {node: '>= 10.x'}
+ sprintf-js@1.0.3:
+ resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
+
sshpk@1.18.0:
resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==}
engines: {node: '>=0.10.0'}
@@ -6397,6 +8017,10 @@ packages:
resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==}
engines: {node: '>=12.0.0'}
+ stack-utils@2.0.6:
+ resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==}
+ engines: {node: '>=10'}
+
stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
@@ -6404,6 +8028,10 @@ packages:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
+ statuses@2.0.2:
+ resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==}
+ engines: {node: '>= 0.8'}
+
std-env@3.10.0:
resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==}
@@ -6418,10 +8046,18 @@ packages:
resolution: {integrity: sha512-pqMqwQCso0PBJt2PQmDO0cFj0lyqmiwOMiMSkVtRokl7e+ZTRYgDHKnuZNbqjiJXgsg4nuqtD/zxuo9KqTp0Yw==}
engines: {node: '>= 0.10.0'}
+ streamsearch@1.1.0:
+ resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
+ engines: {node: '>=10.0.0'}
+
string-argv@0.3.2:
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
engines: {node: '>=0.6.19'}
+ string-length@4.0.2:
+ resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==}
+ engines: {node: '>=10'}
+
string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -6473,6 +8109,10 @@ packages:
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
engines: {node: '>=4'}
+ strip-bom@4.0.0:
+ resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==}
+ engines: {node: '>=8'}
+
strip-comments@2.0.1:
resolution: {integrity: sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==}
engines: {node: '>=10'}
@@ -6500,6 +8140,10 @@ packages:
strip-literal@2.1.1:
resolution: {integrity: sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==}
+ strtok3@10.3.4:
+ resolution: {integrity: sha512-KIy5nylvC5le1OdaaoCJ07L+8iQzJHGH6pWDuzS+d07Cu7n1MZ2x26P8ZKIWfbK02+XIL8Mp4RkWeqdUCrDMfg==}
+ engines: {node: '>=18'}
+
stylelint-config-html@1.1.0:
resolution: {integrity: sha512-IZv4IVESjKLumUGi+HWeb7skgO6/g4VMuAYrJdlqQFndgbj6WJAXPhaysvBiXefX79upBdQVumgYcdd17gCpjQ==}
engines: {node: ^12 || >=14}
@@ -6537,6 +8181,14 @@ packages:
engines: {node: '>=18.12.0'}
hasBin: true
+ superagent@10.3.0:
+ resolution: {integrity: sha512-B+4Ik7ROgVKrQsXTV0Jwp2u+PXYLSlqtDAhYnkkD+zn3yg8s/zjA2MeGayPoY/KICrbitwneDHrjSotxKL+0XQ==}
+ engines: {node: '>=14.18.0'}
+
+ supertest@7.2.1:
+ resolution: {integrity: sha512-/OfhUL9WRLfoovZuWJ4l+2GVz3Eoo8Eo2TZVs9QxF2kmxdrmK7rCww4iJBstHevUH/M44aJ9TMN7yB+W+oWxlA==}
+ engines: {node: '>=14.18.0'}
+
supports-color@5.5.0:
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
engines: {node: '>=4'}
@@ -6572,6 +8224,10 @@ packages:
resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==}
hasBin: true
+ symbol-observable@4.0.0:
+ resolution: {integrity: sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==}
+ engines: {node: '>=0.10'}
+
symbol-tree@3.2.4:
resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==}
@@ -6608,11 +8264,31 @@ packages:
resolution: {integrity: sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==}
engines: {node: '>=10'}
+ terser-webpack-plugin@5.3.16:
+ resolution: {integrity: sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==}
+ engines: {node: '>= 10.13.0'}
+ peerDependencies:
+ '@swc/core': '*'
+ esbuild: '*'
+ uglify-js: '*'
+ webpack: ^5.1.0
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ esbuild:
+ optional: true
+ uglify-js:
+ optional: true
+
terser@5.44.1:
resolution: {integrity: sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==}
engines: {node: '>=10'}
hasBin: true
+ test-exclude@6.0.0:
+ resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
+ engines: {node: '>=8'}
+
test-exclude@7.0.1:
resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==}
engines: {node: '>=18'}
@@ -6670,6 +8346,9 @@ packages:
resolution: {integrity: sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==}
engines: {node: '>=14.14'}
+ tmpl@1.0.5:
+ resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==}
+
to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
engines: {node: '>=8.0'}
@@ -6682,6 +8361,10 @@ packages:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
+ token-types@6.1.2:
+ resolution: {integrity: sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==}
+ engines: {node: '>=14.16'}
+
toml-eslint-parser@0.10.0:
resolution: {integrity: sha512-khrZo4buq4qVmsGzS5yQjKe/WsFvV8fGfOjDQN0q4iy9FjRfPWRgTFrU8u1R2iu/SfWLhY9WnCi4Jhdrcbtg+g==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -6742,10 +8425,66 @@ packages:
typescript:
optional: true
+ ts-jest@29.4.6:
+ resolution: {integrity: sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@babel/core': '>=7.0.0-beta.0 <8'
+ '@jest/transform': ^29.0.0 || ^30.0.0
+ '@jest/types': ^29.0.0 || ^30.0.0
+ babel-jest: ^29.0.0 || ^30.0.0
+ esbuild: '*'
+ jest: ^29.0.0 || ^30.0.0
+ jest-util: ^29.0.0 || ^30.0.0
+ typescript: '>=4.3 <6'
+ peerDependenciesMeta:
+ '@babel/core':
+ optional: true
+ '@jest/transform':
+ optional: true
+ '@jest/types':
+ optional: true
+ babel-jest:
+ optional: true
+ esbuild:
+ optional: true
+ jest-util:
+ optional: true
+
+ ts-loader@9.5.4:
+ resolution: {integrity: sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ typescript: '*'
+ webpack: ^5.0.0
+
+ ts-node@10.9.2:
+ resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
+ hasBin: true
+ peerDependencies:
+ '@swc/core': '>=1.2.50'
+ '@swc/wasm': '>=1.2.50'
+ '@types/node': '*'
+ typescript: '>=2.7'
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
ts-patch@3.3.0:
resolution: {integrity: sha512-zAOzDnd5qsfEnjd9IGy1IRuvA7ygyyxxdxesbhMdutt8AHFjD8Vw8hU2rMF89HX1BKRWFYqKHrO8Q6lw0NeUZg==}
hasBin: true
+ tsconfig-paths-webpack-plugin@4.2.0:
+ resolution: {integrity: sha512-zbem3rfRS8BgeNK50Zz5SIQgXzLafiHjOwUAvk/38/o1jHn/V5QAgVUcz884or7WYcPaH3N2CIfUc2u0ul7UcA==}
+ engines: {node: '>=10.13.0'}
+
+ tsconfig-paths@4.2.0:
+ resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==}
+ engines: {node: '>=6'}
+
tslib@2.8.1:
resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
@@ -6798,6 +8537,10 @@ packages:
resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
engines: {node: '>= 0.8.0'}
+ type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+
type-fest@0.16.0:
resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
engines: {node: '>=10'}
@@ -6818,6 +8561,18 @@ packages:
resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
engines: {node: '>=8'}
+ type-fest@4.41.0:
+ resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==}
+ engines: {node: '>=16'}
+
+ type-is@1.6.18:
+ resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
+ engines: {node: '>= 0.6'}
+
+ type-is@2.0.1:
+ resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==}
+ engines: {node: '>= 0.6'}
+
typed-array-buffer@1.0.3:
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
engines: {node: '>= 0.4'}
@@ -6834,6 +8589,9 @@ packages:
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
engines: {node: '>= 0.4'}
+ typedarray@0.0.6:
+ resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==}
+
typescript-eslint@8.46.3:
resolution: {integrity: sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
@@ -6859,6 +8617,19 @@ packages:
ufo@1.6.1:
resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==}
+ uglify-js@3.19.3:
+ resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==}
+ engines: {node: '>=0.8.0'}
+ hasBin: true
+
+ uid@2.0.2:
+ resolution: {integrity: sha512-u3xV3X7uzvi5b1MncmZo3i2Aw222Zk1keqLA1YkHldREkAhAqi65wuPfe7lHx8H/Wzy+8CE7S7uS3jekIM5s8g==}
+ engines: {node: '>=8'}
+
+ uint8array-extras@1.5.0:
+ resolution: {integrity: sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==}
+ engines: {node: '>=18'}
+
unbox-primitive@1.1.0:
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
engines: {node: '>= 0.4'}
@@ -6869,6 +8640,9 @@ packages:
undefsafe@2.0.5:
resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==}
+ undici-types@6.21.0:
+ resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==}
+
undici-types@7.16.0:
resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==}
@@ -6931,6 +8705,10 @@ packages:
vite:
optional: true
+ unpipe@1.0.0:
+ resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
+ engines: {node: '>= 0.8'}
+
unplugin-auto-import@0.18.6:
resolution: {integrity: sha512-LMFzX5DtkTj/3wZuyG5bgKBoJ7WSgzqSGJ8ppDRdlvPh45mx6t6w3OcbExQi53n3xF5MYkNGPNR/HYOL95KL2A==}
engines: {node: '>=14'}
@@ -6975,12 +8753,6 @@ packages:
resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==}
engines: {node: '>=4'}
- update-browserslist-db@1.1.4:
- resolution: {integrity: sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==}
- hasBin: true
- peerDependencies:
- browserslist: '>= 4.21.0'
-
update-browserslist-db@1.2.3:
resolution: {integrity: sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==}
hasBin: true
@@ -7014,9 +8786,20 @@ packages:
resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==}
hasBin: true
+ v8-compile-cache-lib@3.0.1:
+ resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
+
+ v8-to-istanbul@9.3.0:
+ resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==}
+ engines: {node: '>=10.12.0'}
+
validate-npm-package-license@3.0.4:
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+ vary@1.1.2:
+ resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
+ engines: {node: '>= 0.8'}
+
verror@1.10.0:
resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==}
engines: {'0': node >=0.6.0}
@@ -7197,6 +8980,16 @@ packages:
resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==}
engines: {node: '>=18'}
+ walker@1.0.8:
+ resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==}
+
+ watchpack@2.5.0:
+ resolution: {integrity: sha512-e6vZvY6xboSwLz2GD36c16+O/2Z6fKvIf4pOXptw2rY9MVwE/TXc6RGqxD3I3x0a28lwBY7DE+76uTPSsBrrCA==}
+ engines: {node: '>=10.13.0'}
+
+ wcwidth@1.0.1:
+ resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
+
webidl-conversions@3.0.1:
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
@@ -7207,9 +9000,27 @@ packages:
resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
engines: {node: '>=12'}
+ webpack-node-externals@3.0.0:
+ resolution: {integrity: sha512-LnL6Z3GGDPht/AigwRh2dvL9PQPFQ8skEpVrWZXLWBYmqcaojHNN0onvHzie6rq7EWKrrBfPYqNEzTJgiwEQDQ==}
+ engines: {node: '>=6'}
+
+ webpack-sources@3.3.3:
+ resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==}
+ engines: {node: '>=10.13.0'}
+
webpack-virtual-modules@0.6.2:
resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+ webpack@5.103.0:
+ resolution: {integrity: sha512-HU1JOuV1OavsZ+mfigY0j8d1TgQgbZ6M+J75zDkpEAwYeXjWSqrGJtgnPblJjd/mAyTNQ7ygw0MiKOn6etz8yw==}
+ engines: {node: '>=10.13.0'}
+ hasBin: true
+ peerDependencies:
+ webpack-cli: '*'
+ peerDependenciesMeta:
+ webpack-cli:
+ optional: true
+
whatwg-encoding@3.1.1:
resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==}
engines: {node: '>=18'}
@@ -7270,6 +9081,9 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
+ wordwrap@1.0.0:
+ resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==}
+
workbox-background-sync@7.3.0:
resolution: {integrity: sha512-PCSk3eK7Mxeuyatb22pcSx9dlgWNv3+M8PqPaYDokks8Y5/FX4soaOqj3yhAZr5k6Q5JWTOMYgaJBpbw11G9Eg==}
@@ -7411,6 +9225,10 @@ packages:
yauzl@2.10.0:
resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==}
+ yn@3.1.1:
+ resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==}
+ engines: {node: '>=6'}
+
yocto-queue@0.1.0:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
@@ -7419,6 +9237,10 @@ packages:
resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==}
engines: {node: '>=12.20'}
+ yoctocolors-cjs@2.1.3:
+ resolution: {integrity: sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==}
+ engines: {node: '>=18'}
+
zod-validation-error@3.5.4:
resolution: {integrity: sha512-+hEiRIiPobgyuFlEojnqjJnhFvg4r/i3cqgcm67eehZf/WBaK3g6cD02YU9mtdVxZjv8CzCA9n/Rhrs3yAAvAw==}
engines: {node: '>=18.0.0'}
@@ -7444,6 +9266,60 @@ snapshots:
ts-deepmerge: 6.2.1
zod: 3.25.76
+ '@angular-devkit/core@19.2.17(chokidar@4.0.3)':
+ dependencies:
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ jsonc-parser: 3.3.1
+ picomatch: 4.0.2
+ rxjs: 7.8.1
+ source-map: 0.7.4
+ optionalDependencies:
+ chokidar: 4.0.3
+
+ '@angular-devkit/core@19.2.19(chokidar@4.0.3)':
+ dependencies:
+ ajv: 8.17.1
+ ajv-formats: 3.0.1(ajv@8.17.1)
+ jsonc-parser: 3.3.1
+ picomatch: 4.0.2
+ rxjs: 7.8.1
+ source-map: 0.7.4
+ optionalDependencies:
+ chokidar: 4.0.3
+
+ '@angular-devkit/schematics-cli@19.2.19(@types/node@22.19.3)(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3)
+ '@inquirer/prompts': 7.3.2(@types/node@22.19.3)
+ ansi-colors: 4.1.3
+ symbol-observable: 4.0.0
+ yargs-parser: 21.1.1
+ transitivePeerDependencies:
+ - '@types/node'
+ - chokidar
+
+ '@angular-devkit/schematics@19.2.17(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.17(chokidar@4.0.3)
+ jsonc-parser: 3.3.1
+ magic-string: 0.30.17
+ ora: 5.4.1
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - chokidar
+
+ '@angular-devkit/schematics@19.2.19(chokidar@4.0.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
+ jsonc-parser: 3.3.1
+ magic-string: 0.30.17
+ ora: 5.4.1
+ rxjs: 7.8.1
+ transitivePeerDependencies:
+ - chokidar
+
'@antfu/eslint-config@3.16.0(@typescript-eslint/utils@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(@vue/compiler-sfc@3.5.23)(eslint-import-resolver-node@0.3.9)(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)(vitest@2.1.9(@types/node@24.10.0)(jsdom@25.0.1)(terser@5.44.1))':
dependencies:
'@antfu/install-pkg': 1.1.0
@@ -7716,6 +9592,26 @@ snapshots:
dependencies:
'@babel/core': 7.28.5
+ '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -7726,6 +9622,66 @@ snapshots:
'@babel/core': 7.28.5
'@babel/helper-plugin-utils': 7.27.1
+ '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
+ '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.28.5)':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/helper-plugin-utils': 7.27.1
+
'@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.28.5)':
dependencies:
'@babel/core': 7.28.5
@@ -8153,7 +10109,7 @@ snapshots:
'@babel/template@7.27.2':
dependencies:
'@babel/code-frame': 7.27.1
- '@babel/parser': 7.27.7
+ '@babel/parser': 7.28.5
'@babel/types': 7.28.5
'@babel/traverse@7.27.7':
@@ -8193,6 +10149,8 @@ snapshots:
'@biomejs/wasm-nodejs@2.2.6': {}
+ '@borewit/text-codec@0.2.1': {}
+
'@cacheable/memoize@2.0.3':
dependencies:
'@cacheable/utils': 2.2.0
@@ -8219,6 +10177,9 @@ snapshots:
picocolors: 1.1.1
sisteransi: 1.0.5
+ '@colors/colors@1.5.0':
+ optional: true
+
'@commitlint/cli@19.8.1(@types/node@24.10.0)(typescript@5.9.3)':
dependencies:
'@commitlint/format': 19.8.1
@@ -8329,27 +10290,191 @@ snapshots:
'@types/conventional-commits-parser': 5.0.2
chalk: 5.6.2
- '@csstools/color-helpers@5.1.0': {}
+ '@cpn-console/argocd-plugin@file:plugins/argocd(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
+ dependencies:
+ '@cpn-console/gitlab-plugin': file:plugins/gitlab(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/keycloak-plugin': file:plugins/keycloak(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/kubernetes-plugin': file:plugins/kubernetes(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@cpn-console/vault-plugin': file:plugins/vault(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@himenon/argocd-typescript-openapi': 1.2.2
+ '@kubernetes-models/argo-cd': 2.7.2
+ '@kubernetes/client-node': 0.22.3
+ '@types/js-yaml': 4.0.9
+ axios: 1.12.2
+ js-yaml: 4.1.0
+ kubernetes-models: 4.5.1
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - debug
+ - typescript
+ - utf-8-validate
+ - vitest
- '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ '@cpn-console/gitlab-plugin@file:plugins/gitlab(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
dependencies:
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@cpn-console/vault-plugin': file:plugins/vault(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@gitbeaker/core': 40.6.0
+ '@gitbeaker/requester-utils': 40.6.0
+ '@gitbeaker/rest': 40.6.0
+ axios: 1.12.2
+ js-yaml: 4.1.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - debug
+ - typescript
+ - utf-8-validate
+ - vitest
- '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ '@cpn-console/harbor-plugin@file:plugins/harbor(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
dependencies:
- '@csstools/color-helpers': 5.1.0
- '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
- '@csstools/css-tokenizer': 3.0.4
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/keycloak-plugin': file:plugins/keycloak(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/kubernetes-plugin': file:plugins/kubernetes(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@cpn-console/vault-plugin': file:plugins/vault(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ axios: 1.12.2
+ bytes: 3.1.2
+ cron-validator: 1.4.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - debug
+ - typescript
+ - utf-8-validate
+ - vitest
- '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
+ '@cpn-console/hooks@file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
dependencies:
- '@csstools/css-tokenizer': 3.0.4
-
- '@csstools/css-tokenizer@3.0.4': {}
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ json-schema: 0.4.0
+ vitest-mock-extended: 2.0.2(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ zod: 3.25.76
+ transitivePeerDependencies:
+ - '@types/node'
+ - typescript
+ - vitest
- '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ '@cpn-console/keycloak-plugin@file:plugins/keycloak(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
+ dependencies:
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@keycloak/keycloak-admin-client': 26.4.2
+ axios: 1.12.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - debug
+ - typescript
+ - vitest
+
+ '@cpn-console/kubernetes-plugin@file:plugins/kubernetes(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
+ dependencies:
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@kubernetes-models/argo-cd': 2.7.2
+ '@kubernetes/client-node': 0.22.3
+ axios: 1.12.2
+ kubernetes-models: 4.5.1
+ request: 2.88.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - debug
+ - typescript
+ - utf-8-validate
+ - vitest
+
+ '@cpn-console/nexus-plugin@file:plugins/nexus(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
+ dependencies:
+ '@cpn-console/gitlab-plugin': file:plugins/gitlab(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@cpn-console/vault-plugin': file:plugins/vault(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ axios: 1.12.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - debug
+ - typescript
+ - utf-8-validate
+ - vitest
+
+ '@cpn-console/shared@file:packages/shared(@types/node@22.19.3)':
+ dependencies:
+ '@ts-rest/core': 3.52.1(@types/node@22.19.3)(zod@3.25.76)
+ short-uuid: 5.2.0
+ zod: 3.25.76
+ zod-validation-error: 3.5.4(zod@3.25.76)
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@cpn-console/sonarqube-plugin@file:plugins/sonarqube(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
+ dependencies:
+ '@cpn-console/gitlab-plugin': file:plugins/gitlab(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/keycloak-plugin': file:plugins/keycloak(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@cpn-console/vault-plugin': file:plugins/vault(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ axios: 1.12.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - debug
+ - typescript
+ - utf-8-validate
+ - vitest
+
+ '@cpn-console/test-utils@file:packages/test-utils(@types/node@22.19.3)':
+ dependencies:
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@faker-js/faker': 9.9.0
+ transitivePeerDependencies:
+ - '@types/node'
+
+ '@cpn-console/vault-plugin@file:plugins/vault(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
+ dependencies:
+ '@cpn-console/hooks': file:packages/hooks(@types/node@22.19.3)(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))
+ '@cpn-console/shared': file:packages/shared(@types/node@22.19.3)
+ '@kubernetes/client-node': 0.22.3
+ axios: 1.12.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - bufferutil
+ - debug
+ - typescript
+ - utf-8-validate
+ - vitest
+
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+
+ '@csstools/color-helpers@5.1.0': {}
+
+ '@csstools/css-calc@2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-color-parser@3.1.0(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/color-helpers': 5.1.0
+ '@csstools/css-calc': 2.1.4(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)':
+ dependencies:
+ '@csstools/css-tokenizer': 3.0.4
+
+ '@csstools/css-tokenizer@3.0.4': {}
+
+ '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)':
dependencies:
'@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4)
'@csstools/css-tokenizer': 3.0.4
@@ -8801,6 +10926,146 @@ snapshots:
'@iconify/types': 2.0.0
vue: 3.5.23(typescript@5.9.3)
+ '@inquirer/ansi@1.0.2': {}
+
+ '@inquirer/checkbox@4.3.2(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/confirm@5.1.21(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/core@10.3.2(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ cli-width: 4.1.0
+ mute-stream: 2.0.0
+ signal-exit: 4.1.0
+ wrap-ansi: 6.2.0
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/editor@4.2.23(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/external-editor': 1.0.3(@types/node@22.19.3)
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/expand@4.0.23(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/external-editor@1.0.3(@types/node@22.19.3)':
+ dependencies:
+ chardet: 2.1.1
+ iconv-lite: 0.7.1
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/figures@1.0.15': {}
+
+ '@inquirer/input@4.3.1(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/number@3.0.23(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/password@4.0.23(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/prompts@7.10.1(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/checkbox': 4.3.2(@types/node@22.19.3)
+ '@inquirer/confirm': 5.1.21(@types/node@22.19.3)
+ '@inquirer/editor': 4.2.23(@types/node@22.19.3)
+ '@inquirer/expand': 4.0.23(@types/node@22.19.3)
+ '@inquirer/input': 4.3.1(@types/node@22.19.3)
+ '@inquirer/number': 3.0.23(@types/node@22.19.3)
+ '@inquirer/password': 4.0.23(@types/node@22.19.3)
+ '@inquirer/rawlist': 4.1.11(@types/node@22.19.3)
+ '@inquirer/search': 3.2.2(@types/node@22.19.3)
+ '@inquirer/select': 4.4.2(@types/node@22.19.3)
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/prompts@7.3.2(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/checkbox': 4.3.2(@types/node@22.19.3)
+ '@inquirer/confirm': 5.1.21(@types/node@22.19.3)
+ '@inquirer/editor': 4.2.23(@types/node@22.19.3)
+ '@inquirer/expand': 4.0.23(@types/node@22.19.3)
+ '@inquirer/input': 4.3.1(@types/node@22.19.3)
+ '@inquirer/number': 3.0.23(@types/node@22.19.3)
+ '@inquirer/password': 4.0.23(@types/node@22.19.3)
+ '@inquirer/rawlist': 4.1.11(@types/node@22.19.3)
+ '@inquirer/search': 3.2.2(@types/node@22.19.3)
+ '@inquirer/select': 4.4.2(@types/node@22.19.3)
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/rawlist@4.1.11(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/search@3.2.2(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/select@4.4.2(@types/node@22.19.3)':
+ dependencies:
+ '@inquirer/ansi': 1.0.2
+ '@inquirer/core': 10.3.2(@types/node@22.19.3)
+ '@inquirer/figures': 1.0.15
+ '@inquirer/type': 3.0.10(@types/node@22.19.3)
+ yoctocolors-cjs: 2.1.3
+ optionalDependencies:
+ '@types/node': 22.19.3
+
+ '@inquirer/type@3.0.10(@types/node@22.19.3)':
+ optionalDependencies:
+ '@types/node': 22.19.3
+
'@isaacs/balanced-match@4.0.1': {}
'@isaacs/brace-expansion@5.0.0':
@@ -8820,8 +11085,195 @@ snapshots:
dependencies:
minipass: 7.1.2
+ '@istanbuljs/load-nyc-config@1.1.0':
+ dependencies:
+ camelcase: 5.3.1
+ find-up: 4.1.0
+ get-package-type: 0.1.0
+ js-yaml: 3.14.2
+ resolve-from: 5.0.0
+
'@istanbuljs/schema@0.1.3': {}
+ '@jest/console@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ chalk: 4.1.2
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ slash: 3.0.0
+
+ '@jest/core@30.2.0(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))':
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/pattern': 30.0.1
+ '@jest/reporters': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ exit-x: 0.2.2
+ graceful-fs: 4.2.11
+ jest-changed-files: 30.2.0
+ jest-config: 30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-resolve-dependencies: 30.2.0
+ jest-runner: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ jest-watcher: 30.2.0
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
+ '@jest/diff-sequences@30.0.1': {}
+
+ '@jest/environment@30.2.0':
+ dependencies:
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ jest-mock: 30.2.0
+
+ '@jest/expect-utils@30.2.0':
+ dependencies:
+ '@jest/get-type': 30.1.0
+
+ '@jest/expect@30.2.0':
+ dependencies:
+ expect: 30.2.0
+ jest-snapshot: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/fake-timers@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ '@sinonjs/fake-timers': 13.0.5
+ '@types/node': 22.19.3
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+
+ '@jest/get-type@30.1.0': {}
+
+ '@jest/globals@30.2.0':
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/types': 30.2.0
+ jest-mock: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/pattern@30.0.1':
+ dependencies:
+ '@types/node': 22.19.3
+ jest-regex-util: 30.0.1
+
+ '@jest/reporters@30.2.0':
+ dependencies:
+ '@bcoe/v8-coverage': 0.2.3
+ '@jest/console': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/node': 22.19.3
+ chalk: 4.1.2
+ collect-v8-coverage: 1.0.3
+ exit-x: 0.2.2
+ glob: 10.4.5
+ graceful-fs: 4.2.11
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-instrument: 6.0.3
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.2.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
+ slash: 3.0.0
+ string-length: 4.0.2
+ v8-to-istanbul: 9.3.0
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/schemas@30.0.5':
+ dependencies:
+ '@sinclair/typebox': 0.34.46
+
+ '@jest/snapshot-utils@30.2.0':
+ dependencies:
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ natural-compare: 1.4.0
+
+ '@jest/source-map@30.0.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ callsites: 3.1.0
+ graceful-fs: 4.2.11
+
+ '@jest/test-result@30.2.0':
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/istanbul-lib-coverage': 2.0.6
+ collect-v8-coverage: 1.0.3
+
+ '@jest/test-sequencer@30.2.0':
+ dependencies:
+ '@jest/test-result': 30.2.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ slash: 3.0.0
+
+ '@jest/transform@30.2.0':
+ dependencies:
+ '@babel/core': 7.28.5
+ '@jest/types': 30.2.0
+ '@jridgewell/trace-mapping': 0.3.31
+ babel-plugin-istanbul: 7.0.1
+ chalk: 4.1.2
+ convert-source-map: 2.0.0
+ fast-json-stable-stringify: 2.1.0
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
+ micromatch: 4.0.8
+ pirates: 4.0.7
+ slash: 3.0.0
+ write-file-atomic: 5.0.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@jest/types@30.2.0':
+ dependencies:
+ '@jest/pattern': 30.0.1
+ '@jest/schemas': 30.0.5
+ '@types/istanbul-lib-coverage': 2.0.6
+ '@types/istanbul-reports': 3.0.4
+ '@types/node': 22.19.3
+ '@types/yargs': 17.0.35
+ chalk: 4.1.2
+
'@jridgewell/gen-mapping@0.3.13':
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -8846,6 +11298,11 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.2
'@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
'@jsep-plugin/assignment@1.3.0(jsep@1.4.0)':
dependencies:
jsep: 1.4.0
@@ -8915,6 +11372,8 @@ snapshots:
- bufferutil
- utf-8-validate
+ '@lukeed/csprng@1.1.0': {}
+
'@lukeed/ms@2.0.2': {}
'@napi-rs/wasm-runtime@0.2.12':
@@ -8924,6 +11383,99 @@ snapshots:
'@tybys/wasm-util': 0.10.1
optional: true
+ '@nestjs/cli@11.0.14(@types/node@22.19.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.19(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.2.19(chokidar@4.0.3)
+ '@angular-devkit/schematics-cli': 19.2.19(@types/node@22.19.3)(chokidar@4.0.3)
+ '@inquirer/prompts': 7.10.1(@types/node@22.19.3)
+ '@nestjs/schematics': 11.0.9(chokidar@4.0.3)(typescript@5.9.3)
+ ansis: 4.2.0
+ chokidar: 4.0.3
+ cli-table3: 0.6.5
+ commander: 4.1.1
+ fork-ts-checker-webpack-plugin: 9.1.0(typescript@5.9.3)(webpack@5.103.0)
+ glob: 13.0.0
+ node-emoji: 1.11.0
+ ora: 5.4.1
+ tsconfig-paths: 4.2.0
+ tsconfig-paths-webpack-plugin: 4.2.0
+ typescript: 5.9.3
+ webpack: 5.103.0
+ webpack-node-externals: 3.0.0
+ transitivePeerDependencies:
+ - '@types/node'
+ - esbuild
+ - uglify-js
+ - webpack-cli
+
+ '@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2)':
+ dependencies:
+ file-type: 21.2.0
+ iterare: 1.2.1
+ load-esm: 1.0.3
+ reflect-metadata: 0.2.2
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ uid: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nestjs/config@4.0.2(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(rxjs@7.8.2)':
+ dependencies:
+ '@nestjs/common': 11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ dotenv: 16.4.7
+ dotenv-expand: 12.0.1
+ lodash: 4.17.21
+ rxjs: 7.8.2
+
+ '@nestjs/core@11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)':
+ dependencies:
+ '@nestjs/common': 11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nuxt/opencollective': 0.4.1
+ fast-safe-stringify: 2.1.1
+ iterare: 1.2.1
+ path-to-regexp: 8.3.0
+ reflect-metadata: 0.2.2
+ rxjs: 7.8.2
+ tslib: 2.8.1
+ uid: 2.0.2
+ optionalDependencies:
+ '@nestjs/platform-express': 11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+
+ '@nestjs/platform-express@11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)':
+ dependencies:
+ '@nestjs/common': 11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ cors: 2.8.5
+ express: 5.2.1
+ multer: 2.0.2
+ path-to-regexp: 8.3.0
+ tslib: 2.8.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@nestjs/schematics@11.0.9(chokidar@4.0.3)(typescript@5.9.3)':
+ dependencies:
+ '@angular-devkit/core': 19.2.17(chokidar@4.0.3)
+ '@angular-devkit/schematics': 19.2.17(chokidar@4.0.3)
+ comment-json: 4.4.1
+ jsonc-parser: 3.3.1
+ pluralize: 8.0.0
+ typescript: 5.9.3
+ transitivePeerDependencies:
+ - chokidar
+
+ '@nestjs/testing@11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)(@nestjs/platform-express@11.1.11)':
+ dependencies:
+ '@nestjs/common': 11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ '@nestjs/core': 11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/platform-express@11.1.11)(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ tslib: 2.8.1
+ optionalDependencies:
+ '@nestjs/platform-express': 11.1.11(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(@nestjs/core@11.1.11)
+
+ '@noble/hashes@1.8.0': {}
+
'@nodelib/fs.scandir@2.1.5':
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -8936,6 +11488,14 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.1
+ '@nuxt/opencollective@0.4.1':
+ dependencies:
+ consola: 3.4.2
+
+ '@paralleldrive/cuid2@2.3.1':
+ dependencies:
+ '@noble/hashes': 1.8.0
+
'@pinojs/redact@0.4.0': {}
'@pkgjs/parseargs@0.11.0':
@@ -8990,12 +11550,14 @@ snapshots:
'@rolldown/pluginutils@1.0.0-beta.29': {}
- '@rollup/plugin-babel@5.3.1(@babel/core@7.28.5)(rollup@2.79.2)':
+ '@rollup/plugin-babel@5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2)':
dependencies:
'@babel/core': 7.28.5
'@babel/helper-module-imports': 7.27.1
'@rollup/pluginutils': 3.1.0(rollup@2.79.2)
rollup: 2.79.2
+ optionalDependencies:
+ '@types/babel__core': 7.20.5
transitivePeerDependencies:
- supports-color
@@ -9104,6 +11666,16 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.52.5':
optional: true
+ '@sinclair/typebox@0.34.46': {}
+
+ '@sinonjs/commons@3.0.1':
+ dependencies:
+ type-detect: 4.0.8
+
+ '@sinonjs/fake-timers@13.0.5':
+ dependencies:
+ '@sinonjs/commons': 3.0.1
+
'@standard-schema/spec@1.0.0': {}
'@stylistic/eslint-plugin@2.13.0(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)':
@@ -9129,11 +11701,48 @@ snapshots:
dependencies:
tslib: 2.8.1
+ '@tokenizer/inflate@0.4.1':
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ token-types: 6.1.2
+ transitivePeerDependencies:
+ - supports-color
+
+ '@tokenizer/token@0.3.0': {}
+
+ '@trivago/prettier-plugin-sort-imports@6.0.1(@vue/compiler-sfc@3.5.23)(prettier@3.7.4)':
+ dependencies:
+ '@babel/generator': 7.28.5
+ '@babel/parser': 7.28.5
+ '@babel/traverse': 7.28.5
+ '@babel/types': 7.28.5
+ javascript-natural-sort: 0.7.1
+ lodash-es: 4.17.22
+ minimatch: 9.0.5
+ parse-imports-exports: 0.2.4
+ prettier: 3.7.4
+ optionalDependencies:
+ '@vue/compiler-sfc': 3.5.23
+ transitivePeerDependencies:
+ - supports-color
+
+ '@ts-rest/core@3.52.1(@types/node@22.19.3)(zod@3.25.76)':
+ optionalDependencies:
+ '@types/node': 22.19.3
+ zod: 3.25.76
+
'@ts-rest/core@3.52.1(@types/node@24.10.0)(zod@3.25.76)':
optionalDependencies:
'@types/node': 24.10.0
zod: 3.25.76
+ '@ts-rest/fastify@3.52.1(@ts-rest/core@3.52.1(@types/node@22.19.3)(zod@3.25.76))(fastify@4.29.1)(zod@3.25.76)':
+ dependencies:
+ '@ts-rest/core': 3.52.1(@types/node@22.19.3)(zod@3.25.76)
+ fastify: 4.29.1
+ optionalDependencies:
+ zod: 3.25.76
+
'@ts-rest/fastify@3.52.1(@ts-rest/core@3.52.1(@types/node@24.10.0)(zod@3.25.76))(fastify@4.29.1)(zod@3.25.76)':
dependencies:
'@ts-rest/core': 3.52.1(@types/node@24.10.0)(zod@3.25.76)
@@ -9141,6 +11750,13 @@ snapshots:
optionalDependencies:
zod: 3.25.76
+ '@ts-rest/open-api@3.52.1(@ts-rest/core@3.52.1(@types/node@22.19.3)(zod@3.25.76))(zod@3.25.76)':
+ dependencies:
+ '@anatine/zod-openapi': 1.14.2(openapi3-ts@2.0.2)(zod@3.25.76)
+ '@ts-rest/core': 3.52.1(@types/node@22.19.3)(zod@3.25.76)
+ openapi3-ts: 2.0.2
+ zod: 3.25.76
+
'@ts-rest/open-api@3.52.1(@ts-rest/core@3.52.1(@types/node@24.10.0)(zod@3.25.76))(zod@3.25.76)':
dependencies:
'@anatine/zod-openapi': 1.14.2(openapi3-ts@2.0.2)(zod@3.25.76)
@@ -9148,23 +11764,103 @@ snapshots:
openapi3-ts: 2.0.2
zod: 3.25.76
+ '@tsconfig/node10@1.0.12': {}
+
+ '@tsconfig/node12@1.0.11': {}
+
+ '@tsconfig/node14@1.0.3': {}
+
+ '@tsconfig/node16@1.0.4': {}
+
'@tybys/wasm-util@0.10.1':
dependencies:
tslib: 2.8.1
optional: true
+ '@types/babel__core@7.20.5':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+ '@types/babel__generator': 7.27.0
+ '@types/babel__template': 7.4.4
+ '@types/babel__traverse': 7.28.0
+
+ '@types/babel__generator@7.27.0':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@types/babel__template@7.4.4':
+ dependencies:
+ '@babel/parser': 7.28.5
+ '@babel/types': 7.28.5
+
+ '@types/babel__traverse@7.28.0':
+ dependencies:
+ '@babel/types': 7.28.5
+
+ '@types/body-parser@1.19.6':
+ dependencies:
+ '@types/connect': 3.4.38
+ '@types/node': 22.19.3
+
+ '@types/connect@3.4.38':
+ dependencies:
+ '@types/node': 22.19.3
+
'@types/conventional-commits-parser@5.0.2':
dependencies:
'@types/node': 24.10.0
+ '@types/cookiejar@2.1.5': {}
+
'@types/debug@4.1.12':
dependencies:
'@types/ms': 2.1.0
+ '@types/eslint-scope@3.7.7':
+ dependencies:
+ '@types/eslint': 9.6.1
+ '@types/estree': 1.0.8
+
+ '@types/eslint@9.6.1':
+ dependencies:
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+
'@types/estree@0.0.39': {}
'@types/estree@1.0.8': {}
+ '@types/express-serve-static-core@5.1.0':
+ dependencies:
+ '@types/node': 22.19.3
+ '@types/qs': 6.14.0
+ '@types/range-parser': 1.2.7
+ '@types/send': 1.2.1
+
+ '@types/express@5.0.6':
+ dependencies:
+ '@types/body-parser': 1.19.6
+ '@types/express-serve-static-core': 5.1.0
+ '@types/serve-static': 2.2.0
+
+ '@types/http-errors@2.0.5': {}
+
+ '@types/istanbul-lib-coverage@2.0.6': {}
+
+ '@types/istanbul-lib-report@3.0.3':
+ dependencies:
+ '@types/istanbul-lib-coverage': 2.0.6
+
+ '@types/istanbul-reports@3.0.4':
+ dependencies:
+ '@types/istanbul-lib-report': 3.0.3
+
+ '@types/jest@30.0.0':
+ dependencies:
+ expect: 30.2.0
+ pretty-format: 30.2.0
+
'@types/js-yaml@4.0.9': {}
'@types/jsdom@21.1.7':
@@ -9181,22 +11877,55 @@ snapshots:
dependencies:
'@types/unist': 3.0.3
+ '@types/methods@1.1.4': {}
+
'@types/ms@2.1.0': {}
+ '@types/node@22.19.3':
+ dependencies:
+ undici-types: 6.21.0
+
'@types/node@24.10.0':
dependencies:
undici-types: 7.16.0
'@types/normalize-package-data@2.4.4': {}
+ '@types/qs@6.14.0': {}
+
+ '@types/range-parser@1.2.7': {}
+
'@types/resolve@1.20.2': {}
+ '@types/send@1.2.1':
+ dependencies:
+ '@types/node': 22.19.3
+
+ '@types/serve-static@2.2.0':
+ dependencies:
+ '@types/http-errors': 2.0.5
+ '@types/node': 22.19.3
+
'@types/sinonjs__fake-timers@8.1.1':
optional: true
'@types/sizzle@2.3.10':
optional: true
+ '@types/stack-utils@2.0.3': {}
+
+ '@types/superagent@8.1.9':
+ dependencies:
+ '@types/cookiejar': 2.1.5
+ '@types/methods': 1.1.4
+ '@types/node': 22.19.3
+ form-data: 4.0.4
+
+ '@types/supertest@6.0.3':
+ dependencies:
+ '@types/methods': 1.1.4
+ '@types/superagent': 8.1.9
+
'@types/swagger-schema-official@2.0.25': {}
'@types/tmp@0.2.6':
@@ -9208,6 +11937,12 @@ snapshots:
'@types/unist@3.0.3': {}
+ '@types/yargs-parser@21.0.3': {}
+
+ '@types/yargs@17.0.35':
+ dependencies:
+ '@types/yargs-parser': 21.0.3
+
'@types/yauzl@2.10.3':
dependencies:
'@types/node': 24.10.0
@@ -9306,6 +12041,8 @@ snapshots:
'@typescript-eslint/types': 8.46.3
eslint-visitor-keys: 4.2.1
+ '@ungap/structured-clone@1.3.0': {}
+
'@unocss/astro@66.5.4(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1))':
dependencies:
'@unocss/core': 66.5.4
@@ -9533,6 +12270,24 @@ snapshots:
vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1)
vue: 3.5.23(typescript@5.9.3)
+ '@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1))':
+ dependencies:
+ '@ampproject/remapping': 2.3.0
+ '@bcoe/v8-coverage': 0.2.3
+ debug: 4.4.3(supports-color@5.5.0)
+ istanbul-lib-coverage: 3.2.2
+ istanbul-lib-report: 3.0.1
+ istanbul-lib-source-maps: 5.0.6
+ istanbul-reports: 3.2.0
+ magic-string: 0.30.21
+ magicast: 0.3.5
+ std-env: 3.10.0
+ test-exclude: 7.0.1
+ tinyrainbow: 1.2.0
+ vitest: 2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1)
+ transitivePeerDependencies:
+ - supports-color
+
'@vitest/coverage-v8@2.1.9(vitest@2.1.9(@types/node@24.10.0)(jsdom@25.0.1)(terser@5.44.1))':
dependencies:
'@ampproject/remapping': 2.3.0
@@ -9569,6 +12324,14 @@ snapshots:
chai: 5.3.3
tinyrainbow: 1.2.0
+ '@vitest/mocker@2.1.9(vite@5.4.21(@types/node@22.19.3)(terser@5.44.1))':
+ dependencies:
+ '@vitest/spy': 2.1.9
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 5.4.21(@types/node@22.19.3)(terser@5.44.1)
+
'@vitest/mocker@2.1.9(vite@5.4.21(@types/node@24.10.0)(terser@5.44.1))':
dependencies:
'@vitest/spy': 2.1.9
@@ -9706,6 +12469,86 @@ snapshots:
typescript: 5.9.3
vue: 3.5.23(typescript@5.9.3)
+ '@webassemblyjs/ast@1.14.1':
+ dependencies:
+ '@webassemblyjs/helper-numbers': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+
+ '@webassemblyjs/floating-point-hex-parser@1.13.2': {}
+
+ '@webassemblyjs/helper-api-error@1.13.2': {}
+
+ '@webassemblyjs/helper-buffer@1.14.1': {}
+
+ '@webassemblyjs/helper-numbers@1.13.2':
+ dependencies:
+ '@webassemblyjs/floating-point-hex-parser': 1.13.2
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/helper-wasm-bytecode@1.13.2': {}
+
+ '@webassemblyjs/helper-wasm-section@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/wasm-gen': 1.14.1
+
+ '@webassemblyjs/ieee754@1.13.2':
+ dependencies:
+ '@xtuc/ieee754': 1.2.0
+
+ '@webassemblyjs/leb128@1.13.2':
+ dependencies:
+ '@xtuc/long': 4.2.2
+
+ '@webassemblyjs/utf8@1.13.2': {}
+
+ '@webassemblyjs/wasm-edit@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/helper-wasm-section': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-opt': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ '@webassemblyjs/wast-printer': 1.14.1
+
+ '@webassemblyjs/wasm-gen@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wasm-opt@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-buffer': 1.14.1
+ '@webassemblyjs/wasm-gen': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+
+ '@webassemblyjs/wasm-parser@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/helper-api-error': 1.13.2
+ '@webassemblyjs/helper-wasm-bytecode': 1.13.2
+ '@webassemblyjs/ieee754': 1.13.2
+ '@webassemblyjs/leb128': 1.13.2
+ '@webassemblyjs/utf8': 1.13.2
+
+ '@webassemblyjs/wast-printer@1.14.1':
+ dependencies:
+ '@webassemblyjs/ast': 1.14.1
+ '@xtuc/long': 4.2.2
+
+ '@xtuc/ieee754@1.2.0': {}
+
+ '@xtuc/long@4.2.2': {}
+
JSONStream@1.3.5:
dependencies:
jsonparse: 1.3.1
@@ -9713,10 +12556,23 @@ snapshots:
abstract-logging@2.0.1: {}
+ accepts@2.0.0:
+ dependencies:
+ mime-types: 3.0.2
+ negotiator: 1.0.0
+
+ acorn-import-phases@1.0.4(acorn@8.15.0):
+ dependencies:
+ acorn: 8.15.0
+
acorn-jsx@5.3.2(acorn@8.15.0):
dependencies:
acorn: 8.15.0
+ acorn-walk@8.3.4:
+ dependencies:
+ acorn: 8.15.0
+
acorn@8.15.0: {}
agent-base@7.1.4: {}
@@ -9747,6 +12603,15 @@ snapshots:
dependencies:
ajv: 8.17.1
+ ajv-keywords@3.5.2(ajv@6.12.6):
+ dependencies:
+ ajv: 6.12.6
+
+ ajv-keywords@5.1.0(ajv@8.17.1):
+ dependencies:
+ ajv: 8.17.1
+ fast-deep-equal: 3.1.3
+
ajv@6.12.6:
dependencies:
fast-deep-equal: 3.1.3
@@ -9763,13 +12628,11 @@ snapshots:
alien-signals@1.0.13: {}
- ansi-colors@4.1.3:
- optional: true
+ ansi-colors@4.1.3: {}
ansi-escapes@4.3.2:
dependencies:
type-fest: 0.21.3
- optional: true
ansi-escapes@7.2.0:
dependencies:
@@ -9787,8 +12650,12 @@ snapshots:
dependencies:
color-convert: 2.0.1
+ ansi-styles@5.2.0: {}
+
ansi-styles@6.2.3: {}
+ ansis@4.2.0: {}
+
any-base@1.1.0: {}
anymatch@3.1.3:
@@ -9796,11 +12663,19 @@ snapshots:
normalize-path: 3.0.0
picomatch: 2.3.1
+ append-field@1.0.0: {}
+
arch@2.2.0:
optional: true
are-docs-informative@0.0.2: {}
+ arg@4.1.3: {}
+
+ argparse@1.0.10:
+ dependencies:
+ sprintf-js: 1.0.3
+
argparse@2.0.1: {}
array-buffer-byte-length@1.0.2:
@@ -9810,6 +12685,8 @@ snapshots:
array-ify@1.0.0: {}
+ array-timsort@1.0.3: {}
+
array-union@2.1.0: {}
arraybuffer.prototype.slice@1.0.4:
@@ -9822,6 +12699,8 @@ snapshots:
get-intrinsic: 1.3.0
is-array-buffer: 3.0.5
+ asap@2.0.6: {}
+
asn1.js@5.4.1:
dependencies:
bn.js: 4.12.1
@@ -9875,6 +12754,33 @@ snapshots:
transitivePeerDependencies:
- debug
+ babel-jest@30.2.0(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@jest/transform': 30.2.0
+ '@types/babel__core': 7.20.5
+ babel-plugin-istanbul: 7.0.1
+ babel-preset-jest: 30.2.0(@babel/core@7.28.5)
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ slash: 3.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-istanbul@7.0.1:
+ dependencies:
+ '@babel/helper-plugin-utils': 7.27.1
+ '@istanbuljs/load-nyc-config': 1.1.0
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-instrument: 6.0.3
+ test-exclude: 6.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ babel-plugin-jest-hoist@30.2.0:
+ dependencies:
+ '@types/babel__core': 7.20.5
+
babel-plugin-polyfill-corejs2@0.4.14(@babel/core@7.28.5):
dependencies:
'@babel/compat-data': 7.28.5
@@ -9899,14 +12805,36 @@ snapshots:
transitivePeerDependencies:
- supports-color
+ babel-preset-current-node-syntax@1.2.0(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.28.5)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.28.5)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.28.5)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.28.5)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.28.5)
+
+ babel-preset-jest@30.2.0(@babel/core@7.28.5):
+ dependencies:
+ '@babel/core': 7.28.5
+ babel-plugin-jest-hoist: 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5)
+
balanced-match@1.0.2: {}
balanced-match@2.0.0: {}
- base64-js@1.5.1:
- optional: true
-
- baseline-browser-mapping@2.8.25: {}
+ base64-js@1.5.1: {}
baseline-browser-mapping@2.9.11: {}
@@ -9916,6 +12844,12 @@ snapshots:
binary-extensions@2.3.0: {}
+ bl@4.1.0:
+ dependencies:
+ buffer: 5.7.1
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+
blob-util@2.0.2:
optional: true
@@ -9924,6 +12858,20 @@ snapshots:
bn.js@4.12.1: {}
+ body-parser@2.2.1:
+ dependencies:
+ bytes: 3.1.2
+ content-type: 1.0.5
+ debug: 4.4.3(supports-color@5.5.0)
+ http-errors: 2.0.0
+ iconv-lite: 0.7.1
+ on-finished: 2.4.1
+ qs: 6.14.0
+ raw-body: 3.0.2
+ type-is: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
boolbase@1.0.0: {}
brace-expansion@1.1.12:
@@ -9942,14 +12890,6 @@ snapshots:
brorand@1.1.0:
optional: true
- browserslist@4.27.0:
- dependencies:
- baseline-browser-mapping: 2.8.25
- caniuse-lite: 1.0.30001762
- electron-to-chromium: 1.5.245
- node-releases: 2.0.27
- update-browserslist-db: 1.1.4(browserslist@4.27.0)
-
browserslist@4.28.1:
dependencies:
baseline-browser-mapping: 2.9.11
@@ -9958,6 +12898,14 @@ snapshots:
node-releases: 2.0.27
update-browserslist-db: 1.2.3(browserslist@4.28.1)
+ bs-logger@0.2.6:
+ dependencies:
+ fast-json-stable-stringify: 2.1.0
+
+ bser@2.1.1:
+ dependencies:
+ node-int64: 0.4.0
+
buffer-crc32@0.2.13:
optional: true
@@ -9970,10 +12918,13 @@ snapshots:
dependencies:
base64-js: 1.5.1
ieee754: 1.2.1
- optional: true
builtin-modules@3.3.0: {}
+ busboy@1.6.0:
+ dependencies:
+ streamsearch: 1.1.0
+
byline@5.0.0: {}
bytes@3.1.2: {}
@@ -10047,6 +12998,10 @@ snapshots:
callsites@3.1.0: {}
+ camelcase@5.3.1: {}
+
+ camelcase@6.3.0: {}
+
camelize-ts@3.0.0: {}
caniuse-lite@1.0.30001762: {}
@@ -10076,8 +13031,12 @@ snapshots:
chalk@5.6.2: {}
+ char-regex@1.0.2: {}
+
character-entities@2.0.2: {}
+ chardet@2.1.1: {}
+
check-error@2.1.1: {}
chokidar@3.6.0:
@@ -10098,6 +13057,8 @@ snapshots:
chownr@3.0.0: {}
+ chrome-trace-event@1.0.4: {}
+
ci-info@4.3.1: {}
cidr-regex@3.1.1:
@@ -10108,6 +13069,8 @@ snapshots:
dependencies:
consola: 3.4.2
+ cjs-module-lexer@2.2.0: {}
+
clean-regexp@1.0.0:
dependencies:
escape-string-regexp: 1.0.5
@@ -10118,12 +13081,13 @@ snapshots:
cli-cursor@3.1.0:
dependencies:
restore-cursor: 3.1.0
- optional: true
cli-cursor@5.0.0:
dependencies:
restore-cursor: 5.1.0
+ cli-spinners@2.9.2: {}
+
cli-table3@0.6.1:
dependencies:
string-width: 4.2.3
@@ -10131,6 +13095,12 @@ snapshots:
colors: 1.4.0
optional: true
+ cli-table3@0.6.5:
+ dependencies:
+ string-width: 4.2.3
+ optionalDependencies:
+ '@colors/colors': 1.5.0
+
cli-truncate@2.1.0:
dependencies:
slice-ansi: 3.0.0
@@ -10142,6 +13112,8 @@ snapshots:
slice-ansi: 5.0.0
string-width: 7.2.0
+ cli-width@4.1.0: {}
+
clipboard@2.0.11:
dependencies:
good-listener: 1.2.2
@@ -10154,6 +13126,12 @@ snapshots:
strip-ansi: 6.0.1
wrap-ansi: 7.0.0
+ clone@1.0.4: {}
+
+ co@4.6.0: {}
+
+ collect-v8-coverage@1.0.3: {}
+
color-convert@1.9.3:
dependencies:
color-name: 1.1.3
@@ -10181,9 +13159,17 @@ snapshots:
commander@2.20.3: {}
+ commander@4.1.1: {}
+
commander@6.2.1:
optional: true
+ comment-json@4.4.1:
+ dependencies:
+ array-timsort: 1.0.3
+ core-util-is: 1.0.3
+ esprima: 4.0.1
+
comment-parser@1.4.1: {}
common-tags@1.8.2: {}
@@ -10193,8 +13179,17 @@ snapshots:
array-ify: 1.0.0
dot-prop: 5.3.0
+ component-emitter@1.3.1: {}
+
concat-map@0.0.1: {}
+ concat-stream@2.0.0:
+ dependencies:
+ buffer-from: 1.1.2
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ typedarray: 0.0.6
+
confbox@0.1.8: {}
confbox@0.2.2: {}
@@ -10205,6 +13200,10 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ content-disposition@1.0.1: {}
+
+ content-type@1.0.5: {}
+
conventional-changelog-angular@7.0.0:
dependencies:
compare-func: 2.0.0
@@ -10226,9 +13225,11 @@ snapshots:
cookie@0.7.2: {}
+ cookiejar@2.1.4: {}
+
core-js-compat@3.46.0:
dependencies:
- browserslist: 4.27.0
+ browserslist: 4.28.1
core-js-compat@3.47.0:
dependencies:
@@ -10238,6 +13239,11 @@ snapshots:
core-util-is@1.0.3: {}
+ cors@2.8.5:
+ dependencies:
+ object-assign: 4.1.1
+ vary: 1.1.2
+
cosmiconfig-typescript-loader@6.2.0(@types/node@24.10.0)(cosmiconfig@9.0.0(typescript@5.9.3))(typescript@5.9.3):
dependencies:
'@types/node': 24.10.0
@@ -10245,6 +13251,15 @@ snapshots:
jiti: 2.6.1
typescript: 5.9.3
+ cosmiconfig@8.3.6(typescript@5.9.3):
+ dependencies:
+ import-fresh: 3.3.1
+ js-yaml: 4.1.0
+ parse-json: 5.2.0
+ path-type: 4.0.0
+ optionalDependencies:
+ typescript: 5.9.3
+
cosmiconfig@9.0.0(typescript@5.9.3):
dependencies:
env-paths: 2.2.1
@@ -10254,6 +13269,8 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
+ create-require@1.1.1: {}
+
cron-validator@1.4.0: {}
cross-spawn@6.0.6:
@@ -10408,6 +13425,8 @@ snapshots:
dependencies:
character-entities: 2.0.2
+ dedent@1.7.1: {}
+
deeks@3.1.0: {}
deep-eql@5.0.2: {}
@@ -10418,6 +13437,10 @@ snapshots:
deepmerge@4.3.1: {}
+ defaults@1.0.4:
+ dependencies:
+ clone: 1.0.4
+
define-data-property@1.1.4:
dependencies:
es-define-property: 1.0.1
@@ -10442,12 +13465,21 @@ snapshots:
destr@2.0.5: {}
+ detect-newline@3.1.0: {}
+
devlop@1.1.0:
dependencies:
dequal: 2.0.3
+ dezalgo@1.0.4:
+ dependencies:
+ asap: 2.0.6
+ wrappy: 1.0.2
+
diff-sequences@27.5.1: {}
+ diff@4.0.2: {}
+
dir-glob@3.0.1:
dependencies:
path-type: 4.0.0
@@ -10478,6 +13510,10 @@ snapshots:
dependencies:
is-obj: 2.0.0
+ dotenv-expand@12.0.1:
+ dependencies:
+ dotenv: 16.6.1
+
dotenv@16.4.7: {}
dotenv@16.6.1: {}
@@ -10503,6 +13539,8 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ ee-first@1.1.1: {}
+
effect@3.18.4:
dependencies:
'@standard-schema/spec': 1.0.0
@@ -10512,8 +13550,6 @@ snapshots:
dependencies:
jake: 10.9.4
- electron-to-chromium@1.5.245: {}
-
electron-to-chromium@1.5.267: {}
elliptic@6.6.1:
@@ -10527,6 +13563,8 @@ snapshots:
minimalistic-crypto-utils: 1.0.1
optional: true
+ emittery@0.13.1: {}
+
emoji-regex@10.6.0: {}
emoji-regex@8.0.0: {}
@@ -10535,6 +13573,8 @@ snapshots:
empathic@2.0.0: {}
+ encodeurl@2.0.0: {}
+
end-of-stream@1.4.5:
dependencies:
once: 1.4.0
@@ -10762,6 +13802,8 @@ snapshots:
escape-string-regexp@1.0.5: {}
+ escape-string-regexp@2.0.0: {}
+
escape-string-regexp@4.0.0: {}
escape-string-regexp@5.0.0: {}
@@ -10781,6 +13823,10 @@ snapshots:
'@eslint/compat': 1.4.1(eslint@9.39.1(jiti@2.6.1))
eslint: 9.39.1(jiti@2.6.1)
+ eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)):
+ dependencies:
+ eslint: 9.39.1(jiti@2.6.1)
+
eslint-flat-config-utils@1.1.0:
dependencies:
pathe: 2.0.3
@@ -10909,6 +13955,16 @@ snapshots:
- supports-color
- typescript
+ eslint-plugin-prettier@5.5.4(@types/eslint@9.6.1)(eslint-config-prettier@10.1.8(eslint@9.39.1(jiti@2.6.1)))(eslint@9.39.1(jiti@2.6.1))(prettier@3.7.4):
+ dependencies:
+ eslint: 9.39.1(jiti@2.6.1)
+ prettier: 3.7.4
+ prettier-linter-helpers: 1.0.1
+ synckit: 0.11.11
+ optionalDependencies:
+ '@types/eslint': 9.6.1
+ eslint-config-prettier: 10.1.8(eslint@9.39.1(jiti@2.6.1))
+
eslint-plugin-regexp@2.10.0(eslint@9.39.1(jiti@2.6.1)):
dependencies:
'@eslint-community/eslint-utils': 4.9.0(eslint@9.39.1(jiti@2.6.1))
@@ -10987,6 +14043,11 @@ snapshots:
'@vue/compiler-sfc': 3.5.23
eslint: 9.39.1(jiti@2.6.1)
+ eslint-scope@5.1.1:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 4.3.0
+
eslint-scope@7.2.2:
dependencies:
esrecurse: 4.3.0
@@ -11054,6 +14115,8 @@ snapshots:
acorn-jsx: 5.3.2(acorn@8.15.0)
eslint-visitor-keys: 3.4.3
+ esprima@4.0.1: {}
+
esquery@1.6.0:
dependencies:
estraverse: 5.3.0
@@ -11062,6 +14125,8 @@ snapshots:
dependencies:
estraverse: 5.3.0
+ estraverse@4.3.0: {}
+
estraverse@5.3.0: {}
estree-walker@1.0.1: {}
@@ -11076,11 +14141,15 @@ snapshots:
eta@3.5.0: {}
+ etag@1.8.1: {}
+
eventemitter2@6.4.7:
optional: true
eventemitter3@5.0.1: {}
+ events@3.3.0: {}
+
execa@4.1.0:
dependencies:
cross-spawn: 7.0.6
@@ -11094,6 +14163,18 @@ snapshots:
strip-final-newline: 2.0.0
optional: true
+ execa@5.1.1:
+ dependencies:
+ cross-spawn: 7.0.6
+ get-stream: 6.0.1
+ human-signals: 2.1.0
+ is-stream: 2.0.1
+ merge-stream: 2.0.0
+ npm-run-path: 4.0.1
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ strip-final-newline: 2.0.0
+
execa@8.0.1:
dependencies:
cross-spawn: 7.0.6
@@ -11111,8 +14192,52 @@ snapshots:
pify: 2.3.0
optional: true
+ exit-x@0.2.2: {}
+
expect-type@1.2.2: {}
+ expect@30.2.0:
+ dependencies:
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+
+ express@5.2.1:
+ dependencies:
+ accepts: 2.0.0
+ body-parser: 2.2.1
+ content-disposition: 1.0.1
+ content-type: 1.0.5
+ cookie: 0.7.2
+ cookie-signature: 1.2.2
+ debug: 4.4.3(supports-color@5.5.0)
+ depd: 2.0.0
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ finalhandler: 2.1.1
+ fresh: 2.0.0
+ http-errors: 2.0.0
+ merge-descriptors: 2.0.0
+ mime-types: 3.0.2
+ on-finished: 2.4.1
+ once: 1.4.0
+ parseurl: 1.3.3
+ proxy-addr: 2.0.7
+ qs: 6.14.0
+ range-parser: 1.2.1
+ router: 2.2.0
+ send: 1.2.1
+ serve-static: 2.2.1
+ statuses: 2.0.1
+ type-is: 2.0.1
+ vary: 1.1.2
+ transitivePeerDependencies:
+ - supports-color
+
exsolve@1.0.7: {}
extend@3.0.2: {}
@@ -11142,6 +14267,8 @@ snapshots:
fast-deep-equal@3.1.3: {}
+ fast-diff@1.3.0: {}
+
fast-glob@3.3.3:
dependencies:
'@nodelib/fs.stat': 2.0.5
@@ -11244,6 +14371,10 @@ snapshots:
dependencies:
format: 0.2.2
+ fb-watchman@2.0.2:
+ dependencies:
+ bser: 2.1.1
+
fd-slicer@1.1.0:
dependencies:
pend: 1.2.0
@@ -11266,6 +14397,15 @@ snapshots:
dependencies:
flat-cache: 4.0.1
+ file-type@21.2.0:
+ dependencies:
+ '@tokenizer/inflate': 0.4.1
+ strtok3: 10.3.4
+ token-types: 6.1.2
+ uint8array-extras: 1.5.0
+ transitivePeerDependencies:
+ - supports-color
+
filelist@1.0.4:
dependencies:
minimatch: 5.1.6
@@ -11274,6 +14414,17 @@ snapshots:
dependencies:
to-regex-range: 5.0.1
+ finalhandler@2.1.1:
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ on-finished: 2.4.1
+ parseurl: 1.3.3
+ statuses: 2.0.1
+ transitivePeerDependencies:
+ - supports-color
+
find-my-way@8.2.2:
dependencies:
fast-deep-equal: 3.1.3
@@ -11331,6 +14482,23 @@ snapshots:
forever-agent@0.6.1: {}
+ fork-ts-checker-webpack-plugin@9.1.0(typescript@5.9.3)(webpack@5.103.0):
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ chalk: 4.1.2
+ chokidar: 4.0.3
+ cosmiconfig: 8.3.6(typescript@5.9.3)
+ deepmerge: 4.3.1
+ fs-extra: 10.1.0
+ memfs: 3.5.3
+ minimatch: 3.1.2
+ node-abort-controller: 3.1.1
+ schema-utils: 3.3.0
+ semver: 7.7.3
+ tapable: 2.3.0
+ typescript: 5.9.3
+ webpack: 5.103.0
+
form-data@2.3.3:
dependencies:
asynckit: 0.4.0
@@ -11345,12 +14513,34 @@ snapshots:
hasown: 2.0.2
mime-types: 2.1.35
+ form-data@4.0.5:
+ dependencies:
+ asynckit: 0.4.0
+ combined-stream: 1.0.8
+ es-set-tostringtag: 2.1.0
+ hasown: 2.0.2
+ mime-types: 2.1.35
+
format@0.2.2: {}
+ formidable@3.5.4:
+ dependencies:
+ '@paralleldrive/cuid2': 2.3.1
+ dezalgo: 1.0.4
+ once: 1.4.0
+
forwarded@0.2.0: {}
fp-ts@2.16.9: {}
+ fresh@2.0.0: {}
+
+ fs-extra@10.1.0:
+ dependencies:
+ graceful-fs: 4.2.11
+ jsonfile: 6.2.0
+ universalify: 2.0.1
+
fs-extra@9.1.0:
dependencies:
at-least-node: 1.0.0
@@ -11358,6 +14548,8 @@ snapshots:
jsonfile: 6.2.0
universalify: 2.0.1
+ fs-monkey@1.1.0: {}
+
fs.realpath@1.0.0: {}
fsevents@2.3.2:
@@ -11402,6 +14594,8 @@ snapshots:
get-own-enumerable-property-symbols@3.0.2: {}
+ get-package-type@0.1.0: {}
+
get-proto@1.0.1:
dependencies:
dunder-proto: 1.0.1
@@ -11412,6 +14606,8 @@ snapshots:
pump: 3.0.3
optional: true
+ get-stream@6.0.1: {}
+
get-stream@8.0.1: {}
get-symbol-description@1.1.0:
@@ -11453,6 +14649,8 @@ snapshots:
dependencies:
is-glob: 4.0.3
+ glob-to-regexp@0.4.1: {}
+
glob@10.4.5:
dependencies:
foreground-child: 3.3.1
@@ -11471,6 +14669,12 @@ snapshots:
package-json-from-dist: 1.0.1
path-scurry: 2.0.0
+ glob@13.0.0:
+ dependencies:
+ minimatch: 10.1.1
+ minipass: 7.1.2
+ path-scurry: 2.0.0
+
glob@7.2.3:
dependencies:
fs.realpath: 1.0.0
@@ -11515,6 +14719,8 @@ snapshots:
globals@15.15.0: {}
+ globals@16.5.0: {}
+
globalthis@1.0.4:
dependencies:
define-properties: 1.2.1
@@ -11558,6 +14764,15 @@ snapshots:
dependencies:
duplexer: 0.1.2
+ handlebars@4.7.8:
+ dependencies:
+ minimist: 1.2.8
+ neo-async: 2.6.2
+ source-map: 0.6.1
+ wordwrap: 1.0.0
+ optionalDependencies:
+ uglify-js: 3.19.3
+
har-schema@2.0.0: {}
har-validator@5.1.5:
@@ -11641,6 +14856,14 @@ snapshots:
statuses: 2.0.1
toidentifier: 1.0.1
+ http-errors@2.0.1:
+ dependencies:
+ depd: 2.0.0
+ inherits: 2.0.4
+ setprototypeof: 1.2.0
+ statuses: 2.0.2
+ toidentifier: 1.0.1
+
http-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.4
@@ -11673,6 +14896,8 @@ snapshots:
human-signals@1.1.1:
optional: true
+ human-signals@2.1.0: {}
+
human-signals@5.0.0: {}
husky@9.1.7: {}
@@ -11681,10 +14906,13 @@ snapshots:
dependencies:
safer-buffer: 2.1.2
+ iconv-lite@0.7.1:
+ dependencies:
+ safer-buffer: 2.1.2
+
idb@7.1.1: {}
- ieee754@1.2.1:
- optional: true
+ ieee754@1.2.1: {}
ignore-by-default@1.0.1: {}
@@ -11699,6 +14927,11 @@ snapshots:
parent-module: 1.0.1
resolve-from: 4.0.0
+ import-local@3.2.0:
+ dependencies:
+ pkg-dir: 4.2.0
+ resolve-cwd: 3.0.0
+
import-meta-resolve@4.2.0: {}
imurmurhash@0.1.4: {}
@@ -11803,6 +15036,8 @@ snapshots:
dependencies:
get-east-asian-width: 1.4.0
+ is-generator-fn@2.1.0: {}
+
is-generator-function@1.1.2:
dependencies:
call-bound: 1.0.4
@@ -11821,6 +15056,8 @@ snapshots:
is-path-inside: 3.0.3
optional: true
+ is-interactive@1.0.0: {}
+
is-map@2.0.3: {}
is-module@1.0.0: {}
@@ -11845,6 +15082,8 @@ snapshots:
is-potential-custom-element-name@1.0.1: {}
+ is-promise@4.0.0: {}
+
is-regex@1.2.1:
dependencies:
call-bound: 1.0.4
@@ -11887,8 +15126,7 @@ snapshots:
is-typedarray@1.0.0: {}
- is-unicode-supported@0.1.0:
- optional: true
+ is-unicode-supported@0.1.0: {}
is-weakmap@2.0.2: {}
@@ -11917,6 +15155,16 @@ snapshots:
istanbul-lib-coverage@3.2.2: {}
+ istanbul-lib-instrument@6.0.3:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/parser': 7.28.5
+ '@istanbuljs/schema': 0.1.3
+ istanbul-lib-coverage: 3.2.2
+ semver: 7.7.3
+ transitivePeerDependencies:
+ - supports-color
+
istanbul-lib-report@3.0.1:
dependencies:
istanbul-lib-coverage: 3.2.2
@@ -11936,6 +15184,8 @@ snapshots:
html-escaper: 2.0.2
istanbul-lib-report: 3.0.1
+ iterare@1.2.1: {}
+
jackspeak@3.4.3:
dependencies:
'@isaacs/cliui': 8.0.2
@@ -11952,10 +15202,330 @@ snapshots:
filelist: 1.0.4
picocolors: 1.1.1
+ javascript-natural-sort@0.7.1: {}
+
javascript-time-ago@2.5.12:
dependencies:
relative-time-format: 1.1.11
+ jest-changed-files@30.2.0:
+ dependencies:
+ execa: 5.1.1
+ jest-util: 30.2.0
+ p-limit: 3.1.0
+
+ jest-circus@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/expect': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ chalk: 4.1.2
+ co: 4.6.0
+ dedent: 1.7.1
+ is-generator-fn: 2.1.0
+ jest-each: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-runtime: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ p-limit: 3.1.0
+ pretty-format: 30.2.0
+ pure-rand: 7.0.1
+ slash: 3.0.0
+ stack-utils: 2.0.6
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-cli@30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3)):
+ dependencies:
+ '@jest/core': 30.2.0(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ exit-x: 0.2.2
+ import-local: 3.2.0
+ jest-config: 30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ yargs: 17.7.2
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
+ jest-config@30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3)):
+ dependencies:
+ '@babel/core': 7.28.5
+ '@jest/get-type': 30.1.0
+ '@jest/pattern': 30.0.1
+ '@jest/test-sequencer': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.28.5)
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ deepmerge: 4.3.1
+ glob: 10.4.5
+ graceful-fs: 4.2.11
+ jest-circus: 30.2.0
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-runner: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ micromatch: 4.0.8
+ parse-json: 5.2.0
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ strip-json-comments: 3.1.1
+ optionalDependencies:
+ '@types/node': 22.19.3
+ ts-node: 10.9.2(@types/node@22.19.3)(typescript@5.9.3)
+ transitivePeerDependencies:
+ - babel-plugin-macros
+ - supports-color
+
+ jest-diff@30.2.0:
+ dependencies:
+ '@jest/diff-sequences': 30.0.1
+ '@jest/get-type': 30.1.0
+ chalk: 4.1.2
+ pretty-format: 30.2.0
+
+ jest-docblock@30.2.0:
+ dependencies:
+ detect-newline: 3.1.0
+
+ jest-each@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
+ chalk: 4.1.2
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
+
+ jest-environment-node@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ jest-mock: 30.2.0
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+
+ jest-haste-map@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ anymatch: 3.1.3
+ fb-watchman: 2.0.2
+ graceful-fs: 4.2.11
+ jest-regex-util: 30.0.1
+ jest-util: 30.2.0
+ jest-worker: 30.2.0
+ micromatch: 4.0.8
+ walker: 1.0.8
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ jest-leak-detector@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ pretty-format: 30.2.0
+
+ jest-matcher-utils@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ chalk: 4.1.2
+ jest-diff: 30.2.0
+ pretty-format: 30.2.0
+
+ jest-message-util@30.2.0:
+ dependencies:
+ '@babel/code-frame': 7.27.1
+ '@jest/types': 30.2.0
+ '@types/stack-utils': 2.0.3
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ micromatch: 4.0.8
+ pretty-format: 30.2.0
+ slash: 3.0.0
+ stack-utils: 2.0.6
+
+ jest-mock@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ jest-util: 30.2.0
+
+ jest-pnp-resolver@1.2.3(jest-resolve@30.2.0):
+ optionalDependencies:
+ jest-resolve: 30.2.0
+
+ jest-regex-util@30.0.1: {}
+
+ jest-resolve-dependencies@30.2.0:
+ dependencies:
+ jest-regex-util: 30.0.1
+ jest-snapshot: 30.2.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-resolve@30.2.0:
+ dependencies:
+ chalk: 4.1.2
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-pnp-resolver: 1.2.3(jest-resolve@30.2.0)
+ jest-util: 30.2.0
+ jest-validate: 30.2.0
+ slash: 3.0.0
+ unrs-resolver: 1.11.1
+
+ jest-runner@30.2.0:
+ dependencies:
+ '@jest/console': 30.2.0
+ '@jest/environment': 30.2.0
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ chalk: 4.1.2
+ emittery: 0.13.1
+ exit-x: 0.2.2
+ graceful-fs: 4.2.11
+ jest-docblock: 30.2.0
+ jest-environment-node: 30.2.0
+ jest-haste-map: 30.2.0
+ jest-leak-detector: 30.2.0
+ jest-message-util: 30.2.0
+ jest-resolve: 30.2.0
+ jest-runtime: 30.2.0
+ jest-util: 30.2.0
+ jest-watcher: 30.2.0
+ jest-worker: 30.2.0
+ p-limit: 3.1.0
+ source-map-support: 0.5.13
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-runtime@30.2.0:
+ dependencies:
+ '@jest/environment': 30.2.0
+ '@jest/fake-timers': 30.2.0
+ '@jest/globals': 30.2.0
+ '@jest/source-map': 30.0.1
+ '@jest/test-result': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ chalk: 4.1.2
+ cjs-module-lexer: 2.2.0
+ collect-v8-coverage: 1.0.3
+ glob: 10.4.5
+ graceful-fs: 4.2.11
+ jest-haste-map: 30.2.0
+ jest-message-util: 30.2.0
+ jest-mock: 30.2.0
+ jest-regex-util: 30.0.1
+ jest-resolve: 30.2.0
+ jest-snapshot: 30.2.0
+ jest-util: 30.2.0
+ slash: 3.0.0
+ strip-bom: 4.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-snapshot@30.2.0:
+ dependencies:
+ '@babel/core': 7.28.5
+ '@babel/generator': 7.28.5
+ '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.28.5)
+ '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.5)
+ '@babel/types': 7.28.5
+ '@jest/expect-utils': 30.2.0
+ '@jest/get-type': 30.1.0
+ '@jest/snapshot-utils': 30.2.0
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ babel-preset-current-node-syntax: 1.2.0(@babel/core@7.28.5)
+ chalk: 4.1.2
+ expect: 30.2.0
+ graceful-fs: 4.2.11
+ jest-diff: 30.2.0
+ jest-matcher-utils: 30.2.0
+ jest-message-util: 30.2.0
+ jest-util: 30.2.0
+ pretty-format: 30.2.0
+ semver: 7.7.3
+ synckit: 0.11.11
+ transitivePeerDependencies:
+ - supports-color
+
+ jest-util@30.2.0:
+ dependencies:
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ chalk: 4.1.2
+ ci-info: 4.3.1
+ graceful-fs: 4.2.11
+ picomatch: 4.0.3
+
+ jest-validate@30.2.0:
+ dependencies:
+ '@jest/get-type': 30.1.0
+ '@jest/types': 30.2.0
+ camelcase: 6.3.0
+ chalk: 4.1.2
+ leven: 3.1.0
+ pretty-format: 30.2.0
+
+ jest-watcher@30.2.0:
+ dependencies:
+ '@jest/test-result': 30.2.0
+ '@jest/types': 30.2.0
+ '@types/node': 22.19.3
+ ansi-escapes: 4.3.2
+ chalk: 4.1.2
+ emittery: 0.13.1
+ jest-util: 30.2.0
+ string-length: 4.0.2
+
+ jest-worker@27.5.1:
+ dependencies:
+ '@types/node': 22.19.3
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest-worker@30.2.0:
+ dependencies:
+ '@types/node': 22.19.3
+ '@ungap/structured-clone': 1.3.0
+ jest-util: 30.2.0
+ merge-stream: 2.0.0
+ supports-color: 8.1.1
+
+ jest@30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3)):
+ dependencies:
+ '@jest/core': 30.2.0(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))
+ '@jest/types': 30.2.0
+ import-local: 3.2.0
+ jest-cli: 30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))
+ transitivePeerDependencies:
+ - '@types/node'
+ - babel-plugin-macros
+ - esbuild-register
+ - supports-color
+ - ts-node
+
jiti@2.6.1: {}
jose@6.1.0:
@@ -11967,6 +15537,11 @@ snapshots:
js-tokens@9.0.1: {}
+ js-yaml@3.14.2:
+ dependencies:
+ argparse: 1.0.10
+ esprima: 4.0.1
+
js-yaml@4.1.0:
dependencies:
argparse: 2.0.1
@@ -12053,6 +15628,8 @@ snapshots:
espree: 9.6.1
semver: 7.7.3
+ jsonc-parser@3.3.1: {}
+
jsonfile@6.2.0:
dependencies:
universalify: 2.0.1
@@ -12193,6 +15770,8 @@ snapshots:
rfdc: 1.4.1
wrap-ansi: 9.0.2
+ load-esm@1.0.3: {}
+
load-json-file@4.0.0:
dependencies:
graceful-fs: 4.2.11
@@ -12200,6 +15779,8 @@ snapshots:
pify: 3.0.0
strip-bom: 3.0.0
+ loader-runner@4.3.1: {}
+
local-pkg@0.5.1:
dependencies:
mlly: 1.8.0
@@ -12223,6 +15804,8 @@ snapshots:
dependencies:
p-locate: 6.0.0
+ lodash-es@4.17.22: {}
+
lodash.camelcase@4.3.0: {}
lodash.debounce@4.0.8: {}
@@ -12231,6 +15814,8 @@ snapshots:
lodash.kebabcase@4.1.1: {}
+ lodash.memoize@4.1.2: {}
+
lodash.merge@4.6.2: {}
lodash.mergewith@4.6.2: {}
@@ -12256,7 +15841,6 @@ snapshots:
dependencies:
chalk: 4.1.2
is-unicode-supported: 0.1.0
- optional: true
log-update@4.0.0:
dependencies:
@@ -12290,6 +15874,10 @@ snapshots:
dependencies:
sourcemap-codec: 1.4.8
+ magic-string@0.30.17:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
@@ -12304,6 +15892,12 @@ snapshots:
dependencies:
semver: 7.7.3
+ make-error@1.3.6: {}
+
+ makeerror@1.0.12:
+ dependencies:
+ tmpl: 1.0.5
+
markdown-table@3.0.4: {}
math-intrinsics@1.1.0: {}
@@ -12425,16 +16019,28 @@ snapshots:
mdn-data@2.12.2: {}
+ media-typer@0.3.0: {}
+
+ media-typer@1.1.0: {}
+
+ memfs@3.5.3:
+ dependencies:
+ fs-monkey: 1.1.0
+
memorystream@0.3.1: {}
meow@12.1.1: {}
meow@13.2.0: {}
+ merge-descriptors@2.0.0: {}
+
merge-stream@2.0.0: {}
merge2@1.4.1: {}
+ methods@1.1.2: {}
+
micromark-core-commonmark@2.0.3:
dependencies:
decode-named-character-reference: 1.2.0
@@ -12640,14 +16246,21 @@ snapshots:
mime-db@1.52.0: {}
+ mime-db@1.54.0: {}
+
mime-types@2.1.35:
dependencies:
mime-db: 1.52.0
+ mime-types@3.0.2:
+ dependencies:
+ mime-db: 1.54.0
+
+ mime@2.6.0: {}
+
mime@3.0.0: {}
- mimic-fn@2.1.0:
- optional: true
+ mimic-fn@2.1.0: {}
mimic-fn@4.0.0: {}
@@ -12684,6 +16297,10 @@ snapshots:
dependencies:
minipass: 7.1.2
+ mkdirp@0.5.6:
+ dependencies:
+ minimist: 1.2.8
+
mlly@1.8.0:
dependencies:
acorn: 8.15.0
@@ -12703,8 +16320,20 @@ snapshots:
muggle-string@0.4.1: {}
+ multer@2.0.2:
+ dependencies:
+ append-field: 1.0.0
+ busboy: 1.6.0
+ concat-stream: 2.0.0
+ mkdirp: 0.5.6
+ object-assign: 4.1.1
+ type-is: 1.6.18
+ xtend: 4.0.2
+
mustache@4.2.0: {}
+ mute-stream@2.0.0: {}
+
nanoid@3.3.11: {}
nanoid@5.0.9: {}
@@ -12724,8 +16353,25 @@ snapshots:
railroad-diagrams: 1.0.0
randexp: 0.4.6
+ negotiator@1.0.0: {}
+
+ neo-async@2.6.2: {}
+
+ nestjs-pino@4.5.0(@nestjs/common@11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2))(pino-http@11.0.0)(pino@10.1.0)(rxjs@7.8.2):
+ dependencies:
+ '@nestjs/common': 11.1.11(reflect-metadata@0.2.2)(rxjs@7.8.2)
+ pino: 10.1.0
+ pino-http: 11.0.0
+ rxjs: 7.8.2
+
nice-try@1.0.5: {}
+ node-abort-controller@3.1.1: {}
+
+ node-emoji@1.11.0:
+ dependencies:
+ lodash: 4.17.21
+
node-fetch-h2@2.3.0:
dependencies:
http2-client: 1.3.5
@@ -12736,6 +16382,8 @@ snapshots:
dependencies:
whatwg-url: 5.0.0
+ node-int64@0.4.0: {}
+
node-readfiles@0.2.0:
dependencies:
es6-promise: 3.3.1
@@ -12779,7 +16427,6 @@ snapshots:
npm-run-path@4.0.1:
dependencies:
path-key: 3.1.1
- optional: true
npm-run-path@5.3.0:
dependencies:
@@ -12835,6 +16482,8 @@ snapshots:
oauth4webapi@3.8.2:
optional: true
+ object-assign@4.1.1: {}
+
object-inspect@1.13.4: {}
object-keys@1.1.1: {}
@@ -12860,6 +16509,10 @@ snapshots:
on-exit-leak-free@2.1.2: {}
+ on-finished@2.4.1:
+ dependencies:
+ ee-first: 1.1.1
+
once@1.4.0:
dependencies:
wrappy: 1.0.2
@@ -12867,7 +16520,6 @@ snapshots:
onetime@5.1.2:
dependencies:
mimic-fn: 2.1.0
- optional: true
onetime@6.0.0:
dependencies:
@@ -12898,6 +16550,18 @@ snapshots:
type-check: 0.4.0
word-wrap: 1.2.5
+ ora@5.4.1:
+ dependencies:
+ bl: 4.1.0
+ chalk: 4.1.2
+ cli-cursor: 3.1.0
+ cli-spinners: 2.9.2
+ is-interactive: 1.0.0
+ is-unicode-supported: 0.1.0
+ log-symbols: 4.1.0
+ strip-ansi: 6.0.1
+ wcwidth: 1.0.1
+
ospath@1.2.2:
optional: true
@@ -12974,6 +16638,8 @@ snapshots:
dependencies:
entities: 6.0.1
+ parseurl@1.3.3: {}
+
path-browserify@1.0.1: {}
path-exists@4.0.0: {}
@@ -13000,6 +16666,8 @@ snapshots:
lru-cache: 11.2.2
minipass: 7.1.2
+ path-to-regexp@8.3.0: {}
+
path-type@3.0.0:
dependencies:
pify: 3.0.0
@@ -13027,6 +16695,8 @@ snapshots:
picomatch@2.3.1: {}
+ picomatch@4.0.2: {}
+
picomatch@4.0.3: {}
pidtree@0.3.1: {}
@@ -13052,6 +16722,13 @@ snapshots:
dependencies:
split2: 4.2.0
+ pino-http@11.0.0:
+ dependencies:
+ get-caller-file: 2.0.5
+ pino: 10.1.0
+ pino-std-serializers: 7.0.0
+ process-warning: 5.0.0
+
pino-pretty@13.1.2:
dependencies:
colorette: 2.0.20
@@ -13070,6 +16747,20 @@ snapshots:
pino-std-serializers@7.0.0: {}
+ pino@10.1.0:
+ dependencies:
+ '@pinojs/redact': 0.4.0
+ atomic-sleep: 1.0.0
+ on-exit-leak-free: 2.1.2
+ pino-abstract-transport: 2.0.0
+ pino-std-serializers: 7.0.0
+ process-warning: 5.0.0
+ quick-format-unescaped: 4.0.4
+ real-require: 0.2.0
+ safe-stable-stringify: 2.5.0
+ sonic-boom: 4.2.0
+ thread-stream: 3.1.0
+
pino@9.14.0:
dependencies:
'@pinojs/redact': 0.4.0
@@ -13084,6 +16775,12 @@ snapshots:
sonic-boom: 4.2.0
thread-stream: 3.1.0
+ pirates@4.0.7: {}
+
+ pkg-dir@4.2.0:
+ dependencies:
+ find-up: 4.1.0
+
pkg-types@1.3.1:
dependencies:
confbox: 0.1.8
@@ -13145,10 +16842,22 @@ snapshots:
prelude-ls@1.2.1: {}
+ prettier-linter-helpers@1.0.1:
+ dependencies:
+ fast-diff: 1.3.0
+
+ prettier@3.7.4: {}
+
pretty-bytes@5.6.0: {}
pretty-bytes@6.1.1: {}
+ pretty-format@30.2.0:
+ dependencies:
+ '@jest/schemas': 30.0.5
+ ansi-styles: 5.2.0
+ react-is: 18.3.1
+
prisma@6.19.0(magicast@0.3.5)(typescript@5.9.3):
dependencies:
'@prisma/config': 6.19.0(magicast@0.3.5)
@@ -13192,6 +16901,8 @@ snapshots:
pure-rand@6.1.0: {}
+ pure-rand@7.0.1: {}
+
qified@0.5.1:
dependencies:
hookified: 1.12.2
@@ -13200,6 +16911,10 @@ snapshots:
dependencies:
side-channel: 1.1.0
+ qs@6.14.1:
+ dependencies:
+ side-channel: 1.1.0
+
qs@6.5.3: {}
quansync@0.2.11: {}
@@ -13219,8 +16934,17 @@ snapshots:
dependencies:
safe-buffer: 5.2.1
+ range-parser@1.2.1: {}
+
rate-limiter-flexible@4.0.1: {}
+ raw-body@3.0.2:
+ dependencies:
+ bytes: 3.1.2
+ http-errors: 2.0.1
+ iconv-lite: 0.7.1
+ unpipe: 1.0.0
+
rc9@2.1.2:
dependencies:
defu: 6.1.4
@@ -13229,6 +16953,8 @@ snapshots:
re2-wasm@1.0.2:
optional: true
+ react-is@18.3.1: {}
+
read-pkg-up@7.0.1:
dependencies:
find-up: 4.1.0
@@ -13258,6 +16984,12 @@ snapshots:
string_decoder: 1.1.1
util-deprecate: 1.0.2
+ readable-stream@3.6.2:
+ dependencies:
+ inherits: 2.0.4
+ string_decoder: 1.1.1
+ util-deprecate: 1.0.2
+
readdirp@3.6.0:
dependencies:
picomatch: 2.3.1
@@ -13270,6 +17002,8 @@ snapshots:
dependencies:
'@eslint-community/regexpp': 4.12.2
+ reflect-metadata@0.2.2: {}
+
reflect.getprototypeof@1.0.10:
dependencies:
call-bind: 1.0.8
@@ -13366,6 +17100,10 @@ snapshots:
require-from-string@2.0.2: {}
+ resolve-cwd@3.0.0:
+ dependencies:
+ resolve-from: 5.0.0
+
resolve-from@4.0.0: {}
resolve-from@5.0.0: {}
@@ -13382,7 +17120,6 @@ snapshots:
dependencies:
onetime: 5.1.2
signal-exit: 3.0.7
- optional: true
restore-cursor@5.1.0:
dependencies:
@@ -13436,6 +17173,16 @@ snapshots:
'@rollup/rollup-win32-x64-msvc': 4.52.5
fsevents: 2.3.3
+ router@2.2.0:
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ depd: 2.0.0
+ is-promise: 4.0.0
+ parseurl: 1.3.3
+ path-to-regexp: 8.3.0
+ transitivePeerDependencies:
+ - supports-color
+
rrweb-cssom@0.7.1: {}
rrweb-cssom@0.8.0: {}
@@ -13444,10 +17191,13 @@ snapshots:
dependencies:
queue-microtask: 1.2.3
+ rxjs@7.8.1:
+ dependencies:
+ tslib: 2.8.1
+
rxjs@7.8.2:
dependencies:
tslib: 2.8.1
- optional: true
safe-array-concat@1.1.3:
dependencies:
@@ -13484,6 +17234,19 @@ snapshots:
dependencies:
xmlchars: 2.2.0
+ schema-utils@3.3.0:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 6.12.6
+ ajv-keywords: 3.5.2(ajv@6.12.6)
+
+ schema-utils@4.3.3:
+ dependencies:
+ '@types/json-schema': 7.0.15
+ ajv: 8.17.1
+ ajv-formats: 2.1.1(ajv@8.17.1)
+ ajv-keywords: 5.1.0(ajv@8.17.1)
+
schemes@1.4.0:
dependencies:
extend: 3.0.2
@@ -13508,10 +17271,35 @@ snapshots:
semver@7.7.3: {}
+ send@1.2.1:
+ dependencies:
+ debug: 4.4.3(supports-color@5.5.0)
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ etag: 1.8.1
+ fresh: 2.0.0
+ http-errors: 2.0.1
+ mime-types: 3.0.2
+ ms: 2.1.3
+ on-finished: 2.4.1
+ range-parser: 1.2.1
+ statuses: 2.0.2
+ transitivePeerDependencies:
+ - supports-color
+
serialize-javascript@6.0.2:
dependencies:
randombytes: 2.1.0
+ serve-static@2.2.1:
+ dependencies:
+ encodeurl: 2.0.0
+ escape-html: 1.0.3
+ parseurl: 1.3.3
+ send: 1.2.1
+ transitivePeerDependencies:
+ - supports-color
+
set-cookie-parser@2.7.2: {}
set-function-length@1.2.2:
@@ -13615,8 +17403,7 @@ snapshots:
siginfo@2.0.0: {}
- signal-exit@3.0.7:
- optional: true
+ signal-exit@3.0.7: {}
signal-exit@4.1.0: {}
@@ -13669,6 +17456,11 @@ snapshots:
source-map-js@1.2.1: {}
+ source-map-support@0.5.13:
+ dependencies:
+ buffer-from: 1.1.2
+ source-map: 0.6.1
+
source-map-support@0.5.21:
dependencies:
buffer-from: 1.1.2
@@ -13676,6 +17468,10 @@ snapshots:
source-map@0.6.1: {}
+ source-map@0.7.4: {}
+
+ source-map@0.7.6: {}
+
source-map@0.8.0-beta.0:
dependencies:
whatwg-url: 7.1.0
@@ -13703,6 +17499,8 @@ snapshots:
split2@4.2.0: {}
+ sprintf-js@1.0.3: {}
+
sshpk@1.18.0:
dependencies:
asn1: 0.2.6
@@ -13717,10 +17515,16 @@ snapshots:
stable-hash-x@0.2.0: {}
+ stack-utils@2.0.6:
+ dependencies:
+ escape-string-regexp: 2.0.0
+
stackback@0.0.2: {}
statuses@2.0.1: {}
+ statuses@2.0.2: {}
+
std-env@3.10.0: {}
steed@1.1.3:
@@ -13738,8 +17542,15 @@ snapshots:
stream-buffers@3.0.3: {}
+ streamsearch@1.1.0: {}
+
string-argv@0.3.2: {}
+ string-length@4.0.2:
+ dependencies:
+ char-regex: 1.0.2
+ strip-ansi: 6.0.1
+
string-width@4.2.3:
dependencies:
emoji-regex: 8.0.0
@@ -13824,10 +17635,11 @@ snapshots:
strip-bom@3.0.0: {}
+ strip-bom@4.0.0: {}
+
strip-comments@2.0.1: {}
- strip-final-newline@2.0.0:
- optional: true
+ strip-final-newline@2.0.0: {}
strip-final-newline@3.0.0: {}
@@ -13843,6 +17655,10 @@ snapshots:
dependencies:
js-tokens: 9.0.1
+ strtok3@10.3.4:
+ dependencies:
+ '@tokenizer/token': 0.3.0
+
stylelint-config-html@1.1.0(postcss-html@1.8.0)(stylelint@16.25.0(typescript@5.9.3)):
dependencies:
postcss-html: 1.8.0
@@ -13913,6 +17729,28 @@ snapshots:
- supports-color
- typescript
+ superagent@10.3.0:
+ dependencies:
+ component-emitter: 1.3.1
+ cookiejar: 2.1.4
+ debug: 4.4.3(supports-color@5.5.0)
+ fast-safe-stringify: 2.1.1
+ form-data: 4.0.5
+ formidable: 3.5.4
+ methods: 1.1.2
+ mime: 2.6.0
+ qs: 6.14.1
+ transitivePeerDependencies:
+ - supports-color
+
+ supertest@7.2.1:
+ dependencies:
+ cookie-signature: 1.2.2
+ methods: 1.1.2
+ superagent: 10.3.0
+ transitivePeerDependencies:
+ - supports-color
+
supports-color@5.5.0:
dependencies:
has-flag: 3.0.0
@@ -13924,7 +17762,6 @@ snapshots:
supports-color@8.1.1:
dependencies:
has-flag: 4.0.0
- optional: true
supports-hyperlinks@3.2.0:
dependencies:
@@ -13976,6 +17813,8 @@ snapshots:
transitivePeerDependencies:
- encoding
+ symbol-observable@4.0.0: {}
+
symbol-tree@3.2.4: {}
synckit@0.11.11:
@@ -14014,6 +17853,15 @@ snapshots:
type-fest: 0.16.0
unique-string: 2.0.0
+ terser-webpack-plugin@5.3.16(webpack@5.103.0):
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ jest-worker: 27.5.1
+ schema-utils: 4.3.3
+ serialize-javascript: 6.0.2
+ terser: 5.44.1
+ webpack: 5.103.0
+
terser@5.44.1:
dependencies:
'@jridgewell/source-map': 0.3.11
@@ -14021,6 +17869,12 @@ snapshots:
commander: 2.20.3
source-map-support: 0.5.21
+ test-exclude@6.0.0:
+ dependencies:
+ '@istanbuljs/schema': 0.1.3
+ glob: 7.2.3
+ minimatch: 3.1.2
+
test-exclude@7.0.1:
dependencies:
'@istanbuljs/schema': 0.1.3
@@ -14066,6 +17920,8 @@ snapshots:
tmp@0.2.5:
optional: true
+ tmpl@1.0.5: {}
+
to-regex-range@5.0.1:
dependencies:
is-number: 7.0.0
@@ -14074,6 +17930,12 @@ snapshots:
toidentifier@1.0.1: {}
+ token-types@6.1.2:
+ dependencies:
+ '@borewit/text-codec': 0.2.1
+ '@tokenizer/token': 0.3.0
+ ieee754: 1.2.1
+
toml-eslint-parser@0.10.0:
dependencies:
eslint-visitor-keys: 3.4.3
@@ -14121,6 +17983,54 @@ snapshots:
optionalDependencies:
typescript: 5.9.3
+ ts-jest@29.4.6(@babel/core@7.28.5)(@jest/transform@30.2.0)(@jest/types@30.2.0)(babel-jest@30.2.0(@babel/core@7.28.5))(jest-util@30.2.0)(jest@30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3)))(typescript@5.9.3):
+ dependencies:
+ bs-logger: 0.2.6
+ fast-json-stable-stringify: 2.1.0
+ handlebars: 4.7.8
+ jest: 30.2.0(@types/node@22.19.3)(ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3))
+ json5: 2.2.3
+ lodash.memoize: 4.1.2
+ make-error: 1.3.6
+ semver: 7.7.3
+ type-fest: 4.41.0
+ typescript: 5.9.3
+ yargs-parser: 21.1.1
+ optionalDependencies:
+ '@babel/core': 7.28.5
+ '@jest/transform': 30.2.0
+ '@jest/types': 30.2.0
+ babel-jest: 30.2.0(@babel/core@7.28.5)
+ jest-util: 30.2.0
+
+ ts-loader@9.5.4(typescript@5.9.3)(webpack@5.103.0):
+ dependencies:
+ chalk: 4.1.2
+ enhanced-resolve: 5.18.3
+ micromatch: 4.0.8
+ semver: 7.7.3
+ source-map: 0.7.6
+ typescript: 5.9.3
+ webpack: 5.103.0
+
+ ts-node@10.9.2(@types/node@22.19.3)(typescript@5.9.3):
+ dependencies:
+ '@cspotcode/source-map-support': 0.8.1
+ '@tsconfig/node10': 1.0.12
+ '@tsconfig/node12': 1.0.11
+ '@tsconfig/node14': 1.0.3
+ '@tsconfig/node16': 1.0.4
+ '@types/node': 22.19.3
+ acorn: 8.15.0
+ acorn-walk: 8.3.4
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.9.3
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+
ts-patch@3.3.0:
dependencies:
chalk: 4.1.2
@@ -14130,6 +18040,19 @@ snapshots:
semver: 7.7.3
strip-ansi: 6.0.1
+ tsconfig-paths-webpack-plugin@4.2.0:
+ dependencies:
+ chalk: 4.1.2
+ enhanced-resolve: 5.18.3
+ tapable: 2.3.0
+ tsconfig-paths: 4.2.0
+
+ tsconfig-paths@4.2.0:
+ dependencies:
+ json5: 2.2.3
+ minimist: 1.2.8
+ strip-bom: 3.0.0
+
tslib@2.8.1: {}
tsx@4.19.3:
@@ -14177,17 +18100,31 @@ snapshots:
dependencies:
prelude-ls: 1.2.1
+ type-detect@4.0.8: {}
+
type-fest@0.16.0: {}
type-fest@0.20.2: {}
- type-fest@0.21.3:
- optional: true
+ type-fest@0.21.3: {}
type-fest@0.6.0: {}
type-fest@0.8.1: {}
+ type-fest@4.41.0: {}
+
+ type-is@1.6.18:
+ dependencies:
+ media-typer: 0.3.0
+ mime-types: 2.1.35
+
+ type-is@2.0.1:
+ dependencies:
+ content-type: 1.0.5
+ media-typer: 1.1.0
+ mime-types: 3.0.2
+
typed-array-buffer@1.0.3:
dependencies:
call-bound: 1.0.4
@@ -14221,6 +18158,8 @@ snapshots:
possible-typed-array-names: 1.1.0
reflect.getprototypeof: 1.0.10
+ typedarray@0.0.6: {}
+
typescript-eslint@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3):
dependencies:
'@typescript-eslint/eslint-plugin': 8.46.3(@typescript-eslint/parser@8.46.3(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3))(eslint@9.39.1(jiti@2.6.1))(typescript@5.9.3)
@@ -14243,6 +18182,15 @@ snapshots:
ufo@1.6.1: {}
+ uglify-js@3.19.3:
+ optional: true
+
+ uid@2.0.2:
+ dependencies:
+ '@lukeed/csprng': 1.1.0
+
+ uint8array-extras@1.5.0: {}
+
unbox-primitive@1.1.0:
dependencies:
call-bound: 1.0.4
@@ -14259,6 +18207,8 @@ snapshots:
undefsafe@2.0.5: {}
+ undici-types@6.21.0: {}
+
undici-types@7.16.0: {}
undici@7.16.0: {}
@@ -14347,6 +18297,8 @@ snapshots:
- postcss
- supports-color
+ unpipe@1.0.0: {}
+
unplugin-auto-import@0.18.6(rollup@2.79.2):
dependencies:
'@antfu/utils': 0.7.10
@@ -14418,12 +18370,6 @@ snapshots:
upath@1.2.0: {}
- update-browserslist-db@1.1.4(browserslist@4.27.0):
- dependencies:
- browserslist: 4.27.0
- escalade: 3.2.0
- picocolors: 1.1.1
-
update-browserslist-db@1.2.3(browserslist@4.28.1):
dependencies:
browserslist: 4.28.1
@@ -14446,17 +18392,45 @@ snapshots:
uuid@9.0.1: {}
+ v8-compile-cache-lib@3.0.1: {}
+
+ v8-to-istanbul@9.3.0:
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/istanbul-lib-coverage': 2.0.6
+ convert-source-map: 2.0.0
+
validate-npm-package-license@3.0.4:
dependencies:
spdx-correct: 3.2.0
spdx-expression-parse: 3.0.1
+ vary@1.1.2: {}
+
verror@1.10.0:
dependencies:
assert-plus: 1.0.0
core-util-is: 1.0.2
extsprintf: 1.3.0
+ vite-node@2.1.9(@types/node@22.19.3)(terser@5.44.1):
+ dependencies:
+ cac: 6.7.14
+ debug: 4.4.3(supports-color@5.5.0)
+ es-module-lexer: 1.7.0
+ pathe: 1.1.2
+ vite: 5.4.21(@types/node@22.19.3)(terser@5.44.1)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
vite-node@2.1.9(@types/node@24.10.0)(terser@5.44.1):
dependencies:
cac: 6.7.14
@@ -14475,17 +18449,27 @@ snapshots:
- supports-color
- terser
- vite-plugin-pwa@1.1.0(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1))(workbox-build@7.3.0)(workbox-window@7.3.0):
+ vite-plugin-pwa@1.1.0(vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1))(workbox-build@7.3.0(@types/babel__core@7.20.5))(workbox-window@7.3.0):
dependencies:
debug: 4.4.3(supports-color@5.5.0)
pretty-bytes: 6.1.1
tinyglobby: 0.2.15
vite: 7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1)
- workbox-build: 7.3.0
+ workbox-build: 7.3.0(@types/babel__core@7.20.5)
workbox-window: 7.3.0
transitivePeerDependencies:
- supports-color
+ vite@5.4.21(@types/node@22.19.3)(terser@5.44.1):
+ dependencies:
+ esbuild: 0.21.5
+ postcss: 8.5.6
+ rollup: 4.52.5
+ optionalDependencies:
+ '@types/node': 22.19.3
+ fsevents: 2.3.3
+ terser: 5.44.1
+
vite@5.4.21(@types/node@24.10.0)(terser@5.44.1):
dependencies:
esbuild: 0.21.5
@@ -14496,6 +18480,22 @@ snapshots:
fsevents: 2.3.3
terser: 5.44.1
+ vite@7.2.1(@types/node@22.19.3)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1):
+ dependencies:
+ esbuild: 0.25.12
+ fdir: 6.5.0(picomatch@4.0.3)
+ picomatch: 4.0.3
+ postcss: 8.5.6
+ rollup: 4.52.5
+ tinyglobby: 0.2.15
+ optionalDependencies:
+ '@types/node': 22.19.3
+ fsevents: 2.3.3
+ jiti: 2.6.1
+ terser: 5.44.1
+ tsx: 4.19.3
+ yaml: 2.8.1
+
vite@7.2.1(@types/node@24.10.0)(jiti@2.6.1)(terser@5.44.1)(tsx@4.19.3)(yaml@2.8.1):
dependencies:
esbuild: 0.25.12
@@ -14512,12 +18512,54 @@ snapshots:
tsx: 4.19.3
yaml: 2.8.1
+ vitest-mock-extended@2.0.2(typescript@5.9.3)(vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1)):
+ dependencies:
+ ts-essentials: 10.1.1(typescript@5.9.3)
+ typescript: 5.9.3
+ vitest: 2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1)
+
vitest-mock-extended@2.0.2(typescript@5.9.3)(vitest@2.1.9(@types/node@24.10.0)(jsdom@25.0.1)(terser@5.44.1)):
dependencies:
ts-essentials: 10.1.1(typescript@5.9.3)
typescript: 5.9.3
vitest: 2.1.9(@types/node@24.10.0)(jsdom@25.0.1)(terser@5.44.1)
+ vitest@2.1.9(@types/node@22.19.3)(jsdom@25.0.1)(terser@5.44.1):
+ dependencies:
+ '@vitest/expect': 2.1.9
+ '@vitest/mocker': 2.1.9(vite@5.4.21(@types/node@22.19.3)(terser@5.44.1))
+ '@vitest/pretty-format': 2.1.9
+ '@vitest/runner': 2.1.9
+ '@vitest/snapshot': 2.1.9
+ '@vitest/spy': 2.1.9
+ '@vitest/utils': 2.1.9
+ chai: 5.3.3
+ debug: 4.4.3(supports-color@5.5.0)
+ expect-type: 1.2.2
+ magic-string: 0.30.21
+ pathe: 1.1.2
+ std-env: 3.10.0
+ tinybench: 2.9.0
+ tinyexec: 0.3.2
+ tinypool: 1.1.1
+ tinyrainbow: 1.2.0
+ vite: 5.4.21(@types/node@22.19.3)(terser@5.44.1)
+ vite-node: 2.1.9(@types/node@22.19.3)(terser@5.44.1)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 22.19.3
+ jsdom: 25.0.1
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+
vitest@2.1.9(@types/node@24.10.0)(jsdom@25.0.1)(terser@5.44.1):
dependencies:
'@vitest/expect': 2.1.9
@@ -14617,14 +18659,63 @@ snapshots:
dependencies:
xml-name-validator: 5.0.0
+ walker@1.0.8:
+ dependencies:
+ makeerror: 1.0.12
+
+ watchpack@2.5.0:
+ dependencies:
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+
+ wcwidth@1.0.1:
+ dependencies:
+ defaults: 1.0.4
+
webidl-conversions@3.0.1: {}
webidl-conversions@4.0.2: {}
webidl-conversions@7.0.0: {}
+ webpack-node-externals@3.0.0: {}
+
+ webpack-sources@3.3.3: {}
+
webpack-virtual-modules@0.6.2: {}
+ webpack@5.103.0:
+ dependencies:
+ '@types/eslint-scope': 3.7.7
+ '@types/estree': 1.0.8
+ '@types/json-schema': 7.0.15
+ '@webassemblyjs/ast': 1.14.1
+ '@webassemblyjs/wasm-edit': 1.14.1
+ '@webassemblyjs/wasm-parser': 1.14.1
+ acorn: 8.15.0
+ acorn-import-phases: 1.0.4(acorn@8.15.0)
+ browserslist: 4.28.1
+ chrome-trace-event: 1.0.4
+ enhanced-resolve: 5.18.3
+ es-module-lexer: 1.7.0
+ eslint-scope: 5.1.1
+ events: 3.3.0
+ glob-to-regexp: 0.4.1
+ graceful-fs: 4.2.11
+ json-parse-even-better-errors: 2.3.1
+ loader-runner: 4.3.1
+ mime-types: 2.1.35
+ neo-async: 2.6.2
+ schema-utils: 4.3.3
+ tapable: 2.3.0
+ terser-webpack-plugin: 5.3.16(webpack@5.103.0)
+ watchpack: 2.5.0
+ webpack-sources: 3.3.3
+ transitivePeerDependencies:
+ - '@swc/core'
+ - esbuild
+ - uglify-js
+
whatwg-encoding@3.1.1:
dependencies:
iconv-lite: 0.6.3
@@ -14709,6 +18800,8 @@ snapshots:
word-wrap@1.2.5: {}
+ wordwrap@1.0.0: {}
+
workbox-background-sync@7.3.0:
dependencies:
idb: 7.1.1
@@ -14718,13 +18811,13 @@ snapshots:
dependencies:
workbox-core: 7.3.0
- workbox-build@7.3.0:
+ workbox-build@7.3.0(@types/babel__core@7.20.5):
dependencies:
'@apideck/better-ajv-errors': 0.3.6(ajv@8.17.1)
'@babel/core': 7.28.5
'@babel/preset-env': 7.28.5(@babel/core@7.28.5)
'@babel/runtime': 7.28.4
- '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.5)(rollup@2.79.2)
+ '@rollup/plugin-babel': 5.3.1(@babel/core@7.28.5)(@types/babel__core@7.20.5)(rollup@2.79.2)
'@rollup/plugin-node-resolve': 15.3.1(rollup@2.79.2)
'@rollup/plugin-replace': 2.4.2(rollup@2.79.2)
'@rollup/plugin-terser': 0.4.4(rollup@2.79.2)
@@ -14827,7 +18920,6 @@ snapshots:
ansi-styles: 4.3.0
string-width: 4.2.3
strip-ansi: 6.0.1
- optional: true
wrap-ansi@7.0.0:
dependencies:
@@ -14901,10 +18993,14 @@ snapshots:
fd-slicer: 1.1.0
optional: true
+ yn@3.1.1: {}
+
yocto-queue@0.1.0: {}
yocto-queue@1.2.1: {}
+ yoctocolors-cjs@2.1.3: {}
+
zod-validation-error@3.5.4(zod@3.25.76):
dependencies:
zod: 3.25.76