diff --git a/apps/api/package.json b/apps/api/package.json index 8955c00f8..3bc32ff2b 100644 --- a/apps/api/package.json +++ b/apps/api/package.json @@ -8,15 +8,15 @@ "db:studio": "prisma studio", "db:migrate": "COOLIFY_DATABASE_URL=file:../db/migration.db prisma migrate dev --skip-seed --name", "dev": "nodemon", - "build": "rimraf build && esbuild `find src \\( -name '*.ts' \\)| grep -v client/` --platform=node --outdir=build --format=cjs", + "build": "rimraf build && esbuild `find src \\( -name '*.ts' \\)| grep -v client/` --minify=true --platform=node --outdir=build --format=cjs", "format": "prettier --write 'src/**/*.{js,ts,json,md}'", "lint": "prettier --check 'src/**/*.{js,ts,json,md}' && eslint --ignore-path .eslintignore .", "start": "NODE_ENV=production npx -y prisma migrate deploy && npx prisma generate && npx prisma db seed && node index.js" }, "dependencies": { "@breejs/ts-worker": "2.0.0", - "@fastify/autoload": "5.3.1", - "@fastify/cookie": "8.1.0", + "@fastify/autoload": "5.4.0", + "@fastify/cookie": "8.3.0", "@fastify/cors": "8.1.0", "@fastify/env": "4.1.0", "@fastify/jwt": "6.3.2", @@ -24,7 +24,7 @@ "@fastify/static": "6.5.0", "@iarna/toml": "2.2.5", "@ladjs/graceful": "3.0.2", - "@prisma/client": "4.3.1", + "@prisma/client": "4.4.0", "axios": "0.27.2", "bcryptjs": "2.4.3", "bree": "9.1.2", @@ -37,10 +37,10 @@ "dockerode": "3.3.4", "dotenv-extended": "2.9.0", "execa": "6.1.0", - "fastify": "4.5.3", + "fastify": "4.7.0", "fastify-plugin": "4.2.1", "generate-password": "1.7.0", - "got": "12.4.1", + "got": "12.5.1", "is-ip": "5.0.0", "is-port-reachable": "4.0.0", "js-yaml": "4.1.0", @@ -56,20 +56,20 @@ "unique-names-generator": "4.7.1" }, "devDependencies": { - "@types/node": "18.7.15", + "@types/node": "18.7.23", "@types/node-os-utils": "1.3.0", - "@typescript-eslint/eslint-plugin": "5.36.2", - "@typescript-eslint/parser": "5.36.2", - "esbuild": "0.15.7", + "@typescript-eslint/eslint-plugin": "5.38.1", + "@typescript-eslint/parser": "5.38.1", + "esbuild": "0.15.10", "eslint": "8.23.0", "eslint-config-prettier": "8.5.0", "eslint-plugin-prettier": "4.2.1", - "nodemon": "2.0.19", + "nodemon": "2.0.20", "prettier": "2.7.1", - "prisma": "4.3.1", + "prisma": "4.4.0", "rimraf": "3.0.2", "tsconfig-paths": "4.1.0", - "typescript": "4.8.2" + "typescript": "4.8.4" }, "prisma": { "seed": "node prisma/seed.js" diff --git a/apps/api/prisma/migrations/20221002084246_no_unique_appid_on_previews/migration.sql b/apps/api/prisma/migrations/20221002084246_no_unique_appid_on_previews/migration.sql new file mode 100644 index 000000000..031f842cb --- /dev/null +++ b/apps/api/prisma/migrations/20221002084246_no_unique_appid_on_previews/migration.sql @@ -0,0 +1,2 @@ +-- DropIndex +DROP INDEX "PreviewApplication_applicationId_key"; diff --git a/apps/api/prisma/migrations/20221002091630_forked_previews/migration.sql b/apps/api/prisma/migrations/20221002091630_forked_previews/migration.sql new file mode 100644 index 000000000..2312c011b --- /dev/null +++ b/apps/api/prisma/migrations/20221002091630_forked_previews/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Build" ADD COLUMN "sourceRepository" TEXT; diff --git a/apps/api/prisma/schema.prisma b/apps/api/prisma/schema.prisma index 4640a4350..eba0ac215 100644 --- a/apps/api/prisma/schema.prisma +++ b/apps/api/prisma/schema.prisma @@ -139,7 +139,7 @@ model PreviewApplication { sourceBranch String isRandomDomain Boolean @default(false) customDomain String? - applicationId String @unique + applicationId String application Application @relation(fields: [applicationId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -247,6 +247,7 @@ model Build { previewApplicationId String? forceRebuild Boolean @default(false) sourceBranch String? + sourceRepository String? branch String? status String? @default("queued") createdAt DateTime @default(now()) diff --git a/apps/api/src/index.ts b/apps/api/src/index.ts index acbae3d71..6b43db8b7 100644 --- a/apps/api/src/index.ts +++ b/apps/api/src/index.ts @@ -156,11 +156,6 @@ prisma.setting.findFirst().then(async (settings) => { setInterval(async () => { scheduler.workers.has('infrastructure') && scheduler.workers.get('infrastructure').postMessage("action:copySSLCertificates") }, 2000) - - // cleanupPrismaEngines - // setInterval(async () => { - // scheduler.workers.has('infrastructure') && scheduler.workers.get('infrastructure').postMessage("action:cleanupPrismaEngines") - // }, 60000) await Promise.all([ getArch(), diff --git a/apps/api/src/jobs/deployApplication.ts b/apps/api/src/jobs/deployApplication.ts index ba0281b02..a2790aadb 100644 --- a/apps/api/src/jobs/deployApplication.ts +++ b/apps/api/src/jobs/deployApplication.ts @@ -38,7 +38,7 @@ import * as buildpacks from '../lib/buildPacks'; for (const queueBuild of queuedBuilds) { actions.push(async () => { let application = await prisma.application.findUnique({ where: { id: queueBuild.applicationId }, include: { destinationDocker: true, gitSource: { include: { githubApp: true, gitlabApp: true } }, persistentStorage: true, secrets: true, settings: true, teams: true } }) - let { id: buildId, type, sourceBranch = null, pullmergeRequestId = null, previewApplicationId = null, forceRebuild } = queueBuild + let { id: buildId, type, sourceBranch = null, pullmergeRequestId = null, previewApplicationId = null, forceRebuild, sourceRepository = null } = queueBuild application = decryptApplication(application) const originalApplicationId = application.id if (pullmergeRequestId) { @@ -54,7 +54,6 @@ import * as buildpacks from '../lib/buildPacks'; } const { id: applicationId, - repository, name, destinationDocker, destinationDockerId, @@ -77,6 +76,7 @@ import * as buildpacks from '../lib/buildPacks'; } = application let { branch, + repository, buildPack, port, installCommand, @@ -135,6 +135,7 @@ import * as buildpacks from '../lib/buildPacks'; branch = sourceBranch; domain = `${pullmergeRequestId}.${domain}`; imageId = `${applicationId}-${pullmergeRequestId}`; + repository = sourceRepository || repository; } let deployNeeded = true; diff --git a/apps/api/src/jobs/infrastructure.ts b/apps/api/src/jobs/infrastructure.ts index e0b2d3a61..2bd9c329d 100644 --- a/apps/api/src/jobs/infrastructure.ts +++ b/apps/api/src/jobs/infrastructure.ts @@ -146,10 +146,7 @@ async function checkProxies() { const { destinationDockerId, destinationDocker, publicPort, id } = database; if (destinationDockerId && destinationDocker.isCoolifyProxyUsed) { const { privatePort } = generateDatabaseConfiguration(database, arch); - portReachable = await isReachable(publicPort, { host: destinationDocker.remoteIpAddress || ipv4 || ipv6 }) - if (!portReachable) { - await startTraefikTCPProxy(destinationDocker, id, publicPort, privatePort); - } + await startTraefikTCPProxy(destinationDocker, id, publicPort, privatePort); } } const wordpressWithFtp = await prisma.wordpress.findMany({ @@ -160,10 +157,7 @@ async function checkProxies() { const { service, ftpPublicPort } = ftp; const { destinationDockerId, destinationDocker, id } = service; if (destinationDockerId && destinationDocker.isCoolifyProxyUsed) { - portReachable = await isReachable(ftpPublicPort, { host: destinationDocker.remoteIpAddress || ipv4 || ipv6 }) - if (!portReachable) { - await startTraefikTCPProxy(destinationDocker, id, ftpPublicPort, 22, 'wordpressftp'); - } + await startTraefikTCPProxy(destinationDocker, id, ftpPublicPort, 22, 'wordpressftp'); } } @@ -176,10 +170,7 @@ async function checkProxies() { const { service, publicPort } = minio; const { destinationDockerId, destinationDocker, id } = service; if (destinationDockerId && destinationDocker.isCoolifyProxyUsed) { - portReachable = await isReachable(publicPort, { host: destinationDocker.remoteIpAddress || ipv4 || ipv6 }) - if (!portReachable) { - await startTraefikTCPProxy(destinationDocker, id, publicPort, 9000); - } + await startTraefikTCPProxy(destinationDocker, id, publicPort, 9000); } } } catch (error) { diff --git a/apps/api/src/lib/common.ts b/apps/api/src/lib/common.ts index e8d12c97e..18b5aab23 100644 --- a/apps/api/src/lib/common.ts +++ b/apps/api/src/lib/common.ts @@ -9,7 +9,6 @@ import generator from 'generate-password'; import crypto from 'crypto'; import { promises as dns } from 'dns'; import { PrismaClient } from '@prisma/client'; -import cuid from 'cuid'; import os from 'os'; import sshConfig from 'ssh-config'; @@ -21,7 +20,7 @@ import { scheduler } from './scheduler'; import { supportedServiceTypesAndVersions } from './services/supportedVersions'; import { includeServices } from './services/common'; -export const version = '3.10.12'; +export const version = '3.10.13'; export const isDev = process.env.NODE_ENV === 'development'; const algorithm = 'aes-256-ctr'; @@ -45,7 +44,7 @@ export function getAPIUrl() { if (process.env.CODESANDBOX_HOST) { return `https://${process.env.CODESANDBOX_HOST.replace(/\$PORT/, '3001')}`; } - return isDev ? 'http://host.docker.internal:3001' : 'http://localhost:3000'; + return isDev ? 'http://localhost:3001' : 'http://localhost:3000'; } export function getUIUrl() { @@ -1365,7 +1364,7 @@ export async function startTraefikTCPProxy( let dependentId = id; if (type === 'wordpressftp') dependentId = `${id}-ftp`; - const foundDependentContainer = await checkContainer({ + const { found: foundDependentContainer } = await checkContainer({ dockerId, container: dependentId, remove: true diff --git a/apps/api/src/routes/api/v1/handlers.ts b/apps/api/src/routes/api/v1/handlers.ts index c57766ed6..d16d3ed24 100644 --- a/apps/api/src/routes/api/v1/handlers.ts +++ b/apps/api/src/routes/api/v1/handlers.ts @@ -353,8 +353,10 @@ export async function getCurrentUser( // No new token -> not switching teams } } + const pendingInvitations = await prisma.teamInvitation.findMany({ where: { uid: request.user.userId } }) return { settings: await prisma.setting.findFirst(), + pendingInvitations, supportedServiceTypesAndVersions, token, ...request.user, diff --git a/apps/api/src/routes/api/v1/iam/handlers.ts b/apps/api/src/routes/api/v1/iam/handlers.ts index b423b16bb..d61b173f2 100644 --- a/apps/api/src/routes/api/v1/iam/handlers.ts +++ b/apps/api/src/routes/api/v1/iam/handlers.ts @@ -5,9 +5,10 @@ import { decrypt, errorHandler, prisma, uniqueName } from '../../../../lib/commo import { day } from '../../../../lib/dayjs'; import type { OnlyId } from '../../../../types'; -import type { BodyId, InviteToTeam, SaveTeam, SetPermission } from './types'; +import type { BodyId, DeleteUserFromTeam, InviteToTeam, SaveTeam, SetPermission } from './types'; -export async function listTeams(request: FastifyRequest) { + +export async function listAccounts(request: FastifyRequest) { try { const userId = request.user.userId; const teamId = request.user.teamId; @@ -15,10 +16,24 @@ export async function listTeams(request: FastifyRequest) { where: { id: userId }, select: { id: true, email: true, teams: true } }); - let accounts = []; - let allTeams = []; + let accounts = await prisma.user.findMany({ where: { teams: { some: { id: teamId } } }, select: { id: true, email: true, teams: true } }); if (teamId === '0') { accounts = await prisma.user.findMany({ select: { id: true, email: true, teams: true } }); + } + return { + account, + accounts + }; + } catch ({ status, message }) { + return errorHandler({ status, message }) + } +} +export async function listTeams(request: FastifyRequest) { + try { + const userId = request.user.userId; + const teamId = request.user.teamId; + let allTeams = []; + if (teamId === '0') { allTeams = await prisma.team.findMany({ where: { users: { none: { id: userId } } }, include: { permissions: true } @@ -28,18 +43,30 @@ export async function listTeams(request: FastifyRequest) { where: { users: { some: { id: userId } } }, include: { permissions: true } }); - const invitations = await prisma.teamInvitation.findMany({ where: { uid: userId } }); return { ownTeams, allTeams, - invitations, - account, - accounts }; } catch ({ status, message }) { return errorHandler({ status, message }) } } +export async function removeUserFromTeam(request: FastifyRequest, reply: FastifyReply) { + try { + const { uid } = request.body; + const { id } = request.params; + const userId = request.user.userId; + const foundUser = await prisma.team.findMany({ where: { id, users: { some: { id: userId } } } }); + if (foundUser.length === 0) { + return errorHandler({ status: 404, message: 'Team not found' }); + } + await prisma.team.update({ where: { id }, data: { users: { disconnect: { id: uid } } } }); + await prisma.permission.deleteMany({ where: { teamId: id, userId: uid } }) + return reply.code(201).send() + } catch ({ status, message }) { + return errorHandler({ status, message }) + } +} export async function deleteTeam(request: FastifyRequest, reply: FastifyReply) { try { const userId = request.user.userId; diff --git a/apps/api/src/routes/api/v1/iam/index.ts b/apps/api/src/routes/api/v1/iam/index.ts index 539586b2d..e54d2b9fd 100644 --- a/apps/api/src/routes/api/v1/iam/index.ts +++ b/apps/api/src/routes/api/v1/iam/index.ts @@ -1,19 +1,22 @@ import { FastifyPluginAsync } from 'fastify'; -import { acceptInvitation, changePassword, deleteTeam, getTeam, inviteToTeam, listTeams, newTeam, removeUser, revokeInvitation, saveTeam, setPermission } from './handlers'; +import { acceptInvitation, changePassword, deleteTeam, getTeam, inviteToTeam, listAccounts, listTeams, newTeam, removeUser, removeUserFromTeam, revokeInvitation, saveTeam, setPermission } from './handlers'; import type { OnlyId } from '../../../../types'; -import type { BodyId, InviteToTeam, SaveTeam, SetPermission } from './types'; +import type { BodyId, DeleteUserFromTeam, InviteToTeam, SaveTeam, SetPermission } from './types'; const root: FastifyPluginAsync = async (fastify): Promise => { fastify.addHook('onRequest', async (request) => { return await request.jwtVerify() }) - fastify.get('/', async (request) => await listTeams(request)); + + fastify.get('/', async (request) => await listAccounts(request)); fastify.post('/new', async (request, reply) => await newTeam(request, reply)); + fastify.get('/teams', async (request) => await listTeams(request)); fastify.get('/team/:id', async (request, reply) => await getTeam(request, reply)); fastify.post('/team/:id', async (request, reply) => await saveTeam(request, reply)); fastify.delete('/team/:id', async (request, reply) => await deleteTeam(request, reply)); + fastify.post('/team/:id/user/remove', async (request, reply) => await removeUserFromTeam(request, reply)); fastify.post('/team/:id/invitation/invite', async (request, reply) => await inviteToTeam(request, reply)) fastify.post('/team/:id/invitation/accept', async (request) => await acceptInvitation(request)); @@ -23,7 +26,6 @@ const root: FastifyPluginAsync = async (fastify): Promise => { fastify.delete('/user/remove', async (request, reply) => await removeUser(request, reply)); fastify.post('/user/password', async (request, reply) => await changePassword(request, reply)); - // fastify.delete('/user', async (request, reply) => await deleteUser(request, reply)); }; diff --git a/apps/api/src/routes/api/v1/iam/types.ts b/apps/api/src/routes/api/v1/iam/types.ts index 26a896b8e..959d3dac5 100644 --- a/apps/api/src/routes/api/v1/iam/types.ts +++ b/apps/api/src/routes/api/v1/iam/types.ts @@ -5,6 +5,14 @@ export interface SaveTeam extends OnlyId { name: string } } +export interface DeleteUserFromTeam { + Body: { + uid: string + }, + Params: { + id: string + } +} export interface InviteToTeam { Body: { email: string, diff --git a/apps/api/src/routes/webhooks/github/handlers.ts b/apps/api/src/routes/webhooks/github/handlers.ts index 5124be0ef..26c400737 100644 --- a/apps/api/src/routes/webhooks/github/handlers.ts +++ b/apps/api/src/routes/webhooks/github/handlers.ts @@ -66,13 +66,19 @@ export async function configureGitHubApp(request, reply) { } export async function gitHubEvents(request: FastifyRequest): Promise { try { - const allowedGithubEvents = ['push', 'pull_request']; + const allowedGithubEvents = ['push', 'pull_request', 'ping', 'installation']; const allowedActions = ['opened', 'reopened', 'synchronize', 'closed']; const githubEvent = request.headers['x-github-event']?.toString().toLowerCase(); const githubSignature = request.headers['x-hub-signature-256']?.toString().toLowerCase(); if (!allowedGithubEvents.includes(githubEvent)) { throw { status: 500, message: 'Event not allowed.' } } + if (githubEvent === 'ping') { + return { pong: 'cool' } + } + if (githubEvent === 'installation') { + return { status: 'cool' } + } let projectId, branch; const body = request.body if (githubEvent === 'push') { @@ -80,7 +86,7 @@ export async function gitHubEvents(request: FastifyRequest): Promi branch = body.ref.includes('/') ? body.ref.split('/')[2] : body.ref; } else if (githubEvent === 'pull_request') { projectId = body.pull_request.base.repo.id; - branch = body.pull_request.base.ref.includes('/') ? body.pull_request.base.ref.split('/')[2] : body.pull_request.base.ref; + branch = body.pull_request.base.ref } if (!projectId || !branch) { throw { status: 500, message: 'Cannot parse projectId or branch from the webhook?!' } @@ -147,7 +153,8 @@ export async function gitHubEvents(request: FastifyRequest): Promi } else if (githubEvent === 'pull_request') { const pullmergeRequestId = body.number.toString(); const pullmergeRequestAction = body.action; - const sourceBranch = body.pull_request.head.ref.includes('/') ? body.pull_request.head.ref.split('/')[2] : body.pull_request.head.ref; + const sourceBranch = body.pull_request.head.ref + const sourceRepository = body.pull_request.head.repo.full_name if (!allowedActions.includes(pullmergeRequestAction)) { throw { status: 500, message: 'Action not allowed.' } } @@ -205,6 +212,7 @@ export async function gitHubEvents(request: FastifyRequest): Promi await prisma.build.create({ data: { id: buildId, + sourceRepository, pullmergeRequestId, previewApplicationId, sourceBranch, diff --git a/apps/api/src/routes/webhooks/github/types.ts b/apps/api/src/routes/webhooks/github/types.ts index 1c6f6f9f4..359125608 100644 --- a/apps/api/src/routes/webhooks/github/types.ts +++ b/apps/api/src/routes/webhooks/github/types.ts @@ -23,6 +23,7 @@ export interface GitHubEvents { ref: string, repo: { id: string, + full_name: string, } } } diff --git a/apps/api/src/routes/webhooks/gitlab/handlers.ts b/apps/api/src/routes/webhooks/gitlab/handlers.ts index 8540c5038..aa60aef7b 100644 --- a/apps/api/src/routes/webhooks/gitlab/handlers.ts +++ b/apps/api/src/routes/webhooks/gitlab/handlers.ts @@ -39,9 +39,7 @@ export async function configureGitLabApp(request: FastifyRequest) { const { object_kind: objectKind, ref, project_id } = request.body try { - const allowedActions = ['opened', 'reopen', 'close', 'open', 'update']; - const webhookToken = request.headers['x-gitlab-token']; if (!webhookToken && !isDev) { throw { status: 500, message: 'Invalid webhookToken.' } @@ -91,7 +89,7 @@ export async function gitLabEvents(request: FastifyRequest) { } } } else if (objectKind === 'merge_request') { - const { object_attributes: { work_in_progress: isDraft, action, source_branch: sourceBranch, target_branch: targetBranch }, project: { id } } = request.body + const { object_attributes: { work_in_progress: isDraft, action, source_branch: sourceBranch, target_branch: targetBranch, source: { path_with_namespace: sourceRepository } }, project: { id } } = request.body const pullmergeRequestId = request.body.object_attributes.iid.toString(); const projectId = Number(id); if (!allowedActions.includes(action)) { @@ -100,7 +98,6 @@ export async function gitLabEvents(request: FastifyRequest) { if (isDraft) { throw { status: 500, message: 'Draft MR, do nothing.' } } - const applicationsFound = await getApplicationFromDBWebhook(projectId, targetBranch); if (applicationsFound && applicationsFound.length > 0) { for (const application of applicationsFound) { @@ -153,6 +150,7 @@ export async function gitLabEvents(request: FastifyRequest) { id: buildId, pullmergeRequestId, previewApplicationId, + sourceRepository, sourceBranch, applicationId: application.id, destinationDockerId: application.destinationDocker.id, diff --git a/apps/api/src/routes/webhooks/gitlab/types.ts b/apps/api/src/routes/webhooks/gitlab/types.ts index 42af0f6ae..f2f1e1e3a 100644 --- a/apps/api/src/routes/webhooks/gitlab/types.ts +++ b/apps/api/src/routes/webhooks/gitlab/types.ts @@ -8,6 +8,9 @@ export interface GitLabEvents { Body: { object_attributes: { work_in_progress: string + source: { + path_with_namespace: string + } isDraft: string action: string source_branch: string diff --git a/apps/ui/src/lib/locales/en.json b/apps/ui/src/lib/locales/en.json index d98d5a88b..5abe6ee55 100644 --- a/apps/ui/src/lib/locales/en.json +++ b/apps/ui/src/lib/locales/en.json @@ -328,7 +328,7 @@ "members": "Members", "root_team_explainer": "This is the root team. That means members of this group can manage instance wide settings and have all the priviliges in Coolify (imagine like root user on Linux).", "permission": "Permission", - "you": "(You)", + "you": "You", "promote_to": "Promote to {{grade}}", "revoke_invitation": "Revoke invitation", "pending_invitation": "Pending invitation", diff --git a/apps/ui/src/lib/locales/fr.json b/apps/ui/src/lib/locales/fr.json index 9dc5aa8c4..8fa7fca16 100644 --- a/apps/ui/src/lib/locales/fr.json +++ b/apps/ui/src/lib/locales/fr.json @@ -318,6 +318,6 @@ "root": "(suprême)", "root_team_explainer": "Il s'agit de l'équipe suprême. \nCela signifie que les membres de ce groupe peuvent gérer les paramètres à l'échelle de l'instance et avoir tous les privilèges dans Coolify (imaginez comme un utilisateur root sous Linux).", "send_invitation": "Envoyer une invitation", - "you": "(Toi)" + "you": "Toi" } } diff --git a/apps/ui/src/lib/store.ts b/apps/ui/src/lib/store.ts index 4e8244e29..aa3493ca5 100644 --- a/apps/ui/src/lib/store.ts +++ b/apps/ui/src/lib/store.ts @@ -20,6 +20,7 @@ interface AppSession { gitlab: string | null, }, supportedServiceTypesAndVersions: Array + pendingInvitations: Array } interface AddToast { type?: "info" | "success" | "error", @@ -47,7 +48,8 @@ export const appSession: Writable = writable({ github: null, gitlab: null }, - supportedServiceTypesAndVersions: [] + supportedServiceTypesAndVersions: [], + pendingInvitations: [] }); export const disabledButton: Writable = writable(false); export const isDeploymentEnabled: Writable = writable(false); diff --git a/apps/ui/src/routes/__layout.svelte b/apps/ui/src/routes/__layout.svelte index be3a49550..248ac22ec 100644 --- a/apps/ui/src/routes/__layout.svelte +++ b/apps/ui/src/routes/__layout.svelte @@ -66,6 +66,8 @@ + +
+ +
+
+ +
+
+ +
+
+
diff --git a/apps/ui/src/routes/iam/_Menu.svelte b/apps/ui/src/routes/iam/_Menu.svelte new file mode 100644 index 000000000..ad60ef343 --- /dev/null +++ b/apps/ui/src/routes/iam/_Menu.svelte @@ -0,0 +1,73 @@ + + + diff --git a/apps/ui/src/routes/iam/__layout.svelte b/apps/ui/src/routes/iam/__layout.svelte new file mode 100644 index 000000000..0e9e36cbb --- /dev/null +++ b/apps/ui/src/routes/iam/__layout.svelte @@ -0,0 +1,20 @@ + + +
+ +
+
+ +
+ +
+
diff --git a/apps/ui/src/routes/iam/index.svelte b/apps/ui/src/routes/iam/index.svelte index 9b140b130..581ba7044 100644 --- a/apps/ui/src/routes/iam/index.svelte +++ b/apps/ui/src/routes/iam/index.svelte @@ -20,224 +20,54 @@ - -
- -{#if invitations.length > 0} -
-
Pending invitations
-
- {#each invitations as invitation} -
-
- Invited to {invitation.teamName} with - {invitation.permission} permission. -
- - -
- {/each} -
-
-{/if} -
- {#if $appSession.teamId === '0' && accounts.length > 0} -
Accounts
- {:else} -
Account
- {/if} -
- - - - {#if accounts.length > 1} - - - {/if} - - - - - {#each accounts as account} - - - - - {/each} - -
EmailActions
{account.email} -
resetPassword(account.id)}> - -
-
deleteUser(account.id)}> - -
-
-
-
- -
-
Teams
-
- - {#if $appSession.teamId === '0' && allTeams.length > 0} -
Other Teams
-
- {#each allTeams as team} - -
-
- {team.name} -
- -
{team.permissions?.length} member(s)
-
-
- {/each} +
+
+
+
+ {$appSession.userId === '0' && $appSession.teamId === '0' ? 'Accounts' : 'Your account'}
- {/if} +
+ +{#if $appSession.userId === '0' && $appSession.teamId === '0'} +
+ +
+ {#if searchResults.length > 0} + {#each searchResults as account} + + {/each} + {:else if searchResults.length === 0 && search !== ''} +
Nothing found.
+ {:else} + {#each accounts as account} + + {/each} + {/if} +
+
+{:else} + +{/if} diff --git a/apps/ui/src/routes/iam/pending.svelte b/apps/ui/src/routes/iam/pending.svelte new file mode 100644 index 000000000..52c8dbf17 --- /dev/null +++ b/apps/ui/src/routes/iam/pending.svelte @@ -0,0 +1,55 @@ + + +
+
+
+
Pending Invitations
+
+
+
+ +
+
+ {#each $appSession.pendingInvitations as invitation} +
+
+ Invited to {invitation.teamName} with + {invitation.permission} permission. +
+
+ + +
+
+ {/each} +
+
diff --git a/apps/ui/src/routes/iam/team/[id]/__layout.svelte b/apps/ui/src/routes/iam/team/[id]/__layout.svelte deleted file mode 100644 index 48d45eed8..000000000 --- a/apps/ui/src/routes/iam/team/[id]/__layout.svelte +++ /dev/null @@ -1,84 +0,0 @@ - - - - -{#if id !== 'new'} - -{/if} - diff --git a/apps/ui/src/routes/iam/teams.svelte b/apps/ui/src/routes/iam/teams.svelte new file mode 100644 index 000000000..1a8d96f00 --- /dev/null +++ b/apps/ui/src/routes/iam/teams.svelte @@ -0,0 +1,108 @@ + + + + +
+
+
+
Teams
+ +
+
+
+ +
+
+ {#if $appSession.teamId === '0' && allTeams.length > 0} + {#each allTeams as team} + +
+
+ {team.name} +
+ +
{team.permissions?.length} member(s)
+
+
+ {/each} + {/if} +
diff --git a/apps/ui/src/routes/iam/teams/[id]/__layout.svelte b/apps/ui/src/routes/iam/teams/[id]/__layout.svelte new file mode 100644 index 000000000..bd2264005 --- /dev/null +++ b/apps/ui/src/routes/iam/teams/[id]/__layout.svelte @@ -0,0 +1,31 @@ + + + + + diff --git a/apps/ui/src/routes/iam/team/[id]/index.svelte b/apps/ui/src/routes/iam/teams/[id]/index.svelte similarity index 53% rename from apps/ui/src/routes/iam/team/[id]/index.svelte rename to apps/ui/src/routes/iam/teams/[id]/index.svelte index 5da43f74b..43f4c236b 100644 --- a/apps/ui/src/routes/iam/team/[id]/index.svelte +++ b/apps/ui/src/routes/iam/teams/[id]/index.svelte @@ -8,16 +8,23 @@ -
-
{$t('index.team')}
- > - {team.name} +
+
+
+
{team.name}
+ + + +
+
-
-
-
-
{$t('index.settings')}
- -
-
-
-
- - {#if team.id === '0'} - - {/if} -
- + +
+
+
{$t('index.settings')}
+
+
+
+
+ + {#if team.id === '0'} + + {/if}
+
- +
{$t('team.members')}
-
+
@@ -122,25 +212,33 @@ + {#if permission.user.id === $appSession.userId} + {$t('team.you')} + {/if} + {#if $appSession.isAdmin && permission.user.id !== $appSession.userId && permission.permission !== 'owner'} - + {:else if permission.user.id === $appSession.userId} + {:else} {#if isAdmin(team.permissions[0].permission)} @@ -174,18 +270,16 @@
{$t('team.invite_new_member')}
- +
-
+
diff --git a/apps/ui/src/routes/index.svelte b/apps/ui/src/routes/index.svelte index acba143c4..59c70bdd2 100644 --- a/apps/ui/src/routes/index.svelte +++ b/apps/ui/src/routes/index.svelte @@ -373,129 +373,129 @@ {/if}
-
- - - - - -
{#if applications.length !== 0 || destinations.length !== 0 || databases.length !== 0 || services.length !== 0 || gitSources.length !== 0 || destinations.length !== 0} +
+ + + + + +
diff --git a/apps/ui/src/routes/settings/ssh.svelte b/apps/ui/src/routes/settings/ssh.svelte index 5fe932d9b..262ce96e5 100644 --- a/apps/ui/src/routes/settings/ssh.svelte +++ b/apps/ui/src/routes/settings/ssh.svelte @@ -58,19 +58,16 @@
- {#if sshKeys.length === 0} -
No SSH keys found
-
{permission.user.email} - {permission.user.id === $appSession.userId ? $t('team.you') : ''} {permission.permission} - + + + + @@ -156,9 +254,7 @@ {invitation.permission} -
diff --git a/package.json b/package.json index 8c4799c7d..741d79460 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "coolify", "description": "An open-source & self-hostable Heroku / Netlify alternative.", - "version": "3.10.12", + "version": "3.10.13", "license": "Apache-2.0", "repository": "github:coollabsio/coolify", "scripts": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b02fd948e..3c7fb8aea 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,8 +15,8 @@ importers: apps/api: specifiers: '@breejs/ts-worker': 2.0.0 - '@fastify/autoload': 5.3.1 - '@fastify/cookie': 8.1.0 + '@fastify/autoload': 5.4.0 + '@fastify/cookie': 8.3.0 '@fastify/cors': 8.1.0 '@fastify/env': 4.1.0 '@fastify/jwt': 6.3.2 @@ -24,11 +24,11 @@ importers: '@fastify/static': 6.5.0 '@iarna/toml': 2.2.5 '@ladjs/graceful': 3.0.2 - '@prisma/client': 4.3.1 - '@types/node': 18.7.15 + '@prisma/client': 4.4.0 + '@types/node': 18.7.23 '@types/node-os-utils': 1.3.0 - '@typescript-eslint/eslint-plugin': 5.36.2 - '@typescript-eslint/parser': 5.36.2 + '@typescript-eslint/eslint-plugin': 5.38.1 + '@typescript-eslint/parser': 5.38.1 axios: 0.27.2 bcryptjs: 2.4.3 bree: 9.1.2 @@ -40,38 +40,38 @@ importers: dayjs: 1.11.5 dockerode: 3.3.4 dotenv-extended: 2.9.0 - esbuild: 0.15.7 + esbuild: 0.15.10 eslint: 8.23.0 eslint-config-prettier: 8.5.0 eslint-plugin-prettier: 4.2.1 execa: 6.1.0 - fastify: 4.5.3 + fastify: 4.7.0 fastify-plugin: 4.2.1 generate-password: 1.7.0 - got: 12.4.1 + got: 12.5.1 is-ip: 5.0.0 is-port-reachable: 4.0.0 js-yaml: 4.1.0 jsonwebtoken: 8.5.1 node-forge: 1.3.1 node-os-utils: 1.3.7 - nodemon: 2.0.19 + nodemon: 2.0.20 p-all: 4.0.0 p-throttle: 5.0.0 prettier: 2.7.1 - prisma: 4.3.1 + prisma: 4.4.0 public-ip: 6.0.1 pump: ^3.0.0 rimraf: 3.0.2 ssh-config: 4.1.6 strip-ansi: 7.0.1 tsconfig-paths: 4.1.0 - typescript: 4.8.2 + typescript: 4.8.4 unique-names-generator: 4.7.1 dependencies: - '@breejs/ts-worker': 2.0.0_zx7xfusupi724hd5vcuaoj6jni - '@fastify/autoload': 5.3.1 - '@fastify/cookie': 8.1.0 + '@breejs/ts-worker': 2.0.0_z4zw7clouxa3aqbp4be65jzeva + '@fastify/autoload': 5.4.0 + '@fastify/cookie': 8.3.0 '@fastify/cors': 8.1.0 '@fastify/env': 4.1.0 '@fastify/jwt': 6.3.2 @@ -79,7 +79,7 @@ importers: '@fastify/static': 6.5.0 '@iarna/toml': 2.2.5 '@ladjs/graceful': 3.0.2 - '@prisma/client': 4.3.1_prisma@4.3.1 + '@prisma/client': 4.4.0_prisma@4.4.0 axios: 0.27.2 bcryptjs: 2.4.3 bree: 9.1.2 @@ -92,10 +92,10 @@ importers: dockerode: 3.3.4 dotenv-extended: 2.9.0 execa: 6.1.0 - fastify: 4.5.3 + fastify: 4.7.0 fastify-plugin: 4.2.1 generate-password: 1.7.0 - got: 12.4.1 + got: 12.5.1 is-ip: 5.0.0 is-port-reachable: 4.0.0 js-yaml: 4.1.0 @@ -110,20 +110,20 @@ importers: strip-ansi: 7.0.1 unique-names-generator: 4.7.1 devDependencies: - '@types/node': 18.7.15 + '@types/node': 18.7.23 '@types/node-os-utils': 1.3.0 - '@typescript-eslint/eslint-plugin': 5.36.2_iurrlxgqcgk5svigzxakafpeuu - '@typescript-eslint/parser': 5.36.2_yqf6kl63nyoq5megxukfnom5rm - esbuild: 0.15.7 + '@typescript-eslint/eslint-plugin': 5.38.1_pvy74qhkkcd5sngj4qereqoplm + '@typescript-eslint/parser': 5.38.1_nwctkcr5uyxf47tw7zkgamxmfq + esbuild: 0.15.10 eslint: 8.23.0 eslint-config-prettier: 8.5.0_eslint@8.23.0 eslint-plugin-prettier: 4.2.1_tgumt6uwl2md3n6uqnggd6wvce - nodemon: 2.0.19 + nodemon: 2.0.20 prettier: 2.7.1 - prisma: 4.3.1 + prisma: 4.4.0 rimraf: 3.0.2 tsconfig-paths: 4.1.0 - typescript: 4.8.2 + typescript: 4.8.4 apps/i18n: specifiers: @@ -251,7 +251,7 @@ packages: engines: {node: '>= 10'} dev: false - /@breejs/ts-worker/2.0.0_zx7xfusupi724hd5vcuaoj6jni: + /@breejs/ts-worker/2.0.0_z4zw7clouxa3aqbp4be65jzeva: resolution: {integrity: sha512-6anHRcmgYlF7mrm/YVRn6rx2cegLuiY3VBxkkimOTWC/dVQeH336imVSuIKEGKTwiuNTPr2hswVdDSneNuXg3A==} engines: {node: '>= 12.11'} peerDependencies: @@ -259,7 +259,7 @@ packages: tsconfig-paths: '>= 4' dependencies: bree: 9.1.2 - ts-node: 10.8.2_r4hqq7vrw4pxsipnb7ha25ylfe + ts-node: 10.8.2_gbhfbbeqrol7fxixnzbkbuanxe tsconfig-paths: 4.1.0 transitivePeerDependencies: - '@swc/core' @@ -275,8 +275,17 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: false - /@esbuild/linux-loong64/0.15.7: - resolution: {integrity: sha512-IKznSJOsVUuyt7cDzzSZyqBEcZe+7WlBqTVXiF1OXP/4Nm387ToaXZ0fyLwI1iBlI/bzpxVq411QE2/Bt2XWWw==} + /@esbuild/android-arm/0.15.10: + resolution: {integrity: sha512-FNONeQPy/ox+5NBkcSbYJxoXj9GWu8gVGJTVmUyoOCKQFDTrHVKgNSzChdNt0I8Aj/iKcsDf2r9BFwv+FSNUXg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-loong64/0.15.10: + resolution: {integrity: sha512-w0Ou3Z83LOYEkwaui2M8VwIp+nLi/NA60lBLMvaJ+vXVMcsARYdEzLNE7RSm4+lSg4zq4d7fAVuzk7PNQ5JFgg==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -306,16 +315,16 @@ packages: engines: {node: '>=14'} dev: false - /@fastify/ajv-compiler/3.1.1: - resolution: {integrity: sha512-sn01z9hluLu4ZKUEWK/gdCOU+QJTa6r7YpwD2l7lATgfwrJD/sMSe+zX03UWWebI9kdMmK18gj4Fhi0I3LtLnQ==} + /@fastify/ajv-compiler/3.3.1: + resolution: {integrity: sha512-IRnids8lblQ8e1i8h4JLyfJmebXE+ohcj8x8X/+Ew6ZB4H0Ui05z5YL6q5FOcl0zItVpu4adRzeyVNNUwmduIg==} dependencies: ajv: 8.11.0 ajv-formats: 2.1.1 fast-uri: 2.1.0 dev: false - /@fastify/autoload/5.3.1: - resolution: {integrity: sha512-2flvHB5wYMrXa/ZrnwxejajNVB1PgWnnZv+9NbqNfk4pYhnsHqjjVl+4JnAUGVZqhckP8Xw6t+jj78QvR9hh0Q==} + /@fastify/autoload/5.4.0: + resolution: {integrity: sha512-aUct8AERleLb6ZVqIFW3qdwJA2/ILVDTQyCr0qD909RMP4axcmIhJmV9iDAzDqpUDipZ29I+Hp43+PiJsk3oWw==} dependencies: pkg-up: 3.1.0 dev: false @@ -327,8 +336,8 @@ packages: text-decoding: 1.0.0 dev: false - /@fastify/cookie/8.1.0: - resolution: {integrity: sha512-+BxpyK4KLAjDpXdWxOjl8yaKtAoqYZR+CE9+cNtdMDoACb8hcpGx9npkrdINl62EpCu06oIPluq8A4NUsi78ZA==} + /@fastify/cookie/8.3.0: + resolution: {integrity: sha512-P9hY9GO11L20TnZ33XN3i0bt+3x0zaT7S0ohAzWO950E9PB2xnNhLYzPFJIGFi5AVN0yr5+/iZhWxeYvR6KCzg==} dependencies: cookie: 0.5.0 fastify-plugin: 4.2.1 @@ -356,8 +365,8 @@ packages: resolution: {integrity: sha512-dPRyT40GiHRzSCll3/Jn2nPe25+E1VXc9tDwRAIKwFCxd5Np5wzgz1tmooWG3sV0qKgrBibihVoCna2ru4SEFg==} dev: false - /@fastify/fast-json-stringify-compiler/4.0.0: - resolution: {integrity: sha512-9pCi6c6tmGt/qfuf2koZQuSIG6ckP9q3mz+JoMmAq9eQ4EtA92sWoK7E0LJUn2FFTS/hp5kag+4+dWsV5ZfcXg==} + /@fastify/fast-json-stringify-compiler/4.1.0: + resolution: {integrity: sha512-cTKBV2J9+u6VaKDhX7HepSfPSzw+F+TSd+k0wzifj4rG+4E5PjSFJCk19P8R6tr/72cuzgGd+mbB3jFT6lvAgw==} dependencies: fast-json-stringify: 5.0.5 dev: false @@ -494,7 +503,7 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - '@types/node': 18.7.13 + '@types/node': 18.7.23 playwright-core: 1.25.1 dev: true @@ -502,8 +511,8 @@ packages: resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} dev: true - /@prisma/client/4.3.1_prisma@4.3.1: - resolution: {integrity: sha512-FA0/d1VMJNWqzU7WVWTNWJ+lGOLR9JUBnF73GdIPAEVo/6dWk4gHx0EmgeU+SMv4MZoxgOeTBJF2azhg7x0hMw==} + /@prisma/client/4.4.0_prisma@4.4.0: + resolution: {integrity: sha512-ciKOP246x1xwr04G9ajHlJ4pkmtu9Q6esVyqVBO0QJihaKQIUvbPjClp17IsRJyxqNpFm4ScbOc/s9DUzKHINQ==} engines: {node: '>=14.17'} requiresBuild: true peerDependencies: @@ -512,16 +521,16 @@ packages: prisma: optional: true dependencies: - '@prisma/engines-version': 4.3.0-32.c875e43600dfe042452e0b868f7a48b817b9640b - prisma: 4.3.1 + '@prisma/engines-version': 4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6 + prisma: 4.4.0 dev: false - /@prisma/engines-version/4.3.0-32.c875e43600dfe042452e0b868f7a48b817b9640b: - resolution: {integrity: sha512-8yWpXkQRmiSfsi2Wb/ZS5D3RFbeu/btL9Pm/gdF4phB0Lo5KGsDFMxFMgaD64mwED2nHc8ZaEJg/+4Jymb9Znw==} + /@prisma/engines-version/4.4.0-66.f352a33b70356f46311da8b00d83386dd9f145d6: + resolution: {integrity: sha512-P5v/PuEIJLYXZUZBvOLPqoyCW+m6StNqHdiR6te++gYVODpPdLakks5HVx3JaZIY+LwR02juJWFlwpc9Eog/ug==} dev: false - /@prisma/engines/4.3.1: - resolution: {integrity: sha512-4JF/uMaEDAPdcdZNOrnzE3BvrbGpjgV0FcPT3EVoi6I86fWkloqqxBt+KcK/+fIRR0Pxj66uGR9wVH8U1Y13JA==} + /@prisma/engines/4.4.0: + resolution: {integrity: sha512-Fpykccxlt9MHrAs/QpPGpI2nOiRxuLA+LiApgA59ibbf24YICZIMWd3SI2YD+q0IAIso0jCGiHhirAIbxK3RyQ==} requiresBuild: true /@rollup/pluginutils/4.2.1: @@ -672,12 +681,12 @@ packages: resolution: {integrity: sha512-XwVteWQx/XkfRPyaGkw8dEbrCAkoRZ73pI3XznUYIpzbCfpQB3UnDlR5TnmdhetlT889tUJGF8QWo9xrgTpsiA==} dev: true - /@types/node/18.7.13: - resolution: {integrity: sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==} - dev: true - /@types/node/18.7.15: resolution: {integrity: sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==} + dev: false + + /@types/node/18.7.23: + resolution: {integrity: sha512-DWNcCHolDq0ZKGizjx2DZjR/PqsYwAcYUJmfMWqtVU2MBMG5Mo+xFZrhGId5r/O5HOuMPyQEcM6KUBp5lBZZBg==} /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -696,7 +705,7 @@ packages: /@types/sass/1.43.1: resolution: {integrity: sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==} dependencies: - '@types/node': 18.7.13 + '@types/node': 18.7.23 dev: true /@typescript-eslint/eslint-plugin/5.36.1_lbwfnm54o3pmr3ypeqp3btnera: @@ -726,8 +735,8 @@ packages: - supports-color dev: true - /@typescript-eslint/eslint-plugin/5.36.2_iurrlxgqcgk5svigzxakafpeuu: - resolution: {integrity: sha512-OwwR8LRwSnI98tdc2z7mJYgY60gf7I9ZfGjN5EjCwwns9bdTuQfAXcsjSB2wSQ/TVNYSGKf4kzVXbNGaZvwiXw==} + /@typescript-eslint/eslint-plugin/5.38.1_pvy74qhkkcd5sngj4qereqoplm: + resolution: {integrity: sha512-ky7EFzPhqz3XlhS7vPOoMDaQnQMn+9o5ICR9CPr/6bw8HrFkzhMSxuA3gRfiJVvs7geYrSeawGJjZoZQKCOglQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -737,18 +746,17 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.36.2_yqf6kl63nyoq5megxukfnom5rm - '@typescript-eslint/scope-manager': 5.36.2 - '@typescript-eslint/type-utils': 5.36.2_yqf6kl63nyoq5megxukfnom5rm - '@typescript-eslint/utils': 5.36.2_yqf6kl63nyoq5megxukfnom5rm + '@typescript-eslint/parser': 5.38.1_nwctkcr5uyxf47tw7zkgamxmfq + '@typescript-eslint/scope-manager': 5.38.1 + '@typescript-eslint/type-utils': 5.38.1_nwctkcr5uyxf47tw7zkgamxmfq + '@typescript-eslint/utils': 5.38.1_nwctkcr5uyxf47tw7zkgamxmfq debug: 4.3.4 eslint: 8.23.0 - functional-red-black-tree: 1.0.1 ignore: 5.2.0 regexpp: 3.2.0 semver: 7.3.7 - tsutils: 3.21.0_typescript@4.8.2 - typescript: 4.8.2 + tsutils: 3.21.0_typescript@4.8.4 + typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true @@ -773,8 +781,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.36.2_yqf6kl63nyoq5megxukfnom5rm: - resolution: {integrity: sha512-qS/Kb0yzy8sR0idFspI9Z6+t7mqk/oRjnAYfewG+VN73opAUvmYL3oPIMmgOX6CnQS6gmVIXGshlb5RY/R22pA==} + /@typescript-eslint/parser/5.38.1_nwctkcr5uyxf47tw7zkgamxmfq: + resolution: {integrity: sha512-LDqxZBVFFQnQRz9rUZJhLmox+Ep5kdUmLatLQnCRR6523YV+XhRjfYzStQ4MheFA8kMAfUlclHSbu+RKdRwQKw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -783,12 +791,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.36.2 - '@typescript-eslint/types': 5.36.2 - '@typescript-eslint/typescript-estree': 5.36.2_typescript@4.8.2 + '@typescript-eslint/scope-manager': 5.38.1 + '@typescript-eslint/types': 5.38.1 + '@typescript-eslint/typescript-estree': 5.38.1_typescript@4.8.4 debug: 4.3.4 eslint: 8.23.0 - typescript: 4.8.2 + typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true @@ -801,12 +809,12 @@ packages: '@typescript-eslint/visitor-keys': 5.36.1 dev: true - /@typescript-eslint/scope-manager/5.36.2: - resolution: {integrity: sha512-cNNP51L8SkIFSfce8B1NSUBTJTu2Ts4nWeWbFrdaqjmn9yKrAaJUBHkyTZc0cL06OFHpb+JZq5AUHROS398Orw==} + /@typescript-eslint/scope-manager/5.38.1: + resolution: {integrity: sha512-BfRDq5RidVU3RbqApKmS7RFMtkyWMM50qWnDAkKgQiezRtLKsoyRKIvz1Ok5ilRWeD9IuHvaidaLxvGx/2eqTQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.36.2 - '@typescript-eslint/visitor-keys': 5.36.2 + '@typescript-eslint/types': 5.38.1 + '@typescript-eslint/visitor-keys': 5.38.1 dev: true /@typescript-eslint/type-utils/5.36.1_yqf6kl63nyoq5megxukfnom5rm: @@ -829,8 +837,8 @@ packages: - supports-color dev: true - /@typescript-eslint/type-utils/5.36.2_yqf6kl63nyoq5megxukfnom5rm: - resolution: {integrity: sha512-rPQtS5rfijUWLouhy6UmyNquKDPhQjKsaKH0WnY6hl/07lasj8gPaH2UD8xWkePn6SC+jW2i9c2DZVDnL+Dokw==} + /@typescript-eslint/type-utils/5.38.1_nwctkcr5uyxf47tw7zkgamxmfq: + resolution: {integrity: sha512-UU3j43TM66gYtzo15ivK2ZFoDFKKP0k03MItzLdq0zV92CeGCXRfXlfQX5ILdd4/DSpHkSjIgLLLh1NtkOJOAw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -839,12 +847,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.36.2_typescript@4.8.2 - '@typescript-eslint/utils': 5.36.2_yqf6kl63nyoq5megxukfnom5rm + '@typescript-eslint/typescript-estree': 5.38.1_typescript@4.8.4 + '@typescript-eslint/utils': 5.38.1_nwctkcr5uyxf47tw7zkgamxmfq debug: 4.3.4 eslint: 8.23.0 - tsutils: 3.21.0_typescript@4.8.2 - typescript: 4.8.2 + tsutils: 3.21.0_typescript@4.8.4 + typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true @@ -854,8 +862,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/types/5.36.2: - resolution: {integrity: sha512-9OJSvvwuF1L5eS2EQgFUbECb99F0mwq501w0H0EkYULkhFa19Qq7WFbycdw1PexAc929asupbZcgjVIe6OK/XQ==} + /@typescript-eslint/types/5.38.1: + resolution: {integrity: sha512-QTW1iHq1Tffp9lNfbfPm4WJabbvpyaehQ0SrvVK2yfV79SytD9XDVxqiPvdrv2LK7DGSFo91TB2FgWanbJAZXg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -880,8 +888,8 @@ packages: - supports-color dev: true - /@typescript-eslint/typescript-estree/5.36.2_typescript@4.8.2: - resolution: {integrity: sha512-8fyH+RfbKc0mTspfuEjlfqA4YywcwQK2Amcf6TDOwaRLg7Vwdu4bZzyvBZp4bjt1RRjQ5MDnOZahxMrt2l5v9w==} + /@typescript-eslint/typescript-estree/5.38.1_typescript@4.8.4: + resolution: {integrity: sha512-99b5e/Enoe8fKMLdSuwrfH/C0EIbpUWmeEKHmQlGZb8msY33qn1KlkFww0z26o5Omx7EVjzVDCWEfrfCDHfE7g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -889,14 +897,14 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.36.2 - '@typescript-eslint/visitor-keys': 5.36.2 + '@typescript-eslint/types': 5.38.1 + '@typescript-eslint/visitor-keys': 5.38.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 semver: 7.3.7 - tsutils: 3.21.0_typescript@4.8.2 - typescript: 4.8.2 + tsutils: 3.21.0_typescript@4.8.4 + typescript: 4.8.4 transitivePeerDependencies: - supports-color dev: true @@ -919,16 +927,16 @@ packages: - typescript dev: true - /@typescript-eslint/utils/5.36.2_yqf6kl63nyoq5megxukfnom5rm: - resolution: {integrity: sha512-uNcopWonEITX96v9pefk9DC1bWMdkweeSsewJ6GeC7L6j2t0SJywisgkr9wUTtXk90fi2Eljj90HSHm3OGdGRg==} + /@typescript-eslint/utils/5.38.1_nwctkcr5uyxf47tw7zkgamxmfq: + resolution: {integrity: sha512-oIuUiVxPBsndrN81oP8tXnFa/+EcZ03qLqPDfSZ5xIJVm7A9V0rlkQwwBOAGtrdN70ZKDlKv+l1BeT4eSFxwXA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.36.2 - '@typescript-eslint/types': 5.36.2 - '@typescript-eslint/typescript-estree': 5.36.2_typescript@4.8.2 + '@typescript-eslint/scope-manager': 5.38.1 + '@typescript-eslint/types': 5.38.1 + '@typescript-eslint/typescript-estree': 5.38.1_typescript@4.8.4 eslint: 8.23.0 eslint-scope: 5.1.1 eslint-utils: 3.0.0_eslint@8.23.0 @@ -945,11 +953,11 @@ packages: eslint-visitor-keys: 3.3.0 dev: true - /@typescript-eslint/visitor-keys/5.36.2: - resolution: {integrity: sha512-BtRvSR6dEdrNt7Net2/XDjbYKU5Ml6GqJgVfXT0CxTCJlnIqK7rAGreuWKMT2t8cFUT2Msv5oxw0GMRD7T5J7A==} + /@typescript-eslint/visitor-keys/5.38.1: + resolution: {integrity: sha512-bSHr1rRxXt54+j2n4k54p4fj8AHJ49VDWtjpImOpzQj4qjAiOpPni+V1Tyajh19Api1i844F757cur8wH3YvOA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.36.2 + '@typescript-eslint/types': 5.38.1 eslint-visitor-keys: 3.3.0 dev: true @@ -1162,13 +1170,12 @@ packages: postcss: 8.4.16 postcss-value-parser: 4.2.0 - /avvio/8.1.3: - resolution: {integrity: sha512-tl9TC0yDRKzP6gFLkrInqPyx8AkfBC/0QRnwkE9Jo31+OJjLrE/73GJuE0QgSB0Vpv38CTJJZGqU9hczowclWw==} + /avvio/8.2.0: + resolution: {integrity: sha512-bbCQdg7bpEv6kGH41RO/3B2/GMMmJSo2iBK+X8AWN9mujtfUipMDfIjsgHCfpnKqoGEQrrmCDKSa5OQ19+fDmg==} dependencies: archy: 1.0.0 debug: 4.3.4 fastq: 1.13.0 - queue-microtask: 1.2.3 transitivePeerDependencies: - supports-color dev: false @@ -2012,6 +2019,24 @@ packages: engines: {node: '>=10.6.0'} dev: false + /cacheable-lookup/7.0.0: + resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} + engines: {node: '>=14.16'} + dev: false + + /cacheable-request/10.2.1: + resolution: {integrity: sha512-3tLJyBjGuXw1s5gpKFSG3iS4kaKT4id04dZi98wzHQp/8cqZNweBnrF9J+rrlvrf4M53OdtDGNctNHFias8BEA==} + engines: {node: '>=14.16'} + dependencies: + '@types/http-cache-semantics': 4.0.1 + get-stream: 6.0.1 + http-cache-semantics: 4.1.0 + keyv: 4.5.0 + mimic-response: 4.0.0 + normalize-url: 7.2.0 + responselike: 3.0.0 + dev: false + /cacheable-request/7.0.2: resolution: {integrity: sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==} engines: {node: '>=8'} @@ -2685,8 +2710,8 @@ packages: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} dev: true - /esbuild-android-64/0.15.7: - resolution: {integrity: sha512-p7rCvdsldhxQr3YHxptf1Jcd86dlhvc3EQmQJaZzzuAxefO9PvcI0GLOa5nCWem1AJ8iMRu9w0r5TG8pHmbi9w==} + /esbuild-android-64/0.15.10: + resolution: {integrity: sha512-UI7krF8OYO1N7JYTgLT9ML5j4+45ra3amLZKx7LO3lmLt1Ibn8t3aZbX5Pu4BjWiqDuJ3m/hsvhPhK/5Y/YpnA==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -2694,8 +2719,8 @@ packages: dev: true optional: true - /esbuild-android-arm64/0.15.7: - resolution: {integrity: sha512-L775l9ynJT7rVqRM5vo+9w5g2ysbOCfsdLV4CWanTZ1k/9Jb3IYlQ06VCI1edhcosTYJRECQFJa3eAvkx72eyQ==} + /esbuild-android-arm64/0.15.10: + resolution: {integrity: sha512-EOt55D6xBk5O05AK8brXUbZmoFj4chM8u3riGflLa6ziEoVvNjRdD7Cnp82NHQGfSHgYR06XsPI8/sMuA/cUwg==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -2703,8 +2728,8 @@ packages: dev: true optional: true - /esbuild-darwin-64/0.15.7: - resolution: {integrity: sha512-KGPt3r1c9ww009t2xLB6Vk0YyNOXh7hbjZ3EecHoVDxgtbUlYstMPDaReimKe6eOEfyY4hBEEeTvKwPsiH5WZg==} + /esbuild-darwin-64/0.15.10: + resolution: {integrity: sha512-hbDJugTicqIm+WKZgp208d7FcXcaK8j2c0l+fqSJ3d2AzQAfjEYDRM3Z2oMeqSJ9uFxyj/muSACLdix7oTstRA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -2712,8 +2737,8 @@ packages: dev: true optional: true - /esbuild-darwin-arm64/0.15.7: - resolution: {integrity: sha512-kBIHvtVqbSGajN88lYMnR3aIleH3ABZLLFLxwL2stiuIGAjGlQW741NxVTpUHQXUmPzxi6POqc9npkXa8AcSZQ==} + /esbuild-darwin-arm64/0.15.10: + resolution: {integrity: sha512-M1t5+Kj4IgSbYmunf2BB6EKLkWUq+XlqaFRiGOk8bmBapu9bCDrxjf4kUnWn59Dka3I27EiuHBKd1rSO4osLFQ==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -2721,8 +2746,8 @@ packages: dev: true optional: true - /esbuild-freebsd-64/0.15.7: - resolution: {integrity: sha512-hESZB91qDLV5MEwNxzMxPfbjAhOmtfsr9Wnuci7pY6TtEh4UDuevmGmkUIjX/b+e/k4tcNBMf7SRQ2mdNuK/HQ==} + /esbuild-freebsd-64/0.15.10: + resolution: {integrity: sha512-KMBFMa7C8oc97nqDdoZwtDBX7gfpolkk6Bcmj6YFMrtCMVgoU/x2DI1p74DmYl7CSS6Ppa3xgemrLrr5IjIn0w==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -2730,8 +2755,8 @@ packages: dev: true optional: true - /esbuild-freebsd-arm64/0.15.7: - resolution: {integrity: sha512-dLFR0ChH5t+b3J8w0fVKGvtwSLWCv7GYT2Y2jFGulF1L5HftQLzVGN+6pi1SivuiVSmTh28FwUhi9PwQicXI6Q==} + /esbuild-freebsd-arm64/0.15.10: + resolution: {integrity: sha512-m2KNbuCX13yQqLlbSojFMHpewbn8wW5uDS6DxRpmaZKzyq8Dbsku6hHvh2U+BcLwWY4mpgXzFUoENEf7IcioGg==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -2739,8 +2764,8 @@ packages: dev: true optional: true - /esbuild-linux-32/0.15.7: - resolution: {integrity: sha512-v3gT/LsONGUZcjbt2swrMjwxo32NJzk+7sAgtxhGx1+ZmOFaTRXBAi1PPfgpeo/J//Un2jIKm/I+qqeo4caJvg==} + /esbuild-linux-32/0.15.10: + resolution: {integrity: sha512-guXrwSYFAvNkuQ39FNeV4sNkNms1bLlA5vF1H0cazZBOLdLFIny6BhT+TUbK/hdByMQhtWQ5jI9VAmPKbVPu1w==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -2748,8 +2773,8 @@ packages: dev: true optional: true - /esbuild-linux-64/0.15.7: - resolution: {integrity: sha512-LxXEfLAKwOVmm1yecpMmWERBshl+Kv5YJ/1KnyAr6HRHFW8cxOEsEfisD3sVl/RvHyW//lhYUVSuy9jGEfIRAQ==} + /esbuild-linux-64/0.15.10: + resolution: {integrity: sha512-jd8XfaSJeucMpD63YNMO1JCrdJhckHWcMv6O233bL4l6ogQKQOxBYSRP/XLWP+6kVTu0obXovuckJDcA0DKtQA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -2757,8 +2782,8 @@ packages: dev: true optional: true - /esbuild-linux-arm/0.15.7: - resolution: {integrity: sha512-JKgAHtMR5f75wJTeuNQbyznZZa+pjiUHV7sRZp42UNdyXC6TiUYMW/8z8yIBAr2Fpad8hM1royZKQisqPABPvQ==} + /esbuild-linux-arm/0.15.10: + resolution: {integrity: sha512-6N8vThLL/Lysy9y4Ex8XoLQAlbZKUyExCWyayGi2KgTBelKpPgj6RZnUaKri0dHNPGgReJriKVU6+KDGQwn10A==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -2766,8 +2791,8 @@ packages: dev: true optional: true - /esbuild-linux-arm64/0.15.7: - resolution: {integrity: sha512-P3cfhudpzWDkglutWgXcT2S7Ft7o2e3YDMrP1n0z2dlbUZghUkKCyaWw0zhp4KxEEzt/E7lmrtRu/pGWnwb9vw==} + /esbuild-linux-arm64/0.15.10: + resolution: {integrity: sha512-GByBi4fgkvZFTHFDYNftu1DQ1GzR23jws0oWyCfhnI7eMOe+wgwWrc78dbNk709Ivdr/evefm2PJiUBMiusS1A==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -2775,8 +2800,8 @@ packages: dev: true optional: true - /esbuild-linux-mips64le/0.15.7: - resolution: {integrity: sha512-T7XKuxl0VpeFLCJXub6U+iybiqh0kM/bWOTb4qcPyDDwNVhLUiPcGdG2/0S7F93czUZOKP57YiLV8YQewgLHKw==} + /esbuild-linux-mips64le/0.15.10: + resolution: {integrity: sha512-BxP+LbaGVGIdQNJUNF7qpYjEGWb0YyHVSKqYKrn+pTwH/SiHUxFyJYSP3pqkku61olQiSBnSmWZ+YUpj78Tw7Q==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -2784,8 +2809,8 @@ packages: dev: true optional: true - /esbuild-linux-ppc64le/0.15.7: - resolution: {integrity: sha512-6mGuC19WpFN7NYbecMIJjeQgvDb5aMuvyk0PDYBJrqAEMkTwg3Z98kEKuCm6THHRnrgsdr7bp4SruSAxEM4eJw==} + /esbuild-linux-ppc64le/0.15.10: + resolution: {integrity: sha512-LoSQCd6498PmninNgqd/BR7z3Bsk/mabImBWuQ4wQgmQEeanzWd5BQU2aNi9mBURCLgyheuZS6Xhrw5luw3OkQ==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -2793,8 +2818,8 @@ packages: dev: true optional: true - /esbuild-linux-riscv64/0.15.7: - resolution: {integrity: sha512-uUJsezbswAYo/X7OU/P+PuL/EI9WzxsEQXDekfwpQ23uGiooxqoLFAPmXPcRAt941vjlY9jtITEEikWMBr+F/g==} + /esbuild-linux-riscv64/0.15.10: + resolution: {integrity: sha512-Lrl9Cr2YROvPV4wmZ1/g48httE8z/5SCiXIyebiB5N8VT7pX3t6meI7TQVHw/wQpqP/AF4SksDuFImPTM7Z32Q==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -2802,8 +2827,8 @@ packages: dev: true optional: true - /esbuild-linux-s390x/0.15.7: - resolution: {integrity: sha512-+tO+xOyTNMc34rXlSxK7aCwJgvQyffqEM5MMdNDEeMU3ss0S6wKvbBOQfgd5jRPblfwJ6b+bKiz0g5nABpY0QQ==} + /esbuild-linux-s390x/0.15.10: + resolution: {integrity: sha512-ReP+6q3eLVVP2lpRrvl5EodKX7EZ1bS1/z5j6hsluAlZP5aHhk6ghT6Cq3IANvvDdscMMCB4QEbI+AjtvoOFpA==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -2811,8 +2836,8 @@ packages: dev: true optional: true - /esbuild-netbsd-64/0.15.7: - resolution: {integrity: sha512-yVc4Wz+Pu3cP5hzm5kIygNPrjar/v5WCSoRmIjCPWfBVJkZNb5brEGKUlf+0Y759D48BCWa0WHrWXaNy0DULTQ==} + /esbuild-netbsd-64/0.15.10: + resolution: {integrity: sha512-iGDYtJCMCqldMskQ4eIV+QSS/CuT7xyy9i2/FjpKvxAuCzrESZXiA1L64YNj6/afuzfBe9i8m/uDkFHy257hTw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -2820,8 +2845,8 @@ packages: dev: true optional: true - /esbuild-openbsd-64/0.15.7: - resolution: {integrity: sha512-GsimbwC4FSR4lN3wf8XmTQ+r8/0YSQo21rWDL0XFFhLHKlzEA4SsT1Tl8bPYu00IU6UWSJ+b3fG/8SB69rcuEQ==} + /esbuild-openbsd-64/0.15.10: + resolution: {integrity: sha512-ftMMIwHWrnrYnvuJQRJs/Smlcb28F9ICGde/P3FUTCgDDM0N7WA0o9uOR38f5Xe2/OhNCgkjNeb7QeaE3cyWkQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -2829,8 +2854,8 @@ packages: dev: true optional: true - /esbuild-sunos-64/0.15.7: - resolution: {integrity: sha512-8CDI1aL/ts0mDGbWzjEOGKXnU7p3rDzggHSBtVryQzkSOsjCHRVe0iFYUuhczlxU1R3LN/E7HgUO4NXzGGP/Ag==} + /esbuild-sunos-64/0.15.10: + resolution: {integrity: sha512-mf7hBL9Uo2gcy2r3rUFMjVpTaGpFJJE5QTDDqUFf1632FxteYANffDZmKbqX0PfeQ2XjUDE604IcE7OJeoHiyg==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -2838,8 +2863,8 @@ packages: dev: true optional: true - /esbuild-windows-32/0.15.7: - resolution: {integrity: sha512-cOnKXUEPS8EGCzRSFa1x6NQjGhGsFlVgjhqGEbLTPsA7x4RRYiy2RKoArNUU4iR2vHmzqS5Gr84MEumO/wxYKA==} + /esbuild-windows-32/0.15.10: + resolution: {integrity: sha512-ttFVo+Cg8b5+qHmZHbEc8Vl17kCleHhLzgT8X04y8zudEApo0PxPg9Mz8Z2cKH1bCYlve1XL8LkyXGFjtUYeGg==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -2847,8 +2872,8 @@ packages: dev: true optional: true - /esbuild-windows-64/0.15.7: - resolution: {integrity: sha512-7MI08Ec2sTIDv+zH6StNBKO+2hGUYIT42GmFyW6MBBWWtJhTcQLinKS6ldIN1d52MXIbiJ6nXyCJ+LpL4jBm3Q==} + /esbuild-windows-64/0.15.10: + resolution: {integrity: sha512-2H0gdsyHi5x+8lbng3hLbxDWR7mKHWh5BXZGKVG830KUmXOOWFE2YKJ4tHRkejRduOGDrBvHBriYsGtmTv3ntA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -2856,8 +2881,8 @@ packages: dev: true optional: true - /esbuild-windows-arm64/0.15.7: - resolution: {integrity: sha512-R06nmqBlWjKHddhRJYlqDd3Fabx9LFdKcjoOy08YLimwmsswlFBJV4rXzZCxz/b7ZJXvrZgj8DDv1ewE9+StMw==} + /esbuild-windows-arm64/0.15.10: + resolution: {integrity: sha512-S+th4F+F8VLsHLR0zrUcG+Et4hx0RKgK1eyHc08kztmLOES8BWwMiaGdoW9hiXuzznXQ0I/Fg904MNbr11Nktw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -2865,33 +2890,34 @@ packages: dev: true optional: true - /esbuild/0.15.7: - resolution: {integrity: sha512-7V8tzllIbAQV1M4QoE52ImKu8hT/NLGlGXkiDsbEU5PS6K8Mn09ZnYoS+dcmHxOS9CRsV4IRAMdT3I67IyUNXw==} + /esbuild/0.15.10: + resolution: {integrity: sha512-N7wBhfJ/E5fzn/SpNgX+oW2RLRjwaL8Y0ezqNqhjD6w0H2p0rDuEz2FKZqpqLnO8DCaWumKe8dsC/ljvVSSxng==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/linux-loong64': 0.15.7 - esbuild-android-64: 0.15.7 - esbuild-android-arm64: 0.15.7 - esbuild-darwin-64: 0.15.7 - esbuild-darwin-arm64: 0.15.7 - esbuild-freebsd-64: 0.15.7 - esbuild-freebsd-arm64: 0.15.7 - esbuild-linux-32: 0.15.7 - esbuild-linux-64: 0.15.7 - esbuild-linux-arm: 0.15.7 - esbuild-linux-arm64: 0.15.7 - esbuild-linux-mips64le: 0.15.7 - esbuild-linux-ppc64le: 0.15.7 - esbuild-linux-riscv64: 0.15.7 - esbuild-linux-s390x: 0.15.7 - esbuild-netbsd-64: 0.15.7 - esbuild-openbsd-64: 0.15.7 - esbuild-sunos-64: 0.15.7 - esbuild-windows-32: 0.15.7 - esbuild-windows-64: 0.15.7 - esbuild-windows-arm64: 0.15.7 + '@esbuild/android-arm': 0.15.10 + '@esbuild/linux-loong64': 0.15.10 + esbuild-android-64: 0.15.10 + esbuild-android-arm64: 0.15.10 + esbuild-darwin-64: 0.15.10 + esbuild-darwin-arm64: 0.15.10 + esbuild-freebsd-64: 0.15.10 + esbuild-freebsd-arm64: 0.15.10 + esbuild-linux-32: 0.15.10 + esbuild-linux-64: 0.15.10 + esbuild-linux-arm: 0.15.10 + esbuild-linux-arm64: 0.15.10 + esbuild-linux-mips64le: 0.15.10 + esbuild-linux-ppc64le: 0.15.10 + esbuild-linux-riscv64: 0.15.10 + esbuild-linux-s390x: 0.15.10 + esbuild-netbsd-64: 0.15.10 + esbuild-openbsd-64: 0.15.10 + esbuild-sunos-64: 0.15.10 + esbuild-windows-32: 0.15.10 + esbuild-windows-64: 0.15.10 + esbuild-windows-arm64: 0.15.10 dev: true /escalade/3.1.1: @@ -3117,6 +3143,10 @@ packages: tmp: 0.0.33 dev: true + /fast-decode-uri-component/1.0.1: + resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} + dev: false + /fast-deep-equal/3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} @@ -3161,6 +3191,12 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true + /fast-querystring/1.0.0: + resolution: {integrity: sha512-3LQi62IhQoDlmt4ULCYmh17vRO2EtS7hTSsG4WwoKWgV7GLMKBOecEh+aiavASnLx8I2y89OD33AGLo0ccRhzA==} + dependencies: + fast-decode-uri-component: 1.0.1 + dev: false + /fast-redact/3.1.1: resolution: {integrity: sha512-odVmjC8x8jNeMZ3C+rPMESzXVSEU8tSWSHv9HFxP2mm89G/1WwqhrerJDQm9Zus8X6aoRgQDThKqptdNA6bt+A==} engines: {node: '>=6'} @@ -3185,23 +3221,23 @@ packages: resolution: {integrity: sha512-dlGKiwLzRBKkEf5J5ho0uAD/Jdv8GQVUbriB3tAX3ehRUXE4gTV3lRd5inEg9li1aLzb0EGj8y2K4/8g1TN06g==} dev: false - /fastify/4.5.3: - resolution: {integrity: sha512-Q8Zvkmg7GnioMCDX1jT2Q7iRqjywlnDZ1735D2Ipf7ashCM/3/bqPKv2Jo1ZF2iDExct2eP1C/tdhcj0GG/OuQ==} + /fastify/4.7.0: + resolution: {integrity: sha512-FK3WT6arZOd2Fm696vIn90DOFr1f8QZbFcvUzYRPJTBV0pzm1xN8Y3n9yegtv1ajAxpdTwuLhB10Wwb/ptMRqQ==} dependencies: - '@fastify/ajv-compiler': 3.1.1 + '@fastify/ajv-compiler': 3.3.1 '@fastify/error': 3.0.0 - '@fastify/fast-json-stringify-compiler': 4.0.0 + '@fastify/fast-json-stringify-compiler': 4.1.0 abstract-logging: 2.0.1 - avvio: 8.1.3 - find-my-way: 7.0.0 - light-my-request: 5.5.1 - pino: 8.1.0 + avvio: 8.2.0 + find-my-way: 7.2.0 + light-my-request: 5.6.1 + pino: 8.6.1 process-warning: 2.0.0 proxy-addr: 2.0.7 rfdc: 1.3.0 - secure-json-parse: 2.4.0 + secure-json-parse: 2.5.0 semver: 7.3.7 - tiny-lru: 8.0.2 + tiny-lru: 9.0.2 transitivePeerDependencies: - supports-color dev: false @@ -3256,11 +3292,12 @@ packages: dependencies: to-regex-range: 5.0.1 - /find-my-way/7.0.0: - resolution: {integrity: sha512-NHVohYPYRXgj6jxXVRwm4iMQjA2ggJpyewHz7Nq7hvBnHoYJJIyHuxNzs8QLPTLQfoqxZzls2g6Zm79XMbhXjA==} + /find-my-way/7.2.0: + resolution: {integrity: sha512-27SFA5sSYDYFZCQ/7SSJB0yhStTP/qxKP1OEC8feZvkHFRuD3fGcQ97Y+0w8HpKTDfMYWXGU3h2ETRGt5zPWyA==} engines: {node: '>=14'} dependencies: fast-deep-equal: 3.1.3 + fast-querystring: 1.0.0 safe-regex2: 2.0.0 dev: false @@ -3339,8 +3376,8 @@ packages: engines: {node: '>= 14.17'} dev: false - /form-data-encoder/2.1.0: - resolution: {integrity: sha512-njK60LnfhfDWy+AEUIf9ZQNRAcmXCdDfiNOm2emuPtzwh7U9k/mo9F3S54aPiaZ3vhqUjikVLfcPg2KuBddskQ==} + /form-data-encoder/2.1.2: + resolution: {integrity: sha512-FCaIOVTRA9E0siY6FeXid7D5yrCqpsErplUkE2a1BEiKj1BE9z6FbKB4ntDTwC4NVLie9p+4E9nX4mWwEOT05A==} engines: {node: '>= 14.17'} dev: false @@ -3550,17 +3587,16 @@ packages: responselike: 2.0.0 dev: false - /got/12.4.1: - resolution: {integrity: sha512-Sz1ojLt4zGNkcftIyJKnulZT/yEDvifhUjccHA8QzOuTgPs/+njXYNMFE3jR4/2OODQSSbH8SdnoLCkbh41ieA==} + /got/12.5.1: + resolution: {integrity: sha512-sD16AK8cCyUoPtKr/NMvLTFFa+T3i3S+zoiuvhq0HP2YiqBZA9AtlBjAdsQBsLBK7slPuvmfE0OxhGi7N5dD4w==} engines: {node: '>=14.16'} dependencies: '@sindresorhus/is': 5.3.0 '@szmarczak/http-timer': 5.0.1 - '@types/cacheable-request': 6.0.2 - cacheable-lookup: 6.0.4 - cacheable-request: 7.0.2 + cacheable-lookup: 7.0.0 + cacheable-request: 10.2.1 decompress-response: 6.0.0 - form-data-encoder: 2.1.0 + form-data-encoder: 2.1.2 get-stream: 6.0.1 http2-wrapper: 2.1.11 lowercase-keys: 3.0.0 @@ -4087,6 +4123,12 @@ packages: json-buffer: 3.0.1 dev: false + /keyv/4.5.0: + resolution: {integrity: sha512-2YvuMsA+jnFGtBareKqgANOEKe1mk3HKiXu2fRmAfyxG0MJAywNhi5ttWA3PMjl4NmpyjZNbFifR2vNjW1znfA==} + dependencies: + json-buffer: 3.0.1 + dev: false + /kleur/4.1.5: resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} @@ -4106,8 +4148,8 @@ packages: type-check: 0.4.0 dev: true - /light-my-request/5.5.1: - resolution: {integrity: sha512-Zd4oZjF7axSyc5rYQsbB0qsgY4LFFviZSbEywxf7Vi5UE3y3c7tYF/GeheQjBNYY+pQ55BF8UGGJTjneoxOS1w==} + /light-my-request/5.6.1: + resolution: {integrity: sha512-sbJnC1UBRivi9L1kICr3CESb82pNiPNB3TvtdIrZZqW0Qh8uDXvoywMmWKZlihDcmw952CMICCzM+54LDf+E+g==} dependencies: cookie: 0.5.0 process-warning: 2.0.0 @@ -4367,6 +4409,11 @@ packages: engines: {node: '>=10'} dev: false + /mimic-response/4.0.0: + resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: false + /min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -4491,11 +4538,10 @@ packages: /node-releases/2.0.6: resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} - /nodemon/2.0.19: - resolution: {integrity: sha512-4pv1f2bMDj0Eeg/MhGqxrtveeQ5/G/UVe9iO6uTZzjnRluSA4PVWf8CW99LUPwGB3eNIA7zUFoP77YuI7hOc0A==} + /nodemon/2.0.20: + resolution: {integrity: sha512-Km2mWHKKY5GzRg6i1j5OxOHQtuvVsgskLfigG25yTtbyfRGn/GNvIbRyOf1PSCKJ2aT/58TiuUsuOU5UToVViw==} engines: {node: '>=8.10.0'} hasBin: true - requiresBuild: true dependencies: chokidar: 3.5.3 debug: 3.2.7_supports-color@5.5.0 @@ -4541,6 +4587,11 @@ packages: engines: {node: '>=10'} dev: false + /normalize-url/7.2.0: + resolution: {integrity: sha512-uhXOdZry0L6M2UIo9BTt7FdpBDiAGN/7oItedQwPKh8jh31ZlvC8U9Xl/EJ3aijDHaywXTW3QbZ6LuCocur1YA==} + engines: {node: '>=12.20'} + dev: false + /npm-run-all/4.1.5: resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==} engines: {node: '>= 4'} @@ -4891,29 +4942,29 @@ packages: /pino-abstract-transport/1.0.0: resolution: {integrity: sha512-c7vo5OpW4wIS42hUVcT5REsL8ZljsUfBjqV/e2sFxmFEFZiq1XLUp5EYLtuDH6PEHq9W1egWqRbnLUP5FuZmOA==} dependencies: - readable-stream: 4.0.0 + readable-stream: 4.1.0 split2: 4.1.0 dev: false - /pino-std-serializers/5.6.0: - resolution: {integrity: sha512-VdUXCw8gO+xhir7sFuoYSjTnzB+TMDGxhAC/ph3YS3sdHnXNdsK0wMtADNUltfeGkn2KDxEM21fnjF3RwXyC8A==} + /pino-std-serializers/6.0.0: + resolution: {integrity: sha512-mMMOwSKrmyl+Y12Ri2xhH1lbzQxwwpuru9VjyJpgFIH4asSj88F2csdMwN6+M5g1Ll4rmsYghHLQJw81tgZ7LQ==} dev: false - /pino/8.1.0: - resolution: {integrity: sha512-53jlxs+02UNTtF1XwVWfa0dHipBiM5GK73XhkHn8M2hUl9y3L94dNwB8BwQhpd5WdHjBkyJiO7v0LRt4SGgsPg==} + /pino/8.6.1: + resolution: {integrity: sha512-fi+V2K98eMZjQ/uEHHSiMALNrz7HaFdKNYuyA3ZUrbH0f1e8sPFDmeRGzg7ZH2q4QDxGnJPOswmqlEaTAZeDPA==} hasBin: true dependencies: atomic-sleep: 1.0.0 fast-redact: 3.1.1 on-exit-leak-free: 2.1.0 pino-abstract-transport: 1.0.0 - pino-std-serializers: 5.6.0 + pino-std-serializers: 6.0.0 process-warning: 2.0.0 quick-format-unescaped: 4.0.4 - real-require: 0.1.0 + real-require: 0.2.0 safe-stable-stringify: 2.3.1 - sonic-boom: 3.0.0 - thread-stream: 1.0.1 + sonic-boom: 3.2.0 + thread-stream: 2.2.0 dev: false /pkg-up/3.1.0: @@ -5020,13 +5071,13 @@ packages: hasBin: true dev: true - /prisma/4.3.1: - resolution: {integrity: sha512-90xo06wtqil76Xsi3mNpc4Js3SdDRR5g4qb9h+4VWY4Y8iImJY6xc3PX+C9xxTSt1lr0Q89A0MLkJjd8ax6KiQ==} + /prisma/4.4.0: + resolution: {integrity: sha512-l/QKLmLcKJQFuc+X02LyICo0NWTUVaNNZ00jKJBqwDyhwMAhboD1FWwYV50rkH4Wls0RviAJSFzkC2ZrfawpfA==} engines: {node: '>=14.17'} hasBin: true requiresBuild: true dependencies: - '@prisma/engines': 4.3.1 + '@prisma/engines': 4.4.0 /private/0.1.8: resolution: {integrity: sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==} @@ -5063,7 +5114,7 @@ packages: dependencies: aggregate-error: 4.0.1 dns-socket: 4.2.2 - got: 12.4.1 + got: 12.5.1 is-ip: 4.0.0 dev: false @@ -5172,8 +5223,8 @@ packages: dependencies: picomatch: 2.3.1 - /real-require/0.1.0: - resolution: {integrity: sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg==} + /real-require/0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} dev: false @@ -5390,6 +5441,10 @@ packages: resolution: {integrity: sha512-Q5Z/97nbON5t/L/sH6mY2EacfjVGwrCcSi5D3btRO2GZ8pf1K1UN7Z9H5J57hjVU2Qzxr1xO+FmBhOvEkzCMmg==} dev: false + /secure-json-parse/2.5.0: + resolution: {integrity: sha512-ZQruFgZnIWH+WyO9t5rWt4ZEGqCKPwhiw+YbzTwpmT9elgLrLcfuyUiSnwwjUiVy9r4VM3urtbNF1xmEh9IL2w==} + dev: false + /semver/5.7.1: resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==} hasBin: true @@ -5498,8 +5553,8 @@ packages: engines: {node: '>=8'} dev: true - /sonic-boom/3.0.0: - resolution: {integrity: sha512-p5DiZOZHbJ2ZO5MADczp5qrfOd3W5Vr2vHxfCpe7G4AzPwVOweIjbfgku8wSQUuk+Y5Yuo8W7JqRe6XKmKistg==} + /sonic-boom/3.2.0: + resolution: {integrity: sha512-SbbZ+Kqj/XIunvIAgUZRlqd6CGQYq71tRRbXR92Za8J/R3Yh4Av+TWENiSiEgnlwckYLyP0YZQWVfyNC0dzLaA==} dependencies: atomic-sleep: 1.0.0 dev: false @@ -5755,8 +5810,8 @@ packages: picocolors: 1.0.0 sade: 1.8.1 svelte: 3.50.0 - svelte-preprocess: 4.10.7_gzukngxpmlbzkiu3cz7vpamp3y - typescript: 4.8.2 + svelte-preprocess: 4.10.7_sazcndgt6y224zqwzcw3mbjejm + typescript: 4.8.4 transitivePeerDependencies: - '@babel/core' - coffeescript @@ -5841,6 +5896,58 @@ packages: typescript: 4.8.2 dev: true + /svelte-preprocess/4.10.7_sazcndgt6y224zqwzcw3mbjejm: + resolution: {integrity: sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==} + engines: {node: '>= 9.11.2'} + requiresBuild: true + peerDependencies: + '@babel/core': ^7.10.2 + coffeescript: ^2.5.1 + less: ^3.11.3 || ^4.0.0 + node-sass: '*' + postcss: ^7 || ^8 + postcss-load-config: ^2.1.0 || ^3.0.0 || ^4.0.0 + pug: ^3.0.0 + sass: ^1.26.8 + stylus: ^0.55.0 + sugarss: ^2.0.0 + svelte: ^3.23.0 + typescript: ^3.9.5 || ^4.0.0 + peerDependenciesMeta: + '@babel/core': + optional: true + coffeescript: + optional: true + less: + optional: true + node-sass: + optional: true + postcss: + optional: true + postcss-load-config: + optional: true + pug: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + typescript: + optional: true + dependencies: + '@types/pug': 2.0.6 + '@types/sass': 1.43.1 + detect-indent: 6.1.0 + magic-string: 0.25.9 + postcss: 8.4.16 + sorcery: 0.10.0 + strip-indent: 3.0.0 + svelte: 3.50.0 + typescript: 4.8.4 + dev: true + /svelte-select/4.4.7: resolution: {integrity: sha512-fIf9Z8rPI6F8naHZ9wjXT0Pv5gLyhdHAFkHFJnCfVVfELE8e82uOoF0xEVQP6Kir+b4Q5yOvNAzZ61WbSU6A0A==} dev: false @@ -5927,10 +6034,10 @@ packages: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} dev: true - /thread-stream/1.0.1: - resolution: {integrity: sha512-JuZyfzx81e5MBk8uIr8ZH76bXyjEQvbRDEkSdlV1JFBdq/rbby2RuvzBYlTBd/xCljxy6lPxrTLXzB9Jl1bNrw==} + /thread-stream/2.2.0: + resolution: {integrity: sha512-rUkv4/fnb4rqy/gGy7VuqK6wE1+1DOCOWy4RMeaV69ZHMP11tQKZvZSip1yTgrKCMZzEMcCL/bKfHvSfDHx+iQ==} dependencies: - real-require: 0.1.0 + real-require: 0.2.0 dev: false /through/2.3.8: @@ -5951,8 +6058,8 @@ packages: globrex: 0.1.2 dev: true - /tiny-lru/8.0.2: - resolution: {integrity: sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg==} + /tiny-lru/9.0.2: + resolution: {integrity: sha512-SZwDlvflOPYiImKv2Rh/1uccO+r5JsEexLU1szFsVudzk17Sj250xl75/X3aY4vINS1ZulnCPqcndvW9R0y7Yg==} engines: {node: '>=6'} dev: false @@ -5995,7 +6102,7 @@ packages: engines: {node: '>=0.10.0'} dev: true - /ts-node/10.8.2_r4hqq7vrw4pxsipnb7ha25ylfe: + /ts-node/10.8.2_gbhfbbeqrol7fxixnzbkbuanxe: resolution: {integrity: sha512-LYdGnoGddf1D6v8REPtIH+5iq/gTDuZqv2/UJUU7tKjuEU8xVZorBM+buCGNjj+pGEud+sOoM4CX3/YzINpENA==} hasBin: true peerDependencies: @@ -6014,14 +6121,14 @@ packages: '@tsconfig/node12': 1.0.9 '@tsconfig/node14': 1.0.1 '@tsconfig/node16': 1.0.2 - '@types/node': 18.7.15 + '@types/node': 18.7.23 acorn: 8.8.0 acorn-walk: 8.2.0 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 4.8.2 + typescript: 4.8.4 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: false @@ -6051,6 +6158,16 @@ packages: typescript: 4.8.2 dev: true + /tsutils/3.21.0_typescript@4.8.4: + resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} + engines: {node: '>= 6'} + peerDependencies: + typescript: '>=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta' + dependencies: + tslib: 1.14.1 + typescript: 4.8.4 + dev: true + /tweetnacl/0.14.5: resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} dev: false @@ -6086,6 +6203,12 @@ packages: resolution: {integrity: sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==} engines: {node: '>=4.2.0'} hasBin: true + dev: true + + /typescript/4.8.4: + resolution: {integrity: sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==} + engines: {node: '>=4.2.0'} + hasBin: true /typpy/2.3.11: resolution: {integrity: sha512-Jh/fykZSaxeKO0ceMAs6agki9T5TNA9kiIR6fzKbvafKpIw8UlNlHhzuqKyi5lfJJ5VojJOx9tooIbyy7vHV/g==} @@ -6165,7 +6288,7 @@ packages: terser: optional: true dependencies: - esbuild: 0.15.7 + esbuild: 0.15.10 postcss: 8.4.16 resolve: 1.22.1 rollup: 2.78.1