@@ -11,74 +10,67 @@
Dokploy is a free self-hostable Platform as a Service (PaaS) that simplifies the deployment and management of applications and databases.
-
### Features
Dokploy include multiples features to make your life easier.
-
-* **Applications**: Deploy any type of application (Node.js, PHP, Python, Go, Ruby, etc.).
-* **Databases**: Create and manage databases with support for MySQL, PostgreSQL, MongoDB, MariaDB, Redis.
-* **Backups**: Automate backups for databases to a external storage destination.
-* **Docker Compose**: Native support for Docker Compose to manage complex applications.
-* **Multi Node**: Scale applications to multiples nodes using docker swarm to manage the cluster.
-* **Templates**: Deploy in a single click open source templates (Plausible, Pocketbase, Calcom, etc.).
-* **Traefik Integration**: Automatically integrates with Traefik for routing and load balancing.
-* **Real-time Monitoring**: Monitor CPU, memory, storage, and network usage, for every resource.
-* **Docker Management**: Easily deploy and manage Docker containers.
-* **CLI/API**: Manage your applications and databases using the command line or trought the API.
-* **Self-Hosted**: Self-host Dokploy on your VPS.
-
-
-
+- **Applications**: Deploy any type of application (Node.js, PHP, Python, Go, Ruby, etc.).
+- **Databases**: Create and manage databases with support for MySQL, PostgreSQL, MongoDB, MariaDB, Redis.
+- **Backups**: Automate backups for databases to a external storage destination.
+- **Docker Compose**: Native support for Docker Compose to manage complex applications.
+- **Multi Node**: Scale applications to multiples nodes using docker swarm to manage the cluster.
+- **Templates**: Deploy in a single click open source templates (Plausible, Pocketbase, Calcom, etc.).
+- **Traefik Integration**: Automatically integrates with Traefik for routing and load balancing.
+- **Real-time Monitoring**: Monitor CPU, memory, storage, and network usage, for every resource.
+- **Docker Management**: Easily deploy and manage Docker containers.
+- **CLI/API**: Manage your applications and databases using the command line or trought the API.
+- **Self-Hosted**: Self-host Dokploy on your VPS.
## 🚀 Getting Started
To get started run the following command in a VPS:
-
```bash
curl -sSL https://dokploy.com/install.sh | sh
```
-
## 📄 Documentation
For detailed documentation, visit [docs.dokploy.com](https://docs.dokploy.com).
-
## Video Tutorial
+
-
## Donations
If you like dokploy, and want to support the project to cover the costs of hosting, testing and development new features, you can donate to the project using the following link:
Thanks to all the supporters!
-https://opencollective.com/dokploy
+[Dokploy Open Collective](https://opencollective.com/dokploy)
+Organizations:
+

+
+Individuals:

-
## Contributors
-
-
## Support OS
-- Ubuntu 24.04 LTS
+- Ubuntu 24.04 LTS
- Ubuntu 23.10
-- Ubuntu 22.04 LTS
-- Ubuntu 20.04 LTS
+- Ubuntu 22.04 LTS
+- Ubuntu 20.04 LTS
- Ubuntu 18.04 LTS
- Debian 12
- Debian 11
@@ -86,9 +78,6 @@ https://opencollective.com/dokploy
- Centos 9
- Centos 8
-
-
## Explanation
+
[English](README.md) | [中文](README-zh.md) | [Deutsch](README-de.md) | [Русский Язык](README-ru.md)
-
-
From 2eb5c331a168b55b0f08a1399bd609bcf87d589e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ere=20M=C3=A4nnist=C3=B6?=
Date: Sun, 14 Jul 2024 15:23:54 +0300
Subject: [PATCH 03/23] Clarify error message for naming validation
---
components/dashboard/project/add-application.tsx | 2 +-
components/dashboard/project/add-compose.tsx | 2 +-
components/dashboard/project/add-database.tsx | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/components/dashboard/project/add-application.tsx b/components/dashboard/project/add-application.tsx
index ecf2a1af..aacce06f 100644
--- a/components/dashboard/project/add-application.tsx
+++ b/components/dashboard/project/add-application.tsx
@@ -40,7 +40,7 @@ const AddTemplateSchema = z.object({
})
.regex(/^[a-z](?!.*--)([a-z0-9-]*[a-z])?$/, {
message:
- "App name supports letters, numbers, '-' and can only start and end letters, and does not support continuous '-'",
+ "App name supports lowercase letters, numbers, '-' and can only start and end letters, and does not support continuous '-'",
}),
description: z.string().optional(),
});
diff --git a/components/dashboard/project/add-compose.tsx b/components/dashboard/project/add-compose.tsx
index fd769c91..6daa1539 100644
--- a/components/dashboard/project/add-compose.tsx
+++ b/components/dashboard/project/add-compose.tsx
@@ -48,7 +48,7 @@ const AddComposeSchema = z.object({
})
.regex(/^[a-z](?!.*--)([a-z0-9-]*[a-z])?$/, {
message:
- "App name supports letters, numbers, '-' and can only start and end letters, and does not support continuous '-'",
+ "App name supports lowercase letters, numbers, '-' and can only start and end letters, and does not support continuous '-'",
}),
description: z.string().optional(),
});
diff --git a/components/dashboard/project/add-database.tsx b/components/dashboard/project/add-database.tsx
index 7ab90107..c573ed09 100644
--- a/components/dashboard/project/add-database.tsx
+++ b/components/dashboard/project/add-database.tsx
@@ -66,7 +66,7 @@ const baseDatabaseSchema = z.object({
})
.regex(/^[a-z](?!.*--)([a-z0-9-]*[a-z])?$/, {
message:
- "App name supports letters, numbers, '-' and can only start and end letters, and does not support continuous '-'",
+ "App name supports lowercase letters, numbers, '-' and can only start and end letters, and does not support continuous '-'",
}),
databasePassword: z.string(),
dockerImage: z.string(),
From 4ff178ea34059cfaadba155f1725e355a0c6fef3 Mon Sep 17 00:00:00 2001
From: Krzysztof Durek <21038648+kdurek@users.noreply.github.com>
Date: Sun, 14 Jul 2024 20:28:37 +0200
Subject: [PATCH 04/23] feat: add umami template
---
public/templates/umami.png | Bin 0 -> 4179 bytes
templates/templates.ts | 14 +++++++++
templates/umami/docker-compose.yml | 46 +++++++++++++++++++++++++++++
templates/umami/index.ts | 24 +++++++++++++++
4 files changed, 84 insertions(+)
create mode 100644 public/templates/umami.png
create mode 100644 templates/umami/docker-compose.yml
create mode 100644 templates/umami/index.ts
diff --git a/public/templates/umami.png b/public/templates/umami.png
new file mode 100644
index 0000000000000000000000000000000000000000..de2f7615bd66089c2bcf814f3f46ffee1a124f4d
GIT binary patch
literal 4179
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
JQNu3ie*m&@+GYR%
literal 0
HcmV?d00001
diff --git a/templates/templates.ts b/templates/templates.ts
index b41a2028..1d4ac7d7 100644
--- a/templates/templates.ts
+++ b/templates/templates.ts
@@ -359,5 +359,19 @@ export const templates: TemplateData[] = [
},
tags: ['email'],
load: () => import('./doublezero/index').then((m) => m.generate),
+ },
+ {
+ id: 'umami',
+ name: 'Umami',
+ version: 'v2.12.1',
+ description: 'Umami is a simple, fast, privacy-focused alternative to Google Analytics.',
+ logo: 'umami.png',
+ links: {
+ github: 'https://github.com/umami-software/umami',
+ website: 'https://umami.is',
+ docs: 'https://umami.is/docs',
+ },
+ tags: ['analytics'],
+ load: () => import('./umami/index').then((m) => m.generate),
}
];
diff --git a/templates/umami/docker-compose.yml b/templates/umami/docker-compose.yml
new file mode 100644
index 00000000..17e05bf5
--- /dev/null
+++ b/templates/umami/docker-compose.yml
@@ -0,0 +1,46 @@
+services:
+ umami:
+ image: ghcr.io/umami-software/umami:postgresql-latest
+ restart: always
+ healthcheck:
+ test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
+ interval: 5s
+ timeout: 5s
+ retries: 5
+ depends_on:
+ db:
+ condition: service_healthy
+ ports:
+ - ${UMAMI_PORT}
+ networks:
+ - dokploy-network
+ environment:
+ DATABASE_URL: postgresql://umami:umami@db:5432/umami
+ DATABASE_TYPE: postgresql
+ APP_SECRET: ${APP_SECRET}
+ labels:
+ - "traefik.enable=true"
+ - "traefik.http.routers.${HASH}.rule=Host(`${UMAMI_HOST}`)"
+ - "traefik.http.services.${HASH}.loadbalancer.server.port=${UMAMI_PORT}"
+ db:
+ image: postgres:15-alpine
+ restart: always
+ healthcheck:
+ test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
+ interval: 5s
+ timeout: 5s
+ retries: 5
+ networks:
+ - dokploy-network
+ volumes:
+ - db-data:/var/lib/postgresql/data
+ environment:
+ POSTGRES_DB: umami
+ POSTGRES_USER: umami
+ POSTGRES_PASSWORD: umami
+
+networks:
+ dokploy-network:
+ external: true
+volumes:
+ db-data:
diff --git a/templates/umami/index.ts b/templates/umami/index.ts
new file mode 100644
index 00000000..38ada270
--- /dev/null
+++ b/templates/umami/index.ts
@@ -0,0 +1,24 @@
+import {
+ generateHash,
+ generateRandomDomain,
+ type Template,
+ type Schema,
+ generateBase64,
+} from "../utils";
+
+export function generate(schema: Schema): Template {
+ const mainServiceHash = generateHash(schema.projectName);
+ const randomDomain = generateRandomDomain(schema);
+ const randomSecret = generateBase64();
+
+ const envs = [
+ `UMAMI_HOST=${randomDomain}`,
+ "UMAMI_PORT=3000",
+ `APP_SECRET=${randomSecret}`,
+ `HASH=${mainServiceHash}`,
+ ];
+
+ return {
+ envs,
+ };
+}
From f684ba7b1f5b976ad9e9cee7abc85e0eec436c2e Mon Sep 17 00:00:00 2001
From: Krzysztof Durek <21038648+kdurek@users.noreply.github.com>
Date: Sun, 14 Jul 2024 20:42:26 +0200
Subject: [PATCH 05/23] fix: change umami version
---
templates/umami/docker-compose.yml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/templates/umami/docker-compose.yml b/templates/umami/docker-compose.yml
index 17e05bf5..43d843af 100644
--- a/templates/umami/docker-compose.yml
+++ b/templates/umami/docker-compose.yml
@@ -1,6 +1,6 @@
services:
umami:
- image: ghcr.io/umami-software/umami:postgresql-latest
+ image: ghcr.io/umami-software/umami:postgresql-v2.12.1
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
From 7a5c71cda3d19b3893895f9e3b92cef4aef38c68 Mon Sep 17 00:00:00 2001
From: Krzysztof Durek <21038648+kdurek@users.noreply.github.com>
Date: Mon, 15 Jul 2024 01:02:18 +0200
Subject: [PATCH 06/23] feat: update configs
---
.husky/pre-commit | 1 +
biome.json | 49 ++++++---
package.json | 14 ++-
pnpm-lock.yaml | 268 ++++++++++++++++++++++++++++++++++++++++------
4 files changed, 280 insertions(+), 52 deletions(-)
create mode 100644 .husky/pre-commit
diff --git a/.husky/pre-commit b/.husky/pre-commit
new file mode 100644
index 00000000..cb2c84d5
--- /dev/null
+++ b/.husky/pre-commit
@@ -0,0 +1 @@
+pnpm lint-staged
diff --git a/biome.json b/biome.json
index dd7c1eb7..fe6fb659 100644
--- a/biome.json
+++ b/biome.json
@@ -1,17 +1,34 @@
{
- "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
- "linter":{
- "rules": {
- "correctness":{
- "useExhaustiveDependencies": "off"
- },
- "suspicious":{
- "noArrayIndexKey": "off"
- },
- "a11y":{
- "noSvgWithoutTitle":"off"
- }
- }
- }
-
-}
\ No newline at end of file
+ "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
+ "files": {
+ "ignore": ["node_modules/**", ".next/**", "drizzle/**"]
+ },
+ "organizeImports": {
+ "enabled": true
+ },
+ "linter": {
+ "rules": {
+ "complexity": {
+ "noUselessCatch": "off",
+ "noBannedTypes": "off"
+ },
+ "correctness": {
+ "useExhaustiveDependencies": "off",
+ "noUnsafeOptionalChaining": "off"
+ },
+ "style": {
+ "noNonNullAssertion": "off"
+ },
+ "suspicious": {
+ "noArrayIndexKey": "off",
+ "noExplicitAny": "off",
+ "noRedeclare": "off"
+ },
+ "a11y": {
+ "noSvgWithoutTitle": "off",
+ "useKeyWithClickEvents": "off",
+ "useAriaPropsForRole": "off"
+ }
+ }
+ }
+}
diff --git a/package.json b/package.json
index 502ff347..112c0e61 100644
--- a/package.json
+++ b/package.json
@@ -20,6 +20,8 @@
"db:push": "drizzle-kit --config ./server/db/drizzle.config.ts",
"db:truncate": "tsx -r dotenv/config ./server/db/reset.ts",
"db:studio": "drizzle-kit studio --config ./server/db/drizzle.config.ts",
+ "check": "biome check",
+ "format": "biome format",
"lint": "biome lint",
"db:seed": "tsx -r dotenv/config ./server/db/seed.ts",
"db:clean": "tsx -r dotenv/config ./server/db/reset.ts",
@@ -28,7 +30,8 @@
"docker:build:canary": "./docker/build.sh canary",
"docker:push:canary": "./docker/push.sh canary",
"version": "echo $(node -p \"require('./package.json').version\")",
- "test": "vitest --config __test__/vitest.config.ts"
+ "test": "vitest --config __test__/vitest.config.ts",
+ "prepare": "husky"
},
"dependencies": {
"@aws-sdk/client-s3": "3.515.0",
@@ -121,7 +124,7 @@
"zod": "^3.23.4"
},
"devDependencies": {
- "@biomejs/biome": "1.7.1",
+ "@biomejs/biome": "^1.8.3",
"@types/bcrypt": "5.0.2",
"@types/dockerode": "3.3.23",
"@types/js-yaml": "4.0.9",
@@ -138,6 +141,8 @@
"autoprefixer": "^10.4.14",
"drizzle-kit": "^0.21.1",
"esbuild": "0.20.2",
+ "husky": "^9.0.11",
+ "lint-staged": "^15.2.7",
"localtunnel": "2.0.2",
"postcss": "^8.4.31",
"prettier": "^3.2.4",
@@ -155,5 +160,10 @@
"engines": {
"node": "^18.18.0",
"pnpm": ">=8.15.4"
+ },
+ "lint-staged": {
+ "*": [
+ "biome check --write --no-errors-on-unmatched --files-ignore-unknown=true"
+ ]
}
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 821ec3f6..7c47af8c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -272,8 +272,8 @@ dependencies:
devDependencies:
'@biomejs/biome':
- specifier: 1.7.1
- version: 1.7.1
+ specifier: ^1.8.3
+ version: 1.8.3
'@types/bcrypt':
specifier: 5.0.2
version: 5.0.2
@@ -322,6 +322,12 @@ devDependencies:
esbuild:
specifier: 0.20.2
version: 0.20.2
+ husky:
+ specifier: ^9.0.11
+ version: 9.0.11
+ lint-staged:
+ specifier: ^15.2.7
+ version: 15.2.7
localtunnel:
specifier: 2.0.2
version: 2.0.2
@@ -1009,24 +1015,24 @@ packages:
resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==}
dev: false
- /@biomejs/biome@1.7.1:
- resolution: {integrity: sha512-wb2UNoFXcgaMdKXKT5ytsYntaogl2FSTjDt20CZynF3v7OXQUcIpTrr+be3XoOGpoZRj3Ytq9TSpmplUREXmeA==}
+ /@biomejs/biome@1.8.3:
+ resolution: {integrity: sha512-/uUV3MV+vyAczO+vKrPdOW0Iaet7UnJMU4bNMinggGJTAnBPjCoLEYcyYtYHNnUNYlv4xZMH6hVIQCAozq8d5w==}
engines: {node: '>=14.21.3'}
hasBin: true
requiresBuild: true
optionalDependencies:
- '@biomejs/cli-darwin-arm64': 1.7.1
- '@biomejs/cli-darwin-x64': 1.7.1
- '@biomejs/cli-linux-arm64': 1.7.1
- '@biomejs/cli-linux-arm64-musl': 1.7.1
- '@biomejs/cli-linux-x64': 1.7.1
- '@biomejs/cli-linux-x64-musl': 1.7.1
- '@biomejs/cli-win32-arm64': 1.7.1
- '@biomejs/cli-win32-x64': 1.7.1
+ '@biomejs/cli-darwin-arm64': 1.8.3
+ '@biomejs/cli-darwin-x64': 1.8.3
+ '@biomejs/cli-linux-arm64': 1.8.3
+ '@biomejs/cli-linux-arm64-musl': 1.8.3
+ '@biomejs/cli-linux-x64': 1.8.3
+ '@biomejs/cli-linux-x64-musl': 1.8.3
+ '@biomejs/cli-win32-arm64': 1.8.3
+ '@biomejs/cli-win32-x64': 1.8.3
dev: true
- /@biomejs/cli-darwin-arm64@1.7.1:
- resolution: {integrity: sha512-qfLrIIB58dkgiY/1tgG6fSCBK22PZaSIf6blweZBsG6iMij05mEuJt50ne+zPnNFNUmt8t43NC/qOXT3iFHQBA==}
+ /@biomejs/cli-darwin-arm64@1.8.3:
+ resolution: {integrity: sha512-9DYOjclFpKrH/m1Oz75SSExR8VKvNSSsLnVIqdnKexj6NwmiMlKk94Wa1kZEdv6MCOHGHgyyoV57Cw8WzL5n3A==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [darwin]
@@ -1034,8 +1040,8 @@ packages:
dev: true
optional: true
- /@biomejs/cli-darwin-x64@1.7.1:
- resolution: {integrity: sha512-OGeyNsEcp5VnKbF9/TBjPCTHNEOm7oHegEve07U3KZmzqfpw2Oe3i9DVW8t6vvj1TYbrwWYCld25H34kBDY7Vg==}
+ /@biomejs/cli-darwin-x64@1.8.3:
+ resolution: {integrity: sha512-UeW44L/AtbmOF7KXLCoM+9PSgPo0IDcyEUfIoOXYeANaNXXf9mLUwV1GeF2OWjyic5zj6CnAJ9uzk2LT3v/wAw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [darwin]
@@ -1043,48 +1049,44 @@ packages:
dev: true
optional: true
- /@biomejs/cli-linux-arm64-musl@1.7.1:
- resolution: {integrity: sha512-giH0/CzLOJ+wbxLxd5Shnr5xQf5fGnTRWLDe3lzjaF7IplVydNCEeZJtncB01SvyA6DAFJsvQ4LNxzAOQfEVCg==}
+ /@biomejs/cli-linux-arm64-musl@1.8.3:
+ resolution: {integrity: sha512-9yjUfOFN7wrYsXt/T/gEWfvVxKlnh3yBpnScw98IF+oOeCYb5/b/+K7YNqKROV2i1DlMjg9g/EcN9wvj+NkMuQ==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
- libc: [musl]
requiresBuild: true
dev: true
optional: true
- /@biomejs/cli-linux-arm64@1.7.1:
- resolution: {integrity: sha512-MQDf5wErj1iBvlcxCyOa0XqZYN8WJrupVgbNnqhntO3yVATg8GxduVUn1fDSaolznkDRsj7Pz3Xu1esBFwvfmg==}
+ /@biomejs/cli-linux-arm64@1.8.3:
+ resolution: {integrity: sha512-fed2ji8s+I/m8upWpTJGanqiJ0rnlHOK3DdxsyVLZQ8ClY6qLuPc9uehCREBifRJLl/iJyQpHIRufLDeotsPtw==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [linux]
- libc: [glibc]
requiresBuild: true
dev: true
optional: true
- /@biomejs/cli-linux-x64-musl@1.7.1:
- resolution: {integrity: sha512-ySNDtPhsLxU125IFHHAxfpoHBpkM56s4mEXeO70GZtgZay/o1h8IUPWCWf5Z7gKgc4jwgYN1U1U9xabI3hZVAg==}
+ /@biomejs/cli-linux-x64-musl@1.8.3:
+ resolution: {integrity: sha512-UHrGJX7PrKMKzPGoEsooKC9jXJMa28TUSMjcIlbDnIO4EAavCoVmNQaIuUSH0Ls2mpGMwUIf+aZJv657zfWWjA==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
- libc: [musl]
requiresBuild: true
dev: true
optional: true
- /@biomejs/cli-linux-x64@1.7.1:
- resolution: {integrity: sha512-3wmCsGcC3KZ4pfTknXHfyMMlXPMhgfXVAcG5GlrR+Tq2JGiAw0EUydaLpsSBEbcG7IxH6OiUZEJZ95kAycCHBA==}
+ /@biomejs/cli-linux-x64@1.8.3:
+ resolution: {integrity: sha512-I8G2QmuE1teISyT8ie1HXsjFRz9L1m5n83U1O6m30Kw+kPMPSKjag6QGUn+sXT8V+XWIZxFFBoTDEDZW2KPDDw==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [linux]
- libc: [glibc]
requiresBuild: true
dev: true
optional: true
- /@biomejs/cli-win32-arm64@1.7.1:
- resolution: {integrity: sha512-8hIDakEqZn0i6+388noYKdZ0ZrovTwnvMU/Qp/oJou0G7EPVdXupOe0oxiQSdRN0W7f6CS/yjPCYuVGzDG6r0g==}
+ /@biomejs/cli-win32-arm64@1.8.3:
+ resolution: {integrity: sha512-J+Hu9WvrBevfy06eU1Na0lpc7uR9tibm9maHynLIoAjLZpQU3IW+OKHUtyL8p6/3pT2Ju5t5emReeIS2SAxhkQ==}
engines: {node: '>=14.21.3'}
cpu: [arm64]
os: [win32]
@@ -1092,8 +1094,8 @@ packages:
dev: true
optional: true
- /@biomejs/cli-win32-x64@1.7.1:
- resolution: {integrity: sha512-3W9k3uH6Ea6VOpAS9xkkAlS0LTfnGQjmIUCegZ8SDtK2NgJ1gO+qdEkGJb0ltahusFTN1QxJ107dM7ASA9IUEg==}
+ /@biomejs/cli-win32-x64@1.8.3:
+ resolution: {integrity: sha512-/PJ59vA1pnQeKahemaQf4Nyj7IKUvGQSc3Ze1uIGi+Wvr1xF7rGobSrAAG01T/gUDG21vkDsZYM03NAmPiVkqg==}
engines: {node: '>=14.21.3'}
cpu: [x64]
os: [win32]
@@ -4587,6 +4589,7 @@ packages:
/@swagger-api/apidom-ns-json-schema-draft-4@1.0.0-alpha.5:
resolution: {integrity: sha512-aDmcpGikL5JZmDTg7J6EJfLFjtUmX/MfduS4hQeopFCkw91dZsqxO10j7KEiRVVuJBuGStbYoHI5aIsQTlebzA==}
+ requiresBuild: true
dependencies:
'@babel/runtime-corejs3': 7.24.7
'@swagger-api/apidom-ast': 1.0.0-alpha.5
@@ -5665,6 +5668,11 @@ packages:
string-width: 4.2.3
dev: false
+ /ansi-escapes@6.2.1:
+ resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==}
+ engines: {node: '>=14.16'}
+ dev: true
+
/ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
engines: {node: '>=8'}
@@ -5913,6 +5921,13 @@ packages:
dependencies:
fill-range: 7.0.1
+ /braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+ dependencies:
+ fill-range: 7.1.1
+ dev: true
+
/browserslist@4.23.0:
resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
@@ -6049,7 +6064,6 @@ packages:
/chalk@5.3.0:
resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==}
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
- dev: false
/character-entities-legacy@1.1.4:
resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
@@ -6142,6 +6156,21 @@ packages:
timers-ext: 0.1.7
dev: true
+ /cli-cursor@4.0.0:
+ resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ restore-cursor: 4.0.0
+ dev: true
+
+ /cli-truncate@4.0.0:
+ resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
+ engines: {node: '>=18'}
+ dependencies:
+ slice-ansi: 5.0.0
+ string-width: 7.2.0
+ dev: true
+
/client-only@0.0.1:
resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==}
dev: false
@@ -6229,6 +6258,10 @@ packages:
hasBin: true
dev: false
+ /colorette@2.0.20:
+ resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
+ dev: true
+
/combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
engines: {node: '>= 0.8'}
@@ -6240,6 +6273,11 @@ packages:
resolution: {integrity: sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==}
dev: false
+ /commander@12.1.0:
+ resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==}
+ engines: {node: '>=18'}
+ dev: true
+
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
dev: false
@@ -6791,6 +6829,10 @@ packages:
/electron-to-chromium@1.4.708:
resolution: {integrity: sha512-iWgEEvREL4GTXXHKohhh33+6Y8XkPI5eHihDmm8zUk5Zo7HICEW+wI/j5kJ2tbuNUCXJ/sNXa03ajW635DiJXA==}
+ /emoji-regex@10.3.0:
+ resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==}
+ dev: true
+
/emoji-regex@8.0.0:
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
@@ -7040,6 +7082,10 @@ packages:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
dev: false
+ /eventemitter3@5.0.1:
+ resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
+ dev: true
+
/events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
@@ -7128,6 +7174,13 @@ packages:
dependencies:
to-regex-range: 5.0.1
+ /fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+ dependencies:
+ to-regex-range: 5.0.1
+ dev: true
+
/find-up@4.1.0:
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
engines: {node: '>=8'}
@@ -7225,6 +7278,11 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ /get-east-asian-width@1.2.0:
+ resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==}
+ engines: {node: '>=18'}
+ dev: true
+
/get-func-name@2.0.2:
resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
dev: true
@@ -7478,6 +7536,12 @@ packages:
engines: {node: '>=16.17.0'}
dev: true
+ /husky@9.0.11:
+ resolution: {integrity: sha512-AB6lFlbwwyIqMdHYhwPe+kjOC3Oc5P3nThEoW/AaO2BX3vJDjWPFxYLxokUZOo6RNX20He3AaT8sESs9NJcmEw==}
+ engines: {node: '>=18'}
+ hasBin: true
+ dev: true
+
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
@@ -7610,6 +7674,18 @@ packages:
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
engines: {node: '>=8'}
+ /is-fullwidth-code-point@4.0.0:
+ resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
+ engines: {node: '>=12'}
+ dev: true
+
+ /is-fullwidth-code-point@5.0.0:
+ resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
+ engines: {node: '>=18'}
+ dependencies:
+ get-east-asian-width: 1.2.0
+ dev: true
+
/is-glob@4.0.3:
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
engines: {node: '>=0.10.0'}
@@ -7769,6 +7845,37 @@ packages:
/lines-and-columns@1.2.4:
resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
+ /lint-staged@15.2.7:
+ resolution: {integrity: sha512-+FdVbbCZ+yoh7E/RosSdqKJyUM2OEjTciH0TFNkawKgvFp1zbGlEC39RADg+xKBG1R4mhoH2j85myBQZ5wR+lw==}
+ engines: {node: '>=18.12.0'}
+ hasBin: true
+ dependencies:
+ chalk: 5.3.0
+ commander: 12.1.0
+ debug: 4.3.4
+ execa: 8.0.1
+ lilconfig: 3.1.1
+ listr2: 8.2.3
+ micromatch: 4.0.7
+ pidtree: 0.6.0
+ string-argv: 0.3.2
+ yaml: 2.4.5
+ transitivePeerDependencies:
+ - supports-color
+ dev: true
+
+ /listr2@8.2.3:
+ resolution: {integrity: sha512-Lllokma2mtoniUOS94CcOErHWAug5iu7HOmDrvWgpw8jyQH2fomgB+7lZS4HWZxytUuQwkGOwe49FvwVaA85Xw==}
+ engines: {node: '>=18.0.0'}
+ dependencies:
+ cli-truncate: 4.0.0
+ colorette: 2.0.20
+ eventemitter3: 5.0.1
+ log-update: 6.0.0
+ rfdc: 1.4.1
+ wrap-ansi: 9.0.0
+ dev: true
+
/loader-runner@4.3.0:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'}
@@ -7854,6 +7961,17 @@ packages:
resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
dev: false
+ /log-update@6.0.0:
+ resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-escapes: 6.2.1
+ cli-cursor: 4.0.0
+ slice-ansi: 7.1.0
+ strip-ansi: 7.1.0
+ wrap-ansi: 9.0.0
+ dev: true
+
/long-timeout@0.1.1:
resolution: {integrity: sha512-BFRuQUqc7x2NWxfJBCyUrN8iYUYznzL9JROmRz1gZ6KlOIgmoD+njPVbb+VNn2nGMKggMsK79iUNErillsrx7w==}
dev: false
@@ -7973,6 +8091,14 @@ packages:
braces: 3.0.2
picomatch: 2.3.1
+ /micromatch@4.0.7:
+ resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==}
+ engines: {node: '>=8.6'}
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.1
+ dev: true
+
/mime-db@1.52.0:
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
engines: {node: '>= 0.6'}
@@ -7997,6 +8123,11 @@ packages:
hasBin: true
dev: false
+ /mimic-fn@2.1.0:
+ resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
+ engines: {node: '>=6'}
+ dev: true
+
/mimic-fn@4.0.0:
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
engines: {node: '>=12'}
@@ -8382,6 +8513,13 @@ packages:
dependencies:
wrappy: 1.0.2
+ /onetime@5.1.2:
+ resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
+ engines: {node: '>=6'}
+ dependencies:
+ mimic-fn: 2.1.0
+ dev: true
+
/onetime@6.0.0:
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
engines: {node: '>=12'}
@@ -8519,6 +8657,12 @@ packages:
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
engines: {node: '>=8.6'}
+ /pidtree@0.6.0:
+ resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
+ engines: {node: '>=0.10'}
+ hasBin: true
+ dev: true
+
/pify@2.3.0:
resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==}
engines: {node: '>=0.10.0'}
@@ -9228,6 +9372,14 @@ packages:
lowercase-keys: 3.0.0
dev: false
+ /restore-cursor@4.0.0:
+ resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ onetime: 5.1.2
+ signal-exit: 3.0.7
+ dev: true
+
/ret@0.2.2:
resolution: {integrity: sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==}
engines: {node: '>=4'}
@@ -9237,6 +9389,10 @@ packages:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+ /rfdc@1.4.1:
+ resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
+ dev: true
+
/rimraf@3.0.2:
resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
hasBin: true
@@ -9397,7 +9553,6 @@ packages:
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
- dev: false
/signal-exit@4.1.0:
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
@@ -9428,6 +9583,22 @@ packages:
engines: {node: '>=14.16'}
dev: false
+ /slice-ansi@5.0.0:
+ resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
+ engines: {node: '>=12'}
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 4.0.0
+ dev: true
+
+ /slice-ansi@7.1.0:
+ resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-styles: 6.2.1
+ is-fullwidth-code-point: 5.0.0
+ dev: true
+
/slugify@1.6.6:
resolution: {integrity: sha512-h+z7HKHYXj6wJU+AnS/+IH8Uh9fdcX1Lrhg1/VMdf9PwoBQXFcXiAdsy2tSK0P6gKwJLXp02r90ahUCqHk9rrw==}
engines: {node: '>=8.0.0'}
@@ -9520,6 +9691,11 @@ packages:
bare-events: 2.2.1
dev: false
+ /string-argv@0.3.2:
+ resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
+ engines: {node: '>=0.6.19'}
+ dev: true
+
/string-width@4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'}
@@ -9536,6 +9712,15 @@ packages:
emoji-regex: 9.2.2
strip-ansi: 7.1.0
+ /string-width@7.2.0:
+ resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
+ engines: {node: '>=18'}
+ dependencies:
+ emoji-regex: 10.3.0
+ get-east-asian-width: 1.2.0
+ strip-ansi: 7.1.0
+ dev: true
+
/string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
dependencies:
@@ -10443,6 +10628,15 @@ packages:
string-width: 5.1.2
strip-ansi: 7.1.0
+ /wrap-ansi@9.0.0:
+ resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
+ engines: {node: '>=18'}
+ dependencies:
+ ansi-styles: 6.2.1
+ string-width: 7.2.0
+ strip-ansi: 7.1.0
+ dev: true
+
/wrappy@1.0.2:
resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
@@ -10513,6 +10707,12 @@ packages:
engines: {node: '>= 14'}
hasBin: true
+ /yaml@2.4.5:
+ resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==}
+ engines: {node: '>= 14'}
+ hasBin: true
+ dev: true
+
/yargs-parser@18.1.3:
resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==}
engines: {node: '>=6'}
From 906e8de13b04dbef1e650d8c12472d1fbda01b5f Mon Sep 17 00:00:00 2001
From: Krzysztof Durek <21038648+kdurek@users.noreply.github.com>
Date: Mon, 15 Jul 2024 01:08:18 +0200
Subject: [PATCH 07/23] chore: format whole repository with new configs
---
__test__/compose/compose.test.ts | 4 +-
__test__/compose/secrets/secret-root.test.ts | 6 +-
__test__/compose/volume/volume-2.test.ts | 2 +-
__test__/vitest.config.ts | 2 +-
components.json | 32 +-
components/auth/login-2fa.tsx | 14 +-
.../cluster/modify-swarm-settings.tsx | 18 +-
.../cluster/show-cluster-settings.tsx | 20 +-
.../advanced/general/add-command.tsx | 16 +-
.../application/advanced/ports/add-port.tsx | 14 +-
.../application/advanced/ports/show-port.tsx | 4 +-
.../advanced/ports/update-port.tsx | 16 +-
.../advanced/redirects/add-redirect.tsx | 8 +-
.../advanced/redirects/show-redirects.tsx | 2 +-
.../advanced/redirects/update-redirect.tsx | 6 +-
.../advanced/security/add-security.tsx | 4 +-
.../advanced/security/show-security.tsx | 2 +-
.../advanced/security/update-security.tsx | 2 +-
.../show-application-advanced-settings.tsx | 2 +-
.../advanced/traefik/show-traefik-config.tsx | 4 +-
.../traefik/update-traefik-config.tsx | 21 +-
.../advanced/volumes/add-volumes.tsx | 18 +-
.../advanced/volumes/delete-volume.tsx | 2 +-
.../advanced/volumes/show-volumes.tsx | 4 +-
.../advanced/volumes/update-volume.tsx | 4 +-
.../dashboard/application/build/show.tsx | 376 +++++++++---------
.../application/deployments/refresh-token.tsx | 2 +-
.../deployments/show-deployments.tsx | 6 +-
.../application/domains/add-domain.tsx | 2 +-
.../application/domains/delete-domain.tsx | 2 +-
.../application/domains/generate-domain.tsx | 4 +-
.../domains/generate-traefikme.tsx | 2 +-
.../application/domains/generate-wildcard.tsx | 2 +-
.../application/domains/show-domains.tsx | 12 +-
.../application/domains/update-domain.tsx | 2 +-
.../application/environment/show.tsx | 16 +-
.../general/generic/save-docker-provider.tsx | 10 +-
.../dashboard/application/general/show.tsx | 4 +-
.../dashboard/application/logs/show.tsx | 4 +-
.../application/update-application.tsx | 16 +-
.../compose/advanced/add-command.tsx | 16 +-
.../compose/advanced/show-volumes.tsx | 6 +-
.../deployments/refresh-token-compose.tsx | 2 +-
.../deployments/show-deployments-compose.tsx | 8 +-
.../dashboard/compose/enviroment/show.tsx | 16 +-
.../dashboard/compose/general/actions.tsx | 16 +-
.../compose/general/compose-file-editor.tsx | 10 +-
.../compose/general/generic/show.tsx | 2 +-
.../compose/general/randomize-compose.tsx | 4 +-
components/dashboard/compose/general/show.tsx | 8 +-
components/dashboard/compose/logs/show.tsx | 4 +-
.../dashboard/compose/monitoring/show.tsx | 6 +-
.../dashboard/compose/update-compose.tsx | 16 +-
.../dashboard/database/backups/add-backup.tsx | 36 +-
.../database/backups/update-backup.tsx | 32 +-
.../dashboard/docker/logs/docker-logs-id.tsx | 2 +-
.../docker/logs/show-docker-modal-logs.tsx | 4 +-
components/dashboard/docker/show/colums.tsx | 2 +-
.../dashboard/docker/show/show-containers.tsx | 4 +-
.../docker/terminal/docker-terminal-modal.tsx | 2 +-
.../docker/terminal/docker-terminal.tsx | 4 +-
.../file-system/show-traefik-file.tsx | 4 +-
.../file-system/show-traefik-system.tsx | 4 +-
.../show-mariadb-advanced-settings.tsx | 16 +-
.../advanced/show-mariadb-resources.tsx | 2 +-
.../mariadb/backups/show-backup-mariadb.tsx | 18 +-
.../environment/show-mariadb-environment.tsx | 12 +-
.../show-external-mariadb-credentials.tsx | 2 +-
.../mariadb/general/show-general-mariadb.tsx | 10 +-
.../show-internal-mariadb-credentials.tsx | 4 +-
.../mariadb/general/stop-mariadb.tsx | 106 ++---
.../dashboard/mariadb/start-mariadb.tsx | 106 ++---
.../dashboard/mariadb/update-mariadb.tsx | 16 +-
.../mariadb/volumes/show-volumes.tsx | 6 +-
.../advanced/show-mongo-advanced-settings.tsx | 16 +-
.../mongo/advanced/show-mongo-resources.tsx | 2 +-
.../mongo/backups/show-backup-mongo.tsx | 18 +-
.../mongo/general/show-general-mongo.tsx | 10 +-
.../show-internal-mongo-credentials.tsx | 4 +-
.../dashboard/mongo/general/stop-mongo.tsx | 106 ++---
components/dashboard/mongo/start-mongo.tsx | 106 ++---
components/dashboard/mongo/update-mongo.tsx | 16 +-
.../dashboard/mongo/volumes/show-volumes.tsx | 6 +-
.../monitoring/docker/docker-block-chart.tsx | 10 +-
.../monitoring/docker/docker-cpu-chart.tsx | 10 +-
.../monitoring/docker/docker-disk-chart.tsx | 10 +-
.../monitoring/docker/docker-memory-chart.tsx | 10 +-
.../docker/docker-network-chart.tsx | 10 +-
.../dashboard/monitoring/docker/show.tsx | 16 +-
.../advanced/show-mysql-advanced-settings.tsx | 2 +-
.../mysql/advanced/show-mysql-resources.tsx | 2 +-
.../mysql/backups/show-backup-mysql.tsx | 18 +-
.../environment/show-mysql-environment.tsx | 12 +-
.../mysql/general/show-general-mysql.tsx | 10 +-
.../show-internal-mysql-credentials.tsx | 4 +-
.../dashboard/mysql/general/stop-mysql.tsx | 106 ++---
components/dashboard/mysql/start-mysql.tsx | 106 ++---
components/dashboard/mysql/update-mysql.tsx | 16 +-
.../dashboard/mysql/volumes/show-volumes.tsx | 6 +-
.../show-postgres-advanced-settings.tsx | 16 +-
.../advanced/show-postgres-resources.tsx | 2 +-
.../postgres/backups/show-backup-postgres.tsx | 18 +-
.../environment/show-postgres-environment.tsx | 12 +-
.../general/show-general-postgres.tsx | 10 +-
.../show-internal-postgres-credentials.tsx | 4 +-
.../postgres/general/stop-postgres.tsx | 106 ++---
.../dashboard/postgres/start-postgres.tsx | 106 ++---
.../dashboard/postgres/update-postgres.tsx | 16 +-
.../postgres/volumes/show-volumes.tsx | 4 +-
.../dashboard/project/add-application.tsx | 6 +-
components/dashboard/project/add-compose.tsx | 18 +-
components/dashboard/project/add-database.tsx | 2 +-
components/dashboard/project/add-template.tsx | 32 +-
components/dashboard/projects/add.tsx | 2 +-
components/dashboard/projects/show.tsx | 2 +-
components/dashboard/projects/update.tsx | 18 +-
.../advanced/show-redis-advanced-settings.tsx | 16 +-
.../redis/advanced/show-redis-resources.tsx | 2 +-
.../environment/show-redis-environment.tsx | 12 +-
.../redis/general/show-general-redis.tsx | 10 +-
.../show-internal-redis-credentials.tsx | 4 +-
.../dashboard/redis/general/stop-redis.tsx | 106 ++---
components/dashboard/redis/start-redis.tsx | 106 ++---
components/dashboard/redis/update-redis.tsx | 16 +-
.../dashboard/redis/volumes/show-volumes.tsx | 4 +-
.../dashboard/settings/appearance-form.tsx | 16 +-
.../settings/certificates/add-certificate.tsx | 5 +-
.../certificates/delete-certificate.tsx | 2 +-
.../settings/cluster/nodes/add-node.tsx | 6 +-
.../cluster/nodes/manager/add-manager.tsx | 4 +-
.../settings/cluster/nodes/show-nodes.tsx | 30 +-
.../cluster/nodes/workers/delete-worker.tsx | 4 +-
.../cluster/registry/delete-registry.tsx | 2 +-
.../settings/destination/add-destination.tsx | 2 +-
.../destination/delete-destination.tsx | 2 +-
.../destination/show-destinations.tsx | 2 +-
.../destination/update-destination.tsx | 2 +-
.../settings/github/remove-github-app.tsx | 8 +-
.../dashboard/settings/profile/enable-2fa.tsx | 10 +-
.../settings/profile/generate-token.tsx | 8 +-
.../settings/profile/profile-form.tsx | 16 +-
components/dashboard/settings/show.tsx | 12 +-
.../settings/users/add-permissions.tsx | 4 +-
.../dashboard/settings/users/add-user.tsx | 4 +-
.../dashboard/settings/users/delete-user.tsx | 4 +-
.../dashboard/settings/users/show-users.tsx | 36 +-
.../dashboard/settings/users/update-user.tsx | 16 +-
components/dashboard/settings/web-server.tsx | 12 +-
.../web-server/docker-terminal-modal.tsx | 10 +-
.../web-server/show-main-traefik-config.tsx | 4 +-
.../settings/web-server/show-modal-logs.tsx | 7 +-
.../show-server-middleware-config.tsx | 4 +-
.../web-server/show-server-traefik-config.tsx | 4 +-
.../settings/web-server/terminal-modal.tsx | 24 +-
.../settings/web-server/terminal.tsx | 4 +-
.../settings/web-server/update-server.tsx | 4 +-
components/icons/data-tools-icons.tsx | 278 ++++++-------
components/layouts/navbar.tsx | 6 +-
components/layouts/navigation-tabs.tsx | 8 +-
components/layouts/settings-layout.tsx | 6 +-
components/shared/alert-block.tsx | 2 +-
components/shared/code-editor.tsx | 10 +-
components/shared/status-tooltip.tsx | 7 +-
components/shared/toggle-visibility-input.tsx | 4 +-
components/support/show-support.tsx | 2 +-
components/ui/accordion.tsx | 86 ++--
components/ui/alert-dialog.tsx | 174 ++++----
components/ui/alert.tsx | 92 ++---
components/ui/avatar.tsx | 56 +--
components/ui/badge.tsx | 48 +--
components/ui/breadcrumb.tsx | 224 +++++------
components/ui/button.tsx | 128 +++---
components/ui/card.tsx | 100 ++---
components/ui/checkbox.tsx | 34 +-
components/ui/command.tsx | 192 ++++-----
components/ui/dialog.tsx | 152 ++++---
components/ui/dropdown-menu.tsx | 268 ++++++-------
components/ui/file-tree.tsx | 8 +-
components/ui/form.tsx | 4 +-
components/ui/input-otp.tsx | 2 +-
components/ui/input.tsx | 46 +--
components/ui/label.tsx | 22 +-
components/ui/popover.tsx | 30 +-
components/ui/progress.tsx | 42 +-
components/ui/radio-group.tsx | 52 +--
components/ui/scroll-area.tsx | 2 +-
components/ui/select.tsx | 218 +++++-----
components/ui/separator.tsx | 38 +-
components/ui/sheet.tsx | 176 ++++----
components/ui/sonner.tsx | 38 +-
components/ui/switch.tsx | 34 +-
components/ui/table.tsx | 142 +++----
components/ui/tabs.tsx | 2 +-
components/ui/textarea.tsx | 26 +-
components/ui/toggle.tsx | 58 +--
components/ui/tooltip.tsx | 24 +-
lib/utils.ts | 6 +-
next.config.mjs | 72 ++--
pages/api/[...trpc].ts | 6 +-
pages/api/deploy/github.ts | 10 +-
pages/api/redirect.ts | 6 +-
pages/dashboard/docker.tsx | 2 +-
.../[projectId]/services/mysql/[mysqlId].tsx | 10 +-
.../services/postgres/[postgresId].tsx | 10 +-
.../[projectId]/services/redis/[redisId].tsx | 10 +-
pages/dashboard/settings/cluster.tsx | 2 +-
pages/dashboard/traefik.tsx | 2 +-
pages/index.tsx | 38 +-
pages/swagger.tsx | 2 +-
postcss.config.cjs | 8 +-
server/api/root.ts | 44 +-
server/api/routers/admin.ts | 12 +-
server/api/routers/application.ts | 8 +-
server/api/routers/auth.ts | 20 +-
server/api/routers/backup.ts | 8 +-
server/api/routers/certificate.ts | 2 +-
server/api/routers/cluster.ts | 10 +-
server/api/routers/compose.ts | 58 +--
server/api/routers/destination.ts | 2 +-
server/api/routers/docker.ts | 4 +-
server/api/routers/mariadb.ts | 2 +-
server/api/routers/mongo.ts | 2 +-
server/api/routers/mysql.ts | 4 +-
server/api/routers/port.ts | 2 +-
server/api/routers/postgres.ts | 2 +-
server/api/routers/project.ts | 20 +-
server/api/routers/redirects.ts | 2 +-
server/api/routers/redis.ts | 2 +-
server/api/routers/registry.ts | 8 +-
server/api/routers/security.ts | 2 +-
server/api/routers/settings.ts | 48 +--
server/api/services/admin.ts | 4 +-
server/api/services/application.ts | 12 +-
server/api/services/auth.ts | 4 +-
server/api/services/certificate.ts | 4 +-
server/api/services/compose.ts | 18 +-
server/api/services/domain.ts | 6 +-
server/api/services/mariadb.ts | 4 +-
server/api/services/mongo.ts | 4 +-
server/api/services/mount.ts | 4 +-
server/api/services/mysql.ts | 4 +-
server/api/services/postgres.ts | 4 +-
server/api/services/redis.ts | 4 +-
server/api/services/registry.ts | 14 +-
server/api/services/security.ts | 8 +-
server/api/services/settings.ts | 4 +-
server/api/trpc.ts | 4 +-
server/auth/auth.ts | 10 +-
server/auth/token.ts | 4 +-
server/constants/index.ts | 2 +-
server/db/index.ts | 4 +-
server/db/reset.ts | 2 +-
server/db/schema/admin.ts | 8 +-
server/db/schema/application.ts | 26 +-
server/db/schema/auth.ts | 14 +-
server/db/schema/backups.ts | 16 +-
server/db/schema/certificate.ts | 6 +-
server/db/schema/compose.ts | 20 +-
server/db/schema/deployment.ts | 8 +-
server/db/schema/destination.ts | 6 +-
server/db/schema/domain.ts | 2 +-
server/db/schema/mariadb.ts | 12 +-
server/db/schema/mongo.ts | 12 +-
server/db/schema/mount.ts | 12 +-
server/db/schema/mysql.ts | 12 +-
server/db/schema/port.ts | 6 +-
server/db/schema/postgres.ts | 12 +-
server/db/schema/project.ts | 16 +-
server/db/schema/redirects.ts | 2 +-
server/db/schema/redis.ts | 10 +-
server/db/schema/registry.ts | 8 +-
server/db/schema/security.ts | 2 +-
server/db/schema/session.ts | 2 +-
server/db/schema/source.ts | 6 +-
server/db/schema/user.ts | 8 +-
server/db/seed.ts | 2 +-
server/monitoring/utilts.ts | 2 +-
server/queues/deployments-queue.ts | 2 +-
server/queues/queueSetup.ts | 2 +-
server/server.ts | 20 +-
server/setup/config-paths.ts | 4 +-
server/setup/postgres-setup.ts | 2 +-
server/setup/registry-setup.ts | 4 +-
server/setup/traefik-setup.ts | 12 +-
server/types/with.ts | 32 +-
server/utils/backups/index.ts | 10 +-
server/utils/backups/mariadb.ts | 4 +-
server/utils/backups/mongo.ts | 4 +-
server/utils/backups/mysql.ts | 6 +-
server/utils/backups/postgres.ts | 6 +-
server/utils/backups/utils.ts | 10 +-
server/utils/builders/compose.ts | 8 +-
server/utils/builders/docker-file.ts | 60 +--
server/utils/builders/heroku.ts | 2 +-
server/utils/builders/index.ts | 2 +-
server/utils/builders/nixpacks.ts | 2 +-
server/utils/builders/paketo.ts | 4 +-
server/utils/cluster/upload.ts | 2 +-
server/utils/databases/mariadb.ts | 2 +-
server/utils/databases/mongo.ts | 4 +-
server/utils/databases/mysql.ts | 6 +-
server/utils/databases/postgres.ts | 6 +-
server/utils/databases/redis.ts | 6 +-
server/utils/docker/compose.ts | 4 +-
server/utils/docker/utils.ts | 2 +-
server/utils/filesystem/ssh.ts | 94 ++---
server/utils/providers/github.ts | 2 +-
server/utils/providers/raw.ts | 6 +-
server/utils/traefik/domain.ts | 4 +-
server/utils/traefik/middleware.ts | 4 +-
server/utils/traefik/redirect.ts | 2 +-
server/utils/traefik/registry.ts | 8 +-
server/utils/traefik/security.ts | 12 +-
server/utils/traefik/web-server.ts | 12 +-
server/wss/docker-container-logs.ts | 2 +-
server/wss/docker-container-terminal.ts | 2 +-
server/wss/docker-stats.ts | 2 +-
server/wss/listen-deployment.ts | 2 +-
server/wss/terminal.ts | 8 +-
server/wss/utils.ts | 16 +-
setup.ts | 8 +-
templates/appsmith/index.ts | 4 +-
templates/baserow/index.ts | 4 +-
templates/calcom/index.ts | 14 +-
templates/directus/index.ts | 4 +-
templates/documenso/index.ts | 8 +-
templates/doublezero/index.ts | 6 +-
templates/excalidraw/index.ts | 4 +-
templates/ghost/index.ts | 4 +-
templates/glitchtip/index.ts | 6 +-
templates/grafana/index.ts | 4 +-
templates/listmonk/index.ts | 10 +-
templates/meilisearch/index.ts | 6 +-
templates/metabase/index.ts | 4 +-
templates/minio/index.ts | 4 +-
templates/n8n/index.ts | 4 +-
templates/nocodb/index.ts | 10 +-
templates/odoo/index.ts | 4 +-
templates/open-webui/index.ts | 8 +-
templates/phpmyadmin/index.ts | 6 +-
templates/plausible/index.ts | 6 +-
templates/pocketbase/index.ts | 4 +-
templates/rocketchat/index.ts | 4 +-
templates/templates.ts | 67 ++--
templates/uptime-kuma/index.ts | 4 +-
templates/utils/index.ts | 4 +-
templates/wordpress/index.ts | 4 +-
tsconfig.json | 83 ++--
tsconfig.server.json | 28 +-
349 files changed, 3565 insertions(+), 3549 deletions(-)
diff --git a/__test__/compose/compose.test.ts b/__test__/compose/compose.test.ts
index 675cb772..1e728b99 100644
--- a/__test__/compose/compose.test.ts
+++ b/__test__/compose/compose.test.ts
@@ -1,7 +1,7 @@
-import { expect, test } from "vitest";
-import { load } from "js-yaml";
import { addPrefixToAllProperties } from "@/server/utils/docker/compose";
import type { ComposeSpecification } from "@/server/utils/docker/types";
+import { load } from "js-yaml";
+import { expect, test } from "vitest";
const composeFile1 = `
version: "3.8"
diff --git a/__test__/compose/secrets/secret-root.test.ts b/__test__/compose/secrets/secret-root.test.ts
index 861343a2..61f9f818 100644
--- a/__test__/compose/secrets/secret-root.test.ts
+++ b/__test__/compose/secrets/secret-root.test.ts
@@ -1,8 +1,8 @@
-import { expect, test } from "vitest";
-import { load, dump } from "js-yaml";
import { generateRandomHash } from "@/server/utils/docker/compose";
-import type { ComposeSpecification } from "@/server/utils/docker/types";
import { addPrefixToSecretsRoot } from "@/server/utils/docker/compose/secrets";
+import type { ComposeSpecification } from "@/server/utils/docker/types";
+import { dump, load } from "js-yaml";
+import { expect, test } from "vitest";
test("Generate random hash with 8 characters", () => {
const hash = generateRandomHash();
diff --git a/__test__/compose/volume/volume-2.test.ts b/__test__/compose/volume/volume-2.test.ts
index 41581844..57bfb761 100644
--- a/__test__/compose/volume/volume-2.test.ts
+++ b/__test__/compose/volume/volume-2.test.ts
@@ -1,7 +1,7 @@
import { generateRandomHash } from "@/server/utils/docker/compose";
import {
- addPrefixToVolumesRoot,
addPrefixToAllVolumes,
+ addPrefixToVolumesRoot,
} from "@/server/utils/docker/compose/volume";
import type { ComposeSpecification } from "@/server/utils/docker/types";
import { load } from "js-yaml";
diff --git a/__test__/vitest.config.ts b/__test__/vitest.config.ts
index 4127903f..71749b6c 100644
--- a/__test__/vitest.config.ts
+++ b/__test__/vitest.config.ts
@@ -1,5 +1,5 @@
-import { defineConfig } from "vitest/config";
import tsconfigPaths from "vite-tsconfig-paths";
+import { defineConfig } from "vitest/config";
export default defineConfig({
plugins: [
diff --git a/components.json b/components.json
index b4baac4f..81104c1e 100644
--- a/components.json
+++ b/components.json
@@ -1,17 +1,17 @@
{
- "$schema": "https://ui.shadcn.com/schema.json",
- "style": "default",
- "rsc": false,
- "tsx": true,
- "tailwind": {
- "config": "tailwind.config.ts",
- "css": "styles/globals.css",
- "baseColor": "zinc",
- "cssVariables": true,
- "prefix": ""
- },
- "aliases": {
- "components": "@/components",
- "utils": "@/lib/utils"
- }
-}
\ No newline at end of file
+ "$schema": "https://ui.shadcn.com/schema.json",
+ "style": "default",
+ "rsc": false,
+ "tsx": true,
+ "tailwind": {
+ "config": "tailwind.config.ts",
+ "css": "styles/globals.css",
+ "baseColor": "zinc",
+ "cssVariables": true,
+ "prefix": ""
+ },
+ "aliases": {
+ "components": "@/components",
+ "utils": "@/lib/utils"
+ }
+}
diff --git a/components/auth/login-2fa.tsx b/components/auth/login-2fa.tsx
index 6bf03d0c..7c4915fa 100644
--- a/components/auth/login-2fa.tsx
+++ b/components/auth/login-2fa.tsx
@@ -10,19 +10,19 @@ import {
} from "@/components/ui/form";
import { CardTitle } from "@/components/ui/card";
-import { api } from "@/utils/api";
-import { zodResolver } from "@hookform/resolvers/zod";
-import { AlertTriangle } from "lucide-react";
-import { useEffect } from "react";
-import { useForm } from "react-hook-form";
-import { toast } from "sonner";
-import { z } from "zod";
import {
InputOTP,
InputOTPGroup,
InputOTPSlot,
} from "@/components/ui/input-otp";
+import { api } from "@/utils/api";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { AlertTriangle } from "lucide-react";
import { useRouter } from "next/router";
+import { useEffect } from "react";
+import { useForm } from "react-hook-form";
+import { toast } from "sonner";
+import { z } from "zod";
const Login2FASchema = z.object({
pin: z.string().min(6, {
diff --git a/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx b/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx
index 3e2730c9..fd91703b 100644
--- a/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx
+++ b/components/dashboard/application/advanced/cluster/modify-swarm-settings.tsx
@@ -1,3 +1,5 @@
+import { AlertBlock } from "@/components/shared/alert-block";
+import { CodeEditor } from "@/components/shared/code-editor";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -17,21 +19,19 @@ import {
FormLabel,
FormMessage,
} from "@/components/ui/form";
-import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
-import { zodResolver } from "@hookform/resolvers/zod";
-import { useEffect } from "react";
-import { useForm } from "react-hook-form";
-import { toast } from "sonner";
-import { z } from "zod";
-import { HelpCircle, Settings } from "lucide-react";
import {
Tooltip,
TooltipContent,
TooltipProvider,
TooltipTrigger,
} from "@/components/ui/tooltip";
-import { CodeEditor } from "@/components/shared/code-editor";
+import { api } from "@/utils/api";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { HelpCircle, Settings } from "lucide-react";
+import { useEffect } from "react";
+import { useForm } from "react-hook-form";
+import { toast } from "sonner";
+import { z } from "zod";
const HealthCheckSwarmSchema = z
.object({
diff --git a/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx b/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx
index da69aedb..4078ae4c 100644
--- a/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx
+++ b/components/dashboard/application/advanced/cluster/show-cluster-settings.tsx
@@ -1,4 +1,5 @@
-import React from "react";
+import { AlertBlock } from "@/components/shared/alert-block";
+import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
@@ -6,8 +7,6 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
-import { api } from "@/utils/api";
-import { z } from "zod";
import {
Form,
FormControl,
@@ -16,11 +15,6 @@ import {
FormLabel,
FormMessage,
} from "@/components/ui/form";
-import { toast } from "sonner";
-import { zodResolver } from "@hookform/resolvers/zod";
-import { useForm } from "react-hook-form";
-import { useEffect } from "react";
-import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
import {
Select,
@@ -31,10 +25,16 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
-import Link from "next/link";
+import { api } from "@/utils/api";
+import { zodResolver } from "@hookform/resolvers/zod";
import { Server } from "lucide-react";
+import Link from "next/link";
+import React from "react";
+import { useEffect } from "react";
+import { useForm } from "react-hook-form";
+import { toast } from "sonner";
+import { z } from "zod";
import { AddSwarmSettings } from "./modify-swarm-settings";
-import { AlertBlock } from "@/components/shared/alert-block";
interface Props {
applicationId: string;
diff --git a/components/dashboard/application/advanced/general/add-command.tsx b/components/dashboard/application/advanced/general/add-command.tsx
index a898607d..979660bc 100644
--- a/components/dashboard/application/advanced/general/add-command.tsx
+++ b/components/dashboard/application/advanced/general/add-command.tsx
@@ -1,4 +1,4 @@
-import React from "react";
+import { Button } from "@/components/ui/button";
import {
Card,
CardContent,
@@ -6,8 +6,6 @@ import {
CardHeader,
CardTitle,
} from "@/components/ui/card";
-import { api } from "@/utils/api";
-import { z } from "zod";
import {
Form,
FormControl,
@@ -16,12 +14,14 @@ import {
FormLabel,
FormMessage,
} from "@/components/ui/form";
-import { toast } from "sonner";
-import { zodResolver } from "@hookform/resolvers/zod";
-import { useForm } from "react-hook-form";
-import { useEffect } from "react";
-import { Button } from "@/components/ui/button";
import { Input } from "@/components/ui/input";
+import { api } from "@/utils/api";
+import { zodResolver } from "@hookform/resolvers/zod";
+import React from "react";
+import { useEffect } from "react";
+import { useForm } from "react-hook-form";
+import { toast } from "sonner";
+import { z } from "zod";
interface Props {
applicationId: string;
}
diff --git a/components/dashboard/application/advanced/ports/add-port.tsx b/components/dashboard/application/advanced/ports/add-port.tsx
index 76939d82..873baa67 100644
--- a/components/dashboard/application/advanced/ports/add-port.tsx
+++ b/components/dashboard/application/advanced/ports/add-port.tsx
@@ -1,3 +1,4 @@
+import { AlertBlock } from "@/components/shared/alert-block";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -17,13 +18,6 @@ import {
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
-import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
-import { zodResolver } from "@hookform/resolvers/zod";
-import { useEffect } from "react";
-import { useForm } from "react-hook-form";
-import { toast } from "sonner";
-import { PlusIcon } from "lucide-react";
import {
Select,
SelectContent,
@@ -31,6 +25,12 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
+import { api } from "@/utils/api";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { PlusIcon } from "lucide-react";
+import { useEffect } from "react";
+import { useForm } from "react-hook-form";
+import { toast } from "sonner";
import { z } from "zod";
const AddPortSchema = z.object({
diff --git a/components/dashboard/application/advanced/ports/show-port.tsx b/components/dashboard/application/advanced/ports/show-port.tsx
index ab5f4097..1ab804fb 100644
--- a/components/dashboard/application/advanced/ports/show-port.tsx
+++ b/components/dashboard/application/advanced/ports/show-port.tsx
@@ -1,4 +1,4 @@
-import React from "react";
+import { AlertBlock } from "@/components/shared/alert-block";
import {
Card,
CardContent,
@@ -8,10 +8,10 @@ import {
} from "@/components/ui/card";
import { api } from "@/utils/api";
import { Rss } from "lucide-react";
+import React from "react";
import { AddPort } from "./add-port";
import { DeletePort } from "./delete-port";
import { UpdatePort } from "./update-port";
-import { AlertBlock } from "@/components/shared/alert-block";
interface Props {
applicationId: string;
}
diff --git a/components/dashboard/application/advanced/ports/update-port.tsx b/components/dashboard/application/advanced/ports/update-port.tsx
index 9742964e..8f9d9cd7 100644
--- a/components/dashboard/application/advanced/ports/update-port.tsx
+++ b/components/dashboard/application/advanced/ports/update-port.tsx
@@ -1,3 +1,4 @@
+import { AlertBlock } from "@/components/shared/alert-block";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -17,14 +18,6 @@ import {
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
-import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
-import { zodResolver } from "@hookform/resolvers/zod";
-import { PenBoxIcon, Pencil } from "lucide-react";
-import { useEffect } from "react";
-import { useForm } from "react-hook-form";
-import { toast } from "sonner";
-import { z } from "zod";
import {
Select,
SelectContent,
@@ -32,6 +25,13 @@ import {
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
+import { api } from "@/utils/api";
+import { zodResolver } from "@hookform/resolvers/zod";
+import { PenBoxIcon, Pencil } from "lucide-react";
+import { useEffect } from "react";
+import { useForm } from "react-hook-form";
+import { toast } from "sonner";
+import { z } from "zod";
const UpdatePortSchema = z.object({
publishedPort: z.number().int().min(1).max(65535),
diff --git a/components/dashboard/application/advanced/redirects/add-redirect.tsx b/components/dashboard/application/advanced/redirects/add-redirect.tsx
index 4bcf2c56..661990a9 100644
--- a/components/dashboard/application/advanced/redirects/add-redirect.tsx
+++ b/components/dashboard/application/advanced/redirects/add-redirect.tsx
@@ -1,3 +1,4 @@
+import { AlertBlock } from "@/components/shared/alert-block";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -11,22 +12,21 @@ import {
import {
Form,
FormControl,
+ FormDescription,
FormField,
FormItem,
FormLabel,
- FormDescription,
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
+import { Switch } from "@/components/ui/switch";
import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
import { zodResolver } from "@hookform/resolvers/zod";
+import { PlusIcon } from "lucide-react";
import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
-import { PlusIcon } from "lucide-react";
import { z } from "zod";
-import { Switch } from "@/components/ui/switch";
const AddRedirectchema = z.object({
regex: z.string().min(1, "Regex required"),
diff --git a/components/dashboard/application/advanced/redirects/show-redirects.tsx b/components/dashboard/application/advanced/redirects/show-redirects.tsx
index 2a6e80a2..9a8325fc 100644
--- a/components/dashboard/application/advanced/redirects/show-redirects.tsx
+++ b/components/dashboard/application/advanced/redirects/show-redirects.tsx
@@ -1,4 +1,3 @@
-import React from "react";
import {
Card,
CardContent,
@@ -8,6 +7,7 @@ import {
} from "@/components/ui/card";
import { api } from "@/utils/api";
import { Split } from "lucide-react";
+import React from "react";
import { AddRedirect } from "./add-redirect";
import { DeleteRedirect } from "./delete-redirect";
import { UpdateRedirect } from "./update-redirect";
diff --git a/components/dashboard/application/advanced/redirects/update-redirect.tsx b/components/dashboard/application/advanced/redirects/update-redirect.tsx
index 9643938b..855f5c8c 100644
--- a/components/dashboard/application/advanced/redirects/update-redirect.tsx
+++ b/components/dashboard/application/advanced/redirects/update-redirect.tsx
@@ -1,3 +1,4 @@
+import { AlertBlock } from "@/components/shared/alert-block";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -11,22 +12,21 @@ import {
import {
Form,
FormControl,
+ FormDescription,
FormField,
FormItem,
FormLabel,
- FormDescription,
FormMessage,
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
+import { Switch } from "@/components/ui/switch";
import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
import { zodResolver } from "@hookform/resolvers/zod";
import { PenBoxIcon, Pencil } from "lucide-react";
import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { z } from "zod";
-import { Switch } from "@/components/ui/switch";
const UpdateRedirectSchema = z.object({
regex: z.string().min(1, "Regex required"),
permanent: z.boolean().default(false),
diff --git a/components/dashboard/application/advanced/security/add-security.tsx b/components/dashboard/application/advanced/security/add-security.tsx
index 1f7c0d39..64dfd57a 100644
--- a/components/dashboard/application/advanced/security/add-security.tsx
+++ b/components/dashboard/application/advanced/security/add-security.tsx
@@ -1,3 +1,4 @@
+import { AlertBlock } from "@/components/shared/alert-block";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -18,12 +19,11 @@ import {
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
import { zodResolver } from "@hookform/resolvers/zod";
+import { PlusIcon } from "lucide-react";
import { useEffect } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
-import { PlusIcon } from "lucide-react";
import { z } from "zod";
const AddSecuritychema = z.object({
diff --git a/components/dashboard/application/advanced/security/show-security.tsx b/components/dashboard/application/advanced/security/show-security.tsx
index ef51e2c9..5c02bf76 100644
--- a/components/dashboard/application/advanced/security/show-security.tsx
+++ b/components/dashboard/application/advanced/security/show-security.tsx
@@ -1,4 +1,3 @@
-import React from "react";
import {
Card,
CardContent,
@@ -8,6 +7,7 @@ import {
} from "@/components/ui/card";
import { api } from "@/utils/api";
import { LockKeyhole } from "lucide-react";
+import React from "react";
import { AddSecurity } from "./add-security";
import { DeleteSecurity } from "./delete-security";
import { UpdateSecurity } from "./update-security";
diff --git a/components/dashboard/application/advanced/security/update-security.tsx b/components/dashboard/application/advanced/security/update-security.tsx
index 9ff53c2e..bb6e59ae 100644
--- a/components/dashboard/application/advanced/security/update-security.tsx
+++ b/components/dashboard/application/advanced/security/update-security.tsx
@@ -1,3 +1,4 @@
+import { AlertBlock } from "@/components/shared/alert-block";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -18,7 +19,6 @@ import {
} from "@/components/ui/form";
import { Input } from "@/components/ui/input";
import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
import { zodResolver } from "@hookform/resolvers/zod";
import { PenBoxIcon, Pencil } from "lucide-react";
import { useEffect } from "react";
diff --git a/components/dashboard/application/advanced/show-application-advanced-settings.tsx b/components/dashboard/application/advanced/show-application-advanced-settings.tsx
index d0177331..56513465 100644
--- a/components/dashboard/application/advanced/show-application-advanced-settings.tsx
+++ b/components/dashboard/application/advanced/show-application-advanced-settings.tsx
@@ -1,3 +1,4 @@
+import { AlertBlock } from "@/components/shared/alert-block";
import { Button } from "@/components/ui/button";
import {
Card,
@@ -21,7 +22,6 @@ import React, { useEffect } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { z } from "zod";
-import { AlertBlock } from "@/components/shared/alert-block";
const addResourcesApplication = z.object({
memoryReservation: z.number().nullable().optional(),
diff --git a/components/dashboard/application/advanced/traefik/show-traefik-config.tsx b/components/dashboard/application/advanced/traefik/show-traefik-config.tsx
index a3fb4f30..28d44264 100644
--- a/components/dashboard/application/advanced/traefik/show-traefik-config.tsx
+++ b/components/dashboard/application/advanced/traefik/show-traefik-config.tsx
@@ -1,4 +1,4 @@
-import React from "react";
+import { CodeEditor } from "@/components/shared/code-editor";
import {
Card,
CardContent,
@@ -8,8 +8,8 @@ import {
} from "@/components/ui/card";
import { api } from "@/utils/api";
import { File } from "lucide-react";
+import React from "react";
import { UpdateTraefikConfig } from "./update-traefik-config";
-import { CodeEditor } from "@/components/shared/code-editor";
interface Props {
applicationId: string;
}
diff --git a/components/dashboard/application/advanced/traefik/update-traefik-config.tsx b/components/dashboard/application/advanced/traefik/update-traefik-config.tsx
index 659353ec..a185082b 100644
--- a/components/dashboard/application/advanced/traefik/update-traefik-config.tsx
+++ b/components/dashboard/application/advanced/traefik/update-traefik-config.tsx
@@ -1,3 +1,5 @@
+import { AlertBlock } from "@/components/shared/alert-block";
+import { CodeEditor } from "@/components/shared/code-editor";
import { Button } from "@/components/ui/button";
import {
Dialog,
@@ -17,14 +19,12 @@ import {
FormMessage,
} from "@/components/ui/form";
import { api } from "@/utils/api";
-import { AlertBlock } from "@/components/shared/alert-block";
import { zodResolver } from "@hookform/resolvers/zod";
+import jsyaml from "js-yaml";
import { useEffect, useState } from "react";
import { useForm } from "react-hook-form";
import { toast } from "sonner";
import { z } from "zod";
-import jsyaml from "js-yaml";
-import { CodeEditor } from "@/components/shared/code-editor";
const UpdateTraefikConfigSchema = z.object({
traefikConfig: z.string(),
@@ -110,12 +110,15 @@ export const UpdateTraefikConfig = ({ applicationId }: Props) => {
};
return (
-